示例#1
0
        public async Task <ApiResponse <CaseCreatedModel> > GetOrCreateTransactionCase(CasePostModel model)
        {
            try
            {
                var transactionCase = caseRepository
                                      .Query()
                                      .Where(e => e.Transaction.ID == model.TransactionId)
                                      .SingleOrDefault(e => e.Status != CaseStatus.Closed);
                if (transactionCase == null)
                {
                    var transaction = transactionRepository.Get(model.TransactionId);
                    var summary     = $"{(model.CaseType == CaseType.Dispute ? "Disputing" : "Question about")} {transaction.Description}";
                    transactionCase = new Case {
                        Customer     = transaction.Account.Owner,
                        Account      = transaction.Account,
                        Transaction  = transaction,
                        Summary      = summary,
                        Status       = CaseStatus.New,
                        CreatedDate  = DateTime.Now,
                        ModifiedDate = DateTime.Now
                    };

                    caseRepository.Add(transactionCase);

                    await caseRepository.SaveChanges();

                    await taskRouter.GetOrCreateCaseChannel(transactionCase.ID);

                    var caseEvent = new Event {
                        Account     = transactionCase.Account,
                        Summary     = "Spoke with an Agent",
                        CreatedDate = DateTime.Now
                    };

                    transactionCase.Events.Add(caseEvent);

                    await caseRepository.SaveChanges();

                    var agentSid = agentRepository
                                   .Query(a => a.PairedCustomer.ID == transaction.Account.Owner.ID)
                                   .Select(a => a.SID)
                                   .Single();

                    await taskRouter.CreateTask(transactionCase.ID, agentSid, model.AgentSkill);
                }

                var responseModel = new CaseCreatedModel {
                    Id        = transactionCase.ID,
                    IsCreated = true
                };
                var response = new ApiResponse <CaseCreatedModel>(responseModel);
                return(response);
            }
            catch (Exception e)
            {
                return(HandleErrorAndReturnStatus <ApiResponse <CaseCreatedModel> >(e));
            }
        }
        public async Task <HttpResponseMessage> CreateCase(CasePostModel model)
        {
            var response = await service.GetOrCreateTransactionCase(model);

            return(SendHttpResponse(response));
        }