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).
<?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;
}
?>
}
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
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, empregase 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,
5. O sistema faz a autenticação e redireciona
representada pelo botão Logar conforme
para sua área de trabalho
Figura 6.
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
2. O sistema apresenta o formulário para a
incluir uma nova classe de produtos.
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,
5. O sistema faz validação dos dados e
representada pelo botão de mesmo nome
exibe uma mensagem de confirmação do
conforme Figura 8.
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
2. O sistema apresenta o formulário para a
consultar uma classe de produtos.
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,
5. O sistema realiza a consulta exibindo seu
representada pelo botão de mesmo nome
resultado de acordo com o(s) dado(s)
conforme Figura 8.
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
2. O sistema apresenta o formulário de
cadastrar uma classe de produtos.
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 5. O sistema realiza a atualização exibindo
inferior da tela), representada pelo botão de
seu novo resultado de acordo com o(s)
mesmo nome conforme Figura 8.
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
2. O sistema apresenta o formulário de
cadastrar uma classe de produtos.
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 5. O sistema realiza a exclusão e exibe uma
inferior da tela), representada pelo botão de
mensagem de confirmação da exclusão no
mesmo nome conforme Figura 8.
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
2. O sistema apresenta o formulário para a
incluir um novo grupo de produtos.
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,
5. O sistema faz validação dos dados e
representada pelo botão de mesmo nome
exibe uma mensagem de confirmação do
conforme Figura 9.
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
2. O sistema apresenta o formulário para a
consultar um grupo de produto.
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,
5. O sistema realiza a consulta exibindo seu
representada pelo botão de mesmo nome
resultado de acordo com o(s) dado(s)
conforme Figura 9.
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
2. O sistema apresenta o formulário de
cadastrar um grupo de produtos.
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 5. O sistema realiza a atualização exibindo
inferior da tela), representada pelo botão de
seu novo resultado de acordo com o(s)
mesmo nome conforme Figura 9.
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
2. O sistema apresenta o formulário de
cadastrar um grupo de produtos.
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 5. O sistema realiza a exclusão e exibe uma
inferior da tela), representada pelo botão de
mensagem de confirmação da exclusão no
mesmo nome conforme Figura 9.
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
2. O sistema apresenta o formulário para a
incluir uma nova unidade de produtos.
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,
5. O sistema faz validação dos dados e
representada pelo botão de mesmo nome
exibe uma mensagem de confirmação do
conforme Figura 10.
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
2. O sistema apresenta o formulário para a
consultar uma unidade de produto.
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,
5. O sistema realiza a consulta exibindo seu
representada pelo botão de mesmo nome
resultado de acordo com o(s) dado(s)
conforme Figura 10.
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
2. O sistema apresenta o formulário de
cadastrar uma unidade de produtos.
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 5. O sistema realiza a atualização exibindo
inferior da tela), representada pelo botão de
seu novo resultado de acordo com o(s)
mesmo nome conforme Figura 10.
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
2. O sistema apresenta o formulário de
cadastrar uma unidade de produtos.
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
mensagem de confirmação da exclusão no
mesmo nome conforme Figura 10.
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
2. O sistema apresenta o formulário para a
incluir um novo produto.
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,
5. O sistema faz validação dos dados e
representada pelo botão de mesmo nome,
exibe uma mensagem de confirmação do
conforme Figura 11.
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
2. O sistema apresenta o formulário para a
consultar um produto.
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
resultado de acordo com o(s) dado(s)
conforme Figura 11.
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
2. O sistema apresenta o formulário de
cadastrar um produto.
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 5. O sistema realiza a atualização exibindo
inferior da tela), representada pelo botão de
seu novo resultado de acordo com o(s)
mesmo nome conforme Figura 11.
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
2. O sistema apresenta o formulário de
cadastrar produtos.
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 5. O sistema realiza a exclusão e exibe uma
inferior da tela), representada pelo botão de
mensagem de confirmação da exclusão no
mesmo nome conforme Figura 11.
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
2. O sistema apresenta o formulário para a
incluir um novo fornecedor.
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,
5. O sistema faz validação dos dados e
representada pelo botão de mesmo nome,
exibe uma mensagem de confirmação do
conforme Figura 12.
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
2. O sistema apresenta o formulário para a
consultar um fornecedor.
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,
5. O sistema realiza a consulta exibindo seu
representada pelo botão de mesmo nome
resultado de acordo com o(s) dado(s)
conforme Figura 12.
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
2. O sistema apresenta o formulário de
cadastrar um fornecedor.
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 5. O sistema realiza a atualização exibindo
inferior da tela), representada pelo botão de
seu novo resultado de acordo com o(s)
mesmo nome conforme Figura 12.
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
2. O sistema apresenta o formulário de
cadastrar fornecedores.
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 5. O sistema realiza a exclusão e exibe uma
inferior da tela), representada pelo botão de
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
2. O sistema apresenta o formulário para a
incluir uma movimentação externa.
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,
5. O sistema faz validação dos dados e
representada pelo botão de mesmo nome,
exibe uma mensagem de confirmação do
conforme Figura 13.
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
2. O sistema apresenta o formulário para a
consultar uma entrada de material.
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,
5. O sistema realiza a consulta exibindo seu
representada pelo botão de mesmo nome
resultado de acordo com o(s) dado(s)
conforme Figura 13.
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
2. O sistema apresenta o formulário de
cadastrar uma entrada de material.
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 5. O sistema realiza a atualização exibindo
inferior da tela), representada pelo botão de
seu novo resultado de acordo com o(s)
mesmo nome conforme Figura 13.
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
2. O sistema apresenta o formulário de
cadastrar uma entrada de material.
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 5. O sistema realiza a exclusão e exibe uma
inferior da tela), representada pelo botão de
mensagem de confirmação da exclusão no
mesmo nome conforme Figura 13.
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
2. O sistema apresenta o formulário para a
incluir uma movimentação externa.
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,
5. O sistema faz validação dos dados e
representada pelo botão de mesmo nome,
exibe uma mensagem de confirmação do
conforme figura 13.
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,
8. O sistema faz a validação dos dados e
representada pelo botão de mesmo nome,
exibe uma mensagem de confirmação do
conforme figura 14.
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
2. O sistema apresenta o formulário de
cadastrar uma entrada de material.
cadastro de entrada de material.
3. O usuário seleciona a movimentação
4. o sistema apresenta o formulário de
externa que deseja alterar seus itens.
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.
4.2.28.
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..
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
2. O sistema apresenta o formulário de
cadastrar uma entrada de material.
cadastro de entrada de material.
3. O usuário seleciona a movimentação
4. o sistema apresenta o formulário de
externa que deseja alterar seus itens.
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 7. O sistema realiza a exclusão e exibe uma
inferior da tela), representada pelo botão de
mensagem de confirmação da exclusão no
mesmo nome conforme Figura 14.
rodapé da página.
5. Usuário não selecionou nenhuma caixa de
Seqüência Alternativa
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
2. O sistema apresenta o formulário para a
incluir uma movimentação interna.
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,
5. O sistema faz validação dos dados e
representada pelo botão de mesmo nome,
exibe uma mensagem de confirmação do
conforme a figura 14.
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
2. O sistema apresenta o formulário para a
consultar uma saida de material.
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,
5. O sistema realiza a consulta exibindo seu
representada pelo botão de mesmo nome
resultado de acordo com o(s) dado(s)
conforme Figura 15.
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
2. O sistema apresenta o formulário de
cadastrar uma saída de material.
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 5. O sistema realiza a atualização exibindo
inferior da tela), representada pelo botão de
seu novo resultado de acordo com o(s)
mesmo nome conforme Figura 14.
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
2. O sistema apresenta o formulário de
cadastrar uma saida de material.
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 5. O sistema realiza a exclusão e exibe uma
inferior da tela), representada pelo botão de
mensagem de confirmação da exclusão no
mesmo nome conforme Figura 14.
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
2. O sistema apresenta o formulário para a
incluir uma movimentação interna.
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,
5. O sistema faz validação dos dados e
representada pelo botão de mesmo nome,
exibe uma mensagem de confirmação do
conforme a figura 15.
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,
8. O sistema faz a validação dos dados e
representada pelo botão de mesmo nome,
exibe uma mensagem de confirmação do
conforme a figura 16.
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
2. O sistema apresenta o formulário de
cadastrar uma saida de material.
cadastro de saida de material.
3. O usuário seleciona a movimentação
4. O sistema apresenta o formulário de
interna que deseja alterar seus items.
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.
4.2.35.
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..
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
2. O sistema apresenta o formulário de
cadastrar uma saida de material.
cadastro de saida de material.
3. O usuário seleciona a movimentação
4. o sistema apresenta o formulario de
interna que deseja alterar seus items.
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 7. O sistema realiza a exclusão e exibe uma
inferior da tela), representada pelo botão de
mensagem de confirmação da exclusão no
mesmo nome conforme Figura 16.
rodapé da página.
5. Usuário nao selecionou nenhuma caixa de
Seqüencia Alternativa
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'
UnidadeCodigo = '$codUnid'";
$db->Manipulate_Data($sql);
$db->DbDisconnect();
WHERE
} // end of member function atualizarUnidade
function excluirUnidade($codUnidade)
{
$db = new DBConnector();
$sql = "DELETE FROM Unidade
$db->Manipulate_Data($sql);
WHERE UnidadeCodigo = '$codUnidade'";
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
private
private
private
private
$Nome;
$Classe;
$Unidade;
$EstoqueMin;
$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
public
public
public
public
public
public
$FornecedorCNPJ;
$RazaoSocial;
$NomeFantasia;
$InscrEstadual;
$Endereco;
$Bairro;
$Cidade;
67
public
public
public
public
public
$CEP;
$UF;
$Fone;
$Fax;
$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
public
public
public
public
public
$DeptoCodigo;
$FuncsMatr;
$DataSolicitacao;
$DataAtendimento;
$FuncionarioAlmoxAtend;
$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
public
public
public
$MovimIntCodigo;
$ProdutoCodigo;
$QuantSolicitada;
$QuantAtendida;
function __construct() {
$this->MovimIntCodigo = NULL;
$this->ProdutoCodigo = NULL;
$this->QuantSolicitada = 0;
$this->QuantAtendida = 0;
}
function setMovimIntCodigo($MIcod){
$this->MovimIntCodigo =
}
function setProdutoCodigo($prod){
$MIcod;
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
$db->Manipulate_Data($sql);
$db->DbDisconnect();
} // end of member function excluirItemME
WHERE ItemMovIntCodigo = $codItemMI";
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
var
var
var
$link;
$result;
$lines;
$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
Download

Reengenharia do Sistema de Administração de Almoxarifado do