using AutoMapper; using COA.EnterpriseServices.Creditors; using COA.EnterpriseServices.DataAccess.Entities; using System.Collections.Generic; using System.Linq; namespace COA.EnterpriseServices.DataAccess.Helpers { public class CreditorHelper { private readonly DataAccessManager creditorDataAccess; private readonly DataAccessManager settlementAttemptDataAccess; private readonly IMapper mapper; public CreditorHelper(DataAccessManager creditorDataAccess, DataAccessManager settlementAttemptDataAccess, IMapper mapper) { this.creditorDataAccess = creditorDataAccess; this.settlementAttemptDataAccess = settlementAttemptDataAccess; this.mapper = mapper; } public Creditors.Creditor GetCreditor(int id) { var creditor = creditorDataAccess.Get(id); // map EF => domain type return mapper.Map(creditor); } public Creditors.SettlementAttempt GetSettlementAttempt(int id) { var attempt = settlementAttemptDataAccess.Get(id); return mapper.Map(attempt); } public ICollection GetSettlements(SettlementAttemptFilter filter) { // we may use this non-generic throughout instead var dataAccess = new DataAccessManager2(); // More info on "FromSqlRaw" => https://docs.microsoft.com/en-us/ef/core/querying/raw-sql var attempts = dataAccess.Raw("uspCreditorPortal_SettlementAttemptGet @SettlementAttemptID = {0}, @CreditorProfileID = {1}", filter.SettlementAttemptId, filter.CreditorProfileId); // TODO: write extension to map list of T to destination type return attempts .Select(a => mapper.Map(a)) .ToList(); //return DBWrapper.ExecuteProcedure(QuickbaseConnectionString, "uspCreditorPortal_SettlementAttemptGet", cmd => //{ // if (filter != null) // { // cmd.CommandTimeout = 0; // cmd.Parameters.AddWithValue("@SettlementAttemptID", filter.SettlementAttemptId); // cmd.Parameters.AddWithValue("@CreditorProfileID", filter.CreditorProfileId); // cmd.Parameters.AddWithValue("@CreditorID", filter.CreditorId); // cmd.Parameters.AddWithValue("@CreditorContactID", filter.CreditorContactId); // cmd.Parameters.AddWithValue("@FirstPaymentDateStart", filter.FirstPaymentDateStart); // cmd.Parameters.AddWithValue("@FirstPaymentDateEnd", filter.FirstPaymentDateEnd); // cmd.Parameters.AddWithValue("@ResponseDateStart", filter.ResponseDateStart); // cmd.Parameters.AddWithValue("@ResponseDateEnd", filter.ResponseDateEnd); // cmd.Parameters.AddWithValue("@PortalSubmissionDateStart", filter.PortalSubmissionDateStart); // cmd.Parameters.AddWithValue("@PortalSubmissionDateEnd", filter.PortalSubmissionDateEnd); // if (filter.SettlementAttemptIds.AnyAndNotNull()) // { // cmd.Parameters.Add("@SettlementAttemptIDs", SqlDbType.Structured).Value = CreateIdsTable(filter.SettlementAttemptIds); // } // else if (filter.CreditorIds.AnyAndNotNull()) // { // cmd.Parameters.Add("@CreditorIDs", SqlDbType.Structured).Value = CreateIdsTable(filter.CreditorIds); // } // } // return cmd.ToList(); //}); } public bool AddCreditor(Creditors.Creditor creditor) { var creditorEntity = mapper.Map(creditor); return creditorDataAccess.Add(creditorEntity); } public bool UpdateCreditor(Creditors.Creditor creditor) { var creditorEntity = mapper.Map(creditor); return creditorDataAccess.Update(creditorEntity); } public bool SetCreditorStatus(int creditorId, string status) { return creditorDataAccess.Update(creditorId, c => c.Status = status); } public void SetOriginalCreditorAsPrimary(int creditorId) { var creditor = creditorDataAccess.Get(creditorId); creditor.ReferenceNumber = string.Empty; creditorDataAccess.Update(creditor); } public void ClearCreditorReferenceNumber(int creditorId) { var creditor = creditorDataAccess.Get(creditorId); creditor.CurrentCreditorProfileId = creditor.OriginalCreditorProfileId; creditorDataAccess.Update(creditor); } } }