Está en la página 1de 11

Lab 05. Ingeniería de Software.

Implementando una Primera Aplicació n

Lab 05: Implementando una Primera


Aplicación

Objetivos

 Construir una interfaz a partir del análisis 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 versión 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. Ingeniería de Software. Implementando una Primera Aplicació n

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. Ingeniería de Software. Implementando una Primera Aplicació n

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 Observacion


GroupBox Text=TipoDocumento
RadioButton Name = rbFac Dentro del GroupBox
Text = Factura
RadioButton Name = rbBv Dentro del GroupBox
Text = Boleta

MCP. Ing. Ricardo Mendoza Rivera Page 3


Lab 05. Ingeniería de Software. Implementando una Primera Aplicació n

Checked = True
TextBox Name =TxtDocumento
MaxLength = 9
ComboBox Name =CboFormaPago
CommandButton Name = CmdGenerar
Text = Generar

Label1 Text = Documento


Label2 Text = NroCuotas
DataGrid 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 librerías del ADO.NET

MCP. Ing. Ricardo Mendoza Rivera Page 4


Lab 05. Ingeniería de Software. Implementando una Primera Aplicació n

Imports System.Data.SqlClient
Public Class ControlCronograma

End Class

d. Creando los Métodos


1. VerificaDocumento: a continuación de :
2. LlenaCuotas
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. Ingeniería de Software. Implementando una Primera Aplicació n

Return dtCrono

Catch ex As Exception
Return dtCrono
End Try

End Function

Public Function LlenaCuotas(cn As SqlConnection) As DataTable


Dim vsql As String
vsql = " SELECT nrodias, descripcion FROM formapago WHERE formaPago <>'C' "
Dim dt As New DataTable
Dim da As New SqlDataAdapter(vsql, cn)
da.Fill(dt)
Return dt
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. Continuación….

MCP. Ing. Ricardo Mendoza Rivera Page 6


Lab 05. Ingeniería de Software. Implementando una Primera Aplicació n

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

En el Load
============
Private Sub Form1_Load()

Me.LlenaCombos()
End Sub

Private Sub LlenaCombos()


Dim objCuotas As New ReglasNegocio.CtrlCronograma
Dim dtCuotas As New DataTable
dtCuotas = objCuotas.LlenaCuotas(cn)

CboCuotas.DataSource = dtCuotas
CboCuotas.DisplayMember = dtCuotas.Columns(1).ToString
CboCuotas.ValueMember = dtCuotas.Columns(0).ToString

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

MCP. Ing. Ricardo Mendoza Rivera Page 7


Lab 05. Ingeniería de Software. Implementando una Primera Aplicació n

Construyendo la Capa Control


a. Tablas Encontradas

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:

MCP. Ing. Ricardo Mendoza Rivera Page 8


Lab 05. Ingeniería de Software. Implementando una Primera Aplicació n

Crear el Store Procedure: GeneraCrono

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

MCP. Ing. Ricardo Mendoza Rivera Page 9


Lab 05. Ingeniería de Software. Implementando una Primera Aplicació n

GO

Ejecute y haga el Testeo Respectivo

MCP. Ing. Ricardo Mendoza Rivera Page 10


Lab 05. Ingeniería de Software. Implementando una Primera Aplicació n

NroCuotas 5
Monto 2000
interes 2%
igv 18%
Vencimieno Capital Interes IGV Cuota
1 04/06/2019 400 8 1.44 409.44
2 04/07/2019 400 8 1.44 409.44
3 03/08/2019 400 8 1.44 409.44
4 02/09/2019 400 8 1.44 409.44
5 02/10/2019 400 8 1.44 409.44

MCP. Ing. Ricardo Mendoza Rivera Page 11

También podría gustarte