using AutoMapper; using Gestor.Infrastructure.Entities.Generic; using Gestor.Infrastructure.Entities.Seguros; using Gestor.Infrastructure.Mappers; using Gestor.Infrastructure.Repository.Generic; using Gestor.Infrastructure.Repository.Interface; using Gestor.Infrastructure.UnitOfWork.Generic; using Gestor.Model.Domain.Generic; using Gestor.Model.Domain.Seguros; using NHibernate; using NHibernate.Connection; using NHibernate.Impl; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Linq; using System.Linq.Expressions; using System.Runtime.CompilerServices; namespace Gestor.Infrastructure.Repository.Logic { public class CoberturaRepository : GenericRepository, ICoberturaRepository, IGenericRepository { private readonly GenericUnitOfWork _unitOfWork; public CoberturaRepository(GenericUnitOfWork unitOfWork) : base(unitOfWork.Session) { this._unitOfWork = unitOfWork; } public List AddRange(List coberturas) { List coberturaDbs = ApplicationMapper.Mapper.Map, List>(coberturas); base.AddRange(coberturaDbs); return ApplicationMapper.Mapper.Map, List>(coberturaDbs); } public void Delete(long id) { CoberturaDb coberturaDb = base.FindEntityById(id); if (coberturaDb == null) { return; } base.Delete(coberturaDb); } public void DeletebyItem(long id) { object connection; SessionFactoryImpl sessionFactory = this._unitOfWork.Session.SessionFactory as SessionFactoryImpl; if (sessionFactory != null) { connection = sessionFactory.ConnectionProvider.GetConnection(); } else { connection = null; } using (SqlConnection sqlConnection = connection as SqlConnection) { using (SqlCommand sqlCommand = sqlConnection.CreateCommand()) { sqlCommand.CommandText = string.Format("DELETE FROM cobertura WHERE iditem = {0}", id); sqlCommand.ExecuteNonQuery(); } } } public void DeleteRange(List ids) { List list = ( from x in base.All() where ids.Contains(x.Item.Id) select x).ToList(); if (list.Count == 0) { return; } base.DeleteRange(list); } public Cobertura FindById(long id) { CoberturaDb coberturaDb = base.FindEntityById(id); return ApplicationMapper.Mapper.Map(coberturaDb); } public List FindByItemId(long id) { object connection; SessionFactoryImpl sessionFactory = this._unitOfWork.Session.SessionFactory as SessionFactoryImpl; DataTable dataTable = new DataTable(); DataTable dataTable1 = new DataTable(); if (sessionFactory != null) { connection = sessionFactory.ConnectionProvider.GetConnection(); } else { connection = null; } using (SqlConnection sqlConnection = connection as SqlConnection) { using (SqlCommand sqlCommand = sqlConnection.CreateCommand()) { sqlCommand.CommandText = "SELECT * FROM coberturapadrao;"; using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter()) { sqlDataAdapter.SelectCommand = sqlCommand; sqlDataAdapter.Fill(dataTable); } sqlCommand.CommandText = string.Format("SELECT * FROM cobertura WHERE iditem = {0}", id); using (SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter()) { sqlDataAdapter1.SelectCommand = sqlCommand; sqlDataAdapter1.Fill(dataTable1); } } } List list = ( from x in dataTable.AsEnumerable().ToList() select new CoberturaPadrao() { Id = x.Field("idcoberturapadrao"), IdRamo = (x.Field("idramo") != null ? x.Field("idramo") : (long)0), Descricao = x.Field("descricao") }).ToList(); return dataTable1.AsEnumerable().ToList().Select((DataRow x) => { Cobertura cobertura = new Cobertura() { Id = x.Field("idcobertura"), CoberturaPadrao = (x.Field("idcoberturapadrao") == null ? null : list.FirstOrDefault((CoberturaPadrao c) => c.Id == x.Field("idcoberturapadrao"))), Item = new Item() { Id = x.Field("iditem") } }; decimal? nullable = x.Field("franquia"); cobertura.Franquia = nullable.GetValueOrDefault(); nullable = x.Field("premio"); cobertura.Premio = nullable.GetValueOrDefault(); nullable = x.Field("lmi"); cobertura.Lmi = nullable.GetValueOrDefault(); cobertura.Observacao = x.Field("observacao"); return cobertura; }).ToList(); } public Cobertura Merge(Cobertura cobertura) { CoberturaDb coberturaDb = ApplicationMapper.Mapper.Map(cobertura); base.Merge(coberturaDb); return ApplicationMapper.Mapper.Map(coberturaDb); } public List MergeRange(List coberturas) { List coberturaDbs = ApplicationMapper.Mapper.Map, List>(coberturas); CoberturaRepository coberturaRepository = this; coberturaDbs.ForEach(new Action(coberturaRepository.Merge)); return ApplicationMapper.Mapper.Map, List>(coberturaDbs); } public Cobertura SaveOrUpdate(Cobertura cobertura) { CoberturaDb coberturaDb = ApplicationMapper.Mapper.Map(cobertura); this.SaveOrUpdate(coberturaDb); return ApplicationMapper.Mapper.Map(coberturaDb); } } }