CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA FACULDADE DE TECNOLOGIA DE LINS PROF. ANTONIO SEABRA CURSO SUPERIOR DE TECNOLOGIA EM BANCO DE DADOS LARISSA RATTIGUERI CARDOSO LUCAS DANIEL FERREIRA PROTÓTIPO DE SISTEMA WEB PARA GESTÃO COMERCIAL, INTEGRADO A APLICATIVO ANDROID LINS/SP 2º SEMESTRE/2013 CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA FACULDADE DE TECNOLOGIA DE LINS PROF. ANTONIO SEABRA CURSO SUPERIOR DE TECNOLOGIA EM BANCO DE DADOS LARISSA RATTIGUERI CARDOSO LUCAS DANIEL FERREIRA PROTÓTIPO DE SISTEMA WEB PARA GESTÃO COMERCIAL, INTEGRADO A APLICATIVO ANDROID Trabalho de Conclusão de Curso apresentado à Faculdade de Tecnologia de Lins para obtenção do Título de Tecnólogo (a) em Banco de Dados. Orientador: Prof. Me. Paulo Augusto Nardi LINS/SP 2º SEMESTRE/2013 LARISSA RATTIGUERI CARDOSO LUCAS DANIEL FERREIRA PROTÓTIPO DE SISTEMA WEB PARA GESTÃO COMERCIAL, INTEGRADO A APLICATIVO ANDROID Trabalho de Conclusão de Curso apresentado à Faculdade de Tecnologia de Lins, como parte dos requisitos necessários para a obtenção do título de Tecnólogo(a) em Banco de Dados sob orientação do Prof. Me. Paulo Augusto Nardi. Data de aprovação: ___/___/___ ____________________________ Orientador (Prof. Me. Paulo Augusto Nardi) ______________________________ Examinador 1 (Nome do Examinador) ______________________________ Examinador 2 (Nome do Examinador) Aos meus pais Fátima e Sergio, a minha irmã Micheli e ao meu irmão Vinicius. Que sempre me deram todo o apoio que precisei. E que estão sempre ao meu lado. Larissa Rattigueri Cardoso Aos meus pais Antonio e Sandra, e ao meu irmão Danilo, que sempre incentivaram-me a estudar e apoiaram em todos os momentos. Lucas Daniel Ferreira AGRADECIMENTOS Ao fim de uma fase concluída, agradecemos primeiramente às nossas famílias por contribuírem imensamente durante todo o decorrer do curso de tecnologia em Banco de Dados. Agradecemos especialmente a nosso orientador Me Paulo Augusto Nardi, por preocupar-se para que conseguíssemos desenvolver um bom trabalho. Pela dedicação e compromisso ao nos atender e instruir para que fosse concluída cada etapa. Nosso sincero agradecimento a todos os amigos que incentivaram desde o início, principalmente ao nosso amigo Lucas Yoshioka que caminhou ao nosso lado, trocando experiências e dividindo conhecimento durante a elaboração do trabalho. Agradecemos ainda aos colegas de classe que proporcionaram momentos de descontração. Agradecemos também aos colegas de trabalho, que nos encorajaram a persistir mesmo que a situação fosse adversa. Um agradecimento especial ao nosso amigo Rafael Garcia, que colaborou imensamente com conselhos e dicas que foram de enorme auxilio durante a aplicação prática do projeto. Somos gratos também ao Paulo, gerente do Bar e Pizzaria Arena Castelli, por disponibilizar algumas horas de seu tempo para atender-nos, sendo fundamental para a análise de negócios e levantamento de requisitos do sistema. Por fim, gostaríamos de registrar o sincero agradecimento a todos os professores e funcionários da FATEC Lins, pelos ensinamentos e conselhos compartilhados, bem como o compromisso com a educação. RESUMO A finalidade do projeto é o desenvolvimento de um sistema web integrado a um aplicativo android para estabelecimentos alimentícios (lanchonetes, bares, pizzarias). O sistema tem o intuito de agilizar o processo de pedidos e fornecer um controle de fluxo caixa seguro para qualquer estabelecimento que queira automatizar seus processos. A integração entre a aplicação web e o aplicativo móvel é o foco principal do trabalho. Para o desenvolvimento do projeto foram utilizadas a linguagem de programação Java, a linguagem de marcação HTML, frameworks que auxiliam no desenvolvimento web como JSF e PrimeFaces, a ferramenta CASE Astah para a criação de diagramas, e o NetBeans e Eclipse para o desenvolvimento web e Android respectivamente. Palavras-chave: sistema web, web service, android, aplicativo. ABSTRACT The purpose of the project is the development of a web system integrated to an android application for food establishments (cafes, bars, pizzerias, etc.) to streamline the ordering process and provide a safe control of cash flow, for any establishment that wants to automate their processes which are done manually. For the development of the project was used Java language, the markup language HTML, frameworks that assist in web development as JSF and PrimeFaces, Astah CASE tool was used to create the diagrams, NetBeans and Eclipse IDEs were used to develop the system and android application respectively. Keywords: web system, web service, android application. LISTA DE ILUSTRAÇÕES Figura 3.1 – Diagrama de Caso de Uso .................................................................... 43 Figura 3.2 – Modelo Lógico ....................................................................................... 49 Figura 3.3 – Modelo Relacional ................................................................................. 50 Figura 3.4 – Diagrama de Classe .............................................................................. 51 Figura 3.5 – Diagrama de Atividade Manter Usuários ............................................... 52 Figura 3.6 – Diagrama de Atividade Login ................................................................ 53 Figura 3.7 – Diagrama de Atividade Trocar Mesa ..................................................... 53 Figura 3.8 – Diagrama de Atividade Manter Produtos............................................... 54 Figura 3.9 – Diagrama de Atividade Manter Categorias ............................................ 54 Figura 3.10 – Diagrama de Atividade Manter Caixas ................................................ 55 Figura 3.11 – Diagrama de Atividade Manter Tipos de Acréscimos .......................... 55 Figura 3.12 – Diagrama de Atividade Manter Mesas ................................................ 56 Figura 3.13 – Diagrama de Atividade Manter Vendas ............................................... 56 Figura 3.14 – Diagrama de Atividade Manter Pagamento de Itens ........................... 57 Figura 3.15 – Diagrama de Atividade Manter Itens ................................................... 58 Figura 3.16 – Diagrama de Atividade Manter Clientes .............................................. 58 Figura 3.17 – Diagrama de Atividade Manter Entregas............................................. 59 Figura 3.18 – Diagrama de Atividade Abrir Caixa ..................................................... 59 Figura 3.19 – Diagrama de Atividade Suprir Caixa ................................................... 60 Figura 3.20 – Diagrama de Atividade Retirar do Caixa ............................................. 60 Figura 3.21 – Diagrama de Atividade Lançar em Caixa ............................................ 61 Figura 3.22 – Diagrama de Atividade Fechar Caixa .................................................. 62 Figura 3.23 – Diagrama de MVC Manter Usuários.................................................... 63 Figura 3.24 – Diagrama de MVC Login ..................................................................... 63 Figura 3.25 – Diagrama de MVC Trocar Mesa .......................................................... 64 Figura 3.26 – Diagrama de MVC Manter Categorias ................................................ 64 Figura 3.27 – Diagrama de MVC Manter Produtos ................................................... 65 Figura 3.28 – Diagrama de MVC Manter Acréscimos ............................................... 65 Figura 3.29 – Diagrama de MVC Manter Caixas ....................................................... 66 Figura 3.30 – Diagrama de MVC Manter Cliente....................................................... 66 Figura 3.31 – Diagrama de MVC Manter Entrega ..................................................... 67 Figura 3.32 – Diagrama de MVC Manter Mesa ......................................................... 67 Figura 3.33 – Diagrama de MVC Manter Item ........................................................... 68 Figura 3.34 – Diagrama de MVC Manter Pagamento ............................................... 68 Figura 3.35 – Diagrama de MVC Abrir Caixa ............................................................ 69 Figura 3.36 – Diagrama de MVC Fechar Caixa......................................................... 69 Figura 3.37 – Diagrama de MVC Retirar do Caixa .................................................... 70 Figura 3.38 – Diagrama de MVC Suprir Caixa .......................................................... 70 Figura 3.39 – Diagrama de MVC Manter Lançamento .............................................. 71 Figura 3.40 – Diagrama de MVC Manter Venda ....................................................... 71 Figura 3.41 – Diagrama de Sequência Manter Usuário ............................................ 72 Figura 3.42 – Diagrama de Sequência Login ............................................................ 73 Figura 3.43 – Diagrama de Sequência Manter Lançamento ..................................... 73 Figura 3.44 – Diagrama de Sequência Manter Caixas .............................................. 74 Figura 3.45 – Diagrama de Sequência Abrir Caixa ................................................... 74 Figura 3.46 – Diagrama de Sequência Manter Categorias ....................................... 75 Figura 3.47 – Diagrama de Sequência Manter Lançamento ..................................... 75 Figura 3.48 – Diagrama de Sequência Manter Entregas .......................................... 76 Figura 3.49 – Diagrama de Sequência Suprir Caixa ................................................. 76 Figura 3.50 – Diagrama de Sequência Manter Cliente.............................................. 77 Figura 3.51 – Diagrama de Sequência Retirar do Caixa ........................................... 77 Figura 3.52 – Diagrama de Sequência Manter Mesa ................................................ 78 Figura 3.53 – Diagrama de Sequência Trocar Mesa ................................................. 78 Figura 3.54 – Diagrama de Sequência Manter Itens ................................................. 79 Figura 3.55 – Diagrama de Sequência Manter Pagamento ...................................... 79 Figura 3.56 – Diagrama de Sequência Manter Produtos .......................................... 80 Figura 3.57 – Diagrama de Sequência Manter Venda .............................................. 80 Figura 3.58 – Diagrama de Sequência Manter Acréscimos ...................................... 81 Figura 4.1 – Login ..................................................................................................... 82 Figura 4.2 – Login módulo Android ........................................................................... 83 Figura 4.3 – Cadastro de Produtos ........................................................................... 83 Figura 4.4 – Cadastro de Produtos (Opção “Novo”) .................................................. 84 Figura 4.5 – Cadastro de Produtos (Opção “Alterar”)................................................ 85 Figura 4.6 – Tela de Vendas ..................................................................................... 85 Figura 4.7 – Itens da Venda (Aba Itens a Pagar) ...................................................... 86 Figura 4.8 – Cadastro de Item ................................................................................... 87 Figura 4.9 – Dividir Itens ........................................................................................... 87 Figura 4.10 – Itens Divididos ..................................................................................... 88 Figura 4.11 – Registrar Pagamento .......................................................................... 88 Figura 4.12 – Itens da Venda (Aba Itens Pagos)....................................................... 89 Figura 4.13 – Realizar pedido módulo Android ......................................................... 89 Figura 4.14 – Gravar pedido...................................................................................... 90 Figura 4.15 – Registro de atendimento ..................................................................... 90 Figura 4.16 – Gerar Recibo ....................................................................................... 91 Figura 4.17 – Recibo de Pagamento ......................................................................... 91 Figura 1 – Classe Principal – ValidaSocket ............................................................... 93 Figura 2 – ValidaSocketThread ................................................................................. 94 Figura 3 – Classe Valida ........................................................................................... 95 Figura 4 – Método validaLogin .................................................................................. 96 Figura 5 – Criando um Web Service ......................................................................... 96 Figura 6 – Criando um Web Service preenchendo os campos. ................................ 97 Figura 7 – Arquivo do Web Service ........................................................................... 97 Figura 8 – Pasta dos Web Services .......................................................................... 97 Figura 9 – Adicionar operação .................................................................................. 98 Figura 10 – Adicionar detalhes da operação ............................................................. 98 Figura 11 – Arquivo gerado pelo Web Service. ......................................................... 99 Figura 12 – Método selectCategoriaAndroid() ......................................................... 100 Figura 13 – LoginActivity ......................................................................................... 101 Figura 14 – Classe Valida ....................................................................................... 102 Figura 15 – Arquivos .JAR da biblioteca ksoap ....................................................... 103 Figura 16 – Classe Categoria .................................................................................. 103 Figura 17 – Classe ConexaoWS ............................................................................. 104 Figura 18 – VendaActivity ....................................................................................... 105 Figura 19 – MyAsyncTask2 parte 1 ......................................................................... 106 Figura 20 – MyAsyncTask2 parte 2 ......................................................................... 107 Figura 21 – Método preencherListaProdutos(String[])............................................. 107 LISTA DE GRÁFICOS Gráfico 1. 1 – Índice TIOBE.............................................................................................24 LISTA DE ABREVIATURAS E SIGLAS API - Application Programming Interface ARO - Army Research Office ASP - Active Server Pages CASE - Computer Aided Software Engeneering CSS - Cascading Style Sheet DARPA - Defense Advanced Research Projects Agency DER - Diagrama de Entidade e Relacionamento DNS - Domain Name System ERP - Enterprise Resource Planning GUI - Graphical User Interfaces HTC - High Tech Computer Corporation HTML - HyperText Markup Language HTTP - HyperText Transfer Protocol Secure IBM - International Business Machines IDE - Integrated Development Environment IP - Internet Protocol JAR - Java Archive JCP - Java Community Process JDBC - Java Database Connectivity JSF - JavaServer Faces JSP - JavaServer Pages JVM - Java Virtual Machine MVC - Model-View-Controller NSF - National Science Foundation OMG - Object Management Group OO - Orientado a Objeto PHP - Hypertext Preprocessor PL/SQL - Procedural Language/Structured Query Language SDK - Software Development Kit SGBD - Sistema Gerenciador de Banco de Dados SGML - Standard Generalized Markup Language SQL - Structured Query Language TCP - Transmission Control Protocol UML - Unified Modeling Language W3C - World Wide Web Consortium WS - Web Service XML - eXtensible Markup Language LISTA DE SÍMBOLOS % – Porcentagem @ – Arroba SUMÁRIO INTRODUÇÃO .......................................................................................................... 19 1 FERRAMENTAS E TECNOLOGIAS ...................................................................... 21 1.1 UML ..................................................................................................................... 21 1.2 ASTAH ................................................................................................................ 23 1.3 JAVA ................................................................................................................... 23 1.3.1 JavaServer Faces (JSF) ................................................................................... 24 1.3.2 PrimeFaces ...................................................................................................... 26 1.3.3 Netbeans IDE ................................................................................................... 27 1.3.4 Eclipse .............................................................................................................. 28 1.3.5 JDBC ................................................................................................................ 29 1.4 SQL ..................................................................................................................... 29 1.4.1 PostgreSQL ...................................................................................................... 29 1.4.2 Plpg/SQL .......................................................................................................... 30 1.5 XML ..................................................................................................................... 31 1.6 ANDROID ............................................................................................................ 32 2 ANÁLISE DE NEGÓCIO ........................................................................................ 34 2.1. INSTRUÇÃO DO PROBLEMA ........................................................................... 34 2.2 ANÁLISE DE MERCADO .................................................................................... 35 2.3 ATORES ENVOLVIDOS ..................................................................................... 35 2.3.1 Gerente ............................................................................................................ 36 2.3.2 Atendente ......................................................................................................... 36 2.3.3 Cozinha ............................................................................................................ 37 2.3.4 Caixa ................................................................................................................ 37 2.4 DESCRIÇÕES DO AMBIENTE ATUAL............................................................... 38 2.5 PERSPECTIVAS DO PRODUTO........................................................................ 38 2.6 CARACTERISTICAS ........................................................................................... 39 2.6.1 Alta Prioridade .................................................................................................. 39 2.6.2 Média Prioridade .............................................................................................. 39 2.6.3 Baixa Prioridade ............................................................................................... 40 2.7 OUTROS REQUISITOS ...................................................................................... 40 3 ARQUITETURA DO SOFTWARE ......................................................................... 42 3.1 ANÁLISE DE REQUISITOS FUNCIONAIS ......................................................... 42 3.1.1 Atendente ......................................................................................................... 42 3.1.2 Gerente ............................................................................................................ 42 3.1.3 Caixa ................................................................................................................ 42 3.2 DIAGRAMA DE CASO DE USO ......................................................................... 43 3.3 ESPECIFICAÇÕES DE HISTÓRIAS ................................................................... 43 3.3.1 Efetuar Login .................................................................................................... 43 3.3.2 Manter Usuários ............................................................................................... 44 3.3.3 Manter Produtos ............................................................................................... 44 3.3.4 Manter Categorias ............................................................................................ 44 3.3.5 Manter Caixas .................................................................................................. 44 3.3.6 Emitir Relatórios ............................................................................................... 44 3.3.7 Manter tipos de acréscimos.............................................................................. 45 3.3.8 Manter Mesas................................................................................................... 45 3.3.9 Trocar Mesas ................................................................................................... 45 3.3.10 Manter Vendas ............................................................................................... 45 3.3.11 Manter Itens da Venda ................................................................................... 45 3.3.12 Manter Pagamento de Itens ........................................................................... 46 3.3.13 Manter Clientes .............................................................................................. 46 3.3.14 Manter Entregas ............................................................................................. 46 3.3.15 Abrir Caixa ...................................................................................................... 47 3.3.16 Suprir Caixa .................................................................................................... 47 3.3.17 Retirar do Caixa ............................................................................................. 47 3.3.18 Lançar em Caixa ............................................................................................ 47 3.3.19 Fechar Caixa .................................................................................................. 47 3.4 PROJETO DE BANCO DE DADOS .................................................................... 48 3.4.1 Modelo Lógico .................................................................................................. 49 3.4.2 Mapeamento para Modelo Relacional .............................................................. 50 3.5 DIAGRAMA DE CLASSE .................................................................................... 51 3.6 DIAGRAMA DE ATIVIDADE ............................................................................... 52 3.6.1 Manter Usuários ............................................................................................... 52 3.6.2 Login................................................................................................................. 53 3.6.3 Trocar Mesa ..................................................................................................... 53 3.6.4 Manter Produtos ............................................................................................... 54 3.6.5 Manter Categorias ............................................................................................ 54 3.6.6 Manter Caixas .................................................................................................. 55 3.6.7 Manter Acréscimos ........................................................................................... 55 3.6.8 Manter Mesas................................................................................................... 56 3.6.9 Manter Vendas ................................................................................................. 56 3.6.10 Manter Pagamentos ....................................................................................... 57 3.6.11 Manter Itens ................................................................................................... 58 3.6.12 Manter Cliente ................................................................................................ 58 3.6.13 Manter Entregas ............................................................................................. 59 3.6.14 Abrir Caixa ...................................................................................................... 59 3.6.15 Suprir Caixa .................................................................................................... 60 3.6.16 Retirar do Caixa ............................................................................................. 60 3.6.17 Lançar em Caixa ............................................................................................ 61 3.6.18 Fechar Caixa .................................................................................................. 62 3.7 MVC .................................................................................................................... 62 3.7.1 Manter Usuários ............................................................................................... 63 3.7.2 Manter Login .................................................................................................... 63 3.7.3 Trocar Mesa ..................................................................................................... 64 3.7.4 Manter Categorias ............................................................................................ 64 3.7.5 Manter Produtos ............................................................................................... 65 3.7.6 Manter Acréscimos ........................................................................................... 65 3.7.7 Manter Caixas .................................................................................................. 66 3.7.8 Manter Cliente .................................................................................................. 66 3.7.9 Manter Entrega ................................................................................................. 67 3.7.10 Manter Mesa .................................................................................................. 67 3.7.11 Manter Item .................................................................................................... 68 3.7.12 Manter Pagamento ......................................................................................... 68 3.7.13 Abrir Caixa ...................................................................................................... 69 3.7.14 Fechar Caixa .................................................................................................. 69 3.7.15 Retirar do Caixa ............................................................................................. 70 3.7.16 Suprir Caixa .................................................................................................... 70 3.7.17 Manter Lançamento ....................................................................................... 71 3.7.18 Manter Venda ................................................................................................. 71 3.8 DIAGRAMA DE SEQUÊNCIA ............................................................................. 72 3.8.1 Manter Usuário ................................................................................................. 72 3.8.2 Login................................................................................................................. 73 3.8.3 Manter Lançamento ......................................................................................... 73 3.8.4 Manter Caixas .................................................................................................. 74 3.8.5 Abrir Caixa........................................................................................................ 74 3.8.6 Manter Categorias ............................................................................................ 75 3.8.7 Fechar Caixa .................................................................................................... 75 3.8.8 Manter Entregas ............................................................................................... 76 3.8.9 Suprir Caixa ...................................................................................................... 76 3.8.10 Manter Cliente ................................................................................................ 77 3.8.11 Retirar do Caixa ............................................................................................. 77 3.8.12 Manter Mesa .................................................................................................. 78 3.8.13 Trocar Mesa ................................................................................................... 78 3.8.14 Manter Itens ................................................................................................... 79 3.8.15 Manter Pagamento ......................................................................................... 79 3.8.16 Manter Produtos ............................................................................................. 80 3.8.17 Manter Venda ................................................................................................. 80 3.8.18 Manter Acréscimos ......................................................................................... 81 4 PROTÓTIPO FUNCIONAL..................................................................................... 82 4.1 LOGIN ................................................................................................................. 82 4.2 CADASTROS ...................................................................................................... 83 4.3 MOVIMENTAÇÕES VIA NAVEGADOR WEB ..................................................... 85 4.4 MOVIMENTAÇÕES VIA DISPOSITIVO MÓVEL ................................................ 89 4.5 EMISSÃO DE RELATÓRIOS .............................................................................. 91 CONCLUSÃO............................................................................................................ 92 APÊNDICE A – Integração entre Android e Aplicação Web. .................................... 93 REFERÊNCIAS BIBLIOGRÁFICAS ........................................................................ 108 19 INTRODUÇÃO A Tecnologia da Informação mostra-se indispensável para que um estabelecimento comercial consiga alcançar ascensão no mercado, pois um sistema de informação é capaz de aprimorar seus processos e métodos de gerenciamento, promovendo uma maior eficiência na execução das atividades e consequentemente colaborando para uma excelência operacional. (CABRAL, 2004) O trabalho proposto tem como tema o desenvolvimento de um software que auxilie no gerenciamento das operações de um bar ou restaurante. O sistema deve oferecer ao usuário ferramentas práticas para que seja efetuada a gestão das vendas, o controle do fluxo de caixa e o atendimento ágil e preciso aos pedidos dos clientes. O projeto será embasado em análises de negócios e levantamento de requisitos, com o intuito de identificar as funcionalidades a serem aplicadas na solução proposta, para que posteriormente o sistema seja implementado. Sem o controle automatizado, um estabelecimento acaba por ter vários prejuízos. A perda de informações importantes pode acarretar diretamente na perda de lucro. A manipulação e controle das informações de forma manual dificulta a integridade dos dados, pois falhas humanas ocorrem com frequência. O tempo utilizado para realizar as tarefas é mais longo, deixando o atendimento ao cliente mais lento e menos eficaz. As operações efetuadas no fluxo de caixa não são confiáveis, podendo conter erros de cálculo, e não podem ser controladas através de relatórios, que mostram com precisão os produtos mais vendidos, os produtos mais lucrativos, o melhor período de venda, entre outros. Todos esses problemas fazem com que o estabelecimento tenha menor vantagem competitiva pela perda da otimização dos serviços e aumento desacelerado de sua receita. O trabalho tem como objetivo a implementação de um sistema capaz de solucionar os problemas descritos. Separado por módulos, o projeto atenderá a diversos estágios da atividade da empresa, fornecendo auxilio desde o cadastro de produtos até a cobrança no caixa. A proposta contém ainda o desenvolvimento de um aplicativo móvel conectado ao sistema, a fim de permitir aos funcionários do estabelecimento a 20 anotação dos pedidos de forma prática e acessível. O projeto inclui também a implementação de ferramentas que automatizem a cobrança das contas, visando a organização e a praticidade ao efetuar dos pagamentos. Com o constante crescimento do mercado de tablets e smartphones, foi proposto o desenvolvimento de um aplicativo Android como complemento do sistema, com o intuito de expandir a mobilidade dos dados. Optou-se pela área de bares e restaurantes por existir um amplo mercado de atuação com um grande número de estabelecimentos deste segmento que não são automatizados e precisam de melhorias no setor tecnológico. Além disso, a integração do sistema web com o aplicativo móvel mostra-se útil para este tipo de comércio. Para que o produto planejado seja alcançado, foram definidas estratégias e reunidos os métodos que devem compor o processo de trabalho. Inicialmente será realizada uma analise de negócios, tomando como base estabelecimentos não informatizados, e também outros software deste segmento. Em seguida propõe-se a diagramação das funcionalidades identificadas e a definição da modelagem do banco de dados. A etapa seguinte corresponde à implementação das funções de manipulação dos dados, além do desenvolvimento da interface com o usuário. A seguir o projeto prevê a execução dos testes de software e por fim a redação dos relatórios finais e a apresentação da conclusão obtida com o trabalho. No capítulo um são abordadas as tecnologias utilizadas para o desenvolvimento do trabalho, desde ferramentas aplicadas na modelagem dos diagramas e do banco de dados, até a implementação do sistema web e aplicativo Android. O capitulo dois trata-se da análise de negócio. Nele são compreendidas as especificações do projeto, onde são detalhados os processos e etapas necessárias para a construção do software. A análise fornece ainda a descrição dos problemas identificados através de uma análise de mercado, oferecendo uma visão geral do produto a ser desenvolvido e suas principais características. No capítulo três, é apresentada a arquitetura do software por meio dos diagramas referentes ao projeto. Entre os diagramas estão o de classe, caso de uso, atividades, MVC, sequência, bem como o projeto de banco de dados. No capítulo quatro são apresentadas as telas do sistema web e do aplicativo Android conforme a visão do usuário, exibindo parte suas funcionalidades. 21 1 FERRAMENTAS E TECNOLOGIAS O capítulo a seguir apresenta resumidamente as ferramentas e tecnologias a serem utilizadas para desenvolver o sistema. Esse levantamento tecnológico engloba itens como linguagens de programação, frameworks e software de apoio ao desenvolvimento. A descrição tem como objetivo detalhar as funcionalidades aplicadas no trabalho, com informações como o histórico, objetivos, ramificações (se houverem), recursos disponíveis nas ferramentas e também a função desempenhada dentro do projeto. 1.1 UML A Unified Modeling Language (UML) é uma linguagem gráfica e textual usada no desenvolvimento orientado a objetos (OO) para visualização, especificação, construção e documentação de informações referentes a um software. (SPINOLA, 2010) Segundo Spinola (2010), a UML formalizou um conjunto de conceitos compostos por vários elementos, relacionamentos e tipos de diagrama, que permitiu a unificação na representação de modelos na orientação a objeto. Para Silva (2007), quando se fala em modelagem, muitos pensam na geração de uma coleção de diagramas, mas o que não se pode perder de vista é que essa produção de diagramas não é um fim, mas um meio para se chegar a um programa que compila, executa, e cumpre os requisitos definidos para ele, sem entrar em colapso. Spinola (2010), diz que a linguagem foi criada em 1996, como o resultado da integração dos métodos orientados a objetos propostos por Booch (1994), Rumbaugh (1991) e Jacobson (1993), padronizando as notações utilizadas. Na versão 1.1, foi aprovada como linguagem padrão para a modelagem orientada a objetos pela Object Management Group (OMG) em 1997. De acordo com Macêdo e Leal (2010), um diagrama é a representação gráfica de um conjunto de elementos, ou seja, usam-se os diagramas para visualizar, analisar e modelar o sistemas sob diferentes perspectivas, permitindo que cada diagrama complete os demais. 22 O Diagrama de Atividades descreve os passos a serem percorridos para a conclusão de uma atividade especifica. Ele é um gráfico que mostra o fluxo de controle de uma atividade para outra. Ao contrário de um gráfico de fluxo tradicional, um diagrama de atividades mostra a concorrência, bem como as ramificações de controle. (MACÊDO e LEAL, 2010) Macêdo e Leal (2010) definem o diagrama de caso de uso como sendo a especificação de uma sequência completa de interações entre um sistema e um ou mais agentes externos a esse sistema. O Diagrama de Caso de Uso é utilizado normalmente nas fases de levantamento e análise de requisitos do sistema. Ele apresenta uma linguagem simples para que o usuário possa compreender o funcionamento do sistema. Este diagrama procura identificar atores (usuários, outros sistemas etc.) que utilizaram o software, e os serviços que o sistema disponibilizará para eles, conhecidos nesse diagrama como Caso de Uso. O diagrama de sequência representa a ordem temporal em que as mensagens são trocadas entre os objetos envolvidos em um determinado processo. Ele é baseado no Caso de Uso definido pelo diagrama de mesmo nome e usa o Diagrama de Classes para determinar quais objetos das classes envolvidas em um processo. Ele identifica o evento gerador do processo modelado, e o ator responsável pelo evento, e determina como o processo deve se desenrolar e ser concluído por meio da chamada de métodos disparados por mensagens enviadas entre objetos. (MACÊDO e LEAL, 2010) O objetivo do Diagrama de Classe é permitir a visualização das classes que serão implementadas no sistema, com seus respectivos atributos e métodos, e também demonstrar como elas se relacionam e transmitem informações entre si. Ele apresenta uma visão estática de como as classes estão organizadas e preocupa-se em definir a estrutura lógica delas. Este diagrama ainda é usado para a construção de outros diagramas, como por exemplo, o de Sequência. (SPINOLA, 2010) A UML será utilizada no projeto para a confecção dos casos de uso, diagramas de classe, sequencia e atividade, assim a descrição do sistema ficará documentada da forma correta, desenvolvimento do software em si. facilitando possíveis manutenções e o 23 1.2 ASTAH O Astah é uma ferramenta Computer Aided Software Engeneering (CASE), que auxilia no processo de desenvolvimento de um sistema, desde a identificação de requisitos até a geração de diagramas, ele veio para substituir o Jude em 2010 como ferramenta da empresa Change Vision. (LEAL, MACÊDO e SPINOLA, 2010) De acordo com Leal, Macêdo e Spinola (2010), o Astah possui suporte para desenvolvimento dos seguintes diagramas da UML 2.x: Diagrama de Classes; Diagrama de Casos de Uso; Diagrama de Sequência; Diagrama de Colaboração; Diagrama de Estados; Diagrama de Atividades; Diagrama de componente; Diagrama de Desenvolvimento; Diagrama de estrutura composta. O Astah possui três licenças: Astah Professional, onde a licença é paga, e a versão da ferramenta é mais robusta, suportando a criação de diagramas, mapas mentais, diagrama de entidade e relacionamento (DER), gráfico de fluxo de dados, algumas operações de banco de dados relacionais e diagrama e tabela de requisitos; Astah UML, possui licença paga, que suporta a criação de diagramas e mapas mentais; Astah Community, o único com uma licença livre ou acadêmica, que suporta apenas o desenvolvimento de diagramas.(LEAL, MACÊDO e SPINOLA, 2010) 1.3 JAVA De acordo com Lozano (2012), a plataforma Java é um dos ambientes de aplicações mais utilizados na atualidade. Desde suas primeiras novidades como o JavaBeans, JDBC, Applets, o Java foi adotado muito rapidamente e hoje é uma referencia no mercado de desenvolvimento de software. Lançada pela Sun Microsystems no inicio de 1995, a tecnologia Java revolucionou o desenvolvimento de aplicações, introduzindo o conceito de independência de plataforma, apresentado pela primeira Java Virtual Machine (JVM). Além disso, a tecnologia mostrou-se ideal para a computação em rede, sendo fundamental para a evolução das aplicações Web. A linguagem Java é orientada a objetos e possui sintaxes semelhantes às das linguagens C/C++, é considerada segura, pois não possui ponteiros de memória, 24 garantindo o assim uma maior proteção contra programas que procuram acessar ponteiros de memória indevidos. (DOEDERLEIN, 2012). Segundo Lozano (2012), o índice Tiobe apresenta uma lista de linguagens de programação classificadas de acordo com dados públicos da Internet, Intern como pesquisas Google, Bing, Yahoo e Twitter, quantidades de livros e artigos publicados, publicado entre outras fontes. O gráfico 1.1 ilustra a variação da popularidade dessas linguagens, apontando a liderança da linguagem Java nos últimos anos. Gráfico 1.1 - Índice TIOBE Fonte: Com o constante crescimento do mercado de computação móvel, a linguagem Java torna se torna-se essencial devido à sua portabilidade, pois é constantemente aplicada no desenvolvimento para Android, sendo executada a partir da Dalvik VM, a máquina virtual similar à JVM desenvolvida pelo Google. (LOZANO, 2012) 1.3.1 .1 JavaServer Faces (JSF) Um dos principais motivos que tornou a internet e, consequentemente, a plataforma web, tão populares mundialmente, foi a facilidade da d criação das páginas estáticas, restritas a conteúdos textuais, acompanhados de imagens, links e 25 limitados recursos multimídia. Com pouco conhecimento em uma linguagem de marcação, como o HyperText Markup Language (HTML), qualquer pessoa podia divulgar seu site a um público em crescimento exponencial. No entanto, o comportamento dos usuários passou a necessitar de experiências de navegação cada vez mais interativas, versáteis e seguras, onde os simples sites foram ganhando status de aplicações. Neste contexto, a Java Community Process (JCP) envolveu-se em especificações para o desenvolvimento de páginas dinâmicas, agora processadas no servidor e interpretadas pelo navegador cliente. Entre elas, destacam-se a tecnologia JavaServer Pages (JSP) e a especificação para frameworks JavaServer Faces (JSF) baseada em componentes para desenvolvimento web, úteis na construção das chamadas Graphical User Interfaces (GUI). (GUIMARÃES, 2010). Atualmente na versão 2.0, a tecnologia JSF foi lançada há pouco mais de seis anos, e é adotada por inúmeras empresas do cenário atual. JavaServer Faces é um framework orientado a componentes que abstrai o desenvolvimento de interfaces com o usuário, controlando a geração de código HTML enviado para os navegadores, permitindo ao desenvolvedor, implementar a camada de visão do sistema web de forma simples, organizada, legível e gerenciável. Não é, portanto, sua função cuidar de aspectos relacionados à lógica de negócio, persistência de dados, serviços web, integração entre sistemas ou conexões com sistemas de informação em geral, havendo outras tecnologias dedicadas exclusivamente a esses propósitos. (BRIGATTO, 2010) Para Brigatto (2012), encapsular comportamentos e características das marcações HTML através de classes e interfaces pré-compiladas, torna menos penosa a construção das páginas web e possibilita que o desenvolvedor concentre a maior parte de seus esforços na lógica de negócio. As principais vantagens de utilizar esse framework ao desenvolver uma aplicação web são a aceleração da produção e a padronização do código final, pois a geração do HTML será de responsabilidade do framework, que utiliza de técnicas e algoritmos que seguem padrões pré-definidos. Isso elimina grande parte das falhas estruturais que ocorrem com maior frequência no processo manual. (PAGANINI, 2012) Segundo Brigatto (2012), a escrita em JSF depende de todo o ciclo de vida da requisição, composto de várias fases, diferentemente do JavaServer Pages, que a 26 escrita é feita imediatamente na resposta gerada à medida que a página é processada. Uma das vantagens desse framework é a estabilidade, ou seja, a compatibilidade com versões anteriores é garantida. Além disso, o JSF possui suporte de ferramentas e fornecedores de servidores de aplicações, sendo suportado pelas principais IDEs e servidores. 1.3.2 PrimeFaces O PrimeFaces é considerado uma das implementações mais populares do JavaServer Faces. O framework possibilita programar valendo-se de uma vasta biblioteca de componentes de interface de usuário providos de acessibilidade digital, tanto para ambiente web como para dispositivos móveis. Desde o seu lançamento em 2009, são desenvolvidos componentes e recursos interativos através dos pacotes PrimeUI e PrimeMobile. (DANTAS, 2010). De acordo com Dantas (2010), o site oficial do PrimeFaces oferece suporte para a codificação dos componentes dentro das melhores práticas de programação. Disponibiliza, associados a uma documentação gratuita, um blog e um fórum mantidos pela comunidade, que é ativa e comprometida com o projeto. Este texto auxilia o desenvolvedor Java a se iniciar com o framework, por meio de exemplos que demonstram suas funcionalidades. Segundo Dantas (2010), conhecer as vantagens e as funcionalidades do framework PrimeFaces é de grande conveniência aos desenvolvedores que desejam implementar aplicações web com mais agilidade, rapidez e maior produtividade. Cada nova versão do PrimeFaces é desenvolvida pela empresa turca Prime Teknoloji. Além da correção de erros, novos componentes vão sendo acrescentados em sua biblioteca, com a filosofia de apresentarem codificações leves e livres de dependências, baseadas em um único arquivo binário compactado do tipo Java Arquive (JAR). Seu uso estendeu-se além do desenvolvimento de interfaces web como, também, rumo às interfaces de utilitários em dispositivos móveis de diferentes plataformas. O PrimeFaces oferece suporte, ainda, ao Ajax Push, que dá liberdade ao servidor para enviar respostas sem haver solicitações vindas do cliente, evitando a necessidade de recarregar a página para que as informações da tela sejam atualizadas. 27 “O Guia do Usuário do PrimeFaces relaciona uma documentação com informações, atributos, melhores práticas e demonstrações para os mais de cem integrantes do seu conjunto de componentes. Eles estão de acordo com a arquitetura Modelo-Visão-Controle (MVC) que controla o fluxo do aplicativo na especificação JSF. Isolando o código Java da camada de apresentação, os componentes PrimeFaces são pré-codificados, funcionando como abstrações responsáveis por unir os códigos HTML, CSS e JavaScript que tratam os seus comportamentos. Exemplos práticos estão expostos no mostruário online, dispondo, em seções, os elementos de entrada de dados e de saída de informações, botões, painéis, menus, gráficos, diálogos, juntamente com todos os recursos, efeitos e interações do framework, além das respectivas implementações em código aberto.” (GUIMARÃES, 2010) A galeria de temas prontos para download permite a alteração de vários aspectos de um componente, tais como as definições da fonte aplicada nos textos, as cores dos elementos constituintes, afora outros efeitos visuais e interativos. Essas opções do PrimeFaces, tanto em número de componentes, como em personalização dos mesmos, partindo dos elementos de interface mais simples aos mais elaborados, garantem a criação de interfaces ricas para as mais diversas pretensões gráficas e funcionais. (GUIMARÃES, 2010) 1.3.3 Netbeans IDE Segundo Doederlein (2008), o Netbeans é um Ambiente de Desenvolvimento Integrado, do inglês Integrated Development Environment (IDE), de código aberto originado na universidade de Charles, em Praga, no ano de 1996, a partir da ideia de dois estudantes tchecos. A ferramenta foi criada com o intuito de auxiliar desenvolvedores na produção de software de forma simples e dinâmica. O IDE fornece uma interface gráfica que colabora com a criação de programas desktop, web ou móveis, não se limitando apenas ao desenvolvimento Java. Possui também recursos para a implementação de aplicações em outras linguagens, como C, C++, PHP, Groovy e Ruby, podendo ser executado a partir de diversas plataformas, entre elas Windows, Linux, Solaris e Mac OS. (DOEDERLEIN, 2012) 28 “O domínio de uma linguagem de programação pode não ser suficiente para que um desenvolvedor desempenhe com eficiência o seu trabalho. Considera-se tão importante quanto o conhecimento da linguagem, a habilidade em um Ambiente Integrado de Desenvolvimento (IDE)”. (ARAUJO, 2012) De acordo com Araujo (2012), a utilização de um ambiente de desenvolvimento é fundamental para um projeto de implementação de software, pois contribui para o aumento da produtividade, poupando o programador de grande parte do trabalho manual. Segundo Araujo (2012), o Netbeans IDE proporciona ao desenvolvedor auxilio para escrever, compilar, depurar e instalar aplicações, e também fornece aos usuários um conjunto de bibliotecas pré-instaladas, entre elas o JSF, Struts e Hibernate. 1.3.4 Eclipse O Eclipse é uma plataforma gratuita usada para o desenvolvimento de aplicações, criado originalmente pela IBM em 2001. Foi criada a Fundação Eclipse, em janeiro de 2004, uma organização sem fins lucrativos que permitiu o surgimento de uma comunidade transparente e aberta. Essa Fundação é mantida por seus associados, que hospedam os projetos do Eclipse e ajudam a manter uma comunidade de software livre. (GIRELLI e ARAÚJO, 2012) Apesar de a plataforma Eclipse ser desenvolvida em Java, o uso da IDE não se limita apenas ao desenvolvimento de aplicações escritas nesta linguagem. Existem plugins de suporte a várias outras linguagens como, C/C++, Cobol e PHP, entre outras. (GIRELLI e ARAÚJO, 2012) No final de Junho de 2012, a Fundação Eclipse lançou sua nona distribuição, que recebe o codinome Juno. A nova plataforma já está disponível na versão 4.2. Nesta nova plataforma, novos recursos foram adicionados e os existentes foram melhorados, tendo como objetivo simplificar e facilitar o processo de desenvolvimento de aplicações que tem como ferramenta a plataforma Eclipse. (BLEWITT, 2012) Segundo Blewitt (2012), o Eclipse Juno vem sendo desenvolvido há mais de três anos, e caracteriza o primeiro lançamento da plataforma Eclipse 4.x. A nova versão da IDE inclui 72 projetos. 29 Para Girelli e Araújo (2012), o Eclipse é uma das plataformas de desenvolvimento mais utilizadas e por isso, está sempre em crescimento, visando oferecer aos seus usuários uma plataforma estável e que facilite o processo de desenvolvimento de aplicações. 1.3.5 JDBC Para acessar um banco de dados, uma aplicação Java necessita, além da própria máquina virtual, de um driver Java Database Connectivity (JDBC). Esse driver geralmente é fornecido pelo órgão responsável pelo banco de dados sem nenhum custo adicional. O JDBC também não precisa de nenhuma configuração prévia, e não há necessidade de editar nenhum arquivo de configuração nem executar algum painel de controle administrativo. Drivers JDBC são na grande maioria simples bibliotecas Java, arquivo JAR, que podem ser copiados para qualquer sistema operacional. (LOZANO, 2011) Segundo Lozano (2011) por meio do JDBC, uma aplicação Java pode se conectar a qualquer banco relacional e assim submeter comandos SQL para execução e recuperação dos resultados gerados pelo comando. Além disso, o JDBC permite acesso aos metadados do banco de dados, permitindo a construção de ferramentas para a administração do próprio banco e apoiando o desenvolvimento de sistemas. 1.4 SQL Segundo Gonçalves (2011), Structured Query Language (SQL) é a linguagem padrão ANSI para a manipulação de bancos de dados relacionais. Por ser um padrão aceito pela indústria, é suportada por todos os SGBD's relacionais, o que inclui produtos como Oracle, Microsoft SQL Server, MySQL, PostgreSQL, SQLite e IBM DB2. O escopo da SQL é oferecer instruções para manipulação de dados, definição de objetos, gerenciamento de transações e controle de acessos. 1.4.1 PostgreSQL De Acordo com Smanioto (2007), o Sistema Gerenciador de Bancos de Dados (SGBD) PostgreSQL começou a ser desenvolvido em 1986, na universidade 30 de Berkeley, na Califórnia. Seu código-fonte tomou por base a codificação do banco de dados INGRES, de onde surgiu o nome Postgres (uma abreviação do inglês para pós-INGRES). O projeto liderado pelo Professor Michael Stonebraker foi financiado pela Agência de Pesquisa de Projetos Avançados de Defesa dos EUA (DARPA), pelo Departamento de Pesquisa do Exército Americano (ARO), pela Fundação Nacional de Ciência (NSF) e pela ESL, Inc. Em 1994, o código-fonte do Postgres, foi publicado na internet. No ano seguinte, o SGBD ganhou suporte à linguagem SQL, motivo pelo qual em 1996 o Postgres passou a chamar-se PostgreSQL. (SMANIOTO, 2010) Segundo Stern (2010), o PostgreSQL é um SGBD de código aberto que utiliza a licença BSD, dando aos seus usuários total liberdade para alterar seu código-fonte, além de isenção para comercializar o produto. De acordo com Stern (2010), o gerenciador Postgre tem como principais características o suporte aos padrões ANSI SQL 89, 92 e 99, a integridade referencial, o suporte a funções e stored procedures definidas pelo usuário, o suporte a diversas linguagens de desenvolvimento como PHP, Java, C, ASP, .Net, Perl, entre outras e a linguagem de programação de funções PLpgSQL. Podendo ser instalado nas plataformas Linux, FreeBSD, Solaris, OpenBSD, Windows, entre várias outras, o banco de dados pode ser acessado pela rede através do protocolo TCP/IP. Por padrão as conexões são feitas pela porta 5432, podendo ser alterada pelo administrador do sistema. Para se conectar ao PostgreSQL, uma aplicação cliente necessita apenas do IP ou nome DNS do servidor, da porta TCP/IP, usuário e senha para acesso e o nome da base de dados. (STERN, 2010) 1.4.2 Plpg/SQL De acordo com Gonçalves (2012), PLpg/SQL pode ser entendida como uma extensão da linguagem SQL, acrescentada de funcionalidades que a tornam uma linguagem de programação completa, oferecendo recursos para o controle de fluxo, tratamento de exceções, orientação a objetos, possibilitando assim a escritura de programas que são armazenados, compilados e executados dentro do servidor do SGBD PostgreSQL, utilizando instruções SQL. 31 Segundo Oliveira (2009) a PLpg/SQL é semelhante à linguagem PL/SQL, do Oracle, que foi criada anteriormente, com o propósito de oferecer uma solução de programação para os usuários que precisavam escrever trechos de código para tratamento de exceções no banco de dados e também definir regras e condições ao manipular registros. Segundo Gonçalves (2012), o conceito de linguagem procedural extendida da SQL foi introduzido no ano de 1998 como parte das funcionalidades que compunham a versão 6.0 do Sistema Gerenciador de Bancos de Dados(SGBD) Oracle. A PLpg/SQL é normalmente utilizada para a criação de funções ou procedimentos críticos, requerendo alto desempenho ao processar as tarefas, além disso, é significativamente mais confiável do que a maioria das outras linguagens de programação. Outra vantagem dos programas PLpg/SQL é sua durabilidade, não necessitando de manutenção quando a versão do PostgreSQL é atualizada. Isso deve-se ao fato das versões da linguagem serem compatíveis. (GONÇALVES, 2012) 1.5 XML A linguagem recomendada para de a marcação criação de eXtensible Markup documentos com Language dados (XML) é organizados hierarquicamente, como textos ou banco de dados. A linguagem XML é classificada como extensível porque permite definir elementos de marcação. (PEREIRA, 2009) Cada dia é mais comum o uso do XML para armazenamento ou transporte dos dados entre aplicações. O arquivo XML tem estrutura similar a de arquivos HTML, pois ambos são organizados em tags de marcação, a diferença é que no XML você pode criar as suas próprias tags, construindo arquivos para armazenar a sua estrutura de dados específica. (SENDIN, 2010) O XML traz uma sintaxe que pode ser utilizada para compartilhar informações entre diferentes computadores e aplicações. Quando combinado com outros padrões, torna possível definir o conteúdo de um documento separadamente de seu formato, deixando assim que se reutilize o código em outras aplicações para diferentes propósitos. Por exemplo, um banco de dados pode escrever um arquivo XML para que outro banco consiga lê-lo. Portanto uma das suas principais características é a portabilidade. (PEREIRA, 2009) 32 Para Pereira (2009), alguns dos propósitos do XML são: auxiliar sistemas de informação no compartilhamento de dados, especialmente via internet e codificar documentos. Segundo Sendin (2010), O XML é um padrão amplamente utilizado por aplicações Web, e recomendado pelo World Wide Web Consortium (W3C). Iniciado por volta de 1990 o projeto que deu origem ao XML, surgiu da insatisfação quanto à falta de padronização dos formatos existentes até então. Surgiu então o formato XML, que combina a flexibilidade da Standard Generalized Markup Language (SGML), ou Linguagem Padronizada de Marcação Genérica com a simplicidade do HTML. (SENDIN, 2010) 1.6 ANDROID O Android é um sistema operacional criado exclusivamente para os celulares de maior capacidade, conhecidos como handsets ou smartphones, sendo pensado desde o principio em facilitar o desenvolvimento de aplicações. (FERRARINI, 2012). Lançado em estágio beta no final de 2007, o Android estreou sem muito alvoroço, devido ao baixo nível de maturidade do produto naquele momento. A API contida no SDK, do inglês Software Development Kit, estava incompleta, o sistema estava ainda em fase de testes pelos engenheiros da Google e nenhum aparelho rodando Android estava disponível para uso. (FERRARINI, 2012) A empresa HTC foi a primeira a lançar um aparelho com Android, em outubro de 2008, o inicio das vendas do modelo G1 foi um marco importante para o projeto. Desde então o Android vem evoluindo consideravelmente, sendo considerada uma das plataformas mais inovadoras entre os sistemas operacionais móveis atualmente disponíveis. (FERRARINI, 2012) Segundo Lecheta (2010), para o usuário final o Android tem o objetivo de ser um sistema extremamente personalizável e, acima de tudo, tirar proveito da Internet e dos serviços em Nuvem. Para o desenvolvedor de software, permite a criação rápida e simples de aplicações, incorporando no seu framework diversas ferramentas que auxiliam o processo de codificação e preparação de software para o mercado, como por exemplo, o uso do XML para a concepção de interfaces gráficas, recursos avançados de internacionalização e distribuição de aplicativos pelo Google Play sem processos burocráticos de aprovação. 33 Sempre evoluindo, a equipe de desenvolvedores do Android geralmente incorpora novos padrões e tecnologias a cada nova atualização. As versões mais recentes possuem inúmeras APIs e componentes de comunicação com diferentes funcionalidades, como por exemplo, o WIFI-Direct, para conexão direta entre dispositivos sem a necessidade de um Access Point, o Cloud To Device Messaging, para o envio de mensagens da Nuvem diretamente para aplicações Android. Essas tecnologias estão totalmente disponíveis para desenvolvedores e criam um leque de possibilidades muito interessante para uso em suas aplicações. (FERRARINI, 2012) Segundo Lecheta (2010) o Android permite desenvolver e integrar aplicações de forma simplificada utilizando a linguagem de programação Java e utilizar um ambiente de desenvolvimento de alto nível e produtividade como o Eclipse. 34 2 ANÁLISE DE NEGÓCIO A análise de negócios compreende as especificações que o projeto precisa atingir para que seja comprovada sua utilidade, bem como entender todos os processos e etapas a serem realizadas para a construção do software e do aplicativo móvel. A análise fornece uma descrição detalhada sobre o problema, análise de mercado, atores envolvidos em seus respectivos processos e descrição do ambiente. O capítulo oferece também, uma visão geral do produto, assim como suas principais características. 2.1. INSTRUÇÃO DO PROBLEMA Bares, restaurantes, lanchonetes, pizzarias e qualquer outro estabelecimento que comercialize alimentos têm uma elevada quantidade de clientes. O fluxo de informações nesses ambientes é alto, e a empresa visa sempre aumentar seu número de clientes, oferecendo um atendimento ágil e de qualidade. Com essa demanda alta por um processo operacional que seja cada vez mais rápido e eficiente, o estabelecimento acaba por ter alguns problemas caso não faça o gerenciamento das informações de forma adequada. O maior problema encontrado por esses estabelecimentos é a perda de informações importantes, pois os papéis utilizados para anotações podem se perder facilmente, sendo um contratempo manter tantos documentos organizados, tornando difícil a recuperação dessas informações. As operações realizadas no caixa, ao efetuar a cobrança da conta, se feitas de forma manual, podem conter erros de cálculo, gerando prejuízo para o estabelecimento ou para o cliente, e o tempo desperdiçado com essa tarefa pode ser demorado, causando filas no caixa. Esse projeto busca facilitar o gerenciamento operacional do estabelecimento, evitando inconsistências nos pedidos e nas operações efetuadas pelos atendentes, e acelerando processos como o pagamento da conta, ganhando assim praticidade para atender melhor os clientes. 35 2.2 ANÁLISE DE MERCADO A velocidade em que mudanças ocorrem no cenário econômico atual, está a exigir sempre produtos rápidos e eficazes para controlar a gestão das empresas e fundamentar decisões. Esse controle é essencial para que o administrador mantenha sua empresa competitiva. Segundo Zanella (2001), “administrar custos não é apenas eliminar despesas, é acima de tudo gerir seus recursos de forma competente e racional, através de instrumentos adequados e eficientes.” o que acaba não acontecendo com empresas de micro e pequeno porte, que não têm muito capital para investir na área tecnológica. Por esse motivo, essas empresas foram escolhidas como cliente alvo, pois suas principais necessidades podem ser supridas com o projeto proposto. A automação do gerenciamento e atendimento em estabelecimentos alimentícios não é novidade, mas o crescimento do mercado a tornou indispensável para quem pensa em prosperar nesse setor. (CAPOBIANCO, 2010). Maricato (2001), diz que “a velocidade de crescimento é particularmente assustadora nas áreas de informática e da tecnologia. Os equipamentos se tornam obsoletos com dois ou três anos de uso. Qualquer empresário que quiser espaço no futuro tem de equipar e informatizar sua empresa”. Porém com sistemas cada vez maiores, mais complexos e mais caros, muitas empresas não conseguem acompanhar esse desenvolvimento acelerado da tecnologia. Por isso, o produto proposto atinge um publico que quer simplicidade e eficiência, sem fazer um investimento muito grande, trazendo apenas os módulos onde a empresa mais necessita de um controle preciso e rápido. 2.3 ATORES ENVOLVIDOS Um ator é todo o indivíduo que desempenha alguma função dentro do modelo de negócios da empresa. A identificação de suas atividades é essencial para o projeto de desenvolvimento de um software, compondo assim um mapeamento do processo de trabalho. Este tópico tem como objetivo, apresentar os atores envolvidos no modelo de negócios de um restaurante, detalhando resumidamente suas responsabilidades dentro do estabelecimento. 36 2.3.1 Gerente O gerente do estabelecimento é o responsável por controlar o fluxo das tarefas atribuídas no setor operacional, além de supervisionar o andamento das atividades realizadas. Uma das funções específicas desse profissional é manter as informações referentes aos produtos oferecidos pelo estabelecimento, listando as características relevantes de cada item. É fundamental que haja a constante manutenção e atualização da tabela de preços dos produtos comercializados pela empresa. O gerente também é responsável pela gestão da equipe, instruindo os demais funcionários e atribuindo tarefas, a fim de garantir a sincronia entre a execução do trabalho, podendo definir regras de bônus ou compensações para os funcionários mais efetivos. Esse ator também administra as regras de cobrança, condições de pagamento e demais normas aplicadas no processo de vendas. Ele define em quais situações serão oferecidos descontos ou somados acréscimos ao valor da conta. Outra função do gerente é determinar se existem promoções na aquisição de algum serviço ou produto oferecido pelo estabelecimento, e caso existam, especificam-se as condições da promoção, tais como período de vigência e valor ou percentual descontado no valor líquido. Fica a cargo do gerente do estabelecimento, supervisionar o fluxo de operações no caixa. Para isso é necessário determinar quais são os funcionários da empresa com permissão de acesso ao caixa. Os valores de abertura e fechamento de caixa são registrados e documentados a fim de contabilizar o total recebido no dia, semana ou mês. Esse total é calculado, somando os valores em dinheiro, cheque e notas de cartão de crédito armazenadas no caixa. 2.3.2 Atendente O atendente é responsável pela anotação dos pedidos feitos, permanecendo sempre à vista dos clientes para atendê-los. Ao atender uma mesa, o atendente inicia uma nova venda e registra todos os itens consumidos pela mesa em uma comanda. Após o registro dos itens, o ator notifica a cozinha a respeito do que foi solicitado. 37 Fica a cargo do atendente, registrar e notificar o cancelamento de algum item que compõe a venda, a pedido do cliente. Caso os integrantes da mesa desejem trocar de mesa, esse funcionário é responsável por efetuar a troca e também registrá-la. 2.3.3 Cozinha Os funcionários que fazem parte da cozinha são os responsáveis por providenciar os produtos que foram registrados pelo atendente e posteriormente entregá-los à mesa correspondente. 2.3.4 Caixa O caixa é o responsável pelo gerenciamento e segurança dos valores recebidos pela empresa. O funcionário encarregado de manipular o caixa do estabelecimento tem como função efetuar a cobrança das comandas preenchidas pelo atendente. Ele pode dividir a conta entre os diversos integrantes da mesa, recebendo os pagamentos referentes a cada parte individualmente. O caixa pode registrar o pagamento parcial de uma conta, caso um dos integrantes da mesa solicite a dedução do valor de sua parte antes do fechamento da mesa. Além disso, esse funcionário pode incluir acréscimos ou descontos determinados pelo gerente, ao valor total da comanda. Ao fim da cobrança o caixa encerra o atendimento à mesa, arquivando a comanda com a identificação de que já foi paga. Caso o cliente solicite, é preenchida uma nota que detalha os itens consumidos juntamente com seus valores unitários e o valor total da nota. É responsabilidade desse colaborador, gerenciar a abertura e o fechamento do caixa, mantendo registros dos valores em dinheiro, cheque e cartão. Além disso, são realizados e registrados os suprimentos e retiradas do caixa. O funcionário encarregado do caixa é quem faz o atendimento via telefone, anotando os pedidos e encaminhando para a cozinha, em processo semelhante ao do atendente. Ao registrar a entrega, o caixa mantém as informações relevantes do 38 cliente, como por exemplo, o nome e o endereço que devem ser direcionados aos entregadores. 2.4 DESCRIÇÕES DO AMBIENTE ATUAL Considerando que o sistema atual de administração da empresa utiliza de planilhas e comandas preenchidas manualmente, o projeto propõe uma solução tecnológica para estabelecimentos com até cinquenta colaboradores, com três a dez atendentes, e até cinco caixas. O espaço físico de um bar ou restaurante pode ser composto por vários ambientes para a escolha do cliente. Essa condição requer que funcionários responsáveis pelo atendimento, fiquem próximos das mesas o tempo todo. Os clientes fazem suas escolhas através do cardápio que fica na mesa, contendo os produtos e seus respectivos preços. Após anotar um pedido, o atendente desloca-se fisicamente até o balcão ou depósito, para providenciar a entrega do produto à mesa correspondente. Para efetuar o pagamento da conta, o cliente dirige-se até o balcão do caixa e comunica a forma de pagamento de sua escolha. O funcionário responsável pelo caixa calcula o total a ser cobrado, e após armazenar os valores no caixa, mantém o registro em um caderno ou ficha cadastral. Por fim, caso o cliente solicite, o caixa preenche um recibo, com o detalhamento do consumo. 2.5 PERSPECTIVAS DO PRODUTO O desenvolvimento do produto é uma proposta de solução de qualidade para uma área com amplo mercado. A área de comercio de alimentos em geral precisa de um software de apoio, porém não necessariamente um sistema robusto ou um ERP. O produto tem como clientes alvos as micro e pequenas empresas, portanto é importante que a solução leve em conta o baixo investimento em insfraestrutura e licenças de software, motivando por exemplo, a escolha do PostgreSQL como SGBD, por ser um software gratuito. 39 2.6 CARACTERISTICAS A partir da análise de negócios do público alvo do produto, são apresentados nesse tópico os requisitos identificados durante o estudo de caso. Agrupadas por prioridade, as funcionalidades listadas têm como objetivo sanar os problemas do estabelecimento, visando sempre a excelência operacional e a praticidade no gerenciamento. 2.6.1 Alta Prioridade Identifica-se como maior prioridade, a informatização dos processos que representam o eixo dos problemas do cliente. Considerando como principais adversidades o tempo gasto e o risco de falhas humanas no procedimento atual, a automatização dos métodos de venda e de fluxo de caixa é prioritária. Visto que o atendimento ao cliente e o controle de itens consumidos pela mesa são as principais atividades desempenhadas em um estabelecimento que comercializa alimentos, é fundamental que esse trabalho seja feito de forma prática e eficiente. Além disso, o gerente necessita de relatórios de vendas para embasarse ao tomar decisões, podendo, por exemplo, considerar a demanda dos produtos ao atribuir preços. Ao automatizar seus processos a partir de um software, além de agilizar seus métodos, a empresa almeja possuir recursos para administrar suas finanças. É considerado de alta prioridade o desenvolvimento de uma solução confiável para o controle de entrada e saída de capital, de forma que a cobrança das contas esteja sempre correta. O administrador da empresa precisa de relatórios gerais, anuais, mensais e diários para analisar e gerenciar o setor financeiro, levando em conta as movimentações do caixa. 2.6.2 Média Prioridade São considerados de prioridade média, os requisitos importantes para o modelo de negócios da empresa, mas não correspondem a problemas críticos do processo de trabalho. Dentre esses requisitos estão a opção de registro de entregas e a manutenção dos produtos e seus preços. 40 As entregas sem registros, ou com controle manual, estão sujeitas a perdas, o que causa uma insatisfação do cliente que fez o pedido. A automatização desse processo garante ao estabelecimento uma considerável diminuição nesse tipo de falha, e consequentemente o numero de clientes insatisfeitos. A informatização dos cadastros de produtos e preços torna prática a atualização desses dados, que é feita com frequência pelo gerente. 2.6.3 Baixa Prioridade Alguns itens são identificados como prioridades baixas em relação ao projeto. São funcionalidades úteis que tornam o sistema robusto, porém não são fundamentais para a conclusão do sistema como um todo. Entre essas funcionalidades destacam-se a manutenção automatizada de promoções e a emissão de recibos impressos pelo caixa. Restaurantes não informatizados não registram promoções formalmente, portanto não há um controle preciso para descontar o valor cobrado das vendas. A emissão de recibos é feita apenas quando o cliente solicita, através do preenchimento manual de notas, ocupando tempo do funcionário. Nos casos em que há fila de clientes para efetuar pagamentos, o caixa pode apressar-se para preencher o recibo, aumentando o risco de erros. A impressão automática de notas para o cliente torna o processo mais ágil e confiável. 2.7 OUTROS REQUISITOS Nesse tópico são descritos os itens que o cliente solicita para facilitar a implantação e o uso do sistema, mas que não fazem parte das regras de negócio. É preferível que o sistema seja web, pois o cliente almeja portabilidade para acessá-lo de qualquer lugar, necessitando apenas de um dispositivo que esteja conectado à internet. Gastos com hardware também são diminuídos, pois as máquinas não precisam de nenhuma configuração avançada para a sua utilização, apenas um navegador. As informações não ficam presas a um computador local, evitando assim possíveis perdas de informações devido a falhas ou formatação de disco. 41 Além disso, é requisitado um sistema com a interface amigável e intuitiva, que facilite a sua utilização para qualquer um dos funcionários, simplificando o treinamento, e não necessitando de profissionais especializados para a utilização do sistema. 42 3 ARQUITETURA DO SOFTWARE No capítulo é oferecida uma visão do produto através de diagramas que descrevem as características e funcionalidades do sistema. O desenvolvimento da arquitetura baseia-se na Unified Modeling Language (UML), e tem como intuito auxiliar as futuras manutenções no software. A ferramenta Astah é utilizada para produzir os diagramas de caso de uso, classe, sequência, MVC e atividade, enquanto o Data Modeler produz o projeto de banco de dados. 3.1 ANÁLISE DE REQUISITOS FUNCIONAIS A análise de requisitos funcionais tem como objetivo listar as funcionalidades identificadas pelo cliente durante a fase de análise de negócios. Para cada ator do sistema, são mapeados os recursos que o software deve oferecer, para que se alcance a solução tecnológica desejada pela empresa. (HUZITA, 2003) 3.1.1 Atendente Manter a venda e gerenciar pedidos 3.1.2 Gerente Manter os usuários Manter os produtos e seus preços Manter caixas e seus responsáveis Emitir relatórios de produtos, vendas e fluxo de caixa 3.1.3 Caixa Gerenciar o fluxo de caixa Manter a venda e gerenciar pedidos Manter clientes Manter entregas Emitir recibos 43 3.2 DIAGRAMA DE CASO DE USO Figura 3.1 – Diagrama de Caso de Uso Fonte: Elaborado pelos autores, 2013. 3.3 ESPECIFICAÇÕES DE HISTÓRIAS Neste tópico são descritas as histórias de cada caso de uso, informando passo a passo como os processos serão realizados no sistema, bem como o ator responsável por cada função. 3.3.1 Efetuar Login Ator: Gerente, Caixa e Garçom. Pré- requisito: Ser cadastrado como usuário do sistema. Descrição: Ao iniciar uma sessão do sistema, deve ser exibida a tela de autenticação de usuários, que contem o número identificador de usuário e a senha. Após a confirmação do login, a aplicação é redirecionada para a página principal do sistema. 44 3.3.2 Manter Usuários Ator: Gerente. Descrição: A manutenção de usuários possibilitará a inclusão de novos logins, além de alteração de senha e a opção de ativar/desativar usuários. 3.3.3 Manter Produtos Ator: Gerente. Pré-requisito: Existir a categoria do produto cadastrada. Descrição: Cadastrar ou alterar informações sobre produtos. Caso o produto saia de comercialização o usuário poderá alterar seu status para inativo, visto que a exclusão não será permitida. 3.3.4 Manter Categorias Ator: Gerente. Descrição: As categorias dos produtos podem ser cadastradas e alteradas pelo usuário. Caso alguma categoria deixe de ser utilizada, seu status pode ser alterado para inativo. A categoria pode ser associada a uma categoria-pai, formando assim uma árvore de categorias. 3.3.5 Manter Caixas Ator: Gerente. Descrição: Essa funcionalidade tem o intuito de permitir o cadastro dos caixas do estabelecimento. Nela há a opção de incluir usuários habilitados a manipular cada caixa. 3.3.6 Emitir Relatórios Ator: Gerente. Descrição: O gerente pode emitir relatórios variados. Entre eles os relatórios de vendas semanais, mensais e anuais. Relatórios de produtos oferecidos pelo estabelecimento. Relatórios semanais, mensais e anuais do fluxo de caixas. 45 3.3.7 Manter tipos de acréscimos Ator: Gerente. Descrição: O gerente pode realizar o cadastro, alteração ou exclusão de tipos acréscimos. A exclusão só pode ser feita se o acréscimo não foi utilizado em nenhuma venda. 3.3.8 Manter Mesas Ator: Gerente. Descrição: O gerente pode cadastrar, alterar ou desativar as mesas do estabelecimento. 3.3.9 Trocar Mesas Ator: Atendente. Pré-requisito: Selecionar uma mesa aberta como origem, e selecionar uma mesa qualquer como destino. Descrição: Caso algum cliente troque de mesa no restaurante, o atendente pode realizar uma troca via aplicativo Android, passando todos os produtos da mesa de origem para a mesa de destino. 3.3.10 Manter Vendas Ator: Caixa e Atendente. Descrição: O software deve oferecer ao cliente o gerenciamento das vendas ocorridas no restaurante, permitindo o registro de abertura e fechamento das mesas. A opção poderá ser acessada via navegador web pelo gerente ou aplicativo móvel pelo garçom. 3.3.11 Manter Itens da Venda Ator: Caixa e Atendente. Pré-requisito: Ter uma venda ou entrega aberta. 46 Descrição: A funcionalidade deve permitir que o usuário selecione uma venda ou entrega que esteja aberta, e inclua os itens que a compõem. Cada item pode ser composto por produtos ou acréscimos. A opção poderá ser acessada via navegador web ou aplicativo móvel. 3.3.12 Manter Pagamento de Itens Ator: Caixa. Pré-requisito: Ter um caixa aberto. Descrição: O funcionário responsável pelo caixa do estabelecimento deve poder selecionar um ou vários itens de uma venda, e efetuar o pagamento. Para registrar o pagamento, o usuário deve informar o valor pago, a forma de pagamento e o caixa em que o valor será depositado. Cada item da venda pode ser pago com diferentes formas de pagamento. Após a confirmação, o sistema deve lançar o valor no caixa selecionado. 3.3.13 Manter Clientes Ator: Caixa. Descrição: O usuário pode cadastrar dados pessoais do cliente como endereços, documentos e telefones. Pode também realizar alteração de informações ou excluir um cliente. O cadastro de clientes é fundamental para o gerenciamento de entregas. 3.3.14 Manter Entregas Ator: Caixa. Pré-requisito: Existir o cliente cadastrado no sistema. Descrição: As entregas são normalmente solicitadas por clientes que realizam ligações telefônicas para o estabelecimento. A busca de cliente poderá ser feita através do nome ou telefone, para facilitar a recuperação de endereço para entrega. A opção deve funcionar de forma semelhante ao processo de venda, porém os itens são associados a um cliente e não a uma mesa. 47 3.3.15 Abrir Caixa Ator: Caixa. Pré-requisito: Ser cadastrado como responsável pelo caixa. Descrição: O usuário deve poder selecionar um caixa ao qual tem permissão de acesso, e informar data, hora e valor de abertura. O valor de abertura deve estar em conformidade com o valor do último fechamento do caixa. 3.3.16 Suprir Caixa Ator: Caixa. Pré-requisito: Ser o usuário responsável pela abertura do caixa. Descrição: Somente o usuário que realizou a abertura do caixa pode realizar a reposição de dinheiro no caixa, informando o valor, a data e hora do suprimento. 3.3.17 Retirar do Caixa Ator: Caixa. Pré-requisito: Ser o usuário responsável pela abertura do caixa. Descrição: Somente o usuário que realizou a abertura do caixa pode realizar a retirada de dinheiro do caixa, informando o valor, a data, hora e a forma do débito, que pode ser em dinheiro, cartão ou cheque. 3.3.18 Lançar em Caixa Ator: Caixa. Pré-requisito: Ser o usuário responsável pela abertura do caixa. Descrição: Somente o usuário que realizou a abertura do caixa pode fazer lançamentos de valores variados depositados em caixa. 3.3.19 Fechar Caixa Pré-requisito: Ator: Caixa. Pré-requisito: Ser o usuário responsável pela abertura do caixa. 48 Descrição: O fechamento do caixa só pode ser feito por quem realizou a abertura. Ao fechar o caixa o usuário confere os valores que tem no sistema e informa os totais de dinheiro, cartão e cheque existentes no caixa físico. O caixa não pode ser fechado caso haja diferença entre o sistema e o caixa. 3.4 PROJETO DE BANCO DE DADOS Um banco de dados bem projetado fornece um acesso conveniente e rápido às informações desejadas. Com uma boa estrutura e projeto bem definidos, menos tempo é gasto na sua construção e ao mesmo tempo, asseguram-se resultados precisos. O projeto visa capturar as necessidades da organização em termos de armazenamento de dados. (BATTISTI, 2005) Segundo Heuser (1998), um modelo lógico é uma descrição de um banco de dados no nível de abstração visto pelo usuário do SGBD. Assim, o modelo lógico é dependente do tipo particular de SGBD que está sendo usado, o projeto atual utiliza o modelo relacional onde os dados estão organizados na forma de tabelas. O modelo lógico define como o banco de dados será implementado no SGBD. O modelo lógico já leva em conta algumas limitações do SGBD e desenvolve recursos, proporcionando ampla e flexível capacidade de estruturação. São lógicos porque sua implementação não precisa ser conhecida. Nele já são definidas as chaves primárias e estrangeiras. (REZENDE, 2004) O modelo relacional representa os dados em um banco de dados como uma coleção de tabelas. Cada tabela deve possuir um nome, que será único, e um conjunto de atributos com seus respectivos nomes e tipos. Todos os valores de uma coluna são do mesmo tipo de dados. (BAPTISTA, 2010) Nesta seção é oferecida uma visão do projeto de banco de dados através dos modelos lógico e relacional. 49 3.4.1 Modelo Lógico Figura 3.2 – Modelo Lógico Fonte: Elaborado pelos autores, 2013. 50 3.4.2 Mapeamento para Modelo Relacional Figura 3.3 – Modelo Relacional Fonte: Elaborado pelos autores, 2013. 51 3.5 DIAGRAMA DE CLASSE Figura 3.4 – Diagrama de Classe Fonte: Elaborado pelos autores, 2013. 52 3.6 DIAGRAMA DE ATIVIDADE Os diagramas de atividade são representações gráficas que ilustram o fluxo de atividades envolvendo as etapas de um único processo, e são utilizados para fazer a modelagem de aspectos dinâmicos do sistema. Uma atividade pode ser considerada uma ação executada no sistema que resulta em uma mudança de estado ou no retorno de um valor. (DUARTE, 2012) Neste tópico são apresentados todos os diagramas de atividade relacionados ao presente projeto, que descrevem os passos necessários para a conclusão de uma atividade no sistema. 3.6.1 Manter Usuários Figura 3.5 – Diagrama de Atividade Manter Usuários Fonte: Elaborado pelos autores, 2013. 53 3.6.2 Login Figura 3.6 – Diagrama de Atividade Login Fonte: Elaborado pelos autores, 2013. 3.6.3 Trocar Mesa Figura 3.7 – Diagrama de Atividade Trocar Mesa Fonte: Elaborado pelos autores, 2013. 54 3.6.4 Manter Produtos Figura 3.8 – Diagrama de Atividade Manter Produtos Fonte: Elaborado pelos autores, 2013. 3.6.5 Manter Categorias Figura 3.9 – Diagrama de Atividade Manter Categorias Fonte: Elaborado pelos autores, 2013. 55 3.6.6 Manter Caixas Figura 3.10 – Diagrama de Atividade Manter Caixas Fonte: Elaborado pelos autores, 2013. 3.6.7 Manter Acréscimos Figura 3.11 – Diagrama de Atividade Manter Tipos de Acréscimos Fonte: Elaborado pelos autores, 2013. 56 3.6.8 Manter Mesas Figura 3.12 – Diagrama de Atividade Manter Mesas Fonte: Elaborado pelos autores, 2013. 3.6.9 Manter Vendas Figura 3.13 – Diagrama de Atividade Manter Vendas Fonte: Elaborado pelos autores, 2013. 57 3.6.10 Manter Pagamentos Figura 3.14 – Diagrama de Atividade Manter Pagamento de Itens Fonte: Elaborado pelos autores, 2013. 58 3.6.11 Manter Itens Figura 3.15 – Diagrama de Atividade Manter Itens Fonte: Elaborado pelos autores, 2013. 3.6.12 Manter Cliente Figura 3.16 – Diagrama de Atividade Manter Clientes Fonte: Elaborado pelos autores, 2013. 59 3.6.13 Manter Entregas Figura 3.17 – Diagrama de Atividade Manter Entregas Fonte: Elaborado pelos autores, 2013. 3.6.14 Abrir Caixa Figura 3.18 – Diagrama de Atividade Abrir Caixa Fonte: Elaborado pelos autores, 2013. 60 3.6.15 Suprir Caixa Figura 3.19 – Diagrama de Atividade Suprir Caixa Fonte: Elaborado ado pelos autores, 2013. 3.6.16 Retirar do Caixa Figura 3.20 – Diagrama de Atividade Retirar do Caixa Fonte: Elaborado pelos autores, 2013. 61 3.6.17 Lançar em Caixa Figura 3.21 – Diagrama de Atividade Lançar em Caixa Fonte: Elaborado pelos autores, 2013. 62 3.6.18 Fechar Caixa Figura 3.22 – Diagrama de Atividade Fechar Caixa Fonte: Elaborado pelos autores, 2013. 3.7 MVC O MVC é um padrão de arquitetura de desenvolvimento de softwares que tem como objetivo a divisão das regras de negócio e as interfaces em diferentes camadas, facilitando assim a manutenção e a adição de novos componentes no software. (GAMA, 2011) Esse padrão tem três elementos conhecidos como Modelo, Visão e Controlador, onde cada um desempenha um papel diferente na aplicação. Na camada de modelo são especificadas as regras de negócio, definindo validações, acesso a banco de dados, cálculos entre outros tratamentos. A visão é responsável exclusivamente para a entrada e visualização de dados. O controlador é criado para receber os dados da visão e encaminha-los para o modelo, não contendo nenhuma regra de negócio implementada. (GAMA, 2011) Neste tópico são apresentados os diagramas de MVC que compõem o projeto do software. 63 3.7.1 Manter Usuários Figura 3.23 – Diagrama de MVC Manter Usuários Fonte: Elaborado pelos autores, 2013. 3.7.2 Manter Login Figura 3.24 – Diagrama de MVC Login Fonte: Elaborado pelos autores, 2013. 64 3.7.3 Trocar Mesa Figura 3.25 – Diagrama de MVC Trocar Mesa Fonte: Elaborado pelos autores, 2013. 3.7.4 Manter Categorias Figura 3.26 – Diagrama de MVC Manter Categorias Fonte: Elaborado pelos autores, 2013. 65 3.7.5 Manter Produtos Figura 3.27 – Diagrama de MVC Manter Produtos Fonte: Elaborado pelos autores, 2013. 3.7.6 Manter Acréscimos Figura 3.28 – Diagrama de MVC Manter Acréscimos Fonte: Elaborado pelos autores, 2013. 66 3.7.7 Manter Caixas Figura 3.29 – Diagrama de MVC Manter Caixas Fonte: Elaborado pelos autores, 2013. 3.7.8 Manter Cliente Figura 3.30 – Diagrama de MVC Manter Cliente Fonte: Elaborado pelos autores, 2013. 67 3.7.9 Manter Entrega Figura 3.31 – Diagrama de MVC Manter Entrega Fonte: Elaborado pelos autores, 2013. 3.7.10 Manter Mesa Figura 3.32 – Diagrama de MVC Manter Mesa Fonte: Elaborado pelos autores, 2013. 68 3.7.11 Manter Item Figura 3.33 – Diagrama de MVC Manter Item Fonte: Elaborado pelos autores, 2013. 3.7.12 Manter Pagamento Figura 3.34 – Diagrama de MVC Manter Pagamento Fonte: Elaborado pelos autores, 2013. 69 3.7.13 Abrir Caixa Figura 3.35 – Diagrama de MVC Abrir Caixa Fonte: Elaborado pelos autores, 2013. 3.7.14 Fechar Caixa Figura 3.36 – Diagrama de MVC Fechar Caixa Fonte: Elaborado pelos autores, 2013. 70 3.7.15 Retirar do Caixa Figura 3.37 – Diagrama de MVC Retirar do Caixa Fonte: Elaborado pelos autores, 2013. 3.7.16 Suprir Caixa Figura 3.38 – Diagrama de MVC Suprir Caixa Fonte: Elaborado pelos autores, 2013. 71 3.7.17 Manter Lançamento Figura 3.39 – Diagrama de MVC Manter Lançamento Fonte: Elaborado pelos autores, 2013. 3.7.18 Manter Venda Figura 3.40 – Diagrama de MVC Manter Venda Fonte: Elaborado pelos autores, 2013. 72 3.8 DIAGRAMA DE SEQUÊNCIA O diagrama de sequência representa a troca de mensagens entre os componentes do sistema, em determinada ação, mostrando o fluxo de controle entre as instâncias de classes, subsistemas ou atores. (BAESSO, 2004) Este diagrama tem como objetivo representar graficamente o comportamento dos componentes da aplicação em tempo de execução. (BAESSO, 2004) Neste tópico são apresentados todos os diagramas de sequência do projeto. 3.8.1 Manter Usuário Figura 3.41 – Diagrama de Sequência Manter Usuário Fonte: Elaborado pelos autores, 2013. 73 3.8.2 Login Figura 3.42 – Diagrama de Sequência Login Fonte: Elaborado pelos autores, 2013. 3.8.3 Manter Lançamento Figura 3.43 – Diagrama de Sequência Manter Lançamento Fonte: Elaborado pelos autores, 2013. 74 3.8.4 Manter Caixas Figura 3.44 – Diagrama de Sequência Manter Caixas Fonte: Elaborado pelos autores, 2013. 3.8.5 Abrir Caixa Figura 3.45 – Diagrama de Sequência Abrir Caixa Fonte: Elaborado pelos autores, 2013. 75 3.8.6 Manter Categorias Figura 3.46 – Diagrama de Sequência Manter Categorias Fonte: Elaborado pelos autores, 2013. 3.8.7 Fechar Caixa Figura 3.47 – Diagrama de Sequência Manter Lançamento Fonte: Elaborado pelos autores, 2013. 76 3.8.8 Manter Entregas Figura 3.48 – Diagrama de Sequência Manter Entregas Fonte: Elaborado pelos autores, 2013. 3.8.9 Suprir Caixa Figura 3.49 – Diagrama de Sequência Suprir Caixa Fonte: Elaborado pelos autores, 2013. 77 3.8.10 Manter Cliente Figura 3.50 – Diagrama de Sequência Manter Cliente Fonte: Elaborado pelos autores, 2013. 3.8.11 Retirar do Caixa Figura 3.51 – Diagrama de Sequência Retirar do Caixa Fonte: Elaborado pelos autores, 2013. 78 3.8.12 Manter Mesa Figura 3.52 – Diagrama de Sequência Manter Mesa Fonte: Elaborado pelos autores, 2013. 3.8.13 Trocar Mesa Figura 3.53 – Diagrama de Sequência Trocar Mesa Fonte: Elaborado pelos autores, 2013. 79 3.8.14 Manter Itens Figura 3.54 – Diagrama de Sequência Manter Itens Fonte: Elaborado pelos autores, 2013. 3.8.15 Manter Pagamento Figura 3.55 – Diagrama de Sequência Manter Pagamento Fonte: Elaborado pelos autores, 2013. 80 3.8.16 Manter Produtos Figura 3.56 – Diagrama de Sequência Manter Produtos Fonte: Elaborado pelos autores, 2013. 3.8.17 Manter Venda Figura 3.57 – Diagrama de Sequência Manter Venda Fonte: Elaborado pelos autores, 2013 81 3.8.18 Manter Acréscimos Figura 3.58 – Diagrama de Sequência Manter Acréscimos Fonte: Elaborado pelos autores, 2013. 82 4 PROTÓTIPO FUNCIONAL Neste capítulo é apresentado o protótipo do sistema, através de imagens das aplicações web e móvel em funcionamento. É exposta apenas parte das funcionalidades oferecidas pelo software, com o intuito de demonstrar a visão do usuário final. 4.1 LOGIN Nas figuras 4.1 e 4.2 são ilustradas a tela de login do sistema web, e do aplicativo Android respectivamente. A autenticação de usuários é a tela inicial do sistema, essencial para manter o controle de sessões e as permissões de acesso dentro da aplicação. Figura 4.1 – Login Fonte: Elaborado pelos autores, 2013. 83 Figura 4.2 – Login módulo Android Fonte: Elaborado pelos autores, 2013. 4.2 CADASTROS As telas de cadastro do sistema seguem um padrão, onde inicialmente é exibida uma lista com todos os registros, dando ao usuário as opções de inserir, alterar e excluir informações. Na figura 4.3 é ilustrado o cadastro de produtos. Ao carregar a página, o usuário tem também a opção de filtrar os produtos por uma categoria específica. Figura 4.3 – Cadastro de Produtos Fonte: Elaborada pelos autores, 2013. 84 Ao ser acionado o botão “Novo”, situado logo abaixo da lista de registros, é exibido para o usuário o formulário de cadastro. A janela é carregada com os campos vazios para que seja efetuada a inserção de novos dados como mostra a figura 4.4. Figura 4.4 – Cadastro de Produtos (Opção “Novo”) Fonte: Elaborado pelos autores, 2013. Para cada linha da lista de registros, existem os botões “Alterar” e “Excluir”. A opção “Alterar” exibe para o usuário o mesmo formulário acionado através do botão “Novo”, porém nele são carregados os dados do registro selecionado. As informações referentes ao cadastro podem ser atualizadas no banco de dados através do botão “Gravar”, como é ilustrado na figura 4.5. Os botões “Excluir”, disponíveis tanto na tabela de registros quanto no formulário, quando acionados, apagam o registro do banco de dados de forma permanente. O padrão de manutenção de dados do sistema abrange as telas de cadastros dos módulos de usuários, produtos, caixas e vendas. 85 Figura 4.5 – Cadastro de Produtos (Opção “Alterar”) Fonte: Elaborado pelos autores, 2013. 4.3 MOVIMENTAÇÕES VIA NAVEGADOR WEB A manutenção das vendas dos estabelecimentos e seus respectivos itens é a principal movimentação de dados dentro do sistema. A funcionalidade está disponível na aplicação web através do menu “Vendas”, como mostra a figura 4.6. São exibidas inicialmente todas as mesas cadastradas. A coluna “Aberta” aparece checada caso a mesa já possua uma venda em andamento. Figura 4.6 – Tela de Vendas Fonte: Elaborado pelos autores, 2013. 86 Ao selecionar uma mesa, o usuário tem acesso à tela de “Itens da Venda” como ilustra a figura 4.7. Caso a mesa não possua nenhuma venda em andamento, uma nova venda pode ser iniciada através do botão “Abrir/Fechar”, caso contrário a venda será encerrada. Para que a mesa possa ser fechada, todos os itens devem estar pagos. Figura 4.7 – Itens da Venda (Aba Itens a Pagar) Fonte: Elaborado pelos autores, 2013. Os itens que compõem a venda estão divididos em duas abas. A primeira é identificada por “Itens a pagar”, onde todos os itens que foram consumidos na mesa e ainda não foram pagos são visualizados. Três operações podem ser realizadas nessa aba através dos botões “Novo”, “Dividir Itens” e “Registrar Pagamento”. Ao acionar o botão “Novo”, é exibido ao usuário o formulário de cadastro de itens da venda, que permite a inclusão de produtos ou acréscimos cadastrados previamente, como mostra a figura 4.8. 87 Figura 4.8 – Cadastro de Item Fonte: Elaborado pelos autores, 2013. O botão “Dividir Itens” figura 4.9, realiza a divisão do(s) item(ns) conforme a quantidade informada pelo usuário. Essa opção tem o intuito de repartir igualmente o valor total dos itens que serão pagos por mais de uma pessoa. Após a divisão é criado um item para cada parte do produto dividido, conforme ilustra a figura 4.10. Figura 4.9 – Dividir Itens Fonte: Elaborado pelos autores, 2013. 88 Figura 4.10 – Itens Divididos Fonte: Elaborado pelos autores, 2013. A opção “Registrar Pagamentos” permite que, depois de selecionados um ou mais itens a pagar, sejam informados os dados referentes ao pagamento. É necessário preencher a informação do caixa em que será depositado o valor. Ao fim da operação, os itens passam a ser visualizados na aba de “Itens Pagos”, conforme é apresentado na figura 4.11. Figura 4.11 – Registrar Pagamento Fonte: Elaborado pelos autores, 2013. 89 A aba “Itens Pagos” apresenta todos os itens que já estão quitados. Nela encontra-se a opção “Estornar Pagamento”, para o caso de problemas com o pagamento realizado. Se estornado, o lançamento é cancelado e os itens ficam habilitados para pagamento novamente. Figura 4.12 – Itens da Venda (Aba Itens Pagos) Fonte: Elaborado pelos autores, 2013. 4.4 MOVIMENTAÇÕES VIA DISPOSITIVO MÓVEL O cadastro de itens do aplicativo Android é ilustrado na figura 4.13. O usuário seleciona uma mesa e a categoria do produto desejado. Após isso é exibida a lista de produtos pertencentes à categoria informada, para que seja anotado o pedido. Figura 4.13 – Realizar pedido módulo Android Fonte: Elaborado pelos autores, 2013. 90 Ao selecionar um produto da lista, é aberta uma nova janela, onde podem ser informadas a quantidade de itens e uma observação, como ilustrado na figura 4.13. Figura 4.14 – Gravar pedido Fonte: Elaborado pelos autores, 2013. A interface de “Registro de Atendimento”, figura 4.15, tem como finalidade exibir os itens de vendas cadastrados tanto pelo aplicativo Android quanto pelo sistema web. Um processo em background atualiza automaticamente a interface para que então a cozinha, ou o atendente responsável pelo estoque providencie o produto, e posteriormente o encaminhe para entrega à mesa. Figura 4.15 – Registro de atendimento Fonte: Elaborado pelos autores, 2013. 91 4.5 EMISSÃO DE RELATÓRIOS A aba “Itens Pagos”, figura 4.16, permite que o usuário selecione um ou mais itens, para que seja emitido o relatório através do botão “Gerar Recibo”. Figura 4.16 – Gerar Recibo Fonte: Elaborado pelos autores, 2013. O sistema apresenta ao usuário a pré-visualização do relatório, como ilustrado na figura 4.17, com as opções “Salvar” e “Imprimir”. O arquivo pode ser salvo na máquina cliente com a extensão pdf, docx, HTML ou xls. Figura 4.17 – Recibo de Pagamento Fonte: Elaborado pelos autores, 2013. 92 CONCLUSÃO O curso de tecnologia em banco de dados tem o intuito de formar profissionais capacitados e especializados, aptos a desenvolver soluções tecnológicas que colaborem com o desenvolvimento científico e econômico. Tomando por base essa afirmação, o projeto construído busca oferecer um software para a área de comercial, focando inicialmente o ramo de alimentos, porém com a possibilidade de futuras adaptações para outros tipos de comércio. O tema do trabalho desenvolvido foi escolhido devido à grande crescente do mercado de dispositivos móveis, que causou o desejo por aprender a trabalhar com software desse segmento. O projeto tem como objetivo a pesquisa, compreensão e aplicação prática de uma conexão entre sistema web e aplicativo móvel. Sendo assim, é possível concluir que o objetivo foi alcançado com êxito, de modo que ambos os aplicativos trabalham de forma síncrona através do Web Service especificado durante o trabalho. Foi fundamental para o projeto o aprendizado de novas tecnologias através de diversos meios, tais como internet, livros, artigos e revistas, visto que um dos principais benefícios do trabalho de conclusão de curso é a oportunidade de o aluno buscar conhecimento fora da sala de aula. Os Frameworks JSF e PrimeFaces foram empregados com sucesso no projeto, bem como o assistente de desenvolvimento de relatórios iReports, ocasionando maior produtividade para a evolução do trabalho de graduação. O sistema gerenciador de bancos de dados PostgreSQL apresentou bom desempenho e interface prática e intuitiva para o desenvolvedor. Considerado o curso de banco de dados como um todo, foi possível aplicar grande parte do aprendizado adquirido ao longo dos semestres, visto que o projeto emprega de forma prática os conceitos e paradigmas oferecidos pelas disciplinas referentes a Engenharia de Software, Bancos de Dados, Linguagens de Programação, entre outras. O trabalho pode ser evoluído através do desenvolvimento de novos módulos do sistema, tais como "Recursos Humanos" e "Business Inteligence", e também da implementação de interfaces voltadas para o consumidor final, permitindo que o cliente realize pedidos por conta própria via navegador web ou dispositivo Android. Pode-se ainda ser realizada a pesquisa e aplicação de um aplicativo para plataforma iOS integrado ao sistema web. 93 APÊNDICE A – Integração entre Android e Aplicação Web. Enviar e receber dados do aplicativo Android para o sistema web foi um dos desafios desse projeto. Segundo Lecheta, o Android usa como banco de dados o SQLite, que na verdade é uma biblioteca em linguagem C, que implementa um banco de dados SQL embutido. É recomendado o uso do SQLite quando poucas requisições são feitas ao aplicativo, ou quando o sistema é embarcado, ou seja, a aplicação fica completamente encapsulada ou dedicada ao dispositivo. Para que a requisição do usuário via dispositivo móvel fosse inserida no mesmo banco de dados que o sistema web, era necessário criar uma conexão entre os dois. Para o envio de dados foram usadas as classes Socket e ServerSocket do pacote java.net. Para receber os dados do sistema foi utilizado um web service, que trabalha em conjunto com a biblioteca ksoap2. Para começar, dentro do projeto do sistema web no NetBeans é criada a classe “ValidaSocket”, Figura 1, onde são instanciados um objeto da classe ServerSocket e um da classe Socket. A constante “PORTA” é utilizada para declarar a porta que será utilizada para o acesso do aplicativo móvel. Esse arquivo necessita do método main, para que possa ser executado e assim permanecer aguardando a requisição do aplicativo Android. Figura 1 – Classe Principal – ValidaSocket Fonte: Elaborado pelos autores, 2013. 94 A segunda classe a ser implementada é a ValidaSocketThread, Figura 2. Essa classe abre a InputStream e OutputStream do socket e delega a lógica de leitura e escrita no canal de comunicação com o socket-cliente para as classes Valida, TrocaMesa e VendaAndroid. Mais detalhes sobre como criar sockets, threads e manipular streams em Java não são fornecidos, pois não é esse o objetivo dessa seção. Para leitura de variáveis que são enviadas pelo Android, é utilizada a DataInputStream, e para transmitir dados para o aplicativo é utilizada a DataOutputStream. A String “func” recebe o primeiro parâmetro enviado pela aplicação Android, sendo acionado o método readUTF() que lê Strings. Outros métodos podem ser empregados para ler as variáveis dependendo de seus tipos, como por exemplo, readInt(), para ler inteiros, readDouble(), para ler variáveis do tipo Double. Figura 2 – ValidaSocketThread Fonte: Elaborado pelos autores, 2013. A variável “func” é utilizada para distinguir qual será a funcionalidade ativada pelo sistema web. Cada tela que envia dados do aplicativo Android passa um valor diferente, definindo o procedimento a ser exercido a partir da aplicação. Quando o valor é “valida”, a classe “Valida” é instanciada, passando como parâmetro para o método construtor o objeto “in” que é uma instancia da classe 95 DataInputStream. Posteriormente é acionado o método “validar” que realiza a autenticação de usuário e senha através dos valores recebidos da tela de login do aplicativo Android, e então disparado o método “enviar”, que obtém a resposta da DAOUser e retorna a resposta para o Android. Na classe “Valida”, Figura 3, é instanciada a DAO do usuário e então definidas as variáveis que recebem os valores passados pelo aplicativo. O método “validar”, aciona o método validaLogin(User) que está na DAOUser, passando como parâmetro as variáveis lidas de usuário e senha, retornando um valor booleano true se as informações forem validas ou false se as informações não coincidirem com as que estão no banco. A partir da variável de retorno, é enviada a resposta para o Android através do método “enviar”. Figura 3 – Classe Valida Fonte: Elaborado pelos autores, 2013. 96 Na figura 4, é ilustrado o método da DAOUser responsável pela validação de dados de usuário e senha, recuperando as informações do banco de dados. Figura 4 – Método validaLogin Fonte: Elaborado pelos autores, 2013. Para recuperar informações do banco e enviá-las para o aplicativo Android, foi utilizado um Web Service (WS) criado junto ao sistema web. Para adicionar um WS basta clicar com o botão direito no projeto Java e, no menu “Novo”, procurar pela opção “Web Service” como ilustra a figura 5. Figura 5 – Criando um Web Service Fonte: Elaborado pelos autores, 2013. 97 Após preencher o “Nome do Web Service” e escolher o pacote onde ele ficará localizado, como ilustra a figura 6, é preciso acionar o botão “Finalizar”. Figura 6 – Criando um Web Service preenchendo os campos. Fonte: Elaborado pelos autores, 2013. Um arquivo localizado no pacote selecionado será criado como mostra a figura 7. E uma nova pasta será adicionada contendo o novo Web Service, como mostra a figura 8. Figura 7 – Arquivo do Web Service Fonte: Elaborado pelos autores, 2013. Figura 8 – Pasta dos Web Services Fonte: Elaborado pelos autores, 2013. 98 Para incluir um método, acione o ícone do Web Service com o botão direito e selecione “Adicionar Operação” como mostra a figura 9. Figura 9 – Adicionar operação Fonte: Elaborado pelos autores, 2013. Na tela de adicionar operação, o nome do método precisa ser preenchido, bem como seu tipo de retorno. Como ilustra a figura 10, o método é identificado por “getCategoriaAndroid”, que retorna uma lista de categorias, List<CategoriaAndroid>. Figura 10 – Adicionar detalhes da operação Fonte: Elaborado pelos autores, 2013. 99 No arquivo, figura 11, existe a programação detalhada da operação criada anteriormente. No método getCategoriaAndroid por exemplo, é instanciada a DAOCategoria, depois é definida uma variável do tipo List<CategoriaAndroid>, que é uma lista do modelo CategoriaAndroid. Essa variável é preenchida pelo método da DAOCategoria, selectCategoriaAndroid(), que retorna uma lista de CategoriaAndroid que é atribuída pra dentro da variável listCat. E então essa variável é retornada, preenchida com uma lista de objetos da classe CategoriaAndroid. Figura 11 – Arquivo gerado pelo Web Service. Fonte: Elaborado pelos autores,2013. A Figura 12 ilustra o método selectCategoriaAndroid() da DAOCategoria. Ele acessa o banco de dados Postrgre e retorna as categorias juntamente com seus produtos. As categorias são adicionadas em uma ArrayList<CategoriaAndroid>, que é uma lista de objetos da classe CategoriaAndroid. Essa classe contém os atributos: “codcategoria”, que contém o código da categoria, “descategoria”, que contém a descrição da categoria, e “prods”, que é 100 uma variável do tipo String, que contém os nomes de todos os produtos da categoria separados por ponto e vírgula. Figura 12 – Método selectCategoriaAndroid() Fonte: Elaborado pelos autores, 2013. Agora os dados serão enviados do aplicativo Android para o sistema web via socket, e recebidos do Web Service para então exibir na tela. A classe LoginActivity, Figura 13, é responsável por gerenciar as informações de login do usuário e realizar sua validação. Para enviar os dados via aplicativo móvel, duas constantes precisam ser criadas para definir o endereço de conexão do socket, “IP” e “PORTA”. A primeira com o valor de 10.0.2.2, e a segunda com o valor 7777. É importante ressaltar que o IP geralmente usado pela máquina é o 127.0.0.1 ou localhost, pois o acesso é local. Porém esses endereços já são utilizados internamente pelo Android para referenciar o emulador, por isso opta-se pelo 10.0.2.2. O método loginOnClick é acionado pelo botão de login da tela principal do sistema. Detalhes sobre a implementação das telas não serão fornecido, pois não é esse o objetivo dessa seção. Após recuperar as informações referentes a usuário e senha, dentro de um bloco de try-catch, é instanciada a classe Valida, passando como parâmetro as constantes de IP e porta. Lembrando que em aplicações reais esse endereço de IP seria um endereço válido de internet. 101 Uma variável int é criada para recuperar o valor que é retornado pelo método validar(int,String), que pode ser encontrado na classe Valida, onde o primeiro parâmetro é o usuário e o segundo é a senha. O valor retornado por esse método é que influenciará na ação da classe. Se a resposta for 0, então a aplicação deve exibir a tela MainActivity, que é a segunda tela do sistema, onde então o usuário tem permissão de navegar pelo aplicativo. Caso a resposta seja diferente disso, o aplicativo informa ao usuário através de uma mensagem de erro que o usuário ou senha estão incorretos. Figura 13 – LoginActivity Fonte: Elaborado pelos autores, 2013. A classe Valida, figura 14, ilustra como são enviados os valores do aplicativo móvel para o sistema web. Alguns atributos são criados para a classe Valida. Um int para armazenar a resposta da validação, um objeto do tipo Socket, um objeto do tipo DataOutputStream e um do DataInputStream. O método construtor da classe deve 102 receber uma String e um int como parâmetros, que representam respectivamente o IP e a PORTA para conectar com o socket. O método validar(int, String) recebe os valores de usuário e senha.Tudo que é enviado do aplicativo usa o “out”, e tudo que é recebido do sistema web usa o “in”. O primeiro valor é uma String a ser enviada pelo método writeUTF(), outros tipos de dados utilizam outros métodos, como writeInt(), para inteiros, writeDouble() para ler variáveis do tipo Double, etc. A ordem em que os dados são enviados e lidos é de extrema importância, pois eles devem ser lidos no Sistema Web na mesma ordem em que são enviados do aplicativo Android. O “out.flush()” é responsável por enviar os dados, e o “in.readInt()” é o responsável por ler a resposta do Sistema Web. A resposta é então armazenada na variável “res”, que posteriormente é retornada. Por fim, todos os atributos são fechados através do método “close()”. Figura 14 – Classe Valida Fonte: Elaborado pelos autores, 2013. 103 Para recuperar os dados via Web Service, é necessário adicionar o JAR da biblioteca ksoap, como ilustra a figura 15. Figura 15 – Arquivos .JAR da biblioteca ksoap Fonte: Elaborado pelos autores, 2013. Para recuperar as informações de categoria é necessário criar a classe de Categoria, como ilustra a Figura 16, contendo os atributos: “codCategoria”, “desCategoria” e “prods”. Criam-se também todos os getters e setters dos atributos. O método toString() precisa ser implementado, para retornar os valores que aparecerão no combo box de categoria na tela para o usuário. Figura 16 – Classe Categoria Fonte: Elaborado pelos autores, 2013. 104 A classe ConexaoWS, figura 17, recupera os dados de categoria, através do método getCategoriaAndroid do Web Service. Na constante NAMESPACE é informado o pacote onde o Web Service é encontrado, no exemplo o pacote é o “android”. METHOD_NAME define o nome do método que está no WS. SOAP_ACTION recebe o nome do pacote/nome do método. E a URL recebe o valor da URL de acesso ao Web Service. O método getCategoria() da classe ConexaoWS retorna um vetor de objetos do tipo categoria. Dentro desse método, é feita a comunicação entre o Web Service e o Android, que através do objeto, soapObject, recupera os valores das categorias, que são inseridos no objeto de Categoria “ca”. Então esse objeto é adicionado para o vetor de categoria “cat”, que é então retornado. Figura 17 – Classe ConexaoWS Fonte: Elaborado pelos autores, 2013. 105 A classe vendaActivity é responsável por recuperar as informações das categorias e preencher um Spinner (componente Android semelhante a um Combo Box) com as informações de categoria. Essas informações são preenchidas através do MyAsyncTask2(), pois a recomendação é para que o aplicativo não tenha que processar todas as informações no método onCreate(), para que não tenha problemas de performance. Figura 18 – VendaActivity Fonte: Elaborado pelos autores, 2013. A classe MyAsyncTask2() faz a conexão com o Web Service através da classe ConexaoWS, e recupera as descrições das categorias, preenchendo assim o Spinner com essas informações, como as figuras 19 e 20 ilustram. As figuras foram divididas apenas para uma melhor leitura do código, mas elas pertencem à mesma classe. Para que a lista de produtos mude conforme a categoria selecionada pelo usuário, todos dos produtos foram passados por uma String chamada “prods”, onde os nomes dos produtos estavam separados por ponto e virgula, nesse método é feito um tratamento onde os nomes são separados um por um, preenchendo um vetor de String, que é utilizado para preencher um list, onde o usuário pode ver 106 todos os produtos da categoria selecionada, para fazer então a solicitação do pedido. Por fim, a figura 21 ilustra como preencher a lista de produtos através do método preencherListaProdutos(String[]) que recebe como parâmetro um vetor de String, com os nomes dos produtos, e abre uma nova janela a partir de um item clicado dessa lista. São passados para essa nova tela os seguintes parâmetros: numero da mesa que está realizando o pedido, recuperado a partir de um spinner, o produto selecionado na lista e o ID do usuário. Figura 19 – MyAsyncTask2 parte 1 Fonte: Elaborado pelos autores,2013. 107 Figura 20 – MyAsyncTask2 parte 2 Fonte: Elaborado pelos autores,2013. Figura 21 – Método preencherListaProdutos(String[]) Fonte: Elaborado pelos autores,2013. 108 REFERÊNCIAS BIBLIOGRÁFICAS ARAUJO, C. O IDE NetBeans. Easy Java Magazine. Rio de Janeiro, n. 5, p. 15-29, abr. 2011. ARAUJO, E. Comparando as IDEs NetBeans e Eclipse. Easy Java Magazine. Rio de Janeiro, n. 22, set. 2012. BLEWITT, A. Eclipse Juno traz Eclipse 4 como padrão. Disponível em: <http://www.infoq.com/br/news/2012/07/eclipse-juno> Acesso em: 10 abr. 2013. BRIGATTO, P. C. JSF 2 e o PrimeFaces. Java Magazine. São Paulo, n. 108, p. 6998, out. 2012. DANTAS, C. E. Desenvolvimento com Primefaces. Java Magazine. São Paulo, n. 112, jan. 2013. CABRAL, J. E. O. A inovação tecnológica da indústria de alimentos. Disponível em: <http://www.embrapa.br/imprensa/artigos/2000/artigo.2004-12-07.2406531424> Acesso em: 20 mar. 2013. DOEDERLEIN, O. P. Java: maduro, mas com o pé no acelerador. Java Magazine. São Paulo, n. 100, p. 04-10, fev. 2012. FERRARINI, A. Conhecendo o Android. Disponível <http://www.devmedia.com.br/conhecendo-o-android-revista-mobile-magazine42/24688#ixzz2QUkz3Us3> Acesso em: 17 abr. 2013. em: GIRELLI, F. C.; ARAÚJO, E. C. As novidades do Eclipse 4. Disponível em: <http://www.devmedia.com.br/as-novidades-do-eclipse-4-revista-java-magazine111/26803> Acesso em: 10 abr. 2013. GUIMARÃES, L. C. Primefaces. Java Magazine. São Paulo, n. 112, jan. 2013. GONÇALVES, E. C. Conhecendo o PL/SQL. Disponível em: <http://www.devmedia.com.br/conhecendo-o-pl-sql/24763 > Acesso em: 18 abr. 2013. LEAL, A.; MACÊDO, A. B.; SPINOLA, R. O. Introdução sobre UML: Mecanismos gerais. Disponível em: <http://www.devmedia.com.br/introducao-sobre-umlmecanismos-gerais-revista-sql-magazine-91/22261> Acesso em: 10 abr. 2013. LEAL, A.; MACÊDO, A. B.; SPINOLA, R. O. Astah. Disponível em: <http://www.devmedia.com.br/websys.5/webreader.asp?cat=2&artigo=3891&revista= sqlmagazine_91#a-3891> Acesso em: 10 abr. 2013. LECHETA, Ricardo R. Google Android. 2. ed. São Paulo: Novatec, 2010. SILVA, R. P. UML 2 em Modelagem Orientada a Objetos. Florianópolis: Visual Books, 2007. 109 LOZANO, F. Por que Java?. Java Magazine. São Paulo, n. 100, fev. 2012. LOZANO, F. JDBC de Ponta a Ponta: Parte 1. Disponível em: <http://www.devmedia.com.br/artigo-java-magazine-41-jdbc-de-ponta-a-ponta-parte1/10187> Acesso em: 13 abr. 2013. OLIVEIRA, P. R. PostgreSQL Stored Procedures – Parte 1. SQL Magazine. São Paulo, n. 7, abr. 2007. PEREIRA, A. P. O que é XML? Disponível em: <http://www.tecmundo.com.br/programacao/1762-o-que-e-xml-.htm> Acesso em: 10 abr. 2013. SENDIN, R. XML. Disponível em: <http://www.devmedia.com.br/artigo-webmobile25--xml/13867> Acesso em: 13 abr. 2013. SMANIOTO, C. E. Conheça na prática os novos recursos do PostgreSQL 8.4. SQL Magazine. São Paulo, n. 73, mar. 2010. STERN, E. H. PostgreSQL – Introdução e Conceitos. SQL Magazine. São Paulo, n. 6, nov. 2007.