using System;
using System.Data;
using System.Data.SqlClient;

using Municipalidad.Utils;
using Remuneraciones.DataModel;
using Remuneraciones.SingleObjects;
using Remuneraciones.DataSetFT;

namespace Remuneraciones.DataAccess
{
	public abstract class TrabajadorCRUD
	{
		//Field para almacenar la conexión
		private SqlConnection _connection = null;
		private SqlTransaction _transaction = null;

		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="connection"></param>
		public TrabajadorCRUD(SqlConnection connection)
		{
			_connection = connection;
		}

		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="transaction"></param>
		public TrabajadorCRUD(SqlTransaction transaction)
		{
			_transaction = transaction;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSTrabajador SelectAll()
		{
			//Almacena retorno del SqlCommand
			SqlDataReader dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataReader(_connection, CommandType.StoredProcedure, Schema.Trabajador.SP_SELECT_ALL, null);
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFT(dr);
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="idNumero"></param>
		/// <param name="mes"></param>
		/// <param name="idTrabajador"></param>
		/// <returns></returns>
		public DSTrabajador SelectByID(string idNumero, short mes, string idTrabajador)
		{
			//Almacena retorno del SqlCommand
			SqlDataReader dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataReader(_connection, CommandType.StoredProcedure, Schema.Trabajador.SP_SELECT_BY_PK, 
					UtilsDB.MP("@IdNumero", SqlDbType.Char, 3, idNumero),
					UtilsDB.MP("@mes", SqlDbType.SmallInt, 0, mes),
					UtilsDB.MP("@idTrabajador", SqlDbType.Char, 8, idTrabajador));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFT(dr);
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="trabajador"></param>
		/// <returns></returns>
		public int Insert(SglTrabajador trabajador)
		{
			return Save(trabajador);
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="trabajador"></param>
		public void Update(SglTrabajador trabajador)
		{
			Save(trabajador);
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="idNumero"></param>
		/// <param name="mes"></param>
		/// <param name="idTrabajador"></param>
		public void Delete(string idNumero, short mes, string idTrabajador)
		{
			try
			{
				//Ejecuta el SqlCommand
				UtilsDB.ExecuteNonQueryReturn(_transaction, CommandType.StoredProcedure, Schema.Trabajador.SP_DELETE, 
					UtilsDB.MP("@IdNumero", SqlDbType.Char, 3, idNumero),
					UtilsDB.MP("@mes", SqlDbType.SmallInt, 0, mes),
					UtilsDB.MP("@idTrabajador", SqlDbType.BigInt, 8, idTrabajador));
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="trabajador"></param>
		/// <returns></returns>
		private int Save(SglTrabajador trabajador)
		{
			//Almacena retorno del SqlCommand
			int retval;

			try
			{
				//Ejecuta el SqlCommand
				retval = UtilsDB.ExecuteNonQueryReturn(_transaction, CommandType.StoredProcedure, Schema.Trabajador.SP_INSERT, 
					UtilsDB.MP("@IdNumero", SqlDbType.Char, 3, trabajador.IdNumero), 
					UtilsDB.MP("@Mes", SqlDbType.SmallInt, 0, trabajador.Mes), 
					UtilsDB.MP("@IdTrabajador", SqlDbType.Char, 8, trabajador.IdTrabajador), 
					UtilsDB.MP("@idCargo", SqlDbType.Char, 3, trabajador.idCargo), 
					UtilsDB.MP("@idPais", SqlDbType.Int, 0, (trabajador.idPais == int.MinValue? (object)null: trabajador.idPais)), 
					UtilsDB.MP("@idSucursal", SqlDbType.Char, 3, trabajador.idSucursal), 
					UtilsDB.MP("@idAfp", SqlDbType.Char, 4, trabajador.idAfp), 
					UtilsDB.MP("@IdAfpInp", SqlDbType.Char, 4, trabajador.IdAfpInp), 
					UtilsDB.MP("@IdIsapre", SqlDbType.Char, 4, trabajador.IdIsapre), 
					UtilsDB.MP("@idHorario", SqlDbType.Char, 3, trabajador.idHorario), 
					UtilsDB.MP("@idCentro", SqlDbType.Char, 5, trabajador.idCentro), 
					UtilsDB.MP("@IdUnidad", SqlDbType.Char, 3, trabajador.IdUnidad), 
					UtilsDB.MP("@idSindicatos", SqlDbType.Char, 3, trabajador.idSindicatos), 
					UtilsDB.MP("@Nombre", SqlDbType.VarChar, 30, trabajador.Nombre), 
					UtilsDB.MP("@Paterno", SqlDbType.VarChar, 20, trabajador.Paterno), 
					UtilsDB.MP("@Materno", SqlDbType.VarChar, 20, trabajador.Materno), 
					UtilsDB.MP("@Rut", SqlDbType.Int, 0, (trabajador.Rut == int.MinValue? (object)null: trabajador.Rut)), 
					UtilsDB.MP("@Dv", SqlDbType.Char, 1, trabajador.Dv), 
					UtilsDB.MP("@Direccion", SqlDbType.VarChar, 50, trabajador.Direccion), 
					UtilsDB.MP("@Mail", SqlDbType.VarChar, 100, trabajador.Mail), 
					UtilsDB.MP("@IdComuna", SqlDbType.VarChar, 3, trabajador.IdComuna), 
					UtilsDB.MP("@EstadoCivil", SqlDbType.TinyInt, 0, (trabajador.EstadoCivil == byte.MinValue? (object)null: trabajador.EstadoCivil)), 
					UtilsDB.MP("@Nacionalidad", SqlDbType.Bit, 0, trabajador.Nacionalidad), 
					UtilsDB.MP("@HoraEntrada", SqlDbType.DateTime, 0, (trabajador.HoraEntrada == DateTime.MinValue? (object)null: trabajador.HoraEntrada)), 
					UtilsDB.MP("@HoraSalida", SqlDbType.DateTime, 0, (trabajador.HoraSalida == DateTime.MinValue? (object)null: trabajador.HoraSalida)), 
					UtilsDB.MP("@TiempoColacion", SqlDbType.DateTime, 0, (trabajador.TiempoColacion == DateTime.MinValue? (object)null: trabajador.TiempoColacion)), 
					UtilsDB.MP("@Telefono", SqlDbType.VarChar, 30, trabajador.Telefono), 
					UtilsDB.MP("@AfpIndemnizacion", SqlDbType.Char, 4, trabajador.AfpIndemnizacion), 
					UtilsDB.MP("@AportIndemnizacion", SqlDbType.Bit, 0, trabajador.AportIndemnizacion), 
					UtilsDB.MP("@TipoSueldo", SqlDbType.TinyInt, 0, (trabajador.TipoSueldo == byte.MinValue? (object)null: trabajador.TipoSueldo)), 
					UtilsDB.MP("@TipoContrato", SqlDbType.TinyInt, 0, (trabajador.TipoContrato == byte.MinValue? (object)null: trabajador.TipoContrato)), 
					UtilsDB.MP("@CalculoSueldo", SqlDbType.Bit, 0, trabajador.CalculoSueldo), 
					UtilsDB.MP("@Profesion", SqlDbType.VarChar, 40, trabajador.Profesion), 
					UtilsDB.MP("@Sexo", SqlDbType.Bit, 0, trabajador.Sexo), 
					UtilsDB.MP("@FecNaci", SqlDbType.DateTime, 0, (trabajador.FecNaci == DateTime.MinValue? (object)null: trabajador.FecNaci)), 
					UtilsDB.MP("@FecIng", SqlDbType.DateTime, 0, (trabajador.FecIng == DateTime.MinValue? (object)null: trabajador.FecIng)), 
					UtilsDB.MP("@FecReconoce", SqlDbType.DateTime, 0, (trabajador.FecReconoce == DateTime.MinValue? (object)null: trabajador.FecReconoce)), 
					UtilsDB.MP("@FechaTermino", SqlDbType.DateTime, 0, (trabajador.FechaTermino == DateTime.MinValue? (object)null: trabajador.FechaTermino)), 
					UtilsDB.MP("@ModoApv", SqlDbType.SmallInt, 0, (trabajador.ModoApv == short.MinValue? (object)null: trabajador.ModoApv)), 
					UtilsDB.MP("@MontoApv", SqlDbType.Float, 0, (trabajador.MontoApv == double.MinValue? (object)null: trabajador.MontoApv)), 
					UtilsDB.MP("@ModoAhorro", SqlDbType.SmallInt, 0, (trabajador.ModoAhorro == short.MinValue? (object)null: trabajador.ModoAhorro)), 
					UtilsDB.MP("@MontoAhorro", SqlDbType.Float, 0, (trabajador.MontoAhorro == double.MinValue? (object)null: trabajador.MontoAhorro)), 
					UtilsDB.MP("@Jubilado", SqlDbType.Bit, 0, trabajador.Jubilado), 
					UtilsDB.MP("@ModoPactado", SqlDbType.SmallInt, 0, (trabajador.ModoPactado == short.MinValue? (object)null: trabajador.ModoPactado)), 
					UtilsDB.MP("@MontoPactado", SqlDbType.Float, 0, (trabajador.MontoPactado == double.MinValue? (object)null: trabajador.MontoPactado)), 
					UtilsDB.MP("@ModoCotiAdicional", SqlDbType.SmallInt, 0, (trabajador.ModoCotiAdicional == short.MinValue? (object)null: trabajador.ModoCotiAdicional)), 
					UtilsDB.MP("@MontoCotAdicional", SqlDbType.Float, 0, (trabajador.MontoCotAdicional == double.MinValue? (object)null: trabajador.MontoCotAdicional)), 
					UtilsDB.MP("@ModoLey18566", SqlDbType.SmallInt, 0, (trabajador.ModoLey18566 == short.MinValue? (object)null: trabajador.ModoLey18566)), 
					UtilsDB.MP("@MontoLey18566", SqlDbType.Float, 0, (trabajador.MontoLey18566 == double.MinValue? (object)null: trabajador.MontoLey18566)), 
					UtilsDB.MP("@ModoSueldo", SqlDbType.TinyInt, 0, (trabajador.ModoSueldo == byte.MinValue? (object)null: trabajador.ModoSueldo)), 
					UtilsDB.MP("@MontoSueldo", SqlDbType.Float, 0, (trabajador.MontoSueldo == double.MinValue? (object)null: trabajador.MontoSueldo)), 
					UtilsDB.MP("@SueldoBase", SqlDbType.Int, 0, (trabajador.SueldoBase == int.MinValue? (object)null: trabajador.SueldoBase)), 
					UtilsDB.MP("@Colacion", SqlDbType.Int, 0, (trabajador.Colacion == int.MinValue? (object)null: trabajador.Colacion)), 
					UtilsDB.MP("@Movilizacion", SqlDbType.Int, 0, (trabajador.Movilizacion == int.MinValue? (object)null: trabajador.Movilizacion)), 
					UtilsDB.MP("@TipoGratificacion", SqlDbType.SmallInt, 0, (trabajador.TipoGratificacion == short.MinValue? (object)null: trabajador.TipoGratificacion)), 
					UtilsDB.MP("@MontoGratificacion", SqlDbType.Int, 0, (trabajador.MontoGratificacion == int.MinValue? (object)null: trabajador.MontoGratificacion)), 
					UtilsDB.MP("@TramoCargas", SqlDbType.TinyInt, 0, (trabajador.TramoCargas == byte.MinValue? (object)null: trabajador.TramoCargas)), 
					UtilsDB.MP("@Cargas", SqlDbType.SmallInt, 0, (trabajador.Cargas == short.MinValue? (object)null: trabajador.Cargas)), 
					UtilsDB.MP("@CargasInvalides", SqlDbType.SmallInt, 0, (trabajador.CargasInvalides == short.MinValue? (object)null: trabajador.CargasInvalides)), 
					UtilsDB.MP("@CargasMaternales", SqlDbType.Bit, 0, trabajador.CargasMaternales), 
					UtilsDB.MP("@CargasRetroactivas", SqlDbType.SmallInt, 0, (trabajador.CargasRetroactivas == short.MinValue? (object)null: trabajador.CargasRetroactivas)), 
					UtilsDB.MP("@MontoRetroactivas", SqlDbType.Int, 0, (trabajador.MontoRetroactivas == int.MinValue? (object)null: trabajador.MontoRetroactivas)), 
					UtilsDB.MP("@Ley19404", SqlDbType.Bit, 0, trabajador.Ley19404), 
					UtilsDB.MP("@SeguroCesantia", SqlDbType.Bit, 0, trabajador.SeguroCesantia), 
					UtilsDB.MP("@MovimientoAfp", SqlDbType.SmallInt, 0, (trabajador.MovimientoAfp == short.MinValue? (object)null: trabajador.MovimientoAfp)), 
					UtilsDB.MP("@MovimientoIsapre", SqlDbType.SmallInt, 0, (trabajador.MovimientoIsapre == short.MinValue? (object)null: trabajador.MovimientoIsapre)), 
					UtilsDB.MP("@ProporcionarIsapre", SqlDbType.Bit, 0, trabajador.ProporcionarIsapre), 
					UtilsDB.MP("@Fun", SqlDbType.Char, 10, trabajador.Fun), 
					UtilsDB.MP("@ImpoLicencia", SqlDbType.Int, 0, (trabajador.ImpoLicencia == int.MinValue? (object)null: trabajador.ImpoLicencia)), 
					UtilsDB.MP("@Error", SqlDbType.TinyInt, 0, (trabajador.Error == byte.MinValue? (object)null: trabajador.Error)), 
					UtilsDB.MP("@Activo", SqlDbType.Bit, 0, trabajador.Activo), 
					UtilsDB.MP("@IdUser", SqlDbType.Char, 10, trabajador.IdUser), 
					UtilsDB.MP("@Foto", SqlDbType.Image, 0, trabajador.Foto), 
					UtilsDB.MP("@IdCtaContable", SqlDbType.VarChar, 7, trabajador.IdCtaContable), 
					UtilsDB.MP("@Unidad", SqlDbType.VarChar, 3, trabajador.Unidad), 
					UtilsDB.MP("@Centro", SqlDbType.VarChar, 5, trabajador.Centro));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return retval;
		}

		/// <summary>
		/// Genera un DataSet fuertemente tipeado desde un DataReader
		/// </summary>
		/// <param name="dr">Objeto DataReader con datos para llenar el DataSet</param>
		/// <returns>DataSet fuertemente tipeado</returns>
		internal DSTrabajador GetDSFT(SqlDataReader dr)
		{
			DSTrabajador DSFTTrabajador = new DSTrabajador();
			DSTrabajador.TrabajadorRow rowTrabajador;

			while (dr.Read())
			{
				rowTrabajador = DSFTTrabajador.Trabajador.NewTrabajadorRow();
				rowTrabajador.IdNumero = dr.IsDBNull(dr.GetOrdinal("IdNumero")) ? "": dr.GetString(dr.GetOrdinal("IdNumero"));
				rowTrabajador.Mes = dr.IsDBNull(dr.GetOrdinal("Mes")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("Mes"));
				rowTrabajador.IdTrabajador = dr.IsDBNull(dr.GetOrdinal("IdTrabajador")) ? "": dr.GetString(dr.GetOrdinal("IdTrabajador"));
				rowTrabajador.idCargo = dr.IsDBNull(dr.GetOrdinal("idCargo")) ? "": dr.GetString(dr.GetOrdinal("idCargo"));
				rowTrabajador.idPais = dr.IsDBNull(dr.GetOrdinal("idPais")) ? int.MinValue: dr.GetInt32(dr.GetOrdinal("idPais"));
				rowTrabajador.idSucursal = dr.IsDBNull(dr.GetOrdinal("idSucursal")) ? "": dr.GetString(dr.GetOrdinal("idSucursal"));
				rowTrabajador.idAfp = dr.IsDBNull(dr.GetOrdinal("idAfp")) ? "": dr.GetString(dr.GetOrdinal("idAfp"));
				rowTrabajador.IdAfpInp = dr.IsDBNull(dr.GetOrdinal("IdAfpInp")) ? "": dr.GetString(dr.GetOrdinal("IdAfpInp"));
				rowTrabajador.IdIsapre = dr.IsDBNull(dr.GetOrdinal("IdIsapre")) ? "": dr.GetString(dr.GetOrdinal("IdIsapre"));
				rowTrabajador.idHorario = dr.IsDBNull(dr.GetOrdinal("idHorario")) ? "": dr.GetString(dr.GetOrdinal("idHorario"));
				rowTrabajador.idCentro = dr.IsDBNull(dr.GetOrdinal("idCentro")) ? "": dr.GetString(dr.GetOrdinal("idCentro"));
				rowTrabajador.IdUnidad = dr.IsDBNull(dr.GetOrdinal("IdUnidad")) ? "": dr.GetString(dr.GetOrdinal("IdUnidad"));
				rowTrabajador.idSindicatos = dr.IsDBNull(dr.GetOrdinal("idSindicatos")) ? "": dr.GetString(dr.GetOrdinal("idSindicatos"));
				rowTrabajador.Nombre = dr.IsDBNull(dr.GetOrdinal("Nombre")) ? "": dr.GetString(dr.GetOrdinal("Nombre"));
				rowTrabajador.Paterno = dr.IsDBNull(dr.GetOrdinal("Paterno")) ? "": dr.GetString(dr.GetOrdinal("Paterno"));
				rowTrabajador.Materno = dr.IsDBNull(dr.GetOrdinal("Materno")) ? "": dr.GetString(dr.GetOrdinal("Materno"));
				rowTrabajador.Rut = dr.IsDBNull(dr.GetOrdinal("Rut")) ? int.MinValue: dr.GetInt32(dr.GetOrdinal("Rut"));
				rowTrabajador.Dv = dr.IsDBNull(dr.GetOrdinal("Dv")) ? "": dr.GetString(dr.GetOrdinal("Dv"));
				rowTrabajador.Direccion = dr.IsDBNull(dr.GetOrdinal("Direccion")) ? "": dr.GetString(dr.GetOrdinal("Direccion"));
				rowTrabajador.Mail = dr.IsDBNull(dr.GetOrdinal("Mail")) ? "": dr.GetString(dr.GetOrdinal("Mail"));
				rowTrabajador.IdComuna = dr.IsDBNull(dr.GetOrdinal("IdComuna")) ? "": dr.GetString(dr.GetOrdinal("IdComuna"));
				rowTrabajador.EstadoCivil = dr.IsDBNull(dr.GetOrdinal("EstadoCivil")) ? byte.MinValue: dr.GetByte(dr.GetOrdinal("EstadoCivil"));
				rowTrabajador.Nacionalidad = dr.IsDBNull(dr.GetOrdinal("Nacionalidad")) ? false: dr.GetBoolean(dr.GetOrdinal("Nacionalidad"));
				rowTrabajador.HoraEntrada = dr.IsDBNull(dr.GetOrdinal("HoraEntrada")) ? DateTime.MinValue: dr.GetDateTime(dr.GetOrdinal("HoraEntrada"));
				rowTrabajador.HoraSalida = dr.IsDBNull(dr.GetOrdinal("HoraSalida")) ? DateTime.MinValue: dr.GetDateTime(dr.GetOrdinal("HoraSalida"));
				rowTrabajador.TiempoColacion = dr.IsDBNull(dr.GetOrdinal("TiempoColacion")) ? DateTime.MinValue: dr.GetDateTime(dr.GetOrdinal("TiempoColacion"));
				rowTrabajador.Telefono = dr.IsDBNull(dr.GetOrdinal("Telefono")) ? "": dr.GetString(dr.GetOrdinal("Telefono"));
				rowTrabajador.AfpIndemnizacion = dr.IsDBNull(dr.GetOrdinal("AfpIndemnizacion")) ? "": dr.GetString(dr.GetOrdinal("AfpIndemnizacion"));
				rowTrabajador.AportIndemnizacion = dr.IsDBNull(dr.GetOrdinal("AportIndemnizacion")) ? false: dr.GetBoolean(dr.GetOrdinal("AportIndemnizacion"));
				rowTrabajador.TipoSueldo = dr.IsDBNull(dr.GetOrdinal("TipoSueldo")) ? byte.MinValue: dr.GetByte(dr.GetOrdinal("TipoSueldo"));
				rowTrabajador.TipoContrato = dr.IsDBNull(dr.GetOrdinal("TipoContrato")) ? byte.MinValue: dr.GetByte(dr.GetOrdinal("TipoContrato"));
				rowTrabajador.CalculoSueldo = dr.IsDBNull(dr.GetOrdinal("CalculoSueldo")) ? false: dr.GetBoolean(dr.GetOrdinal("CalculoSueldo"));
				rowTrabajador.Profesion = dr.IsDBNull(dr.GetOrdinal("Profesion")) ? "": dr.GetString(dr.GetOrdinal("Profesion"));
				rowTrabajador.Sexo = dr.IsDBNull(dr.GetOrdinal("Sexo")) ? false: dr.GetBoolean(dr.GetOrdinal("Sexo"));
				rowTrabajador.FecNaci = dr.IsDBNull(dr.GetOrdinal("FecNaci")) ? DateTime.MinValue: dr.GetDateTime(dr.GetOrdinal("FecNaci"));
				rowTrabajador.FecIng = dr.IsDBNull(dr.GetOrdinal("FecIng")) ? DateTime.MinValue: dr.GetDateTime(dr.GetOrdinal("FecIng"));
				rowTrabajador.FecReconoce = dr.IsDBNull(dr.GetOrdinal("FecReconoce")) ? DateTime.MinValue: dr.GetDateTime(dr.GetOrdinal("FecReconoce"));
				rowTrabajador.FechaTermino = dr.IsDBNull(dr.GetOrdinal("FechaTermino")) ? DateTime.MinValue: dr.GetDateTime(dr.GetOrdinal("FechaTermino"));
				rowTrabajador.ModoApv = dr.IsDBNull(dr.GetOrdinal("ModoApv")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("ModoApv"));
				rowTrabajador.MontoApv = dr.IsDBNull(dr.GetOrdinal("MontoApv")) ? double.MinValue: dr.GetDouble(dr.GetOrdinal("MontoApv"));
				rowTrabajador.ModoAhorro = dr.IsDBNull(dr.GetOrdinal("ModoAhorro")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("ModoAhorro"));
				rowTrabajador.MontoAhorro = dr.IsDBNull(dr.GetOrdinal("MontoAhorro")) ? double.MinValue: dr.GetDouble(dr.GetOrdinal("MontoAhorro"));
				rowTrabajador.Jubilado = dr.IsDBNull(dr.GetOrdinal("Jubilado")) ? false: dr.GetBoolean(dr.GetOrdinal("Jubilado"));
				rowTrabajador.ModoPactado = dr.IsDBNull(dr.GetOrdinal("ModoPactado")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("ModoPactado"));
				rowTrabajador.MontoPactado = dr.IsDBNull(dr.GetOrdinal("MontoPactado")) ? double.MinValue: dr.GetDouble(dr.GetOrdinal("MontoPactado"));
				rowTrabajador.ModoCotiAdicional = dr.IsDBNull(dr.GetOrdinal("ModoCotiAdicional")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("ModoCotiAdicional"));
				rowTrabajador.MontoCotAdicional = dr.IsDBNull(dr.GetOrdinal("MontoCotAdicional")) ? double.MinValue: dr.GetDouble(dr.GetOrdinal("MontoCotAdicional"));
				rowTrabajador.ModoLey18566 = dr.IsDBNull(dr.GetOrdinal("ModoLey18566")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("ModoLey18566"));
				rowTrabajador.MontoLey18566 = dr.IsDBNull(dr.GetOrdinal("MontoLey18566")) ? double.MinValue: dr.GetDouble(dr.GetOrdinal("MontoLey18566"));
				rowTrabajador.ModoSueldo = dr.IsDBNull(dr.GetOrdinal("ModoSueldo")) ? byte.MinValue: dr.GetByte(dr.GetOrdinal("ModoSueldo"));
				rowTrabajador.MontoSueldo = dr.IsDBNull(dr.GetOrdinal("MontoSueldo")) ? double.MinValue: dr.GetDouble(dr.GetOrdinal("MontoSueldo"));
				rowTrabajador.SueldoBase = dr.IsDBNull(dr.GetOrdinal("SueldoBase")) ? int.MinValue: dr.GetInt32(dr.GetOrdinal("SueldoBase"));
				rowTrabajador.Colacion = dr.IsDBNull(dr.GetOrdinal("Colacion")) ? int.MinValue: dr.GetInt32(dr.GetOrdinal("Colacion"));
				rowTrabajador.Movilizacion = dr.IsDBNull(dr.GetOrdinal("Movilizacion")) ? int.MinValue: dr.GetInt32(dr.GetOrdinal("Movilizacion"));
				rowTrabajador.TipoGratificacion = dr.IsDBNull(dr.GetOrdinal("TipoGratificacion")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("TipoGratificacion"));
				rowTrabajador.MontoGratificacion = dr.IsDBNull(dr.GetOrdinal("MontoGratificacion")) ? int.MinValue: dr.GetInt32(dr.GetOrdinal("MontoGratificacion"));
				rowTrabajador.TramoCargas = dr.IsDBNull(dr.GetOrdinal("TramoCargas")) ? byte.MinValue: dr.GetByte(dr.GetOrdinal("TramoCargas"));
				rowTrabajador.Cargas = dr.IsDBNull(dr.GetOrdinal("Cargas")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("Cargas"));
				rowTrabajador.CargasInvalides = dr.IsDBNull(dr.GetOrdinal("CargasInvalides")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("CargasInvalides"));
				rowTrabajador.CargasMaternales = dr.IsDBNull(dr.GetOrdinal("CargasMaternales")) ? false: dr.GetBoolean(dr.GetOrdinal("CargasMaternales"));
				rowTrabajador.CargasRetroactivas = dr.IsDBNull(dr.GetOrdinal("CargasRetroactivas")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("CargasRetroactivas"));
				rowTrabajador.MontoRetroactivas = dr.IsDBNull(dr.GetOrdinal("MontoRetroactivas")) ? int.MinValue: dr.GetInt32(dr.GetOrdinal("MontoRetroactivas"));
				rowTrabajador.Ley19404 = dr.IsDBNull(dr.GetOrdinal("Ley19404")) ? false: dr.GetBoolean(dr.GetOrdinal("Ley19404"));
				rowTrabajador.SeguroCesantia = dr.IsDBNull(dr.GetOrdinal("SeguroCesantia")) ? false: dr.GetBoolean(dr.GetOrdinal("SeguroCesantia"));
				rowTrabajador.MovimientoAfp = dr.IsDBNull(dr.GetOrdinal("MovimientoAfp")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("MovimientoAfp"));
				rowTrabajador.MovimientoIsapre = dr.IsDBNull(dr.GetOrdinal("MovimientoIsapre")) ? short.MinValue: dr.GetInt16(dr.GetOrdinal("MovimientoIsapre"));
				rowTrabajador.ProporcionarIsapre = dr.IsDBNull(dr.GetOrdinal("ProporcionarIsapre")) ? false: dr.GetBoolean(dr.GetOrdinal("ProporcionarIsapre"));
				rowTrabajador.Fun = dr.IsDBNull(dr.GetOrdinal("Fun")) ? "": dr.GetString(dr.GetOrdinal("Fun"));
				rowTrabajador.ImpoLicencia = dr.IsDBNull(dr.GetOrdinal("ImpoLicencia")) ? int.MinValue: dr.GetInt32(dr.GetOrdinal("ImpoLicencia"));
				rowTrabajador.Error = dr.IsDBNull(dr.GetOrdinal("Error")) ? byte.MinValue: dr.GetByte(dr.GetOrdinal("Error"));
				rowTrabajador.Activo = dr.IsDBNull(dr.GetOrdinal("Activo")) ? false: dr.GetBoolean(dr.GetOrdinal("Activo"));
				rowTrabajador.IdUser = dr.IsDBNull(dr.GetOrdinal("IdUser")) ? "": dr.GetString(dr.GetOrdinal("IdUser"));
				//rowTrabajador.Foto = dr.IsDBNull(dr.GetOrdinal("Foto")) ? null: dr.GetSqlBinary(dr.GetOrdinal("Foto"));
				rowTrabajador.IdCtaContable = dr.IsDBNull(dr.GetOrdinal("IdCtaContable")) ? "": dr.GetString(dr.GetOrdinal("IdCtaContable"));
				rowTrabajador.Unidad = dr.IsDBNull(dr.GetOrdinal("Unidad")) ? "": dr.GetString(dr.GetOrdinal("Unidad"));
				rowTrabajador.Centro = dr.IsDBNull(dr.GetOrdinal("Centro")) ? "": dr.GetString(dr.GetOrdinal("Centro"));
				DSFTTrabajador.Trabajador.AddTrabajadorRow(rowTrabajador);
			}

			dr.Close();

			return DSFTTrabajador;
		}
	}
}