Upload project.
This commit is contained in:
parent
0df30b8f36
commit
5829fb5504
261
.gitignore
vendored
Normal file
261
.gitignore
vendored
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Ll]og/
|
||||||
|
|
||||||
|
# Visual Studio 2015 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
# NUNIT
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
# DNX
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_i.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# JustCode is a .NET coding add-in
|
||||||
|
.JustCode
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
#*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
PublishScripts/
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/packages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/packages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/packages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignoreable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
ClientBin/
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
node_modules/
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# JetBrains Rider
|
||||||
|
.idea/
|
||||||
|
*.sln.iml
|
||||||
|
|
||||||
|
# CodeRush
|
||||||
|
.cr/
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
79
ThAmCo.Catering/Controllers/BookingsController.cs
Normal file
79
ThAmCo.Catering/Controllers/BookingsController.cs
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using ThAmCo.Catering.Data;
|
||||||
|
using ThAmCo.Venues.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Catering.Controllers
|
||||||
|
{
|
||||||
|
public class BookingsController
|
||||||
|
{
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
[ApiController]
|
||||||
|
public class ValuesController : ControllerBase
|
||||||
|
{
|
||||||
|
private readonly CateringDbContext _context;
|
||||||
|
|
||||||
|
public ValuesController(CateringDbContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET api/values
|
||||||
|
[HttpGet]
|
||||||
|
public ActionResult<IEnumerable<Menu>> Get()
|
||||||
|
{
|
||||||
|
return _context.Menus.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET api/values/5
|
||||||
|
[HttpGet("{id}")]
|
||||||
|
public ActionResult<string> Get(int id)
|
||||||
|
{
|
||||||
|
var menu = _context.Menus.FirstOrDefault(f => f.Id == id);
|
||||||
|
|
||||||
|
if (menu != null)
|
||||||
|
{
|
||||||
|
return Ok(menu);
|
||||||
|
}
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST api/values/
|
||||||
|
//Gives the function the menuid it wants to book.
|
||||||
|
[HttpPost]
|
||||||
|
public IActionResult Post([FromBody] int id)
|
||||||
|
{
|
||||||
|
if (_context.Menus.Any(m => m.Id == id))
|
||||||
|
{
|
||||||
|
FoodBooking fb = new FoodBooking
|
||||||
|
{
|
||||||
|
MenuId = id,
|
||||||
|
//Notes = notes,
|
||||||
|
};
|
||||||
|
|
||||||
|
var updatedFB = _context.Add(fb);
|
||||||
|
_context.SaveChangesAsync();
|
||||||
|
|
||||||
|
return Ok(updatedFB);
|
||||||
|
}
|
||||||
|
return BadRequest("MenuID was not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// PUT api/values/5
|
||||||
|
[HttpPut("{id}")]
|
||||||
|
public void Put(int id, [FromBody] string value)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// DELETE api/values/5
|
||||||
|
[HttpDelete("{id}")]
|
||||||
|
public void Delete(int id)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
93
ThAmCo.Catering/Controllers/ValuesController.cs
Normal file
93
ThAmCo.Catering/Controllers/ValuesController.cs
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using ThAmCo.Catering.Data;
|
||||||
|
using ThAmCo.Venues.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Catering.Controllers
|
||||||
|
{
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
[ApiController]
|
||||||
|
public class ValuesController : ControllerBase
|
||||||
|
{
|
||||||
|
private readonly CateringDbContext _context;
|
||||||
|
|
||||||
|
public ValuesController(CateringDbContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET api/values
|
||||||
|
[HttpGet]
|
||||||
|
public ActionResult<IEnumerable<Menu>> Get()
|
||||||
|
{
|
||||||
|
return _context.Menus.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET api/values/5
|
||||||
|
[HttpGet("{id}")]
|
||||||
|
public ActionResult<string> Get(int id)
|
||||||
|
{
|
||||||
|
var menu = _context.Menus.FirstOrDefault(f => f.Id == id);
|
||||||
|
|
||||||
|
if (menu != null)
|
||||||
|
{
|
||||||
|
return Ok(menu);
|
||||||
|
}
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST api/values/
|
||||||
|
//Gives the function the menuid it wants to book.
|
||||||
|
[HttpPost]
|
||||||
|
public IActionResult Post([FromBody] int id)
|
||||||
|
{
|
||||||
|
if (_context.Menus.Any(m => m.Id == id))
|
||||||
|
{
|
||||||
|
FoodBooking fb = new FoodBooking
|
||||||
|
{
|
||||||
|
MenuId = id,
|
||||||
|
//Notes = notes,
|
||||||
|
};
|
||||||
|
|
||||||
|
var updatedFB = _context.Add(fb);
|
||||||
|
_context.SaveChangesAsync();
|
||||||
|
|
||||||
|
return Ok(updatedFB);
|
||||||
|
}
|
||||||
|
return BadRequest("MenuID was not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// PUT api/values/5
|
||||||
|
[HttpPut("{id}")]
|
||||||
|
public IActionResult Put([Bind("Items,Price")] Menu food)
|
||||||
|
{
|
||||||
|
//If menu exists, edit the current entry.
|
||||||
|
if (_context.Menus.Any(m => m.Id == food.Id) && ModelState.IsValid)
|
||||||
|
{
|
||||||
|
var menu = _context.Menus.First(m => m.Id == food.Id);
|
||||||
|
|
||||||
|
_context.Update(menu);
|
||||||
|
_context.SaveChangesAsync();
|
||||||
|
return Ok(menu);
|
||||||
|
}
|
||||||
|
//If menu doesn't exist, make a current entry.
|
||||||
|
else if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
_context.Add(food);
|
||||||
|
_context.SaveChangesAsync();
|
||||||
|
return Ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
// DELETE api/values/5
|
||||||
|
[HttpDelete("{id}")]
|
||||||
|
public void Delete(int id)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
58
ThAmCo.Catering/Data/CateringDbContext.cs
Normal file
58
ThAmCo.Catering/Data/CateringDbContext.cs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using ThAmCo.Catering.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Venues.Data
|
||||||
|
{
|
||||||
|
public class CateringDbContext : DbContext
|
||||||
|
{
|
||||||
|
public DbSet<Menu> Menus { get; set; }
|
||||||
|
public DbSet<FoodBooking> FoodBookings { get; set; }
|
||||||
|
|
||||||
|
private readonly IHostingEnvironment _hostEnv;
|
||||||
|
|
||||||
|
public CateringDbContext(DbContextOptions<CateringDbContext> options,
|
||||||
|
IHostingEnvironment env) : base(options)
|
||||||
|
{
|
||||||
|
_hostEnv = env;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnConfiguring(DbContextOptionsBuilder builder)
|
||||||
|
{
|
||||||
|
base.OnConfiguring(builder);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnModelCreating(ModelBuilder builder)
|
||||||
|
{
|
||||||
|
base.OnModelCreating(builder);
|
||||||
|
|
||||||
|
builder.HasDefaultSchema("thamco.catering");
|
||||||
|
|
||||||
|
builder.Entity<Menu>()
|
||||||
|
.HasKey(m => m.Id);
|
||||||
|
|
||||||
|
builder.Entity<FoodBooking>()
|
||||||
|
.HasKey(f => f.Id);
|
||||||
|
|
||||||
|
builder.Entity<Menu>()
|
||||||
|
.HasMany(f => f.FoodBookings)
|
||||||
|
.WithOne(m => m.Menu)
|
||||||
|
.HasForeignKey(m => m.Id);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (_hostEnv != null && _hostEnv.IsDevelopment())
|
||||||
|
{
|
||||||
|
builder.Entity<Menu>()
|
||||||
|
.HasData(
|
||||||
|
new Menu { Id = 1, Price = 8.50, Items = "Chicken Pate, Chicken Roast, Chicken Cake" },
|
||||||
|
new Menu { Id = 2, Price = 7.50, Items = "Toast, Cheese On Toast, Jam on Toast" },
|
||||||
|
new Menu { Id = 3, Price = 9, Items = "Mac and Cheese, Alan's Special, Cheesecake" }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
ThAmCo.Catering/Data/FoodBooking.cs
Normal file
20
ThAmCo.Catering/Data/FoodBooking.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
namespace ThAmCo.Catering.Data
|
||||||
|
{
|
||||||
|
public class FoodBooking
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public int MenuId { get; set; }
|
||||||
|
|
||||||
|
public Menu Menu { get; set; }
|
||||||
|
|
||||||
|
public string Notes { get; set; }
|
||||||
|
}
|
||||||
|
}
|
18
ThAmCo.Catering/Data/Menu.cs
Normal file
18
ThAmCo.Catering/Data/Menu.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ThAmCo.Catering.Data
|
||||||
|
{
|
||||||
|
public class Menu
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public string Items { get; set; }
|
||||||
|
|
||||||
|
public double Price { get; set; }
|
||||||
|
|
||||||
|
public List<FoodBooking> FoodBookings { get; set; }
|
||||||
|
}
|
||||||
|
}
|
68
ThAmCo.Catering/Migrations/20181204120817_InitialCreate.Designer.cs
generated
Normal file
68
ThAmCo.Catering/Migrations/20181204120817_InitialCreate.Designer.cs
generated
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using ThAmCo.Venues.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Catering.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(CateringDbContext))]
|
||||||
|
[Migration("20181204120817_InitialCreate")]
|
||||||
|
partial class InitialCreate
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasDefaultSchema("thamco.catering")
|
||||||
|
.HasAnnotation("ProductVersion", "2.1.1-rtm-30846")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Catering.Data.FoodBooking", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id");
|
||||||
|
|
||||||
|
b.Property<int>("MenuId");
|
||||||
|
|
||||||
|
b.Property<string>("Notes");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("FoodBookings");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Catering.Data.Menu", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Items");
|
||||||
|
|
||||||
|
b.Property<double>("Price");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Menus");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new { Id = 1, Items = "Chicken Pate, Chicken Roast, Chicken Cake", Price = 8.5 },
|
||||||
|
new { Id = 2, Items = "Toast, Cheese On Toast, Jam on Toast", Price = 7.5 },
|
||||||
|
new { Id = 3, Items = "Mac and Cheese, Alan's Special, Cheesecake", Price = 9.0 }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Catering.Data.FoodBooking", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Catering.Data.Menu", "Menu")
|
||||||
|
.WithMany("FoodBookings")
|
||||||
|
.HasForeignKey("Id")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
79
ThAmCo.Catering/Migrations/20181204120817_InitialCreate.cs
Normal file
79
ThAmCo.Catering/Migrations/20181204120817_InitialCreate.cs
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Catering.Migrations
|
||||||
|
{
|
||||||
|
public partial class InitialCreate : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.EnsureSchema(
|
||||||
|
name: "thamco.catering");
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Menus",
|
||||||
|
schema: "thamco.catering",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(nullable: false)
|
||||||
|
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
|
||||||
|
Items = table.Column<string>(nullable: true),
|
||||||
|
Price = table.Column<double>(nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Menus", x => x.Id);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "FoodBookings",
|
||||||
|
schema: "thamco.catering",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(nullable: false),
|
||||||
|
MenuId = table.Column<int>(nullable: false),
|
||||||
|
Notes = table.Column<string>(nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_FoodBookings", x => x.Id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_FoodBookings_Menus_Id",
|
||||||
|
column: x => x.Id,
|
||||||
|
principalSchema: "thamco.catering",
|
||||||
|
principalTable: "Menus",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.catering",
|
||||||
|
table: "Menus",
|
||||||
|
columns: new[] { "Id", "Items", "Price" },
|
||||||
|
values: new object[] { 1, "Chicken Pate, Chicken Roast, Chicken Cake", 8.5 });
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.catering",
|
||||||
|
table: "Menus",
|
||||||
|
columns: new[] { "Id", "Items", "Price" },
|
||||||
|
values: new object[] { 2, "Toast, Cheese On Toast, Jam on Toast", 7.5 });
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.catering",
|
||||||
|
table: "Menus",
|
||||||
|
columns: new[] { "Id", "Items", "Price" },
|
||||||
|
values: new object[] { 3, "Mac and Cheese, Alan's Special, Cheesecake", 9.0 });
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "FoodBookings",
|
||||||
|
schema: "thamco.catering");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Menus",
|
||||||
|
schema: "thamco.catering");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
66
ThAmCo.Catering/Migrations/CateringDbContextModelSnapshot.cs
Normal file
66
ThAmCo.Catering/Migrations/CateringDbContextModelSnapshot.cs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using ThAmCo.Venues.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Catering.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(CateringDbContext))]
|
||||||
|
partial class CateringDbContextModelSnapshot : ModelSnapshot
|
||||||
|
{
|
||||||
|
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasDefaultSchema("thamco.catering")
|
||||||
|
.HasAnnotation("ProductVersion", "2.1.1-rtm-30846")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Catering.Data.FoodBooking", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id");
|
||||||
|
|
||||||
|
b.Property<int>("MenuId");
|
||||||
|
|
||||||
|
b.Property<string>("Notes");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("FoodBookings");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Catering.Data.Menu", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Items");
|
||||||
|
|
||||||
|
b.Property<double>("Price");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Menus");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new { Id = 1, Items = "Chicken Pate, Chicken Roast, Chicken Cake", Price = 8.5 },
|
||||||
|
new { Id = 2, Items = "Toast, Cheese On Toast, Jam on Toast", Price = 7.5 },
|
||||||
|
new { Id = 3, Items = "Mac and Cheese, Alan's Special, Cheesecake", Price = 9.0 }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Catering.Data.FoodBooking", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Catering.Data.Menu", "Menu")
|
||||||
|
.WithMany("FoodBookings")
|
||||||
|
.HasForeignKey("Id")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
43
ThAmCo.Catering/Program.cs
Normal file
43
ThAmCo.Catering/Program.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using ThAmCo.Venues.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Catering
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var host = CreateWebHostBuilder(args).Build();
|
||||||
|
|
||||||
|
using (var scope = host.Services.CreateScope())
|
||||||
|
{
|
||||||
|
var services = scope.ServiceProvider;
|
||||||
|
var env = services.GetRequiredService<IHostingEnvironment>();
|
||||||
|
var context = services.GetRequiredService<CateringDbContext>();
|
||||||
|
if (env.IsDevelopment())
|
||||||
|
{
|
||||||
|
context.Database.EnsureDeleted();
|
||||||
|
}
|
||||||
|
context.Database.Migrate();
|
||||||
|
}
|
||||||
|
|
||||||
|
host.Run();
|
||||||
|
|
||||||
|
CreateWebHostBuilder(args).Build().Run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
|
||||||
|
WebHost.CreateDefaultBuilder(args)
|
||||||
|
.UseStartup<Startup>();
|
||||||
|
}
|
||||||
|
}
|
30
ThAmCo.Catering/Properties/launchSettings.json
Normal file
30
ThAmCo.Catering/Properties/launchSettings.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||||
|
"iisSettings": {
|
||||||
|
"windowsAuthentication": false,
|
||||||
|
"anonymousAuthentication": true,
|
||||||
|
"iisExpress": {
|
||||||
|
"applicationUrl": "http://localhost:32824",
|
||||||
|
"sslPort": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"IIS Express": {
|
||||||
|
"commandName": "IISExpress",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"launchUrl": "api/values",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ThAmCo.Catering": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"launchUrl": "api/values",
|
||||||
|
"applicationUrl": "http://localhost:5000",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
49
ThAmCo.Catering/Startup.cs
Normal file
49
ThAmCo.Catering/Startup.cs
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using ThAmCo.Venues.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Catering
|
||||||
|
{
|
||||||
|
public class Startup
|
||||||
|
{
|
||||||
|
public Startup(IConfiguration configuration)
|
||||||
|
{
|
||||||
|
Configuration = configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IConfiguration Configuration { get; }
|
||||||
|
|
||||||
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
|
public void ConfigureServices(IServiceCollection services)
|
||||||
|
{
|
||||||
|
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
|
||||||
|
|
||||||
|
services.AddDbContext<CateringDbContext>(options =>
|
||||||
|
{
|
||||||
|
var cs = Configuration.GetConnectionString("CateringSqlConnection");
|
||||||
|
options.UseSqlServer(cs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
||||||
|
{
|
||||||
|
if (env.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseDeveloperExceptionPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
app.UseMvc();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
ThAmCo.Catering/ThAmCo.Catering.csproj
Normal file
16
ThAmCo.Catering/ThAmCo.Catering.csproj
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="wwwroot\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||||
|
<PackageReference Include="Microsoft.Net.Compilers" Version="2.10.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
9
ThAmCo.Catering/appsettings.Development.json
Normal file
9
ThAmCo.Catering/appsettings.Development.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Debug",
|
||||||
|
"System": "Information",
|
||||||
|
"Microsoft": "Information"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
ThAmCo.Catering/appsettings.json
Normal file
11
ThAmCo.Catering/appsettings.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ConnectionStrings": {
|
||||||
|
"CateringSqlConnection": "Server=(localdb)\\mssqllocaldb;Database=Catering;Trusted_Connection=True;MultipleActiveResultSets=true"
|
||||||
|
},
|
||||||
|
"AllowedHosts": "*"
|
||||||
|
}
|
190
ThAmCo.Events/Controllers/CustomersController.cs
Normal file
190
ThAmCo.Events/Controllers/CustomersController.cs
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
using ThAmCo.Events.Models;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Controllers
|
||||||
|
{
|
||||||
|
public class CustomersController : Controller
|
||||||
|
{
|
||||||
|
private readonly EventsDbContext _context;
|
||||||
|
|
||||||
|
public CustomersController(EventsDbContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Customers
|
||||||
|
public async Task<IActionResult> Index()
|
||||||
|
{
|
||||||
|
return View(await _context.Customers.Where(c => c.IsDeleted == false).ToListAsync());
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Customers/Details/5
|
||||||
|
public async Task<IActionResult> Details(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var customer = await _context.Customers
|
||||||
|
.FirstOrDefaultAsync(m => m.Id == id);
|
||||||
|
customer.Bookings = _context.Guests.Include(m => m.Event).Where(m => m.CustomerId == id).ToList();
|
||||||
|
if (customer == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(customer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Customers/Create
|
||||||
|
public IActionResult Create()
|
||||||
|
{
|
||||||
|
ViewData["EventLists"] = new SelectList(_context.Events, "Id", "Title");
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Customers/Create
|
||||||
|
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
|
||||||
|
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> Create([Bind("Id,Surname,FirstName,Email,InitialEvent")] CustomerCreateModel customerCreate)
|
||||||
|
{
|
||||||
|
Customer customer = null;
|
||||||
|
GuestBooking guestBooking = null;
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
customer = new Customer
|
||||||
|
{
|
||||||
|
Surname = customerCreate.Surname,
|
||||||
|
FirstName = customerCreate.FirstName,
|
||||||
|
Email = customerCreate.Email
|
||||||
|
};
|
||||||
|
var customerContext = _context.Add(customer);
|
||||||
|
int custID = customerContext.Entity.Id;
|
||||||
|
|
||||||
|
//A booking is created at the same time as a customer.
|
||||||
|
guestBooking = new GuestBooking
|
||||||
|
{
|
||||||
|
CustomerId = custID,
|
||||||
|
EventId = customerCreate.InitialEvent,
|
||||||
|
Attended = true
|
||||||
|
};
|
||||||
|
_context.Add(guestBooking);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
return View(customer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Customers/Edit/5
|
||||||
|
public async Task<IActionResult> Edit(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var customer = await _context.Customers.FindAsync(id);
|
||||||
|
if (customer == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
return View(customer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Customers/Edit/5
|
||||||
|
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
|
||||||
|
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> Edit(int id, [Bind("Id,Surname,FirstName,Email")] Customer customer)
|
||||||
|
{
|
||||||
|
if (id != customer.Id)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_context.Update(customer);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
catch (DbUpdateConcurrencyException)
|
||||||
|
{
|
||||||
|
if (!CustomerExists(customer.Id))
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
return View(customer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Customers/Delete/5
|
||||||
|
public async Task<IActionResult> Delete(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var customer = await _context.Customers
|
||||||
|
.FirstOrDefaultAsync(m => m.Id == id);
|
||||||
|
if (customer == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(customer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Customers/Delete/5
|
||||||
|
[HttpPost, ActionName("Delete")]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> DeleteConfirmed(int id)
|
||||||
|
{
|
||||||
|
var customer = await _context.Customers.FindAsync(id);
|
||||||
|
customer.IsDeleted = true;
|
||||||
|
|
||||||
|
_context.Customers.Update(customer);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost, ActionName("AnonDelete")]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> AnonDeleteConfirmed(int id)
|
||||||
|
{
|
||||||
|
var customer = await _context.Customers.FindAsync(id);
|
||||||
|
customer.FirstName = "[Redacted]";
|
||||||
|
customer.Surname = "[Redacted]";
|
||||||
|
customer.Email = "[Redacted]";
|
||||||
|
customer.IsDeleted = true;
|
||||||
|
|
||||||
|
_context.Customers.Update(customer);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CustomerExists(int id)
|
||||||
|
{
|
||||||
|
return _context.Customers.Any(e => e.Id == id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
605
ThAmCo.Events/Controllers/EventsController.cs
Normal file
605
ThAmCo.Events/Controllers/EventsController.cs
Normal file
@ -0,0 +1,605 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
using ThAmCo.Events.Models;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using ThAmCo.Events.Models.ViewModels.Events;
|
||||||
|
using ThAmCo.Events.Models.Dto;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Views
|
||||||
|
{
|
||||||
|
public class EventsController : Controller
|
||||||
|
{
|
||||||
|
private readonly EventsDbContext _context;
|
||||||
|
|
||||||
|
public EventsController(EventsDbContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Events
|
||||||
|
public async Task<IActionResult> Index()
|
||||||
|
{
|
||||||
|
var @event = await _context.Events.Include(e => e.Bookings).Include(s => s.Staffings).ThenInclude(s => s.Staff).Where(e => e.IsDeleted == false).ToListAsync();
|
||||||
|
|
||||||
|
return View(@event);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Events/Details/5
|
||||||
|
public async Task<IActionResult> Details(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var @event = await _context.Events
|
||||||
|
.FirstOrDefaultAsync(m => m.Id == id);
|
||||||
|
|
||||||
|
//Get both bookings and staffings from the database so pass to the view, so it can show the guests and staff for that event.
|
||||||
|
@event.Bookings = await _context.Guests.Include(m => m.Customer).Where(m => m.EventId == id).ToListAsync();
|
||||||
|
@event.Staffings = await _context.Staffing.Include(m => m.Staff).Where(m => m.EventId == id).ToListAsync();
|
||||||
|
|
||||||
|
if (@event == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
ReservationDto reservation = null;
|
||||||
|
|
||||||
|
//Get the reservation information for the event, if it exists.
|
||||||
|
HttpClient client = new HttpClient
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:23652/")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.GetAsync("api/reservations/" + @event.VenueReference);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
reservation = await response.Content.ReadAsAsync<ReservationDto>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Index received a bad response from the web service.");
|
||||||
|
}
|
||||||
|
|
||||||
|
var edm = new EventDetailsModel
|
||||||
|
{
|
||||||
|
Id = @event.Id,
|
||||||
|
Title = @event.Title,
|
||||||
|
Date = @event.Date,
|
||||||
|
Duration = @event.Duration,
|
||||||
|
TypeId = @event.TypeId,
|
||||||
|
Bookings = @event.Bookings,
|
||||||
|
Reservation = reservation,
|
||||||
|
FoodReference = @event.FoodReference,
|
||||||
|
Staffing = @event.Staffings
|
||||||
|
};
|
||||||
|
|
||||||
|
return View(edm);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Events/Create
|
||||||
|
public async Task<IActionResult> Create()
|
||||||
|
{
|
||||||
|
//For this code, AJAX calls can be used, along with regular HTTP redirects.
|
||||||
|
//It depends on whether the programmer wants the client or the server to make the call to the web service.
|
||||||
|
//This isn't a live action effecting the user interface, so it can be done either way.
|
||||||
|
|
||||||
|
//This code works and returns the correct things, however the ViewBag doesn't have the correct ID.
|
||||||
|
/*var eventTypes = new List<EventTypeDto>().AsEnumerable();
|
||||||
|
|
||||||
|
HttpClient client = new HttpClient
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:23652/")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.GetAsync("api/eventtypes");
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
eventTypes = await response.Content.ReadAsAsync<IEnumerable<EventTypeDto>>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Index received a bad response from the web service.");
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewData["EventLists"] = new SelectList(eventTypes, "TypeId", "Title");*/
|
||||||
|
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Events/Create
|
||||||
|
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
|
||||||
|
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> Create([Bind("Id,Title,Date,Duration,TypeId")] Event @event)
|
||||||
|
{
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
_context.Add(@event);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
//Return to the newly created Details page of the event.
|
||||||
|
return RedirectToAction(nameof(Details), new { id = @event.Id });
|
||||||
|
}
|
||||||
|
return View(@event);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Events/SelectVenue
|
||||||
|
public async Task<IActionResult> SelectVenue(int id)
|
||||||
|
{
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
var @event = _context.Events.FirstOrDefaultAsync(e => e.Id == id).Result;
|
||||||
|
//Check if event exists.
|
||||||
|
if (@event.Id != 0)
|
||||||
|
{
|
||||||
|
var venues = new List<VenueDto>().AsEnumerable();
|
||||||
|
|
||||||
|
//For the Selection of the Venue, it could all be handled within one page, however it's loaded on page load.
|
||||||
|
//AJAX could be used here also, however loading from the server is also fine.
|
||||||
|
|
||||||
|
//Get list of the available venues from the web service.
|
||||||
|
HttpClient client = new HttpClient
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:23652/")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.GetAsync("api/Availability?eventType=" + @event.TypeId + "&beginDate=" + @event.Date.ToString("MM/dd/yyyy") + "&endDate=" + @event.Date.ToString("MM/dd/yyyy"));
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
venues = await response.Content.ReadAsAsync<IEnumerable<VenueDto>>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Index received a bad response from the web service.");
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectVenueModel svm = new SelectVenueModel
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
Venues = venues.ToList()
|
||||||
|
};
|
||||||
|
|
||||||
|
return View(@svm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Details), new { id = id });
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> CreateReservation([Bind("Id,VenueDate,VenueCode")] EventCreateReservationModel @event)
|
||||||
|
{
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
//Add reservation (call add api)
|
||||||
|
//Needs redirect afterwards so AJAX doesn't need to be used to call here.
|
||||||
|
HttpClient client = new HttpClient()
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:23652/")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
var reservation = new ReservationCreateDto
|
||||||
|
{
|
||||||
|
EventDate = @event.VenueDate,
|
||||||
|
VenueCode = @event.VenueCode,
|
||||||
|
StaffId = "Test"
|
||||||
|
};
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.PostAsJsonAsync("api/reservations", reservation);
|
||||||
|
|
||||||
|
//Add the venue reference to the database.
|
||||||
|
var eventContext = await _context.Events.Include(m => m.Bookings).FirstOrDefaultAsync(e => e.Id == @event.Id);
|
||||||
|
var originalEvent = eventContext;
|
||||||
|
eventContext.VenueReference = @event.VenueCode + @event.VenueDate.ToString("yyyyMMdd");
|
||||||
|
|
||||||
|
|
||||||
|
_context.Entry(originalEvent).CurrentValues.SetValues(eventContext);
|
||||||
|
_context.SaveChanges();
|
||||||
|
return RedirectToAction(nameof(Details), new { id = @event.Id });
|
||||||
|
}
|
||||||
|
return View(@event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IActionResult> FreeReservation(int id)
|
||||||
|
{
|
||||||
|
var eventContext = await _context.Events.FirstOrDefaultAsync(e => e.Id == id);
|
||||||
|
|
||||||
|
if (eventContext.Id != 0)
|
||||||
|
{
|
||||||
|
//Request that the reservation called is deleted by the web service.
|
||||||
|
HttpClient client = new HttpClient()
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:23652/")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.DeleteAsync("api/reservations/" + eventContext.VenueReference);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
//Save this change to local database.
|
||||||
|
var editedEventContext = eventContext;
|
||||||
|
editedEventContext.VenueReference = null;
|
||||||
|
_context.Entry(eventContext).CurrentValues.SetValues(editedEventContext);
|
||||||
|
_context.SaveChanges();
|
||||||
|
return RedirectToAction(nameof(Details), new { id = id });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Index Delete Error.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Details), new { id = id });
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Events/Edit/5
|
||||||
|
public async Task<IActionResult> Edit(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var @event = await _context.Events.FindAsync(id);
|
||||||
|
if (@event == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
return View(@event);
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Events/Edit/5
|
||||||
|
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
|
||||||
|
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> Edit(int id, [Bind("Id,Title,Duration")] EventEditModel @event)
|
||||||
|
{
|
||||||
|
var eventContext = await _context.Events.FirstOrDefaultAsync(m => m.Id == id);
|
||||||
|
eventContext.Title = @event.Title;
|
||||||
|
eventContext.Duration = @event.Duration;
|
||||||
|
|
||||||
|
if (id != @event.Id)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_context.Update(eventContext);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
catch (DbUpdateConcurrencyException)
|
||||||
|
{
|
||||||
|
if (!EventExists(@event.Id))
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
return View(@event);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Register attendance for customer at event
|
||||||
|
public async Task<IActionResult> RegisterAttendance([Bind("EventId,CustomerId,Attending")] EventRegisterAttendanceModel @event)
|
||||||
|
{
|
||||||
|
//Change attendance for a customer at an event (toggle)
|
||||||
|
if (@event.CustomerId != 0 && @event.EventId != 0)
|
||||||
|
{
|
||||||
|
if (_context.Guests.Any(g => g.EventId == @event.EventId && g.CustomerId == @event.CustomerId))
|
||||||
|
{
|
||||||
|
var booking = await _context.Guests.FirstOrDefaultAsync(g => g.EventId == @event.EventId && g.CustomerId == @event.CustomerId);
|
||||||
|
booking.Attended = !booking.Attended;
|
||||||
|
|
||||||
|
_context.Update(booking);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return RedirectToAction(nameof(Details), new { id = @event.EventId });
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Events/Delete/5
|
||||||
|
public async Task<IActionResult> Delete(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var @event = await _context.Events
|
||||||
|
.FirstOrDefaultAsync(m => m.Id == id);
|
||||||
|
if (@event == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(@event);
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Events/Delete/5
|
||||||
|
[HttpPost, ActionName("Delete")]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> DeleteConfirmed(int id)
|
||||||
|
{
|
||||||
|
//Change the event to deleted.
|
||||||
|
var @event = await _context.Events.FindAsync(id);
|
||||||
|
|
||||||
|
if (@event != null)
|
||||||
|
{
|
||||||
|
//Ask web api to delete the reservation that the event used to hold.
|
||||||
|
HttpClient client = new HttpClient()
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:23652/")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.DeleteAsync("api/reservations/" + @event.VenueReference);
|
||||||
|
|
||||||
|
//Soft deletion is done by having a boolean value in the object, true being deleted and false being not deleted.
|
||||||
|
//Other ways of doing this could be nullable values, such as dates, such that not null values are not deleted, and null values are deleted.
|
||||||
|
//Using dates is useful if you want to un-delete a lot of data at once from a certain time.
|
||||||
|
|
||||||
|
//If successful, soft delete event.
|
||||||
|
@event.IsDeleted = true;
|
||||||
|
@event.VenueReference = null;
|
||||||
|
_context.Events.Update(@event);
|
||||||
|
|
||||||
|
/*Guest bookings can be deleted if required.
|
||||||
|
var guestBookings = await _context.Guests.Where(g => g.EventId == id).ToListAsync();
|
||||||
|
_context.Guests.RemoveRange(guestBookings);*/
|
||||||
|
|
||||||
|
//Hard delete staffings.
|
||||||
|
var staffings = await _context.Staffing.Where(s => s.EventId == id).ToListAsync();
|
||||||
|
_context.Staffing.RemoveRange(staffings);
|
||||||
|
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool EventExists(int id)
|
||||||
|
{
|
||||||
|
return _context.Events.Any(e => e.Id == id);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Removes a Customer from an Event.
|
||||||
|
// POST: Events/RemoveCustomer/5
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> RemoveCustomer(int id, [Bind("CustomerId,EventId")] GuestBooking guestBooking)
|
||||||
|
{
|
||||||
|
if (id != guestBooking.EventId)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_context.Remove(guestBooking);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
catch (DbUpdateConcurrencyException)
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Details), new { id });
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Details));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IActionResult> RemoveStaff(int id, [Bind("StaffId,EventId")] Staffing staffing)
|
||||||
|
{
|
||||||
|
if (id != staffing.EventId)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ModelState.IsValid && staffing.EventId != 0 && staffing.StaffId != 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_context.Remove(staffing);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
catch (DbUpdateConcurrencyException)
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Details), new { id = id });
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Details));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IActionResult> AddCustomer(int id)
|
||||||
|
{
|
||||||
|
|
||||||
|
//Get customers that dont exist in current event.
|
||||||
|
|
||||||
|
var guests = await _context.Guests.Include(g => g.Customer).Where(g => g.EventId == id).Select(c => c.Customer).ToListAsync();
|
||||||
|
var customers = await _context.Customers.ToListAsync();
|
||||||
|
|
||||||
|
//This seems to be the simplest way to go about it in LINQ.
|
||||||
|
//Excludes data in the current set.
|
||||||
|
var result = await _context.Customers.Except(guests).ToListAsync();
|
||||||
|
|
||||||
|
EventAddCustomerModel eacm = new EventAddCustomerModel
|
||||||
|
{
|
||||||
|
EventId = id,
|
||||||
|
Customer = result
|
||||||
|
};
|
||||||
|
|
||||||
|
return View(eacm);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> AddCustomer([Bind("CustomerId,EventId")] GuestBooking guestBooking)
|
||||||
|
{
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
guestBooking.Customer = _context.Customers.First(c => c.Id == guestBooking.CustomerId);
|
||||||
|
guestBooking.Event = _context.Events.First(e => e.Id == guestBooking.EventId);
|
||||||
|
|
||||||
|
_context.Add(guestBooking);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
//Return to the newly created Details page of the event.
|
||||||
|
return RedirectToAction(nameof(Details), new { id = guestBooking.EventId });
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Details));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IActionResult> AddStaff(int id)
|
||||||
|
{
|
||||||
|
|
||||||
|
var staff = await _context.Staffing.Include(g => g.Staff).Where(g => g.EventId == id).Select(c => c.Staff).ToListAsync();
|
||||||
|
|
||||||
|
//Also uses the except function in LINQ.
|
||||||
|
var result = await _context.Staff.Except(staff).ToListAsync();
|
||||||
|
|
||||||
|
EventAddStaffModel eacm = new EventAddStaffModel
|
||||||
|
{
|
||||||
|
EventId = id,
|
||||||
|
Staff = result
|
||||||
|
};
|
||||||
|
|
||||||
|
return View(eacm);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> AddStaff([Bind("StaffId,EventId")] Staffing staffing)
|
||||||
|
{
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
staffing.Staff = _context.Staff.First(s => s.Id == staffing.StaffId);
|
||||||
|
staffing.Event = _context.Events.First(e => e.Id == staffing.EventId);
|
||||||
|
|
||||||
|
_context.Add(staffing);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
//Return to the newly created Details page of the event.
|
||||||
|
return RedirectToAction(nameof(Details), new { id = staffing.EventId });
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Details));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IActionResult> AddMenu(int id)
|
||||||
|
{
|
||||||
|
if (EventExists(id))
|
||||||
|
{
|
||||||
|
//Get menu back from api.
|
||||||
|
HttpClient client = new HttpClient()
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:32824")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.GetAsync("api/values");
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var menus = response.Content.ReadAsAsync<IEnumerable<MenuDTO>>().Result.ToList();
|
||||||
|
|
||||||
|
EventAddMenuModel eamm = new EventAddMenuModel
|
||||||
|
{
|
||||||
|
EventId = id,
|
||||||
|
Menus = menus
|
||||||
|
};
|
||||||
|
|
||||||
|
return View(eamm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("API GET Error.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Details), new { id = id });
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> AddMenu(int EventID, int MenuID)
|
||||||
|
{
|
||||||
|
if (EventExists(EventID))
|
||||||
|
{
|
||||||
|
//Add the menu reference to database.
|
||||||
|
var @event = _context.Events.First(e => e.Id == EventID);
|
||||||
|
@event.FoodReference = MenuID;
|
||||||
|
|
||||||
|
_context.Update(@event);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
return RedirectToAction(nameof(Details), new { id = EventID });
|
||||||
|
}
|
||||||
|
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IActionResult FindVenue()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> FindVenueResults([Bind("EventType,StartDate,EndDate")] EventFindVenueModel search)
|
||||||
|
{
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
//Return all venues that satify the constraints.
|
||||||
|
|
||||||
|
//AJAX could be used here if it was loading on the same page, however different pages are used.
|
||||||
|
var venues = new List<VenueDto>().AsEnumerable();
|
||||||
|
|
||||||
|
HttpClient client = new HttpClient
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:23652/")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.GetAsync("api/Availability?eventType=" + search.EventType + "&beginDate=" + search.StartDate.ToString("MM/dd/yyyy") + "&endDate=" + search.EndDate.ToString("MM/dd/yyyy"));
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
venues = await response.Content.ReadAsAsync<IEnumerable<VenueDto>>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Index received a bad response from the web service.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(venues);
|
||||||
|
}
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IActionResult CreateWithVenue(string reference)
|
||||||
|
{
|
||||||
|
return View(new Event { VenueReference = reference });
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
160
ThAmCo.Events/Controllers/FoodController.cs
Normal file
160
ThAmCo.Events/Controllers/FoodController.cs
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
using ThAmCo.Events.Models;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using ThAmCo.Events.Models.ViewModels.Events;
|
||||||
|
using ThAmCo.Events.Models.Dto;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Controllers
|
||||||
|
{
|
||||||
|
public class FoodController : Controller
|
||||||
|
{
|
||||||
|
EventsDbContext _context;
|
||||||
|
|
||||||
|
public FoodController()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Food
|
||||||
|
public async Task<IActionResult> Index()
|
||||||
|
{
|
||||||
|
//Get full list of menus and their data from the web service.
|
||||||
|
HttpClient client = new HttpClient
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:32824")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.GetAsync("api/values");
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var menus = response.Content.ReadAsAsync<IEnumerable<Food>>().Result.ToList();
|
||||||
|
return View(menus);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Index received a bad response from the web service.");
|
||||||
|
}
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Food/Details/5
|
||||||
|
public async Task<IActionResult> Details(int? id)
|
||||||
|
{
|
||||||
|
//Get details of a specific menu from the web service.
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpClient client = new HttpClient
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:32824")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.GetAsync("api/values/" + id);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var menu = response.Content.ReadAsAsync<Food>().Result;
|
||||||
|
return View(menu);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Index received a bad response from the web service.");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Food/Create
|
||||||
|
public IActionResult Create()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Food/Create
|
||||||
|
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
|
||||||
|
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> Create([Bind("Id,Items,Price")] Food food)
|
||||||
|
{
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
HttpClient client = new HttpClient()
|
||||||
|
{
|
||||||
|
BaseAddress = new Uri("http://localhost:32824/")
|
||||||
|
};
|
||||||
|
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
|
|
||||||
|
HttpResponseMessage response = await client.PostAsJsonAsync("api/values", food);
|
||||||
|
|
||||||
|
return RedirectToAction(nameof(Details), new { id = food.Id });
|
||||||
|
}
|
||||||
|
return View(food);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Food/Edit/5
|
||||||
|
public async Task<IActionResult> Edit(int? id)
|
||||||
|
{
|
||||||
|
//TODO: Fix
|
||||||
|
/*if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var food = await _context.Food.FindAsync(id);
|
||||||
|
if (food == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
return View(food);*/
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Food/Edit/5
|
||||||
|
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
|
||||||
|
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> Edit(int id, [Bind("Id,Items,Price")] Food food)
|
||||||
|
{
|
||||||
|
if (id != food.Id)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_context.Update(food);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
catch (DbUpdateConcurrencyException)
|
||||||
|
{
|
||||||
|
if (false)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
return View(food);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
165
ThAmCo.Events/Controllers/GuestBookingsController.cs
Normal file
165
ThAmCo.Events/Controllers/GuestBookingsController.cs
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Controllers
|
||||||
|
{
|
||||||
|
public class GuestBookingsController : Controller
|
||||||
|
{
|
||||||
|
private readonly EventsDbContext _context;
|
||||||
|
|
||||||
|
public GuestBookingsController(EventsDbContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: GuestBookings
|
||||||
|
public async Task<IActionResult> Index()
|
||||||
|
{
|
||||||
|
var eventsDbContext = _context.Guests.Include(g => g.Customer).Include(g => g.Event);
|
||||||
|
return View(await eventsDbContext.ToListAsync());
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: GuestBookings/Details/5
|
||||||
|
public async Task<IActionResult> Details(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var guestBooking = await _context.Guests
|
||||||
|
.Include(g => g.Customer)
|
||||||
|
.Include(g => g.Event)
|
||||||
|
.FirstOrDefaultAsync(m => m.CustomerId == id);
|
||||||
|
if (guestBooking == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(guestBooking);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: GuestBookings/Create
|
||||||
|
public IActionResult Create()
|
||||||
|
{
|
||||||
|
ViewData["CustomerId"] = new SelectList(_context.Customers, "Id", "Email");
|
||||||
|
ViewData["EventId"] = new SelectList(_context.Events, "Id", "Title");
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: GuestBookings/Create
|
||||||
|
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
|
||||||
|
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> Create([Bind("CustomerId,EventId,Attended")] GuestBooking guestBooking)
|
||||||
|
{
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
_context.Add(guestBooking);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
ViewData["CustomerId"] = new SelectList(_context.Customers, "Id", "Email", guestBooking.CustomerId);
|
||||||
|
ViewData["EventId"] = new SelectList(_context.Events, "Id", "Title", guestBooking.EventId);
|
||||||
|
return View(guestBooking);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: GuestBookings/Edit/5
|
||||||
|
public async Task<IActionResult> Edit(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var guestBooking = await _context.Guests.FindAsync(id);
|
||||||
|
if (guestBooking == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
ViewData["CustomerId"] = new SelectList(_context.Customers, "Id", "Email", guestBooking.CustomerId);
|
||||||
|
ViewData["EventId"] = new SelectList(_context.Events, "Id", "Title", guestBooking.EventId);
|
||||||
|
return View(guestBooking);
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: GuestBookings/Edit/5
|
||||||
|
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
|
||||||
|
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> Edit(int id, [Bind("CustomerId,EventId,Attended")] GuestBooking guestBooking)
|
||||||
|
{
|
||||||
|
if (id != guestBooking.CustomerId)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_context.Update(guestBooking);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
catch (DbUpdateConcurrencyException)
|
||||||
|
{
|
||||||
|
if (!GuestBookingExists(guestBooking.CustomerId))
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
ViewData["CustomerId"] = new SelectList(_context.Customers, "Id", "Email", guestBooking.CustomerId);
|
||||||
|
ViewData["EventId"] = new SelectList(_context.Events, "Id", "Title", guestBooking.EventId);
|
||||||
|
return View(guestBooking);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: GuestBookings/Delete/5
|
||||||
|
public async Task<IActionResult> Delete(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var guestBooking = await _context.Guests
|
||||||
|
.Include(g => g.Customer)
|
||||||
|
.Include(g => g.Event)
|
||||||
|
.FirstOrDefaultAsync(m => m.CustomerId == id);
|
||||||
|
if (guestBooking == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(guestBooking);
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: GuestBookings/Delete/5
|
||||||
|
[HttpPost, ActionName("Delete")]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> DeleteConfirmed(int id)
|
||||||
|
{
|
||||||
|
var guestBooking = await _context.Guests.FindAsync(id);
|
||||||
|
_context.Guests.Remove(guestBooking);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool GuestBookingExists(int id)
|
||||||
|
{
|
||||||
|
return _context.Guests.Any(e => e.CustomerId == id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
43
ThAmCo.Events/Controllers/HomeController.cs
Normal file
43
ThAmCo.Events/Controllers/HomeController.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using ThAmCo.Events.Models;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Controllers
|
||||||
|
{
|
||||||
|
public class HomeController : Controller
|
||||||
|
{
|
||||||
|
public IActionResult Index()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IActionResult About()
|
||||||
|
{
|
||||||
|
ViewData["Message"] = "Your application description page.";
|
||||||
|
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IActionResult Contact()
|
||||||
|
{
|
||||||
|
ViewData["Message"] = "Your contact page.";
|
||||||
|
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IActionResult Privacy()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||||
|
public IActionResult Error()
|
||||||
|
{
|
||||||
|
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
154
ThAmCo.Events/Controllers/StaffController.cs
Normal file
154
ThAmCo.Events/Controllers/StaffController.cs
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Controllers
|
||||||
|
{
|
||||||
|
public class StaffController : Controller
|
||||||
|
{
|
||||||
|
private readonly EventsDbContext _context;
|
||||||
|
|
||||||
|
public StaffController(EventsDbContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Staff
|
||||||
|
public async Task<IActionResult> Index()
|
||||||
|
{
|
||||||
|
return View(await _context.Staff.ToListAsync());
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Staff/Details/5
|
||||||
|
public async Task<IActionResult> Details(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
var staff = await _context.Staff.Include(s => s.Staffings).FirstOrDefaultAsync(m => m.Id == id);
|
||||||
|
|
||||||
|
//Get staffings for that staff, to show what events they are staffing.
|
||||||
|
staff.Staffings = await _context.Staffing.Include(m => m.Event).Where(m => m.StaffId == id).ToListAsync();
|
||||||
|
|
||||||
|
if (staff == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(staff);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Staff/Create
|
||||||
|
public IActionResult Create()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Staff/Create
|
||||||
|
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
|
||||||
|
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> Create([Bind("Id,Surname,FirstName,Email,FirstAid")] Staff staff)
|
||||||
|
{
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
_context.Add(staff);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
return View(staff);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Staff/Edit/5
|
||||||
|
public async Task<IActionResult> Edit(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var staff = await _context.Staff.FindAsync(id);
|
||||||
|
if (staff == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
return View(staff);
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Staff/Edit/5
|
||||||
|
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
|
||||||
|
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
|
||||||
|
[HttpPost]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> Edit(int id, [Bind("Id,Surname,FirstName,Email,FirstAid")] Staff staff)
|
||||||
|
{
|
||||||
|
if (id != staff.Id)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_context.Update(staff);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
catch (DbUpdateConcurrencyException)
|
||||||
|
{
|
||||||
|
if (!StaffExists(staff.Id))
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
return View(staff);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET: Staff/Delete/5
|
||||||
|
public async Task<IActionResult> Delete(int? id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var staff = await _context.Staff
|
||||||
|
.FirstOrDefaultAsync(m => m.Id == id);
|
||||||
|
if (staff == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(staff);
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST: Staff/Delete/5
|
||||||
|
[HttpPost, ActionName("Delete")]
|
||||||
|
[ValidateAntiForgeryToken]
|
||||||
|
public async Task<IActionResult> DeleteConfirmed(int id)
|
||||||
|
{
|
||||||
|
var staff = await _context.Staff.FindAsync(id);
|
||||||
|
_context.Staff.Remove(staff);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
return RedirectToAction(nameof(Index));
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool StaffExists(int id)
|
||||||
|
{
|
||||||
|
return _context.Staff.Any(e => e.Id == id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
ThAmCo.Events/Data/Customer.cs
Normal file
25
ThAmCo.Events/Data/Customer.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data
|
||||||
|
{
|
||||||
|
public class Customer
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string Surname { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string FirstName { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[DataType(DataType.EmailAddress)]
|
||||||
|
public string Email { get; set; }
|
||||||
|
|
||||||
|
public List<GuestBooking> Bookings { get; set; }
|
||||||
|
|
||||||
|
public bool IsDeleted { get; set; }
|
||||||
|
}
|
||||||
|
}
|
32
ThAmCo.Events/Data/Event.cs
Normal file
32
ThAmCo.Events/Data/Event.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data
|
||||||
|
{
|
||||||
|
public class Event
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string Title { get; set; }
|
||||||
|
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
|
||||||
|
public TimeSpan? Duration { get; set; }
|
||||||
|
|
||||||
|
[Required, MaxLength(3), MinLength(3)]
|
||||||
|
public string TypeId { get; set; }
|
||||||
|
|
||||||
|
public List<GuestBooking> Bookings { get; set; }
|
||||||
|
|
||||||
|
public string VenueReference { get; set; }
|
||||||
|
|
||||||
|
public int FoodReference { get; set; }
|
||||||
|
|
||||||
|
public List<Staffing> Staffings { get; set; }
|
||||||
|
|
||||||
|
public bool IsDeleted { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
100
ThAmCo.Events/Data/EventsDbContext.cs
Normal file
100
ThAmCo.Events/Data/EventsDbContext.cs
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data
|
||||||
|
{
|
||||||
|
public class EventsDbContext : DbContext
|
||||||
|
{
|
||||||
|
public DbSet<Customer> Customers { get; set; }
|
||||||
|
public DbSet<Event> Events { get; set; }
|
||||||
|
public DbSet<GuestBooking> Guests { get; set; }
|
||||||
|
public DbSet<Staffing> Staffing { get; set; }
|
||||||
|
public DbSet<Staff> Staff { get; set; }
|
||||||
|
|
||||||
|
private IHostingEnvironment HostEnv { get; }
|
||||||
|
|
||||||
|
public EventsDbContext(DbContextOptions<EventsDbContext> options,
|
||||||
|
IHostingEnvironment env) : base(options)
|
||||||
|
{
|
||||||
|
HostEnv = env;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnConfiguring(DbContextOptionsBuilder builder)
|
||||||
|
{
|
||||||
|
base.OnConfiguring(builder);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnModelCreating(ModelBuilder builder)
|
||||||
|
{
|
||||||
|
base.OnModelCreating(builder);
|
||||||
|
|
||||||
|
builder.HasDefaultSchema("thamco.events");
|
||||||
|
|
||||||
|
builder.Entity<GuestBooking>()
|
||||||
|
.HasKey(b => new { b.CustomerId, b.EventId });
|
||||||
|
|
||||||
|
builder.Entity<Staffing>()
|
||||||
|
.HasKey(s => new { s.StaffId, s.EventId });
|
||||||
|
|
||||||
|
builder.Entity<Customer>()
|
||||||
|
.HasMany(c => c.Bookings)
|
||||||
|
.WithOne(b => b.Customer)
|
||||||
|
.HasForeignKey(b => b.CustomerId);
|
||||||
|
|
||||||
|
builder.Entity<Event>()
|
||||||
|
.HasMany(e => e.Bookings)
|
||||||
|
.WithOne(b => b.Event)
|
||||||
|
.HasForeignKey(b => b.EventId);
|
||||||
|
|
||||||
|
builder.Entity<Event>()
|
||||||
|
.HasMany(e => e.Staffings)
|
||||||
|
.WithOne(b => b.Event)
|
||||||
|
.HasForeignKey(b => b.EventId);
|
||||||
|
|
||||||
|
builder.Entity<Event>()
|
||||||
|
.Property(e => e.TypeId)
|
||||||
|
.IsFixedLength();
|
||||||
|
|
||||||
|
builder.Entity<Staff>()
|
||||||
|
.HasMany(s => s.Staffings)
|
||||||
|
.WithOne(b => b.Staff)
|
||||||
|
.HasForeignKey(b => b.StaffId);
|
||||||
|
|
||||||
|
// seed data for debug / development testing
|
||||||
|
if (HostEnv != null && HostEnv.IsDevelopment())
|
||||||
|
{
|
||||||
|
builder.Entity<Customer>().HasData(
|
||||||
|
new Customer { Id = 1, Surname = "Robertson", FirstName = "Robert", Email = "bob@example.com" },
|
||||||
|
new Customer { Id = 2, Surname = "Thornton", FirstName = "Betty", Email = "betty@example.com" },
|
||||||
|
new Customer { Id = 3, Surname = "Jellybeans", FirstName = "Jin", Email = "jin@example.com" }
|
||||||
|
);
|
||||||
|
|
||||||
|
builder.Entity<Event>().HasData(
|
||||||
|
new Event { Id = 1, Title = "Bob's Big 50", Date = new DateTime(2016, 4, 12), Duration = new TimeSpan(6, 0, 0), TypeId = "PTY" },
|
||||||
|
new Event { Id = 2, Title = "Best Wedding Yet", Date = new DateTime(2018, 12, 1), Duration = new TimeSpan(12, 0, 0), TypeId = "WED" }
|
||||||
|
);
|
||||||
|
|
||||||
|
builder.Entity<GuestBooking>().HasData(
|
||||||
|
new GuestBooking { CustomerId = 1, EventId = 1, Attended = true },
|
||||||
|
new GuestBooking { CustomerId = 2, EventId = 1, Attended = false },
|
||||||
|
new GuestBooking { CustomerId = 1, EventId = 2, Attended = false },
|
||||||
|
new GuestBooking { CustomerId = 3, EventId = 2, Attended = false }
|
||||||
|
);
|
||||||
|
|
||||||
|
builder.Entity<Staff>().HasData(
|
||||||
|
new Staff { Id = 1, Surname = "Partridge", FirstName = "Alan", Email = "a@a.a", FirstAid = false },
|
||||||
|
new Staff { Id = 2, Surname = "Stephenson", FirstName = "Roger", Email = "rege@hotmail.com", FirstAid = true},
|
||||||
|
new Staff { Id = 3, Surname = "Smith", FirstName = "Alans", Email = "alans@jims.net", FirstAid = false }
|
||||||
|
);
|
||||||
|
|
||||||
|
builder.Entity<Staffing>().HasData(
|
||||||
|
new Staffing { StaffId = 1, EventId = 2 },
|
||||||
|
new Staffing { StaffId = 2, EventId = 1 },
|
||||||
|
new Staffing { StaffId = 3, EventId = 1 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
ThAmCo.Events/Data/Food.cs
Normal file
16
ThAmCo.Events/Data/Food.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data
|
||||||
|
{
|
||||||
|
public class Food
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public string Items { get; set; }
|
||||||
|
|
||||||
|
public double Price { get; set; }
|
||||||
|
}
|
||||||
|
}
|
19
ThAmCo.Events/Data/GuestBooking.cs
Normal file
19
ThAmCo.Events/Data/GuestBooking.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data
|
||||||
|
{
|
||||||
|
public class GuestBooking
|
||||||
|
{
|
||||||
|
public int CustomerId { get; set; }
|
||||||
|
|
||||||
|
public Customer Customer { get; set; }
|
||||||
|
|
||||||
|
public int EventId { get; set; }
|
||||||
|
|
||||||
|
public Event Event { get; set; }
|
||||||
|
|
||||||
|
public bool Attended { get; set; }
|
||||||
|
}
|
||||||
|
}
|
116
ThAmCo.Events/Data/Migrations/20181029103724_InitialCreate.Designer.cs
generated
Normal file
116
ThAmCo.Events/Data/Migrations/20181029103724_InitialCreate.Designer.cs
generated
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(EventsDbContext))]
|
||||||
|
[Migration("20181029103724_InitialCreate")]
|
||||||
|
partial class InitialCreate
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasDefaultSchema("thamco.events")
|
||||||
|
.HasAnnotation("ProductVersion", "2.1.1-rtm-30846")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Customer", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Customers");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new { Id = 1, Email = "bob@example.com", FirstName = "Robert", Surname = "Robertson" },
|
||||||
|
new { Id = 2, Email = "betty@example.com", FirstName = "Betty", Surname = "Thornton" },
|
||||||
|
new { Id = 3, Email = "jin@example.com", FirstName = "Jin", Surname = "Jellybeans" }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Event", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<DateTime>("Date");
|
||||||
|
|
||||||
|
b.Property<TimeSpan?>("Duration");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("TypeId")
|
||||||
|
.IsRequired()
|
||||||
|
.IsFixedLength(true)
|
||||||
|
.HasMaxLength(3);
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Events");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new { Id = 1, Date = new DateTime(2016, 4, 12, 0, 0, 0, 0, DateTimeKind.Unspecified), Duration = new TimeSpan(0, 6, 0, 0, 0), Title = "Bob's Big 50", TypeId = "PTY" },
|
||||||
|
new { Id = 2, Date = new DateTime(2018, 12, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), Duration = new TimeSpan(0, 12, 0, 0, 0), Title = "Best Wedding Yet", TypeId = "WED" }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("CustomerId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.Property<bool>("Attended");
|
||||||
|
|
||||||
|
b.HasKey("CustomerId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Guests");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new { CustomerId = 1, EventId = 1, Attended = true },
|
||||||
|
new { CustomerId = 2, EventId = 1, Attended = false },
|
||||||
|
new { CustomerId = 1, EventId = 2, Attended = false },
|
||||||
|
new { CustomerId = 3, EventId = 2, Attended = false }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Customer", "Customer")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("CustomerId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
130
ThAmCo.Events/Data/Migrations/20181029103724_InitialCreate.cs
Normal file
130
ThAmCo.Events/Data/Migrations/20181029103724_InitialCreate.cs
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
public partial class InitialCreate : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.EnsureSchema(
|
||||||
|
name: "thamco.events");
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Customers",
|
||||||
|
schema: "thamco.events",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(nullable: false)
|
||||||
|
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
|
||||||
|
Surname = table.Column<string>(nullable: false),
|
||||||
|
FirstName = table.Column<string>(nullable: false),
|
||||||
|
Email = table.Column<string>(nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Customers", x => x.Id);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Events",
|
||||||
|
schema: "thamco.events",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(nullable: false)
|
||||||
|
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
|
||||||
|
Title = table.Column<string>(nullable: false),
|
||||||
|
Date = table.Column<DateTime>(nullable: false),
|
||||||
|
Duration = table.Column<TimeSpan>(nullable: true),
|
||||||
|
TypeId = table.Column<string>(fixedLength: true, maxLength: 3, nullable: false),
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Events", x => x.Id);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Guests",
|
||||||
|
schema: "thamco.events",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
CustomerId = table.Column<int>(nullable: false),
|
||||||
|
EventId = table.Column<int>(nullable: false),
|
||||||
|
Attended = table.Column<bool>(nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Guests", x => new { x.CustomerId, x.EventId });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Guests_Customers_CustomerId",
|
||||||
|
column: x => x.CustomerId,
|
||||||
|
principalSchema: "thamco.events",
|
||||||
|
principalTable: "Customers",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Guests_Events_EventId",
|
||||||
|
column: x => x.EventId,
|
||||||
|
principalSchema: "thamco.events",
|
||||||
|
principalTable: "Events",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Customers",
|
||||||
|
columns: new[] { "Id", "Email", "FirstName", "Surname" },
|
||||||
|
values: new object[,]
|
||||||
|
{
|
||||||
|
{ 1, "bob@example.com", "Robert", "Robertson" },
|
||||||
|
{ 2, "betty@example.com", "Betty", "Thornton" },
|
||||||
|
{ 3, "jin@example.com", "Jin", "Jellybeans" }
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Events",
|
||||||
|
columns: new[] { "Id", "Date", "Duration", "Title", "TypeId" },
|
||||||
|
values: new object[,]
|
||||||
|
{
|
||||||
|
{ 1, new DateTime(2016, 4, 12, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 6, 0, 0, 0), "Bob's Big 50", "PTY" },
|
||||||
|
{ 2, new DateTime(2018, 12, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 12, 0, 0, 0), "Best Wedding Yet", "WED" }
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Guests",
|
||||||
|
columns: new[] { "CustomerId", "EventId", "Attended" },
|
||||||
|
values: new object[,]
|
||||||
|
{
|
||||||
|
{ 1, 1, true },
|
||||||
|
{ 2, 1, false },
|
||||||
|
{ 1, 2, false },
|
||||||
|
{ 3, 2, false }
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Guests_EventId",
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Guests",
|
||||||
|
column: "EventId");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Guests",
|
||||||
|
schema: "thamco.events");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Customers",
|
||||||
|
schema: "thamco.events");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Events",
|
||||||
|
schema: "thamco.events");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
178
ThAmCo.Events/Data/Migrations/20181127120440_AddStaffing.Designer.cs
generated
Normal file
178
ThAmCo.Events/Data/Migrations/20181127120440_AddStaffing.Designer.cs
generated
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(EventsDbContext))]
|
||||||
|
[Migration("20181127120440_AddStaffing")]
|
||||||
|
partial class AddStaffing
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasDefaultSchema("thamco.events")
|
||||||
|
.HasAnnotation("ProductVersion", "2.1.1-rtm-30846")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Customer", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Customers");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new { Id = 1, Email = "bob@example.com", FirstName = "Robert", Surname = "Robertson" },
|
||||||
|
new { Id = 2, Email = "betty@example.com", FirstName = "Betty", Surname = "Thornton" },
|
||||||
|
new { Id = 3, Email = "jin@example.com", FirstName = "Jin", Surname = "Jellybeans" }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Event", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<DateTime>("Date");
|
||||||
|
|
||||||
|
b.Property<TimeSpan?>("Duration");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("TypeId")
|
||||||
|
.IsRequired()
|
||||||
|
.IsFixedLength(true)
|
||||||
|
.HasMaxLength(3);
|
||||||
|
|
||||||
|
b.Property<string>("VenueReference");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Events");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new { Id = 1, Date = new DateTime(2016, 4, 12, 0, 0, 0, 0, DateTimeKind.Unspecified), Duration = new TimeSpan(0, 6, 0, 0, 0), Title = "Bob's Big 50", TypeId = "PTY" },
|
||||||
|
new { Id = 2, Date = new DateTime(2018, 12, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), Duration = new TimeSpan(0, 12, 0, 0, 0), Title = "Best Wedding Yet", TypeId = "WED" }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("CustomerId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.Property<bool>("Attended");
|
||||||
|
|
||||||
|
b.HasKey("CustomerId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Guests");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new { CustomerId = 1, EventId = 1, Attended = true },
|
||||||
|
new { CustomerId = 2, EventId = 1, Attended = false },
|
||||||
|
new { CustomerId = 1, EventId = 2, Attended = false },
|
||||||
|
new { CustomerId = 3, EventId = 2, Attended = false }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staff", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<bool>("FirstAid");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Staff");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new { Id = 1, Email = "a@a.a", FirstAid = false, FirstName = "Alan", Surname = "Partridge" },
|
||||||
|
new { Id = 2, Email = "rege@hotmail.com", FirstAid = true, FirstName = "Roger", Surname = "Stephenson" },
|
||||||
|
new { Id = 3, Email = "alans@jims.net", FirstAid = false, FirstName = "Alans", Surname = "Smith" }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staffing", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("StaffId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.HasKey("StaffId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Staffing");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new { StaffId = 1, EventId = 2 },
|
||||||
|
new { StaffId = 2, EventId = 1 },
|
||||||
|
new { StaffId = 3, EventId = 1 }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Customer", "Customer")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("CustomerId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staffing", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Staffings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Staff", "Staff")
|
||||||
|
.WithMany("Staffings")
|
||||||
|
.HasForeignKey("StaffId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
119
ThAmCo.Events/Data/Migrations/20181127120440_AddStaffing.cs
Normal file
119
ThAmCo.Events/Data/Migrations/20181127120440_AddStaffing.cs
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
public partial class AddStaffing : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "VenueReference",
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Events",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Staff",
|
||||||
|
schema: "thamco.events",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(nullable: false)
|
||||||
|
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
|
||||||
|
Surname = table.Column<string>(nullable: false),
|
||||||
|
FirstName = table.Column<string>(nullable: false),
|
||||||
|
Email = table.Column<string>(nullable: false),
|
||||||
|
FirstAid = table.Column<bool>(nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Staff", x => x.Id);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Staffing",
|
||||||
|
schema: "thamco.events",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
StaffId = table.Column<int>(nullable: false),
|
||||||
|
EventId = table.Column<int>(nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Staffing", x => new { x.StaffId, x.EventId });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Staffing_Events_EventId",
|
||||||
|
column: x => x.EventId,
|
||||||
|
principalSchema: "thamco.events",
|
||||||
|
principalTable: "Events",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Staffing_Staff_StaffId",
|
||||||
|
column: x => x.StaffId,
|
||||||
|
principalSchema: "thamco.events",
|
||||||
|
principalTable: "Staff",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Staff",
|
||||||
|
columns: new[] { "Id", "Email", "FirstAid", "FirstName", "Surname" },
|
||||||
|
values: new object[] { 1, "a@a.a", false, "Alan", "Partridge" });
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Staff",
|
||||||
|
columns: new[] { "Id", "Email", "FirstAid", "FirstName", "Surname" },
|
||||||
|
values: new object[] { 2, "rege@hotmail.com", true, "Roger", "Stephenson" });
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Staff",
|
||||||
|
columns: new[] { "Id", "Email", "FirstAid", "FirstName", "Surname" },
|
||||||
|
values: new object[] { 3, "alans@jims.net", false, "Alans", "Smith" });
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Staffing",
|
||||||
|
columns: new[] { "StaffId", "EventId" },
|
||||||
|
values: new object[] { 1, 2 });
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Staffing",
|
||||||
|
columns: new[] { "StaffId", "EventId" },
|
||||||
|
values: new object[] { 2, 1 });
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Staffing",
|
||||||
|
columns: new[] { "StaffId", "EventId" },
|
||||||
|
values: new object[] { 3, 1 });
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Staffing_EventId",
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Staffing",
|
||||||
|
column: "EventId");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Staffing",
|
||||||
|
schema: "thamco.events");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Staff",
|
||||||
|
schema: "thamco.events");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "VenueReference",
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Events");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
262
ThAmCo.Events/Data/Migrations/20181204160544_AddFoodReference.Designer.cs
generated
Normal file
262
ThAmCo.Events/Data/Migrations/20181204160544_AddFoodReference.Designer.cs
generated
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(EventsDbContext))]
|
||||||
|
[Migration("20181204160544_AddFoodReference")]
|
||||||
|
partial class AddFoodReference
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasDefaultSchema("thamco.events")
|
||||||
|
.HasAnnotation("ProductVersion", "2.2.0-preview3-35497")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Customer", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Customers");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Email = "bob@example.com",
|
||||||
|
FirstName = "Robert",
|
||||||
|
Surname = "Robertson"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Email = "betty@example.com",
|
||||||
|
FirstName = "Betty",
|
||||||
|
Surname = "Thornton"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
Email = "jin@example.com",
|
||||||
|
FirstName = "Jin",
|
||||||
|
Surname = "Jellybeans"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Event", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<DateTime>("Date");
|
||||||
|
|
||||||
|
b.Property<TimeSpan?>("Duration");
|
||||||
|
|
||||||
|
b.Property<int>("FoodReference");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("TypeId")
|
||||||
|
.IsRequired()
|
||||||
|
.IsFixedLength(true)
|
||||||
|
.HasMaxLength(3);
|
||||||
|
|
||||||
|
b.Property<string>("VenueReference");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Events");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Date = new DateTime(2016, 4, 12, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
Duration = new TimeSpan(0, 6, 0, 0, 0),
|
||||||
|
FoodReference = 0,
|
||||||
|
Title = "Bob's Big 50",
|
||||||
|
TypeId = "PTY"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Date = new DateTime(2018, 12, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
Duration = new TimeSpan(0, 12, 0, 0, 0),
|
||||||
|
FoodReference = 0,
|
||||||
|
Title = "Best Wedding Yet",
|
||||||
|
TypeId = "WED"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("CustomerId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.Property<bool>("Attended");
|
||||||
|
|
||||||
|
b.HasKey("CustomerId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Guests");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 1,
|
||||||
|
EventId = 1,
|
||||||
|
Attended = true
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 2,
|
||||||
|
EventId = 1,
|
||||||
|
Attended = false
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 1,
|
||||||
|
EventId = 2,
|
||||||
|
Attended = false
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 3,
|
||||||
|
EventId = 2,
|
||||||
|
Attended = false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staff", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<bool>("FirstAid");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Staff");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Email = "a@a.a",
|
||||||
|
FirstAid = false,
|
||||||
|
FirstName = "Alan",
|
||||||
|
Surname = "Partridge"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Email = "rege@hotmail.com",
|
||||||
|
FirstAid = true,
|
||||||
|
FirstName = "Roger",
|
||||||
|
Surname = "Stephenson"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
Email = "alans@jims.net",
|
||||||
|
FirstAid = false,
|
||||||
|
FirstName = "Alans",
|
||||||
|
Surname = "Smith"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staffing", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("StaffId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.HasKey("StaffId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Staffing");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 1,
|
||||||
|
EventId = 2
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 2,
|
||||||
|
EventId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 3,
|
||||||
|
EventId = 1
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Customer", "Customer")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("CustomerId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staffing", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Staffings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Staff", "Staff")
|
||||||
|
.WithMany("Staffings")
|
||||||
|
.HasForeignKey("StaffId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
public partial class AddFoodReference : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<int>(
|
||||||
|
name: "FoodReference",
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Events",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "FoodReference",
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Events");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
266
ThAmCo.Events/Data/Migrations/20181205115027_AddSoftDeleteEvent.Designer.cs
generated
Normal file
266
ThAmCo.Events/Data/Migrations/20181205115027_AddSoftDeleteEvent.Designer.cs
generated
Normal file
@ -0,0 +1,266 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(EventsDbContext))]
|
||||||
|
[Migration("20181205115027_AddSoftDeleteEvent")]
|
||||||
|
partial class AddSoftDeleteEvent
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasDefaultSchema("thamco.events")
|
||||||
|
.HasAnnotation("ProductVersion", "2.2.0-preview3-35497")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Customer", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Customers");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Email = "bob@example.com",
|
||||||
|
FirstName = "Robert",
|
||||||
|
Surname = "Robertson"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Email = "betty@example.com",
|
||||||
|
FirstName = "Betty",
|
||||||
|
Surname = "Thornton"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
Email = "jin@example.com",
|
||||||
|
FirstName = "Jin",
|
||||||
|
Surname = "Jellybeans"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Event", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<DateTime>("Date");
|
||||||
|
|
||||||
|
b.Property<TimeSpan?>("Duration");
|
||||||
|
|
||||||
|
b.Property<int>("FoodReference");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("TypeId")
|
||||||
|
.IsRequired()
|
||||||
|
.IsFixedLength(true)
|
||||||
|
.HasMaxLength(3);
|
||||||
|
|
||||||
|
b.Property<string>("VenueReference");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Events");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Date = new DateTime(2016, 4, 12, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
Duration = new TimeSpan(0, 6, 0, 0, 0),
|
||||||
|
FoodReference = 0,
|
||||||
|
IsDeleted = false,
|
||||||
|
Title = "Bob's Big 50",
|
||||||
|
TypeId = "PTY"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Date = new DateTime(2018, 12, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
Duration = new TimeSpan(0, 12, 0, 0, 0),
|
||||||
|
FoodReference = 0,
|
||||||
|
IsDeleted = false,
|
||||||
|
Title = "Best Wedding Yet",
|
||||||
|
TypeId = "WED"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("CustomerId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.Property<bool>("Attended");
|
||||||
|
|
||||||
|
b.HasKey("CustomerId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Guests");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 1,
|
||||||
|
EventId = 1,
|
||||||
|
Attended = true
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 2,
|
||||||
|
EventId = 1,
|
||||||
|
Attended = false
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 1,
|
||||||
|
EventId = 2,
|
||||||
|
Attended = false
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 3,
|
||||||
|
EventId = 2,
|
||||||
|
Attended = false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staff", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<bool>("FirstAid");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Staff");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Email = "a@a.a",
|
||||||
|
FirstAid = false,
|
||||||
|
FirstName = "Alan",
|
||||||
|
Surname = "Partridge"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Email = "rege@hotmail.com",
|
||||||
|
FirstAid = true,
|
||||||
|
FirstName = "Roger",
|
||||||
|
Surname = "Stephenson"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
Email = "alans@jims.net",
|
||||||
|
FirstAid = false,
|
||||||
|
FirstName = "Alans",
|
||||||
|
Surname = "Smith"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staffing", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("StaffId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.HasKey("StaffId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Staffing");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 1,
|
||||||
|
EventId = 2
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 2,
|
||||||
|
EventId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 3,
|
||||||
|
EventId = 1
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Customer", "Customer")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("CustomerId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staffing", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Staffings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Staff", "Staff")
|
||||||
|
.WithMany("Staffings")
|
||||||
|
.HasForeignKey("StaffId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
public partial class AddSoftDeleteEvent : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<bool>(
|
||||||
|
name: "IsDeleted",
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Events",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "IsDeleted",
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Events");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
271
ThAmCo.Events/Data/Migrations/20181205125146_AddSoftDeleteCustomer.Designer.cs
generated
Normal file
271
ThAmCo.Events/Data/Migrations/20181205125146_AddSoftDeleteCustomer.Designer.cs
generated
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(EventsDbContext))]
|
||||||
|
[Migration("20181205125146_AddSoftDeleteCustomer")]
|
||||||
|
partial class AddSoftDeleteCustomer
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasDefaultSchema("thamco.events")
|
||||||
|
.HasAnnotation("ProductVersion", "2.2.0-preview3-35497")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Customer", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted");
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Customers");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Email = "bob@example.com",
|
||||||
|
FirstName = "Robert",
|
||||||
|
IsDeleted = false,
|
||||||
|
Surname = "Robertson"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Email = "betty@example.com",
|
||||||
|
FirstName = "Betty",
|
||||||
|
IsDeleted = false,
|
||||||
|
Surname = "Thornton"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
Email = "jin@example.com",
|
||||||
|
FirstName = "Jin",
|
||||||
|
IsDeleted = false,
|
||||||
|
Surname = "Jellybeans"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Event", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<DateTime>("Date");
|
||||||
|
|
||||||
|
b.Property<TimeSpan?>("Duration");
|
||||||
|
|
||||||
|
b.Property<int>("FoodReference");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("TypeId")
|
||||||
|
.IsRequired()
|
||||||
|
.IsFixedLength(true)
|
||||||
|
.HasMaxLength(3);
|
||||||
|
|
||||||
|
b.Property<string>("VenueReference");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Events");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Date = new DateTime(2016, 4, 12, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
Duration = new TimeSpan(0, 6, 0, 0, 0),
|
||||||
|
FoodReference = 0,
|
||||||
|
IsDeleted = false,
|
||||||
|
Title = "Bob's Big 50",
|
||||||
|
TypeId = "PTY"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Date = new DateTime(2018, 12, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
Duration = new TimeSpan(0, 12, 0, 0, 0),
|
||||||
|
FoodReference = 0,
|
||||||
|
IsDeleted = false,
|
||||||
|
Title = "Best Wedding Yet",
|
||||||
|
TypeId = "WED"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("CustomerId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.Property<bool>("Attended");
|
||||||
|
|
||||||
|
b.HasKey("CustomerId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Guests");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 1,
|
||||||
|
EventId = 1,
|
||||||
|
Attended = true
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 2,
|
||||||
|
EventId = 1,
|
||||||
|
Attended = false
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 1,
|
||||||
|
EventId = 2,
|
||||||
|
Attended = false
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 3,
|
||||||
|
EventId = 2,
|
||||||
|
Attended = false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staff", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<bool>("FirstAid");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Staff");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Email = "a@a.a",
|
||||||
|
FirstAid = false,
|
||||||
|
FirstName = "Alan",
|
||||||
|
Surname = "Partridge"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Email = "rege@hotmail.com",
|
||||||
|
FirstAid = true,
|
||||||
|
FirstName = "Roger",
|
||||||
|
Surname = "Stephenson"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
Email = "alans@jims.net",
|
||||||
|
FirstAid = false,
|
||||||
|
FirstName = "Alans",
|
||||||
|
Surname = "Smith"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staffing", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("StaffId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.HasKey("StaffId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Staffing");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 1,
|
||||||
|
EventId = 2
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 2,
|
||||||
|
EventId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 3,
|
||||||
|
EventId = 1
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Customer", "Customer")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("CustomerId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staffing", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Staffings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Staff", "Staff")
|
||||||
|
.WithMany("Staffings")
|
||||||
|
.HasForeignKey("StaffId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
public partial class AddSoftDeleteCustomer : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<bool>(
|
||||||
|
name: "IsDeleted",
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Customers",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "IsDeleted",
|
||||||
|
schema: "thamco.events",
|
||||||
|
table: "Customers");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
269
ThAmCo.Events/Data/Migrations/EventsDbContextModelSnapshot.cs
Normal file
269
ThAmCo.Events/Data/Migrations/EventsDbContextModelSnapshot.cs
Normal file
@ -0,0 +1,269 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(EventsDbContext))]
|
||||||
|
partial class EventsDbContextModelSnapshot : ModelSnapshot
|
||||||
|
{
|
||||||
|
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasDefaultSchema("thamco.events")
|
||||||
|
.HasAnnotation("ProductVersion", "2.2.0-preview3-35497")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Customer", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted");
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Customers");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Email = "bob@example.com",
|
||||||
|
FirstName = "Robert",
|
||||||
|
IsDeleted = false,
|
||||||
|
Surname = "Robertson"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Email = "betty@example.com",
|
||||||
|
FirstName = "Betty",
|
||||||
|
IsDeleted = false,
|
||||||
|
Surname = "Thornton"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
Email = "jin@example.com",
|
||||||
|
FirstName = "Jin",
|
||||||
|
IsDeleted = false,
|
||||||
|
Surname = "Jellybeans"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Event", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<DateTime>("Date");
|
||||||
|
|
||||||
|
b.Property<TimeSpan?>("Duration");
|
||||||
|
|
||||||
|
b.Property<int>("FoodReference");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("TypeId")
|
||||||
|
.IsRequired()
|
||||||
|
.IsFixedLength(true)
|
||||||
|
.HasMaxLength(3);
|
||||||
|
|
||||||
|
b.Property<string>("VenueReference");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Events");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Date = new DateTime(2016, 4, 12, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
Duration = new TimeSpan(0, 6, 0, 0, 0),
|
||||||
|
FoodReference = 0,
|
||||||
|
IsDeleted = false,
|
||||||
|
Title = "Bob's Big 50",
|
||||||
|
TypeId = "PTY"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Date = new DateTime(2018, 12, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
|
||||||
|
Duration = new TimeSpan(0, 12, 0, 0, 0),
|
||||||
|
FoodReference = 0,
|
||||||
|
IsDeleted = false,
|
||||||
|
Title = "Best Wedding Yet",
|
||||||
|
TypeId = "WED"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("CustomerId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.Property<bool>("Attended");
|
||||||
|
|
||||||
|
b.HasKey("CustomerId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Guests");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 1,
|
||||||
|
EventId = 1,
|
||||||
|
Attended = true
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 2,
|
||||||
|
EventId = 1,
|
||||||
|
Attended = false
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 1,
|
||||||
|
EventId = 2,
|
||||||
|
Attended = false
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
CustomerId = 3,
|
||||||
|
EventId = 2,
|
||||||
|
Attended = false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staff", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<bool>("FirstAid");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("Surname")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Staff");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
Email = "a@a.a",
|
||||||
|
FirstAid = false,
|
||||||
|
FirstName = "Alan",
|
||||||
|
Surname = "Partridge"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
Email = "rege@hotmail.com",
|
||||||
|
FirstAid = true,
|
||||||
|
FirstName = "Roger",
|
||||||
|
Surname = "Stephenson"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
Email = "alans@jims.net",
|
||||||
|
FirstAid = false,
|
||||||
|
FirstName = "Alans",
|
||||||
|
Surname = "Smith"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staffing", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("StaffId");
|
||||||
|
|
||||||
|
b.Property<int>("EventId");
|
||||||
|
|
||||||
|
b.HasKey("StaffId", "EventId");
|
||||||
|
|
||||||
|
b.HasIndex("EventId");
|
||||||
|
|
||||||
|
b.ToTable("Staffing");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 1,
|
||||||
|
EventId = 2
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 2,
|
||||||
|
EventId = 1
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
StaffId = 3,
|
||||||
|
EventId = 1
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.GuestBooking", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Customer", "Customer")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("CustomerId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Bookings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("ThAmCo.Events.Data.Staffing", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Event", "Event")
|
||||||
|
.WithMany("Staffings")
|
||||||
|
.HasForeignKey("EventId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("ThAmCo.Events.Data.Staff", "Staff")
|
||||||
|
.WithMany("Staffings")
|
||||||
|
.HasForeignKey("StaffId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
27
ThAmCo.Events/Data/Staff.cs
Normal file
27
ThAmCo.Events/Data/Staff.cs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data
|
||||||
|
{
|
||||||
|
public class Staff
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string Surname { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string FirstName { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[DataType(DataType.EmailAddress)]
|
||||||
|
public string Email { get; set; }
|
||||||
|
|
||||||
|
public List<Staffing> Staffings { get; set; }
|
||||||
|
|
||||||
|
public bool FirstAid { get; set; }
|
||||||
|
}
|
||||||
|
}
|
17
ThAmCo.Events/Data/Staffing.cs
Normal file
17
ThAmCo.Events/Data/Staffing.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Data
|
||||||
|
{
|
||||||
|
public class Staffing
|
||||||
|
{
|
||||||
|
public int StaffId { get; set; }
|
||||||
|
|
||||||
|
public Staff Staff { get; set; }
|
||||||
|
|
||||||
|
public int EventId { get; set; }
|
||||||
|
|
||||||
|
public Event Event { get; set; }
|
||||||
|
}
|
||||||
|
}
|
16
ThAmCo.Events/Models/Dto/EventTypeDto.cs
Normal file
16
ThAmCo.Events/Models/Dto/EventTypeDto.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models
|
||||||
|
{
|
||||||
|
public class EventTypeDto
|
||||||
|
{
|
||||||
|
[Required, MaxLength(3), MinLength(3)]
|
||||||
|
public string TypeId { get; set; }
|
||||||
|
|
||||||
|
public string Title { get; set; }
|
||||||
|
}
|
||||||
|
}
|
16
ThAmCo.Events/Models/Dto/MenuDTO.cs
Normal file
16
ThAmCo.Events/Models/Dto/MenuDTO.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.Dto
|
||||||
|
{
|
||||||
|
public class MenuDTO
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public string Items { get; set; }
|
||||||
|
|
||||||
|
public double Price { get; set; }
|
||||||
|
}
|
||||||
|
}
|
20
ThAmCo.Events/Models/Dto/ReservationCreateDto.cs
Normal file
20
ThAmCo.Events/Models/Dto/ReservationCreateDto.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models
|
||||||
|
{
|
||||||
|
public class ReservationCreateDto
|
||||||
|
{
|
||||||
|
[Required, DataType(DataType.Date)]
|
||||||
|
public DateTime EventDate { get; set; }
|
||||||
|
|
||||||
|
[Required, MinLength(5), MaxLength(5)]
|
||||||
|
public string VenueCode { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string StaffId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
20
ThAmCo.Events/Models/Dto/ReservationDto.cs
Normal file
20
ThAmCo.Events/Models/Dto/ReservationDto.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models
|
||||||
|
{
|
||||||
|
public class ReservationDto
|
||||||
|
{
|
||||||
|
public string Reference { get; set; }
|
||||||
|
|
||||||
|
public DateTime EventDate { get; set; }
|
||||||
|
|
||||||
|
public string VenueCode { get; set; }
|
||||||
|
|
||||||
|
public DateTime whenMade { get; set; }
|
||||||
|
|
||||||
|
public string StaffId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
22
ThAmCo.Events/Models/Dto/VenueDto.cs
Normal file
22
ThAmCo.Events/Models/Dto/VenueDto.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models
|
||||||
|
{
|
||||||
|
public class VenueDto
|
||||||
|
{
|
||||||
|
public string Code { get; set; }
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public string Description { get; set; }
|
||||||
|
|
||||||
|
public int Capacity { get; set; }
|
||||||
|
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
|
||||||
|
public double CostPerHour { get; set; }
|
||||||
|
}
|
||||||
|
}
|
11
ThAmCo.Events/Models/ErrorViewModel.cs
Normal file
11
ThAmCo.Events/Models/ErrorViewModel.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models
|
||||||
|
{
|
||||||
|
public class ErrorViewModel
|
||||||
|
{
|
||||||
|
public string RequestId { get; set; }
|
||||||
|
|
||||||
|
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models
|
||||||
|
{
|
||||||
|
public class CustomerCreateModel
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string Surname { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string FirstName { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
[DataType(DataType.EmailAddress)]
|
||||||
|
public string Email { get; set; }
|
||||||
|
|
||||||
|
public List<Event> Events { get; set; }
|
||||||
|
|
||||||
|
public int InitialEvent { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.ViewModels.Events
|
||||||
|
{
|
||||||
|
public class EventAddCustomerModel
|
||||||
|
{
|
||||||
|
public int EventId { get; set; }
|
||||||
|
|
||||||
|
public List<Customer> Customer { get; set; }
|
||||||
|
}
|
||||||
|
}
|
15
ThAmCo.Events/Models/ViewModels/Events/EventAddMenuModel.cs
Normal file
15
ThAmCo.Events/Models/ViewModels/Events/EventAddMenuModel.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ThAmCo.Events.Models.Dto;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.ViewModels.Events
|
||||||
|
{
|
||||||
|
public class EventAddMenuModel
|
||||||
|
{
|
||||||
|
public int EventId { get; set; }
|
||||||
|
|
||||||
|
public List<MenuDTO> Menus { get; set; }
|
||||||
|
}
|
||||||
|
}
|
15
ThAmCo.Events/Models/ViewModels/Events/EventAddStaffModel.cs
Normal file
15
ThAmCo.Events/Models/ViewModels/Events/EventAddStaffModel.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.ViewModels.Events
|
||||||
|
{
|
||||||
|
public class EventAddStaffModel
|
||||||
|
{
|
||||||
|
public int EventId { get; set; }
|
||||||
|
|
||||||
|
public List<Staff> Staff { get; set; }
|
||||||
|
}
|
||||||
|
}
|
24
ThAmCo.Events/Models/ViewModels/Events/EventCreateModel.cs
Normal file
24
ThAmCo.Events/Models/ViewModels/Events/EventCreateModel.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models
|
||||||
|
{
|
||||||
|
public class EventCreateModel
|
||||||
|
{
|
||||||
|
[Required]
|
||||||
|
public string Title { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
|
||||||
|
public TimeSpan? Duration { get; set; }
|
||||||
|
|
||||||
|
[Required, MaxLength(3), MinLength(3)]
|
||||||
|
public string TypeId { get; set; }
|
||||||
|
|
||||||
|
public int VenueID { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models
|
||||||
|
{
|
||||||
|
public class EventCreateReservationModel
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public DateTime VenueDate { get; set; }
|
||||||
|
|
||||||
|
public string VenueCode { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.ViewModels.Events
|
||||||
|
{
|
||||||
|
public class EventCreateWithVenueModel
|
||||||
|
{
|
||||||
|
public int EventId { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string EventTitle { get; set; }
|
||||||
|
|
||||||
|
public DateTime EventDate { get; set; }
|
||||||
|
|
||||||
|
public TimeSpan? EventDuration { get; set; }
|
||||||
|
|
||||||
|
[Required, MaxLength(3), MinLength(3)]
|
||||||
|
public string EventTypeId { get; set; }
|
||||||
|
|
||||||
|
public string VenueCode { get; set; }
|
||||||
|
|
||||||
|
public string VenueName { get; set; }
|
||||||
|
|
||||||
|
public string VenueDescription { get; set; }
|
||||||
|
|
||||||
|
public int VenueCapacity { get; set; }
|
||||||
|
|
||||||
|
public DateTime VenueDate { get; set; }
|
||||||
|
|
||||||
|
public double VenueCostPerHour { get; set; }
|
||||||
|
}
|
||||||
|
}
|
34
ThAmCo.Events/Models/ViewModels/Events/EventDetailsModel.cs
Normal file
34
ThAmCo.Events/Models/ViewModels/Events/EventDetailsModel.cs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models
|
||||||
|
{
|
||||||
|
public class EventDetailsModel
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string Title { get; set; }
|
||||||
|
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
|
||||||
|
public TimeSpan? Duration { get; set; }
|
||||||
|
|
||||||
|
[Required, MaxLength(3), MinLength(3)]
|
||||||
|
public string TypeId { get; set; }
|
||||||
|
|
||||||
|
public List<GuestBooking> Bookings { get; set; }
|
||||||
|
|
||||||
|
public ReservationDto Reservation { get; set; }
|
||||||
|
|
||||||
|
public string Reference { get; set; }
|
||||||
|
|
||||||
|
public int FoodReference { get; set; }
|
||||||
|
|
||||||
|
public List<Staffing> Staffing { get; set; }
|
||||||
|
}
|
||||||
|
}
|
18
ThAmCo.Events/Models/ViewModels/Events/EventEditModel.cs
Normal file
18
ThAmCo.Events/Models/ViewModels/Events/EventEditModel.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.ViewModels.Events
|
||||||
|
{
|
||||||
|
public class EventEditModel
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string Title { get; set; }
|
||||||
|
|
||||||
|
public TimeSpan? Duration { get; set; }
|
||||||
|
}
|
||||||
|
}
|
16
ThAmCo.Events/Models/ViewModels/Events/EventFindMenuModel.cs
Normal file
16
ThAmCo.Events/Models/ViewModels/Events/EventFindMenuModel.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.ViewModels.Events
|
||||||
|
{
|
||||||
|
public class EventFindMenuModel
|
||||||
|
{
|
||||||
|
public string EventType { get; set; }
|
||||||
|
|
||||||
|
public DateTime StartDate { get; set; }
|
||||||
|
|
||||||
|
public DateTime EndDate { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.ViewModels.Events
|
||||||
|
{
|
||||||
|
public class EventFindVenueModel
|
||||||
|
{
|
||||||
|
[Required, MaxLength(3), MinLength(3)]
|
||||||
|
public string EventType { get; set; }
|
||||||
|
|
||||||
|
public DateTime StartDate { get; set; }
|
||||||
|
|
||||||
|
public DateTime EndDate { get; set; }
|
||||||
|
}
|
||||||
|
}
|
32
ThAmCo.Events/Models/ViewModels/Events/EventIndexModel.cs
Normal file
32
ThAmCo.Events/Models/ViewModels/Events/EventIndexModel.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.ViewModels.Events
|
||||||
|
{
|
||||||
|
public class EventIndexModel
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string Title { get; set; }
|
||||||
|
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
|
||||||
|
public TimeSpan? Duration { get; set; }
|
||||||
|
|
||||||
|
[Required, MaxLength(3), MinLength(3)]
|
||||||
|
public string TypeId { get; set; }
|
||||||
|
|
||||||
|
public List<GuestBooking> Bookings { get; set; }
|
||||||
|
|
||||||
|
public string VenueReference { get; set; }
|
||||||
|
|
||||||
|
public List<Staffing> Staffings { get; set; }
|
||||||
|
|
||||||
|
public bool FirstAid { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.ViewModels.Events
|
||||||
|
{
|
||||||
|
public class EventRegisterAttendanceModel
|
||||||
|
{
|
||||||
|
public int EventId { get; set; }
|
||||||
|
|
||||||
|
public int CustomerId { get; set; }
|
||||||
|
|
||||||
|
public bool Attending { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models.ViewModels.Events
|
||||||
|
{
|
||||||
|
public class SelectVenueGetModel
|
||||||
|
{
|
||||||
|
public int? Id { get; set; }
|
||||||
|
|
||||||
|
[Required, MaxLength(3), MinLength(3)]
|
||||||
|
public string EventType { get; set; }
|
||||||
|
|
||||||
|
public DateTime StartDate { get; set; }
|
||||||
|
|
||||||
|
public DateTime EndDate { get; set; }
|
||||||
|
}
|
||||||
|
}
|
15
ThAmCo.Events/Models/ViewModels/Events/SelectVenueModel.cs
Normal file
15
ThAmCo.Events/Models/ViewModels/Events/SelectVenueModel.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events.Models
|
||||||
|
{
|
||||||
|
public class SelectVenueModel
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public List<VenueDto> Venues { get; set; }
|
||||||
|
}
|
||||||
|
}
|
38
ThAmCo.Events/Program.cs
Normal file
38
ThAmCo.Events/Program.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.AspNetCore;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var host = CreateWebHostBuilder(args).Build();
|
||||||
|
|
||||||
|
using (var scope = host.Services.CreateScope())
|
||||||
|
{
|
||||||
|
var services = scope.ServiceProvider;
|
||||||
|
var env = services.GetRequiredService<IHostingEnvironment>();
|
||||||
|
if (env.IsDevelopment())
|
||||||
|
{
|
||||||
|
var context = services.GetRequiredService<EventsDbContext>();
|
||||||
|
context.Database.EnsureDeleted();
|
||||||
|
context.Database.Migrate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
host.Run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
|
||||||
|
WebHost.CreateDefaultBuilder(args)
|
||||||
|
.UseStartup<Startup>();
|
||||||
|
}
|
||||||
|
}
|
27
ThAmCo.Events/Properties/launchSettings.json
Normal file
27
ThAmCo.Events/Properties/launchSettings.json
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"iisSettings": {
|
||||||
|
"windowsAuthentication": false,
|
||||||
|
"anonymousAuthentication": true,
|
||||||
|
"iisExpress": {
|
||||||
|
"applicationUrl": "http://localhost:22263",
|
||||||
|
"sslPort": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"IIS Express": {
|
||||||
|
"commandName": "IISExpress",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ThAmCo.Events": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"applicationUrl": "http://localhost:5000",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
65
ThAmCo.Events/Startup.cs
Normal file
65
ThAmCo.Events/Startup.cs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using ThAmCo.Events.Data;
|
||||||
|
|
||||||
|
namespace ThAmCo.Events
|
||||||
|
{
|
||||||
|
public class Startup
|
||||||
|
{
|
||||||
|
public Startup(IConfiguration configuration)
|
||||||
|
{
|
||||||
|
Configuration = configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IConfiguration Configuration { get; }
|
||||||
|
|
||||||
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
|
public void ConfigureServices(IServiceCollection services)
|
||||||
|
{
|
||||||
|
services.Configure<CookiePolicyOptions>(options =>
|
||||||
|
{
|
||||||
|
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
|
||||||
|
options.CheckConsentNeeded = context => true;
|
||||||
|
options.MinimumSameSitePolicy = SameSiteMode.None;
|
||||||
|
});
|
||||||
|
|
||||||
|
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
|
||||||
|
|
||||||
|
services.AddDbContext<EventsDbContext>(options =>
|
||||||
|
{
|
||||||
|
var cs = Configuration.GetConnectionString("EventsSqlConnection");
|
||||||
|
options.UseSqlServer(cs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
||||||
|
{
|
||||||
|
if (env.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseDeveloperExceptionPage();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
app.UseExceptionHandler("/Home/Error");
|
||||||
|
}
|
||||||
|
|
||||||
|
app.UseStaticFiles();
|
||||||
|
app.UseCookiePolicy();
|
||||||
|
|
||||||
|
app.UseMvc(routes =>
|
||||||
|
{
|
||||||
|
routes.MapRoute(
|
||||||
|
name: "default",
|
||||||
|
template: "{controller=Home}/{action=Index}/{id?}");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
ThAmCo.Events/ThAmCo.Events.csproj
Normal file
17
ThAmCo.Events/ThAmCo.Events.csproj
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="Models\ViewModels\Events\EventFindMenuModel.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||||
|
<PackageReference Include="Microsoft.Net.Compilers" Version="2.10.0" />
|
||||||
|
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
48
ThAmCo.Events/Views/Customers/Create.cshtml
Normal file
48
ThAmCo.Events/Views/Customers/Create.cshtml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
@model ThAmCo.Events.Models.CustomerCreateModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Create";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Create</h2>
|
||||||
|
|
||||||
|
<h4>Customer</h4>
|
||||||
|
<hr />
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<form asp-action="Create">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Surname" class="control-label"></label>
|
||||||
|
<input asp-for="Surname" class="form-control" />
|
||||||
|
<span asp-validation-for="Surname" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="FirstName" class="control-label"></label>
|
||||||
|
<input asp-for="FirstName" class="form-control" />
|
||||||
|
<span asp-validation-for="FirstName" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Email" class="control-label"></label>
|
||||||
|
<input asp-for="Email" class="form-control" />
|
||||||
|
<span asp-validation-for="Email" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="InitialEvent" class="control-label"></label>
|
||||||
|
<select asp-for="InitialEvent" class="form-control" asp-items="ViewBag.EventLists"></select>
|
||||||
|
<span asp-validation-for="InitialEvent" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Create" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||||
|
}
|
44
ThAmCo.Events/Views/Customers/Delete.cshtml
Normal file
44
ThAmCo.Events/Views/Customers/Delete.cshtml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
@model ThAmCo.Events.Data.Customer
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Delete";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Delete</h2>
|
||||||
|
|
||||||
|
<h3>Are you sure you want to delete this?</h3>
|
||||||
|
<div>
|
||||||
|
<h4>Customer</h4>
|
||||||
|
<hr />
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Surname)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Surname)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.FirstName)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.FirstName)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Email)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Email)
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<form asp-action="Delete">
|
||||||
|
<input type="hidden" asp-for="Id" />
|
||||||
|
<input type="submit" value="Delete" class="btn btn-default" />
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<form asp-action="AnonDelete">
|
||||||
|
<input type="hidden" asp-for="Id" />
|
||||||
|
<input type="submit" value="Delete Anonymously" class="btn btn-default" /> |
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</form>
|
||||||
|
</div>
|
80
ThAmCo.Events/Views/Customers/Details.cshtml
Normal file
80
ThAmCo.Events/Views/Customers/Details.cshtml
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
@model ThAmCo.Events.Data.Customer
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Details";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Details</h2>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h4>Customer</h4>
|
||||||
|
<hr />
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Surname)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Surname)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.FirstName)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.FirstName)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Email)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Email)
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Bookings.FirstOrDefault().Event.Title)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Bookings.FirstOrDefault().Event.Date)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Bookings.FirstOrDefault().Event.Duration)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Bookings.FirstOrDefault().Event.TypeId)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Bookings.FirstOrDefault().Attended)
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model.Bookings)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Event.Title)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Event.Date)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Event.Duration)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Event.TypeId)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Attended)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div>
|
||||||
|
<a asp-action="Edit" asp-route-id="@Model.Id">Edit</a> |
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
44
ThAmCo.Events/Views/Customers/Edit.cshtml
Normal file
44
ThAmCo.Events/Views/Customers/Edit.cshtml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
@model ThAmCo.Events.Data.Customer
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Edit";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Edit</h2>
|
||||||
|
|
||||||
|
<h4>Customer</h4>
|
||||||
|
<hr />
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<form asp-action="Edit">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<input type="hidden" asp-for="Id" />
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Surname" class="control-label"></label>
|
||||||
|
<input asp-for="Surname" class="form-control" />
|
||||||
|
<span asp-validation-for="Surname" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="FirstName" class="control-label"></label>
|
||||||
|
<input asp-for="FirstName" class="form-control" />
|
||||||
|
<span asp-validation-for="FirstName" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Email" class="control-label"></label>
|
||||||
|
<input asp-for="Email" class="form-control" />
|
||||||
|
<span asp-validation-for="Email" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Save" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||||
|
}
|
47
ThAmCo.Events/Views/Customers/Index.cshtml
Normal file
47
ThAmCo.Events/Views/Customers/Index.cshtml
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
@model IEnumerable<ThAmCo.Events.Data.Customer>
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Index";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Index</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a asp-action="Create">Create New</a>
|
||||||
|
</p>
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Surname)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.FirstName)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Email)
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model) {
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Surname)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.FirstName)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Email)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
|
||||||
|
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
|
||||||
|
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
49
ThAmCo.Events/Views/Events/AddCustomer.cshtml
Normal file
49
ThAmCo.Events/Views/Events/AddCustomer.cshtml
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
@model ThAmCo.Events.Models.ViewModels.Events.EventAddCustomerModel
|
||||||
|
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "AddCustomer";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>AddCustomer</h2>
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Customer.FirstOrDefault().Surname)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Customer.FirstOrDefault().FirstName)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Customer.FirstOrDefault().Email)
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model.Customer)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Surname)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.FirstName)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Email)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<form asp-action="AddCustomer">
|
||||||
|
<input type="hidden" asp-for="EventId" />
|
||||||
|
@Html.Hidden("EventID", Model.EventId)
|
||||||
|
@Html.Hidden("CustomerID", item.Id)
|
||||||
|
<input type="submit" value="Select" />
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
48
ThAmCo.Events/Views/Events/AddMenu.cshtml
Normal file
48
ThAmCo.Events/Views/Events/AddMenu.cshtml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
@model ThAmCo.Events.Models.ViewModels.Events.EventAddMenuModel
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "AddMenu";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>AddMenu</h2>
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Menus.FirstOrDefault().Id)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Menus.FirstOrDefault().Items)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Menus.FirstOrDefault().Price)
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model.Menus)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Id)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Items)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Price)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<form asp-action="AddMenu">
|
||||||
|
<input type="hidden" asp-for="EventId" />
|
||||||
|
@Html.Hidden("EventID", Model.EventId)
|
||||||
|
@Html.Hidden("MenuID", item.Id)
|
||||||
|
<input type="submit" value="Select" />
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
55
ThAmCo.Events/Views/Events/AddStaff.cshtml
Normal file
55
ThAmCo.Events/Views/Events/AddStaff.cshtml
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
@model ThAmCo.Events.Models.ViewModels.Events.EventAddStaffModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "AddStaff";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>AddStaff</h2>
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Staff.FirstOrDefault().Surname)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Staff.FirstOrDefault().FirstName)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Staff.FirstOrDefault().Email)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Staff.FirstOrDefault().FirstAid)
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model.Staff)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Surname)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.FirstName)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Email)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.FirstAid)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<form asp-action="AddStaff">
|
||||||
|
<input type="hidden" asp-for="EventId" />
|
||||||
|
@Html.Hidden("EventID", Model.EventId)
|
||||||
|
@Html.Hidden("StaffID", item.Id)
|
||||||
|
<input type="submit" value="Select" />
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
48
ThAmCo.Events/Views/Events/Create.cshtml
Normal file
48
ThAmCo.Events/Views/Events/Create.cshtml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
@model ThAmCo.Events.Models.EventCreateModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Create";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Create</h2>
|
||||||
|
|
||||||
|
<h4>Event</h4>
|
||||||
|
<hr />
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<form asp-action="Create">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Title" class="control-label"></label>
|
||||||
|
<input asp-for="Title" class="form-control" />
|
||||||
|
<span asp-validation-for="Title" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Date" class="control-label"></label>
|
||||||
|
<input type="date" asp-for="Date" class="form-control" />
|
||||||
|
<span asp-validation-for="Date" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Duration" class="control-label"></label>
|
||||||
|
<input type="time" asp-for="Duration" class="form-control" />
|
||||||
|
<span asp-validation-for="Duration" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="TypeId" class="control-label"></label>
|
||||||
|
<input asp-for="TypeId" class="form-control"></input>
|
||||||
|
<span asp-validation-for="TypeId" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Continue" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||||
|
}
|
46
ThAmCo.Events/Views/Events/CreateWithVenue.cshtml
Normal file
46
ThAmCo.Events/Views/Events/CreateWithVenue.cshtml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
@model ThAmCo.Events.Data.Event
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "CreateWithVenue";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>CreateWithVenue</h2>
|
||||||
|
|
||||||
|
<h4>Event</h4>
|
||||||
|
<hr />
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<form asp-action="Create">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Title" class="control-label"></label>
|
||||||
|
<input asp-for="Title" class="form-control" />
|
||||||
|
<span asp-validation-for="Title" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Date" class="control-label"></label>
|
||||||
|
<input asp-for="Date" class="form-control" />
|
||||||
|
<span asp-validation-for="Date" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Duration" class="control-label"></label>
|
||||||
|
<input asp-for="Duration" class="form-control" />
|
||||||
|
<span asp-validation-for="Duration" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="TypeId" class="control-label"></label>
|
||||||
|
<input asp-for="TypeId" class="form-control" />
|
||||||
|
<span asp-validation-for="TypeId" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
@Html.Hidden("VenueRefernce", Model.VenueReference)
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Create" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
45
ThAmCo.Events/Views/Events/Delete.cshtml
Normal file
45
ThAmCo.Events/Views/Events/Delete.cshtml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
@model ThAmCo.Events.Data.Event
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Delete";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Delete</h2>
|
||||||
|
|
||||||
|
<h3>Are you sure you want to delete this?</h3>
|
||||||
|
<div>
|
||||||
|
<h4>Event</h4>
|
||||||
|
<hr />
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Title)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Title)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Date)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Date)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Duration)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Duration)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.TypeId)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.TypeId)
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<form asp-action="Delete">
|
||||||
|
<input type="hidden" asp-for="Id" />
|
||||||
|
<input type="submit" value="Delete" class="btn btn-default" /> |
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</form>
|
||||||
|
</div>
|
251
ThAmCo.Events/Views/Events/Details.cshtml
Normal file
251
ThAmCo.Events/Views/Events/Details.cshtml
Normal file
@ -0,0 +1,251 @@
|
|||||||
|
@model ThAmCo.Events.Models.EventDetailsModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Details";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Details</h2>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h4>Event</h4>
|
||||||
|
<hr />
|
||||||
|
<dl class="dl-horizontal venue-details">
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Title)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Title)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Date)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Date)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Duration)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Duration)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.TypeId)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.TypeId)
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl class="dl-horizontal venue-details">
|
||||||
|
<dt>
|
||||||
|
<h4><b><u>@Html.DisplayNameFor(model => model.Reservation)</u></b></h4>
|
||||||
|
</dt>
|
||||||
|
|
||||||
|
@if (Model.Reservation == null)
|
||||||
|
{
|
||||||
|
<dd>
|
||||||
|
<a asp-action="SelectVenue" asp-route-id="@Model.Id">Select Venue</a>
|
||||||
|
</dd>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<dd></dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Reservation.VenueCode)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Reservation.VenueCode)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Reservation.EventDate)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Reservation.EventDate)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Reservation.whenMade)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Reservation.whenMade)
|
||||||
|
</dd>
|
||||||
|
<dt></dt>
|
||||||
|
<dd>
|
||||||
|
<a asp-action="FreeReservation" asp-route-id="@Model.Id">Remove Venue</a>
|
||||||
|
</dd>
|
||||||
|
}
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl class="dl-horizontal venue-details">
|
||||||
|
<dt>
|
||||||
|
<h4><b><u>@Html.DisplayNameFor(model => model.FoodReference)</u></b></h4>
|
||||||
|
</dt>
|
||||||
|
@if (Model.FoodReference == 0)
|
||||||
|
{
|
||||||
|
<dd>
|
||||||
|
<a asp-action="AddMenu" asp-route-id="@Model.Id">Select Menu</a>
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<dd></dd>
|
||||||
|
<dt>
|
||||||
|
Menu Number
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.FoodReference)
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
}
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a asp-action="Edit" asp-route-id="@Model.Id">Edit</a> |
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="AddCustomer" asp-route-id="@Model.Id">Add Customer</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Bookings.FirstOrDefault().Customer.Surname)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Bookings.FirstOrDefault().Customer.FirstName)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Bookings.FirstOrDefault().Customer.Email)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Bookings.FirstOrDefault().Attended)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model.Bookings)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Customer.Surname)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Customer.FirstName)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Customer.Email)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Attended)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<button onclick="toggleAttendance(@item.Customer.Id, @Model.Id)">Toggle Attendance</button>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<form asp-action="RemoveCustomer">
|
||||||
|
<input type="hidden" asp-for="Id" />
|
||||||
|
@Html.Hidden("EventID", Model.Id)
|
||||||
|
@Html.Hidden("CustomerID", item.CustomerId)
|
||||||
|
<input type="submit" value="Remove" />
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
Total Attendees: @Model.Bookings.Count
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="AddStaff" asp-route-id="@Model.Id">Add Staff</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Staffing.FirstOrDefault().Staff.Surname)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Staffing.FirstOrDefault().Staff.FirstName)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Staffing.FirstOrDefault().Staff.Email)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Staffing.FirstOrDefault().Staff.FirstAid)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model.Staffing)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Staff.Surname)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Staff.FirstName)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Staff.Email)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Staff.FirstAid)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<form asp-action="RemoveStaff">
|
||||||
|
<input type="hidden" asp-for="Id" />
|
||||||
|
@Html.Hidden("EventID", Model.Id)
|
||||||
|
@Html.Hidden("StaffID", item.StaffId)
|
||||||
|
<input type="submit" value="Remove" />
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h4>
|
||||||
|
@if (Model.Staffing.Count < Math.Ceiling((double)Model.Bookings.Count / 10))
|
||||||
|
{
|
||||||
|
@Html.Raw("⚠ Only have " + Model.Staffing.Count + " staff members, " + Math.Ceiling((double)Model.Bookings.Count / 10) + " are required. <br>")
|
||||||
|
}
|
||||||
|
</h4>
|
||||||
|
<h4>
|
||||||
|
@if (Model.Staffing == null || !Model.Staffing.Any(s => s.Staff.FirstAid))
|
||||||
|
{
|
||||||
|
@Html.Raw("⚠ There is no first aid staff member.")
|
||||||
|
}
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function toggleAttendance(cID, eID)
|
||||||
|
{
|
||||||
|
$.ajax({
|
||||||
|
url: "http://localhost:22263/Events/RegisterAttendance?EventId=" + eID + "&CustomerId=" + cID,
|
||||||
|
type: "POST",
|
||||||
|
crossDomain: true,
|
||||||
|
success: function (result) { window.location.reload(false);},
|
||||||
|
failiure: function () { }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
}
|
39
ThAmCo.Events/Views/Events/Edit.cshtml
Normal file
39
ThAmCo.Events/Views/Events/Edit.cshtml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
@model ThAmCo.Events.Data.Event
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Edit";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Edit</h2>
|
||||||
|
|
||||||
|
<h4>Event</h4>
|
||||||
|
<hr />
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<form asp-action="Edit">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<input type="hidden" asp-for="Id" />
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Title" class="control-label"></label>
|
||||||
|
<input asp-for="Title" class="form-control" />
|
||||||
|
<span asp-validation-for="Title" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Duration" class="control-label"></label>
|
||||||
|
<input asp-for="Duration" class="form-control" />
|
||||||
|
<span asp-validation-for="Duration" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Save" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||||
|
}
|
30
ThAmCo.Events/Views/Events/FindVenue.cshtml
Normal file
30
ThAmCo.Events/Views/Events/FindVenue.cshtml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
@model ThAmCo.Events.Models.ViewModels.Events.EventFindVenueModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "FindVenue";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>FindVenue</h2>
|
||||||
|
|
||||||
|
<form asp-action="FindVenueResults">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="EventType" class="control-label"></label>
|
||||||
|
<input asp-for="EventType" class="form-control" />
|
||||||
|
<span asp-validation-for="EventType" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="StartDate" class="control-label"></label>
|
||||||
|
<input type="date" asp-for="StartDate" class="form-control" />
|
||||||
|
<span asp-validation-for="StartDate" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="EndDate" class="control-label"></label>
|
||||||
|
<input type="date" asp-for="EndDate" class="form-control" />
|
||||||
|
<span asp-validation-for="EndDate" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Find Venues" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
60
ThAmCo.Events/Views/Events/FindVenueResults.cshtml
Normal file
60
ThAmCo.Events/Views/Events/FindVenueResults.cshtml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
@model IEnumerable<ThAmCo.Events.Models.VenueDto>
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "FindVenueResults";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>FindVenueResults</h2>
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.FirstOrDefault().Code)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.FirstOrDefault().Name)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.FirstOrDefault().Capacity)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.FirstOrDefault().Date)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.FirstOrDefault().CostPerHour)
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Code)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Name)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Capacity)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Date)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.CostPerHour)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<form asp-action="CreateReservation">
|
||||||
|
@Html.Hidden("VenueDate", item.Date)
|
||||||
|
@Html.Hidden("VenueCode", item.Code)
|
||||||
|
<input type="submit" value="Reserve" />
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
77
ThAmCo.Events/Views/Events/Index.cshtml
Normal file
77
ThAmCo.Events/Views/Events/Index.cshtml
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
@model IEnumerable<ThAmCo.Events.Data.Event>
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Index";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Index</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a asp-action="Create">Create New</a>
|
||||||
|
</p>
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Title)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Date)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Duration)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.TypeId)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
BookingCount
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
VenueReference
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model) {
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Title)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Date)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Duration)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.TypeId)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@item.Bookings.Count
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.VenueReference)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@if (item.Staffings.Count < Math.Ceiling((double)item.Bookings.Count / 10))
|
||||||
|
{
|
||||||
|
@Html.Raw("⚠ Only have " + item.Staffings.Count + " staff members, " + Math.Ceiling((double)item.Bookings.Count / 10) + " are required.")
|
||||||
|
}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@if (item.Staffings == null || !item.Staffings.Any(s => s.Staff.FirstAid))
|
||||||
|
{
|
||||||
|
@Html.Raw("⚠ There is no first aid staff member.")
|
||||||
|
}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
|
||||||
|
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
|
||||||
|
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
59
ThAmCo.Events/Views/Events/SelectVenue.cshtml
Normal file
59
ThAmCo.Events/Views/Events/SelectVenue.cshtml
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
@model ThAmCo.Events.Models.SelectVenueModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "SelectVenue";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>SelectVenue</h2>
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Venues.FirstOrDefault().Code)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Venues.FirstOrDefault().Name)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Venues.FirstOrDefault().Capacity)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Venues.FirstOrDefault().Date)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Venues.FirstOrDefault().CostPerHour)
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model.Venues) {
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Code)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Name)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Capacity)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Date)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.CostPerHour)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<form asp-action="CreateReservation">
|
||||||
|
@Html.Hidden("VenueDate", item.Date)
|
||||||
|
@Html.Hidden("VenueCode", item.Code)
|
||||||
|
@Html.Hidden("Id", Model.Id)
|
||||||
|
<input type="submit" value="Reserve" />
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
35
ThAmCo.Events/Views/Food/Create.cshtml
Normal file
35
ThAmCo.Events/Views/Food/Create.cshtml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
@model ThAmCo.Events.Data.Food
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Create";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Create</h2>
|
||||||
|
|
||||||
|
<h4>Food</h4>
|
||||||
|
<hr />
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<form asp-action="Create">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Items" class="control-label"></label>
|
||||||
|
<input asp-for="Items" class="form-control" />
|
||||||
|
<span asp-validation-for="Items" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Price" class="control-label"></label>
|
||||||
|
<input asp-for="Price" class="form-control" />
|
||||||
|
<span asp-validation-for="Price" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Create" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
38
ThAmCo.Events/Views/Food/Delete.cshtml
Normal file
38
ThAmCo.Events/Views/Food/Delete.cshtml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
@model ThAmCo.Events.Data.Food
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Delete";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Delete</h2>
|
||||||
|
|
||||||
|
<h3>Are you sure you want to delete this?</h3>
|
||||||
|
<div>
|
||||||
|
<h4>Food</h4>
|
||||||
|
<hr />
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Id)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Id)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Items)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Items)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Price)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Price)
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<form asp-action="Delete">
|
||||||
|
<input type="submit" value="Delete" class="btn btn-default" /> |
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</form>
|
||||||
|
</div>
|
30
ThAmCo.Events/Views/Food/Details.cshtml
Normal file
30
ThAmCo.Events/Views/Food/Details.cshtml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
@model ThAmCo.Events.Data.Food
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Details";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Details</h2>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h4>Food</h4>
|
||||||
|
<hr />
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Items)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Items)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Price)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Price)
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a asp-action="Edit" asp-route-id="@Model.Id">Edit</a> |
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
36
ThAmCo.Events/Views/Food/Edit.cshtml
Normal file
36
ThAmCo.Events/Views/Food/Edit.cshtml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
@model ThAmCo.Events.Data.Food
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Edit";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Edit</h2>
|
||||||
|
|
||||||
|
<h4>Food</h4>
|
||||||
|
<hr />
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<form asp-action="Edit">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<input type="hidden" asp-for="Id" />
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Items" class="control-label"></label>
|
||||||
|
<input asp-for="Items" class="form-control" />
|
||||||
|
<span asp-validation-for="Items" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Price" class="control-label"></label>
|
||||||
|
<input asp-for="Price" class="form-control" />
|
||||||
|
<span asp-validation-for="Price" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Save" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
41
ThAmCo.Events/Views/Food/Index.cshtml
Normal file
41
ThAmCo.Events/Views/Food/Index.cshtml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
@model IEnumerable<ThAmCo.Events.Data.Food>
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Index";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Index</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a asp-action="Create">Create New</a>
|
||||||
|
</p>
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Items)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Price)
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model) {
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Items)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Price)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
|
||||||
|
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
|
||||||
|
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
43
ThAmCo.Events/Views/GuestBookings/Create.cshtml
Normal file
43
ThAmCo.Events/Views/GuestBookings/Create.cshtml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
@model ThAmCo.Events.Data.GuestBooking
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Create";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Create</h2>
|
||||||
|
|
||||||
|
<h4>GuestBooking</h4>
|
||||||
|
<hr />
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<form asp-action="Create">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="CustomerId" class="control-label"></label>
|
||||||
|
<select asp-for="CustomerId" class ="form-control" asp-items="ViewBag.CustomerId"></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="EventId" class="control-label"></label>
|
||||||
|
<select asp-for="EventId" class ="form-control" asp-items="ViewBag.EventId"></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input asp-for="Attended" /> @Html.DisplayNameFor(model => model.Attended)
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Create" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||||
|
}
|
40
ThAmCo.Events/Views/GuestBookings/Delete.cshtml
Normal file
40
ThAmCo.Events/Views/GuestBookings/Delete.cshtml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
@model ThAmCo.Events.Data.GuestBooking
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Delete";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Delete</h2>
|
||||||
|
|
||||||
|
<h3>Are you sure you want to delete this?</h3>
|
||||||
|
<div>
|
||||||
|
<h4>GuestBooking</h4>
|
||||||
|
<hr />
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Customer)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Customer.Email)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Event)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Event.Title)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Attended)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Attended)
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<form asp-action="Delete">
|
||||||
|
<input type="hidden" asp-for="CustomerId" />
|
||||||
|
<input type="hidden" asp-for="EventId" />
|
||||||
|
<input type="submit" value="Delete" class="btn btn-default" /> |
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</form>
|
||||||
|
</div>
|
36
ThAmCo.Events/Views/GuestBookings/Details.cshtml
Normal file
36
ThAmCo.Events/Views/GuestBookings/Details.cshtml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
@model ThAmCo.Events.Data.GuestBooking
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Details";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Details</h2>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h4>GuestBooking</h4>
|
||||||
|
<hr />
|
||||||
|
<dl class="dl-horizontal">
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Customer)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Customer.Email)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Event)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Event.Title)
|
||||||
|
</dd>
|
||||||
|
<dt>
|
||||||
|
@Html.DisplayNameFor(model => model.Attended)
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
@Html.DisplayFor(model => model.Attended)
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
@Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ }) |
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
37
ThAmCo.Events/Views/GuestBookings/Edit.cshtml
Normal file
37
ThAmCo.Events/Views/GuestBookings/Edit.cshtml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
@model ThAmCo.Events.Data.GuestBooking
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Edit";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Edit</h2>
|
||||||
|
|
||||||
|
<h4>GuestBooking</h4>
|
||||||
|
<hr />
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<form asp-action="Edit">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<input type="hidden" asp-for="CustomerId" />
|
||||||
|
<input type="hidden" asp-for="EventId" />
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input asp-for="Attended" /> @Html.DisplayNameFor(model => model.Attended)
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Save" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||||
|
}
|
47
ThAmCo.Events/Views/GuestBookings/Index.cshtml
Normal file
47
ThAmCo.Events/Views/GuestBookings/Index.cshtml
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
@model IEnumerable<ThAmCo.Events.Data.GuestBooking>
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Index";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Index</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a asp-action="Create">Create New</a>
|
||||||
|
</p>
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Customer)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Event)
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
@Html.DisplayNameFor(model => model.Attended)
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var item in Model) {
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Customer.Email)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Event.Title)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayFor(modelItem => item.Attended)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
|
||||||
|
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
|
||||||
|
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
7
ThAmCo.Events/Views/Home/About.cshtml
Normal file
7
ThAmCo.Events/Views/Home/About.cshtml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
@{
|
||||||
|
ViewData["Title"] = "About";
|
||||||
|
}
|
||||||
|
<h2>@ViewData["Title"]</h2>
|
||||||
|
<h3>@ViewData["Message"]</h3>
|
||||||
|
|
||||||
|
<p>Use this area to provide additional information.</p>
|
17
ThAmCo.Events/Views/Home/Contact.cshtml
Normal file
17
ThAmCo.Events/Views/Home/Contact.cshtml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
@{
|
||||||
|
ViewData["Title"] = "Contact";
|
||||||
|
}
|
||||||
|
<h2>@ViewData["Title"]</h2>
|
||||||
|
<h3>@ViewData["Message"]</h3>
|
||||||
|
|
||||||
|
<address>
|
||||||
|
One Microsoft Way<br />
|
||||||
|
Redmond, WA 98052-6399<br />
|
||||||
|
<abbr title="Phone">P:</abbr>
|
||||||
|
425.555.0100
|
||||||
|
</address>
|
||||||
|
|
||||||
|
<address>
|
||||||
|
<strong>Support:</strong> <a href="mailto:Support@example.com">Support@example.com</a><br />
|
||||||
|
<strong>Marketing:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a>
|
||||||
|
</address>
|
5
ThAmCo.Events/Views/Home/Index.cshtml
Normal file
5
ThAmCo.Events/Views/Home/Index.cshtml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
@{
|
||||||
|
ViewData["Title"] = "Home Page";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h1>ThAmCo Web Apps Home Page.</h1>
|
6
ThAmCo.Events/Views/Home/Privacy.cshtml
Normal file
6
ThAmCo.Events/Views/Home/Privacy.cshtml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
@{
|
||||||
|
ViewData["Title"] = "Privacy Policy";
|
||||||
|
}
|
||||||
|
<h2>@ViewData["Title"]</h2>
|
||||||
|
|
||||||
|
<p>Use this page to detail your site's privacy policy.</p>
|
22
ThAmCo.Events/Views/Shared/Error.cshtml
Normal file
22
ThAmCo.Events/Views/Shared/Error.cshtml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
@model ErrorViewModel
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Error";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h1 class="text-danger">Error.</h1>
|
||||||
|
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||||
|
|
||||||
|
@if (Model.ShowRequestId)
|
||||||
|
{
|
||||||
|
<p>
|
||||||
|
<strong>Request ID:</strong> <code>@Model.RequestId</code>
|
||||||
|
</p>
|
||||||
|
}
|
||||||
|
|
||||||
|
<h3>Development Mode</h3>
|
||||||
|
<p>
|
||||||
|
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application.
|
||||||
|
</p>
|
41
ThAmCo.Events/Views/Shared/_CookieConsentPartial.cshtml
Normal file
41
ThAmCo.Events/Views/Shared/_CookieConsentPartial.cshtml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
@using Microsoft.AspNetCore.Http.Features
|
||||||
|
|
||||||
|
@{
|
||||||
|
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
|
||||||
|
var showBanner = !consentFeature?.CanTrack ?? false;
|
||||||
|
var cookieString = consentFeature?.CreateConsentCookie();
|
||||||
|
}
|
||||||
|
|
||||||
|
@if (showBanner)
|
||||||
|
{
|
||||||
|
<nav id="cookieConsent" class="navbar navbar-default navbar-fixed-top" role="alert">
|
||||||
|
<div class="container">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#cookieConsent .navbar-collapse">
|
||||||
|
<span class="sr-only">Toggle cookie consent banner</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<span class="navbar-brand"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>
|
||||||
|
</div>
|
||||||
|
<div class="collapse navbar-collapse">
|
||||||
|
<p class="navbar-text">
|
||||||
|
Use this space to summarize your privacy and cookie use policy.
|
||||||
|
</p>
|
||||||
|
<div class="navbar-right">
|
||||||
|
<a asp-controller="Home" asp-action="Privacy" class="btn btn-info navbar-btn">Learn More</a>
|
||||||
|
<button type="button" class="btn btn-default navbar-btn" data-cookie-string="@cookieString">Accept</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<script>
|
||||||
|
(function () {
|
||||||
|
document.querySelector("#cookieConsent button[data-cookie-string]").addEventListener("click", function (el) {
|
||||||
|
document.cookie = el.target.dataset.cookieString;
|
||||||
|
document.querySelector("#cookieConsent").classList.add("hidden");
|
||||||
|
}, false);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
}
|
75
ThAmCo.Events/Views/Shared/_Layout.cshtml
Normal file
75
ThAmCo.Events/Views/Shared/_Layout.cshtml
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>@ViewData["Title"] - ThAmCo.Events</title>
|
||||||
|
|
||||||
|
<environment include="Development">
|
||||||
|
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
|
||||||
|
<link rel="stylesheet" href="~/css/site.css" />
|
||||||
|
</environment>
|
||||||
|
<environment exclude="Development">
|
||||||
|
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
|
||||||
|
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
|
||||||
|
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
|
||||||
|
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
|
||||||
|
</environment>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="navbar navbar-inverse navbar-fixed-top">
|
||||||
|
<div class="container">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||||
|
<span class="sr-only">Toggle navigation</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">ThAmCo Web Application</a>
|
||||||
|
</div>
|
||||||
|
<div class="navbar-collapse collapse">
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
<li><a asp-area="" asp-controller="Customers" asp-action="Index">Customers</a></li>
|
||||||
|
<li><a asp-area="" asp-controller="Events" asp-action="Index">Events</a></li>
|
||||||
|
<li><a asp-area="" asp-controller="Staff" asp-action="Index">Staff</a></li>
|
||||||
|
<li><a asp-are"" asp-controller="Food" asp-action="Index">Food</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<partial name="_CookieConsentPartial" />
|
||||||
|
|
||||||
|
<div class="container body-content">
|
||||||
|
@RenderBody()
|
||||||
|
<hr />
|
||||||
|
<footer>
|
||||||
|
<p>© 2018 - ThAmCo.Events</p>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<environment include="Development">
|
||||||
|
<script src="~/lib/jquery/dist/jquery.js"></script>
|
||||||
|
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
|
||||||
|
<script src="~/js/site.js" asp-append-version="true"></script>
|
||||||
|
</environment>
|
||||||
|
<environment exclude="Development">
|
||||||
|
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.3.1.min.js"
|
||||||
|
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
|
||||||
|
asp-fallback-test="window.jQuery"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
integrity="sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cqB8txI/8aZajjp4Bqd+V6D5IgvKT">
|
||||||
|
</script>
|
||||||
|
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
|
||||||
|
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
|
||||||
|
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
|
||||||
|
</script>
|
||||||
|
<script src="~/js/site.min.js" asp-append-version="true"></script>
|
||||||
|
</environment>
|
||||||
|
|
||||||
|
@RenderSection("Scripts", required: false)
|
||||||
|
</body>
|
||||||
|
</html>
|
18
ThAmCo.Events/Views/Shared/_ValidationScriptsPartial.cshtml
Normal file
18
ThAmCo.Events/Views/Shared/_ValidationScriptsPartial.cshtml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<environment include="Development">
|
||||||
|
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
|
||||||
|
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
|
||||||
|
</environment>
|
||||||
|
<environment exclude="Development">
|
||||||
|
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.17.0/jquery.validate.min.js"
|
||||||
|
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
|
||||||
|
asp-fallback-test="window.jQuery && window.jQuery.validator"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
integrity="sha384-rZfj/ogBloos6wzLGpPkkOr/gpkBNLZ6b6yLy4o+ok+t/SAKlL5mvXLr0OXNi1Hp">
|
||||||
|
</script>
|
||||||
|
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.9/jquery.validate.unobtrusive.min.js"
|
||||||
|
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
|
||||||
|
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
integrity="sha384-ifv0TYDWxBHzvAk2Z0n8R434FL1Rlv/Av18DXE43N/1rvHyOG4izKst0f2iSLdds">
|
||||||
|
</script>
|
||||||
|
</environment>
|
50
ThAmCo.Events/Views/Staff/Create.cshtml
Normal file
50
ThAmCo.Events/Views/Staff/Create.cshtml
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
@model ThAmCo.Events.Data.Staff
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "Create";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Create</h2>
|
||||||
|
|
||||||
|
<h4>Staff</h4>
|
||||||
|
<hr />
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<form asp-action="Create">
|
||||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Surname" class="control-label"></label>
|
||||||
|
<input asp-for="Surname" class="form-control" />
|
||||||
|
<span asp-validation-for="Surname" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="FirstName" class="control-label"></label>
|
||||||
|
<input asp-for="FirstName" class="form-control" />
|
||||||
|
<span asp-validation-for="FirstName" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Email" class="control-label"></label>
|
||||||
|
<input asp-for="Email" class="form-control" />
|
||||||
|
<span asp-validation-for="Email" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input asp-for="FirstAid" /> @Html.DisplayNameFor(model => model.FirstAid)
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" value="Create" class="btn btn-default" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a asp-action="Index">Back to List</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user