PracowniaTestowania/WebApplication5/Controllers/CRUDController.cs

201 lines
5.8 KiB
C#

using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Extensions.DependencyInjection;
using System.Web.Mvc;
using WebApplication5.Models;
using WebApplication5.Templates;
using System.Threading;
using System.Globalization;
using System.Diagnostics;
namespace WebApplication5.Controllers
{
public class CRUDController : Controller
{
private readonly IMapper _mapper;
private TestsDbContext _db;
public CRUDController(IServiceCollection serviceDescriptors)
{
}
public CRUDController(TestsDbContext db, IMapper mapper)
{
_mapper = mapper;
_db = db;
}
public ActionResult Index()
{
return View();
}
public JsonResult GetCategories()
{
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
var result = _mapper.ProjectTo<CategoryViewModel>(_db.Categories);
return Json(result.ToList(),JsonRequestBehavior.AllowGet);
}
public JsonResult GetQuestions(int categoryId)
{
var result = _mapper.ProjectTo<QuestionViewModel>(_db.Questions.Where(q => q.CategoryId == categoryId));
return Json(result.ToList());
}
public ActionResult PutCategory(CategoryViewModel category)
{
try
{
if (!category.Id.HasValue)
{
try
{
var cat = _mapper.Map<Category>(category);
_db.Categories.Add(cat);
_db.SaveChanges();
}
catch (Exception ex)
{
var i = ex;
try
{
var xy = new Category()
{
Id = 1,
Name = "name"
};
_db.Categories.Add(xy);
_db.SaveChanges();
}
catch (Exception e)
{
var x = 0;
}
}
}
else
{
//_db.Categories.(_mapper.Map<Category>(category));
}
_db.SaveChanges();
}
catch (Exception e)
{
var x = 1;
}
return View();
}
public ActionResult PutQuestion(QuestionViewModel question, int categoryId)
{
var q = _mapper.Map<Question>(question);
var c = _db.Categories.FirstOrDefault(cat => cat.Id == categoryId);
if (c == null)
return null;
if (question.Id == 0)
{
_db.Questions.Add(q);
c.Questions.Add(q);
}
else
{
//_db.Questions.Update(q);
}
if (question.Answers.Any())
{
var allAns = question.Answers.Select(an => _mapper.Map<Answer>(an)).ToList();
var existingAns = _db.Answers.Where(a => allAns.Any(w => w.Id == a.Id));
var newAns = allAns.Except(existingAns).ToList();
foreach (var a in newAns)
{
_db.Answers.Add(a);
q.Answers.Add(a);
}
foreach (var a in existingAns)
{
//_db.Answers.Update(a);
}
}
_db.SaveChanges();
return View();
}
public ActionResult DeleteCategory(int categoryId, bool deleteQuestions)
{
var c = _db.Categories.FirstOrDefault(cat => cat.Id == categoryId);
if (c == null)
return null;
foreach (var q in c.Questions)
{
if (deleteQuestions)
_db.Questions.Remove(q);
else
q.CategoryId = 1;//Unknown, pre initialized in the DB.
}
_db.Categories.Remove(c);
_db.SaveChanges();
return View();
}
public ActionResult DeleteQuestion(int questionId)
{
var q = _db.Questions.FirstOrDefault(cat => cat.Id == questionId);
if (q == null)
return null;
foreach (var a in q.Answers)
{
_db.Answers.Remove(a);
}
_db.Questions.Remove(q);
_db.SaveChanges();
return View();
}
public ActionResult GeneratePDF(TemplatesOrder templatesToGenerate)
{
var catq1 = new TemplateViewModel()
{
CategoryId = 1,
NumberOfQuestions = 3,
QuestionsIds = new List<int>(){ 1, 2, 3 }
};
var catq2 = new TemplateViewModel()
{
CategoryId = 2,
QuestionsIds = new List<int>(),
NumberOfQuestions = 2
};
templatesToGenerate = new TemplatesOrder()
{
TestName = "Wielki Test1",
NumberOfExamples = 5,
Categories = new List<TemplateViewModel>() { catq1, catq2 }
};
var x = new CheckCards(_db);
x.CheckFolder("");
var generator = new TemplateGenerator(_db, templatesToGenerate);
generator.ProcessOrder();
return View();
}
}
}