lunes, 6 de octubre de 2014

Entrada 11

Conclusiones del proyecto:


Aprendizaje de SQL sintaxis

¿Qué es?

SQL (Structured Query Language) es un lenguaje orientado a trabajar con bases de datos relacionales. Es de fácil aprendizaje y es muy popular.

Tipos de Datos utilizados.

·         +Varchar (largo): Almacena cadenas de caracteres de tamaño menor o igual al largo.
·         +Int: Variable que funciona para guardar tipos de datos numéricos con una capacidad similar a la de un entero en C.
·         +Bit: Sería el equivalente a lo que en Java un tipo de dato booleano 1 si true 0 si false.
·         +Money: Es el tipo de dato por excelencia para almacenar datos numéricos que ocupan una gran precisión.
·         +Date: Guarda los datos de la fecha actual como mes, hora, día, año, etc.

·         +Nchar (largo): Al igual que varchar almacena una cadena de datos sin embargo este tiene un tamaño estrictamente igual al largo indicado.

a




Palabras Reservadas más importantes:

·         +Select: Genera una vista de cierta
·         +From: Indica de que tabla se desean sacar los resultados.
·         +Where: Sirve para extraer aquellos datos que cumplen con la condición.
·         +Update: Sirve para actualizar los datos en una determinada table.
·         + Insert into: Ingresa nuevos datos o registros en la tabla.
·         +Declare: Es una manera de declarar las variables locales.
·         + BEGIN TRANSACTION: Nos indica el inicio de una transacción local.
·         +Set: Cambia el valor de una variable local o de una tabla.

FFunciones Agregadas Utilizadas:

     + GetDate() : una de las funciones mas utilizadas en el proyecto y sirve para obtener la fecha actual del sistema.

     + DateAdd(datepart,number,date) : utilizada para incrementar el atributo ultimoCorte de la empresas en el procedure que genera las planillas.

     + DateName(datepart,date): utilizado tambien en el procedure de planillas para verificar que hoy fuera el dia de corte y poder realizar el procedure.

     + Convert(type,value): esta funcion se empleo en casi la mayoria de procedures que involucran la lectura de archivos para poder convertir los valores recibidos a los necesarios en la base de datos.

     + ISNULL(expression, newvalue): utilizada en el generador de planillas para evitar problemas con posibles nulls que puedan surgir

     + SUM(tableRow)esta funcion fue necesaria para sumar todas las horas de los movimientos de cada empleado para obtener el total de horas trabajadas de cada tipo.

     + Count(rows) con esta funcion se cuentan las filas de una tabla y nos sirvio para poder iterar en las tablas variantes.

     CHARINDEX(char,expression)  esta funcion fue necesaria para la lectura de archivos en la cual los datos estaba separados por un '/' pues asi se obtenia el indice de dicho caracter en un varchar dado.

     SUBSTRING(expression,start,end) empleada de igual manera en la lectura de archivos, para una vez obtenido el start   y end utilizando la funcion anterior ya con esta funcion se podian extraer los datos.


Stored Procedures

¿Qué son los stored Procedures?
·         Los Stored Procedures o procedimientos almacenados son  procesos que se almacenan en las bases de datos. Fueron  de gran ayuda en la tarea programada debido a que hicieron de la aplicación de escritorio una aplicación con un código más limpio para poder evitar los “software smells”.

Y en total se crearon 26 procedimientos almacenados:


Diagramado (Modelo de datos)

El diagramado fue la clave principal para resolver el problema ya que se va estructurando de una manera ordenada la solución. El uso de patrones de diseño en la base fue de gran ayuda para pensar en la solución del problema, claramente, hubo que hacer pequeñas modificaciones en el proceso de la construcción de bases sin embargo no fueron tantas como si no se hubiera hecho el diagrama desde el principio. En el proceso de construcción primero se analizó el mapa conceptual brindado por el profesor en clase después de varias horas de discusión y análisis, se pasó a la construcción del modelo físico el cual fue construido minuciosamente para no tener problemas posteriormente con valores nulos(para evitarlos para optimizar la consulta) foreign keys y Primary keys. El diagrama final quedó así y para su confección se utilizó el SQL Server 2012:


Herramientas de SQL Server 2012

El SQL Server 2012, puede ser una herramienta de gran utilidad si se saben utilizar todas sus herramientas, ya se mencionó anteriormente una el creador de diagramas, sin embargo existen otras herramientas como por ejemplo:

·         +Creador de Queries: O bien creador de consultas, esta herramienta es útil si se desea probar algún Stored Procedure o bien verificar la validez de los datos.

·         +Backups: La creación de Backups es una gran idea debido a que de vez en cuando pueden haber problemas con la base entonces tener un respaldo en la nube o bien en el escritorio es de gran ayuda.

·         +Entorno organizado: SQL Server 2012 basa su interfaz gráfica en Visual Studio 2012 lo que hace que este sea muy intuitivo para los usuarios que ya usaron este entorno, sin embargo hay que analizar más a fondo (pero no difícilmente) ya que no se trata de simples programas, ahora se trabaja con bases de datos.


Aprendizaje de un nuevo lenguaje C#

Se sabía de cursos anteriores el lenguaje de programación JAVA un lenguaje de alto nivel que por lo general su uso es bastante sencillo y uno de los lenguajes más utilizados a nivel mundial, sin embargo se presentaron muchas dificultades a la hora de unir la base de datos con la aplicación de escritorio, por lo tanto se buscaron recomendaciones de grupos de trabajo que anteriormente llevaron el curso con el profesor Franco Quirós, y recomendaron utilizaron C#, lenguaje que tiene la desventaja que solo funciona en Windows, sin embargo tiene la gran ventaja de que para conectar la aplicación de escritorio no se demora en escribir un par de líneas de código y realizar un par de ajustes en el proyecto de C# y listo! La base de datos se conectará sin ninguna complicación.

Trabajo en Grupo

Los primeros días de trabajo fueron duros para lograr por así decirlo una sincronización efectiva del grupo sin embargo con el paso del tiempo, fue siendo un grupo más compenetrado y organizado con su tiempo con las horas de trabajo, a pesar de la distancia se logró tener ciertas reuniones vía Skype para poder trabajar en conjunto.

Herramienta Visual Studio 2013

Visual Studio 2013 es el sucesor de Visual Studio 2012 y es el entorno con el que se trabajó con el lenguaje C#  J, como se utilizó Visual Studio 2012 para la base de datos se encontraron varias diferencias todas a favor de la versión nueva como por ejemplo:
La rapidez con la que ejecutaba las predicciones, al iniciar la aplicación se realizaron en casi la mitad del tiempo que se demoraba el VS 2012, esto es una característica importante debido a que hace al programador ganar segundos valiosos que antes no tenía así mejorar su rendimiento con su trabajo.

Posteriormente, para IDE’s como Netbeans y otros es muy incómodo desplazarse entre GUI y la parte del código de este por lo que en VS 2013 se propone al usuario la división de pantallas para darle solución a este problema.




Total de Horas trabajadas:


2 Horas 20 Minutos
2 horas 20 minutos 
2 20 horas
3 horas y 20 minutos
4 horas 
6 horas
2 horas 
2 horas
2 horas
5 horas
3 horas (conclusiones)

Para un total de 34.2 horas










Entrada 10

Acciones Realizadas:

- Por una decision del equipo de trabajo se decidio cambiar la pagina web de php y html5 a asp.net Esto para tener mayor facilidad a la hora de conectar la base de datos con la misma, ya que realizarla con php significaba la instalación y utilización  del programa wamp server, el cual se utiliza como servidor para poder utilizar php y esto le agregaba mucha mas complejidad al trabajo que se iba a realizar, ademas que en .net se cuenta con un elemento de la interfaz especializado para conectarse a una base de datos y ejecutar stored porcedures con mayor facilidad, estas fueron las principales razones para realizar el cambio, para poder realizarlo ademas se requirio aprender el lenguaje para lo cual se consultaron los siguientes links:

                + https://www.youtube.com/watch?v=sfzm9ajnVxk

                + http://msdn.microsoft.com/es-es/library/office/gg278645(v=office.15).aspx

                + http://es.slideshare.net/Benedeti/visual-basic

                + http://msdn.microsoft.com/es-es/library/ke6sh835.aspx

                + http://msdn.microsoft.com/es-es/library/cc464105(v=vs.71).aspx

Estos Links permitieron el correcto aprendizaje del lenguaje para poder realizar con la mayor facilidad posible la pagina web, para mayor simplicidad se realizo toda la aplicación en una sola ventana, pero la misma, muestra su contenido dependiendo de lo que el usuario va a realizar, de esta manera se evita una posible perdida de información entre pagina y pagina , ademas de que se muestra un diseño mas elegante de la misma y mas simple de utilizar para el usuario que para efectos de este proyecto son los empleados de cada empresa, los cuales pueden ser de tipo Empleado normal , y ademas Administradores de empresa, este ultimo a pesar de ser administrador , no deja de ser miembro de la empresa y por lo tanto cuenta con sus planillas respectivas.


-Se realizo un cambio pequeño en el archivo de datos general que este grupo de trabajo se encarga de realizar, el cambio procedió el la inserción de  valores de configuración ya que a solicitud de otro grupo de trabajo se cambio a los valores expuestos por el profesor la clase 20 viernes  3 de Octubre, al final de la modificación el archivo fue subido nuevamente al grupo de google de la clase, y las lineas donde se realizaron los cambios fueron las que muestra la siguiente:


Anterior mente uno de estos valores era un entero con un valor fijo, esto lo pensé de esta manera para que el estudiante tuviera que programar casos para los posibles tipos de los valores de configuración para por el motivo explicado anteriormente tuve que cambiarlo nuevamente.

- Se realizaron algunos cambios en algunos store procedure de nuestra base de datos, esto porque los mismo fueron programados antes de implementar las aplicaciones de administrador y la de usuarios, al crear y empezar a conectar las mismas se requerían realizar algunos cambios, como por ejemplo el procedure SP_MostrarPlanillasAnteriores , que es el encargado de mostrar los datos de las planillas de los empleados en la pagina web, anteriormente recibía como parámetro únicamente la cédula del empleado que iba a consultar su planilla, pero debido a que el usuario solo ingresa su nombre de usuario y su contraseña en la pagina y el nombre de usuario NO es la cedula, entonces se cambiaron los parametros del mismo para que fueran el nombre de usuario y la contraseña, esto genera que en lugar de ser solo una condicion en el "where" fueran dos, y ademas la clave recibida se le debe aplicar la funcion agregada HASHBYTES para poder encritarla y compararla con la que se encuentra en el sistema, pero esto evita que se tenga que llamar a otro procedure para traer la cedula de empleado  poder pasarla como parametro.

Horas Trabajadas:
     3 horas y 20 minutos


Participantes:
     Jonathan Salazar Garcia
     Mariano Montero Muñoz

martes, 30 de septiembre de 2014

Entrada 9

Acciones realizadas:

-El día de ayer se trabajó arduamente con la aplicación de escritorio, hubo problemas pequeños a la hora de realizar ciertos metodos sin embargo gracias a que C# cuenta con una alta similitud con el lenguaje de  programación Java las soluciones surgieron de una muy similar que a como estuvieramos programando en este ultimo. Sin embargo no se finalizó la aplicación de Escritorio.

-Se terminó el store procedure que nos garantiza el correcto funcionar de la página web, este store procedure permite mostrar las planillas de los empleados. Y se implementara o al menos se tiene planeado implementarlo en horas de la tarde o bien horas de la noche.

-Además para que la Aplicación de Escritorio funcionara de una manera correcta hizo  falta implementar nuevos store procedures como por ejemplo el SP_ExtraerCedulaAdmin. Lo que hace que hasta el momento existan 26 stored procedures.




Horas Trabajas:  5 horas

Participantes: -Jonathan Salazar
                      -Mariano Montero


Entrada 8

Acciones Realizadas:
-Luego de un extenso trabajo se logro finalizar el Store Procedure de generar planilla, un método que es de más de 250 lineas de código.

Se trabajo el método en horas no continuas, a esto nos referimos a que el metodo se realizo tanto entre semana Jueves en horas de la noche(hasta media noche) y otras horas se trabajaron por aparte (Cartago y Guanacaste) lo cual no nos pareció tan efectivo como trabajar en conjunto ya que se lograba una mejor comunicación.

En el archivo adjunto se observan los resultados de ejecutar al store Procedure en su fase inicial de elaboracion:


y aqui esta el procedure al final de ejecutarse ya con todos los cambios realizados, correcciones, modificaciones y todo el trabajo realizado:





Horas Trabajadas: 2 horas.

Participantes: Jonathan Salazar
                       Mariano Montero


jueves, 25 de septiembre de 2014

Entrada 7

Acciones Realizadas:

- Para este momento se terminó la realización de dos de los 3 archivos de prueba para el proyecto, los mismos son datosgenerales.txt y movimientos3meses.xml el archivo xml se módifico debido a que se encontraron pequeñas pulgas como por ejemplo errores al cerrar nodos entre otros.


-Se terminaron de realizar algunos stored procedures como por ejemplo LLendoMovimiento3Meses, LecturaArchivosSemanal y BorradoBase. Este ultimo, si bien es cierto no es parte inmediata de la funcionalidad del proyecto, da un valor agregado cuando se realizan modificaciones en los campos con identity.

 Ademas se trabajo en corregir ciertos problemas de la aplicación de usuario para poder hacer la aplicación más "user-friendly". 

Se inicia lo conexión de la base de datos Planillas con la aplicación de escritorio escrita en C#.

Horas Trabajadas: 2 horas


Participantes:-Mariano Montero.
                      -Jonathan Salazar.

martes, 23 de septiembre de 2014

Entrada 6

Acciones Realizadas

-Se realizó el stored procedure de lectura de archivos de movimientos de 3 meses, para el mismo se utilizan 3 tables variantes para cada tipo de movimiento(Horas Normal, Horas Extra Simple, Horas Extra doble), una vez llenas las tablas variantes se procedio a iniciar la transaccion para insertar los datos en la base de datos de manera masiva.

-Se realizó la plantilla de la página web utilizando html y como css Semantic-UI para
un diseño agradable para el usuario.Se crearon dos archivos html uno de pagina para Loggearse y el otro para realizar las consultas de las planillas del empleado. Posteriormente se utilizara php para conectar la base de datos.

-Se realizaron cambios en el modelo agregando 3 nuevas tablas para cada tipo de movimiento y la tabla de planillaXempleado, las mismas se utilizarán para resolver problemas relacionados al foreign key hacia planillaXEmpleado que estaba en cada tabla de movimiento, puesto que en el modelo original habia un problema debido a que no podian existir movimientos que no estuvieran en planilla, ademas se agrego una tabla entre archivo de datos y a tabla planilla por el mismo motivo.




Horas trabajadas: 2 horas 18 minutos

Participantes:

Mariano Montero Muñoz 
Jonathan Salazar Garcia


sábado, 6 de septiembre de 2014

Entrada 5

Fecha: 05/09/2014

Hora de inicio: 7:00pm

Hora de Fin: 9:00pm

Acciones:

- Se comenzo y termino los bosetos iniciales para la interfaz grafica de la aplicacion de escritorio para el proyecto, dicha aplicacion sera utilizada tanto como para administradores de sistemas como para administradores de empresas puesto que ambos pueden realizar modificaciones de datos importantes ya sea datos de la empresa(administrador de sistemas) como tambien modificaciones para cada empleado(administrador de empresas) , la aplicacion sera realizada realizada en el lenguaje C# , este fue utilizado por su mayor facilidad para poder conectarse con SQL SERVER, aunque por el momento solo es un "cascaron" pues aun no esta conectada con la base de datos, las imagenes de la interfaz puede ser vista en la seccion de Fotos.


- Se realizaron Todos los stored procedures que corresponden a las acciones que puede realizar un administrador de sistemas dentro de la aplicacion de escritorio, de los stored procedures creados fueron implementados con transacciones de bases de datos solo los procedures que son UPDATE de la informacion de la base, todos aquellos que son unicamente SELECT no se implementaron con transacciones y esto es debido a lo visto en clases cuando el profesor dio las instrucciones sobre cuales procedures son transaccionales y cuales no, En la seccion de Fotos se muestran los nombres de los SP que actualmente tiene la base de datos.

Fotos:
                                                                       Interfaz Grafica:










Stored Procedures hasta el momento:



Horas trabajadas:    2 horas 


Participantes:

-Jonathan Salazar Garcia
-Mariano Montero Muñoz


miércoles, 3 de septiembre de 2014

Entrada 4

Fecha: 02/09/2014

Hora de inicio: 6:00pm

Hora de Fin: 12:00 pm


Acciones:

-Se finalizo la creacion de los Archivos de prueba de la base de Datos y fueron publicados en el grupo de la clase (ver foto #1)
- Se actualizo el modelo de la base de datos  agregando la tabla de Administradores , la Tabla de estados y algunos atributos adicionales que fueron necesarios (ver foto #2)- Se realizo un store procedure para leer el archivo de datos generales que inserta los datos de manera masiva y transaccional , en la seccion Codigo se adjunta el codigo del mismo.



Fotos:

#1



#2




Codigo:

USE [Planillas]
GO
/****** Object:  StoredProcedure [dbo].[Llenado]    Script Date: 03/09/2014 11:03:32 a.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Llenado]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

    --Declaracion de Variables

DECLARE @fileName varchar(255)
DECLARE @ExecCmd varchar(255)
DECLARE @y int
DECLARE @x int 
DECLARE @fileContents varchar(MAX) 
DECLARE @Xml xml
DECLARE @tempXML TABLE (PK INT NOT NULL IDENTITY(1,1),ThisLine varchar(255) NOT NULL)
DECLARE @DatosPrueba TABLE (TipoOperacion VARCHAR(50) NOT NULL, DatosEmpresa VARCHAR (100) NOT NULL, DatosPuestos VARCHAR(100) NOT NULL,
       DatosDocId VARCHAR (50) NOT NULL, DatosValoresConfiguracion VARCHAR (100) NOT NULL, DatosTipoEmpleado VARCHAR(100) NOT NULL, DatosEmpleado VARCHAR(100) NOT NULL)
    DECLARE @start INT, @end INT   -- variables para hacer el split de las cadenas
--Set algunas variables

SET @fileName= 'C:\DatosGenerales.xml'
SET @ExecCmd= 'type '+@fileName
SET @fileContents= ''

INSERT INTO @tempXML EXEC MASTER.dbo.xp_cmdshell @ExecCmd;

SELECT @y= count(*) from @tempXML --Obtiene la cantidad de lineas del archivo

SET @x=0

while @x<>@y
BEGIN
SET @x=@x+1
SELECT @fileContents=@fileContents + ThisLine from @tempXML where PK=@x
END

SET @Xml= cast (@fileContents as XML)

INSERT INTO @DatosPrueba
SELECT
archivo.filas.value('TipoOperacion[1]','varchar(50)') AS TipoOperacion,
archivo.filas.value('DatosEmpresa[1]','varchar(100)') AS DatosEmpresa,
archivo.filas.value('DatosPuestos[1]','VARCHAR(100)') AS DatosPuestos,
archivo.filas.value('DatosDocId[1]','VARCHAR(50)') AS DatosDocId,
archivo.filas.value('DatosValoresConfiguracion[1]','VARCHAR(100)') AS DatosValoresConfiguracion,
archivo.filas.value('DatosTipoEmpleado[1]','VARCHAR(100)') AS DatosTipoEmpleado,
    archivo.filas.value('DatosEmpleado[1]','VARCHAR(100)') AS DatosEmpleado
FROM @Xml.nodes('Archivo/Fila') AS archivo(filas);

--select * from @DatosPrueba

--Declaracion de tablas temporales para cada tabla a modificar--
DECLARE @empresas Table(ID int NOT NULL identity(1,1),Nombre varchar(50) NOT NULL, DiaDeCorte varchar(10) NOT NULL,
                                       fechaCreacion date NOT NULL, UltimoCorte date NOT NULL,Activo bit NOT NULL)

DECLARE @TipoEmpleados Table(ID int NOT NULL identity(1,1),Nombre varchar(50) NOT NULL)

DECLARE @Puestos Table(ID int NOT NULL identity(1,1),Nombre varchar(50) NOT NULL,SalarioPorHora money NOT NULL)

DECLARE @TipoDocId Table(ID int NOT NULL identity(1,1),Nombre varchar(50) NOT NULL)

DECLARE @ValoresConfiguracion Table(ID int NOT NULL identity(1,1),Nombre varchar(50) NOT NULL,
                                        Tipo varchar(10) NOT NULL,Valor varchar(20) NOT NULL)

DECLARE @Empleados Table(ID int NOT NULL identity(1,1),FK_TipoEmpleado int NOT NULL,FK_TipoDocId int NOT NULL,FK_Empresa INT NOT NULL,
FK_Puesto INT NOT NULL,Nombre VARCHAR(50) NOT NULL,Identificacion VARCHAR(30) NOT NULL,
Email VARCHAR(50) NOT NULL, Usuario VARCHAR(50) NOT NULL, Contraseña VARCHAR(32) NOT NULL,
fechaContratacion date NOT NULL, activo bit NOT NULL)


--************************************************************************************************************************************
--************************************************Insercion de empresas***************************************************************
--************************************************************************************************************************************

DECLARE @empresasTemp Table(ID int NOT NULL identity(1,1),Datos varchar(MAX) NOT NULL)
DECLARE @LineaDeArchivo varchar(max)
INSERT INTO @empresasTemp (Datos) (SELECT DatosEmpresa FROM @DatosPrueba where TipoOperacion='insercionEmpresa')

set @x=0
select @y=  count(*) from @empresasTemp

DECLARE @nombre varchar(50),@DiaCorte varchar(10)
DECLARE @fecha date
    while @x<>@y
BEGIN
SET @x=@x+1
Set @LineaDeArchivo=(select Datos from @empresasTemp where ID=@x)

   set @start=3
   set @end= CHARINDEX('/', @LineaDeArchivo,@start)
   set @nombre =SUBSTRING(@LineaDeArchivo, @start, @end - @start)

SET @start = @end + 1 
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @DiaCorte= SUBSTRING(@LineaDeArchivo, @start, @end - @start)

SET @start = @end + 1 
set @fecha= CONVERT(DATE,SUBSTRING(@LineaDeArchivo, @start,  LEN(@LineaDeArchivo)))

INSERT INTO @empresas (Nombre,DiaDeCorte,fechaCreacion,UltimoCorte,Activo)  VALUES(@nombre,@DiaCorte,@fecha,@fecha,1) 
        

END

--***********************************************************************************************************************************
--************************************************Insercion de Puestos***************************************************************
--***********************************************************************************************************************************
DECLARE @puestosTemp Table(ID int NOT NULL identity(1,1),Datos varchar(MAX) NOT NULL)
INSERT INTO @puestosTemp (Datos) (SELECT DatosPuestos FROM @DatosPrueba where TipoOperacion=' insercionPuesto')
DECLARE @SalarioPorHora MONEY
set @x=0
select @y=  count(*) from @puestosTemp

    while @x<>@y
BEGIN
SET @x=@x+1
Set @LineaDeArchivo=(select Datos from @PuestosTemp where ID=@x)

   set @start=5
   set @end= CHARINDEX('/', @LineaDeArchivo,@start)
   set @nombre =SUBSTRING(@LineaDeArchivo, @start, @end - @start)

SET @start = @end + 1 
set @SalarioPorHora= CONVERT(MONEY,SUBSTRING(@LineaDeArchivo, @start,  LEN(@LineaDeArchivo)))

INSERT INTO @Puestos (Nombre,SalarioPorHora)  VALUES(@nombre,@SalarioPorHora) 
        

END
--*********************************************************************************************************************************
--**********************************************Insercion de Documentos Id*********************************************************
--*********************************************************************************************************************************
DECLARE @DocIdTemp Table(ID int NOT NULL identity(1,1),Datos varchar(MAX) NOT NULL)
INSERT INTO @DocIdTemp (Datos) (SELECT DatosDocId FROM @DatosPrueba where TipoOperacion=' insercionDocId')

set @x=0
select @y=  count(*) from @DocIdTemp

    while @x<>@y
BEGIN
SET @x=@x+1
Set @LineaDeArchivo=(select Datos from @DocIdTemp where ID=@x)

   set @start=4
set @nombre= SUBSTRING(@LineaDeArchivo, @start,  LEN(@LineaDeArchivo))

INSERT INTO @TipoDocId (Nombre)  VALUES(@nombre) 
        

END

--*********************************************************************************************************************************
--********************************************Insercion de Valor Configuracion*****************************************************
--*********************************************************************************************************************************
DECLARE @ValorConfiTemp Table(ID int NOT NULL identity(1,1),Datos varchar(MAX) NOT NULL)
INSERT INTO @ValorConfiTemp (Datos) (SELECT DatosValoresConfiguracion FROM @DatosPrueba where TipoOperacion=' insercionValorConfi')

set @x=0
select @y=  count(*) from @ValorConfiTemp
DECLARE @Tipo varchar(50), @valor varchar(50)
    while @x<>@y 
BEGIN
SET @x=@x+1
Set @LineaDeArchivo=(select Datos from @ValorConfiTemp where ID=@x)

   set @start=2
   set @end= CHARINDEX('/', @LineaDeArchivo,@start)
   set @nombre =SUBSTRING(@LineaDeArchivo, @start, @end - @start)

SET @start = @end + 1 
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @Tipo= SUBSTRING(@LineaDeArchivo, @start, @end - @start)

SET @start = @end + 1 
set @Valor= SUBSTRING(@LineaDeArchivo, @start,  LEN(@LineaDeArchivo))

INSERT INTO @ValoresConfiguracion (Nombre,Tipo,Valor)  VALUES(@nombre,@Tipo,@valor) 
        

END

--*********************************************************************************************************************************
--********************************************Insercion de Empleados***************************************************************
--*********************************************************************************************************************************
DECLARE @empleadosTemp Table(ID int NOT NULL identity(1,1),Datos varchar(MAX) NOT NULL,TIPO varchar(50) NOT NULL)
INSERT INTO @empleadosTemp (Datos,TIPO) (SELECT DatosEmpleado,DatosTipoEmpleado FROM @DatosPrueba where TipoOperacion=' insercionEmpleado')

INSERT INTO @TipoEmpleados (Nombre) 
(Select DatosTipoEmpleado from @DatosPrueba where TipoOperacion=' insercionEmpleado' group by DatosTipoEmpleado)

Declare @Cedula varchar(50), @usuario varchar(50)
Declare @FKempresa int, @FKpuesto int,@FKTipo int, @FKdoc int
DECLARE @correo varchar(50)
set @x=0
select @y=  count(*) from @empleadosTemp
    while @x<>@y
BEGIN
SET @x=@x+1
Set @LineaDeArchivo=(select Datos from @empleadosTemp where ID=@x)
set @FKTipo=(SELECT ID from @TipoEmpleados where Nombre = (select TIPO from @empleadosTemp where ID=@x))

   set @start=4
   set @end= CHARINDEX('/', @LineaDeArchivo,@start)
   set @nombre =SUBSTRING(@LineaDeArchivo, @start, @end - @start)

SET @start = @end + 1 
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @Cedula= SUBSTRING(@LineaDeArchivo, @start, @end - @start)

SET @start = @end + 1 
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @FKdoc= CONVERT(INT,SUBSTRING(@LineaDeArchivo, @start, @end - @start))

SET @start = @end + 1 
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @FKempresa= CONVERT(INT,SUBSTRING(@LineaDeArchivo, @start, @end - @start))

SET @start = @end + 1 
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @fecha= CONVERT(DATE,SUBSTRING(@LineaDeArchivo, @start, @end - @start))

SET @start = @end + 1 
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @correo= SUBSTRING(@LineaDeArchivo, @start, @end - @start)


SET @start = @end + 1 
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @FKpuesto= CONVERT(INT,SUBSTRING(@LineaDeArchivo, @start, @end - @start))

SET @start = @end + 1 
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @usuario= SUBSTRING(@LineaDeArchivo, @start, @end - @start)

SET @start = @end + 1 
set @Valor= HASHBYTES('MD5',SUBSTRING(@LineaDeArchivo, @start,  LEN(@LineaDeArchivo)))

INSERT INTO @Empleados (Nombre,Identificacion,FK_Empresa,fechaContratacion,Email,FK_Puesto,Usuario,Contraseña,FK_TipoEmpleado,FK_TipoDocId,activo)  
VALUES(@nombre,@Cedula,@FKempresa,@fecha,@correo,@FKpuesto,@usuario,@valor,@FKTipo,@FKdoc,1) 
        

END

--*********************************************************************************************************************************
--*********************************************************************************************************************************
--********************************************Inicia la Transaccion****************************************************************
--*********************************************************************************************************************************
--*********************************************************************************************************************************
-- Variables para control de transaccion
DECLARE @ErrorNumber INT, @ErrorSeverity INT, @ErrorState INT, @CustomError INT
DECLARE @Message VARCHAR(200)
DECLARE @InicieTransaccion BIT


SET @InicieTransaccion = 0 -- control de transacciones
IF @@TRANCOUNT=0 BEGIN
SET @InicieTransaccion = 1
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN TRANSACTION
END

BEGIN TRY -- control de excepciones

INSERT INTO dbo.ValoresConfiguracion (Nombre,Tipo,Valor) (SELECT Nombre,Tipo,Valor FROM @ValoresConfiguracion)

iNSERT INTO dbo.Puesto (Nombre,SalarioPorHora) (SELECT Nombre,SalarioPorHora FROM @Puestos)

iNSERT INTO dbo.TipoDocId (Nombre) (SELECT Nombre FROM @TipoDocId)

iNSERT INTO dbo.TipoEmpleado (Nombre) (SELECT Nombre FROM @TipoEmpleados)

INSERT INTO dbo.Empresa (Nombre,fechaCreacion,UltimoCorte,DiaDeCorte,Activo)
                             (Select Nombre,fechaCreacion,UltimoCorte,DiaDeCorte,Activo FROM @empresas)

INSERT INTO dbo.Empleado (FK_Empresa,FK_Puesto,FK_TipoDocId,FK_TipoEmpleado,Nombre,Identificacion,fechaContratacion,Email,Usuario,Contraseña,activo)
          (Select FK_Empresa,FK_Puesto,FK_TipoDocId,FK_TipoEmpleado,Nombre,Identificacion,fechaContratacion,Email,Usuario,Contraseña,activo
           from @Empleados)


IF @InicieTransaccion=1 BEGIN
COMMIT
END
END TRY
BEGIN CATCH
SET @ErrorNumber = ERROR_NUMBER()
SET @ErrorSeverity = ERROR_SEVERITY()
SET @ErrorState = ERROR_STATE()
SET @Message = ERROR_MESSAGE()

IF @InicieTransaccion=1 BEGIN
ROLLBACK
END
RAISERROR('%s - Error Number: %i', 
@ErrorSeverity, @ErrorState, @Message, @CustomError)
END CATCH

END


Horas trabajadas:    6 horas 


Participantes:

-Jonathan Salazar Garcia
-Mariano Montero Muñoz