示例#1
0
 public Task <Result <Guid> > Add(CreateTicketModel model)
 => _ticketBiz.Add(model);
        private async Task <Result <(Guid, bool)> > PerformActions(UserSurvey userSurvey)
        {
            var actionGroups = userSurvey.UserAnswer.SelectMany(ua => ua.Answer.Action).GroupBy(a => a.Type);

            bool makeAppointment = false;
            var  invoiceId       = Guid.Empty;

            for (int i = 0; i < actionGroups.OrderBy(a => a.Key).Reverse().Count(); i++)
            {
                var action = actionGroups.ToList()[i];
                var type   = (ActionType)action.Key;
                switch (type)
                {
                case ActionType.CreateAppointment:
                    makeAppointment = true;
                    break;

                case ActionType.AddDependent:
                    break;

                case ActionType.SendTicketAndCreateAppointment:
                    await _ticketBiz.Add(new CreateTicketModel
                    {
                        Priority = TicketPriority.Medium,
                        Text     =
                            "Survey Was Too Complex For Online Process , Please Review Booked Consultation For This User.",
                        Title = "Survey", UserId = generalDataService.User.Id
                    }, userSurvey, false);

                    makeAppointment = true;
                    break;
                }
            }

            var amount = 95 +
                         (userSurvey.UserDependentSurvey.Count * 95);
            decimal tax = (decimal)amount * 5 / 100;

            var hasSpouse  = actionGroups.Any(a => a.Key == (int)ActionType.AddSpouse);
            var spouseText = "";

            if (hasSpouse)
            {
                spouseText = "Spousal Income Tax : 1 x $95 \n";
            }
            var dependentCount = userSurvey.UserDependentSurvey.Count;

            if (hasSpouse)
            {
                dependentCount--;
            }
            var dependentText = "";

            if (dependentCount > 0)
            {
                dependentText = $"+19 Dependent Income Tax : {dependentCount} x $95 \n";
            }
            var mainuserText = "";

            if (dependentCount > 0)
            {
                mainuserText = $"Main User Income Tax Return : 1 x $95 \n";
            }
            invoiceId = (await _invoiceBiz.Add(new CreateInvoiceModel
            {
                Amount = amount,
                Description =
                    $"{mainuserText} {spouseText} {dependentText} SubTotal = ${amount} \n Taxes(GST)= ${(decimal)tax} \n Total = ${(decimal)(amount + tax)}",

                Title = "Personal Tax Return",
                UserSurveyId = userSurvey.Id,
                Enabled = true,
                Status = InvoiceStatus.Pending, UserId = generalDataService.User.Id
            },
                                               userSurvey)).Data;


            await _taxBiz.AddForSurvey(new CreateTaxModel
            {
                UserId      = generalDataService.User.Id, Title = userSurvey.Survey.Name,
                Description = userSurvey.Survey.Description, Enabled = true,
                Status      = makeAppointment ? TaxStatus.SetConsultation : TaxStatus.PaymentPending
            }, userSurvey);

            return(Result <(Guid, bool)> .Successful((invoiceId, makeAppointment)));
        }