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

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

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

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

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

		#region ResumenPrevisional

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSResumenPrevisional ListadoResumenPrevisional(string idEmpresa,
															int Mes,
															string SucursalIni,
															string SucursalFin,
															string TrabajadorIni,
															string TrabajadorFin,
															string UnidadIni,
															string UnidadFin,
															int SEmp,
															string CentroIni,
															string CentroFin)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_RESUMEN_PREVISIONAL, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)),
					UtilsDB.MP("@idSucursalIni", SqlDbType.VarChar, 3, (SucursalIni == ""? null: SucursalIni)),
					UtilsDB.MP("@idSucursalFin", SqlDbType.VarChar, 3, (SucursalFin == ""? null: SucursalFin)),
					UtilsDB.MP("@TrabajadorIni", SqlDbType.VarChar, 8, (TrabajadorIni == ""? null: TrabajadorIni)),
					UtilsDB.MP("@TrabajadorFin", SqlDbType.VarChar, 8, (TrabajadorFin == ""? null: TrabajadorFin)),
					UtilsDB.MP("@UnidadIni", SqlDbType.VarChar, 3, (UnidadIni == ""? null: UnidadIni)),
					UtilsDB.MP("@UnidadFin", SqlDbType.VarChar, 3, (UnidadFin == ""? null: UnidadFin)),
					UtilsDB.MP("@SEmp", SqlDbType.Int, 0, (SEmp == int.MinValue? (object)null: SEmp)),
					UtilsDB.MP("@CentroIni", SqlDbType.VarChar, 5, (CentroIni == ""? null: CentroIni)),
					UtilsDB.MP("@CentroFin", SqlDbType.VarChar, 5, (CentroFin == ""? null: CentroFin)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTResumenPrevisional(dr);
		}

		internal DSResumenPrevisional GetDSFTResumenPrevisional(DataSet ds)
		{
			DSResumenPrevisional DSFT = new DSResumenPrevisional();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}
		#endregion

		#region Liquidaciones

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DataSet Depositos(string idEmpresa,
								int Mes,
								string idTrabajador)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.Text, "select * from uFn_LiquidacionCtasCorrientes(@idNumero, @Mes, @idTrabajador)", 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)),
					UtilsDB.MP("@idTrabajador", SqlDbType.VarChar, 8, (idTrabajador== ""? null: idTrabajador)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return dr;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSLiquidaciones ListadoLiquidaciones(string idEmpresa,
														int Mes,
														string SucursalIni,
														string SucursalFin,
														string TrabajadorIni,
														string TrabajadorFin,
														string UnidadIni,
														string UnidadFin,
														string CentroIni,
														string CentroFin,
														int Ano)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_LIQUIDACIONES, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)),
					UtilsDB.MP("@idSucursalIni", SqlDbType.VarChar, 3, (SucursalIni == ""? null: SucursalIni)),
					UtilsDB.MP("@idSucursalFin", SqlDbType.VarChar, 3, (SucursalFin == ""? null: SucursalFin)),
					UtilsDB.MP("@TrabajadorIni", SqlDbType.VarChar, 8, (TrabajadorIni == ""? null: TrabajadorIni)),
					UtilsDB.MP("@TrabajadorFin", SqlDbType.VarChar, 8, (TrabajadorFin == ""? null: TrabajadorFin)),
					UtilsDB.MP("@UnidadIni", SqlDbType.VarChar, 3, (UnidadIni == ""? null: UnidadIni)),
					UtilsDB.MP("@UnidadFin", SqlDbType.VarChar, 3, (UnidadFin == ""? null: UnidadFin)),
					UtilsDB.MP("@CentroIni", SqlDbType.VarChar, 5, (CentroIni == ""? null: CentroIni)),
					UtilsDB.MP("@CentroFin", SqlDbType.VarChar, 5, (CentroFin == ""? null: CentroFin)),
					UtilsDB.MP("@Ano", SqlDbType.Int, 0, (Ano == int.MinValue? (object)null: Ano)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTLiquidaciones(dr);
		}

		internal DSLiquidaciones GetDSFTLiquidaciones(DataSet ds)
		{
			DSLiquidaciones DSFT = new DSLiquidaciones();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}

		#endregion

		#region LibroRemuneracion

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSLibroRemuneraciones ListadoLibroRemuneraciones(string idEmpresa,
															int Mes,
															string SucursalIni,
															string SucursalFin,
															string TrabajadorIni,
															string TrabajadorFin,
															string UnidadIni,
															string UnidadFin,
															int SEmp,
															string CentroIni,
															string CentroFin,
															int Ano)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_LIBROREMUNERACION, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)),
					UtilsDB.MP("@idSucursalIni", SqlDbType.VarChar, 3, (SucursalIni == ""? null: SucursalIni)),
					UtilsDB.MP("@idSucursalFin", SqlDbType.VarChar, 3, (SucursalFin == ""? null: SucursalFin)),
					UtilsDB.MP("@TrabajadorIni", SqlDbType.VarChar, 8, (TrabajadorIni == ""? null: TrabajadorIni)),
					UtilsDB.MP("@TrabajadorFin", SqlDbType.VarChar, 8, (TrabajadorFin == ""? null: TrabajadorFin)),
					UtilsDB.MP("@UnidadIni", SqlDbType.VarChar, 3, (UnidadIni == ""? null: UnidadIni)),
					UtilsDB.MP("@UnidadFin", SqlDbType.VarChar, 3, (UnidadFin == ""? null: UnidadFin)),
					UtilsDB.MP("@SEmp", SqlDbType.Int, 0, SEmp),
					UtilsDB.MP("@CentroIni", SqlDbType.VarChar, 5, (CentroIni == ""? null: CentroIni)),
					UtilsDB.MP("@CentroFin", SqlDbType.VarChar, 5, (CentroFin == ""? null: CentroFin)),
				UtilsDB.MP("@Ano", SqlDbType.Int, 0, (Ano == int.MinValue? (object)null: Ano)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTLibroReumeracion(dr);
		}

		internal DSLibroRemuneraciones GetDSFTLibroReumeracion(DataSet ds)
		{
			DSLibroRemuneraciones DSFT = new DSLibroRemuneraciones();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSLibroRemuneracionesExcel ListadoLibroRemuneracionesExcel(string idEmpresa,
			int Mes,
			string SucursalIni,
			string SucursalFin,
			string TrabajadorIni,
			string TrabajadorFin,
			string UnidadIni,
			string UnidadFin,
			int SEmp,
			string CentroIni,
			string CentroFin,
			int Ano)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_LIBROREMUNERACION_EXCEL, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)),
					UtilsDB.MP("@idSucursalIni", SqlDbType.VarChar, 3, (SucursalIni == ""? null: SucursalIni)),
					UtilsDB.MP("@idSucursalFin", SqlDbType.VarChar, 3, (SucursalFin == ""? null: SucursalFin)),
					UtilsDB.MP("@TrabajadorIni", SqlDbType.VarChar, 8, (TrabajadorIni == ""? null: TrabajadorIni)),
					UtilsDB.MP("@TrabajadorFin", SqlDbType.VarChar, 8, (TrabajadorFin == ""? null: TrabajadorFin)),
					UtilsDB.MP("@UnidadIni", SqlDbType.VarChar, 3, (UnidadIni == ""? null: UnidadIni)),
					UtilsDB.MP("@UnidadFin", SqlDbType.VarChar, 3, (UnidadFin == ""? null: UnidadFin)),
					UtilsDB.MP("@SEmp", SqlDbType.Int, 0, SEmp),
					UtilsDB.MP("@CentroIni", SqlDbType.VarChar, 5, (CentroIni == ""? null: CentroIni)),
					UtilsDB.MP("@CentroFin", SqlDbType.VarChar, 5, (CentroFin == ""? null: CentroFin)),
					UtilsDB.MP("@Ano", SqlDbType.Int, 0, (Ano == int.MinValue? (object)null: Ano)),
					UtilsDB.MP("@TipoExcel", SqlDbType.Int, 0, 0));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTLibroReumeracionExcel(dr);
		}

		internal DSLibroRemuneracionesExcel GetDSFTLibroReumeracionExcel(DataSet ds)
		{
			DSLibroRemuneracionesExcel DSFT = new DSLibroRemuneracionesExcel();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}

		#endregion

		#region Resumen Remuneracion

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSResumenRemuneracion ListadoResumenRemuneracion(string idEmpresa,
															int Mes,
															string SucursalIni,
															string SucursalFin,
															string TrabajadorIni,
															string TrabajadorFin,
															string UnidadIni,
															string UnidadFin,
															int SEmp,
															string CentroIni,
															string CentroFin)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_RESUMEN_REMUNERACION, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)),
					UtilsDB.MP("@idSucursalIni", SqlDbType.VarChar, 3, (SucursalIni == ""? null: SucursalIni)),
					UtilsDB.MP("@idSucursalFin", SqlDbType.VarChar, 3, (SucursalFin == ""? null: SucursalFin)),
					UtilsDB.MP("@TrabajadorIni", SqlDbType.VarChar, 8, (TrabajadorIni == ""? null: TrabajadorIni)),
					UtilsDB.MP("@TrabajadorFin", SqlDbType.VarChar, 8, (TrabajadorFin == ""? null: TrabajadorFin)),
					UtilsDB.MP("@UnidadIni", SqlDbType.VarChar, 3, (UnidadIni == ""? null: UnidadIni)),
					UtilsDB.MP("@UnidadFin", SqlDbType.VarChar, 3, (UnidadFin == ""? null: UnidadFin)),
					UtilsDB.MP("@SEmp", SqlDbType.Int, 0, SEmp),
					UtilsDB.MP("@CentroIni", SqlDbType.VarChar, 5, (CentroIni == ""? null: CentroIni)),
					UtilsDB.MP("@CentroFin", SqlDbType.VarChar, 5, (CentroFin == ""? null: CentroFin)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTResumenRemuneracion(dr);
		}

		internal DSResumenRemuneracion GetDSFTResumenRemuneracion(DataSet ds)
		{
			DSResumenRemuneracion DSFT = new DSResumenRemuneracion();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}

		#endregion

		#region ListadoVacacionesPendientes

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSListadoVacacionesPendientes ListadoVacacionesPendientes(string idEmpresa,
														int Mes,
														string idSucursalIni,
														string idSucursalFin,
														string TrabajadorIni,
														string TrabajadorFin,
														string UnidadIni,
														string UnidadFin,
														string CentroIni,
														string CentroFin,
														int Tipo,
														DateTime Fecha,
														int AnoTope)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_VACACIONES_PENDIENTE, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)),
					UtilsDB.MP("@idSucursalIni", SqlDbType.VarChar, 3, (idSucursalIni == ""? null: idSucursalIni)),
					UtilsDB.MP("@idSucursalFin", SqlDbType.VarChar, 3, (idSucursalFin == ""? null: idSucursalFin)),
					UtilsDB.MP("@idTrabajadorIni", SqlDbType.VarChar, 8, (TrabajadorIni == ""? null: TrabajadorIni)),
					UtilsDB.MP("@idTrabajadorFin", SqlDbType.VarChar, 8, (TrabajadorFin == ""? null: TrabajadorFin)),
					UtilsDB.MP("@UnidadIni", SqlDbType.VarChar, 3, (UnidadIni == ""? null: UnidadIni)),
					UtilsDB.MP("@UnidadFin", SqlDbType.VarChar, 3, (UnidadFin == ""? null: UnidadFin)),
					UtilsDB.MP("@CentroIni", SqlDbType.VarChar, 5, (CentroIni == ""? null: CentroIni)),
					UtilsDB.MP("@CentroFin", SqlDbType.VarChar, 5, (CentroFin == ""? null: CentroFin)),
					UtilsDB.MP("@Tipo", SqlDbType.Int, 0, (Tipo == int.MinValue? (object)null: Tipo)),
					UtilsDB.MP("@Fecha", SqlDbType.DateTime, 0, (Fecha == DateTime.MinValue? (object)null: Fecha)),
					UtilsDB.MP("@AnoTope", SqlDbType.Int, 0, (AnoTope == int.MinValue? (object)null: AnoTope)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTListadoVacacionesPendientes(dr);
		}

		internal DSListadoVacacionesPendientes GetDSFTListadoVacacionesPendientes(DataSet ds)
		{
			DSListadoVacacionesPendientes DSFT = new DSListadoVacacionesPendientes();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}

		#endregion

		#region ListadoProvisionVacaciones

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSListadoProvisionVacaciones ListadoProvisionVacaciones(string idEmpresa,
																	int Mes,
																	string idSucursalIni,
																	string idSucursalFin,
																	string TrabajadorIni,
																	string TrabajadorFin,
																	string UnidadIni,
																	string UnidadFin,
																	string CentroIni,
																	string CentroFin,
																	int Tipo,
																	DateTime Fecha,
																	DateTime FechaProv,
																	int Ano)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_PROVISION_VACACIONES, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)),
					UtilsDB.MP("@idSucursalIni", SqlDbType.VarChar, 3, (idSucursalIni == ""? null: idSucursalIni)),
					UtilsDB.MP("@idSucursalFin", SqlDbType.VarChar, 3, (idSucursalFin == ""? null: idSucursalFin)),
					UtilsDB.MP("@idTrabajadorIni", SqlDbType.VarChar, 8, (TrabajadorIni == ""? null: TrabajadorIni)),
					UtilsDB.MP("@idTrabajadorFin", SqlDbType.VarChar, 8, (TrabajadorFin == ""? null: TrabajadorFin)),
					UtilsDB.MP("@UnidadIni", SqlDbType.VarChar, 3, (UnidadIni == ""? null: UnidadIni)),
					UtilsDB.MP("@UnidadFin", SqlDbType.VarChar, 3, (UnidadFin == ""? null: UnidadFin)),
					UtilsDB.MP("@CentroIni", SqlDbType.VarChar, 5, (CentroIni == ""? null: CentroIni)),
					UtilsDB.MP("@CentroFin", SqlDbType.VarChar, 5, (CentroFin == ""? null: CentroFin)),
					UtilsDB.MP("@Tipo", SqlDbType.Int, 0, (Tipo == int.MinValue? (object)null: Tipo)),
					UtilsDB.MP("@Fecha", SqlDbType.DateTime, 0, (Fecha == DateTime.MinValue? (object)null: Fecha)),
					UtilsDB.MP("@FechaProv", SqlDbType.DateTime, 0, (FechaProv == DateTime.MinValue? (object)null: FechaProv)),
					UtilsDB.MP("@Ano", SqlDbType.Int, 0, (Ano == int.MinValue? (object)null: Ano)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTListadoProvisionVacaciones(dr);
		}

		internal DSListadoProvisionVacaciones GetDSFTListadoProvisionVacaciones(DataSet ds)
		{
			DSListadoProvisionVacaciones DSFT = new DSListadoProvisionVacaciones();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}

		#endregion

		#region Impuesto Unico

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSListadoImpuestoUnico ListadoImpuestoUnico(string idEmpresa,
												string TrabajadorIni,
												string TrabajadorFin,
												int Ano)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_IMPUESTO_UNICO, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@TrabajadorIni", SqlDbType.VarChar, 8, (TrabajadorIni == ""? null: TrabajadorIni)),
					UtilsDB.MP("@TrabajadorFin", SqlDbType.VarChar, 8, (TrabajadorFin == ""? null: TrabajadorFin)),
					UtilsDB.MP("@Ano", SqlDbType.Int, 0, (Ano == int.MinValue? (object)null: Ano)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTListadoImpuestoUnico(dr);
		}

		internal DSListadoImpuestoUnico GetDSFTListadoImpuestoUnico(DataSet ds)
		{
			DSListadoImpuestoUnico DSFT = new DSListadoImpuestoUnico();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}

		#endregion

		#region Certificado de Sueldos

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSCertificadosSueldo CertificadoSueldos(string idEmpresa,
														int TrabajadorIni,
														int TrabajadorFin,
														int MesIni,
														int MesFin,
														int Periodo)
		{
	
			DataSet wDS = new DataSet();

			try
			{
//				SqlCommand wCmd = new SqlCommand();
//				wCmd.CommandText = "uSp_Certificados";
//				wCmd.CommandTimeout = 200;
//				wCmd.CommandType = CommandType.StoredProcedure;
//
//				wCmd.Connection = _connection;
//
//				SqlParameter wParam = new SqlParameter("@idNumero", SqlDbType.VarChar, 3);
//				wParam.Value = (idEmpresa == ""? null: idEmpresa);
//				wCmd.Parameters.Add(wParam);
//
//				wParam = new SqlParameter("@TrabajadorIni", SqlDbType.Int, 0);
//				wParam.Value = (TrabajadorIni == int.MinValue? (object)null: TrabajadorIni);
//				wCmd.Parameters.Add(wParam);
//
//				wParam = new SqlParameter("@TrabajadorFin", SqlDbType.Int, 0);
//				wParam.Value = (TrabajadorFin == int.MinValue? (object)null: TrabajadorFin);
//				wCmd.Parameters.Add(wParam);
//
//				wParam = new SqlParameter("@MesIni", SqlDbType.SmallInt, 0);
//				wParam.Value = (MesIni == short.MinValue? (object)null: MesIni);
//				wCmd.Parameters.Add(wParam);
//
//				wParam = new SqlParameter("@MesFin", SqlDbType.SmallInt, 0);
//				wParam.Value = (MesFin == short.MinValue? (object)null: MesFin);
//				wCmd.Parameters.Add(wParam);
//				
//				wParam = new SqlParameter("@Periodo", SqlDbType.Int, 0);
//				wParam.Value = (Periodo == int.MinValue? (object)null: Periodo);
//				wCmd.Parameters.Add(wParam);
//
//				SqlDataAdapter wDA = new SqlDataAdapter(wCmd);
//
//				//Almacena retorno del SqlCommand
//
//				wDA.Fill(wDS);


				//Ejecuta el SqlCommand
				wDS = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_CERTIFICADOS, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@TrabajadorIni", SqlDbType.Int, 0, (TrabajadorIni == int.MinValue? (object)null: TrabajadorIni)),
					UtilsDB.MP("@TrabajadorFin", SqlDbType.Int, 0, (TrabajadorFin == int.MinValue? (object)null: TrabajadorFin)),
					UtilsDB.MP("@MesIni", SqlDbType.SmallInt, 0, (MesIni == short.MinValue? (object)null: MesIni)),
					UtilsDB.MP("@MesFin", SqlDbType.SmallInt, 0, (MesFin == short.MinValue? (object)null: MesFin)),
					UtilsDB.MP("@Periodo", SqlDbType.Int, 0, (Periodo == int.MinValue? (object)null: Periodo)));

				if (wDS.Tables[0].Rows.Count == 0)
					throw new Exception("La consulta no retorno datos");
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTCertificados(wDS);
		}

		internal DSCertificadosSueldo GetDSFTCertificados(DataSet ds)
		{
			DSCertificadosSueldo DSFT = new DSCertificadosSueldo();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}

		#endregion

		#region Listado de Haberes Anual

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSListadoAnualHaberPorMes ListadoAnualHaberesPorMes(string idEmpresa,
			string TrabajadorIni,
			string TrabajadorFin,
			string HaberIni,
			string HaberFin,
			int MesIni,
			int MesFin)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_HABERANUAL, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@idTrabajadorDesde", SqlDbType.VarChar, 8, (TrabajadorIni == ""? null: TrabajadorIni)),
					UtilsDB.MP("@idTrabajadorHasta", SqlDbType.VarChar, 8, (TrabajadorFin == ""? null: TrabajadorFin)),
					UtilsDB.MP("@TipoInforme", SqlDbType.Int, 0, 2),
					UtilsDB.MP("@idHaberDesde", SqlDbType.VarChar, 3, (HaberIni == ""? null: HaberIni)),
					UtilsDB.MP("@idHaberHasta", SqlDbType.VarChar, 3, (HaberFin == ""? null: HaberFin)),
					UtilsDB.MP("@MesDesde", SqlDbType.Int, 0, (MesIni == int.MinValue? (object)null: MesIni)),
					UtilsDB.MP("@MesHasta", SqlDbType.Int, 0, (MesFin == int.MinValue? (object)null: MesFin)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTListadoAnualHaberesPorMes(dr);
		}

		internal DSListadoAnualHaberPorMes GetDSFTListadoAnualHaberesPorMes(DataSet ds)
		{
			DSListadoAnualHaberPorMes DSFT = new DSListadoAnualHaberPorMes();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSListadoAnualHaberTrabajador ListadoAnualHaberesPorTrabajador(string idEmpresa,
			string TrabajadorIni,
			string TrabajadorFin,
			string HaberIni,
			string HaberFin,
			int MesIni,
			int MesFin)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_HABERANUAL, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@idTrabajadorDesde", SqlDbType.VarChar, 8, (TrabajadorIni == ""? null: TrabajadorIni)),
					UtilsDB.MP("@idTrabajadorHasta", SqlDbType.VarChar, 8, (TrabajadorFin == ""? null: TrabajadorFin)),
					UtilsDB.MP("@TipoInforme", SqlDbType.Int, 0, 1),
					UtilsDB.MP("@idHaberDesde", SqlDbType.VarChar, 3, (HaberIni == ""? null: HaberIni)),
					UtilsDB.MP("@idHaberHasta", SqlDbType.VarChar, 3, (HaberFin == ""? null: HaberFin)),
					UtilsDB.MP("@MesDesde", SqlDbType.Int, 0, (MesIni == int.MinValue? (object)null: MesIni)),
					UtilsDB.MP("@MesHasta", SqlDbType.Int, 0, (MesFin == int.MinValue? (object)null: MesFin)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTListadoAnualHaberesPorTrabajador(dr);
		}

		internal DSListadoAnualHaberTrabajador GetDSFTListadoAnualHaberesPorTrabajador(DataSet ds)
		{
			DSListadoAnualHaberTrabajador DSFT = new DSListadoAnualHaberTrabajador();
			DataRow rowDS;

			foreach(DataRow dr in ds.Tables[0].Rows)
			{
				rowDS = DSFT.Tables[0].NewRow();

				foreach(DataColumn dc in DSFT.Tables[0].Columns)
				{
					if (dr[dc.ColumnName] is System.DBNull)
					{
						
						if (dc.DataType == System.Type.GetType("System.Int32") 
							|| dc.DataType == System.Type.GetType("System.Double")
							|| dc.DataType == System.Type.GetType("System.Decimal"))
							rowDS[dc.ColumnName] = 0;
					}
					else
						rowDS[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFT.Tables[0].Rows.Add(rowDS);
			}

			return DSFT;
		}
		#endregion

		#region Certificado de Sueldos

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSListadoVacacionesWebDetalle VacacionesWebDetalle(string idEmpresa,
			string idTrabajador,
			int Mes)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_VACACIONES_WEB, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)),
					UtilsDB.MP("@idTrabajador", SqlDbType.VarChar, 8, (idTrabajador == ""? null: idTrabajador)),
					UtilsDB.MP("@Detalle", SqlDbType.Bit, 0, true));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTVacacionesWebDetalle(dr);
		}

		internal DSListadoVacacionesWebDetalle GetDSFTVacacionesWebDetalle(DataSet ds)
		{
			DSListadoVacacionesWebDetalle DSFT = new DSListadoVacacionesWebDetalle();
			DataRow rowDS;

			if (ds.Tables.Count > 0)
			{
				foreach(DataRow dr in ds.Tables[0].Rows)
				{
					rowDS = DSFT.Tables[0].NewRow();

					foreach(DataColumn dc in DSFT.Tables[0].Columns)
					{
						if (dr[dc.ColumnName] is System.DBNull)
						{
						
							if (dc.DataType == System.Type.GetType("System.Int32") 
								|| dc.DataType == System.Type.GetType("System.Double")
								|| dc.DataType == System.Type.GetType("System.Decimal"))
								rowDS[dc.ColumnName] = 0;
						}
						else
							rowDS[dc.ColumnName] =  dr[dc.ColumnName];
					}
					DSFT.Tables[0].Rows.Add(rowDS);
				}
			}
			return DSFT;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSListadoVacacionesWebResumen VacacionesWebResumen(string idEmpresa,
			string idTrabajador,
			int Mes)
		{
			//Almacena retorno del SqlCommand
			DataSet dr;

			try
			{
				//Ejecuta el SqlCommand
				dr = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Listados.SP_SELECT_VACACIONES_WEB, 
					UtilsDB.MP("@idNumero", SqlDbType.VarChar, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)),
					UtilsDB.MP("@idTrabajador", SqlDbType.VarChar, 8, (idTrabajador == ""? null: idTrabajador)),
					UtilsDB.MP("@Detalle", SqlDbType.Bit, 0, false));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTVacacionesWebResumen(dr);
		}

		internal DSListadoVacacionesWebResumen GetDSFTVacacionesWebResumen(DataSet ds)
		{
			DSListadoVacacionesWebResumen DSFT = new DSListadoVacacionesWebResumen();
			DataRow rowDS;

			if (ds.Tables.Count > 0)
			{
				foreach(DataRow dr in ds.Tables[0].Rows)
				{
					rowDS = DSFT.Tables[0].NewRow();

					foreach(DataColumn dc in DSFT.Tables[0].Columns)
					{
						if (dr[dc.ColumnName] is System.DBNull)
						{
						
							if (dc.DataType == System.Type.GetType("System.Int32") 
								|| dc.DataType == System.Type.GetType("System.Double")
								|| dc.DataType == System.Type.GetType("System.Decimal"))
								rowDS[dc.ColumnName] = 0;
						}
						else
							rowDS[dc.ColumnName] =  dr[dc.ColumnName];
					}
					DSFT.Tables[0].Rows.Add(rowDS);
				}
			}
			return DSFT;
		}

		#endregion

	}
}