public async Task <Result <InvoiceCoreModel> > CaptureOrder(CaptureOrderModel model) { var invoice = await _repository.FirstOrDefaultAsync <Invoice>(i => i.Id == model.InvoiceId, i => i.PaypalOrder, i => i.Appointment, i => i.UserSurvey.Select(us => us.Tax)); if (!invoice.Success || invoice.Data == null) { return(Result <InvoiceCoreModel> .Failed(Error.WithData(1000, new[] { "Invoice not found" }))); } var capture = await _paypalHttpClient.Capture(invoice.Data.PaypalOrder.OrderId); if (!capture.Success) { return(Result <InvoiceCoreModel> .Failed(Error.WithData(1000, new[] { "Could not capture order" }))); } invoice.Data.IsPaid = true; invoice.Data.Enabled = true; invoice.Data.Status = (byte)InvoiceStatus.Paid; await _repository.CommitAsync(); var profile = await _membershipServiceApi.AuthAuthApiService.Profile(new BaseModel { Id = invoice.Data.UserId }); try { if (invoice.Data.UserSurvey != null && invoice.Data.UserSurvey.Any()) { invoice.Data.UserSurvey.FirstOrDefault().Tax.ToList() .ForEach(t => t.Status = (byte)TaxStatus.TaxProcessPending); await _repository.CommitAsync(); _coreSmtpClient.SendPaypalPayment(profile.Data.Email, profile.Data.Firstname + " " + profile.Data.Lastname); } if (invoice.Data.Appointment != null && invoice.Data.Appointment.Any()) { _coreSmtpClient.SendVipConsultation(profile.Data.Email, profile.Data.Firstname + " " + profile.Data.Lastname, invoice.Data.Appointment.FirstOrDefault().Date.ToString("F")); _coreSmtpClient.SendAppointmentBookNotif("*****@*****.**", profile.Data.Firstname + " " + profile.Data.Lastname, invoice.Data.Appointment.FirstOrDefault().Date.ToString("F")); await _messageBiz.Add(new CreateMessageModel { Title = "Your Appointment", Body = $"Your appointment has been confirmed. One of our AccNet representatives will reach out to you at the scheduled time : {invoice.Data.Appointment.FirstOrDefault().Date.ToString("F")} (PACIFIC STANDARD TIME)", ToUser = profile.Data.Id, Priority = MessagePriority.High }); } } catch (Exception e) { Console.WriteLine(e); Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } _coreSmtpClient.SendPaysForInvoicesNotif("*****@*****.**", profile.Data.Username, DateTime.Now.ToString("F")); // var result = // await _membershipServiceApi.SystemUserApiService.Get(new MembershipService.ApiClient.Models.BaseModel // {Id = generalDataService.User.Id}); // _coreSmtpClient.SendInvoice(invoice.Data, result.Data); return(Result <InvoiceCoreModel> .Successful(new InvoiceCoreModel { Id = invoice.Data.Id, Amount = invoice.Data.Amount, Description = invoice.Data.Description, Title = invoice.Data.Title, Status = (InvoiceStatus)invoice.Data.Status, CreationDate = invoice.Data.CreationDate, Enabled = invoice.Data.Enabled, })); }
public Task <Result <object> > Add(CreateAppointmentModel model) => Result <object> .TryAsync(async() => { var isAdmin = generalDataService.User.Permissions.Any(p => p == (int)PermissionType.Admin); if (model.UserId == Guid.Empty) { model.UserId = generalDataService.User.Id; } var user = (await _membershipServiceApi.SystemUserApiService.Get( new MembershipService.ApiClient.Models.BaseModel { Id = model.UserId })).Data; if (user == null) { return(Result <object> .Failed(Error.WithData(1000, new[] { "User not found" }))); } var validateAppointment = await _appointmentExceptionBiz.ValidateAppointment(model.Date); if (validateAppointment.Success && validateAppointment.Data) { return(Result <object> .Failed(Error.WithData(1000, new[] { "Sorry , there are no available representative in the requested time" }))); } var duplicateTime = await _repository.FirstOrDefaultAsNoTrackingAsync <Appointment>(a => a.Date == model.Date); if (duplicateTime.Success && duplicateTime.Data != null) { return(Result <object> .Failed(Error.WithData(1000, new[] { "Sorry , there are no available representative in the requested time" }))); } Guid?invoiceId = null; if (model.Duration > 20) { invoiceId = (await _invoiceBiz.Add(new CreateInvoiceModel { Amount = 200, Description = @"1xVIP appointment $200 Sub total = $200 Taxes = $10 Total = $210", Status = InvoiceStatus.Pending, Title = "VIP Appointment", Enabled = true, UserId = model.UserId })).Data; } var appointment = new Appointment { Id = Guid.NewGuid(), InvoiceId = invoiceId, Description = model.Description, CreationDate = DateTime.Now, Date = model.Date, Duration = model.Duration, Type = model.Type, UserId = !isAdmin ? generalDataService.User.Id : user.Id, RepresentativeId = isAdmin ? generalDataService.User.Id : Guid.Empty, Title = model.Title, Approved = true }; _repository.Add(appointment); var usersurvey = await _repository.ListAsync <UserSurvey>(us => us.UserId == generalDataService.User.Id); if (usersurvey.Success && usersurvey.Data != null && usersurvey.Data.Any()) { var userSurveyIds = usersurvey.Data.Select(us => us.Id).ToList(); var taxes = await _repository.ListAsync <Tax>(t => t.UserSurveyId != null && userSurveyIds.Contains(t.UserSurveyId.Value) && t.Status == (int)TaxStatus.SetConsultation); if (taxes.Success && taxes.Data != null && taxes.Data.Any()) { taxes.Data.ToList().ForEach(t => t.Status = (byte)TaxStatus.PendingConsultation); } } await _repository.CommitAsync(); if (appointment.InvoiceId == null) { _coreSmtpClient.SendComplimentryConsultation(user.Email, user.Firstname + " " + user.Lastname, appointment.Date.ToString("F")); await _messageBiz.Add(new CreateMessageModel { Title = "Your Appointment", Body = $"Your appointment has been confirmed. One of our AccNet representatives will reach out to you at the scheduled time : {appointment.Date.ToString("F")} (PACIFIC STANDARD TIME)", ToUser = user.Id, Priority = MessagePriority.High }); _coreSmtpClient.SendAppointmentBookNotif("*****@*****.**", user.Firstname + " " + user.Lastname, appointment.Date.ToString("F")); } return(Result <object> .Successful(new { message = invoiceId.HasValue ? $"To confirm your VIP consultation on {appointment.Date.ToString("F")} (PACIFIC STANDARD TIME), please click OK to kindly pay the fee for this call. Once paid you will receive a confirmation email detailing the selected date and time. Thank you" : $"Your appointment has been confirmed. One of our AccNet representatives will reach out to you at the scheduled time : {appointment.Date.ToString("F")} (PACIFIC STANDARD TIME)", vip = invoiceId.HasValue })); });