Add company controller and views.

This commit is contained in:
2018-04-15 01:38:49 +01:00
parent 0d383a4c65
commit a558c139b0
7 changed files with 283 additions and 9 deletions

View File

@@ -0,0 +1,72 @@
/******************************************************************************
// Canary Islands Computer Museum Website
// ----------------------------------------------------------------------------
//
// Filename : CompanyController.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// --[ Description ] ----------------------------------------------------------
//
// Company controller
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2003-2018 Natalia Portillo
*******************************************************************************/
using cicm_web.Models;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
namespace cicm_web.Controllers
{
public class CompanyController : Controller
{
readonly IHostingEnvironment hostingEnvironment;
public CompanyController(IHostingEnvironment env)
{
hostingEnvironment = env;
}
public IActionResult ByLetter(char id)
{
// ToUpper()
if(id >= 'a' && id <= 'z') id -= (char)32;
// Check if not letter
if(id < 'A' || id > 'Z') id = '\0';
ViewBag.Letter = id;
Company[] companies =
id == '\0' ? Company.GetAllItems() : Company.GetItemsStartingWithLetter(id);
ViewBag.WebRootPath = hostingEnvironment.WebRootPath;
return View(companies);
}
public IActionResult View(int id)
{
Company company = Company.GetItem(id);
ViewBag.Company = company;
Computer[] computers = Computer.GetItemsFromCompany(id);
ViewBag.WebRootPath = hostingEnvironment.WebRootPath;
return View(computers);
}
}
}

View File

@@ -1,4 +1,34 @@
using System.Collections.Generic; /******************************************************************************
// Canary Islands Computer Museum Website
// ----------------------------------------------------------------------------
//
// Filename : ComputerController.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// --[ Description ] ----------------------------------------------------------
//
// Computer controller
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2003-2018 Natalia Portillo
*******************************************************************************/
using System.Collections.Generic;
using System.Linq; using System.Linq;
using cicm_web.Models; using cicm_web.Models;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;

View File

@@ -28,7 +28,9 @@
// Copyright © 2003-2018 Natalia Portillo // Copyright © 2003-2018 Natalia Portillo
*******************************************************************************/ *******************************************************************************/
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace cicm_web.Models namespace cicm_web.Models
{ {
@@ -49,12 +51,18 @@ namespace cicm_web.Models
bool? result = Program.Database?.Operations.GetCompanies(out dbItems); bool? result = Program.Database?.Operations.GetCompanies(out dbItems);
if(result == null || result.Value == false || dbItems == null) return null; if(result == null || result.Value == false || dbItems == null) return null;
List<Company> items = new List<Company>(); return dbItems.Select(t => new Company {Id = t.Id, Name = t.Name}).OrderBy(t => t.Name).ToArray();
}
foreach(Cicm.Database.Schemas.Company dbItem in dbItems) public static Company[] GetItemsStartingWithLetter(char letter)
items.Add(new Company {Id = dbItem.Id, Name = dbItem.Name}); {
List<Cicm.Database.Schemas.Company> dbItems = null;
bool? result = Program.Database?.Operations.GetCompanies(out dbItems);
if(result == null || result.Value == false || dbItems == null) return null;
return items.ToArray(); return dbItems
.Where(t => t.Name.StartsWith(new string(letter, 1), StringComparison.InvariantCultureIgnoreCase))
.Select(t => new Company {Id = t.Id, Name = t.Name}).OrderBy(t => t.Name).ToArray();
} }
} }
} }

View File

@@ -70,16 +70,19 @@ namespace cicm_web.Models
bool? result = Program.Database?.Operations.GetComputers(out dbItems); bool? result = Program.Database?.Operations.GetComputers(out dbItems);
if(result == null || result.Value == false || dbItems == null) return null; if(result == null || result.Value == false || dbItems == null) return null;
return dbItems.Select(TransformItem) as Computer[]; List<Computer> items = new List<Computer>();
return dbItems.Select(TransformItem).OrderBy(t => t.Company.Name).ThenBy(t => t.Model).ToArray();
} }
public static Computer[] GetItemsFromCompany(int id) public static Computer[] GetItemsFromCompany(int id)
{ {
List<Cicm.Database.Schemas.Computer> dbItems = null; List<Cicm.Database.Schemas.Computer> dbItems = null;
bool? result = Program.Database?.Operations.GetComputers(out dbItems, id); bool? result = Program.Database?.Operations.GetComputers(out dbItems);
if(result == null || result.Value == false || dbItems == null) return null; if(result == null || result.Value == false || dbItems == null) return null;
return dbItems.Select(TransformItem) as Computer[]; // TODO: Company chosen by DB
return dbItems.Where(t => t.Company == id).Select(TransformItem).OrderBy(t => t.Model).ToArray();
} }
public static Computer GetItem(int id) public static Computer GetItem(int id)

View File

@@ -0,0 +1,81 @@
@{
/******************************************************************************
// Canary Islands Computer Museum Website
// ----------------------------------------------------------------------------
//
// Filename : ByLetter.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// --[ Description ] ----------------------------------------------------------
//
// Lists companies by letter (or all)
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2003-2018 Natalia Portillo
*******************************************************************************/
ViewData["Title"] = "Companies";
}
@using System.IO
@model IEnumerable<Company>
<p>Search results:</p>
<p align=center>
@if(ViewBag.Letter != '\0')
{
<b>@ViewBag.Letter</b>
<br />
}
@if(Model.Any())
{
<p>
@Model.Count() companies found in the database.<br />
@foreach(Company company in Model)
{
if(File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos/computers", company.Id + ".gif")))
{
<img src="@(System.IO.Path.Combine("/assets/logos/computers", company.Id + ".gif"))"
alt="">
}
if(File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos/computers", company.Id + ".jpg")))
{
<img src="@(System.IO.Path.Combine("/assets/logos/computers", company.Id + ".jpg"))"
alt="">
}
if(File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos/computers", company.Id + ".png")))
{
<img src="@(System.IO.Path.Combine("/assets/logos/computers", company.Id + ".png"))"
alt="">
}
<a asp-controller="Company"
asp-action="View"
asp-route-id="@company.Id">
@company.Name</a>
<br />
}
</p>
}
else
{
<p>There are no computers found in the database that start with this letter.</p>
}
</p>

View File

@@ -0,0 +1,80 @@
@{
/******************************************************************************
// Canary Islands Computer Museum Website
// ----------------------------------------------------------------------------
//
// Filename : ByLetter.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// --[ Description ] ----------------------------------------------------------
//
// Lists computers by company
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2003-2018 Natalia Portillo
*******************************************************************************/
ViewData["Title"] = "Companies";
}
@using System.IO
@model IEnumerable<Computer>
<p>Search results:</p>
<p align=center>
@if(ViewBag.Company != null)
{
if(File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos/computers", ViewBag.Company.Id + ".gif")))
{
<img src="@(System.IO.Path.Combine("/assets/logos/computers", ViewBag.Company.Id + ".gif"))"
alt="">
}
if(File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos/computers", ViewBag.Company.Id + ".jpg")))
{
<img src="@(System.IO.Path.Combine("/assets/logos/computers", ViewBag.Company.Id + ".jpg"))"
alt="">
}
if(File.Exists(System.IO.Path.Combine(ViewBag.WebRootPath, "assets/logos/computers", ViewBag.Company.Id + ".png")))
{
<img src="@(System.IO.Path.Combine("/assets/logos/computers", ViewBag.Company.Id + ".png"))"
alt="">
}
<b>@ViewBag.Company.Name</b>
<br />
}
@if(Model.Any())
{
<p>
@Model.Count() computers found in the database.<br />
@foreach(Computer computer in Model)
{
<a asp-controller="Computer"
asp-action="View"
asp-route-id="@computer.Id">
@computer.Model</a>
<br />
}
</p>
}
else
{
<p>There are no computers found in the database that belong to that company.</p>
}
</p>

View File

@@ -2,7 +2,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework> <TargetFramework>netcoreapp2.0</TargetFramework>
<Version>3.0.99.69</Version> <Version>3.0.99.84</Version>
<Company>Canary Islands Computer Museum</Company> <Company>Canary Islands Computer Museum</Company>
<Copyright>Copyright © 2003-2018 Natalia Portillo</Copyright> <Copyright>Copyright © 2003-2018 Natalia Portillo</Copyright>
<Product>Canary Islands Computer Museum Website</Product> <Product>Canary Islands Computer Museum Website</Product>