VB.NET 2005  - Criando uma aplicação Windows Completa: Locadora de Filmes - Parte 5


Continuando o desenvolvimento do nosso projeto Locadora de Filmes no Visual Basic 2005 Express Edition este artigo irá continuar a mostrar a implementação da interface do usuário. Se você esta chegando agora recomendo leia os artigos :

  1.  VB.NET  2005 - Criando uma aplicação completa : Locadora de Filmes I

  2.  VB.NET  2005 - Criando uma aplicação completa : Locadora de Filmes II

  3.  VB.NET  2005 - Criando uma aplicação completa : Locadora de Filmes III

  4.  VB.NET  2005 - Criando uma aplicação completa : Locadora de Filmes IV

Neste artigo vou mostrar como implementar a classe para efetuar o registra da locação dos filmes da locadora de filmes.Lembrando que já foram implementadas as seguintes funcionalidades:

  1. Cadastrar clientesClientes.vb

  2. Cadastrar Filmes -  Filmes.vb

  3. Cadastrar Categorias -  Categorias.vb

Implementando a classe para registrar a locação efetuada no formulário : Movimento.vb

Apenas para recordar o formulário Movimento.vb possui o seguinte layout:

A estrutura da tabela Movimento é a seguinte:

- O campo CodigoLocacao é um campo autonumerado (Identity) e por este motivo não iremos gravar nada neste campo visto que seu valor é incrementado automaticamente

Devemos registrar valores nos seguintes  campos:

  • CodigoCliente - este dado virá da tabela Clientes
  • CodigoFilme - o valor virá da tabela Filmes
  • Locacao - a data de locação (a data atual do sistema)

- Os campos Devolucao e Valor serão preenchidos quando da devolução do filme pelo cliente (por este motivo aceitam valores Nulls, pois não iremos gravar nada na locação nestes campos)

Uma primeira pergunta que talvez possa surgir seria: Porque eu não implemento o código de locação no próprio formulário ?

Bem , primeiro porque a locação refere-se a ao negócio da locadora de filmes e por este motivo é bom separar a regra de negócio da interface do usuário.

Para criar a classe LocaFilmes.vb clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add e a seguir New Item; informando a seguir o  nome do arquivo e clicando no botão Add.

É claro que antes de efetuar a locação eu preciso verificar o estoque de filmes para ver se existe o filme disponível. Se houver terei que diminuir uma unidade , referente a unidade locada e acrescentá-la a tabela de locações efetuadas : Movimento.

Antes de entrar no código teremos que criar uma nova consulta relacionada com a tabela Filmes que nos devolva um determinado filme conforme o seu código.

Na janela Data Source vamos editar o DataSet FilmeDS e vamos incluir uma nova consulta, conforme já vimos nos artigos anteriores, para filtrar os filmes selecionados pelo código do filme. Usando o Query Builder informamos o parâmetro @codigoFilme para montar a instrução SQL conforme abaixo:

Ao salvar a consulta acrescente o sufixo Codigo conforme tela da figura 1.0 abaixo. Na figura 2.0 vemos o DataSet exibindo a nova consulta criada:

Figura 1.0 - Nomeando a instrução SQL para selecionar dados Figura 2.0 - O dataset exibindo a consulta criada

Vamos precisar criar também uma nova consulta de inclusão de dados na tabela Movimento usando a instrução SQL INSERT/INTO. Na janela Data Sources clique com o botão direito do mouse sobre o DataSet MovimentoDS e selecione - Edit DataSet with Designer. A seguir clique no dataset com o botão direito e selecione Add e a seguir Query.

Usando o Query Builder construa a instrução SQL para inserir uma linha na tabela Movimento , conforme figura abaixo:

A janela - TableAdapter Query Configuration Wizard - deverá exibir a instrução INSERT INTO conforme figura abaixo:

Clique em Next> e  Informe  o nome da consulta - InsertQueryMovimentoLocacao - conforme figura 3.0. Na figura 4.0 temos o resultado final onde o dataset já exibe a instrução SQL criada.

Figura 3.0 - Nomeando a consulta criada Figura 4.0 - O DataSet exibindo a instrução SQL para incluir dados na tabela

Podemos então partir para o código da classe LocaFilmes.vb:

Public Class LocaFilmes
 

 Public Sub alugarFilmes(ByVal codfilme As Integer, ByVal codcliente As Integer, ByVal datalocacao As Date)

 
  'verificando o estoque da locadora
  'cria um adatper e um dataset

   Dim adapterFilmes As New FilmesDSTableAdapters.FilmesTableAdapter

   Dim filme As New FilmesDS

   'filtra os filmes pelo codigo informado usando a consulta SQL criada - FillByCodigo
   adapterFilmes.FillByCodigo(filme.Filmes, codfilme)


  
'se não encontrou o filme com o codigo informado dispara exceção

   If filme.Filmes.Count = 0 Then

      Throw New ArgumentException("Não existe o filme informado no acervo.")

   End If

   'se não tem filme no estoque avisa
   If filme.Filmes(0).Estoque = 0 Then
      Throw New ArgumentException("Não existem unidades cadastradas no acervo.")
   End If

   'se houver filme no estoque tenho que diminuir a unidade locada do estoque

   filme.Filmes(0).Estoque -= 1

 

    'atualiza o banco de dados

    adapterFilmes.Update(filme)

    'registrar a locacao
   'cria um adapter e um dataset

    Dim adapterLocacao As New MovimentoDSTableAdapters.MovimentoTableAdapter
    Dim movimentoLocacao As New MovimentoDS.MovimentoDataTable

     'utiliza a instrução SQL criada para incluir dados na tabela Movimento - InsertQueryMovimentoLocacao
    adapterLocacao.InsertQueryMovimentoLocacao(codcliente, codfilme, datalocacao)
    adapterLocacao.Update(movimentoLocacao)

 End Sub

End Class

No código da classe acima exibido estou realizando as seguintes tarefas:

Como o código esta comentado vou apenas executar a aplicação e acompanhar de perto o que implementamos para ver se esta tudo funcionando:

- Esta é a tela do Menu Principal

- Perceba que na opção do Menu Movimento criamos duas opções:

  • Locação de Filmes - para efetuar a locação de filmes
  • Filmes alugados - para exibir os filmes alugados

Nota: Você deverá incluir um novo formulário chamado FilmesAlugados.vb da mesma forma que fizemos com os demais formulários e arrastar a tabela Movimento para o formulário. Após fazer isto exclua o BindingNavigator que o assistente incluiu no formulário pois não iremos efetuar manutenção neste formulário.

 

Clicando na opção - Locação de Filmes- temos o formulário onde iremos informar o código do filme e o código do cliente. Lembre que implementamos os formulário SelecionaFilme.vb e SelecionaCliente.vb para podemos selecionar um cliente pelo nome. Abaixo temos a exibição da tela do formulário Movimento.vb e  de SelecionaFilme.vb após clicarmos em Procurar:

Após efetuar a seleção do Filme e do Cliente e clicar no botão Registra a locação será efetuada. Podemos ver isto na opção Filmes Alugados:

Se consultarmos o estoque de filmes para o filme de código igual a 1 iremos ver que houve uma diminuição de uma unidade do estoque referente a locação efetuada. Quando da devolução deveremos repor o filme no estoque.

Dica :  Sugiro que você implemente uma transação no código para que se algo der errado durante o processo ele não seja concluído.

O código do evento Click do botão Registra é dado a seguir:

Private Sub btnRegistraLocacao_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistraLocacao.Click

Dim locacao As New LocaFilmes

Try

     locacao.alugarFilmes(CType(txtCodigoFilme.Text, Integer), CType(txtCodigoCliente.Text, Integer), DateTime.Now)
     Me.Validate()
     MessageBox.Show("Locação Realizada com Sucesso.", "Locação", MessageBoxButtons.OK, MessageBoxIcon.Information)

Catch ex As Exception

     Throw New ArgumentException("Erro durante a locação do filme: " & ex.Message)

End Try

End Sub

O código acima cria uma instância da classe LocaFilmes e utiliza o método alugarFImes passando os parâmetros esperados.

A seguir cenas do próximo artigo: A implementação do formulário de devolução e a cobrança da locação.

Aguarde a continuação no artigo : VB.NET 2005  - Criando uma aplicação Windows Completa: Locadora de Filmes - Parte 6

VB.NET 2005 , é fácil, é simples, é legal. Divirta-se... 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti