You are on page 1of 10

Lab 05. Ingeniera de Software.

Implementando una Primera


Aplicacin

Lab 05: Implementando una Primera


Aplicacin
Objetivos

Construir una interfaz a partir del anlisis de un caso de uso.


Construir un modelo inicial de datos
Identificar la importancia del Diagrama de Secuencia

Ejercicio 01. Identificando el Proceso de Negocios

De los procesos de Ventas Veremos Atender Ventas y Gestionar Cobranzas


De momento en esta primera versin hemos encontrado como funciones del sistema:
Atender Ventas
o Preparar Pedidos
Gestionar Cobranzas
o Realizar Pagos
o Generar Cronograma
Veamos el Modelo del Sistema

MCP. Ing. Ricardo Mendoza Rivera

Page 1

Lab 05. Ingeniera de Software. Implementando una Primera


Aplicacin
Ejercicio 02. Proponiendo el Modelo del Sistema.

RealizarPagos

Asistente
Comercial
<<extend>>
PrepararPedidos

Caja
GenerarCronograma

Ejercicio 03. Vamos a Tomar como Referencia el Caso de Uso GenerarCronograma

Prototipo Propuesto

Preparando la
Interfaz de
Usuario

Diagrama de
Secuencia

MCP. Ing. Ricardo Mendoza Rivera

Page 2

Lab 05. Ingeniera de Software. Implementando una Primera


Aplicacin

Construyendo la Capa Frontera


a. Creando un Nuevo Proyecto:

b. Nombre como: WinComercial , clic <<OK >>


c. En el explorador de soluciones renombre al Form1 como FrmGenerarCronograma:

d. Pegar los siguientes controles y establecer las propiedades respectivas

Control

Propiedad

GroupBox
RadioButton

Text=TipoDocumento
Name
= rbFac
Text
= Factura
Name
= rbBv
Text
= Boleta

RadioButton

MCP. Ing. Ricardo Mendoza Rivera

Observacion
Dentro del GroupBox
Dentro del GroupBox

Page 3

Lab 05. Ingeniera de Software. Implementando una Primera


Aplicacin
TextBox
ComboBox
CommandButton
Label1
Label2
DataGrid

Checked = True
Name =TxtDocumento
MaxLength = 9
Name =CboFormaPago
Name = CmdGenerar
Text = Generar
Text = Documento
Text = NroCuotas
Name = dgrData

Construyendo la Capa Control


a. Crear el Proyecto: CapaNegocioVentas

b. Renombrar el nombre de la Clase:ControCronograma.vb

c. Codificando los Metodos


1. Importando las libreras del ADO.NET

MCP. Ing. Ricardo Mendoza Rivera

Page 4

Lab 05. Ingeniera de Software. Implementando una Primera


Aplicacin
Imports System.Data.SqlClient
Public Class ControlCronograma
End Class

d. Creando los Mtodos


1. VerificaDocumento: a continuacin de :
Public Class ..
, codifique

Public Function VerificaDocumento(ByVal idDoc As String, ByVal idTipo As String, ByVal cn As SqlConnection) As Boolean

Dim vsql As String


Dim bExiste As Boolean
vsql = " SELECT estado FROM documento WHERE Documento='" & idDoc & _
"' AND tipodoc = '" & idTipo & "'"

If cn.State = ConnectionState.Closed Then


cn.Open()
End If
Dim cmDoc As New SqlCommand(vsql, cn)
Dim dr As SqlDataReader
dr = cmDoc.ExecuteReader
If dr.Read Then
bExiste = True
Else
bExiste = False
End If
dr.Close()
cn.Close()
Return bExiste
End Function
Public Function GeneraCronograma(ByVal idDoc As String, ByVal idTipo As String, ByVal iCuotas As Integer, ByVal cn As SqlConnection) As DataTable

Dim vsql As String


vsql = " EXEC GeneraCrono @documento ='" & idDoc & "', @tipodoc ='" & _
idTipo & "', @NroCuotas =" & iCuotas.ToString
'"

Dim dtCrono As New DataTable


Dim daCronograma As New SqlDataAdapter(vsql, cn)
Try
daCronograma.Fill(dtCrono)
MCP. Ing. Ricardo Mendoza Rivera

Page 5

Lab 05. Ingeniera de Software. Implementando una Primera


Aplicacin
Return dtCrono
Catch ex As Exception
Return dtCrono
End Try
End Function

e. Referenciando el Proyecto de Biblioteca de clases en el Proyecto WinComercial


1. Clic derecho sobre el Proyecto: WinComercial -> Agregar Referencia
2. Luego elija la ficha: Projects -> Clic OK

Construyendo la Capa Frontera. Continuacin.

Imports System.Data.SqlClient
Public Class GenerarCronograma
Dim cn As New SqlConnection("DataSource=(local);Database=Tenebrosa;User Id=sa;Password=")
--- Verificar el password del usuario: sa

MCP. Ing. Ricardo Mendoza Rivera

Page 6

Lab 05. Ingeniera de Software. Implementando una Primera


Aplicacin
En el Load
============
Private Sub Form1_Load()
Dim sql As String
sql = " SELECT NroDias, descripcion FROM formapago WHERE formaPago <>'C' "
Dim tFormaPago As New DataTable
Dim daFormaPago As New SqlDataAdapter(sql, cn)
daFormaPago.Fill(tFormaPago)
CboFormaPago.DataSource = tFormaPago
CboFormaPago.DisplayMember = "descripcion"
CboFormaPago.ValueMember = "NroDias"
End Sub
En el CmdGenerar.Click
============

Private Sub CmdGenerar_Click(.. ) Handles CmdGenerar.Click


Dim objCronograma As New CapaNegocioVentas.ControlCronograma
Dim sTipoDoc As String = IIf(rbFac.Checked = True, "F", "B")
Dim iCuotas As Integer = CInt(CboFormaPago.SelectedValue.ToString)
Try
dgrData.DataSource = objCronograma.GeneraCronograma(TxtDocumento.Text.Trim, sTipoDoc, iCuotas, cn)
If dgrData.Rows.Count = 0 Then
MessageBox.Show("Cuotas no se generaron. Verifique..!!")
End If
Catch ex As Exception
MessageBox.Show("Error de Datos", ex.Message)
End Try
End Sub

Construyendo la Capa Control

a. Tablas Encontradas

MCP. Ing. Ricardo Mendoza Rivera

Page 7

Lab 05. Ingeniera de Software. Implementando una Primera


Aplicacin

b. Las tablas se encuentran implementadas en la BD


Tenebrosa.
1. Atachando la BD. Copie los archivos proporcionados por el docente:
a. Tenebrosa_Data.mdf
b. Tenebrosa_Log.ldf

2. Proceda asi:

Crear el Store Procedure: GeneraCrono

MCP. Ing. Ricardo Mendoza Rivera

Page 8

Lab 05. Ingeniera de Software. Implementando una Primera


Aplicacin
CREATE PROCEDURE GeneraCrono
@documento char(9), @tipodoc char(1), @NroCuotas smallint
AS
SET NOCOUNT ON
-- Declarando variables
DECLARE @igv numeric(9,2), @tasa numeric(9,2), @cuenta smallint, @deuda numeric(9,2),
@TotCuota numeric(9,2), @fecha datetime
SET @fecha = GETDATE()
-- Leyendo Parametros...
SELECT @igv = IGV/ 100, @tasa = tasaint/100
FROM parametro WHERE activo = 1
--- Verificando Parametros
IF @igv IS NULL OR @tasa IS NULL
BEGIN
RAISERROR('No existen parametros. Imposible continuar', 16, -1)
RETURN
END
-- Verificando si Documento existe
IF NOT EXISTS( SELECT tipodoc FROM documento WHERE documento = @documento AND tipodoc
=@tipodoc)
BEGIN
RAISERROR('Documento ingresado no existe ...', 16, -1)
RETURN
END
--- Verificando si Documento ya fue Generado...
IF EXISTS( SELECT documento FROM cronograma WHERE documento = @documento AND tipodoc
=@tipodoc)
BEGIN
RAISERROR('Documento ya fue generado...', 16, -1)
RETURN
END
--- Calculando deuda
SELECT @deuda = SUM(dd.cantidad * dd.precunit)
FROM documento d INNER JOIN detadoc dd ON d.documento = dd.documento AND d.tipodoc =
dd.tipodoc
WHERE d.documento = @documento AND d.tipodoc = @tipodoc
SET @cuenta = 0
WHILE @cuenta < @NroCuotas
BEGIN
SET @cuenta = @cuenta + 1
SET @TotCuota = @deuda / @NroCuotas
INSERT cronograma (NroCuota, Documento ,TipoDoc, Importe,
Interes , IgvInteres ,
feVence )
VALUES (@cuenta, @documento, @tipodoc, @TotCuota, @TotCuota * @Tasa, @TotCuota * @Tasa * @igv,
DATEADD(mm, @cuenta, @fecha))
END
SELECT NroCuota, Importe, Interes, IgvInteres, Importe + Interes + IgvInteres AS ValorCuota,
FeVence
FROM cronograma WHERE documento = @documento AND tipodoc = @tipodoc
GO
MCP. Ing. Ricardo Mendoza Rivera

Page 9

Lab 05. Ingeniera de Software. Implementando una Primera


Aplicacin
Ejecute y haga el Testeo Respectivo

MCP. Ing. Ricardo Mendoza Rivera

Page 10

You might also like