Fecha Final : .20/06/2018
Hora Inicio: . 1:00 PM
Hora Final: . 2:20 PM
Horas invertidas(Minutos): 80 minutos
Colaboradores: José David Rodríguez , Óscar Cortés
Tipo de labor: Compartido
Actividad: CRUD
Se tiene un programa en Python que se encarga de generar los crud para las tablas(ver Imagen Python). Este programa recibe como parámetro el script de las tablas. El resultado es el script con los crud (ver Imagen Resultado). Luego, estas tablas necesitan retoques para acomodarlas bien para por último obtener los crud finales (ver Imagen Final).
Imágenes:
![]() |
| Imagen Python |
![]() |
| Imagen Resultado |
![]() |
| Imagen Final |
Apéndice:
- Programa en Python
def fix_xml(pXml):
respXML = ""
i = 0
while (i < len(pXml)):
if pXml[i:i+2] == "ID":
respXML += pXml[i:i+4]
n = ""
i += 4
while (pXml[i] != '"'):
n += pXml[i]
i+=1
respXML += str( int(n) + 1) + '"'
else:
respXML += pXml[i]
i+=1
print(respXML)
def createHardcoreCRUDE(script):
"""Crea cuatro funciones por cada tabla, además
de agregar a la tabla 'eventos' los cambios de cada tabla."""
print("Hello world")
tempo = ""
jump = False
for i in range(len(script)-1):
if (script[i] != "\t"):
tempo += script[i]
tablas = []
tabla = None
for t in tempo.split("\n"):
if len(t) == 0:
continue
if (t[-1] == "("):
tabla = Tabla(t.split(" ")[2][:-1])
tablas.append(tabla)
elif (t[0] != ")" and tabla != None):
tt = t.split(" ")
tabla.agregarDato(tt[0], tt[1])
for t in tablas:
print("-- Tabla: " + t.nombre)
t.CRUD_Create()
print("\n\n")
t.CRUD_Read()
t.CRUD_Update()
print("--" + "#" *32,"--\n\n\n")
class Tabla:
nombre = ""
columnas = []
tipos = []
parametros = []
def __init__(self, pNombre):
self.nombre = pNombre
self.columnas = []
self.tipos = []
self.parametros = []
def agregarDato(self, pNombre, pTipo):
self.columnas.append(pNombre)
intial = pNombre[0].upper()
self.parametros.append("@p" + intial + pNombre[1:])
self.tipos.append(pTipo)
def toString(self):
print(self.nombre)
print(self.columnas)
print(self.tipos)
print(self.parametros)
def toCRUD(self):
self.CRUD_Create()
self.CRUD_Delete()
self.CRUD_Read()
self.CRUD_Update()
pass
def CRUD_Create(self):
#Create
print("Create Procedure SPC_"+self.nombre)
for i in range(1, len(self.parametros) - 1):
if (i == len(self.parametros) - 2):
print("\t"+self.parametros[i] + " " + self.tipos[i])
else:
print("\t"+self.parametros[i] + " " + self.tipos[i] + ", ")
print("""as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from """+ self.nombre + """ for XML auto, type)
""")
insertTable = "\tinsert into " + self.nombre + "("
for i in range(1, len(self.parametros) - 1):
insertTable += self.columnas[i] + ", "
insertTable = insertTable[:-2] + ")"
print(insertTable)
values = "\t\tvalues ("
for i in range(1, len(self.parametros) - 1):
values += self.parametros[i] + ", "
values = values[:-2] + ")"
print(values)
print("\n\tdeclare @XmlDespues XML = (select * from " + self.nombre + " for XML auto, type)")
print("\n\texec SPC_EventoMantenimiento """ + self.nombre + ", 'insertar', null, @XmlAntes, @XmlDespues ")
print("\tcommit\n\nend try")
print("""
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
""")
def CRUD_Delete(self):
#Delete
print("Create Procedure SPD_"+self.nombre)
print("\t@pID int")
print("""as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from """+ self.nombre + """ for XML auto, type)
""")
print("\tUpdate " + self.nombre)
print("\tSet Visible = 'n'")
print("\tWhere @pId = ID")
print("\n\tdeclare @XmlDespues XML = (select * from " + self.nombre + " for XML auto, type)")
print("""
exec SPC_EventoMantenimiento """ + self.nombre + """, 'borrado', null, @XmlAntes, @XmlDespues
""")
print("\tcommit\nend try")
print("""
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
""")
def CRUD_Update(self):
#Update
print("Create Procedure SPU_"+self.nombre)
print("\t@pID int,")
for i in range(1, len(self.parametros) - 1):
if (i == len(self.parametros) - 2):
print("\t"+self.parametros[i] + " " + self.tipos[i] + " = null")
else:
print("\t"+self.parametros[i] + " " + self.tipos[i] + " = null, ")
print("""as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from """+ self.nombre + """ for XML auto, type)
""")
print("\tUpdate " + self.nombre)
updates = "\tSet "
for i in range(1, len(self.parametros) - 1):
updates += self.columnas[i] + " = isNull(" + self.parametros[i] + ", " + self.columnas[i] + "), "
print(updates[:-2])
print("\tWhere @pId = ID")
print("\n\tdeclare @XmlDespues XML = (select * from " + self.nombre + " for XML auto, type)")
print("""
exec SPC_EventoMantenimiento """ + self.nombre + """, 'actualizacion', null, @XmlAntes, @XmlDespues
""")
print("\tcommit\nend try")
print("""
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
""")
def CRUD_Read(self):
#Read
print("Alter Procedure SPR_"+self.nombre)
print("\t@pID int = null,")
for i in range(1, len(self.parametros) - 1):
if (i == len(self.parametros) - 2):
print("\t"+self.parametros[i] + " " + self.tipos[i] + " = null")
else:
print("\t"+self.parametros[i] + " " + self.tipos[i] + " = null, ")
print("""as
begin
begin try
begin tran
""")
print ("Select *")
#for i in range(1, len(self.parametros) - 1):
# select += self.columnas[i] + ", "
#print(select[:-2])
print("From " + self.nombre)
where = "\tWhere ID = isnull(@pID, ID) "
for i in range(1, len(self.parametros) - 1):
where += " and " + self.columnas[i] + " = isNull(" + self.parametros[i] + ", " + self.columnas[i] + ")"
where += " and Visible = 'y'"
print(where)
print("\tcommit\nend try")
print("""
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
""")
createHardcoreCRUDE("""
CREATE TABLE TipoCliente(
ID INT PRIMARY KEY identity(1,1),
Descripcion varchar(30) NOT NULL,
Visible CHAR NOT NULL default 'y', CHECK (Visible = 'y' OR Visible = 'n')
)
CREATE TABLE Cliente(
ID INT PRIMARY KEY identity(1,1),
Nombre varchar(30) NOT NULL,
DocID INT NOT NULL,
FK_Tipo_Cliente INT NOT NULL FOREIGN KEY REFERENCES TipoCliente(ID),
Visible CHAR NOT NULL default 'y', CHECK (Visible = 'y' OR Visible = 'n')
)
CREATE TABLE Emisor(
ID INT PRIMARY KEY identity(1,1),
DocID INT NOT NULL,
Nombre varchar(30) NOT NULL,
QAcciones INT NOT NULL,
PrecioInicial MONEY NOT NULL,
Variacion INT NOT NULL,
Comision INT NOT NULL,
Visible CHAR NOT NULL default 'y', CHECK (Visible = 'y' OR Visible = 'n')
)
CREATE TABLE ClienteDeEmpresa(
ID INT PRIMARY KEY identity(1,1),
FK_Emisor int not null foreign key references Emisor(ID),
FK_Cliente int not null foreign key references Cliente(ID)
)
CREATE TABLE ClienteXEmisor(
ID INT PRIMARY KEY identity(1,1),
FK_Emisor int not null foreign key references Emisor(ID),
FK_Cliente int not null foreign key references Cliente(ID),
QAcciones int not null
)
CREATE TABLE Accion(
ID INT PRIMARY KEY identity(1,1),
FK_Emisor INT not null foreign key references Emisor(ID),
NombreEmpresa VARCHAR(30) NOT NULL,
Codigo INT NOT NULL,
PrecioActual MONEY NOT NULL,
Visible CHAR NOT NULL default 'y', CHECK (Visible = 'y' OR Visible = 'n')
)
create table MovimientoAcciones(
ID INT PRIMARY KEY identity(1,1),
FK_ClienteEmisor int not null foreign key references ClienteXEmisor(ID),
FK_Accion int not null foreign key references Accion(ID),
Cantidad int not null default 0,
Precio money not null default 0
)
CREATE TABLE Agente(
ID INT PRIMARY KEY identity(1,1),
Nombre varchar(30) NOT NULL,
Saldo INT NOT NULL,
Visible CHAR NOT NULL default 'y', CHECK (Visible = 'y' OR Visible = 'n')
)
CREATE TABLE TipoOperacion(
ID INT PRIMARY KEY identity(1,1),
Descripcion varchar(30) NOT NULL,
Visible CHAR NOT NULL default 'y', CHECK (Visible = 'y' OR Visible = 'n')
)
CREATE TABLE Operacion(
ID INT PRIMARY KEY identity(1,1),
FK_TipoOperacion INT NOT NULL FOREIGN KEY REFERENCES TipoOperacion(ID),
FK_Agente INT NOT NULL FOREIGN KEY REFERENCES Agente(ID),
FK_ClienteCompra INT NOT NULL FOREIGN KEY REFERENCES Cliente(ID),
FK_ClienteVenta INT NOT NULL FOREIGN KEY REFERENCES Cliente(ID),
FK_Movimiento int not null foreign key references MovimientoAcciones(ID),
Fecha DATE NOT NULL,
QAcciones INT NOT NULL,
Total int not null,
Comision int not null,
GananciaVendedor int not null default 0,
Visible CHAR NOT NULL default 'y', CHECK (Visible = 'y' OR Visible = 'n')
)
CREATE TABLE TipoMovimiento(
ID INT PRIMARY KEY identity(1,1),
Descripcion varchar(30) NOT NULL,
Visible CHAR NOT NULL default 'y', CHECK (Visible = 'y' OR Visible = 'n')
)
CREATE TABLE MovimientoComision(
ID INT PRIMARY KEY identity(1,1),
FK_Agente INT NOT NULL FOREIGN KEY REFERENCES Agente(ID),
FK_Tipo_Movimiento INT NOT NULL FOREIGN KEY REFERENCES TipoMovimiento(ID),
FK_Operacion INT NOT NULL FOREIGN KEY REFERENCES Operacion(ID),
Fecha DATE NOT NULL,
Monto MONEY NOT NULL,
Visible CHAR NOT NULL default 'y', CHECK (Visible = 'y' OR Visible = 'n')
)
CREATE TABLE EventoMantenimiento(
ID INT identity(1,1) primary key,
Tabla NVARCHAR(50) NOT NULL,
Antes XML NOT NULL,
Despues XML NOT NULL,
Fecha DATE NOT NULL default (getDate())
)
""")
- Código de los CRUD
Create procedure [dbo].[SPC_EventoMantenimiento]
@pTabla nvarchar(50),
@pEvento nvarchar(50),
@pFecha datetime = null,
@pAntes XML,
@pDespues XML
as
begin
begin tran
insert into EventoMantenimiento (Tabla, Evento, Fecha, Antes, Despues)
values (@pTabla, @pEvento, isnull(@pFecha, GETDATE()), @pAntes, @pDespues)
commit
end
-- Tabla: TipoCliente
Create Procedure SPU_TipoCliente
@pID int,
@pDescripcion varchar(30) = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from TipoCliente for XML auto, type)
Update TipoCliente
Set Descripcion = isNull(@pDescripcion, Descripcion)
Where @pId = ID
declare @XmlDespues XML = (select * from TipoCliente for XML auto, type)
exec SPC_EventoMantenimiento TipoCliente, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
-- Tabla: Cliente
Create Procedure SPU_Cliente
@pID int,
@pNombre varchar(30) = null,
@pDocID INT = null,
@pFK_Tipo_Cliente INT = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Cliente for XML auto, type)
Update Cliente
Set Nombre = isNull(@pNombre, Nombre), DocID = isNull(@pDocID, DocID), FK_Tipo_Cliente = isNull(@pFK_Tipo_Cliente, FK_Tipo_Cliente)
Where @pId = ID
declare @XmlDespues XML = (select * from Cliente for XML auto, type)
exec SPC_EventoMantenimiento Cliente, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: Emisor
Create Procedure SPU_Emisor
@pID int,
@pDocID INT = null,
@pNombre varchar(30) = null,
@pQAcciones INT = null,
@pPrecioInicial MONEY = null,
@pVariacion INT = null,
@pComision INT = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Emisor for XML auto, type)
Update Emisor
Set DocID = isNull(@pDocID, DocID), Nombre = isNull(@pNombre, Nombre), QAcciones = isNull(@pQAcciones, QAcciones), PrecioInicial = isNull(@pPrecioInicial, PrecioInicial), Variacion = isNull(@pVariacion, Variacion), Comision = isNull(@pComision, Comision)
Where @pId = ID
declare @XmlDespues XML = (select * from Emisor for XML auto, type)
exec SPC_EventoMantenimiento Emisor, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: ClienteDeEmpresa
Create Procedure SPU_ClienteDeEmpresa
@pID int,
@pFK_Emisor int = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from ClienteDeEmpresa for XML auto, type)
Update ClienteDeEmpresa
Set FK_Emisor = isNull(@pFK_Emisor, FK_Emisor)
Where @pId = ID
declare @XmlDespues XML = (select * from ClienteDeEmpresa for XML auto, type)
exec SPC_EventoMantenimiento ClienteDeEmpresa, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: ClienteXEmisor
Create Procedure SPU_ClienteXEmisor
@pID int,
@pFK_Emisor int = null,
@pFK_Cliente int = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from ClienteXEmisor for XML auto, type)
Update ClienteXEmisor
Set FK_Emisor = isNull(@pFK_Emisor, FK_Emisor), FK_Cliente = isNull(@pFK_Cliente, FK_Cliente)
Where @pId = ID
declare @XmlDespues XML = (select * from ClienteXEmisor for XML auto, type)
exec SPC_EventoMantenimiento ClienteXEmisor, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: Accion
Create Procedure SPU_Accion
@pID int,
@pFK_Emisor INT = null,
@pNombreEmpresa VARCHAR(30) = null,
@pCodigo INT = null,
@pPrecioActual MONEY = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Accion for XML auto, type)
Update Accion
Set FK_Emisor = isNull(@pFK_Emisor, FK_Emisor), NombreEmpresa = isNull(@pNombreEmpresa, NombreEmpresa), Codigo = isNull(@pCodigo, Codigo), PrecioActual = isNull(@pPrecioActual, PrecioActual)
Where @pId = ID
declare @XmlDespues XML = (select * from Accion for XML auto, type)
exec SPC_EventoMantenimiento Accion, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: MovimientoAcciones
Alter Procedure SPU_MovimientoAcciones
@pID int,
@pFK_ClienteEmisor int = null,
@pFK_Accion int = null,
@pFK_Operacion int = null,
@pCantidad int = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from MovimientoAcciones for XML auto, type)
Update MovimientoAcciones
Set FK_ClienteEmisor = isNull(@pFK_ClienteEmisor, FK_ClienteEmisor), FK_Accion = isNull(@pFK_Accion, FK_Accion),FK_Operacion = isNull(@pFK_Accion, FK_Accion), Cantidad = isNull(@pCantidad, Cantidad)
Where @pId = ID
declare @XmlDespues XML = (select * from MovimientoAcciones for XML auto, type)
exec SPC_EventoMantenimiento MovimientoAcciones, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: Agente
Create Procedure SPU_Agente
@pID int,
@pNombre varchar(30) = null,
@pSaldo INT = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Agente for XML auto, type)
Update Agente
Set Nombre = isNull(@pNombre, Nombre), Saldo = isNull(@pSaldo, Saldo)
Where @pId = ID
declare @XmlDespues XML = (select * from Agente for XML auto, type)
exec SPC_EventoMantenimiento Agente, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: TipoOperacion
Create Procedure SPU_TipoOperacion
@pID int,
@pDescripcion varchar(30) = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from TipoOperacion for XML auto, type)
Update TipoOperacion
Set Descripcion = isNull(@pDescripcion, Descripcion)
Where @pId = ID
declare @XmlDespues XML = (select * from TipoOperacion for XML auto, type)
exec SPC_EventoMantenimiento TipoOperacion, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: Operacion
Alter Procedure SPU_Operacion
@pID int,
@pFK_TipoOperacion INT = null,
@pFK_Agente INT = null,
@pFK_ClienteCompra INT = null,
@pFK_ClienteVenta INT = null,
@pFecha DATE = null,
@pQAcciones INT = null,
@pTotal int = null,
@pComision int = null,
@pGananciaVendedor int = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Operacion for XML auto, type)
Update Operacion
Set FK_TipoOperacion = isNull(@pFK_TipoOperacion, FK_TipoOperacion), FK_Agente = isNull(@pFK_Agente, FK_Agente), FK_ClienteCompra = isNull(@pFK_ClienteCompra, FK_ClienteCompra), FK_ClienteVenta = isNull(@pFK_ClienteVenta, FK_ClienteVenta), Fecha = isNull(@pFecha, Fecha), QAcciones = isNull(@pQAcciones, QAcciones), Total = isNull(@pTotal, Total), Comision = isNull(@pComision, Comision), GananciaVendedor = isNull(@pGananciaVendedor, GananciaVendedor)
Where @pId = ID
declare @XmlDespues XML = (select * from Operacion for XML auto, type)
exec SPC_EventoMantenimiento Operacion, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: TipoMovimiento
Create Procedure SPU_TipoMovimiento
@pID int,
@pDescripcion varchar(30) = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from TipoMovimiento for XML auto, type)
Update TipoMovimiento
Set Descripcion = isNull(@pDescripcion, Descripcion)
Where @pId = ID
declare @XmlDespues XML = (select * from TipoMovimiento for XML auto, type)
exec SPC_EventoMantenimiento TipoMovimiento, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: MovimientoComision
Create Procedure SPU_MovimientoComision
@pID int,
@pFK_Agente INT = null,
@pFK_Tipo_Movimiento INT = null,
@pFK_Operacion INT = null,
@pFecha DATE = null,
@pMonto MONEY = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from MovimientoComision for XML auto, type)
Update MovimientoComision
Set FK_Agente = isNull(@pFK_Agente, FK_Agente), FK_Tipo_Movimiento = isNull(@pFK_Tipo_Movimiento, FK_Tipo_Movimiento), FK_Operacion = isNull(@pFK_Operacion, FK_Operacion), Fecha = isNull(@pFecha, Fecha), Monto = isNull(@pMonto, Monto)
Where @pId = ID
declare @XmlDespues XML = (select * from MovimientoComision for XML auto, type)
exec SPC_EventoMantenimiento MovimientoComision, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: EventoMantenimiento
Create Procedure SPU_EventoMantenimiento
@pID int,
@pTabla NVARCHAR(50) = null,
@pAntes XML = null,
@pDespues XML = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from EventoMantenimiento for XML auto, type)
Update EventoMantenimiento
Set Tabla = isNull(@pTabla, Tabla), Antes = isNull(@pAntes, Antes), Despues = isNull(@pDespues, Despues)
Where @pId = ID
declare @XmlDespues XML = (select * from EventoMantenimiento for XML auto, type)
exec SPC_EventoMantenimiento EventoMantenimiento, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
>>>
-- Tabla: TipoCliente
Create Procedure SPC_TipoCliente
@pDescripcion varchar(30)
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from TipoCliente for XML auto, type)
insert into TipoCliente(Descripcion)
values (@pDescripcion)
declare @XmlDespues XML = (select * from TipoCliente for XML auto, type)
exec SPC_EventoMantenimiento TipoCliente, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_TipoCliente
@pID int = null,
@pDescripcion varchar(30) = null
as
begin
begin try
begin tran
Select *
From TipoCliente
Where ID = isnull(@pID, ID) and Descripcion = isNull(@pDescripcion, Descripcion) and Visible = 'y'
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPU_TipoCliente
@pID int,
@pDescripcion varchar(30) = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from TipoCliente for XML auto, type)
Update TipoCliente
Set Descripcion = isNull(@pDescripcion, Descripcion)
Where @pId = ID
declare @XmlDespues XML = (select * from TipoCliente for XML auto, type)
exec SPC_EventoMantenimiento TipoCliente, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: Cliente
Create Procedure SPC_Cliente
@pNombre varchar(30),
@pDocID INT,
@pFK_Tipo_Cliente INT
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Cliente for XML auto, type)
insert into Cliente(Nombre, DocID, FK_Tipo_Cliente)
values (@pNombre, @pDocID, @pFK_Tipo_Cliente)
declare @XmlDespues XML = (select * from Cliente for XML auto, type)
exec SPC_EventoMantenimiento Cliente, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_Cliente
@pID int = null,
@pNombre varchar(30) = null,
@pDocID INT = null,
@pFK_Tipo_Cliente INT = null
as
begin
begin try
begin tran
Select *
From Cliente
Where ID = isnull(@pID, ID) and Nombre = isNull(@pNombre, Nombre) and DocID = isNull(@pDocID, DocID) and FK_Tipo_Cliente = isNull(@pFK_Tipo_Cliente, FK_Tipo_Cliente) and Visible = 'y'
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPU_Cliente
@pID int,
@pNombre varchar(30) = null,
@pDocID INT = null,
@pFK_Tipo_Cliente INT = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Cliente for XML auto, type)
Update Cliente
Set Nombre = isNull(@pNombre, Nombre), DocID = isNull(@pDocID, DocID), FK_Tipo_Cliente = isNull(@pFK_Tipo_Cliente, FK_Tipo_Cliente)
Where @pId = ID
declare @XmlDespues XML = (select * from Cliente for XML auto, type)
exec SPC_EventoMantenimiento Cliente, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: Emisor
Create Procedure SPC_Emisor
@pDocID INT,
@pNombre varchar(30),
@pQAcciones INT,
@pPrecioInicial MONEY,
@pVariacion INT,
@pComision INT
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Emisor for XML auto, type)
insert into Emisor(DocID, Nombre, QAcciones, PrecioInicial, Variacion, Comision)
values (@pDocID, @pNombre, @pQAcciones, @pPrecioInicial, @pVariacion, @pComision)
declare @XmlDespues XML = (select * from Emisor for XML auto, type)
exec SPC_EventoMantenimiento Emisor, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_Emisor
@pID int = null,
@pDocID INT = null,
@pNombre varchar(30) = null,
@pQAcciones INT = null,
@pPrecioInicial MONEY = null,
@pVariacion INT = null,
@pComision INT = null
as
begin
begin try
begin tran
Select *
From Emisor
Where ID = isnull(@pID, ID) and DocID = isNull(@pDocID, DocID) and Nombre = isNull(@pNombre, Nombre) and QAcciones = isNull(@pQAcciones, QAcciones) and PrecioInicial = isNull(@pPrecioInicial, PrecioInicial) and Variacion = isNull(@pVariacion, Variacion) and Comision = isNull(@pComision, Comision) and Visible = 'y'
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPU_Emisor
@pID int,
@pDocID INT = null,
@pNombre varchar(30) = null,
@pQAcciones INT = null,
@pPrecioInicial MONEY = null,
@pVariacion INT = null,
@pComision INT = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Emisor for XML auto, type)
Update Emisor
Set DocID = isNull(@pDocID, DocID), Nombre = isNull(@pNombre, Nombre), QAcciones = isNull(@pQAcciones, QAcciones), PrecioInicial = isNull(@pPrecioInicial, PrecioInicial), Variacion = isNull(@pVariacion, Variacion), Comision = isNull(@pComision, Comision)
Where @pId = ID
declare @XmlDespues XML = (select * from Emisor for XML auto, type)
exec SPC_EventoMantenimiento Emisor, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: ClienteDeEmpresa
Create Procedure SPC_ClienteDeEmpresa
@pFK_Emisor int
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from ClienteDeEmpresa for XML auto, type)
insert into ClienteDeEmpresa(FK_Emisor)
values (@pFK_Emisor)
declare @XmlDespues XML = (select * from ClienteDeEmpresa for XML auto, type)
exec SPC_EventoMantenimiento ClienteDeEmpresa, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_ClienteDeEmpresa
@pID int = null,
@pFK_Emisor int = null
as
begin
begin try
begin tran
Select *
From ClienteDeEmpresa
Where ID = isnull(@pID, ID) and FK_Emisor = isNull(@pFK_Emisor, FK_Emisor)
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPU_ClienteDeEmpresa
@pID int,
@pFK_Emisor int = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from ClienteDeEmpresa for XML auto, type)
Update ClienteDeEmpresa
Set FK_Emisor = isNull(@pFK_Emisor, FK_Emisor)
Where @pId = ID
declare @XmlDespues XML = (select * from ClienteDeEmpresa for XML auto, type)
exec SPC_EventoMantenimiento ClienteDeEmpresa, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: ClienteXEmisor
Create Procedure SPC_ClienteXEmisor
@pFK_Emisor int,
@pFK_Cliente int
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from ClienteXEmisor for XML auto, type)
insert into ClienteXEmisor(FK_Emisor, FK_Cliente)
values (@pFK_Emisor, @pFK_Cliente)
declare @XmlDespues XML = (select * from ClienteXEmisor for XML auto, type)
exec SPC_EventoMantenimiento ClienteXEmisor, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_ClienteXEmisor
@pID int = null,
@pFK_Emisor int = null,
@pFK_Cliente int = null
as
begin
begin try
begin tran
Select *
From ClienteXEmisor
Where ID = isnull(@pID, ID) and FK_Emisor = isNull(@pFK_Emisor, FK_Emisor) and FK_Cliente = isNull(@pFK_Cliente, FK_Cliente)
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPU_ClienteXEmisor
@pID int,
@pFK_Emisor int = null,
@pFK_Cliente int = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from ClienteXEmisor for XML auto, type)
Update ClienteXEmisor
Set FK_Emisor = isNull(@pFK_Emisor, FK_Emisor), FK_Cliente = isNull(@pFK_Cliente, FK_Cliente)
Where @pId = ID
declare @XmlDespues XML = (select * from ClienteXEmisor for XML auto, type)
exec SPC_EventoMantenimiento ClienteXEmisor, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: Accion
Create Procedure SPC_Accion
@pFK_Emisor INT,
@pNombreEmpresa VARCHAR(30),
@pCodigo INT,
@pPrecioActual MONEY
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Accion for XML auto, type)
insert into Accion(FK_Emisor, NombreEmpresa, Codigo, PrecioActual)
values (@pFK_Emisor, @pNombreEmpresa, @pCodigo, @pPrecioActual)
declare @XmlDespues XML = (select * from Accion for XML auto, type)
exec SPC_EventoMantenimiento Accion, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_Accion
@pID int = null,
@pFK_Emisor INT = null,
@pNombreEmpresa VARCHAR(30) = null,
@pCodigo INT = null,
@pPrecioActual MONEY = null
as
begin
begin try
begin tran
Select *
From Accion
Where ID = isnull(@pID, ID) and FK_Emisor = isNull(@pFK_Emisor, FK_Emisor) and NombreEmpresa = isNull(@pNombreEmpresa, NombreEmpresa) and Codigo = isNull(@pCodigo, Codigo) and PrecioActual = isNull(@pPrecioActual, PrecioActual) and Visible = 'y'
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPU_Accion
@pID int,
@pFK_Emisor INT = null,
@pNombreEmpresa VARCHAR(30) = null,
@pCodigo INT = null,
@pPrecioActual MONEY = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Accion for XML auto, type)
Update Accion
Set FK_Emisor = isNull(@pFK_Emisor, FK_Emisor), NombreEmpresa = isNull(@pNombreEmpresa, NombreEmpresa), Codigo = isNull(@pCodigo, Codigo), PrecioActual = isNull(@pPrecioActual, PrecioActual)
Where @pId = ID
declare @XmlDespues XML = (select * from Accion for XML auto, type)
exec SPC_EventoMantenimiento Accion, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: MovimientoAcciones
Alter Procedure SPC_MovimientoAcciones
@pFK_ClienteEmisor int,
@pFK_Accion int,
@pFK_Operacion int,
@pCantidad int
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from MovimientoAcciones for XML auto, type)
insert into MovimientoAcciones(FK_ClienteEmisor, FK_Accion,FK_Operacion, Cantidad)
values (@pFK_ClienteEmisor, @pFK_Accion, @pFK_Operacion, @pCantidad)
declare @XmlDespues XML = (select * from MovimientoAcciones for XML auto, type)
exec SPC_EventoMantenimiento MovimientoAcciones, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_MovimientoAcciones
@pID int = null,
@pFK_ClienteEmisor int = null,
@pFK_Accion int = null,
@pFK_Operacion int = null,
@pCantidad int = null
as
begin
begin try
begin tran
Select *
From MovimientoAcciones
Where ID = isnull(@pID, ID) and FK_ClienteEmisor = isNull(@pFK_ClienteEmisor, FK_ClienteEmisor) and FK_Accion = isNull(@pFK_Accion, FK_Accion) and FK_Operacion = isNull(@pFK_Operacion, FK_Operacion) and Cantidad = isNull(@pCantidad, Cantidad)
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
alter Procedure SPU_MovimientoAcciones
@pID int,
@pFK_ClienteEmisor int = null,
@pFK_Accion int = null,
@pFK_Operacion int = null,
@pCantidad int = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from MovimientoAcciones for XML auto, type)
Update MovimientoAcciones
Set FK_ClienteEmisor = isNull(@pFK_ClienteEmisor, FK_ClienteEmisor), FK_Accion = isNull(@pFK_Accion, FK_Accion), FK_Operacion = isNull(@pFK_Operacion, FK_Operacion), Cantidad = isNull(@pCantidad, Cantidad)
Where @pId = ID
declare @XmlDespues XML = (select * from MovimientoAcciones for XML auto, type)
exec SPC_EventoMantenimiento MovimientoAcciones, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: Agente
Create Procedure SPC_Agente
@pNombre varchar(30),
@pSaldo INT
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Agente for XML auto, type)
insert into Agente(Nombre, Saldo)
values (@pNombre, @pSaldo)
declare @XmlDespues XML = (select * from Agente for XML auto, type)
exec SPC_EventoMantenimiento Agente, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_Agente
@pID int = null,
@pNombre varchar(30) = null,
@pSaldo INT = null
as
begin
begin try
begin tran
Select *
From Agente
Where ID = isnull(@pID, ID) and Nombre = isNull(@pNombre, Nombre) and Saldo = isNull(@pSaldo, Saldo) and Visible = 'y'
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPU_Agente
@pID int,
@pNombre varchar(30) = null,
@pSaldo INT = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Agente for XML auto, type)
Update Agente
Set Nombre = isNull(@pNombre, Nombre), Saldo = isNull(@pSaldo, Saldo)
Where @pId = ID
declare @XmlDespues XML = (select * from Agente for XML auto, type)
exec SPC_EventoMantenimiento Agente, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: TipoOperacion
Create Procedure SPC_TipoOperacion
@pDescripcion varchar(30)
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from TipoOperacion for XML auto, type)
insert into TipoOperacion(Descripcion)
values (@pDescripcion)
declare @XmlDespues XML = (select * from TipoOperacion for XML auto, type)
exec SPC_EventoMantenimiento TipoOperacion, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_TipoOperacion
@pID int = null,
@pDescripcion varchar(30) = null
as
begin
begin try
begin tran
Select *
From TipoOperacion
Where ID = isnull(@pID, ID) and Descripcion = isNull(@pDescripcion, Descripcion) and Visible = 'y'
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPU_TipoOperacion
@pID int,
@pDescripcion varchar(30) = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from TipoOperacion for XML auto, type)
Update TipoOperacion
Set Descripcion = isNull(@pDescripcion, Descripcion)
Where @pId = ID
declare @XmlDespues XML = (select * from TipoOperacion for XML auto, type)
exec SPC_EventoMantenimiento TipoOperacion, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: Operacion
Alter Procedure SPC_Operacion
@pFK_TipoOperacion INT,
@pFK_Agente INT,
@pFK_ClienteCompra INT,
@pFK_ClienteVenta INT,
@pFecha DATE,
@pQAcciones INT,
@pTotal int,
@pComision int,
@pGananciaVendedor int
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Operacion for XML auto, type)
insert into Operacion(FK_TipoOperacion, FK_Agente, FK_ClienteCompra, FK_ClienteVenta, Fecha, QAcciones, Total, Comision, GananciaVendedor)
values (@pFK_TipoOperacion, @pFK_Agente, @pFK_ClienteCompra, @pFK_ClienteVenta, @pFecha, @pQAcciones, @pTotal, @pComision, @pGananciaVendedor)
declare @XmlDespues XML = (select * from Operacion for XML auto, type)
exec SPC_EventoMantenimiento Operacion, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Alter Procedure SPR_Operacion
@pID int = null,
@pFK_TipoOperacion INT = null,
@pFK_Agente INT = null,
@pFK_ClienteCompra INT = null,
@pFK_ClienteVenta INT = null,
@pFecha DATE = null,
@pQAcciones INT = null,
@pTotal int = null,
@pComision int = null,
@pGananciaVendedor int = null
as
begin
begin try
begin tran
Select *
From Operacion
Where ID = isnull(@pID, ID) and FK_TipoOperacion = isNull(@pFK_TipoOperacion, FK_TipoOperacion) and FK_Agente = isNull(@pFK_Agente, FK_Agente) and FK_ClienteCompra = isNull(@pFK_ClienteCompra, FK_ClienteCompra) and FK_ClienteVenta = isNull(@pFK_ClienteVenta, FK_ClienteVenta) and Fecha = isNull(@pFecha, Fecha) and QAcciones = isNull(@pQAcciones, QAcciones) and Total = isNull(@pTotal, Total) and Comision = isNull(@pComision, Comision) and GananciaVendedor = isNull(@pGananciaVendedor, GananciaVendedor) and Visible = 'y'
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Alter Procedure SPU_Operacion
@pID int,
@pFK_TipoOperacion INT = null,
@pFK_Agente INT = null,
@pFK_ClienteCompra INT = null,
@pFK_ClienteVenta INT = null,
@pFecha DATE = null,
@pQAcciones INT = null,
@pTotal int = null,
@pComision int = null,
@pGananciaVendedor int = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from Operacion for XML auto, type)
Update Operacion
Set FK_TipoOperacion = isNull(@pFK_TipoOperacion, FK_TipoOperacion), FK_Agente = isNull(@pFK_Agente, FK_Agente), FK_ClienteCompra = isNull(@pFK_ClienteCompra, FK_ClienteCompra), FK_ClienteVenta = isNull(@pFK_ClienteVenta, FK_ClienteVenta), Fecha = isNull(@pFecha, Fecha), QAcciones = isNull(@pQAcciones, QAcciones), Total = isNull(@pTotal, Total), Comision = isNull(@pComision, Comision), GananciaVendedor = isNull(@pGananciaVendedor, GananciaVendedor)
Where @pId = ID
declare @XmlDespues XML = (select * from Operacion for XML auto, type)
exec SPC_EventoMantenimiento Operacion, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: TipoMovimiento
Create Procedure SPC_TipoMovimiento
@pDescripcion varchar(30)
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from TipoMovimiento for XML auto, type)
insert into TipoMovimiento(Descripcion)
values (@pDescripcion)
declare @XmlDespues XML = (select * from TipoMovimiento for XML auto, type)
exec SPC_EventoMantenimiento TipoMovimiento, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_TipoMovimiento
@pID int = null,
@pDescripcion varchar(30) = null
as
begin
begin try
begin tran
Select *
From TipoMovimiento
Where ID = isnull(@pID, ID) and Descripcion = isNull(@pDescripcion, Descripcion) and Visible = 'y'
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPU_TipoMovimiento
@pID int,
@pDescripcion varchar(30) = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from TipoMovimiento for XML auto, type)
Update TipoMovimiento
Set Descripcion = isNull(@pDescripcion, Descripcion)
Where @pId = ID
declare @XmlDespues XML = (select * from TipoMovimiento for XML auto, type)
exec SPC_EventoMantenimiento TipoMovimiento, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
--################################ --
-- Tabla: MovimientoComision
Create Procedure SPC_MovimientoComision
@pFK_Agente INT,
@pFK_Tipo_Movimiento INT,
@pFK_Operacion INT,
@pFecha DATE,
@pMonto MONEY
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from MovimientoComision for XML auto, type)
insert into MovimientoComision(FK_Agente, FK_Tipo_Movimiento, FK_Operacion, Fecha, Monto)
values (@pFK_Agente, @pFK_Tipo_Movimiento, @pFK_Operacion, @pFecha, @pMonto)
declare @XmlDespues XML = (select * from MovimientoComision for XML auto, type)
exec SPC_EventoMantenimiento MovimientoComision, 'insertar', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_MovimientoComision
@pID int = null,
@pFK_Agente INT = null,
@pFK_Tipo_Movimiento INT = null,
@pFK_Operacion INT = null,
@pFecha DATE = null,
@pMonto MONEY = null
as
begin
begin try
begin tran
Select *
From MovimientoComision
Where ID = isnull(@pID, ID) and FK_Agente = isNull(@pFK_Agente, FK_Agente) and FK_Tipo_Movimiento = isNull(@pFK_Tipo_Movimiento, FK_Tipo_Movimiento) and FK_Operacion = isNull(@pFK_Operacion, FK_Operacion) and Fecha = isNull(@pFecha, Fecha) and Monto = isNull(@pMonto, Monto) and Visible = 'y'
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPU_MovimientoComision
@pID int,
@pFK_Agente INT = null,
@pFK_Tipo_Movimiento INT = null,
@pFK_Operacion INT = null,
@pFecha DATE = null,
@pMonto MONEY = null
as
begin
begin try
begin tran
declare @XmlAntes XML = (select * from MovimientoComision for XML auto, type)
Update MovimientoComision
Set FK_Agente = isNull(@pFK_Agente, FK_Agente), FK_Tipo_Movimiento = isNull(@pFK_Tipo_Movimiento, FK_Tipo_Movimiento), FK_Operacion = isNull(@pFK_Operacion, FK_Operacion), Fecha = isNull(@pFecha, Fecha), Monto = isNull(@pMonto, Monto)
Where @pId = ID
declare @XmlDespues XML = (select * from MovimientoComision for XML auto, type)
exec SPC_EventoMantenimiento MovimientoComision, 'actualizacion', null, @XmlAntes, @XmlDespues
commit
end try
begin catch
if (@@TRANCOUNT > 0)
rollback
end catch
end
go
Create Procedure SPR_EventoMantenimiento
@pID int = null,
@pTabla NVARCHAR(50) = null,
@pAntes XML = null,
@pDespues XML = null
as
begin
Select *From EventoMantenimiento
end
go
--################################ --
Fuente:
Conocimiento adquirido
Proyectos anteriores
Proyectos anteriores



No hay comentarios.:
Publicar un comentario