using System;
using System.Data;
using System.Data.SqlClient;
using Remuneraciones.DataSetFT;
using Remuneraciones.DataModel;
using Municipalidad.Utils;

namespace Remuneraciones.DataAccess
{
	/// <summary>
	/// Descripción breve de Empresa.
	/// </summary>
	public class Empresa
	{
		//Field para almacenar la conexión
		private SqlConnection _connection = null;
		private SqlTransaction _transaction = null;

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

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

		#region Empresa

		/// <summary>
		/// 
		/// </summary>
		/// <param name="idEmpresa"></param>
		/// <returns></returns>
		public DSEmpresa SelectBrowse(string idEmpresa, int Mes)
		{
			//Almacena retorno del SqlCommand
			DataSet ds;

			try
			{
				//Ejecuta el SqlCommand
				ds = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Empresa.SP_SELECT_BY_PK, 
					UtilsDB.MP("@idNumero", SqlDbType.Char, 3, (idEmpresa == ""? null: idEmpresa)),
					UtilsDB.MP("@Mes", SqlDbType.Int, 0, (Mes == int.MinValue? (object)null: Mes)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFT(ds);
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="idEmpresa"></param>
		/// <returns></returns>
		public int LastMonthActive(string idEmpresa)
		{
			//Almacena retorno del SqlCommand
			//int ds;
			DataSet ds;

			try
			{
				//Ejecuta el SqlCommand
				ds = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Empresa.SP_LAST_MONTH_ACTIVE, 
					UtilsDB.MP("@idNumero", SqlDbType.Char, 3, (idEmpresa == ""? null: idEmpresa)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			int Mes = 0;
			if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
				Mes = int.Parse(ds.Tables[0].Rows[0][0].ToString());
			return Mes;
		}

		internal DSEmpresa GetDSFT(DataSet ds)
		{
			DSEmpresa DSFTEmpresa = new DSEmpresa();
			DataRow rowEmpresa;

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

				foreach(DataColumn dc in DSFTEmpresa.Tables[0].Columns)
				{
					rowEmpresa[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFTEmpresa.Tables[0].Rows.Add(rowEmpresa);
			}

			return DSFTEmpresa;
		}

		#endregion

		#region Empresa General

		/// <summary>
		/// 
		/// </summary>
		/// <param name="idEmpresa"></param>
		/// <returns></returns>
		public DSEmpresaGeneral SelectGeneral(string idEmpresa, int idSistema)
		{
			//Almacena retorno del SqlCommand
			DataSet ds;

			try
			{
				//Ejecuta el SqlCommand
				ds = UtilsDB.ExecuteDataset(_connection, CommandType.StoredProcedure, Schema.Empresa.SP_SELECT_GENERAL, 
					UtilsDB.MP("@Codigo", SqlDbType.Char, 3, (idEmpresa == ""? (object)null: idEmpresa)),
					UtilsDB.MP("@idSistema", SqlDbType.Int, 0, (idSistema == int.MinValue? (object)null: idSistema)));
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return GetDSFTGeneral(ds);
		}

		internal DSEmpresaGeneral GetDSFTGeneral(DataSet ds)
		{
			DSEmpresaGeneral DSFTEmpresaGeneral = new DSEmpresaGeneral();
			DataRow rowEmpresa;

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

				foreach(DataColumn dc in DSFTEmpresaGeneral.Tables[0].Columns)
				{
					rowEmpresa[dc.ColumnName] =  dr[dc.ColumnName];
				}
				DSFTEmpresaGeneral.Tables[0].Rows.Add(rowEmpresa);
			}

			return DSFTEmpresaGeneral;
		}

		#endregion

	}
}
