// GET: ClientTestHistories/Details/5
        public async Task <ActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ClientTestHistory clientTestHistory = await db.ClientTestHistories.FindAsync(id);

            if (clientTestHistory == null)
            {
                return(HttpNotFound());
            }
            clientTestHistory.TestThema = await db.TestThemas.FindAsync(clientTestHistory.TestThemaId);

            clientTestHistory.ClientTestQuestions = await db.ClientTestQuestions.Include(u => u.TestQuestion).Include(u => u.ClientSelectedAnswers).Where(u => u.ClientTestHistoryId == id).ToListAsync();

            foreach (var ques in clientTestHistory.ClientTestQuestions)
            {
                foreach (var ans in ques.ClientSelectedAnswers)
                {
                    ans.TestAnswer = await db.TestAnswers.FindAsync(ans.TestAnswerId);
                }
            }
            return(View(clientTestHistory));
        }
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            ClientTestHistory clientTestHistory = await db.ClientTestHistories.FindAsync(id);

            db.ClientTestHistories.Remove(clientTestHistory);
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
        public async Task <ActionResult> Edit([Bind(Include = "Id,Date,Point,TotalPoint,Comment,TestThemaId,ClientId")] ClientTestHistory clientTestHistory)
        {
            if (ModelState.IsValid)
            {
                db.Entry(clientTestHistory).State = EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            ViewBag.ClientId    = new SelectList(db.Clients, "Id", "Id", clientTestHistory.ClientId);
            ViewBag.TestThemaId = new SelectList(db.TestThemas, "Id", "Thema", clientTestHistory.TestThemaId);
            return(View(clientTestHistory));
        }
        // GET: CustomerArea/ClientTestHistories/Delete/5
        public async Task <ActionResult> Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ClientTestHistory clientTestHistory = await db.ClientTestHistories.FindAsync(id);

            if (clientTestHistory == null)
            {
                return(HttpNotFound());
            }
            return(View(clientTestHistory));
        }
        // GET: CustomerArea/ClientTestHistories/Edit/5
        public async Task <ActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ClientTestHistory clientTestHistory = await db.ClientTestHistories.FindAsync(id);

            if (clientTestHistory == null)
            {
                return(HttpNotFound());
            }
            ViewBag.ClientId    = new SelectList(db.Clients, "Id", "Id", clientTestHistory.ClientId);
            ViewBag.TestThemaId = new SelectList(db.TestThemas, "Id", "Thema", clientTestHistory.TestThemaId);
            return(View(clientTestHistory));
        }
        // GET: CustomerArea/ClientTestHistories/Create
        public async Task <ActionResult> Create(int id)
        {
            double            totalPoint        = db.TestThemas.Find(id).TotalPoint;
            string            clientId          = db.Users.Where(u => u.UserName == User.Identity.Name).Single().Id;
            ClientTestHistory clientTestHistory = new ClientTestHistory
            {
                TestThemaId = id,
                ClientId    = clientId,
                Date        = DateTime.Now,
                Point       = 0,
                TotalPoint  = totalPoint
            };

            db.ClientTestHistories.Add(clientTestHistory);
            await db.SaveChangesAsync();

            ViewBag.Thema = db.TestThemas.Find(id).Thema;
            ViewBag.ClientTestHistoryId = clientTestHistory.Id;
            return(RedirectToAction("Create", routeValues: new { controller = "ClientTestQuestions", clientTestHistoryId = clientTestHistory.Id, isFirst = true }));
        }
        public async Task <ActionResult> CreateFinish(int clientTestHistoryId, string comment)
        {
            ClientTestHistory clientTestHistory = db.ClientTestHistories.Find(clientTestHistoryId);

            clientTestHistory.Comment         = comment;
            db.Entry(clientTestHistory).State = EntityState.Modified;
            await db.SaveChangesAsync();

            // Баллын есептеу

            double totalPoint = clientTestHistory.TotalPoint;
            double point      = 0;
            List <TestQuestion> testQuestions = await db.TestQuestions.Include(u => u.TestAnswers).Where(u => u.TestThemaId == clientTestHistory.TestThemaId).ToListAsync();

            double totalWeight = testQuestions.Select(u => u.ShareWeight).Sum();
            List <ClientTestQuestion> clientTestQuestions = await db.ClientTestQuestions.Include(u => u.ClientSelectedAnswers).Where(u => u.ClientTestHistoryId == clientTestHistoryId).ToListAsync();

            foreach (var clQues in clientTestQuestions)
            {
                TestQuestion testQuestion         = testQuestions.Where(u => u.Id == clQues.TestQuestionId).First();
                double       quesTotalPoint       = testQuestion.ShareWeight / totalWeight * totalPoint;
                double       curAnsTotalWeight    = testQuestion.TestAnswers.Where(u => u.IsCurrect).Select(u => u.ShareWeight).Sum();
                double       curSelectTotalWeight = 0;
                foreach (var selectAns in clQues.ClientSelectedAnswers)
                {
                    TestAnswer testAnswer = testQuestion.TestAnswers.Where(u => u.Id == selectAns.TestAnswerId).First();
                    if (testAnswer.IsCurrect)
                    {
                        curSelectTotalWeight += testAnswer.ShareWeight;
                    }
                }

                point += curSelectTotalWeight / curAnsTotalWeight * quesTotalPoint;
            }
            clientTestHistory.Point           = point;
            db.Entry(clientTestHistory).State = EntityState.Modified;
            await db.SaveChangesAsync();

            return(RedirectToAction("Details", routeValues: new { id = clientTestHistoryId }));
        }