joao g n - estagio supervisionado em sistemas de informacao

Post on 20-Feb-2016

215 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Projeto de sistema

TRANSCRIPT

JOÃO GARIBALDI NETO

REENGENHARIA DO SISTEMA DE ADMINISTRAÇÃO DE ALMOXARIFADO DO TRIBUNAL DE CONTAS DO ESTADO DO TOCANTINS UTILIZANDO PHP 5 E

ORIENTAÇÃO A OBJETO

PALMAS 2006

JOÃO GARIBALDI NETO

REENGENHARIA DO SISTEMA DE ADMINISTRAÇÃO DE ALMOXARIFADO DO TRIBUNAL DE CONTAS DO ESTADO DO TOCANTINS UTILIZANDO PHP 5 E

ORIENTAÇÃO A OBJETO “Trabalho apresentado com requisito da disciplina Prática de Sistemas de Informação (Estágio) do curso de Sistemas de Informação, orientada pelo Profº. Fernando Luiz de Oliveira”.

PALMAS 2006

SUMÁRIO

1. INTRODUÇÃO............................................................................................................... 8

2. REVISÃO DE LITERATURA ....................................................................................... 9

2.1. Administração de almoxarifado................................................................................... 9

2.2. As 4 atribuições básicas do Almoxarifado ................................................................ 10

2.2.1. Recebimento .......................................................................................................... 10

2.2.2. Guarda de Materiais............................................................................................... 11

2.2.3. Controle de Materiais ............................................................................................ 11

2.2.4. Entrega de Materiais.............................................................................................. 12

2.3. Programação Orientada a Objeto............................................................................... 12

2.3.1. Classes e Objetos ................................................................................................... 13

2.3.2. Abstração............................................................................................................... 13

2.3.3. Encapsulamento..................................................................................................... 14

2.3.4. Herança.................................................................................................................. 16

2.3.5. Polimorfismo ......................................................................................................... 17

2.3.6. Interfaces ............................................................................................................... 17

3. MATERIAIS E MÉTODOS.......................................................................................... 19

3.1. Estrutura física e lógica ............................................................................................. 19

3.2. Métodos aplicados ..................................................................................................... 19

4. RESULTADOS E DISCUSSÃO .................................................................................. 20

4.1. Diagramas de casos de uso ........................................................................................ 20

4.2. Casos de Uso Reais ................................................................................................... 21

4.2.1. Logar...................................................................................................................... 21

4.2.2. Incluir Classe de Produto....................................................................................... 22

4.2.3. Consultar Classe de Produto.................................................................................. 23

4.2.4. Alterar Classe de Produto ...................................................................................... 24

4.2.5. Excluir Classe de Produto ..................................................................................... 24

4.2.6. Incluir Grupo de Produtos ..................................................................................... 25

4.2.7. Consultar Grupos de Produto ................................................................................ 26

4.2.8. Alterar Grupos de Produto..................................................................................... 26

4.2.9. Excluir Grupos de Produto ................................................................................... 26

4.2.10. Incluir Unidades de Produto .................................................................................. 27

4.2.11. Consultar Unidades de Produto ............................................................................. 28

4.2.12. Alterar Unidades de Produto ................................................................................. 28

4.2.13. Excluir Unidades de Produto................................................................................. 28

4.2.14. Incluir Produto....................................................................................................... 29

4.2.15. Consultar Produto.................................................................................................. 30

4.2.16. Alterar Produto ...................................................................................................... 31

4.2.17. Excluir Produto...................................................................................................... 31

4.2.18. Incluir Fornecedores .............................................................................................. 32

4.2.19. Consultar Fornecedores ......................................................................................... 34

4.2.20. Alterar Fornecedores ............................................................................................. 34

4.2.21. Excluir Fornecedores............................................................................................. 34

4.2.22. Incluir Movimentação Externa (Compra De Materiais)........................................ 35

4.2.23. Consultar Movimentação Externa ......................................................................... 36

4.2.24. Alterar Movimentação Externa ............................................................................. 37

4.2.25. Excluir Movimentação Externa ............................................................................. 37

4.2.26. Incluir Itens da Movimentacao Externa................................................................. 38

4.2.27. Alterar Itens da Movimentação Externa................................................................ 39

4.2.28. Excluir Itens da Movimentação Externa ............................................................... 40

4.2.29. Incluir Movimentação Interna (Requisições de Materiais) ................................... 41

4.2.30. Consultar Movimentação Interna .......................................................................... 42

4.2.31. Alterar Movimentação Interna............................................................................... 43

4.2.32. Excluir Movimentação Interna .............................................................................. 43

4.2.33. Incluir Itens da Movimentação Interna.................................................................. 44

4.2.34. Alterar Itens da Movimentação Interna ................................................................. 45

4.2.35. Excluir Itens da Movimentação Interna ................................................................ 46

4.3. Diagrama de Classes do Projeto ................................................................................ 47

4.4. Modelo Relacional do Banco de Dados .................................................................... 48

4.5. Implementação do Sistema........................................................................................ 49

4.5.1. Cadastro de Unidades ............................................................................................ 49

4.5.2. Cadastro de Produtos ............................................................................................. 53

4.5.3. Cadastro de Classes ............................................................................................... 58

4.5.4. Cadastro de Grupos ............................................................................................... 62

4.5.5. Cadastro de Fornecedores...................................................................................... 66

4.5.6. Movimentação Externa.......................................................................................... 72

4.5.7. Itens de Moviementação Externa .......................................................................... 76

4.5.8. Movimentação Interna........................................................................................... 79

4.5.9. Itens de Movimentação Interna ............................................................................. 83

4.5.10. Classe DBConnector ............................................................................................. 87

4.5.11. Classe systemcomponents ..................................................................................... 88

4.5.12. Script SQL Banco de Dados.................................................................................. 88

5. CONSIDERAÇÕES FINAIS ........................................................................................ 91

6. REFERÊNCIAS BIBLIOGRÁFICAS .......................................................................... 92

LISTA DE FIGURAS

Figura 1: Estrutura organizacional do Tribunal de Contas do Estado do Tocantins......... 10

Figura 2: Exemplo de abstração........................................................................................ 14

Figura 3: Exemplo de encapsulamento ............................................................................. 15

Figura 4: Exemplo de Herança.......................................................................................... 16

Figura 5: Diagrama de Casos de Uso................................................................................ 20

Figura 6: Caso de Uso Logar ............................................................................................ 21

Figura 7: Caso de uso logar com erro ............................................................................... 22

Figura 8: Caso de uso inclusão de classe de produto ........................................................ 23

Figura 9: Caso de uso inclusão de grupo de produto ........................................................ 25

Figura 10: Caso de uso inclusão de unidades de produto ............................................... 27

Figura 11: Caso de uso inclusão de produtos.................................................................. 30

Figura 12: Caso de uso inclusão de Fornecedores .......................................................... 33

Figura 13: Caso de uso inclusão de Movimentação Externa .......................................... 36

Figura 14: Caso de uso inclusão de Itens da Movimentação Externa............................. 39

Figura 15: Caso de uso inclusão de Movimentação Interna ........................................... 42

Figura 16: Caso de uso inclusão de Itens da Movimentação Interna.............................. 45

Figura 17: Diagrama de Classes em UML...................................................................... 47

Figura 18: Dicionário de Dados ...................................................................................... 48

RESUMO

O presente trabalho tem por objetivo classificar e apresentar as operações básicas

pertinentes a qualquer setor de almoxarifado eficiente de uma empresa ou órgão.

Posteriormente, tendo como base o padrão da modelagem UML, será realizado e

apresentado a reengenharia do setor de almoxarifado do Tribunal de Contas do Estado do

Tocantins, readequando a implementação existente ao paradigma da programação orientada

a objeto, que deverá atender rigorosamente a sistemática das operações propostas para um

eficaz controle dos materiais de almoxarifado. Pela importância deste setor para o referido

órgão público, foi desenvolvida uma solução informatizada, no padrão web, que viesse

auxiliar e automatizar todas as atividades por este importante setor. Este trabalho foi

desenvolvido no próprio Tribunal de Contas do Estado do Tocantins e teve como resultado

um sistema de elevada qualidade no que se diz respeito aos aspectos de manutenção e

suporte a softwares. O referido sistema já encontra-se em plena utilização no órgão

supracitado, atendendo as exigências propostas por este trabalho.

8

1. INTRODUÇÃO O presente trabalho visa salientar a importância da utilização da tecnologia da informação

no apoio as atividades pertinentes ao setor de almoxarifado do Tribunal de Contas do Estado

do Tocantins. A priori, este trabalho mostrará o funcionamento básico de um setor de

almoxarifado, tomando como exemplo o funcionamento do Tribunal de Contas do Estado

do Tocantins, passando por todas as suas etapas de funcionamento. Em seguida, mostrará

que o auxílio da tecnologia da informação é fundamental dentro deste setor. Isto porque a

tecnologia agrega para o profissional responsável por este setor um substancial ganho de

produtividade, contribuindo assim para um melhor desempenho dos trabalhos desenvolvidos

dentro do órgão em questão, uma vez que a função primordial do almoxarife é dar apoio aos

demais setores do órgão supracitado, no que diz respeito a suprimento do material de

expediente. Por fim, será apresentada a reengenharia da implementação existente do Sistema

de Administração de Almoxarifado, utilizando a linguagem de programação PHP 5,

enfocando o paradigma da orientação a objetos, e todos os benefícios que a utilização desta

técnica de programação traz para aqueles que se utilizam dela para desenvolver aplicações

eficientes e fáceis de manutenir.

9

2. REVISÃO DE LITERATURA

Para que os objetivos desse trabalho sejam alcançados, torna-se necessário fazer um

levantamento bibliográfico sobre os conceitos que envolvem a administração de um

almoxarifado, bem como os conceitos gerais relacionados ao paradigma da orientação a

objetos. Esses conceitos, assim como outros necessários para a fundamentação desse

trabalho, serão apresentados nas seções seguintes.

2.1. Administração de almoxarifado

O funcionamento de toda e qualquer empresa depende, entre outras coisas, de que ela conte

com material de trabalho em quantidade e qualidade suficientes para atender às suas

necessidades. O setor que se encarrega do suprimento de materiais a todas as unidades da

empresa é o almoxarifado. A função básica do almoxarifado no âmbito de uma empresa, em

relação aos demais setores desta, é apoiá-los no que diz respeito a suprimento do material de

expediente.

O almoxarifado, de modo geral, no âmbito de uma empresa constitui um setor

organizado para a execução de quatro atividades básicas: recebimento, guarda, controle e

entrega de material (SENAC, p. 15, 1993).

Neste trabalho será apresentada uma solução informatizada compreendendo

todos os procedimentos acima descritos que compreendem a rotina normal de

administração, bem como a rotina propriamente dita de um almoxarifado.

Para que um sistema de administração de almoxarifado de fato atenda as

necessidades tanto do almoxarife chefe, quanto aos anseios dos demais setores de uma

empresa ou órgão público com excelência, é necessário que o desenvolvedor da solução

informatizada conheça bem a sua organização. Dependendo do porte, da área de atividade

em que atua e do tipo de trabalho desenvolvido, cada empresa ou órgão tem uma forma

própria de se organizar e de localizar o almoxarifado em sua estrutura. No caso do Tribunal

de Contas do Estado do Tocantins, este órgão segue a seguinte estrutura:

10

Figura 1: Estrutura organizacional do Tribunal de Contas do Estado do Tocantins

Segundo SENAC (2003), dentro de um almoxarifado, podem existir também

seções específicas para tratar de cada uma das atividades executadas (recebimento, guarda,

controle e entrega). Cada uma dessas seções possui atribuições bem definidas, que serão

detalhadas na seção subseqüente.

2.2. As quatro atribuições básicas do Almoxarifado

2.2.1. Recebimento No almoxarifado informatizado, o almoxarife, após conferir o material recebido, digitará no

terminal de computador os dados constantes na Autorização de Fornecimento e na Nota

Fiscal, assim como quaisquer outras observações, e o sistema automaticamente emitirá o

respectivo aviso de recebimento e a nova ficha de prateleira, dando assim, entrada ao

material de estoque (SENAC, p. 30, 1993).

11

2.2.2. Guarda de Materiais

O processo de guarda é bastante simplificado no sistema de almoxarifado, pois todo o

trabalho manual de lançamento nas Fichas de Prateleira ou de Identificação do Material é

substituído pela impressão de uma nova Ficha para o material a ser estocado. Para isso,

basta que o almoxarife digite os dados de entrada e dê o comando para que o computador

imprima a nova ficha (SENAC, p.40, 1993).

2.2.3. Controle de Materiais O controle é o cérebro do almoxarifado, ou seja, trata-se da função mais importante deste

setor de atividades. Todo material deve ser constantemente controlado; é necessário saber a

quantidade de cada material existente, se o estoque está suficiente ou se é preciso

reabastecê-lo (SENAC, p. 11, 1993).

Esta é a atribuição mais delicada do almoxarifado, pois engloba o regime pelo

qual o setor de almoxarifado de uma determinada empresa é submetido, por questões de

política interna da própria empresa, bem como a disciplina e o bom senso do almoxarife

encarregado. Por exemplo, na ocasião de um pedido de um material que não conste no

estoque, o almoxarife encarregado deverá emitir uma nova Requisição de Compras, para o

material solicitado. Após todo o processo administrativo natural referente a uma compra no

âmbito de uma empresa, este funcionário fará o recebimento do material comprado, o

cadastrará no sistema, digitando os dados pertinentes a este (especificação e quantidade).

Realizado este processo, o referido material passa a existir e será passível de ser controlado

pelo sistema, podendo assim ser registrado normalmente a saída do material, antes ausente,

do estoque. Uma outra situação é que, no caso do estoque de um determinado material

atingir o limite do estoque mínimo, o almoxarife encarregado deverá também emitir uma

nova Requisição de Compras, para o material em questão. Nesta ocasião, o almoxarife

encarregado necessita determinar os cálculos de ressuprimento não só para planejar a

aquisição de novos estoques, como também para facilitar o controle, impedindo que haja

estoque ocioso no almoxarifado, bem como evitar a repetição exagerada de Requisições de

Compra para um mesmo produto.

12

2.2.4. Entrega de Materiais

Autorizado pelo controle a liberar uma Requisição de Material, o almoxarife digita o código

do material, a especificação, a quantidade pedida e o código do setor solicitante. O sistema

então emite duas vias da ficha com os dados da Requisição de Material que servirá no ato da

entrega ao departamento solicitante (SENAC, p. 1993).

2.3. Programação Orientada a Objeto

A programação Orientada a Objetos surgiu como uma técnica de desenvolvimento de

softwares, onde o foco maior é atribuído aos dados, que nada mais são do que objetos,

modelando as características de objetos abstratos ou reais através de classes e objetos.

Segundo MEILIR (1997, p. 60), o termo ‘orientação a objetos’ é intrinsecamente

desprovido de significado, uma vez que os termos, vistos isoladamente, são poucos

significativos. Por exemplo, o termo ‘objeto’ representa qualquer coisa que pode ser

identificado por algum dos sentidos humano. Já o termo ‘orientado’ pode ser substituído por

‘dirigido’ ou ‘voltado a’, restando então o papel de moldar a expressão ‘orientado a objetos’

através de um adjetivo: ‘dirigido a qualquer coisa que se possa pensar’. Desta forma, a

Programação Orientada a Objetos é na verdade um paradigma de programação para

computadores que enfatiza aspectos relacionados a: objetos, classes, herança,

encapsulamento, polimorfismo e mensagens. Estes aspectos da Orientação a Objetos serão

detalhados nas seções seguintes.

Existem outros aspetos importantes, porém os relacionados acima já servem

como um bom exemplo, haja vista a incoerência encontrada na literatura voltada a

Programação Orientada a Objeto sobre quais são as abstrações (aspectos) mais importantes

envolvidas nesta teoria.

13

2.3.1. Classes e Objetos

Objetos e classes são os dois principais conceitos de qualquer linguagem de programação

Orientada a Objetos. A definição de classe descreve quais propriedades, atributos e métodos

os objetos terão. Já a definição de um objeto é a de uma entidade que pode ser manipulada,

ou seja, qualquer coisa que tenha significado e limites bem definidos é um objeto, podendo

ter seu estado modificado através da invocação dos métodos das classes a que os mesmos

pertencem.

2.3.2. Abstração

Em termos de desenvolvimento de sistemas, abstração consiste em identificar os aspectos

essenciais inerentes a uma entidade. Isto significa concentrar-se no que um objeto é e o quê

ele fará antes de decidir como ele será implementado (RICARTE, 2001, p. 52). Assim, um

desenvolvedor, ao abstrair um objeto do mundo real, deve atentar-se a qual conjunto de

objetos do mundo real, no qual o mesmo está inserido, e quais são as características

semelhantes deste objeto com os outros, descartando seus pontos desprezíveis, dando maior

enfoque nos seus pontos essenciais. Desta forma, cada objeto que compõe um sistema é um

modelo, um ator abstrato que pode apresentar variações em seu estado, comunicar-se com

outros objetos, conforme as características abstraídas, tornando possível a implementação

das classes, objetos, dos métodos e funções do sistema.

14

Figura 2: Exemplo de abstração

No exemplo apresentado na Figura 2, o desenvolvedor teve a habilidade de

classificar e categorizar os meios de transportes, de forma a agrupar todos aqueles com

características comuns. Ou seja, o desenvolvedor captou os atributos e operações comuns

aos objetos, e os agrupou nas classes e subclasses acima descritas.

2.3.3. Encapsulamento

Encapsulamento permite ao desenvolvedor restringir os acessos às classes e as declarações

de uma classe, utilizando-se de palavras reservadas denominadas qualificadores que são

elas: public, private, protected.

Caso haja omissão na declaração, o método ou a propriedade será declarada, por

padrão em algumas linguagens, do tipo public, ou seja, os membros desta serão visíveis a

todas as outras classes. No caso da declaração ser feita do tipo protected os membros

15

declarados nesta classe, serão visíveis somente para as classes e subclasses dentro do

mesmo pacote. E, por último, caso a declaração seja feita do tipo private¸ os membros

declarados nesta classe serão isolados, escondidos das demais, e somente poderão ser

acessadas pela classe que as declarou. Essa prática é válida quando, o desenvolvedor

necessita de que os atributos declarados em uma classe sejam apenas utilizados por ela.

A idéia é simples, deve-se fornecer ao usuário, cliente de uma classe, o

necessário, e somente o necessário para que ele tire proveito da funcionalidade desta classe.

Os detalhes devem ser omitidos, somente a lista de operações a qual uma classe deve

atender fica visível (CESTA, 1996, p. 56).

Figura 3: Exemplo de encapsulamento

A Figura 3 apresenta um breve exemplo do uso da técnica de encapsulamento,

onde as variáveis definidas como do tipo protected, só poderão ser acessadas pela classe

ContaCorrente ou por aquelas que estenderem-se a partir dela (suas subclasses),

simplesmente pelo fato da mesma ter sido declarada como do tipo protected. Neste caso, a

<?php class ContaCorrente { protected $titularID; protected $agenciaID; protected $contaID; protected $saldo;

public function __construct() { $this->titularID = NULL; $this->agenciaID = NULL; $this->contaID = NULL; $this->saldo = NULL; } }

class ContaCorrenteEspecial extends ContaCorrente {

protected $limite; function setLimiteConta($valorLimite){ $this->limite = $valorLimite; }

} ?>

16

classe ContaCorrenteEspecial (classe filha) além de ter acesso aos atributos próprios

também herdará todos os atributos da classe ContaCorrente (classe pai).

2.3.4. Herança

Herança é o mecanismo do paradigma de orientação a objetos que permite compartilhar

atributos e operações entre classes, baseada em um relacionamento hierárquico. Uma classe

pode ser definida de forma genérica e depois refinada sucessivamente em termos de

subclasses ou classes derivadas. Cada subclasse incorpora, ou herda, todas as propriedades

de sua superclasse (ou classe base) e adiciona suas propriedades únicas e particulares. As

propriedades da classe base não precisam ser repetidas em cada classe derivada. Esta

capacidade de fatorar as propriedades comuns de diversas classes em uma superclasse pode

reduzir dramaticamente a repetição de código em um projeto ou programa, sendo esta uma

das principais vantagens da abordagem de orientação a objetos (RICARTE, 2001, p. 61).

Resumidamente, é o meio de se criar, especializar novas classes ou objetos

aproveitando-se de outros objetos ou classes já implementadas anteriormente.

Figura 4: Exemplo de Herança

17

Na Figura 4, tem-se o exemplo simples de um sistema bancário, onde através da

superclasse Conta Bancária foi possível a definição de duas subclasses distintas (conta

corrente e conta poupança) e que, além de herdar e compartilhar suas características com

sua classe pai, podem também receber características particulares como saldo e limite.

2.3.5. Polimorfismo

“A palavra polimorfismo advém da língua grega e significa muitas formas. A

partir daí surge a idéia de permitir que o mesmo código seja utilizado de

diferentes tipos, apresentando variados tipos de comportamentos, dependendo do

tipo real de um objeto tendo como resultado, implementações mais

generalizadas” (RICARTE, 2001, p. 52).

Este conceito de programação orientado a objeto usado para denotar o suporte a

utilização do mesmo identificador para métodos de classes distintas. Geralmente, emprega-

se polimorfismo quando se é necessário o uso de nomes idênticos para tarefas similares em

classes distintas.

A utilização deste acaba tornando o código da aplicação, mais simples, claro e

fácil de compreender, uma vez que, na sua ausência, o desenvolvedor necessitaria de criar

uma lista, muitas vezes enorme de métodos, com diferentes nomes para cada um deles,

porém com um comportamento bastante parecido, o que deixaria o código confuso e

trabalhoso. Portanto, polimorfismo consiste na atribuição de comportamentos proprietários

de uma classe a outra.

2.3.6. Interfaces

As Interfaces permitem que o desenvolvedor necessite conhecer apenas um conjunto

reduzido de conceitos e métodos, podendo desacoplar funcionalidades da abstração de uma

classe (ZEND, 2006).

18

Interface é semelhante a uma classe, porém possuem um aspecto mais restritivo.

Em interface todos os métodos são declarados juntamente com suas assinaturas (nome,

parâmetros e tipo de retorno), porém não possuem implementação.

19

3. MATERIAIS E MÉTODOS

Para o desenvolvimento desse trabalho, vários recursos foram utilizados: material

bibliográfico, hardware e software, os quais serão citados a seguir.

3.1. ESTRUTURA FÍSICA E LÓGICA Para o desenvolvimento deste trabalho foi utilizado um microcomputador padrão IBM,

composto por um processador Pentium® IV 3.0 GHz, com sistema operacional Slackware®

Linux 10.2, sendo utilizado como software, o banco de dados MySql® 5.0 e o servidor WEB

Apache®, com a extensão PHP 5. Foram utilizadas como ferramentas para o

desenvolvimento do trabalho o Umbrello UML®, utilizada para desenvolver a modelagem

do sistema, utilizando a linguagem UML, e o NVU®, utilizado para criação de páginas

WEB, envolvendo design e programação.

3.2. MÉTODOS APLICADOS Foram realizados estudos a cerca da Engenharia de Softwares, aplicado ao desenvolvimento

orientado a objetos, além de pesquisas sobre a linguagem de programação PHP em sua

versão 5.

Já para os requisitos do sistema foi realizado um levantamento das tarefas básicas de

um almoxarifado para que o sistema fosse de fato concebido e atendendo as necessidades

daquele setor.

20

4. RESULTADOS E DISCUSSÃO

Para que o objetivo deste trabalho fosse alcançado diversos trabalhos foram desenvolvidos.

Neste capítulo serão apresentados estes trabalhos, de forma seqüencial, levando ao fim ao

objetivo conquistado.

Nesta fase, encontram-se os diagramas de casos de uso, seguindo a modelagem em

UML, os casos de uso reais, o diagrama de classe do sistema proposto, o modelo relacional

do banco de dados, bem como a implementação das classes que compõe o referido sistema.

4.1. DIAGRAMAS DE CASOS DE USO

Figura 5: Diagrama de Casos de Uso

21

4.2. Casos de Uso Reais

4.2.1. Logar

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O usuário acessa a área de login. 2. O sistema apresenta o formulário de login

3. O usuário preenche o formulário digitando os dados necessários nos campos Login e Senha conforme Figura 6.

4. O usuário possui a opção Logar, representada pelo botão Logar conforme Figura 6.

5. O sistema faz a autenticação e redireciona para sua área de trabalho

Seqüências Alternativas: 5. Senha incorreta ou Usuário inválido: o sistema exibe uma

mensagem informativa, conforme apresentado na Figura 7.

Figura 6: Caso de Uso Logar

22

Figura 7: Caso de uso logar com erro

4.2.2. Incluir Classe de Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para incluir uma nova classe de produtos.

2. O sistema apresenta o formulário para a inclusão da nova classe de produtos.

3. O usuário preenche o formulário digitando os dados necessários nos campos denominados Nome, Grupo e Natureza conforme Figura 8.

4. O usuário possui a opção Salvar, representada pelo botão de mesmo nome conforme Figura 8.

5. O sistema faz validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página.

Seqüências Alternativas: 5. Dados cadastrais incorretos / em brancos: O sistema exibe uma mensagem de erro no rodapé da mesma página de cadastro, informando ao usuário que os dados estão preenchidos de maneira incorreta.

23

Figura 8: Caso de uso inclusão de classe de produto

4.2.3. Consultar Classe de Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para consultar uma classe de produtos.

2. O sistema apresenta o formulário para a consulta da classe de produtos.

3. O usuário digita o dado desejado para a referida consulta no campo denominado Procurar conforme Figura 8.

4. O usuário possui a opção Pesquisar, representada pelo botão de mesmo nome conforme Figura 8.

5. O sistema realiza a consulta exibindo seu resultado de acordo com o(s) dado(s) informados pelo ator.

Seqüências Alternativas: 5. Consulta retorna nulo: O sistema exibe uma mensagem no rodapé da mesma página, informando ao usuário.

24

4.2.4. Alterar Classe de Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma classe de produtos.

2. O sistema apresenta o formulário de cadastro de classe de produtos.

3. O usuário altera o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, conforme Figura 8.

4. O usuário possui a opção Salvar (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 8.

5. O sistema realiza a atualização exibindo seu novo resultado de acordo com o(s) dado(s) informados pelo ator e exibe uma mensagem de confirmação da alteração no rodapé da página..

4.2.5. Excluir Classe de Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma classe de produtos.

2. O sistema apresenta o formulário de cadastro de classe de produtos.

3. O usuário seleciona o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, através das caixas de seleção desta lista, conforme Figura 8.

4. O usuário possui a opção Excluir (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 8.

5. O sistema realiza a exclusão e exibe uma mensagem de confirmação da exclusão no rodapé da página.

Seqüências Alternativas: 5. Usuário nao selecionou nenhuma caixa de seleção: O sistema exibe uma mensagem, informando ao usuário.

25

4.2.6. Incluir Grupo de Produtos

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para incluir um novo grupo de produtos.

2. O sistema apresenta o formulário para a inclusão de novo grupo de produtos.

3. O usuário preenche o formulário digitando/selecionando os dados necessários nos campos denominados Nome e Natureza conforme Figura 9.

4. O usuário possui a opção Salvar, representada pelo botão de mesmo nome conforme Figura 9.

5. O sistema faz validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página.

Seqüências Alternativas: 5. Dados cadastrais incorretos / em brancos: O sistema exibe uma mensagem de erro no rodapé da mesma página de cadastro informando ao usuário que os dados estão preenchidos de maneira incorreta.

Figura 9: Caso de uso inclusão de grupo de produto

26

4.2.7. Consultar Grupos de Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para consultar um grupo de produto.

2. O sistema apresenta o formulário para a consulta de grupos de produtos.

3. O usuário digita o dado desejado para a referida consulta no campo denominado Procurar conforme Figura 9.

4. O usuário possui a opção Pesquisar, representada pelo botão de mesmo nome conforme Figura 9.

5. O sistema realiza a consulta exibindo seu resultado de acordo com o(s) dado(s) informados pelo ator.

Seqüências Alternativas: 5. Consulta retorna nulo: O sistema exibe uma mensagem no rodapé da mesma página, informando ao usuário.

4.2.8. Alterar Grupos de Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar um grupo de produtos.

2. O sistema apresenta o formulário de cadastro de grupo de produtos.

3. O usuário altera o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, conforme Figura 9.

4. O usuário possui a opção Salvar (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 9.

5. O sistema realiza a atualização exibindo seu novo resultado de acordo com o(s) dado(s) informados pelo ator e exibe uma mensagem de confirmação da alteração no rodapé da página..

4.2.9. Excluir Grupos de Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar um grupo de produtos.

2. O sistema apresenta o formulário de cadastro de grupo de produtos.

3. O usuário seleciona o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, através das caixas de seleção desta lista, conforme Figura 9.

4. O usuário possui a opção Excluir (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 9.

5. O sistema realiza a exclusão e exibe uma mensagem de confirmação da exclusão no rodapé da página.

Seqüências Alternativas: 5. Usuário não selecionou nenhuma caixa de seleção: O

27

sistema exibe uma mensagem, informando ao usuário.

4.2.10. Incluir Unidades de Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para incluir uma nova unidade de produtos.

2. O sistema apresenta o formulário para a inclusão da nova unidade de produtos.

3. O usuário preenche o formulário digitando os dados necessários nos campos denominados Código e Descrição conforme Figura 10.

4. O usuário possui a opção Salvar, representada pelo botão de mesmo nome conforme Figura 10.

5. O sistema faz validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página.

Seqüências Alternativas: 5. Dados cadastrais incorretos / em brancos: O sistema exibe uma mensagem de erro no rodapé da mesma página de cadastro informando ao usuário que os dados estão preenchidos de maneira incorreta.

Figura 10: Caso de uso inclusão de unidades de produto

28

4.2.11. Consultar Unidades de Produto

Seqüência Típica de Eventos

Ação do Ator Resposta do Sistema 1. O ator escolhe a funcionalidade para consultar uma unidade de produto.

2. O sistema apresenta o formulário para a consulta de unidade de produtos.

3. O usuário digita o dado desejado para a referida consulta no campo denominado Procurar conforme Figura 10.

4. O usuário possui a opção Pesquisar, representada pelo botão de mesmo nome conforme Figura 10.

5. O sistema realiza a consulta exibindo seu resultado de acordo com o(s) dado(s) informados pelo ator.

Seqüências Alternativas: 5. Consulta retorna nulo: O sistema exibe uma mensagem no rodapé da mesma página, informando ao usuário.

4.2.12. Alterar Unidades de Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma unidade de produtos.

2. O sistema apresenta o formulário de cadastro de unidade de produtos.

3. O usuário altera o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, conforme Figura 10.

4. O usuário possui a opção Salvar (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 10.

5. O sistema realiza a atualização exibindo seu novo resultado de acordo com o(s) dado(s) informados pelo ator e exibe uma mensagem de confirmação da alteração no rodapé da página..

4.2.13. Excluir Unidades de Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma unidade de produtos.

2. O sistema apresenta o formulário de cadastro de unidades de produtos.

3. O usuário seleciona o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, através das caixas de seleção desta lista, conforme Figura 10.

4. O usuário possui a opção Excluir (da parte 5. O sistema realiza a exclusão e exibe uma

29

inferior da tela), representada pelo botão de mesmo nome conforme Figura 10.

mensagem de confirmação da exclusão no rodapé da página.

Seqüências Alternativas: 5. Usuário nao selecionou nenhuma caixa de seleção: O sistema exibe uma mensagem, informando ao usuário.

4.2.14. Incluir Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para incluir um novo produto.

2. O sistema apresenta o formulário para a inclusão do novo produto.

3. O usuário preenche o formulário digitando os dados necessários nos campos denominados Nome, Unidade, Classe e o Estoque Mínimo, conforme Figura 11.

4. O usuário possui a opção Salvar, representada pelo botão de mesmo nome, conforme Figura 11.

5. O sistema faz validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página.

Seqüências Alternativas: 5. Dados cadastrais incorretos / em brancos: O sistema exibe uma mensagem de erro no rodapé da mesma página de cadastro informando ao usuário que os dados estão preenchidos de maneira incorreta.

30

Figura 11: Caso de uso inclusão de produtos

4.2.15. Consultar Produto

Seqüência Típica de Eventos

Ação do Ator Resposta do Sistema 1. O ator escolhe a funcionalidade para consultar um produto.

2. O sistema apresenta o formulário para a consulta de produtos.

3. O usuário digita o dado desejado para a referida consulta no campo denominado Procurar conforme Figura 11.

4. O usuário possui a opção Pesquisar, 5. O sistema realiza a consulta exibindo seu

31

representada pelo botão de mesmo nome conforme Figura 11.

resultado de acordo com o(s) dado(s) informados pelo ator.

Seqüências Alternativas: 5. Consulta retorna nulo: O sistema exibe uma mensagem no rodapé da mesma página, informando ao usuário.

4.2.16. Alterar Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar um produto.

2. O sistema apresenta o formulário de cadastro de produtos.

3. O usuário altera o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, conforme Figura 11.

4. O usuário possui a opção Salvar (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 11.

5. O sistema realiza a atualização exibindo seu novo resultado de acordo com o(s) dado(s) informados pelo ator e exibe uma mensagem de confirmação da alteração no rodapé da página..

4.2.17. Excluir Produto

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar produtos.

2. O sistema apresenta o formulário de cadastro de produtos.

3. O usuário seleciona o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, através das caixas de seleção desta lista, conforme Figura 11.

4. O usuário possui a opção Excluir (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 11.

5. O sistema realiza a exclusão e exibe uma mensagem de confirmação da exclusão no rodapé da página.

Seqüências Alternativas: 5. Usuário não selecionou nenhuma caixa de seleção: O sistema exibe uma mensagem, informando ao usuário.

32

4.2.18. Incluir Fornecedores

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para incluir um novo fornecedor.

2. O sistema apresenta o formulário para a inclusão do novo Fornecedor.

3. O usuário preenche o formulário digitando os dados necessários nos campos denominados CNPJ, Razão Social, Nome Fantasia,Inscrição Estadual, Endereço, Bairro, Cidade, CEP, UF, Fone, Fax e Email, conforme Figura 12

4. O usuário possui a opção Salvar, representada pelo botão de mesmo nome, conforme Figura 12.

5. O sistema faz validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página.

Seqüências Alternativas: 5. Dados cadastrais incorretos / em brancos: O sistema exibe uma mensagem de erro no rodapé da mesma página de cadastro informando ao usuário que os dados estão preenchidos de maneira incorreta.

33

Figura 12: Caso de uso inclusão de Fornecedores

34

4.2.19. Consultar Fornecedores

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para consultar um fornecedor.

2. O sistema apresenta o formulário para a consulta de fornecedores.

3. O usuário digita o dado desejado para a referida consulta no campo denominado Procurar conforme Figura 12.

4. O usuário possui a opção Pesquisar, representada pelo botão de mesmo nome conforme Figura 12.

5. O sistema realiza a consulta exibindo seu resultado de acordo com o(s) dado(s) informados pelo ator.

Seqüências Alternativas: 5. Consulta retorna nulo: O sistema exibe uma mensagem no rodapé da mesma página, informando ao usuário.

4.2.20. Alterar Fornecedores

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar um fornecedor.

2. O sistema apresenta o formulário de cadastro de fornecedores.

3. O usuário altera o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de itens exibida neste formulário, conforme Figura 12.

4. O usuário possui a opção Salvar (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 12.

5. O sistema realiza a atualização exibindo seu novo resultado de acordo com o(s) dado(s) informados pelo ator e exibe uma mensagem de confirmação da alteração no rodapé da página..

4.2.21. Excluir Fornecedores

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar fornecedores.

2. O sistema apresenta o formulário de cadastro de fornecedores.

3. O usuário seleciona o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, através das caixas de seleção desta lista, conforme Figura 12.

4. O usuário possui a opção Excluir (da parte inferior da tela), representada pelo botão de

5. O sistema realiza a exclusão e exibe uma mensagem de confirmação da exclusão no

35

mesmo nome conforme Figura 12. rodapé da página. Seqüências Alternativas: 5. Usuário não selecionou nenhuma caixa de seleção: O

sistema exibe uma mensagem, informando ao usuário.

4.2.22. Incluir Movimentação Externa (Compra De Materiais)

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para incluir uma movimentação externa.

2. O sistema apresenta o formulário para a inclusão da movimentação externa.

3. O usuário preenche o formulário digitando os dados necessários nos campos denominados, Data, Número da Nota Fiscal, Número do Documento de Origem, Data Documento Origem, Nome da Transportadora (se houver) e selecionando o Fornecedor do Material adquirido conforme Figura 13.

4. O usuário possui a opção Salvar, representada pelo botão de mesmo nome, conforme Figura 13.

5. O sistema faz validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página e direciona para o módulo de inclusão de itens de movimentação externa.

Seqüências Alternativas: 5. Dados cadastrais incorretos / em brancos: O sistema exibe

uma mensagem de erro no rodapé da mesma página de cadastro informando ao usuário que os dados estão preenchidos de maneira incorreta.

36

Figura 13: Caso de uso inclusão de Movimentação Externa

4.2.23. Consultar Movimentação Externa

Seqüência Típica de Eventos

Ação do Ator Resposta do Sistema 1. O ator escolhe a funcionalidade para consultar uma entrada de material.

2. O sistema apresenta o formulário para a consulta de entrada de materiais.

3. O usuário digita o dado desejado para a referida consulta no campo denominado Procurar conforme Figura 13.

37

4. O usuário possui a opção Pesquisar, representada pelo botão de mesmo nome conforme Figura 13.

5. O sistema realiza a consulta exibindo seu resultado de acordo com o(s) dado(s) informados pelo ator.

Seqüências Alternativas: 5. Consulta retorna nulo: O sistema exibe uma mensagem no rodapé da mesma página, informando ao usuário.

4.2.24. Alterar Movimentação Externa

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma entrada de material.

2. O sistema apresenta o formulário de cadastro de entrada de material.

3. O usuário altera o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de itens exibida neste formulário, conforme Figura 13.

4. O usuário possui a opção Salvar (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 13.

5. O sistema realiza a atualização exibindo seu novo resultado de acordo com o(s) dado(s) informados pelo ator e exibe uma mensagem de confirmação da alteração no rodapé da página..

4.2.25. Excluir Movimentação Externa

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma entrada de material.

2. O sistema apresenta o formulário de cadastro de entrada de material.

3. O usuário seleciona o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de itens exibida neste formulário, através das caixas de seleção desta lista, conforme Figura 13.

4. O usuário possui a opção Excluir (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 13.

5. O sistema realiza a exclusão e exibe uma mensagem de confirmação da exclusão no rodapé da página.

Seqüências Alternativas: 5. Usuário não selecionou nenhuma caixa de seleção: O sistema exibe uma mensagem, informando ao usuário.

38

4.2.26. Incluir Itens da Movimentacao Externa

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para incluir uma movimentação externa.

2. O sistema apresenta o formulário para a inclusão da movimentação externa.

3. O usuário preenche o formulário digitando os dados necessários nos campos denominados, Data, Número da Nota Fiscal, Número do Documento de Origem, Data Documento Origem, Nome da Transportadora (se houver) e selecionando o Fornecedor do Material adquirido, conforme figura 13.

4. O usuário possui a opção Salvar, representada pelo botão de mesmo nome, conforme figura 13.

5. O sistema faz validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página e direciona para o módulo de inclusão de itens de movimentação externa apresentando o respectivo formulário.

6. O usuário preenche o formulário informando os dados necessários nos campos denominados Produto, Quantidade Adquirida e Valor Unitário do Material Adquirido, conforme figura 14.

7. O usuário possui a opção Salvar, representada pelo botão de mesmo nome, conforme figura 14.

8. O sistema faz a validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página.

Seqüências Alternativas: 8. Dados cadastrais incorretos / em brancos: O sistema exibe uma mensagem de erro no rodapé da mesma página de cadastro informando ao usuário que os dados estão preenchidos de maneira incorreta.

39

Figura 14: Caso de uso inclusão de Itens da Movimentação Externa

4.2.27. Alterar Itens da Movimentação Externa

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma entrada de material.

2. O sistema apresenta o formulário de cadastro de entrada de material.

3. O usuário seleciona a movimentação externa que deseja alterar seus itens.

4. o sistema apresenta o formulário de cadastro dos itens de entrada de material

5. O usuário altera o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de itens exibida neste formulário, conforme Figura

40

14. 6. O usuário possui a opção Salvar (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 14.

7. O sistema realiza a atualização exibindo seu novo resultado de acordo com o(s) dado(s) informados pelo ator e exibe uma mensagem de confirmação da alteração no rodapé da página..

4.2.28. Excluir Itens da Movimentação Externa

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma entrada de material.

2. O sistema apresenta o formulário de cadastro de entrada de material.

3. O usuário seleciona a movimentação externa que deseja alterar seus itens.

4. o sistema apresenta o formulário de cadastro dos itens de entrada de material

5. O usuário seleciona a(s) linha(s) escolhida(s), diretamente na lista de itens exibida neste formulário, através das caixas de seleção desta lista, conforme Figura 14.

6. O usuário possui a opção Excluir (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 14.

7. O sistema realiza a exclusão e exibe uma mensagem de confirmação da exclusão no rodapé da página.

Seqüência Alternativa 5. Usuário não selecionou nenhuma caixa de seleção: O sistema exibe uma mensagem, informando ao usuário.

41

4.2.29. Incluir Movimentação Interna (Requisições de Materiais)

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para incluir uma movimentação interna.

2. O sistema apresenta o formulário para a inclusão da movimentação interna.

3. O usuário preenche o formulário digitando os dados necessários nos campos denominados, Data da Solicitação e selecionando o Departamento e o Funcionário que originaram a Requisição de Material, conforme a figura 14.

4. O usuário possui a opção Salvar, representada pelo botão de mesmo nome, conforme a figura 14.

5. O sistema faz validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página e direciona para o módulo de inclusão de items de movimentação interna.

Seqüências Alternativas: 5. Dados cadastrais incorretos / em brancos: O sistema exibe uma mensagem de erro no rodapé da mesma página de cadastro informando ao usuário que os dados estão preenchidos de maneira incorreta.

42

Figura 15: Caso de uso inclusão de Movimentação Interna

4.2.30. Consultar Movimentação Interna

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para consultar uma saida de material.

2. O sistema apresenta o formulário para a consulta de saida de materiais.

3. O usuário digita o dado desejado para a referida consulta no campo denominado Procurar conforme Figura 15.

4. O usuário possui a opção Pesquisar, representada pelo botão de mesmo nome conforme Figura 15.

5. O sistema realiza a consulta exibindo seu resultado de acordo com o(s) dado(s) informados pelo ator.

Seqüências Alternativas: 5. Consulta retorna nulo: O sistema exibe uma mensagem no

43

rodapé da mesma página, informando ao usuário.

4.2.31. Alterar Movimentação Interna

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma saída de material.

2. O sistema apresenta o formulário de cadastro de saída de material.

3. O usuário altera o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, conforme Figura 14.

4. O usuário possui a opção Salvar (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 14.

5. O sistema realiza a atualização exibindo seu novo resultado de acordo com o(s) dado(s) informados pelo ator e exibe uma mensagem de confirmação da alteração no rodapé da página..

4.2.32. Excluir Movimentação Interna

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma saida de material.

2. O sistema apresenta o formulário de cadastro de saída de material.

3. O usuário seleciona o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, através das caixas de seleção desta lista, conforme Figura 14.

4. O usuário possui a opção Excluir (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 14.

5. O sistema realiza a exclusão e exibe uma mensagem de confirmação da exclusão no rodapé da página.

Seqüências Alternativas: 5. Usuário nao selecionou nenhuma caixa de seleção: O sistema exibe uma mensagem, informando ao usuário.

44

4.2.33. Incluir Itens da Movimentação Interna

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para incluir uma movimentação interna.

2. O sistema apresenta o formulário para a inclusão da movimentação interna.

3. O usuário preenche o formulário digitando os dados necessários nos campos denominados, Data da Solicitação e selecionando o Departamento e o Funcionario que originaram a Requisicao de Material, conforme a figura 15.

4. O usuário possui a opção Salvar, representada pelo botão de mesmo nome, conforme a figura 15.

5. O sistema faz validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página e direciona para o módulo de inclusão de items de movimentação interna apresentando o respectivo formulário.

6. O usuário preeenche o formulário informando os dados necessários nos campos denominados Produto e Quantidade Solicitada do Material, conforme a figura 16.

7. O usuário possui a opção Salvar, representada pelo botão de mesmo nome, conforme a figura 16.

8. O sistema faz a validação dos dados e exibe uma mensagem de confirmação do cadastrado no rodapé da página.

Seqüências Alternativas: 8. Dados cadastrais incorretos / em brancos: O sistema exibe uma mensagem de erro no rodapé da mesma página de cadastro informando ao usuário que os dados estão preenchidos de maneira incorreta.

8. Estoque Insuficiente: Sistema Exibe uma mensagem de erro no rodapé da mesma página informando ao usuário que a quantidade solicitada é superior a contida no estoque.

45

Figura 16: Caso de uso inclusão de Itens da Movimentação Interna

4.2.34. Alterar Itens da Movimentação Interna

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma saida de material.

2. O sistema apresenta o formulário de cadastro de saida de material.

3. O usuário seleciona a movimentação interna que deseja alterar seus items.

4. O sistema apresenta o formulário de cadastro dos itens de saída de material

5. O usuário altera o(s) dado(s) da(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, conforme Figura 16.

46

6. O usuário possui a opção Salvar (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 16.

7. O sistema realiza a atualização exibindo seu novo resultado de acordo com o(s) dado(s) informados pelo ator e exibe uma mensagem de confirmação da alteração no rodapé da página..

4.2.35. Excluir Itens da Movimentação Interna

Seqüência Típica de Eventos Ação do Ator Resposta do Sistema

1. O ator escolhe a funcionalidade para cadastrar uma saida de material.

2. O sistema apresenta o formulário de cadastro de saida de material.

3. O usuário seleciona a movimentação interna que deseja alterar seus items.

4. o sistema apresenta o formulario de cadastro dos itens de saida de material

5. O usuário seleciona a(s) linha(s) escolhida(s), diretamente na lista de items exibida neste formulário, através das caixas de seleção desta lista, conforme Figura 16.

6. O usuário possui a opção Excluir (da parte inferior da tela), representada pelo botão de mesmo nome conforme Figura 16.

7. O sistema realiza a exclusão e exibe uma mensagem de confirmação da exclusão no rodapé da página.

Seqüencia Alternativa 5. Usuário nao selecionou nenhuma caixa de seleção: O sistema exibe uma mensagem, informando ao usuário.

47

4.3. Diagrama de Classes do Projeto

Figura 17: Diagrama de Classes em UML

48

4.4. Modelo Relacional do Banco de Dados

Figura 18: Dicionário de Dados

49

4.5. Implementação do Sistema

4.5.1. Cadastro de Unidades <?php include("DBConnector.php"); class Unidade { private $Codigo; private $Nome; function __construct() { $this->Codigo = NULL; $this->Nome = NULL; } function setCodigo($codigo) { $this->Codigo = $codigo; } function getCodigo() { return $this->Codigo; } function setNome($nome) { $this->Nome = $nome; } function getNome() { return $this->Nome; } function incluirUnidade($cod, $nome) { $db = new DBConnector(); $this->setCodigo($cod); $this->setNome($nome); $sql = "INSERT INTO Unidade (UnidadeCodigo, UnidadeNome) VALUES ('".$this->getCodigo()."', '".$this->getNome()."')"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function incluirUnidade function atualizarUnidade($nomeUnd, $codUnid) { $db = new DBConnector(); $sql = "UPDATE Unidade SET UnidadeNome = '$nomeUnd' WHERE UnidadeCodigo = '$codUnid'"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function atualizarUnidade function excluirUnidade($codUnidade) { $db = new DBConnector(); $sql = "DELETE FROM Unidade WHERE UnidadeCodigo = '$codUnidade'"; $db->Manipulate_Data($sql);

50

$db->DbDisconnect(); } // end of member function excluirUnidade function buscarUnidade($unidNome, $qntporpag, $paginacao) { $cores = array("#e0f0fd", "#ffffff"); $i = 0; $db = new DBConnector(); $sql = "SELECT * FROM Unidade WHERE UnidadeNome Like '".$unidNome."%' ORDER BY UnidadeNome"; $res=array($db->Execute_Query($sql)); $quant = $res[0][1]; $total_reg = $qntporpag; $pagina = $paginacao; if ($quant > 0 ){ ?> <form name="frmUnidades" method="post" action="atualizarUnidades.php"> <?php if ($quant <= $total_reg) { $total_paginas = 1; } // mais de 10 registros com valor multiplo de 10.. if ($quant%$total_reg == 0) { $total_paginas = $quant / $total_reg; } // mais de 10 registros porem o valor nao e multiplo de 10... else { // como a divisao exata, teremos que subtrair a parte que n?o ? inteira e // acrescentar 1 pagina. $total_paginas = ($quant/$total_reg) - (($quant%$total_reg)/$total_reg) + 1; } $linha_inicial = ($pagina - 1) * $total_reg; $linha_final = $linha_inicial + $total_reg - 1; // escrevendo os registros... // vamos usar um arcador para sabermos se estamos entre a linha final e a linha inicial... $marcador = 0; ?> <table align="center" border="0" width="650" cellspacing="2" bgcolor="#8dc6e4"> <tr> <td style="width: 20px;" valign="middle">&nbsp;</td> <td style="width: 80px;" align="center" class="headerTable">C&oacute;digo</td> <td style="width: 500px;" class="headerTable">&nbsp;Descri&ccedil;&atilde;o</td> </tr> </table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <?php while($linha = $db->Get_Rows()) { if ($marcador >= $linha_inicial and $marcador <= $linha_final) { ?> <tr bgcolor="<?=$cores[$i%2]?>"> <td style="width: 20px;" align="center" valign="middle"> <input type="hidden" name="fldIndiceCod[]" value="<?=trim($linha['UnidadeCodigo'])?>">

51

<input name="fldUndCod[]" type="checkbox" value="<?=trim($linha['UnidadeCodigo'])?>" id="linha<?=trim($linha['UnidadeCodigo'])?>" /></td> <td style="width: 80px;" align="center"> <input name="fldUnidCod[]" type="text" title="Clique aqui para editar..." style="width: 70px; background-color:<?=$cores[$i%2]?>" value="<?=strtoupper(trim($linha['UnidadeCodigo']))?>" maxlength="3" class="inputsText" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" /></td> <td style="width: 500px;" align="left">&nbsp;<input name="fldUnidDescr[]" type="text" title="Clique aqui para editar..." style="width: 480px; background-color:<?=$cores[$i%2]?>" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" value="<?=strtoupper(trim($linha['UnidadeNome']))?>" maxlength="30" class="inputsText" /></td> </tr> <?php } //incrementamos o marcador... $marcador = $marcador + 1; $i++; } ?></table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <tr> <td width="75" align="center"><input type="submit" name="btnSalvar" value="Salvar" ></td> <td width="75" align="center"><input type="button" name="btnExcluir" value="Excluir" onClick="removerUnidade()"></td> <td width="500" align="center"> <?php if ($pagina == 1) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">&lt;&lt; ANTERIOR | </font> "; } else { echo "<a href=\"index.php?pagina=".($pagina - 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">&lt;&lt; anterior |</a> "; } $i = 1; while ($i <= $total_paginas) { if ($i == $pagina) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\"><b><u>$i</u></b></font> "; } else { echo " <a href=\"index.php?pagina=".$i."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">".$i."</a> "; } $i = $i + 1; } if ($pagina == $total_paginas) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">| PR&Oacute;XIMA &gt;&gt;</font>\n"; } else {

52

echo " <a href=\"index.php?pagina=".($pagina + 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">| pr&oacute;xima &gt;&gt;</a> \n"; } ?> </td> <td width="160" class="headerTable">Total de P&aacute;ginas: <?=$total_paginas?></td> </tr> </table> <?php echo ("<div align=\"center\" class=\"msgAlerts\">".$_SESSION['mensagem']."</div>"); ?> </form> <?php } else { echo ("<font color=\"#ff0000\" size=\"2\"> Nenhum resultado encontrado para essa consulta!</font>"); } $db->Free_Result(); $db->DbDisconnect(); } // end of member function buscarUnidade } // end of Unidade ?>

<?php session_start(); require_once("../../includes/classes/unidade.php"); if ($_SERVER['REQUEST_METHOD'] =='POST') { $codUnid = strtoupper(trim($_POST['fldCodUnidade'])); $descUnid = strtoupper(trim($_POST['fldDescUnidade'])); } $unidade = new Unidade(); $unidade->incluirUnidade($codUnid, $descUnid); $_SESSION['mensagem']="Unidade Incluida com Sucesso"; header("Location: index.php?pagina=1"); ?>

<?php session_start(); require_once("../../includes/classes/unidade.php"); for ($i=0; $i<count($_POST['fldUndCod']); $i++) { $indice = $_POST['fldUndCod'][$i]; $unidade = new Unidade(); $unidade->excluirUnidade($indice); $cont++; } if ($cont > 0) $_SESSION['mensagem'] = "$cont registro(s) excluido(s) com &Ecirc;xito!"; header("Location: index.php?pagina=1"); ?> <?php session_start(); require_once("../../includes/classes/unidade.php"); $cont = 0; for ($i=0; $i<count($_POST['fldUndCod']); $i++)

53

{ $indice = $_POST['fldUndCod'][$i]; for ($j=0; $j<count($_POST['fldIndiceCod']); $j++) { if ($indice == $_POST['fldIndiceCod'][$j]) { $novoNome = trim(strtoupper($_POST['fldUnidDescr'][$j])); $unidade = new Unidade(); $unidade->atualizarUnidade($novoNome, $indice); $cont++; } } } if ($cont > 0) session_register('mensagem'); $_SESSION['mensagem'] = "$cont unidade(s) atualizada(s) com exito!!!"; header("Location: index.php?pagina=1"); ?>

4.5.2. Cadastro de Produtos <?php class Produto { private $Nome; private $Classe; private $Unidade; private $EstoqueMin; private $EstoqueAtual; function __construct() { $this->Nome = NULL; $this->Classe = NULL; $this->Unidade = NULL; $this->EstoqueMin = NULL; $this->EstoqueAtual = NULL; } function setNome($nome) { $this->Nome = $nome; } function getNome() { return $this->Nome; } function setClasse($classe) { $this->Classe = $classe; } function getClasse() { return $this->Classe; } function setUnidade($und) { $this->Unidade = $und; } function getUnidade() {

54

return $this->Unidade; } function setEstoqueMin($em) { $this->EstoqueMin = $em; } function getEstoqueMin() { return $this->EstoqueMin; } function setEstoqueAtual($ea) { $this->EstoqueAtual = $ea; } function getEstoqueAtual() { return $this->EstoqueAtual; } function incluirProduto($nome, $classe, $und, $ea, $em) { $db = new DBConnector(); $this->setNome($nome); $this->setClasse($classe); $this->setUnidade($und); $this->setEstoqueMin($em); $this->setEstoqueAtual($ea); $sql = "INSERT INTO Produto (Unidade_UnidadeCodigo, Classe_ClasseCodigo, ProdutoNome, ProdutoEstoqueMin, ProdutoEstoqueAtual) VALUES('".$this->getUnidade()."', ".$this->getClasse().", '".$this->getNome()."', ".$this->getEstoqueMin().", ".$this->getEstoqueAtual().")"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function incluirProduto function excluirProduto($codProd) { $db = new DBConnector(); $sql = "DELETE FROM Produto WHERE ProdutoCodigo = $codProd"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function excluirProduto function buscarProduto($unidNome, $qntporpag, $paginacao) { $cores = array("#e0f0fd", "#ffffff"); $i = 0; $db = new DBConnector(); $sql = "SELECT * FROM Produto WHERE ProdutoNome Like '".$unidNome."%' ORDER BY ProdutoNome"; $res=array($db->Execute_Query($sql)); $quant = $res[0][1]; $total_reg = $qntporpag; $pagina = $paginacao; if ($quant > 0 ){ ?> <form name="frmProduto" method="post" action="atualizarProdutos.php"> <?php if ($quant <= $total_reg) { $total_paginas = 1; } // mais de 10 registros com valor multiplo de 10.. if ($quant%$total_reg == 0) { $total_paginas = $quant / $total_reg; } // mais de 10 registros porem o valor nao e multiplo de 10...

55

else { // como a divisao exata, teremos que subtrair a parte que n?o ? inteira e // acrescentar 1 pagina. $total_paginas = ($quant/$total_reg) - (($quant%$total_reg)/$total_reg) + 1; } $linha_inicial = ($pagina - 1) * $total_reg; $linha_final = $linha_inicial + $total_reg - 1; // escrevendo os registros... // vamos usar um arcador para sabermos se estamos entre a linha final e a linha inicial... $marcador = 0; ?> <table align="center" border="0" width="650" cellspacing="2" bgcolor="#8dc6e4"> <tr> <td style="width: 20px;" valign="middle">&nbsp;</td> <td style="width: 80px;" align="center" class="headerTable">C&oacute;digo</td> <td style="width: 500px;" class="headerTable">&nbsp;Descri&ccedil;&atilde;o</td> </tr> </table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <?php while($linha = $db->Get_Rows()) { if ($marcador >= $linha_inicial and $marcador <= $linha_final) { ?> <tr bgcolor="<?=$cores[$i%2]?>"> <td style="width: 20px;" align="center" valign="middle"> <input type="hidden" name="fldIndiceCod[]" value="<?=trim($linha['ProdutoCodigo'])?>"> <input name="fldUndCod[]" type="checkbox" value="<?=trim($linha['ProdutoCodigo'])?>" id="linha<?=trim($linha['UnidadeCodigo'])?>" /></td> <td style="width: 80px;" align="center"> <input name="fldUnidCod[]" type="text" title="Clique aqui para editar..." style="width: 70px; background-color:<?=$cores[$i%2]?>" value="<?=strtoupper(trim($linha['ProdutoCodigo']))?>" maxlength="3" class="inputsText" onChange="check('linha<?=trim($linha['ProdutoCodigo'])?>')" /></td> <td style="width: 500px;" align="left">&nbsp;<input name="fldUnidDescr[]" type="text" title="Clique aqui para editar..." style="width: 480px; background-color:<?=$cores[$i%2]?>" onChange="check('linha<?=trim($linha['ProdutoCodigo'])?>')" value="<?=strtoupper(trim($linha['ProdutoNome']))?>" maxlength="30" class="inputsText" /></td> </tr> <?php } //incrementamos o marcador... $marcador = $marcador + 1; $i++; } ?></table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <tr> <td width="75" align="center"><input type="submit" name="btnSalvar" value="Salvar" ></td> <td width="75" align="center"><input type="button" name="btnExcluir" value="Excluir" onClick="removerUnidade()"></td> <td width="500" align="center">

56

<?php if ($pagina == 1) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">&lt;&lt; ANTERIOR | </font> "; } else { echo "<a href=\"index.php?pagina=".($pagina - 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">&lt;&lt; anterior |</a> "; } $i = 1; while ($i <= $total_paginas) { if ($i == $pagina) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\"><b><u>$i</u></b></font> "; } else { echo " <a href=\"index.php?pagina=".$i."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">".$i."</a> "; } $i = $i + 1; } if ($pagina == $total_paginas) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">| PR&Oacute;XIMA &gt;&gt;</font>\n"; } else { echo " <a href=\"index.php?pagina=".($pagina + 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">| pr&oacute;xima &gt;&gt;</a> \n"; } ?> </td> <td width="160" class="headerTable">Total de P&aacute;ginas: <?=$total_paginas?></td> </tr> </table> <?php echo ("<div align=\"center\" class=\"msgAlerts\">".$_SESSION['mensagem']."</div>"); ?> </form> <?php } else { echo ("<font color=\"#ff0000\" size=\"2\"> Nenhum resultado encontrado para essa consulta!</font>"); } $db->Free_Result(); $db->DbDisconnect(); } // end of member function buscarProduto function atualizarProduto($nome, $classe, $und, $ea, $em, $cod) { $db = new DBConnector(); $sql = "UPDATE Produto SET Unidade_UnidadeCodigo = '$und', Classe_ClasseCodigo = '$classe', ProdutoNome = '$nome', ProdutoEstoqueMin = $em, ProdutoEstoqueAtual = $ea WHERE ProdutoCodigo = $codUnid"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function atualizarProduto

57

} // end of Produto ?> <?php session_start(); require_once("../../includes/classes/produto.php"); if ($_SERVER['REQUEST_METHOD'] =='POST') { $nome = strtoupper(trim($_POST['fldNomeProd'])); $classe = $_POST['selClasse']; $und = $_POST['selUnid']; $ea = $_POST['fldProdEstAtual']; $em = $_POST['fldProdEstMin']; } $produto = new Produto(); $produto->incluirProduto($nome, $classe, $und, $ea, $em); $_SESSION['mensagem']="Produto Incluido com Sucesso"; header("Location: index.php?pagina=1"); ?> <?php session_start(); require_once("../../includes/classes/produto.php"); for ($i=0; $i<count($_POST['fldUndCod']); $i++) { $indice = $_POST['fldUndCod'][$i]; $produto = new Produto(); $produto->excluirProduto($indice); $cont++; } if ($cont > 0) $_SESSION['mensagem'] = "$cont registro(s) excluido(s) com &Ecirc;xito!"; header("Location: index.php?pagina=1"); ?> <?php session_start(); require_once("../../includes/classes/produto.php"); $cont = 0; for ($i=0; $i<count($_POST['fldUndCod']); $i++) { $indice = $_POST['fldUndCod'][$i]; for ($j=0; $j<count($_POST['fldIndiceCod']); $j++) { if ($indice == $_POST['fldIndiceCod'][$j]) { $nome = trim(strtoupper($_POST['fldProdNome'][$j])); $classe = $_POST['selProdClasse'][$j]; $und = $_POST['selProdUnid'][$j]; $ea = $_POST['fldProdEstAt'][$j]; $em = $_POST['fldProdEstMin'][$j]; $produto = new Produto(); $produto->atualizarProduto($nome, $classe, $und, $ea, $em, $indice); $cont++; } } } if ($cont > 0)

58

session_register('mensagem'); $_SESSION['mensagem'] = "$cont produto(s) atualizado(s) com exito!!!"; header("Location: index.php?pagina=1"); ?>

4.5.3. Cadastro de Classes <?php class Classe { public $GrupoClasse; public $ClasseDescricao; public $ClasseNatureza; function __construct() { $this->GrupoClasse = NULL; $this->ClasseDescricao = NULL; $this->ClasseNatureza = NULL; } function setGrupoClasse($grupoClasse) { $this->GrupoClasse = $grupoClasse; } function setClasseDescr($classeDescr) { $this->ClasseDescricao = $classeDescr; } function setClasseNatureza($classeNat) { $this->ClasseNatureza = $classeNat; } function getGrupoClasse() { return $this->GrupoClasse; } function getClasseDescr() { return $this->ClasseDescricao; } function getClasseNatureza() { return $this->ClasseNatureza; } function incluirClasse($grupoClasse,$classeDescr, $classeNat) { $db = new Conexao(); $this->setGrupoClasse($grupoClasse); $this->setClasseDescr($classeDescr); $this->setClasseNatureza($classeNat); $query = "INSERT INTO Classe (ClasseNome, ClasseGrupoCd, ClasseGrupoNat) VALUES ('".$this->getClasseDescr()."', ".$this->getGrupoClasse().", ".$this->getClasseNatureza().")" ; $db->Manipular($sql); $db->Fechar(); } function excluirClasse($classeID)

59

{ $db = new Conexao(); $sql = "DELETE FROM Classe WHERE ClasseCodigo=$classeID"; $db->Manipular($sql); $db->Fechar(); } function atualizarClasse($grupoClasse,$classeDescr, $classeNat, $classeID) { $db = new Conexao(); $this->setGrupoClasse($grupoClasse); $this->setClasseDescr($classeDescr); $this->setClasseNatureza($classeNat); $sql = "UPDATE Classe SET ClasseNome = '".$this->getClasseDescr()."' , ClasseGrupoCd = ".$this->getGrupoClasse().", ClasseGrupoNat = ".$this->getClasseNatureza()." WHERE ClasseCodigo = $classeID"; $db->Manipular($sql); $db->Fechar(); } function buscarClasse($unidNome, $qntporpag, $paginacao) { $cores = array("#e0f0fd", "#ffffff"); $i = 0; $db = new DBConnector(); $sql = "SELECT * FROM Classe WHERE ClasseNome Like '".$unidNome."%' ORDER BY ClasseNome"; $res=array($db->Execute_Query($sql)); $quant = $res[0][1]; $total_reg = $qntporpag; $pagina = $paginacao; if ($quant > 0 ){ ?> <form name="frmClasse" method="post" action="atualizarClasses.php"> <?php if ($quant <= $total_reg) { $total_paginas = 1; } // mais de 10 registros com valor multiplo de 10.. if ($quant%$total_reg == 0) { $total_paginas = $quant / $total_reg; } // mais de 10 registros porem o valor nao e multiplo de 10... else { // como a divisao exata, teremos que subtrair a parte que n?o ? inteira e // acrescentar 1 pagina. $total_paginas = ($quant/$total_reg) - (($quant%$total_reg)/$total_reg) + 1; } $linha_inicial = ($pagina - 1) * $total_reg; $linha_final = $linha_inicial + $total_reg - 1; // escrevendo os registros... // vamos usar um arcador para sabermos se estamos entre a linha final e a linha inicial... $marcador = 0; ?> <table align="center" border="0" width="650" cellspacing="2" bgcolor="#8dc6e4"> <tr> <td style="width: 20px;" valign="middle">&nbsp;</td>

60

<td style="width: 80px;" align="center" class="headerTable">C&oacute;digo</td> <td style="width: 500px;" class="headerTable">&nbsp;Descri&ccedil;&atilde;o</td> </tr> </table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <?php while($linha = $db->Get_Rows()) { if ($marcador >= $linha_inicial and $marcador <= $linha_final) { ?> <tr bgcolor="<?=$cores[$i%2]?>"> <td style="width: 20px;" align="center" valign="middle"> <input type="hidden" name="fldIndiceCod[]" value="<?=trim($linha['UnidadeCodigo'])?>"> <input name="fldUndCod[]" type="checkbox" value="<?=trim($linha['UnidadeCodigo'])?>" id="linha<?=trim($linha['UnidadeCodigo'])?>" /></td> <td style="width: 80px;" align="center"> <input name="fldUnidCod[]" type="text" title="Clique aqui para editar..." style="width: 70px; background-color:<?=$cores[$i%2]?>" value="<?=strtoupper(trim($linha['UnidadeCodigo']))?>" maxlength="3" class="inputsText" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" /></td> <td style="width: 500px;" align="left">&nbsp;<input name="fldUnidDescr[]" type="text" title="Clique aqui para editar..." style="width: 480px; background-color:<?=$cores[$i%2]?>" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" value="<?=strtoupper(trim($linha['UnidadeNome']))?>" maxlength="30" class="inputsText" /></td> </tr> <?php } //incrementamos o marcador... $marcador = $marcador + 1; $i++; } ?></table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <tr> <td width="75" align="center"><input type="submit" name="btnSalvar" value="Salvar" ></td> <td width="75" align="center"><input type="button" name="btnExcluir" value="Excluir" onClick="removerUnidade()"></td> <td width="500" align="center"> <?php if ($pagina == 1) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">&lt;&lt; ANTERIOR | </font> "; } else { echo "<a href=\"index.php?pagina=".($pagina - 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">&lt;&lt; anterior |</a> "; } $i = 1; while ($i <= $total_paginas) { if ($i == $pagina) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\"><b><u>$i</u></b></font> "; }

61

else { echo " <a href=\"index.php?pagina=".$i."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">".$i."</a> "; } $i = $i + 1; } if ($pagina == $total_paginas) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">| PR&Oacute;XIMA &gt;&gt;</font>\n"; } else { echo " <a href=\"index.php?pagina=".($pagina + 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">| pr&oacute;xima &gt;&gt;</a> \n"; } ?> </td> <td width="160" class="headerTable">Total de P&aacute;ginas: <?=$total_paginas?></td> </tr> </table> <?php echo ("<div align=\"center\" class=\"msgAlerts\">".$_SESSION['mensagem']."</div>"); ?> </form> <?php } else { echo ("<font color=\"#ff0000\" size=\"2\"> Nenhum resultado encontrado para essa consulta!</font>"); } $db->Free_Result(); $db->DbDisconnect(); } } ?>

<?php session_start(); require_once("../../includes/classes/classe.php"); if ($_SERVER['REQUEST_METHOD'] =='POST') { $nome = strtoupper(trim($_POST['fldNomeClasse'])); $grupo = $_POST['cmbGrupo']; $natur = $_POST['cmbNat']; } $classe = new Classe(); $classe->incluirClasse($nome, $grupo, $natur); $_SESSION['mensagem']="Classe Incluida com Sucesso"; header("Location: index.php?pagina=1"); ?> <?php session_start(); require_once("../../includes/classes/classe.php"); for ($i=0; $i<count($_POST['fldUndCod']); $i++) { $indice = $_POST['fldUndCod'][$i]; $classe = new Classe(); $classe->excluirClasse($indice);

62

$cont++; } if ($cont > 0) $_SESSION['mensagem'] = "$cont registro(s) excluido(s) com &Ecirc;xito!"; header("Location: index.php?pagina=1"); ?>

<?php session_start(); require_once("../../includes/classes/classe.php"); $cont = 0; for ($i=0; $i<count($_POST['fldUndCod']); $i++) { $indice = $_POST['fldUndCod'][$i]; for ($j=0; $j<count($_POST['fldIndiceCod']); $j++) { if ($indice == $_POST['fldIndiceCod'][$j]) { $grupoClasse = $_POST['selclassegrupo'][$j]; $classeDescr = trim(strtoupper($_POST['fldclasseDescr'][$j])); $classeNat = $_POST['selclassenat'][$j]; $classe = new Classe(); $classe->atualizarClasse($grupoClasse,$classeDescr, $classeNat, $indice); $cont++; } } } if ($cont > 0) session_register('mensagem'); $_SESSION['mensagem'] = "$cont classe(s) atualizada(s) com exito!!!"; header("Location: index.php?pagina=1"); ?>

4.5.4. Cadastro de Grupos <?php include("DBConnector.php"); class Grupo { public $GrupoNome; public $GrupoNatureza; function __construct() { $this->GrupoNome = NULL; $this->GrupoNatureza = NULL; } function setGrupoNome($grupoNome) { $this->GrupoNome = $grupoNome; } function setGrupoNatureza($grupoNatureza) { $this->GrupoNatureza = $grupoNatureza; }

63

function getGrupoNome() { return $this->GrupoNome; } function getGrupoNatureza() { return $this->GrupoNatureza; } function incluirGrupo($nome, $natureza) { $db = new DBConnector(); $this->setGrupoNome($nome); $this->setGrupoNatureza($natureza); $sql = "INSERT INTO Grupo (GrupoNatureza,GrupoNome) VALUES ('".$this->getGrupoNome()."', '".$this->getGrupoNatureza()."')"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } function excluirGrupo($codGrupo) { $db = new DBConnector(); $sql = "DELETE FROM Grupo WHERE GrupoCodigo = $codGrupo"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } function atualizarGrupo($grupoNome, $grupoNat, $codGrupo ) { $db = new DBConnector(); $sql = "UPDATE Grupo SET GrupoNome = '$grupoNome', GrupoNatureza = '$grupoNat' WHERE GrupoCodigo = $codGrupo"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } function buscarGrupo($unidNome, $qntporpag, $paginacao) { $cores = array("#e0f0fd", "#ffffff"); $i = 0; $db = new DBConnector(); $sql = "SELECT * FROM Grupo WHERE GrupoNome Like '".$unidNome."%' ORDER BY GrupoNome"; $res=array($db->Execute_Query($sql)); $quant = $res[0][1]; $total_reg = $qntporpag; $pagina = $paginacao; if ($quant > 0 ){ ?> <form name="frmGrupos" method="post" action="atualizarGrupos.php"> <?php if ($quant <= $total_reg) { $total_paginas = 1; } // mais de 10 registros com valor multiplo de 10.. if ($quant%$total_reg == 0) { $total_paginas = $quant / $total_reg; } // mais de 10 registros porem o valor nao e multiplo de 10... else { // como a divisao exata, teremos que subtrair a parte que n?o ? inteira e // acrescentar 1 pagina. $total_paginas = ($quant/$total_reg) - (($quant%$total_reg)/$total_reg) + 1; }

64

$linha_inicial = ($pagina - 1) * $total_reg; $linha_final = $linha_inicial + $total_reg - 1; // escrevendo os registros... // vamos usar um arcador para sabermos se estamos entre a linha final e a linha inicial... $marcador = 0; ?> <table align="center" border="0" width="650" cellspacing="2" bgcolor="#8dc6e4"> <tr> <td style="width: 20px;" valign="middle">&nbsp;</td> <td style="width: 80px;" align="center" class="headerTable">C&oacute;digo</td> <td style="width: 500px;" class="headerTable">&nbsp;Descri&ccedil;&atilde;o</td> </tr> </table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <?php while($linha = $db->Get_Rows()) { if ($marcador >= $linha_inicial and $marcador <= $linha_final) { ?> <tr bgcolor="<?=$cores[$i%2]?>"> <td style="width: 20px;" align="center" valign="middle"> <input type="hidden" name="fldIndiceCod[]" value="<?=trim($linha['UnidadeCodigo'])?>"> <input name="fldUndCod[]" type="checkbox" value="<?=trim($linha['UnidadeCodigo'])?>" id="linha<?=trim($linha['UnidadeCodigo'])?>" /></td> <td style="width: 80px;" align="center"> <input name="fldUnidCod[]" type="text" title="Clique aqui para editar..." style="width: 70px; background-color:<?=$cores[$i%2]?>" value="<?=strtoupper(trim($linha['UnidadeCodigo']))?>" maxlength="3" class="inputsText" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" /></td> <td style="width: 500px;" align="left">&nbsp;<input name="fldUnidDescr[]" type="text" title="Clique aqui para editar..." style="width: 480px; background-color:<?=$cores[$i%2]?>" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" value="<?=strtoupper(trim($linha['UnidadeNome']))?>" maxlength="30" class="inputsText" /></td> </tr> <?php } //incrementamos o marcador... $marcador = $marcador + 1; $i++; } ?></table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <tr> <td width="75" align="center"><input type="submit" name="btnSalvar" value="Salvar" ></td> <td width="75" align="center"><input type="button" name="btnExcluir" value="Excluir" onClick="removerUnidade()"></td> <td width="500" align="center"> <?php if ($pagina == 1) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">&lt;&lt; ANTERIOR | </font> "; }

65

else { echo "<a href=\"index.php?pagina=".($pagina - 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">&lt;&lt; anterior |</a> "; } $i = 1; while ($i <= $total_paginas) { if ($i == $pagina) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\"><b><u>$i</u></b></font> "; } else { echo " <a href=\"index.php?pagina=".$i."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">".$i."</a> "; } $i = $i + 1; } if ($pagina == $total_paginas) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">| PR&Oacute;XIMA &gt;&gt;</font>\n"; } else { echo " <a href=\"index.php?pagina=".($pagina + 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">| pr&oacute;xima &gt;&gt;</a> \n"; } ?> </td> <td width="160" class="headerTable">Total de P&aacute;ginas: <?=$total_paginas?></td> </tr> </table> <?php echo ("<div align=\"center\" class=\"msgAlerts\">".$_SESSION['mensagem']."</div>"); ?> </form> <?php } else { echo ("<font color=\"#ff0000\" size=\"2\"> Nenhum resultado encontrado para essa consulta!</font>"); } $db->Free_Result(); $db->DbDisconnect(); } } ?> <?php session_start(); require_once("../../includes/classes/grupo.php"); if ($_SERVER['REQUEST_METHOD'] =='POST') { $nomeGrupo = strtoupper(trim($_POST['fldNomeGrupo'])); $natGrupo = $_POST['cmbNatGrupo']; } $grupo = new Grupo(); $grupo->incluirGrupo($nomeGrupo, $natGrupo);

66

$_SESSION['mensagem']="Grupo Incluido com Sucesso"; header("Location: index.php?pagina=1"); ?> <?php session_start(); require_once("../../includes/classes/grupo.php"); for ($i=0; $i<count($_POST['fldUndCod']); $i++) { $indice = $_POST['fldUndCod'][$i]; $grupo = new Grupo(); $unidade->excluirGrupo($indice); $cont++; } if ($cont > 0) $_SESSION['mensagem'] = "$cont registro(s) excluido(s) com &Ecirc;xito!"; header("Location: index.php?pagina=1"); ?>

<?php session_start(); require_once("../../includes/classes/grupo.php"); $cont = 0; for ($i=0; $i<count($_POST['fldUndCod']); $i++) { $indice = $_POST['fldUndCod'][$i]; for ($j=0; $j<count($_POST['fldIndiceCod']); $j++) { if ($indice == $_POST['fldIndiceCod'][$j]) { $novoNome = trim(strtoupper($_POST['fldUnidDescr'][$j])); $novaNat = $_POST['selNat'][$j]; $grupo = new Grupo(); $grupo->atualizarGrupo($novoNome, $novaNat, $indice); $cont++; } } } if ($cont > 0) session_register('mensagem'); $_SESSION['mensagem'] = "$cont grupo(s) atualizado(s) com exito!!!"; header("Location: index.php?pagina=1"); ?>

4.5.5. Cadastro de Fornecedores <?php include("DBConnector.php"); class Fornecedores { public $FornecedorCNPJ; public $RazaoSocial; public $NomeFantasia; public $InscrEstadual; public $Endereco; public $Bairro; public $Cidade;

67

public $CEP; public $UF; public $Fone; public $Fax; public $Email; function setFornecedorCNPJ($cnpj){ $this->FornecedorCNPJ = $cnpj; } function setRazaoSocial($razao){ $this->RazaoSocial = $razao; } function setNomeFantasia($nome){ $this->NomeFantasia = $nome; } function setInscrEstadual($inscrEst){ $this->InscrEstadual = $inscrEst; } function setEndereco($endereco){ $this->Endereco = $endereco; } function setBairro($bairro){ $this->Bairro = $bairro; } function setCidade($cidade){ $this->Cidade = $cidade; } function setCEP($cep){ $this->CEP = $cep; } function setUF($uf){ $this->UF = $uf; } function setFone($fone){ $this->Fone = $fone; } function setFax($fax){ $this->Fax = $fax; } function setEmail($mail){ $this->Email = $mail; } function getFornecedorCNPJ(){ return $this->FornecedorCNPJ; } function getRazaoSocial(){ return $this->RazaoSocial; } function getNomeFantasia(){ return $this->NomeFantasia; } function getInscrEstadual(){ return $this->InscrEstadual; } function getEndereco(){ return $this->Endereco; } function getBairro(){ return $this->Bairro; } function getCidade(){ return $this->Cidade; } function getCEP(){ return $this->CEP;

68

} function getUF(){ return $this->UF; } function getFone(){ return $this->Fone; } function getFax(){ return $this->Fax; } function getEmail(){ return $this->Email; } function incluirFornecedor($cnpj,$razao, $nome, $inscrEst,$endereco, $inscrEst, $endereco, $bairro, $cidade, $cep, $uf, $fone, $fax, $mail) { $db = new Conexao(); $this->setFornecedorCNPJ($cnpj); $this->setRazaoSocial($razao); $this->setNomeFantasia($nome); $this->setInscrEstadual($inscrEst); $this->setEndereco($endereco); $this->setBairro($bairro); $this->setCidade($cidade); $this->setCEP($cep); $this->setUF($uf); $this->setFone($fone); $this->setFax($fax); $this->setEmail($mail); $sql = "INSERT INTO Fornecedor (FornecedorCNPJ, FornecedorRazaoSocial, FornecedorNome, FornecedorInscrEstadual, FornecedorEndereco, FornecedorBairro, FornecedorCidade, FornecedorCEP, FornecedorUF, FornecedorFone, FornecedorFax, FornecedorEmail) VALUES('".$this->getFornecedorCNPJ()."','".$this->getRazaoSocial()."','".$this->getNomeFantasia()."','".$this->getInscrEstadual()."','".$this->getEndereco()."','".$this->getBairro()."','".$this->getCidade."','".$this->getCEP."','".$this->getUF()."','".$this->getFone()."','".$this->getFax()."','".$this->getEmail()."')"; $db->Manipular($sql); $db->Fechar(); } function excluirFornecedor($cnpj) { $db = new Conexao(); $sql = "DELETE FROM Fornecedor WHERE FornecedorCNPJ=$cnpj"; $db->Manipular($sql); $db->Fechar(); } function atualizarFornecedor($cnpj,$razao, $nome, $inscrEst,$endereco, $endereco, $bairro, $cidade, $cep, $uf, $fone, $fax, $mail) { $db = new Conexao(); $this->setRazaoSocial($razao); $this->setNomeFantasia($nome); $this->setInscrEstadual($inscrEst); $this->setEndereco($endereco); $this->setBairro($bairro); $this->setCidade($cidade); $this->setCEP($cep); $this->setUF($uf); $this->setFone($fone);

69

$this->setFax($fax); $this->setEmail($mail); $sql = "UPDATE Fornecedor SET FornecedorRazaoSocial = '".$this->getRazaoSocial()"', FornecedorNome = '".$this->getNome()"', FornecedorInscrEstadual = '".$this->getInscrEstadual()"', FornecedorEndereco = '".$this->getInscrEstadual()"', FornecedorBairro = '".$this->getInscrEstadual()"', FornecedorCidade = '".$this->getCidade()"', FornecedorCEP = '".$this->getCEP()"', FornecedorUF = '".$this->getUF()"', FornecedorFone = '".$this->getFone()"', FornecedorFax = '".$this->getFax()"', FornecedorEmail = '".$this->getEmail()"' WHERE FornecedorCNPJ = '$cnpj'"; $db->Manipular($sql); $db->Fechar(); } function buscarFornecedor($unidNome, $qntporpag, $paginacao) { $cores = array("#e0f0fd", "#ffffff"); $i = 0; $db = new DBConnector(); $sql = "SELECT * FROM Fornecedor WHERE FornecedorRazaoSocial Like '".$unidNome."%' ORDER BY FornecedorRazaoSocial"; $res=array($db->Execute_Query($sql)); $quant = $res[0][1]; $total_reg = $qntporpag; $pagina = $paginacao; if ($quant > 0 ){ ?> <form name="frmFornecedores" method="post" action="atualizarFornecedores.php"> <?php if ($quant <= $total_reg) { $total_paginas = 1; } // mais de 10 registros com valor multiplo de 10.. if ($quant%$total_reg == 0) { $total_paginas = $quant / $total_reg; } // mais de 10 registros porem o valor nao e multiplo de 10... else { // como a divisao exata, teremos que subtrair a parte que n?o ? inteira e // acrescentar 1 pagina. $total_paginas = ($quant/$total_reg) - (($quant%$total_reg)/$total_reg) + 1; } $linha_inicial = ($pagina - 1) * $total_reg; $linha_final = $linha_inicial + $total_reg - 1; // escrevendo os registros... // vamos usar um arcador para sabermos se estamos entre a linha final e a linha inicial... $marcador = 0; ?> <table align="center" border="0" width="650" cellspacing="2" bgcolor="#8dc6e4"> <tr> <td style="width: 20px;" valign="middle">&nbsp;</td> <td style="width: 80px;" align="center" class="headerTable">C&oacute;digo</td> <td style="width: 500px;" class="headerTable">&nbsp;Descri&ccedil;&atilde;o</td> </tr> </table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <?php

70

while($linha = $db->Get_Rows()) { if ($marcador >= $linha_inicial and $marcador <= $linha_final) { ?> <tr bgcolor="<?=$cores[$i%2]?>"> <td style="width: 20px;" align="center" valign="middle"> <input type="hidden" name="fldIndiceCod[]" value="<?=trim($linha['UnidadeCodigo'])?>"> <input name="fldUndCod[]" type="checkbox" value="<?=trim($linha['UnidadeCodigo'])?>" id="linha<?=trim($linha['UnidadeCodigo'])?>" /></td> <td style="width: 80px;" align="center"> <input name="fldUnidCod[]" type="text" title="Clique aqui para editar..." style="width: 70px; background-color:<?=$cores[$i%2]?>" value="<?=strtoupper(trim($linha['UnidadeCodigo']))?>" maxlength="3" class="inputsText" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" /></td> <td style="width: 500px;" align="left">&nbsp;<input name="fldUnidDescr[]" type="text" title="Clique aqui para editar..." style="width: 480px; background-color:<?=$cores[$i%2]?>" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" value="<?=strtoupper(trim($linha['UnidadeNome']))?>" maxlength="30" class="inputsText" /></td> </tr> <?php } //incrementamos o marcador... $marcador = $marcador + 1; $i++; } ?></table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <tr> <td width="75" align="center"><input type="submit" name="btnSalvar" value="Salvar" ></td> <td width="75" align="center"><input type="button" name="btnExcluir" value="Excluir" onClick="removerUnidade()"></td> <td width="500" align="center"> <?php if ($pagina == 1) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">&lt;&lt; ANTERIOR | </font> "; } else { echo "<a href=\"index.php?pagina=".($pagina - 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">&lt;&lt; anterior |</a> "; } $i = 1; while ($i <= $total_paginas) { if ($i == $pagina) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\"><b><u>$i</u></b></font> "; } else { echo " <a href=\"index.php?pagina=".$i."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">".$i."</a> "; } $i = $i + 1; }

71

if ($pagina == $total_paginas) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">| PR&Oacute;XIMA &gt;&gt;</font>\n"; } else { echo " <a href=\"index.php?pagina=".($pagina + 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">| pr&oacute;xima &gt;&gt;</a> \n"; } ?> </td> <td width="160" class="headerTable">Total de P&aacute;ginas: <?=$total_paginas?></td> </tr> </table> <?php echo ("<div align=\"center\" class=\"msgAlerts\">".$_SESSION['mensagem']."</div>"); ?> </form> <?php } else { echo ("<font color=\"#ff0000\" size=\"2\"> Nenhum resultado encontrado para essa consulta!</font>"); } $db->Free_Result(); $db->DbDisconnect(); } } // end of Fornecedores ?>

<?php session_start(); require_once("../../includes/classes/fornecedores.php"); if ($_SERVER['REQUEST_METHOD'] =='POST') { $cnpj = trim(strtoupper($_POST['fldforncnpj'])); $razao = trim(strtoupper($_POST['fldfornrazao'])); $nome = trim(strtoupper($_POST['fldfornnome'])); $inscrEst = trim(strtoupper($_POST['fldforninscEst'])); $endereco = trim(strtoupper($_POST['fldfornender'])); $bairro = trim(strtoupper($_POST['fldfornbairro'])); $cidade = trim(strtoupper($_POST['fldforncidade'])); $cep = trim(strtoupper($_POST['fldforncep'])); $uf = trim(strtoupper($_POST['fldfornuf'])); $fone = trim(strtoupper($_POST['fldfornfone'])); $fax = trim(strtoupper($_POST['fldfornfax'])); $mail = trim(strtoupper($_POST['fldfornmail'])); } $fornecedores = new Fornecedores(); $fornecedores->incluirFornecedor($cnpj,$razao, $nome, $inscrEst,$endereco, $inscrEst, $endereco, $bairro, $cidade, $cep, $uf, $fone, $fax, $mail); $_SESSION['mensagem']="Fornecedor Incluido com Sucesso"; header("Location: index.php?pagina=1"); ?> <?php session_start(); require_once("../../includes/classes/fornecedores.php"); for ($i=0; $i<count($_POST['fldUndCod']); $i++) { $indice = $_POST['fldUndCod'][$i]; $fornecedores = new Fornecedores(); $fornecedores->excluirFornecedor($indice); $cont++;

72

} if ($cont > 0) $_SESSION['mensagem'] = "$cont registro(s) excluido(s) com &Ecirc;xito!"; header("Location: index.php?pagina=1"); ?> <?php session_start(); require_once("../../includes/classes/fornecedores.php"); $cont = 0; for ($i=0; $i<count($_POST['fldUndCod']); $i++) { $indice = $_POST['fldUndCod'][$i]; for ($j=0; $j<count($_POST['fldIndiceCod']); $j++) { if ($indice == $_POST['fldIndiceCod'][$j]) { $razao = trim(strtoupper($_POST['fldfornrazao'][$j])); $nome = trim(strtoupper($_POST['fldfornnome'][$j])); $inscrEst = trim(strtoupper($_POST['fldforninscEst'][$j])); $endereco = trim(strtoupper($_POST['fldfornender'][$j])); $bairro = trim(strtoupper($_POST['fldfornbairro'][$j])); $cidade = trim(strtoupper($_POST['fldforncidade'][$j])); $cep = trim(strtoupper($_POST['fldforncep'][$j])); $uf = trim(strtoupper($_POST['fldfornuf'][$j])); $fone = trim(strtoupper($_POST['fldfornfone'][$j])); $fax = trim(strtoupper($_POST['fldfornfax'][$j])); $mail = trim(strtoupper($_POST['fldfornmail'][$j])); $fornecedores = new Fornecedores(); $fornecedores->atualizarFornecedor($indice,$razao, $nome, $inscrEst,$endereco, $endereco, $bairro, $cidade, $cep, $uf, $fone, $fax, $mail); $cont++; } } } if ($cont > 0) session_register('mensagem'); $_SESSION['mensagem'] = "$cont fornecedor(es) atualizado(s) com exito!!!"; header("Location: index.php?pagina=1"); ?>

4.5.6. Movimentação Externa <?php include("DBConnector.php"); class MovEx { public $FornecedorCodigo; public $Data; public $NotaFiscal; public $DocOrigem; public $Transportadora; function __construct() { $this->FornecedorCodigo = NULL; $this->Data = NULL; $this->NotaFiscal = NULL; $this->DocOrigem = NULL; $this->Transportadora = NULL; }

73

function setFornecedorCodigo($fornec) { $this->FornecedorCodigo = $fornec; } function setData($data){ $this->Data = $data; } function setNotaFiscal($NF){ $this->NotaFiscal = $NF; } function setDocOrigem($Doc){ $this->DocOrigem = $Doc; } function setTransportadora($transp){ $this->Transportadora = $transp; } function getFornecedorCodigo(){ return $this->FornecedorCodigo; } function getData(){ return $this->Data; } function getNotaFiscal(){ return $this->NotaFiscal; } function getDocOrigem(){ return $this->DocOrigem; } function getTransportadora(){ return $this->Transportadora; } function incluirME($fornec, $data, $NF, $Doc, $transp) { $db = new DBConnector(); $this->setFornecedorCodigo($fornec); $this->setData($data); $this->setNotaFiscal($NF){ $this->setDocOrigem($Doc); $this->setTransportadora($transp); $sql = "INSERT INTO MovEx (Fornecedor_FornecedorCNPJ, MovExData, MovExNumNotaFiscal, MovExDocOrigem, MovExTransportadora) VALUES('".$this->getFornecedorCodigo()."', '".$this->getData()."','".$this->getNotaFiscal()."', '".$this->getDocOrigem()."','".$this->getTransportadora()."')"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function incluirME function excluirME($codME) { $db = new DBConnector(); $sql = "DELETE FROM MovEx WHERE MovExCodigo = $codME"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function excluirME function buscarME($unidNome, $qntporpag, $paginacao) { $cores = array("#e0f0fd", "#ffffff"); $i = 0; $db = new DBConnector();

74

$sql = "SELECT * FROM MovEx WHERE MovExCodigo Like '".$unidNome."%' ORDER BY MovExCodigo"; $res=array($db->Execute_Query($sql)); $quant = $res[0][1]; $total_reg = $qntporpag; $pagina = $paginacao; if ($quant > 0 ){ ?> <form name="frmmovEx" method="post" action="atualizarME.php"> <?php if ($quant <= $total_reg) { $total_paginas = 1; } // mais de 10 registros com valor multiplo de 10.. if ($quant%$total_reg == 0) { $total_paginas = $quant / $total_reg; } // mais de 10 registros porem o valor nao e multiplo de 10... else { // como a divisao exata, teremos que subtrair a parte que n?o ? inteira e // acrescentar 1 pagina. $total_paginas = ($quant/$total_reg) - (($quant%$total_reg)/$total_reg) + 1; } $linha_inicial = ($pagina - 1) * $total_reg; $linha_final = $linha_inicial + $total_reg - 1; // escrevendo os registros... // vamos usar um arcador para sabermos se estamos entre a linha final e a linha inicial... $marcador = 0; ?> <table align="center" border="0" width="650" cellspacing="2" bgcolor="#8dc6e4"> <tr> <td style="width: 20px;" valign="middle">&nbsp;</td> <td style="width: 80px;" align="center" class="headerTable">C&oacute;digo</td> <td style="width: 500px;" class="headerTable">&nbsp;Descri&ccedil;&atilde;o</td> </tr> </table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <?php while($linha = $db->Get_Rows()) { if ($marcador >= $linha_inicial and $marcador <= $linha_final) { ?> <tr bgcolor="<?=$cores[$i%2]?>"> <td style="width: 20px;" align="center" valign="middle"> <input type="hidden" name="fldIndiceCod[]" value="<?=trim($linha['UnidadeCodigo'])?>"> <input name="fldUndCod[]" type="checkbox" value="<?=trim($linha['UnidadeCodigo'])?>" id="linha<?=trim($linha['UnidadeCodigo'])?>" /></td> <td style="width: 80px;" align="center"> <input name="fldUnidCod[]" type="text" title="Clique aqui para editar..." style="width: 70px; background-color:<?=$cores[$i%2]?>" value="<?=strtoupper(trim($linha['UnidadeCodigo']))?>" maxlength="3" class="inputsText" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" /></td> <td style="width: 500px;" align="left">&nbsp;<input name="fldUnidDescr[]" type="text" title="Clique aqui para editar..." style="width: 480px; background-color:<?=$cores[$i%2]?>" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')"

75

value="<?=strtoupper(trim($linha['UnidadeNome']))?>" maxlength="30" class="inputsText" /></td> </tr> <?php } //incrementamos o marcador... $marcador = $marcador + 1; $i++; } ?></table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <tr> <td width="75" align="center"><input type="submit" name="btnSalvar" value="Salvar" ></td> <td width="75" align="center"><input type="button" name="btnExcluir" value="Excluir" onClick="removerUnidade()"></td> <td width="500" align="center"> <?php if ($pagina == 1) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">&lt;&lt; ANTERIOR | </font> "; } else { echo "<a href=\"index.php?pagina=".($pagina - 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">&lt;&lt; anterior |</a> "; } $i = 1; while ($i <= $total_paginas) { if ($i == $pagina) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\"><b><u>$i</u></b></font> "; } else { echo " <a href=\"index.php?pagina=".$i."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">".$i."</a> "; } $i = $i + 1; } if ($pagina == $total_paginas) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">| PR&Oacute;XIMA &gt;&gt;</font>\n"; } else { echo " <a href=\"index.php?pagina=".($pagina + 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">| pr&oacute;xima &gt;&gt;</a> \n"; } ?> </td> <td width="160" class="headerTable">Total de P&aacute;ginas: <?=$total_paginas?></td> </tr> </table> <?php echo ("<div align=\"center\" class=\"msgAlerts\">".$_SESSION['mensagem']."</div>"); ?> </form> <?php

76

} else { echo ("<font color=\"#ff0000\" size=\"2\"> Nenhum resultado encontrado para essa consulta!</font>"); } $db->Free_Result(); $db->DbDisconnect(); } // end of member function buscarME function atualizarME($fornec, $data, $NF, $Doc, $transp, $codME) { $db = new DBConnector(); $sql = "UPDATE MovEx SET Fornecedor_FornecedorCNPJ = '$fornec', MovExData = '$data', MovExNumNotaFiscal = '$NF', MovExDocOrigem = '$Doc', MovExTransportadora = '$transp' WHERE = MovExCodigo = $codME"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function atualizarME } // end of MovEx ?>

4.5.7. Itens de Moviementação Externa

<?php include("DBConnector.php"); class ItemMovEx { public $MovimExCodigo; public $ProdutoCodigo; public $QuantAdquirida; public $ValorUnitario; function __construct() { $this->MovimExCodigo = NULL; $this->ProdutoCodigo = NULL; $this->QuantAdquirida = 0; $this->ValorUnitario = 0; } function setMovimExCodigo($MECod){ $this->MovimExCodigo = $MECod; } function setProdutoCodigo($prod){ $this->ProdutoCodigo = $prod. } function setQuantAdquirida($qtde){ $this->QuantAdquirida = $qtde; } function setValorUnitario($vlrunit){ $this->ValorUnitario = $vlrunit; } function getMovimExCodigo(){ return $this->MovimExCodigo; } function getProdutoCodigo(){ return $this->ProdutoCodigo; } function getQuantAdquirida(){ return $this->QuantAdquirida; } function getValorUnitario(){ return $this->ValorUnitario; }

77

function incluirItemME($MIcod,$prod,$qtde,$vlrunit) { $db = new DBConnector(); $this->setMovimExCodigo($MIcod); $this->setProdutoCodigo($prod); $this->setQuantAdquirida($qtde); $this->setValorUnitario($vlrunit); $sql = "INSERT INTO ItemMovEx (MovEx_MovExCodigo, Produto_ProdutoCodigo, ItemMovExQtdAdq, ItemMovExValorUnit) VALUES(".$this->getMovimExCodigo().",".$this->getProdutoCodigo().",".$this->getQuantAdquirida().",".$this->getValorUnitario().")"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function incluirItemME function buscarItemME($unidNome, $qntporpag, $paginacao) { $cores = array("#e0f0fd", "#ffffff"); $i = 0; $db = new DBConnector(); $sql = "SELECT * FROM ItemMovEx WHERE ItemMovExCodigo Like '".$unidNome."%' ORDER BY ItemMovExCodigo"; $res=array($db->Execute_Query($sql)); $quant = $res[0][1]; $total_reg = $qntporpag; $pagina = $paginacao; if ($quant > 0 ){ ?> <form name="frmMovItemEx" method="post" action="atualizaritemME.php"> <?php if ($quant <= $total_reg) { $total_paginas = 1; } // mais de 10 registros com valor multiplo de 10.. if ($quant%$total_reg == 0) { $total_paginas = $quant / $total_reg; } // mais de 10 registros porem o valor nao e multiplo de 10... else { // como a divisao exata, teremos que subtrair a parte que n?o ? inteira e // acrescentar 1 pagina. $total_paginas = ($quant/$total_reg) - (($quant%$total_reg)/$total_reg) + 1; } $linha_inicial = ($pagina - 1) * $total_reg; $linha_final = $linha_inicial + $total_reg - 1; // escrevendo os registros... // vamos usar um arcador para sabermos se estamos entre a linha final e a linha inicial... $marcador = 0; ?> <table align="center" border="0" width="650" cellspacing="2" bgcolor="#8dc6e4"> <tr> <td style="width: 20px;" valign="middle">&nbsp;</td> <td style="width: 80px;" align="center" class="headerTable">C&oacute;digo</td> <td style="width: 500px;" class="headerTable">&nbsp;Descri&ccedil;&atilde;o</td> </tr> </table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <?php

78

while($linha = $db->Get_Rows()) { if ($marcador >= $linha_inicial and $marcador <= $linha_final) { ?> <tr bgcolor="<?=$cores[$i%2]?>"> <td style="width: 20px;" align="center" valign="middle"> <input type="hidden" name="fldIndiceCod[]" value="<?=trim($linha['UnidadeCodigo'])?>"> <input name="fldUndCod[]" type="checkbox" value="<?=trim($linha['UnidadeCodigo'])?>" id="linha<?=trim($linha['UnidadeCodigo'])?>" /></td> <td style="width: 80px;" align="center"> <input name="fldUnidCod[]" type="text" title="Clique aqui para editar..." style="width: 70px; background-color:<?=$cores[$i%2]?>" value="<?=strtoupper(trim($linha['UnidadeCodigo']))?>" maxlength="3" class="inputsText" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" /></td> <td style="width: 500px;" align="left">&nbsp;<input name="fldUnidDescr[]" type="text" title="Clique aqui para editar..." style="width: 480px; background-color:<?=$cores[$i%2]?>" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" value="<?=strtoupper(trim($linha['UnidadeNome']))?>" maxlength="30" class="inputsText" /></td> </tr> <?php } //incrementamos o marcador... $marcador = $marcador + 1; $i++; } ?></table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <tr> <td width="75" align="center"><input type="submit" name="btnSalvar" value="Salvar" ></td> <td width="75" align="center"><input type="button" name="btnExcluir" value="Excluir" onClick="removerUnidade()"></td> <td width="500" align="center"> <?php if ($pagina == 1) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">&lt;&lt; ANTERIOR | </font> "; } else { echo "<a href=\"index.php?pagina=".($pagina - 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">&lt;&lt; anterior |</a> "; } $i = 1; while ($i <= $total_paginas) { if ($i == $pagina) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\"><b><u>$i</u></b></font> "; } else { echo " <a href=\"index.php?pagina=".$i."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">".$i."</a> "; } $i = $i + 1; }

79

if ($pagina == $total_paginas) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">| PR&Oacute;XIMA &gt;&gt;</font>\n"; } else { echo " <a href=\"index.php?pagina=".($pagina + 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">| pr&oacute;xima &gt;&gt;</a> \n"; } ?> </td> <td width="160" class="headerTable">Total de P&aacute;ginas: <?=$total_paginas?></td> </tr> </table> <?php echo ("<div align=\"center\" class=\"msgAlerts\">".$_SESSION['mensagem']."</div>"); ?> </form> <?php } else { echo ("<font color=\"#ff0000\" size=\"2\"> Nenhum resultado encontrado para essa consulta!</font>"); } $db->Free_Result(); $db->DbDisconnect(); } // end of member function buscarItemME function atualizarItemME($prod,$qtde,$vlrunit, $codME) { $db = new DBConnector(); $sql = "UPDATE ItemMovEx SET Produto_ProdutoCodigo = $prod, ItemMovExQtdAdq=$qtde, ItemMovExValorUnit=$vlrunit WHERE MovEx_MovExCodigo = $codME"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function atualizarItemME function excluirItemME($codItemME) { $db = new DBConnector(); $sql = "DELETE FROM ItemMovEx WHERE ItemMovExCodigo = $codItemME"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function excluirItemME } // end of ItemMovEx ?>

4.5.8. Movimentação Interna

<?php include("DBConnector.php"); class MovInt { public $DeptoCodigo; public $FuncsMatr; public $DataSolicitacao; public $DataAtendimento; public $FuncionarioAlmoxAtend; public $FuncionarioAlmoxResposta;

80

function __construct() { $this->DeptoCodigo = NULL; $this->FuncsMatr = NULL; $this->DataSolicitacao = NULL; $this->DataAtendimento = NULL; $this->FuncionarioAlmoxAtend = NULL; $this->FuncionarioAlmoxResposta = NULL; } function setDeptoCodigo($depto){ $this->DeptoCodigo = $depto; } function setFuncsMatr($funcMatr){ $this->FuncsMatr = $funcMatr; } function setDataSolicitacao($dtSol){ $this->DataSolicitacao = $dtSol; } function setDataAtendimento($dtAtend){ $this->DataAtendimento = $dtAtend; } function setFuncionarioAlmoxAtend($funcAtend){ $this->FuncionarioAlmoxAtend = $funcAtend; } function setFuncionarioAlmoxResposta($resposta){ $this->FuncionarioAlmoxAtend = $resposta; } function getDeptoCodigo(){ return $this->DeptoCodigo; } function getFuncsMatr(){ return $this->FuncsMatr; } function getDataSolicitacao(){ return $this->DataSolicitacao; } function getDataAtendimento(){ return $this->DataAtendimento; } function getFuncionarioAlmoxAtend(){ return $this->FuncionarioAlmoxAtend; } function getFuncionarioAlmoxResposta(){ return $this->FuncionarioAlmoxResposta; } function incluirMI($depto,$funcMatr,$dtSol,$dtAtend,$funcAtend,$resposta) { $db = new DBConnector(); $this->setDeptoCodigo($depto); $this->setFuncsMatr($funcMatr); $this->setDataSolicitacao($dtSol); $this->setDataAtendimento($dtAtend); $this->setFuncionarioAlmoxAtend($funcAtend); $this->setFuncionarioAlmoxResposta($resposta); $sql = "INSERT INTO MovInt (Funcionario_FuncionarioMatricula, Departamento_DepartamentoCodigo, MovIntDataSolic, MovIntDataAtend, MovIntFuncAlmoxMatr, MovIntResposta) VALUES('".$this->getFuncsMatr()."', '".$this->getDeptoCodigo."','".$this->getDataSolicitacao()."','".$this->getDataAtendimento()."','".$this->getFuncionarioAlmoxAtend()."','".$this->getFuncionarioAlmoxResposta()."')";

81

$db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function incluirMI function excluirMI($codMI) { $db = new DBConnector(); $sql = "DELETE FROM MovInt WHERE MovIntCodigo = $codMI"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function excluirMI function atualizarMI($depto,$funcMatr,$dtSol,$dtAtend,$funcAtend,$resposta,$codMI) { $db = new DBConnector(); $sql = "UPDATE MovInt SET Funcionario_FuncionarioMatricula = '$funcMatr', Departamento_DepartamentoCodigo = '$depto', MovIntDataSolic = '$dtSol', MovIntDataAtend = '$dtAtend', MovIntFuncAlmoxMatr='$funcAtend', MovIntResposta = '$resposta' WHERE MovIntCodigo = $codMI"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function atualizarMI function buscarMI($unidNome, $qntporpag, $paginacao) { $cores = array("#e0f0fd", "#ffffff"); $i = 0; $db = new DBConnector(); $sql = "SELECT * FROM MovInt WHERE MovIntCodigo Like '".$unidNome."%' ORDER BY MovIntCodigo"; $res=array($db->Execute_Query($sql)); $quant = $res[0][1]; $total_reg = $qntporpag; $pagina = $paginacao; if ($quant > 0 ){ ?> <form name="frmMovInt" method="post" action="atualizarMI.php"> <?php if ($quant <= $total_reg) { $total_paginas = 1; } // mais de 10 registros com valor multiplo de 10.. if ($quant%$total_reg == 0) { $total_paginas = $quant / $total_reg; } // mais de 10 registros porem o valor nao e multiplo de 10... else { // como a divisao exata, teremos que subtrair a parte que n?o ? inteira e // acrescentar 1 pagina. $total_paginas = ($quant/$total_reg) - (($quant%$total_reg)/$total_reg) + 1; } $linha_inicial = ($pagina - 1) * $total_reg; $linha_final = $linha_inicial + $total_reg - 1; // escrevendo os registros... // vamos usar um arcador para sabermos se estamos entre a linha final e a linha inicial... $marcador = 0; ?> <table align="center" border="0" width="650" cellspacing="2" bgcolor="#8dc6e4">

82

<tr> <td style="width: 20px;" valign="middle">&nbsp;</td> <td style="width: 80px;" align="center" class="headerTable">C&oacute;digo</td> <td style="width: 500px;" class="headerTable">&nbsp;Descri&ccedil;&atilde;o</td> </tr> </table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <?php while($linha = $db->Get_Rows()) { if ($marcador >= $linha_inicial and $marcador <= $linha_final) { ?> <tr bgcolor="<?=$cores[$i%2]?>"> <td style="width: 20px;" align="center" valign="middle"> <input type="hidden" name="fldIndiceCod[]" value="<?=trim($linha['UnidadeCodigo'])?>"> <input name="fldUndCod[]" type="checkbox" value="<?=trim($linha['UnidadeCodigo'])?>" id="linha<?=trim($linha['UnidadeCodigo'])?>" /></td> <td style="width: 80px;" align="center"> <input name="fldUnidCod[]" type="text" title="Clique aqui para editar..." style="width: 70px; background-color:<?=$cores[$i%2]?>" value="<?=strtoupper(trim($linha['UnidadeCodigo']))?>" maxlength="3" class="inputsText" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" /></td> <td style="width: 500px;" align="left">&nbsp;<input name="fldUnidDescr[]" type="text" title="Clique aqui para editar..." style="width: 480px; background-color:<?=$cores[$i%2]?>" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" value="<?=strtoupper(trim($linha['UnidadeNome']))?>" maxlength="30" class="inputsText" /></td> </tr> <?php } //incrementamos o marcador... $marcador = $marcador + 1; $i++; } ?></table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <tr> <td width="75" align="center"><input type="submit" name="btnSalvar" value="Salvar" ></td> <td width="75" align="center"><input type="button" name="btnExcluir" value="Excluir" onClick="removerUnidade()"></td> <td width="500" align="center"> <?php if ($pagina == 1) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">&lt;&lt; ANTERIOR | </font> "; } else { echo "<a href=\"index.php?pagina=".($pagina - 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">&lt;&lt; anterior |</a> "; } $i = 1; while ($i <= $total_paginas) { if ($i == $pagina) {

83

echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\"><b><u>$i</u></b></font> "; } else { echo " <a href=\"index.php?pagina=".$i."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">".$i."</a> "; } $i = $i + 1; } if ($pagina == $total_paginas) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">| PR&Oacute;XIMA &gt;&gt;</font>\n"; } else { echo " <a href=\"index.php?pagina=".($pagina + 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">| pr&oacute;xima &gt;&gt;</a> \n"; } ?> </td> <td width="160" class="headerTable">Total de P&aacute;ginas: <?=$total_paginas?></td> </tr> </table> <?php echo ("<div align=\"center\" class=\"msgAlerts\">".$_SESSION['mensagem']."</div>"); ?> </form> <?php } else { echo ("<font color=\"#ff0000\" size=\"2\"> Nenhum resultado encontrado para essa consulta!</font>"); } $db->Free_Result(); $db->DbDisconnect(); } // end of member function buscarMI } // end of MovInt ?>

4.5.9. Itens de Movimentação Interna

<?php include("DBConnector.php"); class ItemMovInt { public $MovimIntCodigo; public $ProdutoCodigo; public $QuantSolicitada; public $QuantAtendida; function __construct() { $this->MovimIntCodigo = NULL; $this->ProdutoCodigo = NULL; $this->QuantSolicitada = 0; $this->QuantAtendida = 0; } function setMovimIntCodigo($MIcod){ $this->MovimIntCodigo = $MIcod; } function setProdutoCodigo($prod){

84

$this->ProdutoCodigo = $prod; } function setQuantSolicitada($qtdeadq){ $this->QuantSolicitada = $qtdeadq; } function setQuantAtendida($qtdeAtend){ $this->QuantAtendida = $qtdeAtend; } function getMovimIntCodigo(){ return $this->MovimIntCodigo; } function getProdutoCodigo(){ return $this->ProdutoCodigo; } function getQuantSolicitada(){ return $this->QuantAdquirida; } function getQuantAtendida(){ return $this->ValorUnitario; } function incluirItemMI($MIcod,$prod,$qtdeadq,$qtdeAtend) { $db = new DBConnector(); $this->setMovimIntCodigo($MIcod); $this->setProdutoCodigo($prod); $this->setQuantSolicitada($qtdeadq); $this->setQuantAtendida($qtdeAtend); $sql = "INSERT INTO ItemMovInt (MovInt_MovIntCodigo, Produto_ProdutoCodigo, ItemMovIntQtdeSolic, ItemMovIntQtdeAtend) VALUES(".$this->getMovimExCodigo().",".$this->getProdutoCodigo().",".$this->getQuantSolicitada().",".$this->getQuantAtendida().")"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function incluirItemME function excluirItemMI($codItemMI) { $db = new DBConnector(); $sql = "DELETE FROM ItemMovInt WHERE ItemMovIntCodigo = $codItemMI"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function excluirItemME function buscarItemMI($unidNome, $qntporpag, $paginacao) { $cores = array("#e0f0fd", "#ffffff"); $i = 0; $db = new DBConnector(); $sql = "SELECT * FROM ItemMovInt WHERE ItemMovIntCodigo Like '".$unidNome."%' ORDER BY ItemMovIntCodigo"; $res=array($db->Execute_Query($sql)); $quant = $res[0][1]; $total_reg = $qntporpag; $pagina = $paginacao; if ($quant > 0 ){ ?> <form name="frmMovItemInt" method="post" action="atualizaritemMI.php"> <?php if ($quant <= $total_reg) {

85

$total_paginas = 1; } // mais de 10 registros com valor multiplo de 10.. if ($quant%$total_reg == 0) { $total_paginas = $quant / $total_reg; } // mais de 10 registros porem o valor nao e multiplo de 10... else { // como a divisao exata, teremos que subtrair a parte que n?o ? inteira e // acrescentar 1 pagina. $total_paginas = ($quant/$total_reg) - (($quant%$total_reg)/$total_reg) + 1; } $linha_inicial = ($pagina - 1) * $total_reg; $linha_final = $linha_inicial + $total_reg - 1; // escrevendo os registros... // vamos usar um arcador para sabermos se estamos entre a linha final e a linha inicial... $marcador = 0; ?> <table align="center" border="0" width="650" cellspacing="2" bgcolor="#8dc6e4"> <tr> <td style="width: 20px;" valign="middle">&nbsp;</td> <td style="width: 80px;" align="center" class="headerTable">C&oacute;digo</td> <td style="width: 500px;" class="headerTable">&nbsp;Descri&ccedil;&atilde;o</td> </tr> </table> <table align="center" border="0" width="650" bgcolor="#8dc6e4"> <?php while($linha = $db->Get_Rows()) { if ($marcador >= $linha_inicial and $marcador <= $linha_final) { ?> <tr bgcolor="<?=$cores[$i%2]?>"> <td style="width: 20px;" align="center" valign="middle"> <input type="hidden" name="fldIndiceCod[]" value="<?=trim($linha['UnidadeCodigo'])?>"> <input name="fldUndCod[]" type="checkbox" value="<?=trim($linha['UnidadeCodigo'])?>" id="linha<?=trim($linha['UnidadeCodigo'])?>" /></td> <td style="width: 80px;" align="center"> <input name="fldUnidCod[]" type="text" title="Clique aqui para editar..." style="width: 70px; background-color:<?=$cores[$i%2]?>" value="<?=strtoupper(trim($linha['UnidadeCodigo']))?>" maxlength="3" class="inputsText" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" /></td> <td style="width: 500px;" align="left">&nbsp;<input name="fldUnidDescr[]" type="text" title="Clique aqui para editar..." style="width: 480px; background-color:<?=$cores[$i%2]?>" onChange="check('linha<?=trim($linha['UnidadeCodigo'])?>')" value="<?=strtoupper(trim($linha['UnidadeNome']))?>" maxlength="30" class="inputsText" /></td> </tr> <?php } //incrementamos o marcador... $marcador = $marcador + 1; $i++; } ?></table>

86

<table align="center" border="0" width="650" bgcolor="#8dc6e4"> <tr> <td width="75" align="center"><input type="submit" name="btnSalvar" value="Salvar" ></td> <td width="75" align="center"><input type="button" name="btnExcluir" value="Excluir" onClick="removerUnidade()"></td> <td width="500" align="center"> <?php if ($pagina == 1) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">&lt;&lt; ANTERIOR | </font> "; } else { echo "<a href=\"index.php?pagina=".($pagina - 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">&lt;&lt; anterior |</a> "; } $i = 1; while ($i <= $total_paginas) { if ($i == $pagina) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\"><b><u>$i</u></b></font> "; } else { echo " <a href=\"index.php?pagina=".$i."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">".$i."</a> "; } $i = $i + 1; } if ($pagina == $total_paginas) { echo "<font color=\"#FFFFFF\" face=\"Verdana\" size=\"1\">| PR&Oacute;XIMA &gt;&gt;</font>\n"; } else { echo " <a href=\"index.php?pagina=".($pagina + 1)."&palavra=".$unidNome."&num=".$total_reg."\" class=\"headerTable\" target=\"_self\">| pr&oacute;xima &gt;&gt;</a> \n"; } ?> </td> <td width="160" class="headerTable">Total de P&aacute;ginas: <?=$total_paginas?></td> </tr> </table> <?php echo ("<div align=\"center\" class=\"msgAlerts\">".$_SESSION['mensagem']."</div>"); ?> </form> <?php } else { echo ("<font color=\"#ff0000\" size=\"2\"> Nenhum resultado encontrado para essa consulta!</font>"); } $db->Free_Result(); $db->DbDisconnect(); } // end of member function buscarItemME function atualizarItemMI($prod,$qtdeSol,$qtdeAtend, $codME) {

87

$db = new DBConnector(); $sql = "UPDATE ItemMovInt SET Produto_ProdutoCodigo = $prod, ItemMovIntQtdeSolic=$qtdeSol, ItemMovIntQtdeAtend=$qtdeAtend WHERE MovInt_MovIntCodigo = $codME"; $db->Manipulate_Data($sql); $db->DbDisconnect(); } // end of member function atualizarItemME } // end of ItemMovInt ?>

4.5.10. Classe DBConnector

<?php require_once('systemcomponents.php'); class DBConnector extends systemcomponents { var $link; var $result; var $lines; var $erro; function DBConnector() { $settings = new systemcomponents(); $this->link = mysql_connect($settings->dbhost, $settings->dbusername, $settings->dbpasswd) or die ("Configuracao de BD errada (longin, senha, host) ". mysql_error($this->link)); mysql_select_db($settings->dbname) or die ("Banco de Dados Inexistente!"); } function Execute_Query($sql){ $this->result = mysql_query($sql,$this->link) or die ("Erro ao executar Consulta ". mysql_error($this->link)); $this->lines = mysql_num_rows($this->result); return array($this->result, $this->lines); } function Manipulate_Data($sql) { if (mysql_query($sql, $this->link)) { $this->lines = mysql_affected_rows($this->link); return TRUE; } else { $this->erro = mysql_error($this->link); //return 0; return FALSE; } } function Free_Result(){ mysql_free_result($this->result); } function Get_Rows(){ $this->lines = mysql_fetch_array($this->result); return $this->lines; }

88

// Fecha conexao function DbDisconnect(){ mysql_close($this->link); } } ?>

4.5.11. Classe systemcomponents

<?php class systemcomponents { public $enterpriseName; public $systemName; public $footerName; public $dbhost; public $dbusername; public $dbpasswd; public $dbname; function __construct() { $this->enterpriseName = "Tribunal de Contas do Estado do Tocantins"; $this->systemName = "Sistema de Administra&ccedil;&atilde;o de Almoxarifado"; $this->footerName = date("Y")." TCE/TO - Todos os direitos reservados"; $this->dbhost = "localhost"; $this->dbusername = "root"; $this->dbpasswd = "1234"; $this->dbname = "almox"; } } ?>

4.5.12. Script SQL Banco de Dados

CREATE TABLE Unidade ( UnidadeCodigo CHAR(3) NOT NULL AUTO_INCREMENT, UnidadeNome VARCHAR(100) NULL, PRIMARY KEY(UnidadeCodigo) ); CREATE TABLE Grupo ( GrupoCodigo INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, GrupoNatureza VARCHAR(100) NOT NULL, GrupoNome VARCHAR(100) NULL, PRIMARY KEY(GrupoCodigo, GrupoNatureza) ); CREATE TABLE Fornecedor ( FornecedorCNPJ CHAR(18) NOT NULL AUTO_INCREMENT, FornecedorRazaoSocial VARCHAR(100) NULL, FornecedorNome VARCHAR(100) NULL, FornecedorInscrEstadual VARCHAR(30) NULL, FornecedorEndereco VARCHAR(200) NULL, FornecedorBairro VARCHAR(80) NULL, FornecedorCidade VARCHAR(80) NULL, FornecedorCEP CHAR(10) NULL, FornecedorUF CHAR(2) NULL,

89

FornecedorFone CHAR(15) NULL, FornecedorFax CHAR(15) NULL, FornecedorEmail CHAR(80) NULL, PRIMARY KEY(FornecedorCNPJ) ); CREATE TABLE Departamento ( DepartamentoCodigo INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, DepartamentoNome CHAR(80) NULL, PRIMARY KEY(DepartamentoCodigo) ); CREATE TABLE MovEx ( MovExCodigo INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Fornecedor_FornecedorCNPJ CHAR(18) NOT NULL, MovExData DATE NULL, MovExNumNotaFiscal CHAR(25) NULL, MovExDocOrigem CHAR(25) NULL, MovExDataDocOrigem DATE NULL, MovExTransportadora VARCHAR(80) NULL, PRIMARY KEY(MovExCodigo), INDEX MovEx_FKIndex1(Fornecedor_FornecedorCNPJ), FOREIGN KEY(Fornecedor_FornecedorCNPJ) REFERENCES Fornecedor(FornecedorCNPJ) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE TABLE Classe ( ClasseCodigo INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Grupo_GrupoNatureza VARCHAR(100) NOT NULL, Grupo_GrupoCodigo INTEGER UNSIGNED NOT NULL, ClasseNome VARCHAR(50) NULL, PRIMARY KEY(ClasseCodigo), INDEX Classe_FKIndex1(Grupo_GrupoCodigo, Grupo_GrupoNatureza), FOREIGN KEY(Grupo_GrupoCodigo, Grupo_GrupoNatureza) REFERENCES Grupo(GrupoCodigo, GrupoNatureza) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE TABLE Funcionario ( FuncionarioMatricula INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Departamento_DepartamentoCodigo INTEGER UNSIGNED NOT NULL, FuncionarioNome CHAR(100) NULL, PRIMARY KEY(FuncionarioMatricula), INDEX Funcionario_FKIndex1(Departamento_DepartamentoCodigo), FOREIGN KEY(Departamento_DepartamentoCodigo) REFERENCES Departamento(DepartamentoCodigo) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE TABLE Produto ( ProdutoCodigo INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Unidade_UnidadeCodigo CHAR(3) NOT NULL, Classe_ClasseCodigo INTEGER UNSIGNED NOT NULL, ProdutoNome VARCHAR(100) NULL, ProdutoEstoqueMin INTEGER UNSIGNED NULL, ProdutoEstoqueAtual INTEGER UNSIGNED NULL, ProdutoDataUltMov DATE NULL, PRIMARY KEY(ProdutoCodigo), INDEX Produto_FKIndex1(Classe_ClasseCodigo), INDEX Produto_FKIndex2(Unidade_UnidadeCodigo), FOREIGN KEY(Classe_ClasseCodigo) REFERENCES Classe(ClasseCodigo) ON DELETE NO ACTION

90

ON UPDATE NO ACTION, FOREIGN KEY(Unidade_UnidadeCodigo) REFERENCES Unidade(UnidadeCodigo) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE TABLE MovInt ( MovIntCodigo INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Funcionario_FuncionarioMatricula INTEGER UNSIGNED NOT NULL, Departamento_DepartamentoCodigo INTEGER UNSIGNED NOT NULL, MovIntDataSolic DATE NULL, MovIntDataAtend DATE NULL, MovIntFuncAlmoxMatr INTEGER UNSIGNED NULL, MovIntResposta CHAR(100) NULL, PRIMARY KEY(MovIntCodigo), INDEX MovInt_FKIndex1(Departamento_DepartamentoCodigo), INDEX MovInt_FKIndex2(Funcionario_FuncionarioMatricula), FOREIGN KEY(Departamento_DepartamentoCodigo) REFERENCES Departamento(DepartamentoCodigo) ON DELETE NO ACTION ON UPDATE NO ACTION, FOREIGN KEY(Funcionario_FuncionarioMatricula) REFERENCES Funcionario(FuncionarioMatricula) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE TABLE ItemMovEx ( MovEx_MovExCodigo INTEGER UNSIGNED NOT NULL, Produto_ProdutoCodigo INTEGER UNSIGNED NOT NULL, ItemMovExQtdAdq INTEGER UNSIGNED NOT NULL, ItemMovExValorUnit DECIMAL(10.5) NOT NULL, INDEX ItemMovEx_FKIndex1(MovEx_MovExCodigo), INDEX ItemMovEx_FKIndex2(Produto_ProdutoCodigo), FOREIGN KEY(MovEx_MovExCodigo) REFERENCES MovEx(MovExCodigo) ON DELETE NO ACTION ON UPDATE NO ACTION, FOREIGN KEY(Produto_ProdutoCodigo) REFERENCES Produto(ProdutoCodigo) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE TABLE ItemMovInt ( MovInt_MovIntCodigo INTEGER UNSIGNED NOT NULL, Produto_ProdutoCodigo INTEGER UNSIGNED NOT NULL, ItemMovIntQtdeSolic INTEGER UNSIGNED NOT NULL, ItemMovIntQtdeAtend INTEGER UNSIGNED NOT NULL, INDEX ItemMovInt_FKIndex1(Produto_ProdutoCodigo), INDEX ItemMovInt_FKIndex2(MovInt_MovIntCodigo), FOREIGN KEY(Produto_ProdutoCodigo) REFERENCES Produto(ProdutoCodigo) ON DELETE NO ACTION ON UPDATE NO ACTION, FOREIGN KEY(MovInt_MovIntCodigo) REFERENCES MovInt(MovIntCodigo) ON DELETE NO ACTION ON UPDATE NO ACTION );

91

5. CONSIDERAÇÕES FINAIS Após seguir as recomendações preestabelecidas pela disciplina de Prática em Sistemas de

Informação, concluiu-se este trabalho com a implementação do novo Sistema de

Almoxarifado do Tribunal de Contas do Estado Tocantins. Este sistema já encontra-se em

plena atividade dada a sua relevante importância, no que tange ao auxílio informatizado das

atividades de administração dos materiais de consumo no âmbito deste órgão.

Este sistema seguiu a risca o paradigma da Orientação a Objetos, tendo sua

modelagem também seguindo os padrões da linguagem UML, sendo implementado com

base na linguagem de programação PHP. Todos esses pontos aliados, convergiram na

produção de um sistema que atende aos requisitos pré-estabelecidos, que tem como sua

principal característica de qualidade a facilidade às eventuais manutenções, tanto para

ajustes as possíveis falhas, quanto para a adição de novas funcionalidades, sendo que a

presente documentação servirá também como importante ferramenta de auxílio ao

desenvolvedor dessa tarefa.

92

6. REFERÊNCIAS BIBLIOGRÁFICAS

SENAC. DN. Organizando o Almoxarifado. 2. ed. Rio de Janeiro, SENAC/DN/DFP, 1993. 2v. II. Conteúdo: v.1 Recebimento e guarda de material. – v2. Controle e entrega de Material. 71p.

MEILIR (1997) PAGE-JONES, Meilir. O que todo programador deveria saber sobre

projeto orientado a objetos. Makron Books: São Paulo, 1997.

RICARTE (2001) RICARTE, Ivan L. Marques. Introdução a Orientação a Objetos. Campinas: Universidade Estadual de Campinas, jun. 2001. Disponível em <http://www.dca.fee.unicamp.br/courses/POOCPP/node3.html>. Acesso em 31/8/2006.

CESTA (1996) CESTA, André Augusto. TUTORIAL: A linguagem de programação Java. Campinas: Universidade Estadual de Campinas, jun. 1996. Disponível em < http://www.ic.unicamp.br/~cmrubira/aacesta/java/javatut9.html >.

Acesso em 31/08/2006.

ZEND (2006) Classes e Objetos (PHP 5). Manual do PHP. Interfaces de Objetos: 2006. Disponível em <http://br2.php.net/manual/pt_BR/language.oop5.interfaces.php>. Acesso em: 31/08/2006

top related