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

using Seguridad.DataSetFT;
using Seguridad.DataAccess;
using Municipalidad.Utils;

namespace Seguridad.BusinessObjects
{
	public class RlsUsuarioWeb: RlsUsuarioWebCRUD
	{
		/// <summary>
		/// Constructor
		/// </summary>
		public RlsUsuarioWeb()
		{
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public void UsuarioEmpresaSave(int idUsuarioWeb, int idSistema, ArrayList ArrayEmpresa)
		{
			//SqlConnection utilizado para ejecutar el SqlCommand
			SqlConnection connection = null;
			SqlTransaction transaction = connection.BeginTransaction();

			try
			{
				//Abre la conexion
				connection = UtilsDB.GetConnection(UtilsConnectionManager.GetConnection(eConnectionString.Seguridad));

				UsuarioWeb da = new UsuarioWeb(connection);

				da.UsuarioEmpresaDelete(idUsuarioWeb, idSistema);

				foreach (string widCodEmpresa in ArrayEmpresa)
					da.UsuarioEmpresaSave(idUsuarioWeb, widCodEmpresa, idSistema);

				transaction.Commit();
			}
			catch (Exception ex)
			{
				transaction.Rollback();
				throw ex;
			}
			finally
			{
				if(connection != null)
					connection.Dispose();
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public void UsuarioSucursalSave(int idUsuarioWeb, ArrayList ArraySucursal)
		{
			//SqlConnection utilizado para ejecutar el SqlCommand
			SqlConnection connection = null;
			SqlTransaction transaction = connection.BeginTransaction();

			try
			{
				//Abre la conexion
				connection = UtilsDB.GetConnection(UtilsConnectionManager.GetConnection(eConnectionString.Seguridad));

				UsuarioWeb da = new UsuarioWeb(connection);

				foreach (string wSucursal in ArraySucursal)
					da.UsuarioSucursalSave(idUsuarioWeb, wSucursal);

				transaction.Commit();
			}
			catch (Exception ex)
			{
				transaction.Rollback();
				throw ex;
			}
			finally
			{
				if(connection != null)
					connection.Dispose();
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public void ChangePassword(int idUsuario, string Password, string SaltHash)
		{
			//SqlConnection utilizado para ejecutar el SqlCommand
			SqlConnection connection = null;

			//Almacena retorno del DataAccess
			try
			{
				//Abre la conexion
				connection = UtilsDB.GetConnection(UtilsConnectionManager.GetConnection(eConnectionString.Seguridad));

				UsuarioWeb da = new UsuarioWeb(connection);
				da.ChangePassword(idUsuario, Password, SaltHash);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				if(connection != null)
					connection.Dispose();
			}			
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSUsuarioWeb Filter(string Rut, string Nombre, string Paterno, string Materno)
		{
			//SqlConnection utilizado para ejecutar el SqlCommand
			SqlConnection connection = null;

			//Almacena retorno del DataAccess
			DSUsuarioWeb ds;

			try
			{
				//Abre la conexion
				connection = UtilsDB.GetConnection(UtilsConnectionManager.GetConnection(eConnectionString.Seguridad));

				UsuarioWeb da = new UsuarioWeb(connection);
				ds = da.Filter(Rut, Nombre, Paterno, Materno);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				if(connection != null)
					connection.Dispose();
			}

			return ds;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSUsuarioByEmpresaAndTrabajador LoadUsuarioByEmrpesaAndTrabajador(int RutEmpresa, string Usuario, int Sistema)
		{
			//SqlConnection utilizado para ejecutar el SqlCommand
			SqlConnection connection = null;

			//Almacena retorno del DataAccess
			DSUsuarioByEmpresaAndTrabajador ds;

			try
			{
				//Abre la conexion
				connection = UtilsDB.GetConnection(UtilsConnectionManager.GetConnection(eConnectionString.Seguridad));
			}
			catch
			{
				throw new Exception("Ocurrio un error al conectarse con la Base de datos de Seguridad.");
			}
			try
			{
				UsuarioWeb da = new UsuarioWeb(connection);
				ds = da.SelectUsuarioByEmrpesaAndTrabajador(RutEmpresa, Usuario, Sistema);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				if(connection != null)
					connection.Dispose();
			}

			return ds;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSUsuarioWeb LoadUsuarioByTrabajador(string Usuario)
		{
			//SqlConnection utilizado para ejecutar el SqlCommand
			SqlConnection connection = null;

			//Almacena retorno del DataAccess
			DSUsuarioWeb ds;

			try
			{
				//Abre la conexion
				connection = UtilsDB.GetConnection(UtilsConnectionManager.GetConnection(eConnectionString.Seguridad));
			}
			catch
			{
				throw new Exception("Ocurrio un error al conectarse con la Base de datos de Seguridad.");
			}
			try
			{
				UsuarioWeb da = new UsuarioWeb(connection);
				ds = da.SelectUsuarioByTrabajador(Usuario);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				if(connection != null)
					connection.Dispose();
			}

			return ds;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public void UsuarioPermisosSave(int idUsuarioWeb, int idSistema, ArrayList ArrayEmpresa, ArrayList ArraySucursal, DSPermisos wPermisos)
		{
			//SqlConnection utilizado para ejecutar el SqlCommand
			SqlConnection connection = null;
			
			try
			{
				//Abre la conexion
				connection = UtilsDB.GetConnection(UtilsConnectionManager.GetConnection(eConnectionString.Seguridad));

				using(SqlTransaction transaction = connection.BeginTransaction())
				{

					try
					{
						UsuarioWeb da = new UsuarioWeb(transaction);

						//Graba la empresa
						da.UsuarioEmpresaDelete(idUsuarioWeb, idSistema);
						foreach (string widCodEmpresa in ArrayEmpresa)
							da.UsuarioEmpresaSave(idUsuarioWeb, widCodEmpresa, idSistema);

						//Graba la sucursal
						da.UsuarioSucursalDelete(idUsuarioWeb);
						foreach (string widSucursal in ArraySucursal)
							da.UsuarioSucursalSave(idUsuarioWeb, widSucursal);

						//Graba los Permisos
						da.UsuarioPermisosDelete(idUsuarioWeb);
						foreach (DSPermisos.PermisosWebRow wPermiso in wPermisos.PermisosWeb.Rows)
							da.UsuarioPermisoSave(wPermiso.idSucursalWeb, wPermiso.idModuloWeb, idUsuarioWeb);

						transaction.Commit();
					}
					catch(Exception ex)
					{
						transaction.Rollback();
						throw ex;
					}
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				if(connection != null)
					connection.Dispose();
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public DSSucursal LoadUsuarioSucursal(string idEmpresa, int idUsuario, int idSistema)
		{
			//SqlConnection utilizado para ejecutar el SqlCommand
			SqlConnection connection = null;

			//Almacena retorno del DataAccess
			DSSucursal ds;

			try
			{
				//Abre la conexion
				connection = UtilsDB.GetConnection(UtilsConnectionManager.GetConnection(eConnectionString.Seguridad));

				UsuarioWeb da = new UsuarioWeb(connection);
				ds = da.SelectUsuarioSucursal(idEmpresa, idUsuario, idSistema);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				if(connection != null)
					connection.Dispose();
			}

			return ds;
		}
	}
}
