public Task <Result <InvoiceCoreModel> > Get(BaseCoreModel coreModel)
        => Result <InvoiceCoreModel> .TryAsync(async() =>
        {
            var invoice = (await _repository.FirstOrDefaultAsync <Invoice>(i => i.Id == coreModel.Id)).Data;
            if (invoice == null)
            {
                return(Result <InvoiceCoreModel> .Failed(Error.WithData(1000, new[] { "Invoice not found " })));
            }

            var user = (await _membershipServiceApi.AuthAuthApiService.Setting(
                            new MembershipService.ApiClient.Models.BaseModel {
                Id = invoice.UserId
            })).Data;
            if (user == null)
            {
                return(Result <InvoiceCoreModel> .Failed(Error.WithData(1000, new[] { "User not found " })));
            }

            return(Result <InvoiceCoreModel> .Successful(new InvoiceCoreModel
            {
                Id = invoice.Id, Amount = invoice.Amount, Description = invoice.Description,
                Status = (InvoiceStatus)invoice.Status, Title = invoice.Title, User = user,
                CreationDate = invoice.CreationDate,
                Enabled = invoice.Enabled
            }));
        });
Example #2
0
        public Task <Result <MessageCoreModel> > Get(BaseCoreModel coreModel)
        => Result <MessageCoreModel> .TryAsync(async() =>
        {
            var message = (await _repository.FirstOrDefaultAsync <Message>(i => i.Id == coreModel.Id)).Data;
            if (message == null)
            {
                return(Result <MessageCoreModel> .Failed(Error.WithData(1000, new[] { "Message not found " })));
            }

            var userIds = new List <Guid> {
                message.FromUserId, message.ToUserId
            };
            var users = (await _membershipServiceApi.SystemUserApiService.ListByIds(userIds)).Data;

            message.IsRead = true;
            await _repository.CommitAsync();


            return(Result <MessageCoreModel> .Successful(new MessageCoreModel
            {
                Id = message.Id, Body = message.Body, Title = message.Title,
                Priority = (MessagePriority)message.Priority,
                FromUser = users.FirstOrDefault(u => u.Id == message.FromUserId),
                ToUser = users.FirstOrDefault(u => u.Id == message.ToUserId),
                Enabled = message.Enabled
            }));
        });
        public async Task <Result <string> > CreateOrder(BaseCoreModel coreModel)
        {
            var invoice = await _repository.FirstOrDefaultAsync <Invoice>(i => i.Id == coreModel.Id,
                                                                          i => i.UserSurvey.Select(us => us.Tax), i => i.PaypalOrder);

            if (!invoice.Success || invoice.Data == null)
            {
                return(Result <string> .Failed(Error.WithData(1000, new[] { "Invoice not found" })));
            }

            var result = await _paypalHttpClient.Order(invoice.Data.Id.ToString(), invoice.Data.Amount);

            if (!result.Success || result.Data == null)
            {
                return(Result <string> .Failed(result.Error));
            }
            var paypalOrderStatus = invoice.Data.PaypalOrder?.Status;

            invoice.Data.PaypalOrder = result.Data;
            if (!string.IsNullOrEmpty(paypalOrderStatus))
            {
                invoice.Data.PaypalOrder.Status = "#" + invoice.Data.PaypalOrder.Status;
            }
            await _repository.CommitAsync();

            return(Result <string> .Successful(result.Data.ApproveLink));
        }
        public Task <Result <SurveyCoreModel> > Get(BaseCoreModel coreModel)
        => Result <SurveyCoreModel> .TryAsync(async() =>
        {
            var result = await _repository.FirstOrDefaultAsNoTrackingAsync <Survey>(s => s.Id == coreModel.Id,
                                                                                    s => s.Question.Select(
                                                                                        q => q.Answer.Select(a => a.Action)),
                                                                                    s => s.Question.Select(q => q.MustAnswered.Select(ma => ma.Answer)));

            if (!result.Success || result.Data == null)
            {
                return(Result <SurveyCoreModel> .Failed(Error.WithData(1000, new[] { "Survey not found " })));
            }

            var isAdmin = generalDataService.User.Permissions.Any(p => p == (int)PermissionType.Admin);

            var survey = result.Data;
            var user   = await _membershipServiceApi.AuthAuthApiService.Setting(
                new MembershipService.ApiClient.Models.BaseModel
            {
                Id = survey.CreatedBy
            });
            if (!user.Success || user.Data == null)
            {
                return(Result <SurveyCoreModel> .Failed(Error.WithData(1000, new[] { "User not found " })));
            }

            user.Data.Role  = null;
            var surveyModel = new SurveyCoreModel
            {
                Id          = survey.Id,
                Name        = survey.Name,
                Description = survey.Description,
                Enabled     = survey.Enabled ?? true,
                CreatedBy   = isAdmin ? user.Data : null,
                Questions   = survey.Question.Select(q => new QuestionCoreModel
                {
                    Id                 = q.Id,
                    Text               = q.Text,
                    Number             = q.Number,
                    MustAnsweredNumber = q.MustAnswered.Select(ma => ma.Answer.Number).ToList(),
                    Answers            = q.Answer.Select(a => new AnswerCoreModel
                    {
                        Id      = a.Id,
                        Text    = a.Text,
                        Number  = a.Number,
                        Type    = (AnswerType)a.Type,
                        Actions = a.Action.Select(action => new ActionCoreModel
                        {
                            Id    = action.Id,
                            Type  = (ActionType)action.Type,
                            Value = action.Value
                        }).ToList()
                    }).ToList()
                }).ToList()
            };
            return(Result <SurveyCoreModel> .Successful(surveyModel));
        });
        public Task <Result <DataAccess.EFModels.Blob> > Get(BaseCoreModel coreModel)
        => Result <DataAccess.EFModels.Blob> .TryAsync(async() =>
        {
            var result = await _repository.FirstOrDefaultAsNoTrackingAsync <DataAccess.EFModels.Blob>(b => b.Id == coreModel.Id);
            if (result.Data == null)
            {
                return(Result <DataAccess.EFModels.Blob> .Failed(Error.WithCode(ErrorCodes.NotFound)));
            }

            return(Result <DataAccess.EFModels.Blob> .Successful(result.Data));
        });
        public Task <Result <UserAnswerModel> > NextQuestion(BaseCoreModel coreModel) // question Id
        => Result <UserAnswerModel> .TryAsync(async() =>
        {
            var result = await _repository.FirstOrDefaultAsync <Answer>(a => a.Question.Id == coreModel.Id,
                                                                        us => us.UserAnswer.Select(ua => ua.Answer.Question.MustAnswered),
                                                                        a => a.Question.Survey.Question.Select(q => q.Answer.Select(aa => aa.Action)), a => a.Action);
            if (!result.Success || result.Data == null)
            {
                return(Result <UserAnswerModel> .Failed(Error.WithCode(ErrorCodes.NotFound)));
            }
            var answer = result.Data;

            var resultUserSurvey = await _repository.FirstOrDefaultAsync <UserSurvey>(us =>
                                                                                      us.SurveyId == answer.Question.Survey.Id && us.UserId == generalDataService.User.Id,
                                                                                      us => us.UserAnswer.Select(ua =>
                                                                                                                 ua.Answer.Question.Survey.Question.Select(q => q.Answer.Select(a => a.UserAnswer))),
                                                                                      us => us.UserAnswer.Select(ua =>
                                                                                                                 ua.Answer.Question.Survey.Question.Select(q => q.Answer.Select(a => a.MustAnswered))),
                                                                                      us => us.Survey,
                                                                                      us => us.UserAnswer.Select(ua => ua.Answer.Question.MustAnswered));

            var userSurvey = resultUserSurvey.Data;
            if (!userSurvey.UserAnswer.Any())
            {
                return(Result <UserAnswerModel> .Failed(Error.WithData(1000,
                                                                       new[] { "you have to answer the current question to see the next question" })));
            }

            var nextQuestion = CalculateNextQuestion(userSurvey.UserAnswer.Select(ua => ua.Answer)
                                                     .FirstOrDefault(a => a.Question.Id == coreModel.Id), userSurvey, true);

            var answers = userSurvey.UserAnswer.Where(ua => ua.Answer.Question.Number == nextQuestion.Number)
                          .ToList();

            if (!answers.Any() && nextQuestion.Number - 1 !=
                userSurvey.UserAnswer.Select(ua => ua.Answer.Question).Max(q => q.Number))
            {
                return(Result <UserAnswerModel> .Failed(Error.WithData(1000,
                                                                       new[] { "this is the last question user has answered " })));
            }


            return(Result <UserAnswerModel> .Successful(new UserAnswerModel
            {
                Question = nextQuestion,
                QuestionCount = userSurvey.Survey.Question.Count,
                UserAnswerId = answers.Any() ? answers?.Select(a => a.Answer.Id)?.ToList() : new List <Guid>(),
                AnswerType =
                    answers.Any() ? (AnswerType)answers.FirstOrDefault()?.Answer?.Type : AnswerType.Static,
                AnswerText = answers.Any() ? answers.FirstOrDefault()?.Answer?.Text : "",
                UserAnswerText = answers.Any() ? answers.FirstOrDefault()?.Text : ""
            }));
        });
Example #7
0
        public Task <Result <TaxCoreModel> > Get(BaseCoreModel coreModel)
        => Result <TaxCoreModel> .TryAsync(async() =>
        {
            var result = await _repository.FirstOrDefaultAsync <Tax>(s => s.Id == coreModel.Id);

            if (!result.Success || result.Data == null)
            {
                return(Result <TaxCoreModel> .Failed(Error.WithData(1000, new[] { "Tax Not Found" })));
            }

            var tax = result.Data;

            tax.IsChecked = true;
            await _repository.CommitAsync();

            var userIds = tax.UserId;
            var user    = (await _membershipServiceApi.AuthAuthApiService.Setting(
                               new MembershipService.ApiClient.Models.BaseModel {
                Id = userIds
            })).Data;
            if (user == null)
            {
                return(Result <TaxCoreModel> .Failed(Error.WithData(1000, new[] { "User not found " })));
            }

            var taxModel = new TaxCoreModel
            {
                Id          = tax.Id,
                Title       = tax.Title,
                Description = tax.Description,
                User        = user,
                TaxFile     = tax.TaxFile != null
                        ? new TaxFileModel
                {
                    EngagementBlobId = tax.TaxFile.EngagementBlobId,
                    TaxFormBlobId    = tax.TaxFile.TaxFormBlobId,
                    ExtraTaxFile     = tax.TaxFile.ExtraTaxFile != null && tax.TaxFile.ExtraTaxFile.Any()
                                ? tax.TaxFile.ExtraTaxFile.Select(e => new ExtraTaxFileModel
                    {
                        Name   = e.Name,
                        BlobId = e.BlobId
                    }).ToList()
                                : null
                }
                        : null,
                Amount       = tax.Amount,
                Status       = (TaxStatus)tax.Status,
                CreationDate = tax.CreationDate,
                Enabled      = tax.Enabled
            };
            return(Result <TaxCoreModel> .Successful(taxModel));
        });
        public Task <Result <UserUncheckedModel> > CountByUser(BaseCoreModel coreModel)
        => Result <UserUncheckedModel> .TryAsync(async() =>
        {
            var unreadMessages = (await _messageBiz.CountByUser(coreModel.Id.Value)).Data;
            var uncheckedTaxes = (await _taxBiz.CountByUser(coreModel.Id.Value)).Data;
            var unpaidInvoices = (await _invoiceBiz.CountByUser(coreModel.Id.Value)).Data;
            var hasDoneSurvey  = (await _userSurveyBiz.UserDoneSurvey(coreModel.Id.Value)).Data;

            return(Result <UserUncheckedModel> .Successful(new UserUncheckedModel
            {
                UncheckedTaxes = uncheckedTaxes, UnpaidInvoices = unpaidInvoices, UnreadMessages = unreadMessages, HasDoneSurvey = hasDoneSurvey
            }));
        });
 public Task <Result> Delete(BaseCoreModel model)
 => Result.TryAsync(async() =>
 {
     var app = await _repository.FirstOrDefaultAsync <Appointment>(a => a.Id == model.Id,
                                                                   a => a.Invoice);
     if (app.Data.Invoice != null)
     {
         _repository.Remove(app.Data.Invoice);
     }
     _repository.Remove(app.Data);
     await _repository.CommitAsync();
     return(Result.Successful());
 });
Example #10
0
        public async Task <Result <bool> > Delete(BaseCoreModel model)
        {
            var result = await _repository.FirstOrDefaultAsync <AppointmentException>(a => a.Id == model.Id);

            if (!result.Success || result.Data == null)
            {
                return(Result <bool> .Failed(Error.WithData(1000,
                                                            new[] { "AppointmentException Not Found" })));
            }

            _repository.Remove(result.Data);
            await _repository.CommitAsync();

            return(Result <bool> .Successful(true));
        }
        public Task <Result <UserAnswerModel> > PreviousQuestion(BaseCoreModel coreModel) // question Id
        => Result <UserAnswerModel> .TryAsync(async() =>
        {
            var result = await _repository.FirstOrDefaultAsync <Answer>(a => a.Question.Id == coreModel.Id,
                                                                        us => us.UserAnswer.Select(ua => ua.Answer.Question.MustAnswered),
                                                                        a => a.Question.Survey.Question.Select(q => q.Answer.Select(aa => aa.Action)), a => a.Action);
            if (!result.Success || result.Data == null)
            {
                return(Result <UserAnswerModel> .Failed(Error.WithCode(ErrorCodes.NotFound)));
            }
            var answer = result.Data;
            if (answer.Question.Number == 1)
            {
                return(Result <UserAnswerModel> .Failed(Error.WithData(1000, new[] { "this is the first question " })));
            }

            var resultUserSurvey = await _repository.FirstOrDefaultAsync <UserSurvey>(us =>
                                                                                      us.SurveyId == answer.Question.Survey.Id && us.UserId == generalDataService.User.Id,
                                                                                      us => us.UserAnswer.Select(ua =>
                                                                                                                 ua.Answer.Question.Survey.Question.Select(q => q.Answer.Select(a => a.UserAnswer))),
                                                                                      us => us.UserAnswer.Select(ua =>
                                                                                                                 ua.Answer.Question.Survey.Question.Select(q => q.Answer.Select(a => a.MustAnswered))),
                                                                                      us => us.Survey,
                                                                                      us => us.UserAnswer.Select(ua => ua.Answer.Question.MustAnswered));


            if (resultUserSurvey.Data == null)     // first answer
            {
                return(Result <UserAnswerModel> .Successful(null));
            }
            else     // not the first answer
            {
                var userSurvey       = resultUserSurvey.Data;
                var previousQuestion = CalculatePreviousQuestion(answer.Question, userSurvey);
                var answers          = userSurvey.UserAnswer
                                       .Where(ua => ua.Answer.Question.Number == previousQuestion.Number)
                                       .ToList();
                return(Result <UserAnswerModel> .Successful(new UserAnswerModel
                {
                    Question = previousQuestion,
                    QuestionCount = userSurvey.Survey.Question.Count,
                    UserAnswerId = answers.Select(a => a.Answer.Id).ToList(),
                    AnswerType = (AnswerType)answers.FirstOrDefault()?.Answer?.Type,
                    AnswerText = answers.FirstOrDefault()?.Answer.Text,
                    UserAnswerText = answers.FirstOrDefault()?.Text
                }));
            }
        });
Example #12
0
        public async Task <Result> Delete(BaseCoreModel coreModel)
        {
            var userId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "Id").Value);

            var setting = await _membershipServiceApi.AuthAuthApiService.Setting(new BaseModel { Id = userId });

            if (!setting.Data.Role.Name.ToLower().Contains("admin"))
            {
                return(Result.Failed(Error.WithData(1000, new[]
                {
                    "you dont have the permission to use this service"
                })));
            }

            await _userSurveyBiz.Delete(coreModel.Id.Value);

            return(await _membershipServiceApi.MembershipUserApiService.Delete(
                       new MembershipService.ApiClient.Models.BaseModel
            {
                Id = coreModel.Id
            }));
        }
Example #13
0
 public async Task <Result <MessageCoreModel> > Get(BaseCoreModel coreModel)
 => await _messageBiz.Get(coreModel);
 public Task <Result <string> > Add(BaseCoreModel coreModel)
 => _paypalBiz.CreateOrder(coreModel);
Example #15
0
 public async Task <Result> Delete(BaseCoreModel coreModel)
 => await _AppointmentBiz.Delete(coreModel);
 public async Task <Result <UserAnswerModel> > PreviousQuestion(BaseCoreModel coreModel)
 => await _userSurveyBiz.PreviousQuestion(coreModel);
 public async Task <Result <SurveyCoreModel> > Get(BaseCoreModel coreModel)
 => await _surveyBiz.Get(coreModel);
Example #18
0
 public async Task <Result <TaxCoreModel> > Get(BaseCoreModel coreModel)
 => await _taxBiz.Get(coreModel);
 public async Task <Result <long> > CountByUser(BaseCoreModel coreModel)
 => await _invoiceBiz.CountByUser(coreModel.Id.Value);
Example #20
0
 public async Task <Result <AppointmentCoreModel> > Get(BaseCoreModel coreModel)
 => await _AppointmentBiz.Get(coreModel);
 public async Task <Result <InvoiceCoreModel> > Get(BaseCoreModel coreModel)
 => await _invoiceBiz.Get(coreModel);
        public async Task <Result <IList <ExceptionQuestionModel> > > SpecificQuestionAnswers(BaseCoreModel coreModel)
        {
            var usersurvey = await _repository.FirstOrDefaultAsNoTrackingAsync <UserSurvey>(u =>
                                                                                            u.SurveyId == coreModel.Id && u.UserId == generalDataService.User.Id,
                                                                                            u => u.Survey.Question.Select(q => q.Answer.Select(a => a.Action)),
                                                                                            u => u.UserAnswer.Select(ua => ua.Answer.Question.Answer),
                                                                                            u => u.UserAnswer.Select(ua => ua.Answer.Question.Survey));

            var answers = usersurvey.Data.UserAnswer
                          .Where(ua => ua.Answer.Question.Number >= 16 && ua.Answer.Question.Number <= 22).ToList();
            var questions = usersurvey.Data.Survey.Question.Where(q => q.Number >= 16 && q.Number <= 22).ToList();

            return(Result <IList <ExceptionQuestionModel> > .Successful(questions.Select(q =>
            {
                var answer = answers.FirstOrDefault(a => a.Answer.Question.Number == q.Number);
                return new ExceptionQuestionModel
                {
                    Question = new QuestionCoreModel
                    {
                        Id = q.Id,
                        Text = q.Text,
                        Number = q.Number,
                        Answers = q.Answer.Select(a => new AnswerCoreModel
                        {
                            Id = a.Id,
                            Text = a.Text,
                            Number = a.Number,
                            Type = (AnswerType)a.Type
                        }).ToList()
                    },
                    UserAnswerId = answer != null ? (Guid?)answer.Answer.Id : null
                };
            }).OrderBy(q => q.Question.Number).ToList()));
        }
Example #23
0
 public async Task <Result <TicketCoreModel> > Get(BaseCoreModel coreModel)
 => await _ticketBiz.Get(coreModel);
Example #24
0
 public async Task <Result <bool> > Delete(BaseCoreModel model)
 => await _appointmentExceptionBiz.Delete(model);
        public IActionResult Sign(BaseCoreModel coreModel)
        {
            // Embedded Signing Ceremony
            // 1. Create envelope request obj
            // 2. Use the SDK to create and send the envelope
            // 3. Create Envelope Recipient View request obj
            // 4. Use the SDK to obtain a Recipient View URL
            // 5. Redirect the user's browser to the URL

            // 1. Create envelope request object
            //    Start with the different components of the request
            Document document = new Document
            {
                DocumentBase64 = Convert.ToBase64String(global::System.IO.File.ReadAllBytes("Path")),
                Name           = "Lorem Ipsum", FileExtension = "pdf", DocumentId = "1"
            };

            Document[] documents = new Document[] { document };

            // Create the signer recipient object
            Signer signer = new Signer
            {
                Email       = signerEmail, Name = signerName, ClientUserId = signerClientId,
                RecipientId = "1", RoutingOrder = "1"
            };

            // Create the sign here tab (signing field on the document)
            SignHere signHereTab = new SignHere
            {
                DocumentId = "1", PageNumber = "1", RecipientId = "1",
                TabLabel   = "Sign Here Tab", XPosition = "195", YPosition = "147"
            };

            SignHere[] signHereTabs = new SignHere[] { signHereTab };

            // Add the sign here tab array to the signer object.
            signer.Tabs = new Tabs {
                SignHereTabs = new List <SignHere>(signHereTabs)
            };
            // Create array of signer objects
            Signer[] signers = new Signer[] { signer };
            // Create recipients object
            Recipients recipients = new Recipients {
                Signers = new List <Signer>(signers)
            };
            // Bring the objects together in the EnvelopeDefinition
            EnvelopeDefinition envelopeDefinition = new EnvelopeDefinition
            {
                EmailSubject = "Please sign the document",
                Documents    = new List <Document>(documents),
                Recipients   = recipients,
                Status       = "sent"
            };

            // 2. Use the SDK to create and send the envelope
            DocuSign.eSign.Client.ApiClient apiClient = new DocuSign.eSign.Client.ApiClient(basePath);
            apiClient.Configuration.AddDefaultHeader("Authorization", "Bearer " + accessToken);
            EnvelopesApi    envelopesApi = new EnvelopesApi(apiClient.Configuration);
            EnvelopeSummary results      = envelopesApi.CreateEnvelope(accountId, envelopeDefinition);

            // 3. Create Envelope Recipient View request obj
            string envelopeId = results.EnvelopeId;
            RecipientViewRequest viewOptions = new RecipientViewRequest
            {
                ReturnUrl            = "localhost:5000", ClientUserId = signerClientId,
                AuthenticationMethod = "none",
                UserName             = signerName, Email = signerEmail
            };

            // 4. Use the SDK to obtain a Recipient View URL
            ViewUrl viewUrl = envelopesApi.CreateRecipientView(accountId, envelopeId, viewOptions);

            // 5. Redirect the user's browser to the URL
            return(Redirect(viewUrl.Url));
        }