daily pastebin goal
81%
SHARE
TWEET

misijecontroller

luka6666 Jun 14th, 2018 58 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Text;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.EntityFrameworkCore;
  8. using Microsoft.Extensions.Logging;
  9. using Microsoft.Extensions.Options;
  10. using ProjektRPPP.Models;
  11. using ProjektRPPP.ViewModels;
  12. using Newtonsoft.Json;
  13.  
  14. namespace ProjektRPPP.Controllers
  15. {
  16.     public class MisijeController : Controller
  17.     {
  18.         private readonly RPPP14Context ctx;
  19.         private readonly AppSettings appData;
  20.         private readonly ILogger<MisijeController> logger;
  21.  
  22.         public MisijeController(RPPP14Context ctx, IOptionsSnapshot<AppSettings> options, ILogger<MisijeController> logger)
  23.         {
  24.             this.ctx = ctx;
  25.             appData = options.Value;
  26.             this.logger = logger;
  27.         }
  28.  
  29.         public IActionResult Index(int page = 1, int sort = 1, bool ascending = true)
  30.         {
  31.             int pagesize = appData.PageSize;
  32.  
  33.             var query = ctx.Misija
  34.                         .AsNoTracking();
  35.  
  36.             int count = query.Count();
  37.             if (count == 0)
  38.             {
  39.                 logger.LogInformation("Nema niti jedne misije u zapisu.");
  40.                 TempData[Constants.Message] = "Nema niti jedne misije u zapisu.";
  41.                 TempData[Constants.ErrorOccurred] = false;
  42.  
  43.                 return RedirectToAction(nameof(Create));
  44.             }
  45.  
  46.             var pagingInfo = new PagingInfo
  47.             {
  48.                 CurrentPage = page,
  49.                 Sort = sort,
  50.                 Ascending = ascending,
  51.                 ItemsPerPage = pagesize,
  52.                 TotalItems = count
  53.             };
  54.  
  55.             if (page > pagingInfo.TotalPages)
  56.             {
  57.                 return RedirectToAction(nameof(Index), new { page = pagingInfo.TotalPages, sort, ascending });
  58.             }
  59.             System.Linq.Expressions.Expression<Func<Misija, object>> orderSelector = null;
  60.             switch (sort)
  61.             {
  62.                 case 1:
  63.                     orderSelector = d => d.IdMisija;
  64.                     break;
  65.                 case 2:
  66.                     orderSelector = d => d.Datum;
  67.                     break;
  68.                 case 3:
  69.                     orderSelector = d => d.Trajanje;
  70.                     break;
  71.                 case 4:
  72.                     orderSelector = d => d.Ocekivanje;
  73.                     break;
  74.                 case 5:
  75.                     orderSelector = d => d.Rezultat;
  76.                     break;
  77.                 case 6:
  78.                     orderSelector = d => d.IdNebeskoTijelo;
  79.                     break;
  80.                 case 7:
  81.                     orderSelector = d => d.Ime;
  82.                     break;
  83.  
  84.  
  85.  
  86.             }
  87.  
  88.             if (orderSelector != null)
  89.             {
  90.                 query = ascending ? query.OrderBy(orderSelector) : query.OrderByDescending(orderSelector);
  91.             }
  92.  
  93.             var misije = query.Select(a => new MisijaViewModel
  94.             {
  95.                 IdMisija = a.IdMisija,
  96.                 Datum = a.Datum,
  97.                 Trajanje = (System.DateTimeOffset)a.Trajanje,
  98.                 Ocekivanje = a.Ocekivanje,
  99.                 Rezultat = a.Rezultat,
  100.                 IdNebeskoTijelo = (int)a.IdNebeskoTijelo,
  101.                 Ime = a.Ime
  102.             })
  103.                 .Skip((page - 1) * pagesize)
  104.                 .Take(pagesize)
  105.                 .ToList();
  106.  
  107.             var model = new MisijeViewModel
  108.             {
  109.                 Misije = misije,
  110.                 PagingInfo = pagingInfo
  111.             };
  112.  
  113.             return View(model);
  114.         }
  115.  
  116.         [HttpGet]
  117.         public IActionResult Create()
  118.         {
  119.             return View();
  120.         }
  121.  
  122.         [HttpPost]
  123.         [ValidateAntiForgeryToken]
  124.         public IActionResult Create(Misija misija)
  125.         {
  126.             logger.LogTrace(JsonConvert.SerializeObject(misija));
  127.             if (ModelState.IsValid)
  128.             {
  129.                 try
  130.                 {
  131.                     ctx.Add(misija);
  132.                     ctx.SaveChanges();
  133.                     logger.LogInformation(new EventId(1000), $"Misija {misija.Ime} dodana.");
  134.                     TempData[Constants.Message] = $"Misija {misija.Ime} je dodana";
  135.                     TempData[Constants.ErrorOccurred] = false;
  136.                     return RedirectToAction(nameof(Index));
  137.                 }
  138.                 catch (Exception exc)
  139.                 {
  140.                     logger.LogError("Pogreška prilikom dodavanja nove misije: {0}", new StringBuilder().AppendLine(exc.Message).ToString());
  141.                     ModelState.AddModelError(string.Empty, exc.Message);
  142.                     return View(misija);
  143.                 }
  144.             }
  145.             else
  146.             {
  147.                 return View(misija);
  148.             }
  149.         }
  150.  
  151.         [HttpPost]
  152.         [ValidateAntiForgeryToken]
  153.         public IActionResult Delete(int idMisije, int page = 1, int sort = 1, bool ascending = true)
  154.         {
  155.             var misija = ctx.Misija
  156.                 .AsNoTracking()
  157.                                .Where(d => d.IdMisija == idMisije)
  158.                 .SingleOrDefault();
  159.             if (misija != null)
  160.             {
  161.                 try
  162.                 {
  163.                     string ime = misija.Ime;
  164.                     ctx.Remove(misija);
  165.                     ctx.SaveChanges();
  166.                     logger.LogInformation($"Misija {ime} uspješno obrisana");
  167.                     TempData[Constants.Message] = $"Misija {ime} je uspješno obrisana";
  168.                     TempData[Constants.ErrorOccurred] = false;
  169.                 }
  170.                 catch (Exception exc)
  171.                 {
  172.                     TempData[Constants.Message] = "Pogreška prilikom brisanja: " + exc.Message;
  173.                     TempData[Constants.ErrorOccurred] = true;
  174.                     logger.LogError("Pogreška prilikom brisanja: " + new StringBuilder().AppendLine(exc.Message).ToString());
  175.                 }
  176.             }
  177.             else
  178.             {
  179.                 logger.LogWarning("Ne postoji misija s oznakom: {0} ", idMisije);
  180.                 TempData[Constants.Message] = "Ne postoji misija s oznakom: " + idMisije;
  181.                 TempData[Constants.ErrorOccurred] = true;
  182.             }
  183.             return RedirectToAction(nameof(Index), new { page = page, sort = sort, ascending = ascending });
  184.         }
  185.  
  186.         [HttpGet]
  187.         public IActionResult Edit(int id, int page = 1, int sort = 1, bool ascending = true)
  188.         {
  189.             var misija = ctx.Misija.AsNoTracking().Where(n => n.IdMisija == id).SingleOrDefault();
  190.  
  191.             if (misija == null)
  192.             {
  193.                 logger.LogWarning("Ne postoji misija s oznakom: {0} ", id);
  194.                 return NotFound("Ne postoji misija s oznakom: " + id);
  195.             }
  196.             else
  197.             {
  198.                 ViewBag.Page = page;
  199.                 ViewBag.Sort = sort;
  200.                 ViewBag.Ascending = ascending;
  201.                 return View(misija);
  202.             }
  203.         }
  204.  
  205.         [HttpPost, ActionName("Edit")]
  206.         [ValidateAntiForgeryToken]
  207.         public async Task<IActionResult> Update(int id, int page = 1, int sort = 1, bool ascending = true)
  208.         {
  209.             //za različite mogućnosti ažuriranja pogledati
  210.             //attach, update, samo id, ...
  211.             //https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/crud#update-the-edit-page
  212.  
  213.             try
  214.             {
  215.                 Misija misija = await ctx.Misija
  216.                                          .Where(n => n.IdMisija == id)
  217.                                   .FirstOrDefaultAsync();
  218.                 if (misija == null)
  219.                 {
  220.                     logger.LogWarning("Neispravan id: {0} ", id);
  221.                     return NotFound("Neispravan id: " + id);
  222.                 }
  223.  
  224.  
  225.                 if (await TryUpdateModelAsync<Misija>(misija, "",
  226.                                                       d => d.Datum, d => d.Trajanje, d => d.Ocekivanje, d => d.Rezultat, d => d.IdNebeskoTijelo, d => d.Ime
  227.                 ))
  228.                 {
  229.                     ViewBag.Page = page;
  230.                     ViewBag.Sort = sort;
  231.                     ViewBag.Ascending = ascending;
  232.                     try
  233.                     {
  234.                         await ctx.SaveChangesAsync();
  235.                         TempData[Constants.Message] = "Misija je ažurirana.";
  236.                         TempData[Constants.ErrorOccurred] = false;
  237.                         logger.LogInformation("Misija {0} ažurirana.", id);
  238.                         return RedirectToAction(nameof(Index), new { page = page, sort = sort, ascending = ascending });
  239.                     }
  240.                     catch (Exception exc)
  241.                     {
  242.                         logger.LogError("Pogreška prilikom dodavanja nove misije: {0}", new StringBuilder().AppendLine(exc.Message).ToString());
  243.                         ModelState.AddModelError(string.Empty, exc.Message);
  244.                         return View(misija);
  245.                     }
  246.                 }
  247.                 else
  248.                 {
  249.                     logger.LogError("Podatke o misiji nije moguće povezati sa zapisom.");
  250.                     ModelState.AddModelError(string.Empty, "Podatke o misiji nije moguće povezati sa zapisom");
  251.                     return View(misija);
  252.                 }
  253.             }
  254.             catch (Exception exc)
  255.             {
  256.                 TempData[Constants.Message] = exc.Message;
  257.                 TempData[Constants.ErrorOccurred] = true;
  258.                 return RedirectToAction(nameof(Edit), id);
  259.             }
  260.         }
  261.  
  262.         [HttpGet]
  263.         public IActionResult MasterDetail(int page = 1, int sort = 1, bool ascending = true)
  264.         {
  265.             int pagesize = appData.PageSize;
  266.  
  267.             var query = ctx.Misija
  268.                         .AsNoTracking();
  269.  
  270.  
  271.             int count = query.Count();
  272.             if (count == 0)
  273.             {
  274.  
  275.                 TempData[Constants.Message] = "Ne postoji niti jedna misija.";
  276.                 TempData[Constants.ErrorOccurred] = false;
  277.                 return RedirectToAction(nameof(Create));
  278.             }
  279.  
  280.             var pagingInfo = new PagingInfo
  281.             {
  282.                 CurrentPage = page,
  283.                 Sort = sort,
  284.                 Ascending = ascending,
  285.                 ItemsPerPage = pagesize,
  286.                 TotalItems = count
  287.             };
  288.             if (page > pagingInfo.TotalPages)
  289.             {
  290.                 return RedirectToAction(nameof(MasterDetail), new { page = pagingInfo.TotalPages, sort, ascending });
  291.             }
  292.  
  293.             System.Linq.Expressions.Expression<Func<Misija, object>> orderSelector = null;
  294.             switch (sort)
  295.             {
  296.                 case 1:
  297.                     orderSelector = d => d.IdMisija;
  298.                     break;
  299.                 case 2:
  300.                     orderSelector = d => d.Datum;
  301.                     break;
  302.                 case 3:
  303.                     orderSelector = d => d.Trajanje;
  304.                     break;
  305.                 case 4:
  306.                     orderSelector = d => d.Ocekivanje;
  307.                     break;
  308.                 case 5:
  309.                     orderSelector = d => d.Rezultat;
  310.                     break;
  311.                 case 6:
  312.                     orderSelector = d => d.IdNebeskoTijelo;
  313.                     break;
  314.                 case 7:
  315.                     orderSelector = d => d.Ime;
  316.                     break;
  317.                 case 8:
  318.                     orderSelector = d => d.AstronautMisijaUloga.Where(c => c.IdMisija == d.IdMisija).ToList().Count;
  319.                     break;
  320.  
  321.             }
  322.             if (orderSelector != null)
  323.             {
  324.                 query = ascending ?
  325.                        query.OrderBy(orderSelector) :
  326.                        query.OrderByDescending(orderSelector);
  327.             }
  328.  
  329.             var misije = query.Select(p => new MisijaDetailViewModel
  330.             {
  331.                 IdMisija = p.IdMisija,
  332.                 Datum = p.Datum,
  333.                 Trajanje = (System.DateTimeOffset)p.Trajanje,
  334.                 Ocekivanje = p.Ocekivanje,
  335.                 Rezultat = p.Rezultat,
  336.                 IdNebeskoTijelo = (int)p.IdNebeskoTijelo,
  337.                 Ime = p.Ime,
  338.                 Astronauti = ctx.AstronautMisijaUloga.AsNoTracking().Where(a => a.IdMisija == p.IdMisija).Select(n => n.IdAstronautNavigation).ToList(),
  339.                 Uloge = ctx.AstronautMisijaUloga.AsNoTracking().Where(a => a.IdMisija == p.IdMisija).Select(n => n.IdUlogaNavigation).ToList()
  340.  
  341.             })
  342.                   .Skip((page - 1) * pagesize)
  343.                   .Take(pagesize)
  344.                   .ToList();
  345.  
  346.             var model = new MisijeDetailViewModel
  347.             {
  348.                 Misije = misije,
  349.                 PagingInfo = pagingInfo
  350.             };
  351.  
  352.             return View(model);
  353.         }
  354.  
  355.         [HttpGet]
  356.         public IActionResult Details(int id)
  357.         {
  358.             var misija = ctx.Misija.Where(n => n.IdMisija == id)
  359.                 .Select(p => new MisijaDetailViewModel
  360.                 {
  361.                     IdMisija = p.IdMisija,
  362.                     Datum = p.Datum,
  363.                     Trajanje = (System.DateTimeOffset)p.Trajanje,
  364.                     Ocekivanje = p.Ocekivanje,
  365.                     Rezultat = p.Rezultat,
  366.                     IdNebeskoTijelo = (int)p.IdNebeskoTijelo,
  367.                     Astronauti = ctx.AstronautMisijaUloga.AsNoTracking().Where(a => a.IdMisija == p.IdMisija).Select(n => n.IdAstronautNavigation).ToList(),
  368.                     Uloge = ctx.AstronautMisijaUloga.AsNoTracking().Where(a => a.IdMisija == p.IdMisija).Select(n => n.IdUlogaNavigation).ToList()
  369.  
  370.                 }).SingleOrDefault();
  371.  
  372.             if (misija == null)
  373.             {
  374.                 return NotFound("Ne postoji astronaut s oznakom: " + id);
  375.             }
  376.             else
  377.             {
  378.                 return View(misija);
  379.             }
  380.         }
  381.  
  382.  
  383.     }
  384. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top