public CustomerCallQueueCallAttempt Save(CustomerCallQueueCallAttempt domain, bool refatch = true) { using (var adapter = PersistenceLayer.GetDataAccessAdapter()) { var entity = Mapper.Map <CustomerCallQueueCallAttempt, CustomerCallQueueCallAttemptEntity>(domain); if (!adapter.SaveEntity(entity, refatch)) { throw new PersistenceFailureException(); } return(!refatch ? domain : Mapper.Map <CustomerCallQueueCallAttemptEntity, CustomerCallQueueCallAttempt>(entity)); } }
private CustomerCallQueueCallAttempt SetCustomerCallQueueAttempt(CallQueueCustomer callQueueCustomer) { try { var lockedCustomer = _callQueueCustomerLockRepository.GetCallQueueCustomerLock(callQueueCustomer); if (lockedCustomer != null) { return(null); } var prospectCustomer = _prospectCustomerRepository.GetProspectCustomerByCustomerId(callQueueCustomer.CustomerId.Value); Customer customer = null; if (prospectCustomer == null) { customer = _customerRepository.GetCustomer(callQueueCustomer.CustomerId.Value); } using (var scope = new TransactionScope()) { //lock customer in call queue so that other agent not be able to call them; var domain = new CallQueueCustomerLock { CallQueueCustomerId = callQueueCustomer.Id, CustomerId = callQueueCustomer.CustomerId, ProspectCustomerId = callQueueCustomer.ProspectCustomerId, CreatedBy = _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId, CreatedOn = DateTime.Now }; _callQueueCustomerLockRepository.SaveCallQueueCustomerLock(domain); //Lock Customer callQueueCustomer.Status = CallQueueStatus.InProcess; callQueueCustomer.DateModified = DateTime.Now; callQueueCustomer.ModifiedByOrgRoleUserId = _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId; _callQueueCustomerRepository.Save(callQueueCustomer, false); //Update CallQueueCustomer Status if (prospectCustomer == null && customer != null) { prospectCustomer = _prospectCustomerFactory.CreateProspectCustomerFromCustomer(customer, false); ((IUniqueItemRepository <ProspectCustomer>)_prospectCustomerRepository).Save(prospectCustomer); } var customerCallQueueCallAttempt = new CustomerCallQueueCallAttempt { DateCreated = DateTime.Now, IsCallSkipped = false, IsNotesReadAndUnderstood = false, CreatedBy = _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId, CustomerId = callQueueCustomer.CustomerId.Value, CallId = null, CallQueueCustomerId = callQueueCustomer.Id, NotInterestedReasonId = null }; var callAttempt = _customerCallQueueCallAttemptRepository.Save(customerCallQueueCallAttempt); //CustomerCallQueueCallAttempt Entry scope.Complete(); return(callAttempt); } } catch (Exception ex) { _logger.Error("Some Error occured"); _logger.Error("Message: " + ex.Message); _logger.Error("Stack Trace: " + ex.StackTrace); } return(null); }