diff --git a/.gitignore b/.gitignore
index ee9c7c4..8d4d72c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,10 +3,14 @@
bin/
obj/
packages/
+*.user
PublishProfiles/
# macOS vomit
.DS_Store
# IntelliJ/Rider files
-.idea/
\ No newline at end of file
+.idea/
+
+# Other
+Uploads/
\ No newline at end of file
diff --git a/assets/DataModel_KD.png b/assets/DataModel_KD.png
index 034a973..282cda0 100755
Binary files a/assets/DataModel_KD.png and b/assets/DataModel_KD.png differ
diff --git a/assets/Software Architectuur Diagram Verbeterd.png b/assets/Software Architectuur Diagram Verbeterd.png
new file mode 100644
index 0000000..05aad16
Binary files /dev/null and b/assets/Software Architectuur Diagram Verbeterd.png differ
diff --git a/assets/Software Architectuur Diagram.png b/assets/Software Architectuur Diagram.png
deleted file mode 100644
index ecaa7ce..0000000
Binary files a/assets/Software Architectuur Diagram.png and /dev/null differ
diff --git a/src/DomainServices/DomainServices.csproj b/src/DomainServices/DomainServices.csproj
index 50a19f0..6596b7d 100644
--- a/src/DomainServices/DomainServices.csproj
+++ b/src/DomainServices/DomainServices.csproj
@@ -20,6 +20,7 @@
+
diff --git a/src/DomainServices/Enums/FestispecPaths.cs b/src/DomainServices/Enums/FestispecPaths.cs
index 1aae1c1..6bb6c6d 100644
--- a/src/DomainServices/Enums/FestispecPaths.cs
+++ b/src/DomainServices/Enums/FestispecPaths.cs
@@ -1,8 +1,10 @@
using System;
+using System.Diagnostics.CodeAnalysis;
using System.IO;
namespace Festispec.DomainServices.Enums
{
+ [ExcludeFromCodeCoverage]
public static class FestispecPaths
{
// base %AppData% path.
diff --git a/src/DomainServices/Factories/AnswerFactory.cs b/src/DomainServices/Factories/AnswerFactory.cs
new file mode 100644
index 0000000..65d26e8
--- /dev/null
+++ b/src/DomainServices/Factories/AnswerFactory.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using Festispec.Models.Answers;
+using Festispec.Models.Questions;
+
+namespace Festispec.DomainServices.Factories
+{
+ [ExcludeFromCodeCoverage]
+ public class AnswerFactory
+ {
+ public Answer GetAnswer(Question question)
+ {
+ return question switch
+ {
+ NumericQuestion _ => new NumericAnswer(),
+ RatingQuestion _ => new NumericAnswer(),
+ MultipleChoiceQuestion _ => new MultipleChoiceAnswer(),
+ StringQuestion _ => new StringAnswer(),
+ DrawQuestion _ => new FileAnswer(),
+ UploadPictureQuestion _ => new FileAnswer(),
+ _ => throw new Exception()
+ };
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/DomainServices/Factories/GraphSelectorFactory.cs b/src/DomainServices/Factories/GraphSelectorFactory.cs
index a10572b..63d06ac 100644
--- a/src/DomainServices/Factories/GraphSelectorFactory.cs
+++ b/src/DomainServices/Factories/GraphSelectorFactory.cs
@@ -1,10 +1,12 @@
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using Festispec.Models;
using Festispec.Models.GraphConverters;
using Festispec.Models.Interfaces;
namespace Festispec.DomainServices.Factories
{
+ [ExcludeFromCodeCoverage]
public class GraphSelectorFactory
{
private readonly Dictionary _converters;
diff --git a/src/DomainServices/Factories/QuestionFactory.cs b/src/DomainServices/Factories/QuestionFactory.cs
index d52cb73..153c740 100644
--- a/src/DomainServices/Factories/QuestionFactory.cs
+++ b/src/DomainServices/Factories/QuestionFactory.cs
@@ -1,8 +1,10 @@
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using Festispec.Models.Questions;
namespace Festispec.DomainServices.Factories
{
+ [ExcludeFromCodeCoverage]
public class QuestionFactory
{
public QuestionFactory()
diff --git a/src/DomainServices/Interfaces/IAvailabilityService.cs b/src/DomainServices/Interfaces/IAvailabilityService.cs
index 47a0f46..826148d 100644
--- a/src/DomainServices/Interfaces/IAvailabilityService.cs
+++ b/src/DomainServices/Interfaces/IAvailabilityService.cs
@@ -8,14 +8,9 @@ namespace Festispec.DomainServices.Interfaces
{
public interface IAvailabilityService
{
- Task AddUnavailabilityEntireDay(int employeeId, DateTime date, string reason);
-
- Task RemoveUnavailablity(int availabilityId);
-
- Task SaveChanges();
-
+ Task AddUnavailabilityEntireDay(int employeeId, DateTime date, string reason);
+ Task RemoveUnavailability(int availabilityId);
Availability GetUnavailabilityForDay(int employeeId, DateTime date);
-
- Task> GetUnavailabilitiesForFuture(int employeeId, DateTime startDate);
+ Task> GetUnavailabilityForFuture(int employeeId, DateTime startDate);
}
}
diff --git a/src/DomainServices/Interfaces/ICustomerService.cs b/src/DomainServices/Interfaces/ICustomerService.cs
index 8c4ca48..120200a 100755
--- a/src/DomainServices/Interfaces/ICustomerService.cs
+++ b/src/DomainServices/Interfaces/ICustomerService.cs
@@ -7,18 +7,12 @@ namespace Festispec.DomainServices.Interfaces
public interface ICustomerService : ISyncable
{
List GetAllCustomers();
-
Customer GetCustomer(int customerId);
Task GetCustomerAsync(int customerId);
-
Task RemoveCustomerAsync(int customerId);
-
Task CreateCustomerAsync(string name, int kvkNr, Address address, ContactDetails contactDetails);
Task CreateCustomerAsync(Customer customer);
-
Task UpdateCustomerAsync(Customer customer);
-
- Task SaveChangesAsync();
public bool CanDeleteCustomer(Customer customer);
}
}
\ No newline at end of file
diff --git a/src/DomainServices/Interfaces/IEmployeeService.cs b/src/DomainServices/Interfaces/IEmployeeService.cs
index 965af18..52505da 100644
--- a/src/DomainServices/Interfaces/IEmployeeService.cs
+++ b/src/DomainServices/Interfaces/IEmployeeService.cs
@@ -7,22 +7,13 @@ namespace Festispec.DomainServices.Interfaces
public interface IEmployeeService : ISyncable
{
List GetAllEmployees();
-
List GetAllEmployeesActiveAndNonActive();
-
Employee GetEmployee(int employeeId);
Task GetEmployeeAsync(int employeeId);
-
Task RemoveEmployeeAsync(int employeeId);
-
Task CreateEmployeeAsync(FullName name, string iban, string username, string password,
Role role, Address address, ContactDetails contactDetails);
-
- Task CreateEmployeeAsync(Employee employee);
-
Task UpdateEmployee(Employee employee);
-
-
Task SaveChangesAsync();
bool CanRemoveEmployee(Employee employee);
Account GetAccountForEmployee(int employeeId);
diff --git a/src/DomainServices/Interfaces/IExampleService.cs b/src/DomainServices/Interfaces/IExampleService.cs
deleted file mode 100644
index 76b4262..0000000
--- a/src/DomainServices/Interfaces/IExampleService.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Festispec.DomainServices.Interfaces
-{
- public interface IExampleService
- {
- bool ReturnTrue();
- bool ReturnFalse();
- string ReturnString();
- }
-}
\ No newline at end of file
diff --git a/src/DomainServices/Interfaces/IFestivalService.cs b/src/DomainServices/Interfaces/IFestivalService.cs
index 57153cf..b347308 100644
--- a/src/DomainServices/Interfaces/IFestivalService.cs
+++ b/src/DomainServices/Interfaces/IFestivalService.cs
@@ -7,7 +7,6 @@ namespace Festispec.DomainServices.Interfaces
public interface IFestivalService : ISyncable
{
Task CreateFestival(Festival festival, int customerId);
- Task GetFestivalAsync(int festivalId);
Festival GetFestival(int festivalId);
ICollection GetFestivals();
Task UpdateFestival(Festival festival);
diff --git a/src/DomainServices/Interfaces/IInspectionService.cs b/src/DomainServices/Interfaces/IInspectionService.cs
index 1a5fad5..65726bf 100644
--- a/src/DomainServices/Interfaces/IInspectionService.cs
+++ b/src/DomainServices/Interfaces/IInspectionService.cs
@@ -26,8 +26,10 @@ int employeeId
);
Task RemoveInspection(int plannedInspectionId, string cancellationReason);
- Task SaveChanges();
Task GetFestivalAsync(int festivalId);
- Task ProcessPlannedInspections(IEnumerable plannedInspections);
+ Task ProcessPlannedInspections(IEnumerable plannedInspections,
+ Questionnaire questionnaire, string instructions);
}
+
+
}
\ No newline at end of file
diff --git a/src/DomainServices/Interfaces/IQuestionService.cs b/src/DomainServices/Interfaces/IQuestionService.cs
deleted file mode 100644
index 54f2696..0000000
--- a/src/DomainServices/Interfaces/IQuestionService.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System.Threading.Tasks;
-using Festispec.Models;
-
-namespace Festispec.DomainServices.Interfaces
-{
- public interface IQuestionService
- {
- Task GetQuestionaire(int id);
- }
-}
\ No newline at end of file
diff --git a/src/DomainServices/Interfaces/IQuestionnaireService.cs b/src/DomainServices/Interfaces/IQuestionnaireService.cs
index 0ebbc93..5becf29 100644
--- a/src/DomainServices/Interfaces/IQuestionnaireService.cs
+++ b/src/DomainServices/Interfaces/IQuestionnaireService.cs
@@ -17,12 +17,8 @@ public interface IQuestionnaireService : ISaveable, ISyncable
Task CopyQuestionnaire(int questionnaireId, string questionnaireName);
Task GetQuestion(int questionId);
Task CreateAnswer(Answer answer);
- void Save();
-
List GetQuestionsFromQuestionnaire(int questionnaireId);
- List GetAnswers();
-
-
+ Task GetAnswer(int id) where TAnswer : Answer;
Task> GetPlannedInspections(int employeeId);
Task GetPlannedInspection(int plannedInspectionId);
}
diff --git a/src/DomainServices/Interfaces/ISicknessService.cs b/src/DomainServices/Interfaces/ISicknessService.cs
index 03f5142..fc801df 100644
--- a/src/DomainServices/Interfaces/ISicknessService.cs
+++ b/src/DomainServices/Interfaces/ISicknessService.cs
@@ -8,8 +8,8 @@ namespace Festispec.DomainServices.Interfaces
{
public interface ISicknessService
{
- Task AddAbsense(int employeeId, string reason, DateTime? endDate);
- Task EndAbsense(int employeeId);
+ Task AddAbsence(int employeeId, string reason, DateTime? endDate);
+ Task EndAbsence(int employeeId);
bool IsSick(int employeeId);
}
diff --git a/src/DomainServices/Interfaces/ISyncService.cs b/src/DomainServices/Interfaces/ISyncService.cs
index d75cd54..f401797 100644
--- a/src/DomainServices/Interfaces/ISyncService.cs
+++ b/src/DomainServices/Interfaces/ISyncService.cs
@@ -16,8 +16,7 @@ public interface ISyncService where T : Entity
void AddEntities(IEnumerable entities);
void SaveChanges();
- void SaveChangesAsync();
-
+
FestispecContext GetSyncContext();
void Flush();
}
diff --git a/src/DomainServices/Services/AddressService.cs b/src/DomainServices/Services/AddressService.cs
index de643cc..9062b57 100644
--- a/src/DomainServices/Services/AddressService.cs
+++ b/src/DomainServices/Services/AddressService.cs
@@ -21,8 +21,7 @@ public async Task SaveAddress(Address address)
if (!address.Validate())
throw new InvalidAddressException();
- Address existing = await _db.Addresses.FirstOrDefaultAsync(a =>
- a.Latitude != 0 && a.Latitude == address.Latitude && a.Longitude != 0 && a.Longitude == a.Longitude);
+ Address existing = await _db.Addresses.FirstOrDefaultAsync(a => a.Latitude == address.Latitude && a.Longitude == address.Longitude);
if (existing != null)
return existing;
@@ -36,9 +35,9 @@ public async Task SaveAddress(Address address)
public async Task RemoveAddress(Address address)
{
var existing = 0;
- existing += await _db.Festivals.Include(f => f.Address).CountAsync(a => a.Address.Id == address.Id);
- existing += await _db.Employees.Include(e => e.Address).CountAsync(e => e.Address.Id == address.Id);
- existing += await _db.Customers.Include(c => c.Address).CountAsync(c => c.Address.Id == address.Id);
+ existing += await _db.Festivals.Include(f => f.Address).CountAsync(a => a.Address.Id == address.Id && a.Address.Latitude == address.Latitude && a.Address.Longitude == address.Longitude);
+ existing += await _db.Employees.Include(e => e.Address).CountAsync(e => e.Address.Id == address.Id && e.Address.Latitude == address.Latitude && e.Address.Longitude == address.Longitude);
+ existing += await _db.Customers.Include(c => c.Address).CountAsync(c => c.Address.Id == address.Id && c.Address.Latitude == address.Latitude && c.Address.Longitude == address.Longitude);
if (existing == 0)
_db.Addresses.Remove(address);
@@ -46,4 +45,4 @@ public async Task RemoveAddress(Address address)
await _db.SaveChangesAsync();
}
}
-}
\ No newline at end of file
+}
diff --git a/src/DomainServices/Services/AuthenticationService.cs b/src/DomainServices/Services/AuthenticationService.cs
index 6ee0050..b81be18 100644
--- a/src/DomainServices/Services/AuthenticationService.cs
+++ b/src/DomainServices/Services/AuthenticationService.cs
@@ -5,6 +5,7 @@
using System.Threading.Tasks;
using Festispec.Models.EntityMapping;
using System.Data.Entity;
+using System.Diagnostics.CodeAnalysis;
namespace Festispec.DomainServices.Services
{
@@ -13,7 +14,8 @@ public class AuthenticationService : IAuthenticationService
private readonly FestispecContext _db;
private readonly ISyncService _syncService;
- public Account LoggedIn { get; private set; }
+ [ExcludeFromCodeCoverage]
+ private Account LoggedIn { get; set; }
public AuthenticationService(FestispecContext db, ISyncService syncService)
{
@@ -23,7 +25,7 @@ public AuthenticationService(FestispecContext db, ISyncService syncServ
public Account AssembleAccount(string username, string password, Role requiredRole)
{
- Account existing = _db.Accounts.FirstOrDefault(x => x.Username == username);
+ var existing = _db.Accounts.FirstOrDefault(x => x.Username == username);
if (existing != null)
throw new EntityExistsException();
@@ -43,7 +45,7 @@ public Account AssembleAccount(string username, string password, Role requiredRo
public Account Login(string username, string password, Role requiredRole)
{
- Account account = _db.Accounts.FirstOrDefault(x => x.Username == username);
+ var account = _db.Accounts.FirstOrDefault(x => x.Username == username);
if (account == null || !BCrypt.Net.BCrypt.Verify(password, account.Password))
throw new AuthenticationException("Username or password are incorrect");
@@ -59,7 +61,7 @@ public Account Login(string username, string password, Role requiredRole)
public async Task ChangePassword(string username, string password, string newPassword)
{
- Account account = _db.Accounts.FirstOrDefault(x => x.Username == username);
+ var account = _db.Accounts.FirstOrDefault(x => x.Username == username);
if (account == null || !BCrypt.Net.BCrypt.Verify(password, account.Password))
throw new AuthenticationException("Username or password are incorrect");
@@ -69,14 +71,15 @@ public async Task ChangePassword(string username, string password, string newPas
await _db.SaveChangesAsync();
}
+ [ExcludeFromCodeCoverage]
public void Sync()
{
if (LoggedIn == null)
return;
- FestispecContext ctx = _syncService.GetSyncContext();
+ var ctx = _syncService.GetSyncContext();
- Account account = ctx.Accounts.Include(a => a.Employee).First(a => a.Id == LoggedIn.Id);
+ var account = ctx.Accounts.Include(a => a.Employee).First(a => a.Id == LoggedIn.Id);
_syncService.Flush();
_syncService.AddEntity(account);
diff --git a/src/DomainServices/Services/AvailabilityService.cs b/src/DomainServices/Services/AvailabilityService.cs
index 52ac867..f485ea2 100644
--- a/src/DomainServices/Services/AvailabilityService.cs
+++ b/src/DomainServices/Services/AvailabilityService.cs
@@ -1,14 +1,12 @@
-using Festispec.DomainServices.Interfaces;
-using Festispec.Models;
-using Festispec.Models.EntityMapping;
-using Festispec.Models.Exception;
-using System;
+using System;
using System.Collections.Generic;
using System.Data.Entity;
-using System.Data.Entity.Core.Objects;
using System.Linq;
-using System.Text;
using System.Threading.Tasks;
+using Festispec.DomainServices.Interfaces;
+using Festispec.Models;
+using Festispec.Models.EntityMapping;
+using Festispec.Models.Exception;
namespace Festispec.DomainServices.Services
{
@@ -28,7 +26,7 @@ public async Task AddUnavailabilityEntireDay(int employeeId, DateT
var employee = _db.Employees.FirstOrDefault(e => e.Id == employeeId);
- var availability = new Availability()
+ var availability = new Availability
{
IsAvailable = false,
Employee = employee,
@@ -42,19 +40,20 @@ public async Task AddUnavailabilityEntireDay(int employeeId, DateT
throw new InvalidDataException();
_db.PlannedEvents.Add(availability);
-
- if (await _db.SaveChangesAsync() == 0)
- throw new NoRowsChangedException();
+ await _db.SaveChangesAsync();
return availability;
}
public Availability GetUnavailabilityForDay(int employeeId, DateTime date)
{
- return _db.Availabilities.FirstOrDefault(a => a.Employee.Id == employeeId && EntityFunctions.TruncateTime(a.StartTime) == EntityFunctions.TruncateTime(date) && a.EventTitle == "Niet beschikbaar");
+ return _db.Availabilities.FirstOrDefault(
+ a => a.Employee.Id == employeeId
+ && _db.TruncateTime(a.StartTime) == _db.TruncateTime(date)
+ && a.EventTitle == "Niet beschikbaar");
}
- public async Task RemoveUnavailablity(int availabilityId)
+ public async Task RemoveUnavailability(int availabilityId)
{
var availability = _db.Availabilities.FirstOrDefault(a => a.Id == availabilityId);
@@ -66,33 +65,32 @@ public async Task RemoveUnavailablity(int availabilityId)
await _db.SaveChangesAsync();
}
- public async Task SaveChanges()
- {
- await _db.SaveChangesAsync();
- }
-
- public async Task> GetUnavailabilitiesForFuture(int employeeId, DateTime startDate)
+ public async Task> GetUnavailabilityForFuture(int employeeId, DateTime startDate)
{
var list = await _db.Availabilities
.OrderByDescending(c => c.EndTime)
- .Where(c => c.StartTime > startDate && c.Employee.Id == employeeId && c.EventTitle == "Niet beschikbaar")
+ .Where(c => c.StartTime > startDate)
+ .Where(c => c.Employee.Id == employeeId)
+ .Where(c => c.EventTitle == "Niet beschikbaar") // This is really bad practice!
.ToListAsync();
var dictionary = new Dictionary();
- foreach (Availability availability in list)
+ foreach (Availability availability in list.Where(availability => availability.EndTime != null))
{
- foreach (DateTime day in EachDay(availability.StartTime, (DateTime)availability.EndTime))
- {
- long epoch = (long)(day - new DateTime(1970, 1, 1)).TotalSeconds;
- dictionary.Add(epoch, availability);
- }
+ CalculateTimeFromEpoch(availability).ToList().ForEach(l => dictionary.Add(l, availability));
}
return dictionary;
}
- public IEnumerable EachDay(DateTime from, DateTime thru)
+ private static IEnumerable EachDay(DateTime from, DateTime thru)
{
for (var day = from.Date; day.Date <= thru.Date; day = day.AddDays(1))
yield return day;
}
+
+ public static IEnumerable CalculateTimeFromEpoch(Availability availability)
+ {
+ return EachDay(availability.StartTime, (DateTime) availability.EndTime)
+ .Select(day => (long) (day - new DateTime(1970, 1, 1)).TotalSeconds);
+ }
}
}
diff --git a/src/DomainServices/Services/CustomerService.cs b/src/DomainServices/Services/CustomerService.cs
index 6a43c66..02262a8 100755
--- a/src/DomainServices/Services/CustomerService.cs
+++ b/src/DomainServices/Services/CustomerService.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Data.Entity;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
@@ -22,10 +23,7 @@ public CustomerService(FestispecContext db, ISyncService syncService,
_addressService = addressService;
}
- public List GetAllCustomers()
- {
- return _db.Customers.Include(c => c.Address).ToList();
- }
+ public List GetAllCustomers() => _db.Customers.Include(c => c.Address).ToList();
public async Task CreateCustomerAsync(string name, int kvkNr, Address address,
ContactDetails contactDetails)
@@ -57,8 +55,7 @@ public async Task CreateCustomerAsync(Customer customer)
public async Task GetCustomerAsync(int customerId)
{
- Customer customer = await _db.Customers
- .Include(c => c.ContactPersons)
+ var customer = await _db.Customers
.Include(c => c.Festivals)
.Include(c => c.Address)
.FirstOrDefaultAsync(c => c.Id == customerId);
@@ -71,8 +68,7 @@ public async Task GetCustomerAsync(int customerId)
public Customer GetCustomer(int customerId)
{
- Customer customer = _db.Customers
- .Include(c => c.ContactPersons)
+ var customer = _db.Customers
.Include(c => c.Festivals)
.Include(c => c.Address)
.FirstOrDefault(c => c.Id == customerId);
@@ -85,12 +81,11 @@ public Customer GetCustomer(int customerId)
public async Task RemoveCustomerAsync(int customerId)
{
- Customer customer = await GetCustomerAsync(customerId);
+ var customer = await GetCustomerAsync(customerId);
if (customer.Festivals?.Count > 0)
throw new CustomerHasFestivalsException();
- _db.ContactPersons.RemoveRange(customer.ContactPersons);
await _addressService.RemoveAddress(customer.Address);
_db.Customers.Remove(customer);
@@ -107,24 +102,17 @@ public async Task UpdateCustomerAsync(Customer customer)
await SaveChangesAsync();
}
- public async Task SaveChangesAsync()
- {
- return await _db.SaveChangesAsync();
- }
+ private async Task SaveChangesAsync() => await _db.SaveChangesAsync();
- public bool CanDeleteCustomer(Customer customer)
- {
- return customer.Festivals.Count == 0
- && customer.ContactPersons.Count == 0;
- }
+ public bool CanDeleteCustomer(Customer customer) => customer.Festivals.Count == 0;
+ [ExcludeFromCodeCoverage]
public void Sync()
{
- FestispecContext db = _syncService.GetSyncContext();
+ var db = _syncService.GetSyncContext();
- List customers = db.Customers
+ var customers = db.Customers
.Include(c => c.Address)
- .Include(c => c.ContactPersons)
.Include(c => c.Festivals).ToList();
_syncService.Flush();
diff --git a/src/DomainServices/Services/DbPollOfflineService.cs b/src/DomainServices/Services/DbPollOfflineService.cs
index efe338e..707e39b 100644
--- a/src/DomainServices/Services/DbPollOfflineService.cs
+++ b/src/DomainServices/Services/DbPollOfflineService.cs
@@ -1,9 +1,11 @@
using System.Data.SqlClient;
+using System.Diagnostics.CodeAnalysis;
using Festispec.DomainServices.Interfaces;
using Festispec.Models.EntityMapping;
namespace Festispec.DomainServices.Services
{
+ [ExcludeFromCodeCoverage]
public class DbPollOfflineService : IOfflineService
{
public bool IsOnline { get; }
diff --git a/src/DomainServices/Services/EmployeeService.cs b/src/DomainServices/Services/EmployeeService.cs
index bf15712..fd999ff 100644
--- a/src/DomainServices/Services/EmployeeService.cs
+++ b/src/DomainServices/Services/EmployeeService.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Data.Entity;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
@@ -40,7 +41,7 @@ public List GetAllEmployeesActiveAndNonActive()
public async Task CreateEmployeeAsync(FullName name, string iban, string username, string password,
Role role, Address address, ContactDetails contactDetails)
{
- Account account = _authenticationService.AssembleAccount(username, password, role);
+ var account = _authenticationService.AssembleAccount(username, password, role);
var employee = new Employee
{
@@ -54,7 +55,7 @@ public async Task CreateEmployeeAsync(FullName name, string iban, stri
return await CreateEmployeeAsync(employee);
}
- public async Task CreateEmployeeAsync(Employee employee)
+ private async Task CreateEmployeeAsync(Employee employee)
{
if (!employee.Validate())
throw new InvalidDataException();
@@ -70,7 +71,7 @@ public async Task CreateEmployeeAsync(Employee employee)
public async Task GetEmployeeAsync(int employeeId)
{
- Employee employee = await _db.Employees
+ var employee = await _db.Employees
.Include(e => e.Address)
.FirstOrDefaultAsync(e => e.Id == employeeId);
@@ -82,7 +83,7 @@ public async Task GetEmployeeAsync(int employeeId)
public Employee GetEmployee(int employeeId)
{
- Employee employee = _db.Employees
+ var employee = _db.Employees
.Include(e => e.Address)
.FirstOrDefault(e => e.Id == employeeId);
@@ -94,7 +95,7 @@ public Employee GetEmployee(int employeeId)
public Account GetAccountForEmployee(int employeeId)
{
- Account account = _db.Accounts.FirstOrDefault(a => a.Id == employeeId);
+ var account = _db.Accounts.FirstOrDefault(a => a.Id == employeeId);
if (account == null)
throw new EntityNotFoundException();
@@ -109,7 +110,7 @@ public bool CanRemoveEmployee(Employee employee)
public async Task RemoveEmployeeAsync(int employeeId)
{
- Employee employee = await GetEmployeeAsync(employeeId);
+ var employee = await GetEmployeeAsync(employeeId);
if (employee.PlannedEvents.ToList().Count > 0)
throw new EmployeeHasPlannedEventsException();
@@ -147,7 +148,7 @@ public async Task CreateCertificateAsync(Certificate certificate)
public Certificate GetCertificate(int certificateId)
{
- Certificate certificate = _db.Certificates.FirstOrDefault(a => a.Id == certificateId);
+ var certificate = _db.Certificates.FirstOrDefault(a => a.Id == certificateId);
if (certificate == null)
throw new EntityNotFoundException();
@@ -157,7 +158,7 @@ public Certificate GetCertificate(int certificateId)
public async Task RemoveCertificateAsync(int certificateId)
{
- Certificate certificate = GetCertificate(certificateId);
+ var certificate = GetCertificate(certificateId);
_db.Certificates.Remove(certificate);
@@ -171,11 +172,12 @@ public async Task SaveChangesAsync()
return await _db.SaveChangesAsync();
}
+ [ExcludeFromCodeCoverage]
public void Sync()
{
- FestispecContext db = _employeeSyncService.GetSyncContext();
+ var db = _employeeSyncService.GetSyncContext();
- List employees = db.Employees
+ var employees = db.Employees
.Include(e => e.Address)
.Include(e => e.Certificates)
.Include(e => e.Account).ToList();
diff --git a/src/DomainServices/Services/ExampleService.cs b/src/DomainServices/Services/ExampleService.cs
deleted file mode 100644
index d366f0c..0000000
--- a/src/DomainServices/Services/ExampleService.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using Festispec.DomainServices.Interfaces;
-
-namespace Festispec.DomainServices.Services
-{
- public class ExampleService : IExampleService
- {
- public bool ReturnTrue()
- {
- return true;
- }
-
- public bool ReturnFalse()
- {
- return false;
- }
-
- public string ReturnString()
- {
- return $"Test Command {new Random().Next(1, 1000)}";
- }
- }
-}
\ No newline at end of file
diff --git a/src/DomainServices/Services/FestivalService.cs b/src/DomainServices/Services/FestivalService.cs
index 0d57088..b5c78d7 100644
--- a/src/DomainServices/Services/FestivalService.cs
+++ b/src/DomainServices/Services/FestivalService.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Data.Entity;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
@@ -43,13 +44,14 @@ public async Task CreateFestival(Festival festival, int customerId)
return festival;
}
- public async Task GetFestivalAsync(int festivalId)
+ private async Task GetFestivalAsync(int festivalId)
{
- Festival festival = await _db.Festivals
+ var festival = await _db.Festivals
.Include(f => f.Questionnaires)
.Include(f => f.Questionnaires.Select(q => q.Questions.Select(qe => qe.Answers)))
.Include(f => f.PlannedInspections)
.Include(f => f.Address)
+ .Include(f => f.Customer)
.FirstOrDefaultAsync(f => f.Id == festivalId);
if (festival == null)
@@ -60,10 +62,11 @@ public async Task GetFestivalAsync(int festivalId)
public Festival GetFestival(int festivalId)
{
- Festival festival = _db.Festivals
+ var festival = _db.Festivals
.Include(f => f.Questionnaires)
.Include(f => f.PlannedInspections)
.Include(f => f.Address)
+ .Include(f => f.Customer)
.FirstOrDefault(f => f.Id == festivalId);
if (festival == null)
@@ -94,7 +97,7 @@ public async Task UpdateFestival(Festival festival)
public async Task RemoveFestival(int festivalId)
{
- Festival festival = await GetFestivalAsync(festivalId);
+ var festival = await GetFestivalAsync(festivalId);
if (festival.Questionnaires.Count > 0)
throw new FestivalHasQuestionnairesException();
@@ -105,11 +108,12 @@ public async Task RemoveFestival(int festivalId)
await _db.SaveChangesAsync();
}
+ [ExcludeFromCodeCoverage]
public void Sync()
{
- FestispecContext db = _syncService.GetSyncContext();
+ var db = _syncService.GetSyncContext();
- List festivals = db.Festivals
+ var festivals = db.Festivals
.Include(f => f.Address)
.Include(f => f.Questionnaires)
.Include(f => f.Questionnaires.Select(q => q.Questions))
@@ -120,4 +124,4 @@ public void Sync()
_syncService.SaveChanges();
}
}
-}
\ No newline at end of file
+}
diff --git a/src/DomainServices/Services/GoogleMapsService.cs b/src/DomainServices/Services/GoogleMapsService.cs
index db73b56..5998f88 100644
--- a/src/DomainServices/Services/GoogleMapsService.cs
+++ b/src/DomainServices/Services/GoogleMapsService.cs
@@ -8,6 +8,8 @@
using System;
using System.Collections.Generic;
using System.Data.Entity;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Text.RegularExpressions;
@@ -15,9 +17,10 @@
namespace Festispec.DomainServices.Services
{
+ [ExcludeFromCodeCoverage]
public class GoogleMapsService : IGoogleMapsService
{
- private readonly string API_KEY;
+ private readonly string _apiKey;
private readonly HttpClient _client;
private readonly FestispecContext _db;
private readonly string _sessionToken;
@@ -35,13 +38,13 @@ public GoogleMapsService(FestispecContext db, ISyncService syncS
.Select(s => s[new Random().Next(s.Length)]).ToArray());
_db = db;
_syncService = syncService;
- API_KEY = config["ApiKeys:Google"];
+ _apiKey = config["ApiKeys:Google"];
}
public async Task> GetSuggestions(string input)
{
- HttpResponseMessage request = await _client.GetAsync(
- $"place/autocomplete/json?input={Uri.EscapeDataString(input)}&components=country:nl|country:be|country:de&sessiontoken={_sessionToken}&language=nl&key={API_KEY}");
+ var request = await _client.GetAsync(
+ $"place/autocomplete/json?input={Uri.EscapeDataString(input)}&components=country:nl|country:be|country:de&sessiontoken={_sessionToken}&language=nl&key={_apiKey}");
var result = JsonConvert.DeserializeObject(await request.Content.ReadAsStringAsync());
if (result.Status.Equals(GoogleStatusCodes.ZeroResults))
@@ -55,8 +58,8 @@ public async Task> GetSuggestions(string input)
public async Task GetAddress(string placeId)
{
- HttpResponseMessage request = await _client.GetAsync(
- $"place/details/json?place_id={placeId}&fields=address_component,formatted_address,geometry&sessiontoken={_sessionToken}&language=nl&key={API_KEY}");
+ var request = await _client.GetAsync(
+ $"place/details/json?place_id={placeId}&fields=address_component,formatted_address,geometry&sessiontoken={_sessionToken}&language=nl&key={_apiKey}");
var result = JsonConvert.DeserializeObject(await request.Content.ReadAsStringAsync());
if (!result.Status.Equals(GoogleStatusCodes.Ok))
@@ -64,7 +67,7 @@ public async Task GetAddress(string placeId)
int.TryParse(
Regex.Replace(GetComponent(result.Place, "street_number")?.LongName ?? string.Empty, "[^.0-9]", ""),
- out int houseNumber);
+ out var houseNumber);
return new Address
{
@@ -82,14 +85,17 @@ public async Task GetAddress(string placeId)
public async Task CalculateDistance(Address origin, Address destination)
{
- DistanceResult existing = await _db.DistanceResults
+ var existing = await _db.DistanceResults
.FirstOrDefaultAsync(x => x.Origin.Id == origin.Id && x.Destination.Id == destination.Id);
if (existing != null)
return existing.Distance;
- HttpResponseMessage request = await _client.GetAsync(
- $"distancematrix/json?units=metric&origins={origin.Latitude.ToString().Replace(",", ".")},{origin.Longitude.ToString().Replace(",", ".")}&destinations={destination.Latitude.ToString().Replace(",", ".")},{destination.Longitude.ToString().Replace(",", ".")}&language=nl&key={API_KEY}");
+ var request = await _client.GetAsync(
+ "distancematrix/json?units=metric" +
+ $"&origins={origin.Latitude.ToString(CultureInfo.InvariantCulture).Replace(",", ".")},{origin.Longitude.ToString(CultureInfo.InvariantCulture).Replace(",", ".")}" +
+ $"&destinations={destination.Latitude.ToString(CultureInfo.InvariantCulture).Replace(",", ".")},{destination.Longitude.ToString(CultureInfo.InvariantCulture).Replace(",", ".")}" +
+ $"&language=nl&key={_apiKey}");
var result =
JsonConvert.DeserializeObject(await request.Content.ReadAsStringAsync());
@@ -116,9 +122,9 @@ private AddressComponent GetComponent(Place place, string name)
public void Sync()
{
- FestispecContext db = _syncService.GetSyncContext();
+ var db = _syncService.GetSyncContext();
- List distanceResults = db.DistanceResults
+ var distanceResults = db.DistanceResults
.Include(i => i.Destination)
.Include(i => i.Origin)
.ToList();
diff --git a/src/DomainServices/Services/InspectionService.cs b/src/DomainServices/Services/InspectionService.cs
index 169d5a6..242cced 100644
--- a/src/DomainServices/Services/InspectionService.cs
+++ b/src/DomainServices/Services/InspectionService.cs
@@ -1,7 +1,7 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Data.Entity;
-using System.Data.Entity.Core.Objects;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
@@ -33,7 +33,7 @@ public List GetAllInspectors()
public async Task GetFestivalAsync(int festivalId)
{
- Festival festival = await _db.Festivals
+ var festival = await _db.Festivals
.Include(f => f.Questionnaires)
.Include(f => f.PlannedInspections)
.Include(f => f.Address)
@@ -54,7 +54,7 @@ public async Task CreatePlannedInspection(
int employeeId
)
{
- PlannedInspection existing = _db.PlannedInspections
+ var existing = _db.PlannedInspections
.FirstOrDefault(x =>
x.Questionnaire.Id == questionnaireId && x.Festival.Id == festivalId &&
x.Employee.Id == employeeId && x.StartTime.Equals(startTime) && x.IsCancelled == null);
@@ -82,31 +82,41 @@ int employeeId
return null;
}
- public async Task ProcessPlannedInspections(IEnumerable plannedInspections)
+ [ExcludeFromCodeCoverage] // the _db.Entry makes this borderline untestable
+ public async Task ProcessPlannedInspections(IEnumerable plannedInspections,
+ Questionnaire questionnaire, string instructions)
{
- foreach (PlannedInspection plannedInspection in plannedInspections)
+ foreach (var plannedInspection in plannedInspections)
{
+ plannedInspection.Questionnaire = questionnaire;
+ plannedInspection.Instructions = instructions;
if (plannedInspection.Id != 0)
_db.Entry(plannedInspection).State = EntityState.Modified;
else
{
- await CreatePlannedInspection(plannedInspection.Festival.Id, plannedInspection.Questionnaire.Id,
- plannedInspection.StartTime, (DateTime)plannedInspection.EndTime, plannedInspection.EventTitle,
- plannedInspection.Employee.Id);
+ if (plannedInspection.EndTime != null)
+ await CreatePlannedInspection(
+ plannedInspection.Festival.Id,
+ plannedInspection.Questionnaire.Id,
+ plannedInspection.StartTime,
+ (DateTime) plannedInspection.EndTime,
+ plannedInspection.EventTitle,
+ plannedInspection.Employee.Id);
}
}
return await SaveChanges();
}
-
- public async Task SaveChanges()
+
+ [ExcludeFromCodeCoverage]
+ private async Task SaveChanges()
{
return await _db.SaveChangesAsync();
}
public async Task GetPlannedInspection(int plannedInspectionId)
{
- PlannedInspection plannedInspection = await _db.PlannedInspections
+ var plannedInspection = await _db.PlannedInspections
.Include(pi => pi.Festival)
.Include(pi => pi.Festival.Address)
.FirstOrDefaultAsync(e => e.Id == plannedInspectionId);
@@ -119,7 +129,7 @@ public async Task GetPlannedInspection(int plannedInspectionI
public List> GetPlannedInspectionsGrouped(Festival festival)
{
- List plannedInspections = _db.PlannedInspections
+ var plannedInspections = _db.PlannedInspections
.Include(e => e.Employee.Address)
.Where(e => e.Festival.Id == festival.Id && e.IsCancelled == null)
.ToList();
@@ -133,7 +143,7 @@ public List> GetPlannedInspectionsGrouped(Festival festi
public async Task GetPlannedInspection(Festival festival, Employee employee,
DateTime startTime)
{
- PlannedInspection plannedInspection = await _db.PlannedInspections
+ var plannedInspection = await _db.PlannedInspections
.FirstOrDefaultAsync(e => e.Festival.Id == festival.Id && e.Employee.Id == employee.Id && e.StartTime.Equals(startTime) && e.IsCancelled == null);
if (plannedInspection == null)
@@ -144,12 +154,10 @@ public async Task GetPlannedInspection(Festival festival, Emp
public async Task> GetPlannedInspections(int festivalId, DateTime startTime)
{
- List plannedInspections = await _db.PlannedInspections
+ var plannedInspections = await _db.PlannedInspections
.Where(e => e.Festival.Id == festivalId && e.StartTime.Equals(startTime) && e.IsCancelled == null)
.ToListAsync();
-
- if (plannedInspections == null)
- throw new EntityNotFoundException();
+
return plannedInspections;
}
@@ -157,9 +165,9 @@ public async Task> GetPlannedInspections(int festivalId,
public async Task> GetPlannedInspections(int employeeId)
{
- List plannedInspections = await _db.PlannedInspections
+ var plannedInspections = await _db.PlannedInspections
.Include(e => e.Employee)
- .Where(e => e.Employee.Id == employeeId && EntityFunctions.TruncateTime(e.StartTime) == EntityFunctions.TruncateTime(DateTime.Now))
+ .Where(e => e.Employee.Id == employeeId && _db.TruncateTime(e.StartTime) == _db.TruncateTime(DateTime.Now))
.ToListAsync();
if (plannedInspections.Count < 1)
@@ -170,7 +178,7 @@ public async Task> GetPlannedInspections(int employeeId)
public async Task RemoveInspection(int plannedInspectionId, string cancellationReason)
{
- PlannedInspection plannedInspection = await GetPlannedInspection(plannedInspectionId);
+ var plannedInspection = await GetPlannedInspection(plannedInspectionId);
//Check if submitted answers by employee
if (plannedInspection.Answers.Count > 0)
@@ -179,18 +187,19 @@ public async Task RemoveInspection(int plannedInspectionId, string cancellationR
plannedInspection.IsCancelled = DateTime.Now;
plannedInspection.CancellationReason = cancellationReason;
- //Check if cancellationreason is not longer than 250 characters
+ //Check if cancellation reason is not longer than 250 characters
if (!plannedInspection.Validate())
throw new InvalidDataException();
await _db.SaveChangesAsync();
}
+ [ExcludeFromCodeCoverage]
public void Sync()
{
- FestispecContext db = _syncService.GetSyncContext();
+ var db = _syncService.GetSyncContext();
- List plannedInspections = db.PlannedInspections
+ var plannedInspections = db.PlannedInspections
.Include(i => i.Festival)
.Include(i => i.Festival.Address)
.Include(i => i.Employee)
diff --git a/src/DomainServices/Services/JsonSyncService.cs b/src/DomainServices/Services/JsonSyncService.cs
index 5f9df56..1c8fa4c 100644
--- a/src/DomainServices/Services/JsonSyncService.cs
+++ b/src/DomainServices/Services/JsonSyncService.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
@@ -14,6 +15,7 @@
namespace Festispec.DomainServices.Services
{
+ [ExcludeFromCodeCoverage]
public class JsonSyncService : ISyncService where T : Entity
{
private readonly FestispecContext _db;
@@ -52,7 +54,7 @@ private void Initialise()
{
if (!File.Exists(_jsonFile))
{
- using (FileStream fileStream = File.Create(_jsonFile)) fileStream.Dispose();
+ using (var fileStream = File.Create(_jsonFile)) fileStream.Dispose();
Flush();
}
@@ -110,12 +112,6 @@ public void SaveChanges()
File.WriteAllText(_jsonFile, JsonObject.ToString(Formatting.None));
}
- public async void SaveChangesAsync()
- {
- JsonObject["updatedAt"] = new JValue(DateTime.Now);
- await File.WriteAllTextAsync(_jsonFile, JsonObject.ToString(Formatting.None));
- }
-
public FestispecContext GetSyncContext() => _db;
public void Flush()
diff --git a/src/DomainServices/Services/OfflineAddressService.cs b/src/DomainServices/Services/Offline/OfflineAddressService.cs
similarity index 78%
rename from src/DomainServices/Services/OfflineAddressService.cs
rename to src/DomainServices/Services/Offline/OfflineAddressService.cs
index 501d006..1cdcbdb 100644
--- a/src/DomainServices/Services/OfflineAddressService.cs
+++ b/src/DomainServices/Services/Offline/OfflineAddressService.cs
@@ -1,9 +1,11 @@
+using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
using Festispec.Models;
-namespace Festispec.DomainServices.Services
+namespace Festispec.DomainServices.Services.Offline
{
+ [ExcludeFromCodeCoverage]
public class OfflineAddressService : IAddressService
{
public Task SaveAddress(Address address)
diff --git a/src/DomainServices/Services/OfflineAuthenticationService.cs b/src/DomainServices/Services/Offline/OfflineAuthenticationService.cs
similarity index 85%
rename from src/DomainServices/Services/OfflineAuthenticationService.cs
rename to src/DomainServices/Services/Offline/OfflineAuthenticationService.cs
index 3b61c8c..8f70cf5 100644
--- a/src/DomainServices/Services/OfflineAuthenticationService.cs
+++ b/src/DomainServices/Services/Offline/OfflineAuthenticationService.cs
@@ -1,11 +1,13 @@
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
using Festispec.Models;
using Festispec.Models.Exception;
-namespace Festispec.DomainServices.Services
+namespace Festispec.DomainServices.Services.Offline
{
+ [ExcludeFromCodeCoverage]
public class OfflineAuthenticationService : IAuthenticationService
{
private readonly ISyncService _syncService;
@@ -22,7 +24,7 @@ public Account AssembleAccount(string username, string password, Role requiredRo
public Account Login(string username, string password, Role requiredRole)
{
- Account account = _syncService.GetAll().FirstOrDefault(x => x.Username == username);
+ var account = _syncService.GetAll().FirstOrDefault(x => x.Username == username);
if (account == null || !BCrypt.Net.BCrypt.Verify(password, account.Password))
throw new AuthenticationException("Username or password are incorrect");
diff --git a/src/DomainServices/Services/OfflineCustomerService.cs b/src/DomainServices/Services/Offline/OfflineCustomerService.cs
similarity index 90%
rename from src/DomainServices/Services/OfflineCustomerService.cs
rename to src/DomainServices/Services/Offline/OfflineCustomerService.cs
index f595fc7..2ce3fc2 100644
--- a/src/DomainServices/Services/OfflineCustomerService.cs
+++ b/src/DomainServices/Services/Offline/OfflineCustomerService.cs
@@ -1,11 +1,13 @@
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
using Festispec.Models;
-namespace Festispec.DomainServices.Services
+namespace Festispec.DomainServices.Services.Offline
{
+ [ExcludeFromCodeCoverage]
public class OfflineCustomerService : ICustomerService
{
private readonly ISyncService _syncService;
@@ -50,11 +52,6 @@ public Task UpdateCustomerAsync(Customer customer)
throw new System.InvalidOperationException();
}
- public Task SaveChangesAsync()
- {
- throw new System.InvalidOperationException();
- }
-
public bool CanDeleteCustomer(Customer customer)
{
return false;
diff --git a/src/DomainServices/Services/OfflineEmployeeService.cs b/src/DomainServices/Services/Offline/OfflineEmployeeService.cs
similarity index 91%
rename from src/DomainServices/Services/OfflineEmployeeService.cs
rename to src/DomainServices/Services/Offline/OfflineEmployeeService.cs
index 2e06179..f31f425 100644
--- a/src/DomainServices/Services/OfflineEmployeeService.cs
+++ b/src/DomainServices/Services/Offline/OfflineEmployeeService.cs
@@ -1,12 +1,14 @@
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
using Festispec.Models;
using Festispec.Models.Exception;
-namespace Festispec.DomainServices.Services
+namespace Festispec.DomainServices.Services.Offline
{
+ [ExcludeFromCodeCoverage]
public class OfflineEmployeeService : IEmployeeService
{
private readonly ISyncService _employeeSyncService;
@@ -46,11 +48,6 @@ public Task CreateEmployeeAsync(FullName name, string iban, string use
throw new System.InvalidOperationException();
}
- public Task CreateEmployeeAsync(Employee employee)
- {
- throw new System.InvalidOperationException();
- }
-
public Task UpdateEmployee(Employee employee)
{
throw new System.InvalidOperationException();
@@ -73,7 +70,7 @@ public Account GetAccountForEmployee(int employeeId)
public Certificate GetCertificate(int certificateId)
{
- foreach (Certificate cert in GetAllEmployees()
+ foreach (var cert in GetAllEmployees()
.Select(allEmployee => allEmployee.Certificates.FirstOrDefault(c => c.Id == certificateId))
.Where(cert => cert != null))
{
diff --git a/src/DomainServices/Services/OfflineFestivalService.cs b/src/DomainServices/Services/Offline/OfflineFestivalService.cs
similarity index 85%
rename from src/DomainServices/Services/OfflineFestivalService.cs
rename to src/DomainServices/Services/Offline/OfflineFestivalService.cs
index 5220ecf..cd99087 100644
--- a/src/DomainServices/Services/OfflineFestivalService.cs
+++ b/src/DomainServices/Services/Offline/OfflineFestivalService.cs
@@ -1,11 +1,13 @@
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
using Festispec.Models;
-namespace Festispec.DomainServices.Services
+namespace Festispec.DomainServices.Services.Offline
{
+ [ExcludeFromCodeCoverage]
public class OfflineFestivalService : IFestivalService
{
private readonly ISyncService _syncService;
@@ -20,11 +22,6 @@ public Task CreateFestival(Festival festival, int customerId)
throw new System.InvalidOperationException();
}
- public async Task GetFestivalAsync(int festivalId)
- {
- return await _syncService.GetEntityAsync(festivalId);
- }
-
public Festival GetFestival(int festivalId)
{
return _syncService.GetEntity(festivalId);
diff --git a/src/DomainServices/Services/OfflineGoogleMapsService.cs b/src/DomainServices/Services/Offline/OfflineGoogleMapsService.cs
similarity index 80%
rename from src/DomainServices/Services/OfflineGoogleMapsService.cs
rename to src/DomainServices/Services/Offline/OfflineGoogleMapsService.cs
index 8f922d2..e34144a 100644
--- a/src/DomainServices/Services/OfflineGoogleMapsService.cs
+++ b/src/DomainServices/Services/Offline/OfflineGoogleMapsService.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
@@ -6,8 +7,9 @@
using Festispec.Models.Exception;
using Festispec.Models.Google;
-namespace Festispec.DomainServices.Services
+namespace Festispec.DomainServices.Services.Offline
{
+ [ExcludeFromCodeCoverage]
public class OfflineGoogleMapsService : IGoogleMapsService
{
private readonly ISyncService _syncService;
@@ -29,7 +31,7 @@ public Task GetAddress(string placeId)
public async Task CalculateDistance(Address origin, Address destination)
{
- DistanceResult existing = (await _syncService.GetAllAsync()).FirstOrDefault(x => x.Origin.Id == origin.Id && x.Destination.Id == destination.Id);
+ var existing = (await _syncService.GetAllAsync()).FirstOrDefault(x => x.Origin.Id == origin.Id && x.Destination.Id == destination.Id);
if (existing == null)
throw new GoogleMapsApiException();
diff --git a/src/DomainServices/Services/OfflineInspectionService.cs b/src/DomainServices/Services/Offline/OfflineInspectionService.cs
similarity index 88%
rename from src/DomainServices/Services/OfflineInspectionService.cs
rename to src/DomainServices/Services/Offline/OfflineInspectionService.cs
index f209533..97a89ed 100644
--- a/src/DomainServices/Services/OfflineInspectionService.cs
+++ b/src/DomainServices/Services/Offline/OfflineInspectionService.cs
@@ -1,14 +1,16 @@
using System;
using System.Collections.Generic;
using System.Data.Entity.Core.Objects;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
using Festispec.Models;
using Festispec.Models.Exception;
-namespace Festispec.DomainServices.Services
+namespace Festispec.DomainServices.Services.Offline
{
+ [ExcludeFromCodeCoverage]
public class OfflineInspectionService : IInspectionService
{
private readonly ISyncService _plannedInspectionSyncService;
@@ -43,7 +45,7 @@ public async Task GetPlannedInspection(int plannedInspectionI
public async Task GetPlannedInspection(Festival festival, Employee employee,
DateTime startTime)
{
- PlannedInspection plannedInspection = (await _plannedInspectionSyncService.GetAllAsync()).FirstOrDefault(
+ var plannedInspection = (await _plannedInspectionSyncService.GetAllAsync()).FirstOrDefault(
e => e.Festival.Id == festival.Id && e.Employee.Id == employee.Id && e.StartTime.Equals(startTime) &&
e.IsCancelled == null);
@@ -67,8 +69,7 @@ public async Task> GetPlannedInspections(int festivalId,
public async Task> GetPlannedInspections(int employeeId)
{
return (await _plannedInspectionSyncService.GetAllAsync()).Where(e =>
- e.Employee.Id == employeeId && EntityFunctions.TruncateTime(e.StartTime) ==
- EntityFunctions.TruncateTime(DateTime.Now)).ToList();
+ e.Employee.Id == employeeId && e.StartTime.Date == DateTime.Now.Date).ToList();
}
public List> GetPlannedInspectionsGrouped(Festival festival)
@@ -87,17 +88,13 @@ public Task RemoveInspection(int plannedInspectionId, string cancellationReason)
throw new InvalidOperationException();
}
- public Task SaveChanges()
- {
- throw new InvalidOperationException();
- }
-
public async Task GetFestivalAsync(int festivalId)
{
return await _festivalSyncService.GetEntityAsync(festivalId);
}
- public Task ProcessPlannedInspections(IEnumerable plannedInspections)
+ public Task ProcessPlannedInspections(IEnumerable plannedInspections,
+ Questionnaire questionnaire, string instructions)
{
throw new InvalidOperationException();
}
diff --git a/src/DomainServices/Services/OfflineQuestionnaireService.cs b/src/DomainServices/Services/Offline/OfflineQuestionnaireService.cs
similarity index 82%
rename from src/DomainServices/Services/OfflineQuestionnaireService.cs
rename to src/DomainServices/Services/Offline/OfflineQuestionnaireService.cs
index 1324a26..f613169 100644
--- a/src/DomainServices/Services/OfflineQuestionnaireService.cs
+++ b/src/DomainServices/Services/Offline/OfflineQuestionnaireService.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
@@ -7,8 +8,9 @@
using Festispec.Models.Exception;
using Festispec.Models.Questions;
-namespace Festispec.DomainServices.Services
+namespace Festispec.DomainServices.Services.Offline
{
+ [ExcludeFromCodeCoverage]
public class OfflineQuestionnaireService : IQuestionnaireService
{
private readonly ISyncService _syncService;
@@ -35,7 +37,7 @@ public Task AddQuestion(int questionnaireId, Question question)
public Question GetQuestionFromQuestionnaire(int questionnaireId, int questionId)
{
- Question questionFromQuestionnaire = _syncService.GetEntity(questionnaireId).Questions.FirstOrDefault(q => q.Id == questionId);
+ var questionFromQuestionnaire = _syncService.GetEntity(questionnaireId).Questions.FirstOrDefault(q => q.Id == questionId);
if (questionFromQuestionnaire == null)
throw new EntityNotFoundException();
@@ -71,26 +73,14 @@ public Task CreateAnswer(Answer answer)
throw new System.InvalidOperationException();
}
- public void Save()
- {
- throw new System.InvalidOperationException();
- }
-
public List GetQuestionsFromQuestionnaire(int questionnaireId)
{
return _syncService.GetEntity(questionnaireId).Questions.ToList();
}
- public List GetAnswers()
+ public Task GetAnswer(int id) where TAnswer : Answer
{
- var answers = new List();
-
- foreach (Question questionnaireQuestion in _syncService.GetAll().ToList().SelectMany(questionnaire => questionnaire.Questions.ToList()))
- {
- answers.AddRange(questionnaireQuestion.Answers);
- }
-
- return answers;
+ throw new System.NotImplementedException();
}
public Task> GetPlannedInspections(int employeeId)
diff --git a/src/DomainServices/Services/QuestionnaireService.cs b/src/DomainServices/Services/QuestionnaireService.cs
index 2c45d60..cb95b5e 100644
--- a/src/DomainServices/Services/QuestionnaireService.cs
+++ b/src/DomainServices/Services/QuestionnaireService.cs
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.Data.Entity;
-using System.Data.Entity.Core.Objects;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
using Festispec.DomainServices.Interfaces;
@@ -28,23 +28,26 @@ public QuestionnaireService(FestispecContext db, ISyncService syn
public Questionnaire GetQuestionnaire(int questionnaireId)
{
- Questionnaire questionnaire = _db.Questionnaires.Include(x => x.Questions)
+ var questionnaire = _db.Questionnaires
+ .Include(x => x.Questions)
.FirstOrDefault(q => q.Id == questionnaireId);
if (questionnaire == null)
throw new EntityNotFoundException();
- foreach (MultipleChoiceQuestion q in questionnaire.Questions.OfType())
+ foreach (var q in questionnaire.Questions.OfType())
q.StringToObjects();
return questionnaire;
}
-
+
+ [ExcludeFromCodeCoverage]
public async Task SaveChangesAsync()
{
return await _db.SaveChangesAsync();
}
-
+
+ [ExcludeFromCodeCoverage]
public int SaveChanges()
{
return _db.SaveChanges();
@@ -52,13 +55,11 @@ public int SaveChanges()
public async Task CreateQuestionnaire(string name, int festivalId)
{
- Questionnaire existing = await _db.Questionnaires.Include(x => x.Festival)
- .FirstOrDefaultAsync(x => x.Name == name && x.Festival.Id == festivalId);
-
- if (existing != null)
+ if (await _db.Questionnaires.Include(x => x.Festival)
+ .AnyAsync(x => x.Name == name && x.Festival.Id == festivalId))
throw new EntityExistsException();
- Festival festival = await _db.Festivals.FirstOrDefaultAsync(f => f.Id == festivalId);
+ var festival = await _db.Festivals.FirstOrDefaultAsync(f => f.Id == festivalId);
var questionnaire = new Questionnaire(name, festival);
@@ -66,33 +67,30 @@ public async Task CreateQuestionnaire(string name, int festivalId
throw new InvalidDataException();
_db.Questionnaires.Add(questionnaire);
-
- if (await _db.SaveChangesAsync() == 0)
- throw new NoRowsChangedException();
+ await _db.SaveChangesAsync();
return questionnaire;
}
public async Task RemoveQuestionnaire(int questionnaireId)
{
- Questionnaire questionnaire = GetQuestionnaire(questionnaireId);
+ var questionnaire = GetQuestionnaire(questionnaireId);
- if (questionnaire.Questions.FirstOrDefault(q => q.Answers.Count > 0) != null)
+ if (questionnaire.Questions.Any(q => q.Answers.Count > 0))
throw new QuestionHasAnswersException();
_db.Questionnaires.Remove(questionnaire);
- if (await _db.SaveChangesAsync() == 0)
- throw new NoRowsChangedException();
+ await _db.SaveChangesAsync();
}
public async Task CopyQuestionnaire(int questionnaireId, string questionnaireName)
{
- Questionnaire oldQuestionnaire = GetQuestionnaire(questionnaireId);
+ var oldQuestionnaire = GetQuestionnaire(questionnaireId);
- Questionnaire newQuestionnaire =
+ var newQuestionnaire =
await CreateQuestionnaire(questionnaireName, oldQuestionnaire.Festival.Id);
-
+
foreach (var e in oldQuestionnaire.Questions)
{
await AddQuestion(newQuestionnaire.Id, new ReferenceQuestion(e.Contents, newQuestionnaire, e));
@@ -109,9 +107,14 @@ public async Task CopyQuestionnaire(int questionnaireId, string q
public Question GetQuestionFromQuestionnaire(int questionnaireId, int questionId)
{
- Questionnaire questionnaire = _db.Questionnaires.Include(x => x.Questions)
+ var questionnaire = _db.Questionnaires
+ .Include(x => x.Questions)
.FirstOrDefault(q => q.Id == questionnaireId);
- Question question = questionnaire.Questions.FirstOrDefault(q => q.Id == questionId);
+
+ if (questionnaire == null)
+ throw new EntityNotFoundException();
+
+ var question = questionnaire.Questions.FirstOrDefault(q => q.Id == questionId);
if (question == null)
throw new EntityNotFoundException();
@@ -121,13 +124,12 @@ public Question GetQuestionFromQuestionnaire(int questionnaireId, int questionId
public List GetQuestionsFromQuestionnaire(int questionnaireId)
{
- List questions = _db.Questions.Include(x => x.Answers)
- .Where(q => q.Questionnaire.Id == questionnaireId).ToList();
-
- if (questions == null)
- throw new EntityNotFoundException();
+ var questions = _db.Questions
+ .Include(x => x.Answers)
+ .Where(q => q.Questionnaire.Id == questionnaireId)
+ .ToList();
- foreach (MultipleChoiceQuestion q in questions.OfType())
+ foreach (var q in questions.OfType())
q.StringToObjects();
return questions;
@@ -135,29 +137,30 @@ public List GetQuestionsFromQuestionnaire(int questionnaireId)
public async Task AddQuestion(int questionnaireId, Question question)
{
- Questionnaire questionnaire = _db.Questionnaires.FirstOrDefault(q => q.Id == questionnaireId);
+ var questionnaire = _db.Questionnaires.FirstOrDefault(q => q.Id == questionnaireId);
question.Questionnaire = questionnaire;
+ if (questionnaire == null)
+ throw new EntityNotFoundException();
+
if (!question.Validate())
throw new InvalidDataException();
questionnaire.Questions.Add(question);
-
- if (await _db.SaveChangesAsync() == 0)
- throw new NoRowsChangedException();
+ await _db.SaveChangesAsync();
return question;
}
public async Task RemoveQuestion(int questionId)
{
- Question question = _db.Questions.Include(x => x.Answers).FirstOrDefault(q => q.Id == questionId);
+ var question = _db.Questions.Include(x => x.Answers).FirstOrDefault(q => q.Id == questionId);
if (question == null)
throw new EntityNotFoundException();
- if (question.Answers.Count() > 0)
+ if (question.Answers.Any())
throw new QuestionHasAnswersException();
if (_db.Questions.OfType().Include(x => x.Question)
@@ -169,11 +172,6 @@ public async Task RemoveQuestion(int questionId)
return await _db.SaveChangesAsync() > 1;
}
- public void Save()
- {
- _db.SaveChanges();
- }
-
public async Task CreateAnswer(Answer answer)
{
if (!answer.Validate())
@@ -186,9 +184,9 @@ public async Task CreateAnswer(Answer answer)
return answer;
}
- public List GetAnswers()
+ public async Task GetAnswer(int id) where TAnswer : Answer
{
- return _db.Answers.Include(a => a.Question).ToList();
+ return await _db.Answers.OfType().FirstOrDefaultAsync(a => a.Id == id);
}
public async Task GetQuestion(int questionId)
@@ -199,27 +197,26 @@ public async Task GetQuestion(int questionId)
#endregion Question Management
-
-
- #region inspection
+ #region inspection
public async Task> GetPlannedInspections(int employeeId)
{
- List plannedInspections = await _db.PlannedInspections
+ if (!_db.Employees.Any(e => e.Id == employeeId))
+ throw new EntityNotFoundException();
+
+ var plannedInspections = await _db.PlannedInspections
.Include(e => e.Employee)
- .Where(e => e.Employee.Id == employeeId && EntityFunctions.TruncateTime(e.StartTime) == EntityFunctions.TruncateTime(DateTime.Now))
+ .Where(e => e.Employee.Id == employeeId)
.ToListAsync();
- if (plannedInspections.Count < 1)
- throw new EntityNotFoundException();
-
- return plannedInspections;
+ // LINQ does not like .Date inside an EF query. Or maybe EF doesn't like it. Either way, this works.
+ return plannedInspections.Where(e => e.StartTime.Date == DateTime.Now.Date).ToList();
}
-
-
+
+
public async Task GetPlannedInspection(int plannedInspectionId)
{
- PlannedInspection plannedInspection = await _db.PlannedInspections
+ var plannedInspection = await _db.PlannedInspections
.Include(pi => pi.Festival)
.Include(pi => pi.Festival.Address)
.FirstOrDefaultAsync(e => e.Id == plannedInspectionId);
@@ -232,11 +229,12 @@ public async Task GetPlannedInspection(int plannedInspectionI
#endregion
+ [ExcludeFromCodeCoverage]
public void Sync()
{
- FestispecContext db = _syncService.GetSyncContext();
-
- List questionnaires = db.Questionnaires
+ var db = _syncService.GetSyncContext();
+
+ var questionnaires = db.Questionnaires
.Include(q => q.Festival)
.Include(q => q.Questions)
.Include(q => q.Questions.Select(qu => qu.Answers))
@@ -247,4 +245,4 @@ public void Sync()
_syncService.SaveChanges();
}
}
-}
+}
\ No newline at end of file
diff --git a/src/DomainServices/Services/SicknessService.cs b/src/DomainServices/Services/SicknessService.cs
index 90842c9..df5a475 100644
--- a/src/DomainServices/Services/SicknessService.cs
+++ b/src/DomainServices/Services/SicknessService.cs
@@ -5,6 +5,7 @@
using System;
using System.Linq;
using System.Data.Entity;
+using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
namespace Festispec.DomainServices.Services
@@ -18,14 +19,14 @@ public SicknessService(FestispecContext db)
_db = db;
}
- public async Task AddAbsense(int employeeId, string reason, DateTime? endTime)
+ public async Task AddAbsence(int employeeId, string reason, DateTime? endTime)
{
if (endTime < DateTime.Now)
throw new DateHasPassedException();
var employee = _db.Employees.Include(e => e.Address).FirstOrDefault(e => e.Id == employeeId);
- var absense = new Availability()
+ var absence = new Availability()
{
IsAvailable = false,
Employee = employee,
@@ -35,31 +36,29 @@ public async Task AddAbsense(int employeeId, string reason, DateTi
EventTitle = "Afwezig wegens ziekte"
};
- if (!absense.Validate())
+ if (!absence.Validate())
throw new InvalidDataException();
- _db.PlannedEvents.Add(absense);
+ _db.PlannedEvents.Add(absence);
+ await _db.SaveChangesAsync();
- if (await _db.SaveChangesAsync() == 0)
- throw new NoRowsChangedException();
-
- return absense;
+ return absence;
}
- public async Task EndAbsense(int employeeId)
+ [ExcludeFromCodeCoverage]
+ public async Task EndAbsence(int employeeId)
{
- var absense = GetCurrentAbsense(employeeId);
+ var absence = GetCurrentAbsence(employeeId);
- if (absense == null)
+ if (absence == null)
throw new EmployeeNotSickException();
- absense.EndTime = DateTime.Now;
+ absence.EndTime = DateTime.Now;
- if (await _db.SaveChangesAsync() == 0)
- throw new NoRowsChangedException();
+ await _db.SaveChangesAsync();
}
- private Availability GetCurrentAbsense(int employeeId)
+ private Availability GetCurrentAbsence(int employeeId)
{
return _db.Availabilities.FirstOrDefault(a => a.Employee.Id == employeeId
&& a.EventTitle == "Afwezig wegens ziekte"
@@ -68,9 +67,9 @@ private Availability GetCurrentAbsense(int employeeId)
public bool IsSick(int employeeId)
{
- var absense = GetCurrentAbsense(employeeId);
+ var absence = GetCurrentAbsence(employeeId);
- return absense != null;
+ return absence != null;
}
}
}
diff --git a/src/DomainServices/Startup.cs b/src/DomainServices/Startup.cs
index 9e96441..f2bf275 100644
--- a/src/DomainServices/Startup.cs
+++ b/src/DomainServices/Startup.cs
@@ -5,9 +5,12 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
+using System.Diagnostics.CodeAnalysis;
+using Festispec.DomainServices.Services.Offline;
namespace Festispec.DomainServices
{
+ [ExcludeFromCodeCoverage]
public static class IServiceCollectionExtension
{
public static IServiceCollection AddDomainServices(this IServiceCollection services)
@@ -15,17 +18,15 @@ public static IServiceCollection AddDomainServices(this IServiceCollection servi
services.AddTransient();
services.AddScoped(typeof(ISyncService<>), typeof(JsonSyncService<>));
services.AddSingleton();
- string environment = Environment.GetEnvironmentVariable("Environment") ?? "Production";
+ string environment = Environment.GetEnvironmentVariable("Environment") ?? "Debug";
- IConfigurationRoot configuration = new ConfigurationBuilder()
+ var configuration = new ConfigurationBuilder()
.AddJsonFile($"appsettings.{environment}.json")
.Build();
services.AddSingleton(config => configuration);
// Register services for *both* online and offline here
- services.AddScoped();
-
// Register all your online services here
if (services.BuildServiceProvider().GetRequiredService().IsOnline)
{
@@ -59,6 +60,7 @@ public static IServiceCollection AddDomainServices(this IServiceCollection servi
// Example: services.AddSingleton(new ExampleFactory());
services.AddSingleton(new QuestionFactory());
services.AddSingleton(new GraphSelectorFactory());
+ services.AddSingleton(new AnswerFactory());
return services;
}
diff --git a/src/Models/Address.cs b/src/Models/Address.cs
index f76616b..951e7f3 100644
--- a/src/Models/Address.cs
+++ b/src/Models/Address.cs
@@ -36,13 +36,9 @@ public class Address : Validateable
public override string ToString()
{
- if (HouseNumber == 0 && (StreetName == null || StreetName.Length == 0))
- return $"{City} {Country}";
-
- if (HouseNumber == 0)
- return $"{StreetName}, {City} {Country}";
-
- return $"{StreetName} {HouseNumber}{Suffix}, {City} {Country}";
+ return HouseNumber == 0 && string.IsNullOrEmpty(StreetName) ? $"{City} {Country}" :
+ HouseNumber == 0 ? $"{StreetName}, {City} {Country}" :
+ $"{StreetName} {HouseNumber}{Suffix}, {City} {Country}";
}
}
}
\ No newline at end of file
diff --git a/src/Models/Answers/Answer.cs b/src/Models/Answers/Answer.cs
index 3b27b74..efb0b33 100755
--- a/src/Models/Answers/Answer.cs
+++ b/src/Models/Answers/Answer.cs
@@ -1,4 +1,3 @@
-using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Festispec.Models.Questions;
@@ -11,7 +10,5 @@ public abstract class Answer : Entity
[Required] public virtual Question Question { get; set; }
[Required] public virtual PlannedInspection PlannedInspection { get; set; }
-
- public virtual ICollection Attachments { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Models/Answers/Attachment.cs b/src/Models/Answers/Attachment.cs
deleted file mode 100755
index 9222929..0000000
--- a/src/Models/Answers/Attachment.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-
-namespace Festispec.Models.Answers
-{
- public class Attachment : Entity
- {
- public int Id { get; set; }
-
- [Required] public string FilePath { get; set; }
-
- [Required] public virtual Answer Answer { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/Models/Answers/MultipleChoiceAnswer.cs b/src/Models/Answers/MultipleChoiceAnswer.cs
index d7e0090..e9aeaf5 100644
--- a/src/Models/Answers/MultipleChoiceAnswer.cs
+++ b/src/Models/Answers/MultipleChoiceAnswer.cs
@@ -2,7 +2,7 @@
namespace Festispec.Models.Answers
{
- public class MultipleChoiceAnswer : Answer, IAnswer
+ public class MultipleChoiceAnswer : Answer
{
public int MultipleChoiceAnswerKey { get; set; }
diff --git a/src/Models/Answers/NumericAnswer.cs b/src/Models/Answers/NumericAnswer.cs
index aa7d876..9a2ea71 100644
--- a/src/Models/Answers/NumericAnswer.cs
+++ b/src/Models/Answers/NumericAnswer.cs
@@ -2,7 +2,7 @@
namespace Festispec.Models.Answers
{
- public class NumericAnswer : Answer, IAnswer
+ public class NumericAnswer : Answer
{
public int IntAnswer { get; set; }
diff --git a/src/Models/Answers/StringAnswer.cs b/src/Models/Answers/StringAnswer.cs
index c33a55b..73461cd 100644
--- a/src/Models/Answers/StringAnswer.cs
+++ b/src/Models/Answers/StringAnswer.cs
@@ -2,7 +2,7 @@
namespace Festispec.Models.Answers
{
- public class StringAnswer : Answer, IAnswer
+ public class StringAnswer : Answer
{
public string AnswerContents { get; set; }
diff --git a/src/Models/Attributes/ListElements.cs b/src/Models/Attributes/ListElements.cs
index 09fe9c1..076046a 100644
--- a/src/Models/Attributes/ListElements.cs
+++ b/src/Models/Attributes/ListElements.cs
@@ -16,9 +16,8 @@ public ListElements(int minElements, int maxElements = -1)
public override bool IsValid(object value)
{
- var list = value as ICollection;
- if (list != null)
- return list.Count >= _minElements && (_maxElements > 0 ? list.Count <= _maxElements : true);
+ if (value is ICollection list)
+ return list.Count >= _minElements && (_maxElements <= 0 || list.Count <= _maxElements);
return false;
}
}
diff --git a/src/Models/ContactPerson.cs b/src/Models/ContactPerson.cs
deleted file mode 100755
index 6b8e5eb..0000000
--- a/src/Models/ContactPerson.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-
-namespace Festispec.Models
-{
- public class ContactPerson : Entity
- {
- public int Id { get; set; }
-
- [Required] [MaxLength(20)] public string Role { get; set; }
-
- public FullName Name { get; set; }
-
- public ContactDetails ContactDetails { get; set; }
-
- public virtual Customer Customer { get; set; }
-
- public virtual ICollection Notes { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/Models/ContactPersonNote.cs b/src/Models/ContactPersonNote.cs
deleted file mode 100755
index ee02284..0000000
--- a/src/Models/ContactPersonNote.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-
-namespace Festispec.Models
-{
- public class ContactPersonNote : Entity
- {
- public int Id { get; set; }
-
- public ContactPerson ContactPerson { get; set; }
-
- [Required] [MaxLength(500)] public string Note { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/Models/Customer.cs b/src/Models/Customer.cs
old mode 100644
new mode 100755
index 6989143..a6a67c2
--- a/src/Models/Customer.cs
+++ b/src/Models/Customer.cs
@@ -16,12 +16,10 @@ public Customer()
[Required] [MaxLength(20)] public string CustomerName { get; set; }
- public Address Address { get; set; }
+ [MaxLength(500)] public string Notes { get; set; }
+ public Address Address { get; set; }
public ContactDetails ContactDetails { get; set; }
-
- public virtual ICollection ContactPersons { get; set; }
-
public virtual ICollection Festivals { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Models/DKD.cd b/src/Models/DKD.cd
index c18892c..41c7222 100644
--- a/src/Models/DKD.cd
+++ b/src/Models/DKD.cd
@@ -1,104 +1,88 @@
-
-
-
-
-
+
+
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
- AAACAAAAAAAAAAAAAAACCAAAQAAAAAACAgAAAAAAAAA=
+ AAAiAAAAAAAAAAAAAAACCAAAQAAAAAACAAAAAAAAAAA=
Customer.cs
+
+
+
-
+
-
-
-
-
-
-
-
-
+
+
+
+
-
+
+
+
+
+
+
-
+
-
- AAECgAAAAAAgAAAAABAQAAAAAAAQAAACAAAAAAAABAA=
- Festival.cs
-
-
-
-
-
-
-
-
-
+
-
-
+
+
+
-
- AAEiAAAAAAAAAAAAEAACAAQAAAAAAAAAAAAAAAAAAAA=
- ContactPerson.cs
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
+
+
+
- AAACAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAEAAAA=
- ContactPersonNote.cs
+ AAECgAAAAAAgAAAAABAQAAAAAAAQAAACAAAAAAAAAAA=
+ Festival.cs
-
+
+
+
+
+
+
+
@@ -110,33 +94,31 @@
- AAAAAAAAAAAAAACIAAAAAAAAAEIAAAABACAAAAAAAAA=
+ AAACAAAAAEAAAACMAAAIAAAAAEIAAAABACAAAAAAAAA=
Address.cs
-
+
-
+
-
+
-
-
-
-
+
+
-
+
@@ -146,7 +128,7 @@
- AAACAAAAAAAAAAAAAAACCCQAAAAAAAACAAAAAEAAAEA=
+ AAACAAAAAACAAAAAAAACCCQAAAAAAAACAAAAAEAAAEA=
Employee.cs
@@ -156,14 +138,17 @@
-
-
+
+
-
-
+
+
+
+
+
-
+
@@ -172,27 +157,40 @@
-
+
+
+
+
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
-
+
-
+
-
-
-
-
+
+
+
+
+
AAAAQAAAAAAAAAABAAACBAAAAAAAAAAAQAAAIAAAAAg=
@@ -202,9 +200,12 @@
+
+
+
-
+
@@ -219,7 +220,7 @@
-
+
AAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAIAAAAA=
Availability.cs
@@ -230,11 +231,11 @@
-
+
- AAACAAAAEACAAAAAEQAAAAAACAAAAAACAAAAAAAAAAA=
+ AAACAAAAEACAAAAAEQAAAAAACAAAAAACAAAAAAgAAAA=
Account.cs
@@ -243,21 +244,21 @@
-
+
- AAAAAAAAAAAAAAAAAAAAAAAAIAAgAAAAAAAAAAAAAAA=
+ AAAAAAAAAAAAAAAEAAAAAAAgIAAgAAAAAAAAAEAAAAA=
OpeningHours.cs
-
+
- AAACAAAAAAAAAAAAAAQAAAAASIAAAAAAAAAAAAAAAAA=
+ AAACAAAAAACAAAAAAAQAAAAASIAAAAAAAAAAAAAAAAA=
Certificate.cs
@@ -265,49 +266,32 @@
-
+
AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAA=
Answers\StringAnswer.cs
-
-
-
-
-
-
-
-
-
-
- AAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAACAAAAA=
- Reports\Report.cs
-
-
-
-
-
-
-
-
- AAECAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAA=
- Reports\ReportEntry.cs
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
- AAACAAAAAAAAAAEAABAAAAAAAAAAAAAEAAAAAAAAAAA=
+ AAACAAAAAAAAAAAAABAAAAAAAAAAAAAEAAAAAAAAAAA=
Answers\Answer.cs
@@ -315,168 +299,134 @@
-
-
-
- BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAA=
- Reports\ReportTextEntry.cs
-
-
-
-
-
-
-
-
-
-
-
-
-
- AAAAAAAAAAAAAABAAAQAQAAAAAAAAAAAAAAAAAAAAIA=
- Reports\ReportGraphEntry.cs
-
-
-
-
-
-
-
+
AAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
Questions\DrawQuestion.cs
-
+
AAAAAAAAAAAAAAAACAQAAAAAgAAAAAAAAAAAAAAAAAA=
Questions\StringQuestion.cs
-
+
+
+
+
+
+
+
+
+
- wCEAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAA=
+ AAAAAAAQAQAAAAAAAAQAAQAAAQAAAAgAAAAAAABAAAA=
Questions\MultipleChoiceQuestion.cs
+
+
+
+
+
+
+
- AAACAAAAAAAAAAAAAAQAAAAAAAAAAAAAQAAAAABACAg=
+ AAACAAAAAAAAAAAAAAQAAAAAAAAAAAAAQAAAAABAAAo=
Questions\Question.cs
-
-
-
-
- AAACAAAAAAAAAAAAAAAAAAAAACAAAAAEAAAAAAAAAAA=
- Questions\QuestionCategory.cs
-
-
-
-
-
- AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAgAAAAA=
- Answers\Attachment.cs
-
-
-
-
+
+
+
-
+
+
+
+
+
+
+
+
+
- gAAAAACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAA=
+ gAAAAACAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAA=
Questions\NumericQuestion.cs
-
-
-
-
+
AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA=
Answers\NumericAnswer.cs
-
-
+
AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg=
Answers\MultipleChoiceAnswer.cs
-
-
+
AAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAA=
Answers\FileAnswer.cs
-
+
+
+
+
+
+
+
+
+
AAAAAAAAAAAAAAAAAAQBAAAAAAAAQAAAAAAAAAAAAAA=
Questions\RatingQuestion.cs
-
+
+
+
+
+
+
+
+
+
AAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAA=
Questions\UploadPictureQuestion.cs
-
-
-
- AAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAA=
- ReferenceQuestion.cs
-
-
-
-
-
- AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
- Interfaces\IAnswer.cs
-
-
-
+
AAAAAAAgAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAA=
Role.cs
-
-
-
- AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAE=
- GraphXAxisType.cs
-
-
-
+
AAAAAAAAAAAAAAAAAABCAAAAAAAAAAAAAAAAAAEBAAA=
GraphType.cs
-
-
-
- AAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAA=
- Questions\AnswerUnit.cs
-
-
\ No newline at end of file
diff --git a/src/Models/EntityMapping/AnswerMapping.cs b/src/Models/EntityMapping/AnswerMapping.cs
index ba9587e..0af3a85 100755
--- a/src/Models/EntityMapping/AnswerMapping.cs
+++ b/src/Models/EntityMapping/AnswerMapping.cs
@@ -13,9 +13,7 @@ public AnswerMapping()
HasRequired(a => a.PlannedInspection)
.WithMany(pi => pi.Answers)
- .WillCascadeOnDelete(false);
-
- HasMany(a => a.Attachments).WithRequired(a => a.Answer);
+ .WillCascadeOnDelete(false);
}
}
}
\ No newline at end of file
diff --git a/src/Models/EntityMapping/AttachmentMapping.cs b/src/Models/EntityMapping/AttachmentMapping.cs
deleted file mode 100755
index 581ddb2..0000000
--- a/src/Models/EntityMapping/AttachmentMapping.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System.Data.Entity.ModelConfiguration;
-using Festispec.Models.Answers;
-
-namespace Festispec.Models.EntityMapping
-{
- internal class AttachmentMapping : EntityTypeConfiguration
- {
- public AttachmentMapping()
- {
- Property(a => a.FilePath).IsRequired();
-
- HasRequired(a => a.Answer).WithMany(a => a.Attachments);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Models/EntityMapping/ContactPersonMapping.cs b/src/Models/EntityMapping/ContactPersonMapping.cs
deleted file mode 100755
index a3d403a..0000000
--- a/src/Models/EntityMapping/ContactPersonMapping.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System.Data.Entity.ModelConfiguration;
-
-namespace Festispec.Models.EntityMapping
-{
- internal class ContactPersonMapping : EntityTypeConfiguration
- {
- public ContactPersonMapping()
- {
- Property(l => l.Role).IsRequired();
-
- HasRequired(l => l.Customer).WithMany(c => c.ContactPersons);
-
- HasMany(l => l.Notes).WithRequired(n => n.ContactPerson);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Models/EntityMapping/ContactPersonNoteMapping.cs b/src/Models/EntityMapping/ContactPersonNoteMapping.cs
deleted file mode 100755
index 34056da..0000000
--- a/src/Models/EntityMapping/ContactPersonNoteMapping.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Data.Entity.ModelConfiguration;
-
-namespace Festispec.Models.EntityMapping
-{
- internal class ContactPersonNoteMapping : EntityTypeConfiguration
- {
- public ContactPersonNoteMapping()
- {
- HasRequired(ln => ln.ContactPerson).WithMany(l => l.Notes);
-
- Property(ln => ln.Note).IsRequired();
- }
- }
-}
\ No newline at end of file
diff --git a/src/Models/EntityMapping/CustomerMapping.cs b/src/Models/EntityMapping/CustomerMapping.cs
index d4e4dba..f18b47e 100755
--- a/src/Models/EntityMapping/CustomerMapping.cs
+++ b/src/Models/EntityMapping/CustomerMapping.cs
@@ -9,7 +9,6 @@ public CustomerMapping()
Property(p => p.KvkNr).IsRequired();
Property(p => p.CustomerName).IsRequired();
- HasMany(c => c.ContactPersons).WithRequired(l => l.Customer);
HasMany(c => c.Festivals).WithRequired(f => f.Customer);
}
}
diff --git a/src/Models/EntityMapping/FestispecContext.cs b/src/Models/EntityMapping/FestispecContext.cs
index d4604a9..bc744a7 100644
--- a/src/Models/EntityMapping/FestispecContext.cs
+++ b/src/Models/EntityMapping/FestispecContext.cs
@@ -1,11 +1,10 @@
-using System;
+using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Threading.Tasks;
using Festispec.Models.Answers;
using Festispec.Models.Questions;
-using Festispec.Models.Reports;
using Microsoft.Extensions.Configuration;
namespace Festispec.Models.EntityMapping
@@ -13,31 +12,24 @@ namespace Festispec.Models.EntityMapping
public class FestispecContext : DbContext
{
public FestispecContext(IConfiguration config) : base(config["ConnectionString"])
- {
- }
-
- public FestispecContext() : base("Default")
- {
+ {
}
-
+ public FestispecContext() : base("Default")
+ {
+ }
+
public virtual DbSet Accounts { get; set; }
public virtual DbSet Answers { get; set; }
- public virtual DbSet Attachments { get; set; }
public virtual DbSet Availabilities { get; set; }
public virtual DbSet Certificates { get; set; }
- public virtual DbSet ContactPersons { get; set; }
- public virtual DbSet ContactPersonNotes { get; set; }
public virtual DbSet Customers { get; set; }
public virtual DbSet Employees { get; set; }
public virtual DbSet Festivals { get; set; }
public virtual DbSet PlannedEvents { get; set; }
public virtual DbSet PlannedInspections { get; set; }
public virtual DbSet Questions { get; set; }
- public virtual DbSet QuestionCategories { get; set; }
public virtual DbSet Questionnaires { get; set; }
- public virtual DbSet Reports { get; set; }
- public virtual DbSet ReportEntries { get; set; }
public virtual DbSet Addresses { get; set; }
public virtual DbSet DistanceResults { get; set; }
@@ -60,6 +52,11 @@ public override async Task SaveChangesAsync()
return await base.SaveChangesAsync();
}
+ public virtual DateTime? TruncateTime(DateTime dateTime)
+ {
+ return DbFunctions.TruncateTime(dateTime);
+ }
+
private void AddTimestamps()
{
foreach (DbEntityEntry entity in ChangeTracker.Entries().Where(x =>
@@ -72,4 +69,4 @@ private void AddTimestamps()
}
}
}
-}
+}
diff --git a/src/Models/EntityMapping/FestivalMapping.cs b/src/Models/EntityMapping/FestivalMapping.cs
index d26767b..13bf90c 100755
--- a/src/Models/EntityMapping/FestivalMapping.cs
+++ b/src/Models/EntityMapping/FestivalMapping.cs
@@ -8,8 +8,7 @@ public FestivalMapping()
{
Property(f => f.FestivalName).IsRequired();
Property(f => f.Description).IsRequired();
-
- HasOptional(f => f.Report).WithRequired(r => r.Festival);
+
HasRequired(f => f.Customer).WithMany(c => c.Festivals);
HasMany(f => f.Questionnaires).WithRequired(q => q.Festival);
diff --git a/src/Models/EntityMapping/QuestionCategoryMapping.cs b/src/Models/EntityMapping/QuestionCategoryMapping.cs
deleted file mode 100644
index 50217bb..0000000
--- a/src/Models/EntityMapping/QuestionCategoryMapping.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Data.Entity.ModelConfiguration;
-using Festispec.Models.Questions;
-
-namespace Festispec.Models.EntityMapping
-{
- internal class QuestionCategoryMapping : EntityTypeConfiguration
- {
- public QuestionCategoryMapping()
- {
- Property(qc => qc.CategoryName).IsRequired();
- HasMany(qc => qc.Questions).WithOptional(q => q.Category);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Models/EntityMapping/ReportEntryMapping.cs b/src/Models/EntityMapping/ReportEntryMapping.cs
deleted file mode 100755
index 3f74d05..0000000
--- a/src/Models/EntityMapping/ReportEntryMapping.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System.Data.Entity.ModelConfiguration;
-using Festispec.Models.Reports;
-
-namespace Festispec.Models.EntityMapping
-{
- internal class ReportEntryMapping : EntityTypeConfiguration
- {
- public ReportEntryMapping()
- {
- Property(re => re.Order).IsRequired();
-
- HasRequired(re => re.Question).WithRequiredDependent();
- HasRequired(re => re.Report).WithMany(r => r.ReportEntries);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Models/EntityMapping/ReportMapping.cs b/src/Models/EntityMapping/ReportMapping.cs
deleted file mode 100755
index 3508924..0000000
--- a/src/Models/EntityMapping/ReportMapping.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Data.Entity.ModelConfiguration;
-using Festispec.Models.Reports;
-
-namespace Festispec.Models.EntityMapping
-{
- internal class ReportMapping : EntityTypeConfiguration
- {
- public ReportMapping()
- {
- HasMany(r => r.ReportEntries).WithRequired(re => re.Report);
- HasRequired(r => r.Festival).WithOptional(f => f.Report);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Models/Exception/EmployeeNotSickException.cs b/src/Models/Exception/EmployeeNotSickException.cs
index 57fdcf7..471b8aa 100644
--- a/src/Models/Exception/EmployeeNotSickException.cs
+++ b/src/Models/Exception/EmployeeNotSickException.cs
@@ -1,8 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Festispec.Models.Exception
+namespace Festispec.Models.Exception
{
public class EmployeeNotSickException : System.Exception
{
diff --git a/src/Models/Exception/NoRowsChangedException.cs b/src/Models/Exception/NoRowsChangedException.cs
deleted file mode 100644
index c664d4f..0000000
--- a/src/Models/Exception/NoRowsChangedException.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace Festispec.Models.Exception
-{
- public class NoRowsChangedException : System.Exception
- {
- public NoRowsChangedException(string message) : base(message)
- {
- }
-
- public NoRowsChangedException(string message, System.Exception innerException) : base(message, innerException)
- {
- }
-
- public NoRowsChangedException()
- {
- }
- }
-}
\ No newline at end of file
diff --git a/src/Models/Festival.cs b/src/Models/Festival.cs
index 75c8a2c..ced8613 100755
--- a/src/Models/Festival.cs
+++ b/src/Models/Festival.cs
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
-using Festispec.Models.Reports;
namespace Festispec.Models
{
@@ -15,9 +14,7 @@ public class Festival : Entity
[Required] public Address Address { get; set; }
[Required] public virtual Customer Customer { get; set; }
-
- public virtual Report Report { get; set; }
-
+
[Required] public OpeningHours OpeningHours { get; set; }
public virtual ICollection PlannedInspections { get; set; }
diff --git a/src/Models/GraphConverters/ChartGraphable.cs b/src/Models/GraphConverters/ChartGraphable.cs
index 3ffbb08..46d6878 100644
--- a/src/Models/GraphConverters/ChartGraphable.cs
+++ b/src/Models/GraphConverters/ChartGraphable.cs
@@ -11,35 +11,25 @@ public class ChartGraphable : IGraphable
{
public List TypeToChart(Question question)
{
- ICollection multipleChoiceAnswers = question.Answers;
-
var chartSeries = new List();
+ var multipleChoiceQuestion = (MultipleChoiceQuestion) question;
-
- if (multipleChoiceAnswers == null)
- return chartSeries;
-
-
- var quest = (MultipleChoiceQuestion) question;
-
- for (var i = 0; i < quest.OptionCollection.Count; i++)
+ for (var i = 0; i < multipleChoiceQuestion.OptionCollection.Count; i++)
{
- StringObject option = quest.OptionCollection[i];
+ var option = multipleChoiceQuestion.OptionCollection[i];
// Hoevaak hebben we de index answered.
- int count = quest.Answers.Count(a =>
- {
- var answer = (MultipleChoiceAnswer) a;
- return answer.MultipleChoiceAnswerKey == i;
- });
+ var count = multipleChoiceQuestion.Answers
+ .OfType()
+ .Count(a => a.MultipleChoiceAnswerKey == i);
- var serie = new GraphableSeries
+ var graphableSeries = new GraphableSeries
{
Title = option.Value,
- Values = new ChartValues {count}
+ Values = new ChartValues { count }
};
- chartSeries.Add(serie);
+ chartSeries.Add(graphableSeries);
}
diff --git a/src/Models/GraphConverters/ColumnGraphable.cs b/src/Models/GraphConverters/ColumnGraphable.cs
index 3e06831..662ed00 100644
--- a/src/Models/GraphConverters/ColumnGraphable.cs
+++ b/src/Models/GraphConverters/ColumnGraphable.cs
@@ -12,21 +12,22 @@ public class ColumnGraphable : IGraphable
public List TypeToChart(Question question)
{
var series = new List();
- IEnumerable plannedInspections = question.Answers.Select(x => x.PlannedInspection);
+ var plannedInspections = question.Answers.Select(x => x.PlannedInspection);
- foreach (PlannedInspection plannedInspection in plannedInspections)
+ foreach (var plannedInspection in plannedInspections)
{
- var serie = new GraphableSeries
+ var graphableSeries = new GraphableSeries
{
Title = plannedInspection.EventTitle,
Values = new ChartValues()
};
- Answer answer = question.Answers.FirstOrDefault(x => x.PlannedInspection.Id == plannedInspection.Id);
+ var answer = question.Answers
+ .OfType()
+ .FirstOrDefault(x => x.PlannedInspection.Id == plannedInspection.Id);
- var numAnswer = (NumericAnswer) answer;
- serie.Values.Add(numAnswer.IntAnswer);
- series.Add(serie);
+ if (answer != null) graphableSeries.Values.Add(answer.IntAnswer);
+ series.Add(graphableSeries);
}
return series;
diff --git a/src/Models/GraphConverters/LineGraphable.cs b/src/Models/GraphConverters/LineGraphable.cs
index c348937..28c01a9 100644
--- a/src/Models/GraphConverters/LineGraphable.cs
+++ b/src/Models/GraphConverters/LineGraphable.cs
@@ -12,20 +12,15 @@ public class LineGraphable : IGraphable
public List TypeToChart(Question question)
{
var series = new List();
-
- ICollection answers = question.Answers;
- var serie = new GraphableSeries();
- serie.Title = question.Contents;
+ var graphableSeries = new GraphableSeries { Title = question.Contents };
var chartValues = new ChartValues();
- foreach (Answer answer in answers)
- {
- var numAnswer = (NumericAnswer) answer;
- chartValues.Add(numAnswer.IntAnswer);
- }
+ foreach (var answer in question.Answers.OfType())
+ chartValues.Add(answer.IntAnswer);
+
- serie.Values = chartValues;
- series.Add(serie);
+ graphableSeries.Values = chartValues;
+ series.Add(graphableSeries);
return series;
}
diff --git a/src/Models/GraphValues.cs b/src/Models/GraphValues.cs
deleted file mode 100644
index e69de29..0000000
diff --git a/src/Models/GraphXAxisType.cs b/src/Models/GraphXAxisType.cs
deleted file mode 100644
index ebbef2d..0000000
--- a/src/Models/GraphXAxisType.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Festispec.Models
-{
- public enum GraphXAxisType
- {
- CreatedTime,
- MultipleChoiceOption
- }
-}
\ No newline at end of file
diff --git a/src/Models/Interfaces/IAnswer.cs b/src/Models/Interfaces/IAnswer.cs
deleted file mode 100644
index d4a5f9c..0000000
--- a/src/Models/Interfaces/IAnswer.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Festispec.Models.Interfaces
-{
- public interface IAnswer
- {
- TAnswer GetAnswer();
- }
-}
\ No newline at end of file
diff --git a/src/Models/Interfaces/IAnswerable.cs b/src/Models/Interfaces/IAnswerable.cs
deleted file mode 100644
index 42914e3..0000000
--- a/src/Models/Interfaces/IAnswerable.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System.Collections.Generic;
-using Festispec.Models.Answers;
-
-namespace Festispec.Models.Interfaces
-{
- public interface IAnswerable where TAnswer : Answer
- {
- ICollection Answers { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/Models/Migrations/202001081644430_Initial.cs b/src/Models/Migrations/202001081644430_Initial.cs
deleted file mode 100644
index e0e5536..0000000
--- a/src/Models/Migrations/202001081644430_Initial.cs
+++ /dev/null
@@ -1,387 +0,0 @@
-using System.Data.Entity.Migrations;
-
-namespace Festispec.Models.Migrations
-{
- public partial class Initial : DbMigration
- {
- public override void Up()
- {
- CreateTable(
- "dbo.Accounts",
- c => new
- {
- Id = c.Int(false),
- Username = c.String(false, 45),
- Password = c.String(false, 100),
- IsNonActive = c.DateTime(),
- Role = c.Int(false),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Employees", t => t.Id)
- .Index(t => t.Id);
-
- CreateTable(
- "dbo.Employees",
- c => new
- {
- Id = c.Int(false, true),
- Name_First = c.String(false, 40),
- Name_Middle = c.String(maxLength: 40),
- Name_Last = c.String(false, 40),
- Iban = c.String(false, 30),
- ContactDetails_PhoneNumber = c.String(maxLength: 50),
- ContactDetails_EmailAddress = c.String(maxLength: 50),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- Address_Id = c.Int()
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Addresses", t => t.Address_Id)
- .Index(t => t.Address_Id);
-
- CreateTable(
- "dbo.Addresses",
- c => new
- {
- Id = c.Int(false, true),
- ZipCode = c.String(false, 10),
- StreetName = c.String(false, 50),
- HouseNumber = c.Int(),
- Suffix = c.String(maxLength: 10),
- City = c.String(false, 200),
- Country = c.String(false, 75),
- Latitude = c.Single(false),
- Longitude = c.Single(false)
- })
- .PrimaryKey(t => t.Id);
-
- CreateTable(
- "dbo.Certificates",
- c => new
- {
- Id = c.Int(false, true),
- CertificateTitle = c.String(false, 45),
- CertificationDate = c.DateTime(false),
- ExpirationDate = c.DateTime(false),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- Employee_Id = c.Int(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Employees", t => t.Employee_Id, true)
- .Index(t => t.Employee_Id);
-
- CreateTable(
- "dbo.PlannedEvents",
- c => new
- {
- Id = c.Int(false, true),
- StartTime = c.DateTime(false),
- EndTime = c.DateTime(false),
- EventTitle = c.String(false, 45),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- IsAvailable = c.Boolean(),
- Reason = c.String(maxLength: 250),
- WorkedHours = c.Int(),
- WorkedHoursAccepted = c.DateTime(),
- CancellationReason = c.String(maxLength: 250),
- IsCancelled = c.DateTime(),
- Discriminator = c.String(false, 128),
- Festival_Id = c.Int(),
- Questionnaire_Id = c.Int(),
- Employee_Id = c.Int(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Festivals", t => t.Festival_Id)
- .ForeignKey("dbo.Questionnaires", t => t.Questionnaire_Id, true)
- .ForeignKey("dbo.Employees", t => t.Employee_Id, true)
- .Index(t => t.Festival_Id)
- .Index(t => t.Questionnaire_Id)
- .Index(t => t.Employee_Id);
-
- CreateTable(
- "dbo.Answers",
- c => new
- {
- Id = c.Int(false, true),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- MultipleChoiceAnswerKey = c.Int(),
- IntAnswer = c.Int(),
- AnswerContents = c.String(),
- UploadedFilePath = c.String(),
- Discriminator = c.String(false, 128),
- PlannedInspection_Id = c.Int(false),
- Question_Id = c.Int(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.PlannedEvents", t => t.PlannedInspection_Id)
- .ForeignKey("dbo.Questions", t => t.Question_Id)
- .Index(t => t.PlannedInspection_Id)
- .Index(t => t.Question_Id);
-
- CreateTable(
- "dbo.Attachments",
- c => new
- {
- Id = c.Int(false, true),
- FilePath = c.String(false),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- Answer_Id = c.Int(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Answers", t => t.Answer_Id, true)
- .Index(t => t.Answer_Id);
-
- CreateTable(
- "dbo.Questions",
- c => new
- {
- Id = c.Int(false, true),
- Contents = c.String(false, 250),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- Options = c.String(),
- Minimum = c.Int(),
- Maximum = c.Int(),
- Unit = c.Int(),
- LowRatingDescription = c.String(),
- HighRatingDescription = c.String(),
- IsMultiline = c.Boolean(),
- PicturePath = c.String(),
- Discriminator = c.String(false, 128),
- Category_Id = c.Int(),
- Questionnaire_Id = c.Int(false),
- Question_Id = c.Int()
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.QuestionCategories", t => t.Category_Id)
- .ForeignKey("dbo.Questionnaires", t => t.Questionnaire_Id, true)
- .ForeignKey("dbo.Questions", t => t.Question_Id)
- .Index(t => t.Category_Id)
- .Index(t => t.Questionnaire_Id)
- .Index(t => t.Question_Id);
-
- CreateTable(
- "dbo.QuestionCategories",
- c => new
- {
- Id = c.Int(false, true),
- CategoryName = c.String(false, 45),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false)
- })
- .PrimaryKey(t => t.Id);
-
- CreateTable(
- "dbo.Questionnaires",
- c => new
- {
- Id = c.Int(false, true),
- Name = c.String(false, 45),
- IsComplete = c.DateTime(),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- Festival_Id = c.Int(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Festivals", t => t.Festival_Id, true)
- .Index(t => t.Festival_Id);
-
- CreateTable(
- "dbo.Festivals",
- c => new
- {
- Id = c.Int(false, true),
- FestivalName = c.String(false, 45),
- Description = c.String(false, 250),
- OpeningHours_StartTime = c.Time(false, 7),
- OpeningHours_EndTime = c.Time(false, 7),
- OpeningHours_StartDate = c.DateTime(false),
- OpeningHours_EndDate = c.DateTime(false),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- Address_Id = c.Int(false),
- Customer_Id = c.Int(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Addresses", t => t.Address_Id, true)
- .ForeignKey("dbo.Customers", t => t.Customer_Id, true)
- .Index(t => t.Address_Id)
- .Index(t => t.Customer_Id);
-
- CreateTable(
- "dbo.Customers",
- c => new
- {
- Id = c.Int(false, true),
- KvkNr = c.Int(false),
- CustomerName = c.String(false, 20),
- ContactDetails_PhoneNumber = c.String(maxLength: 50),
- ContactDetails_EmailAddress = c.String(maxLength: 50),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- Address_Id = c.Int()
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Addresses", t => t.Address_Id)
- .Index(t => t.Address_Id);
-
- CreateTable(
- "dbo.ContactPersons",
- c => new
- {
- Id = c.Int(false, true),
- Role = c.String(false, 20),
- Name_First = c.String(false, 40),
- Name_Middle = c.String(maxLength: 40),
- Name_Last = c.String(false, 40),
- ContactDetails_PhoneNumber = c.String(maxLength: 50),
- ContactDetails_EmailAddress = c.String(maxLength: 50),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- Customer_Id = c.Int(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Customers", t => t.Customer_Id, true)
- .Index(t => t.Customer_Id);
-
- CreateTable(
- "dbo.ContactPersonNotes",
- c => new
- {
- Id = c.Int(false, true),
- Note = c.String(false, 500),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- ContactPerson_Id = c.Int(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.ContactPersons", t => t.ContactPerson_Id, true)
- .Index(t => t.ContactPerson_Id);
-
- CreateTable(
- "dbo.Reports",
- c => new
- {
- Id = c.Int(false),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Festivals", t => t.Id)
- .Index(t => t.Id);
-
- CreateTable(
- "dbo.ReportEntries",
- c => new
- {
- Id = c.Int(false),
- Order = c.Int(false),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- GraphXAxisType = c.Int(),
- GraphType = c.Int(),
- XAxisLabel = c.String(),
- YAxisLabel = c.String(),
- Header = c.String(),
- Text = c.String(),
- Discriminator = c.String(false, 128),
- Report_Id = c.Int(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Questions", t => t.Id)
- .ForeignKey("dbo.Reports", t => t.Report_Id, true)
- .Index(t => t.Id)
- .Index(t => t.Report_Id);
-
- CreateTable(
- "dbo.DistanceResults",
- c => new
- {
- Id = c.Int(false, true),
- Distance = c.Double(false),
- CreatedAt = c.DateTime(false),
- UpdatedAt = c.DateTime(false),
- Destination_Id = c.Int(false),
- Origin_Id = c.Int(false)
- })
- .PrimaryKey(t => t.Id)
- .ForeignKey("dbo.Addresses", t => t.Destination_Id)
- .ForeignKey("dbo.Addresses", t => t.Origin_Id)
- .Index(t => t.Destination_Id)
- .Index(t => t.Origin_Id);
- }
-
- public override void Down()
- {
- DropForeignKey("dbo.DistanceResults", "Origin_Id", "dbo.Addresses");
- DropForeignKey("dbo.DistanceResults", "Destination_Id", "dbo.Addresses");
- DropForeignKey("dbo.Accounts", "Id", "dbo.Employees");
- DropForeignKey("dbo.PlannedEvents", "Employee_Id", "dbo.Employees");
- DropForeignKey("dbo.PlannedEvents", "Questionnaire_Id", "dbo.Questionnaires");
- DropForeignKey("dbo.Answers", "Question_Id", "dbo.Questions");
- DropForeignKey("dbo.Questions", "Question_Id", "dbo.Questions");
- DropForeignKey("dbo.Questions", "Questionnaire_Id", "dbo.Questionnaires");
- DropForeignKey("dbo.Reports", "Id", "dbo.Festivals");
- DropForeignKey("dbo.ReportEntries", "Report_Id", "dbo.Reports");
- DropForeignKey("dbo.ReportEntries", "Id", "dbo.Questions");
- DropForeignKey("dbo.Questionnaires", "Festival_Id", "dbo.Festivals");
- DropForeignKey("dbo.PlannedEvents", "Festival_Id", "dbo.Festivals");
- DropForeignKey("dbo.Festivals", "Customer_Id", "dbo.Customers");
- DropForeignKey("dbo.ContactPersonNotes", "ContactPerson_Id", "dbo.ContactPersons");
- DropForeignKey("dbo.ContactPersons", "Customer_Id", "dbo.Customers");
- DropForeignKey("dbo.Customers", "Address_Id", "dbo.Addresses");
- DropForeignKey("dbo.Festivals", "Address_Id", "dbo.Addresses");
- DropForeignKey("dbo.Questions", "Category_Id", "dbo.QuestionCategories");
- DropForeignKey("dbo.Answers", "PlannedInspection_Id", "dbo.PlannedEvents");
- DropForeignKey("dbo.Attachments", "Answer_Id", "dbo.Answers");
- DropForeignKey("dbo.Certificates", "Employee_Id", "dbo.Employees");
- DropForeignKey("dbo.Employees", "Address_Id", "dbo.Addresses");
- DropIndex("dbo.DistanceResults", new[] {"Origin_Id"});
- DropIndex("dbo.DistanceResults", new[] {"Destination_Id"});
- DropIndex("dbo.ReportEntries", new[] {"Report_Id"});
- DropIndex("dbo.ReportEntries", new[] {"Id"});
- DropIndex("dbo.Reports", new[] {"Id"});
- DropIndex("dbo.ContactPersonNotes", new[] {"ContactPerson_Id"});
- DropIndex("dbo.ContactPersons", new[] {"Customer_Id"});
- DropIndex("dbo.Customers", new[] {"Address_Id"});
- DropIndex("dbo.Festivals", new[] {"Customer_Id"});
- DropIndex("dbo.Festivals", new[] {"Address_Id"});
- DropIndex("dbo.Questionnaires", new[] {"Festival_Id"});
- DropIndex("dbo.Questions", new[] {"Question_Id"});
- DropIndex("dbo.Questions", new[] {"Questionnaire_Id"});
- DropIndex("dbo.Questions", new[] {"Category_Id"});
- DropIndex("dbo.Attachments", new[] {"Answer_Id"});
- DropIndex("dbo.Answers", new[] {"Question_Id"});
- DropIndex("dbo.Answers", new[] {"PlannedInspection_Id"});
- DropIndex("dbo.PlannedEvents", new[] {"Employee_Id"});
- DropIndex("dbo.PlannedEvents", new[] {"Questionnaire_Id"});
- DropIndex("dbo.PlannedEvents", new[] {"Festival_Id"});
- DropIndex("dbo.Certificates", new[] {"Employee_Id"});
- DropIndex("dbo.Employees", new[] {"Address_Id"});
- DropIndex("dbo.Accounts", new[] {"Id"});
- DropTable("dbo.DistanceResults");
- DropTable("dbo.ReportEntries");
- DropTable("dbo.Reports");
- DropTable("dbo.ContactPersonNotes");
- DropTable("dbo.ContactPersons");
- DropTable("dbo.Customers");
- DropTable("dbo.Festivals");
- DropTable("dbo.Questionnaires");
- DropTable("dbo.QuestionCategories");
- DropTable("dbo.Questions");
- DropTable("dbo.Attachments");
- DropTable("dbo.Answers");
- DropTable("dbo.PlannedEvents");
- DropTable("dbo.Certificates");
- DropTable("dbo.Addresses");
- DropTable("dbo.Employees");
- DropTable("dbo.Accounts");
- }
- }
-}
\ No newline at end of file
diff --git a/src/Models/Migrations/202001081644430_Initial.resx b/src/Models/Migrations/202001081644430_Initial.resx
deleted file mode 100644
index a539322..0000000
--- a/src/Models/Migrations/202001081644430_Initial.resx
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 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
-
-
- dbo
-
-
\ No newline at end of file
diff --git a/src/Models/Migrations/202001091540426_EndDateNullable.resx b/src/Models/Migrations/202001091540426_EndDateNullable.resx
deleted file mode 100644
index fbbe19e..0000000
--- a/src/Models/Migrations/202001091540426_EndDateNullable.resx
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 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
-
-
- dbo
-
-
\ No newline at end of file
diff --git a/src/Models/Migrations/202001081644430_Initial.Designer.cs b/src/Models/Migrations/202001121533405_Initial.Designer.cs
similarity index 93%
rename from src/Models/Migrations/202001081644430_Initial.Designer.cs
rename to src/Models/Migrations/202001121533405_Initial.Designer.cs
index c268079..39624c5 100644
--- a/src/Models/Migrations/202001081644430_Initial.Designer.cs
+++ b/src/Models/Migrations/202001121533405_Initial.Designer.cs
@@ -13,7 +13,7 @@ public sealed partial class Initial : IMigrationMetadata
string IMigrationMetadata.Id
{
- get { return "202001081644430_Initial"; }
+ get { return "202001121533405_Initial"; }
}
string IMigrationMetadata.Source
diff --git a/src/Models/Migrations/202001121533405_Initial.cs b/src/Models/Migrations/202001121533405_Initial.cs
new file mode 100644
index 0000000..534b23b
--- /dev/null
+++ b/src/Models/Migrations/202001121533405_Initial.cs
@@ -0,0 +1,307 @@
+namespace Festispec.Models.Migrations
+{
+ using System;
+ using System.Data.Entity.Migrations;
+
+ public partial class Initial : DbMigration
+ {
+ public override void Up()
+ {
+ CreateTable(
+ "dbo.Accounts",
+ c => new
+ {
+ Id = c.Int(nullable: false),
+ Username = c.String(nullable: false, maxLength: 45),
+ Password = c.String(nullable: false, maxLength: 100),
+ IsNonActive = c.DateTime(),
+ Role = c.Int(nullable: false),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.Employees", t => t.Id)
+ .Index(t => t.Id);
+
+ CreateTable(
+ "dbo.Employees",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ Name_First = c.String(nullable: false, maxLength: 40),
+ Name_Middle = c.String(maxLength: 40),
+ Name_Last = c.String(nullable: false, maxLength: 40),
+ Iban = c.String(nullable: false, maxLength: 30),
+ ContactDetails_PhoneNumber = c.String(maxLength: 50),
+ ContactDetails_EmailAddress = c.String(maxLength: 50),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ Address_Id = c.Int(),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.Addresses", t => t.Address_Id)
+ .Index(t => t.Address_Id);
+
+ CreateTable(
+ "dbo.Addresses",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ ZipCode = c.String(nullable: false, maxLength: 10),
+ StreetName = c.String(nullable: false, maxLength: 50),
+ HouseNumber = c.Int(),
+ Suffix = c.String(maxLength: 10),
+ City = c.String(nullable: false, maxLength: 200),
+ Country = c.String(nullable: false, maxLength: 75),
+ Latitude = c.Single(nullable: false),
+ Longitude = c.Single(nullable: false),
+ })
+ .PrimaryKey(t => t.Id);
+
+ CreateTable(
+ "dbo.Certificates",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ CertificateTitle = c.String(nullable: false, maxLength: 45),
+ CertificationDate = c.DateTime(nullable: false),
+ ExpirationDate = c.DateTime(nullable: false),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ Employee_Id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.Employees", t => t.Employee_Id, cascadeDelete: true)
+ .Index(t => t.Employee_Id);
+
+ CreateTable(
+ "dbo.PlannedEvents",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ StartTime = c.DateTime(nullable: false),
+ EndTime = c.DateTime(),
+ EventTitle = c.String(nullable: false, maxLength: 45),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ IsAvailable = c.Boolean(),
+ Reason = c.String(maxLength: 250),
+ WorkedHours = c.Int(),
+ WorkedHoursAccepted = c.DateTime(),
+ CancellationReason = c.String(maxLength: 250),
+ IsCancelled = c.DateTime(),
+ Discriminator = c.String(nullable: false, maxLength: 128),
+ Festival_Id = c.Int(),
+ Questionnaire_Id = c.Int(),
+ Employee_Id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.Festivals", t => t.Festival_Id)
+ .ForeignKey("dbo.Questionnaires", t => t.Questionnaire_Id, cascadeDelete: true)
+ .ForeignKey("dbo.Employees", t => t.Employee_Id, cascadeDelete: true)
+ .Index(t => t.Festival_Id)
+ .Index(t => t.Questionnaire_Id)
+ .Index(t => t.Employee_Id);
+
+ CreateTable(
+ "dbo.Answers",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ MultipleChoiceAnswerKey = c.Int(),
+ IntAnswer = c.Int(),
+ AnswerContents = c.String(),
+ UploadedFilePath = c.String(),
+ Discriminator = c.String(nullable: false, maxLength: 128),
+ PlannedInspection_Id = c.Int(nullable: false),
+ Question_Id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.PlannedEvents", t => t.PlannedInspection_Id)
+ .ForeignKey("dbo.Questions", t => t.Question_Id)
+ .Index(t => t.PlannedInspection_Id)
+ .Index(t => t.Question_Id);
+
+ CreateTable(
+ "dbo.Questions",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ Contents = c.String(nullable: false, maxLength: 250),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ Options = c.String(),
+ Minimum = c.Int(),
+ Maximum = c.Int(),
+ Unit = c.Int(),
+ LowRatingDescription = c.String(),
+ HighRatingDescription = c.String(),
+ IsMultiline = c.Boolean(),
+ PicturePath = c.String(),
+ Discriminator = c.String(nullable: false, maxLength: 128),
+ Category_Id = c.Int(),
+ Questionnaire_Id = c.Int(nullable: false),
+ Question_Id = c.Int(),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.QuestionCategories", t => t.Category_Id)
+ .ForeignKey("dbo.Questionnaires", t => t.Questionnaire_Id, cascadeDelete: true)
+ .ForeignKey("dbo.Questions", t => t.Question_Id)
+ .Index(t => t.Category_Id)
+ .Index(t => t.Questionnaire_Id)
+ .Index(t => t.Question_Id);
+
+ CreateTable(
+ "dbo.QuestionCategories",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ CategoryName = c.String(nullable: false, maxLength: 45),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ })
+ .PrimaryKey(t => t.Id);
+
+ CreateTable(
+ "dbo.Questionnaires",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ Name = c.String(nullable: false, maxLength: 45),
+ IsComplete = c.DateTime(),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ Festival_Id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.Festivals", t => t.Festival_Id, cascadeDelete: true)
+ .Index(t => t.Festival_Id);
+
+ CreateTable(
+ "dbo.Festivals",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ FestivalName = c.String(nullable: false, maxLength: 45),
+ Description = c.String(nullable: false, maxLength: 250),
+ OpeningHours_StartTime = c.Time(nullable: false, precision: 7),
+ OpeningHours_EndTime = c.Time(nullable: false, precision: 7),
+ OpeningHours_StartDate = c.DateTime(nullable: false),
+ OpeningHours_EndDate = c.DateTime(nullable: false),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ Address_Id = c.Int(nullable: false),
+ Customer_Id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.Addresses", t => t.Address_Id, cascadeDelete: true)
+ .ForeignKey("dbo.Customers", t => t.Customer_Id, cascadeDelete: true)
+ .Index(t => t.Address_Id)
+ .Index(t => t.Customer_Id);
+
+ CreateTable(
+ "dbo.Customers",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ KvkNr = c.Int(nullable: false),
+ CustomerName = c.String(nullable: false, maxLength: 20),
+ ContactDetails_PhoneNumber = c.String(maxLength: 50),
+ ContactDetails_EmailAddress = c.String(maxLength: 50),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ Address_Id = c.Int(),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.Addresses", t => t.Address_Id)
+ .Index(t => t.Address_Id);
+
+ CreateTable(
+ "dbo.Attachments",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ FilePath = c.String(nullable: false),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ Answer_Id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.Answers", t => t.Answer_Id, cascadeDelete: true)
+ .Index(t => t.Answer_Id);
+
+ CreateTable(
+ "dbo.DistanceResults",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ Distance = c.Double(nullable: false),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ Destination_Id = c.Int(nullable: false),
+ Origin_Id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.Addresses", t => t.Destination_Id)
+ .ForeignKey("dbo.Addresses", t => t.Origin_Id)
+ .Index(t => t.Destination_Id)
+ .Index(t => t.Origin_Id);
+
+ }
+
+ public override void Down()
+ {
+ DropForeignKey("dbo.DistanceResults", "Origin_Id", "dbo.Addresses");
+ DropForeignKey("dbo.DistanceResults", "Destination_Id", "dbo.Addresses");
+ DropForeignKey("dbo.Attachments", "Answer_Id", "dbo.Answers");
+ DropForeignKey("dbo.Accounts", "Id", "dbo.Employees");
+ DropForeignKey("dbo.PlannedEvents", "Employee_Id", "dbo.Employees");
+ DropForeignKey("dbo.PlannedEvents", "Questionnaire_Id", "dbo.Questionnaires");
+ DropForeignKey("dbo.Answers", "Question_Id", "dbo.Questions");
+ DropForeignKey("dbo.Questions", "Question_Id", "dbo.Questions");
+ DropForeignKey("dbo.Questions", "Questionnaire_Id", "dbo.Questionnaires");
+ DropForeignKey("dbo.Questionnaires", "Festival_Id", "dbo.Festivals");
+ DropForeignKey("dbo.PlannedEvents", "Festival_Id", "dbo.Festivals");
+ DropForeignKey("dbo.Festivals", "Customer_Id", "dbo.Customers");
+ DropForeignKey("dbo.Customers", "Address_Id", "dbo.Addresses");
+ DropForeignKey("dbo.Festivals", "Address_Id", "dbo.Addresses");
+ DropForeignKey("dbo.Questions", "Category_Id", "dbo.QuestionCategories");
+ DropForeignKey("dbo.Answers", "PlannedInspection_Id", "dbo.PlannedEvents");
+ DropForeignKey("dbo.Certificates", "Employee_Id", "dbo.Employees");
+ DropForeignKey("dbo.Employees", "Address_Id", "dbo.Addresses");
+ DropIndex("dbo.DistanceResults", new[] { "Origin_Id" });
+ DropIndex("dbo.DistanceResults", new[] { "Destination_Id" });
+ DropIndex("dbo.Attachments", new[] { "Answer_Id" });
+ DropIndex("dbo.Customers", new[] { "Address_Id" });
+ DropIndex("dbo.Festivals", new[] { "Customer_Id" });
+ DropIndex("dbo.Festivals", new[] { "Address_Id" });
+ DropIndex("dbo.Questionnaires", new[] { "Festival_Id" });
+ DropIndex("dbo.Questions", new[] { "Question_Id" });
+ DropIndex("dbo.Questions", new[] { "Questionnaire_Id" });
+ DropIndex("dbo.Questions", new[] { "Category_Id" });
+ DropIndex("dbo.Answers", new[] { "Question_Id" });
+ DropIndex("dbo.Answers", new[] { "PlannedInspection_Id" });
+ DropIndex("dbo.PlannedEvents", new[] { "Employee_Id" });
+ DropIndex("dbo.PlannedEvents", new[] { "Questionnaire_Id" });
+ DropIndex("dbo.PlannedEvents", new[] { "Festival_Id" });
+ DropIndex("dbo.Certificates", new[] { "Employee_Id" });
+ DropIndex("dbo.Employees", new[] { "Address_Id" });
+ DropIndex("dbo.Accounts", new[] { "Id" });
+ DropTable("dbo.DistanceResults");
+ DropTable("dbo.Attachments");
+ DropTable("dbo.Customers");
+ DropTable("dbo.Festivals");
+ DropTable("dbo.Questionnaires");
+ DropTable("dbo.QuestionCategories");
+ DropTable("dbo.Questions");
+ DropTable("dbo.Answers");
+ DropTable("dbo.PlannedEvents");
+ DropTable("dbo.Certificates");
+ DropTable("dbo.Addresses");
+ DropTable("dbo.Employees");
+ DropTable("dbo.Accounts");
+ }
+ }
+}
diff --git a/src/Models/Migrations/202001121533405_Initial.resx b/src/Models/Migrations/202001121533405_Initial.resx
new file mode 100644
index 0000000..ee56fe8
--- /dev/null
+++ b/src/Models/Migrations/202001121533405_Initial.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ dbo
+
+
\ No newline at end of file
diff --git a/src/Models/Migrations/202001091540426_EndDateNullable.Designer.cs b/src/Models/Migrations/202001131230471_DropUnit.Designer.cs
old mode 100644
new mode 100755
similarity index 79%
rename from src/Models/Migrations/202001091540426_EndDateNullable.Designer.cs
rename to src/Models/Migrations/202001131230471_DropUnit.Designer.cs
index 7073074..265c388
--- a/src/Models/Migrations/202001091540426_EndDateNullable.Designer.cs
+++ b/src/Models/Migrations/202001131230471_DropUnit.Designer.cs
@@ -1,29 +1,29 @@
-//
-namespace Festispec.Models.Migrations
-{
- using System.CodeDom.Compiler;
- using System.Data.Entity.Migrations;
- using System.Data.Entity.Migrations.Infrastructure;
- using System.Resources;
-
- [GeneratedCode("EntityFramework.Migrations", "6.3.0")]
- public sealed partial class EndDateNullable : IMigrationMetadata
- {
- private readonly ResourceManager Resources = new ResourceManager(typeof(EndDateNullable));
-
- string IMigrationMetadata.Id
- {
- get { return "202001091540426_EndDateNullable"; }
- }
-
- string IMigrationMetadata.Source
- {
- get { return null; }
- }
-
- string IMigrationMetadata.Target
- {
- get { return Resources.GetString("Target"); }
- }
- }
-}
+//
+namespace Festispec.Models.Migrations
+{
+ using System.CodeDom.Compiler;
+ using System.Data.Entity.Migrations;
+ using System.Data.Entity.Migrations.Infrastructure;
+ using System.Resources;
+
+ [GeneratedCode("EntityFramework.Migrations", "6.3.0")]
+ public sealed partial class DropUnit : IMigrationMetadata
+ {
+ private readonly ResourceManager Resources = new ResourceManager(typeof(DropUnit));
+
+ string IMigrationMetadata.Id
+ {
+ get { return "202001131230471_DropUnit"; }
+ }
+
+ string IMigrationMetadata.Source
+ {
+ get { return null; }
+ }
+
+ string IMigrationMetadata.Target
+ {
+ get { return Resources.GetString("Target"); }
+ }
+ }
+}
diff --git a/src/Models/Migrations/202001091540426_EndDateNullable.cs b/src/Models/Migrations/202001131230471_DropUnit.cs
old mode 100644
new mode 100755
similarity index 51%
rename from src/Models/Migrations/202001091540426_EndDateNullable.cs
rename to src/Models/Migrations/202001131230471_DropUnit.cs
index d06cc41..0e048b6
--- a/src/Models/Migrations/202001091540426_EndDateNullable.cs
+++ b/src/Models/Migrations/202001131230471_DropUnit.cs
@@ -1,18 +1,18 @@
-namespace Festispec.Models.Migrations
-{
- using System;
- using System.Data.Entity.Migrations;
-
- public partial class EndDateNullable : DbMigration
- {
- public override void Up()
- {
- AlterColumn("dbo.PlannedEvents", "EndTime", c => c.DateTime());
- }
-
- public override void Down()
- {
- AlterColumn("dbo.PlannedEvents", "EndTime", c => c.DateTime(nullable: false));
- }
- }
-}
+namespace Festispec.Models.Migrations
+{
+ using System;
+ using System.Data.Entity.Migrations;
+
+ public partial class DropUnit : DbMigration
+ {
+ public override void Up()
+ {
+ DropColumn("dbo.Questions", "Unit");
+ }
+
+ public override void Down()
+ {
+ AddColumn("dbo.Questions", "Unit", c => c.Int());
+ }
+ }
+}
diff --git a/src/Models/Migrations/202001131230471_DropUnit.resx b/src/Models/Migrations/202001131230471_DropUnit.resx
new file mode 100755
index 0000000..11d6cd2
--- /dev/null
+++ b/src/Models/Migrations/202001131230471_DropUnit.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ dbo
+
+
\ No newline at end of file
diff --git a/src/Models/Migrations/202001131333256_CustomerNotes.Designer.cs b/src/Models/Migrations/202001131333256_CustomerNotes.Designer.cs
new file mode 100755
index 0000000..d9db96e
--- /dev/null
+++ b/src/Models/Migrations/202001131333256_CustomerNotes.Designer.cs
@@ -0,0 +1,29 @@
+//
+namespace Festispec.Models.Migrations
+{
+ using System.CodeDom.Compiler;
+ using System.Data.Entity.Migrations;
+ using System.Data.Entity.Migrations.Infrastructure;
+ using System.Resources;
+
+ [GeneratedCode("EntityFramework.Migrations", "6.3.0")]
+ public sealed partial class CustomerNotes : IMigrationMetadata
+ {
+ private readonly ResourceManager Resources = new ResourceManager(typeof(CustomerNotes));
+
+ string IMigrationMetadata.Id
+ {
+ get { return "202001131333256_CustomerNotes"; }
+ }
+
+ string IMigrationMetadata.Source
+ {
+ get { return null; }
+ }
+
+ string IMigrationMetadata.Target
+ {
+ get { return Resources.GetString("Target"); }
+ }
+ }
+}
diff --git a/src/Models/Migrations/202001131333256_CustomerNotes.cs b/src/Models/Migrations/202001131333256_CustomerNotes.cs
new file mode 100755
index 0000000..c06ab18
--- /dev/null
+++ b/src/Models/Migrations/202001131333256_CustomerNotes.cs
@@ -0,0 +1,18 @@
+namespace Festispec.Models.Migrations
+{
+ using System;
+ using System.Data.Entity.Migrations;
+
+ public partial class CustomerNotes : DbMigration
+ {
+ public override void Up()
+ {
+ AddColumn("dbo.Customers", "Notes", c => c.String(maxLength: 500));
+ }
+
+ public override void Down()
+ {
+ DropColumn("dbo.Customers", "Notes");
+ }
+ }
+}
diff --git a/src/Models/Migrations/202001131333256_CustomerNotes.resx b/src/Models/Migrations/202001131333256_CustomerNotes.resx
new file mode 100755
index 0000000..7b05a6a
--- /dev/null
+++ b/src/Models/Migrations/202001131333256_CustomerNotes.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ dbo
+
+
\ No newline at end of file
diff --git a/src/Models/Migrations/202001131421208_UnusedClasses.Designer.cs b/src/Models/Migrations/202001131421208_UnusedClasses.Designer.cs
new file mode 100755
index 0000000..cc8c534
--- /dev/null
+++ b/src/Models/Migrations/202001131421208_UnusedClasses.Designer.cs
@@ -0,0 +1,29 @@
+//
+namespace Festispec.Models.Migrations
+{
+ using System.CodeDom.Compiler;
+ using System.Data.Entity.Migrations;
+ using System.Data.Entity.Migrations.Infrastructure;
+ using System.Resources;
+
+ [GeneratedCode("EntityFramework.Migrations", "6.3.0")]
+ public sealed partial class UnusedClasses : IMigrationMetadata
+ {
+ private readonly ResourceManager Resources = new ResourceManager(typeof(UnusedClasses));
+
+ string IMigrationMetadata.Id
+ {
+ get { return "202001131421208_UnusedClasses"; }
+ }
+
+ string IMigrationMetadata.Source
+ {
+ get { return null; }
+ }
+
+ string IMigrationMetadata.Target
+ {
+ get { return Resources.GetString("Target"); }
+ }
+ }
+}
diff --git a/src/Models/Migrations/202001131421208_UnusedClasses.cs b/src/Models/Migrations/202001131421208_UnusedClasses.cs
new file mode 100755
index 0000000..488fbe2
--- /dev/null
+++ b/src/Models/Migrations/202001131421208_UnusedClasses.cs
@@ -0,0 +1,51 @@
+namespace Festispec.Models.Migrations
+{
+ using System;
+ using System.Data.Entity.Migrations;
+
+ public partial class UnusedClasses : DbMigration
+ {
+ public override void Up()
+ {
+ DropForeignKey("dbo.Questions", "Category_Id", "dbo.QuestionCategories");
+ DropForeignKey("dbo.Attachments", "Answer_Id", "dbo.Answers");
+ DropIndex("dbo.Questions", new[] { "Category_Id" });
+ DropIndex("dbo.Attachments", new[] { "Answer_Id" });
+ DropColumn("dbo.Questions", "Category_Id");
+ DropTable("dbo.QuestionCategories");
+ DropTable("dbo.Attachments");
+ }
+
+ public override void Down()
+ {
+ CreateTable(
+ "dbo.Attachments",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ FilePath = c.String(nullable: false),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ Answer_Id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.Id);
+
+ CreateTable(
+ "dbo.QuestionCategories",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ CategoryName = c.String(nullable: false, maxLength: 45),
+ CreatedAt = c.DateTime(nullable: false),
+ UpdatedAt = c.DateTime(nullable: false),
+ })
+ .PrimaryKey(t => t.Id);
+
+ AddColumn("dbo.Questions", "Category_Id", c => c.Int());
+ CreateIndex("dbo.Attachments", "Answer_Id");
+ CreateIndex("dbo.Questions", "Category_Id");
+ AddForeignKey("dbo.Attachments", "Answer_Id", "dbo.Answers", "Id", cascadeDelete: true);
+ AddForeignKey("dbo.Questions", "Category_Id", "dbo.QuestionCategories", "Id");
+ }
+ }
+}
diff --git a/src/Models/Migrations/202001131421208_UnusedClasses.resx b/src/Models/Migrations/202001131421208_UnusedClasses.resx
new file mode 100755
index 0000000..cdae42c
--- /dev/null
+++ b/src/Models/Migrations/202001131421208_UnusedClasses.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ dbo
+
+
\ No newline at end of file
diff --git a/src/Models/Migrations/202001141846014_InspectionInstructions.Designer.cs b/src/Models/Migrations/202001141846014_InspectionInstructions.Designer.cs
new file mode 100755
index 0000000..3783f29
--- /dev/null
+++ b/src/Models/Migrations/202001141846014_InspectionInstructions.Designer.cs
@@ -0,0 +1,29 @@
+//
+namespace Festispec.Models.Migrations
+{
+ using System.CodeDom.Compiler;
+ using System.Data.Entity.Migrations;
+ using System.Data.Entity.Migrations.Infrastructure;
+ using System.Resources;
+
+ [GeneratedCode("EntityFramework.Migrations", "6.3.0")]
+ public sealed partial class InspectionInstructions : IMigrationMetadata
+ {
+ private readonly ResourceManager Resources = new ResourceManager(typeof(InspectionInstructions));
+
+ string IMigrationMetadata.Id
+ {
+ get { return "202001141846014_InspectionInstructions"; }
+ }
+
+ string IMigrationMetadata.Source
+ {
+ get { return null; }
+ }
+
+ string IMigrationMetadata.Target
+ {
+ get { return Resources.GetString("Target"); }
+ }
+ }
+}
diff --git a/src/Models/Migrations/202001141846014_InspectionInstructions.cs b/src/Models/Migrations/202001141846014_InspectionInstructions.cs
new file mode 100755
index 0000000..9bff2c5
--- /dev/null
+++ b/src/Models/Migrations/202001141846014_InspectionInstructions.cs
@@ -0,0 +1,18 @@
+namespace Festispec.Models.Migrations
+{
+ using System;
+ using System.Data.Entity.Migrations;
+
+ public partial class InspectionInstructions : DbMigration
+ {
+ public override void Up()
+ {
+ AddColumn("dbo.PlannedEvents", "Instructions", c => c.String(maxLength: 1000));
+ }
+
+ public override void Down()
+ {
+ DropColumn("dbo.PlannedEvents", "Instructions");
+ }
+ }
+}
diff --git a/src/Models/Migrations/202001141846014_InspectionInstructions.resx b/src/Models/Migrations/202001141846014_InspectionInstructions.resx
new file mode 100755
index 0000000..060aafc
--- /dev/null
+++ b/src/Models/Migrations/202001141846014_InspectionInstructions.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ dbo
+
+
\ No newline at end of file
diff --git a/src/Models/Migrations/Configuration.cs b/src/Models/Migrations/Configuration.cs
index 0252255..f330791 100644
--- a/src/Models/Migrations/Configuration.cs
+++ b/src/Models/Migrations/Configuration.cs
@@ -3,13 +3,14 @@
using System.Collections.ObjectModel;
using System.Data.Entity.Migrations;
using System.Data.Entity.Validation;
+using System.Diagnostics.CodeAnalysis;
using Festispec.Models.Answers;
using Festispec.Models.EntityMapping;
using Festispec.Models.Questions;
-using Festispec.Models.Reports;
namespace Festispec.Models.Migrations
{
+ [ExcludeFromCodeCoverage]
internal sealed class Configuration : DbMigrationsConfiguration
{
public Configuration()
@@ -94,34 +95,7 @@ protected override void Seed(FestispecContext context)
};
context.Customers.AddOrUpdate(customer);
-
- var contactPerson = new ContactPerson
- {
- Id = 1,
- Customer = customer,
- Name = new FullName
- {
- First = "Niels",
- Last = "Kijf"
- },
- ContactDetails = new ContactDetails
- {
- // fake news
- EmailAddress = "nielskijf@q-dance.com"
- },
- Role = "MA"
- };
-
- context.ContactPersons.AddOrUpdate(contactPerson);
-
- var note = new ContactPersonNote
- {
- Id = 1,
- ContactPerson = contactPerson,
- Note = "Contact opgenomen met Niels over een inspectie. Voorstel volgt."
- };
-
- context.ContactPersonNotes.AddOrUpdate(note);
+
var now = DateTime.Now;
var festival = new Festival
{
@@ -155,8 +129,8 @@ protected override void Seed(FestispecContext context)
Festival = festival
};
- context.Questionnaires.AddOrUpdate(questionnaire);
-
+ context.Questionnaires.AddOrUpdate(questionnaire);
+
var employeeInspector = new Employee
{
Id = 2,
@@ -199,28 +173,19 @@ protected override void Seed(FestispecContext context)
Employee = employeeInspector,
Festival = festival,
EventTitle = "Inspection " + festival.FestivalName,
- StartTime = DateTime.Now,
- EndTime = new DateTime(2020, 7, 29, 5, 00, 00),
- Questionnaire = questionnaire,
+ StartTime = DateTime.Now.Date.Add(new TimeSpan(0, 10, 0, 0)),
+ EndTime = DateTime.Now.Date.Add(new TimeSpan(0, 20, 0, 0)),
+ Questionnaire = questionnaire,
};
context.PlannedInspections.AddOrUpdate(plannedInspection);
- var questionCategory = new QuestionCategory
- {
- Id = 1,
- CategoryName = "Vragen over veiligheid"
- };
-
- context.QuestionCategories.AddOrUpdate(questionCategory);
-
#region DrawQuestion
var drawQuestion = new DrawQuestion
{
Id = 1,
- Category = questionCategory,
PicturePath = "/Uploads/grasso.png",
Questionnaire = questionnaire,
Contents = "Wat is de kortste looproute van de mainstage naar de nooduitgang?"
@@ -244,7 +209,6 @@ protected override void Seed(FestispecContext context)
var multipleChoiceQuestion = new MultipleChoiceQuestion
{
Id = 2,
- Category = questionCategory,
Contents = "Zijn er evacuatieplannen zichtbaar opgesteld?",
Options = "Ja~Nee",
OptionCollection = new ObservableCollection
@@ -259,15 +223,7 @@ protected override void Seed(FestispecContext context)
Id = 2,
MultipleChoiceAnswerKey = 0,
PlannedInspection = plannedInspection,
- Question = multipleChoiceQuestion,
- Attachments = new List
- {
- new Attachment
- {
- Id = 1,
- FilePath = "/attachments/1.png"
- }
- }
+ Question = multipleChoiceQuestion
};
context.Answers.AddOrUpdate(multipleChoiceQuestionAnswer);
@@ -280,7 +236,6 @@ protected override void Seed(FestispecContext context)
var numericQuestion = new NumericQuestion
{
Id = 3,
- Category = questionCategory,
Contents = "Hoeveel EHBO-posten zijn er aanwezig?",
Minimum = 0,
Maximum = 99,
@@ -305,7 +260,6 @@ protected override void Seed(FestispecContext context)
var ratingQuestion = new RatingQuestion
{
Id = 4,
- Category = questionCategory,
Contents = "Op een schaal van 1 tot 5, is de beveiliging voldoende aanwezig op het terrein?",
HighRatingDescription = "Er is veel beveiliging",
LowRatingDescription = "Er is amper beveiliging",
@@ -330,7 +284,6 @@ protected override void Seed(FestispecContext context)
var stringQuestion = new StringQuestion
{
Id = 5,
- Category = questionCategory,
Contents = "Geef een korte samenvatting van het vluchtplan.",
IsMultiline = true,
Questionnaire = questionnaire
@@ -355,7 +308,6 @@ protected override void Seed(FestispecContext context)
var pictureQuestion = new UploadPictureQuestion
{
Id = 6,
- Category = questionCategory,
Contents = "Plaats een foto van de vluchtroutes op het calamiteitenplan.",
Questionnaire = questionnaire
};
@@ -378,7 +330,6 @@ protected override void Seed(FestispecContext context)
var referenceQuestion = new ReferenceQuestion
{
Id = 7,
- Category = questionCategory,
Question = pictureQuestion,
Contents = pictureQuestion.Contents,
Questionnaire = questionnaire
@@ -397,35 +348,6 @@ protected override void Seed(FestispecContext context)
#endregion
- var report = new Report
- {
- Id = 1,
- Festival = festival,
- ReportEntries = new List
- {
- new ReportTextEntry
- {
- Id = 1,
- Order = 1,
- Header = "Het vluchtplan",
- Question = stringQuestion,
- Text =
- "Het vluchtplan was uitgebreid en zit goed in elkaar, maar de inspecteurs hadden nog wel een aantal dingen op te merken."
- },
- new ReportGraphEntry
- {
- Id = 2,
- Order = 2,
- GraphType = GraphType.Pie,
- GraphXAxisType = GraphXAxisType.MultipleChoiceOption,
- Question = multipleChoiceQuestion
- }
- }
- };
-
- context.Reports.AddOrUpdate(report);
-
-
context.Employees.AddOrUpdate(employeeInspector);
@@ -501,4 +423,4 @@ private static Employee CreateEmployee(FestispecContext context, Address address
return employee;
}
}
-}
+}
diff --git a/src/Models/Models.csproj b/src/Models/Models.csproj
index a6df035..8ce270d 100644
--- a/src/Models/Models.csproj
+++ b/src/Models/Models.csproj
@@ -16,8 +16,17 @@
-
- 202001091540426_EndDateNullable.cs
+
+ 202001121533405_Initial.cs
+
+
+ 202001131333256_CustomerNotes.cs
+
+
+ 202001131421208_UnusedClasses.cs
+
+
+ 202001141846014_InspectionInstructions.cs
diff --git a/src/Models/PlannedInspection.cs b/src/Models/PlannedInspection.cs
index 1ab5127..989f9e0 100644
--- a/src/Models/PlannedInspection.cs
+++ b/src/Models/PlannedInspection.cs
@@ -20,5 +20,7 @@ public class PlannedInspection : PlannedEvent
[Required] public virtual Festival Festival { get; set; }
public virtual ICollection Answers { get; set; }
+
+ [MaxLength(1000)] public string Instructions { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Models/Questions/AnswerUnit.cs b/src/Models/Questions/AnswerUnit.cs
deleted file mode 100644
index 2136cf2..0000000
--- a/src/Models/Questions/AnswerUnit.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Festispec.Models.Questions
-{
- public enum AnswerUnit
- {
- People,
- Meters
- }
-}
\ No newline at end of file
diff --git a/src/Models/Questions/NumericQuestion.cs b/src/Models/Questions/NumericQuestion.cs
index 7b1a242..4961402 100644
--- a/src/Models/Questions/NumericQuestion.cs
+++ b/src/Models/Questions/NumericQuestion.cs
@@ -19,9 +19,6 @@ public NumericQuestion()
[Required] public int Maximum { get; set; }
- // bijv. Meter, personen, etc.
- public AnswerUnit Unit { get; set; }
-
public override GraphType GraphType => GraphType.Line;
}
}
\ No newline at end of file
diff --git a/src/Models/Questions/Question.cs b/src/Models/Questions/Question.cs
index 00f5f5a..08ebf9d 100644
--- a/src/Models/Questions/Question.cs
+++ b/src/Models/Questions/Question.cs
@@ -5,7 +5,7 @@
namespace Festispec.Models.Questions
{
- public abstract class Question : Entity, IAnswerable
+ public abstract class Question : Entity
{
public Question(string contents, Questionnaire questionnaire)
{
@@ -26,9 +26,6 @@ public Question()
[MaxLength(250)]
public string Contents { get; set; }
- public virtual QuestionCategory Category { get; set; }
-
-
public virtual Questionnaire Questionnaire { get; set; }
public abstract GraphType GraphType { get; }
diff --git a/src/Models/Questions/QuestionCategory.cs b/src/Models/Questions/QuestionCategory.cs
deleted file mode 100644
index e33c833..0000000
--- a/src/Models/Questions/QuestionCategory.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-
-namespace Festispec.Models.Questions
-{
- public class QuestionCategory : Entity
- {
- public int Id { get; set; }
-
- [Required] [MaxLength(45)] public string CategoryName { get; set; }
-
- public virtual ICollection Questions { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/Models/Questions/ReferenceQuestion.cs b/src/Models/Questions/ReferenceQuestion.cs
index 57f91ac..ba617d5 100644
--- a/src/Models/Questions/ReferenceQuestion.cs
+++ b/src/Models/Questions/ReferenceQuestion.cs
@@ -33,7 +33,7 @@ public Question Question
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
- if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
\ No newline at end of file
diff --git a/src/Models/Reports/Report.cs b/src/Models/Reports/Report.cs
deleted file mode 100644
index 30470eb..0000000
--- a/src/Models/Reports/Report.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-
-namespace Festispec.Models.Reports
-{
- public class Report : Entity
- {
- public int Id { get; set; }
-
- public virtual ICollection ReportEntries { get; set; }
-
- [Required] public virtual Festival Festival { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/Models/Reports/ReportEntry.cs b/src/Models/Reports/ReportEntry.cs
deleted file mode 100644
index 7356d8b..0000000
--- a/src/Models/Reports/ReportEntry.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-using Festispec.Models.Questions;
-
-namespace Festispec.Models.Reports
-{
- public abstract class ReportEntry : Entity
- {
- public int Id { get; set; }
-
- [Required] public int Order { get; set; }
-
- [Required] public virtual Question Question { get; set; }
-
- [Required] public virtual Report Report { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/Models/Reports/ReportGraphEntry.cs b/src/Models/Reports/ReportGraphEntry.cs
deleted file mode 100644
index f1353ed..0000000
--- a/src/Models/Reports/ReportGraphEntry.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace Festispec.Models.Reports
-{
- public class ReportGraphEntry : ReportEntry
- {
- public GraphXAxisType GraphXAxisType { get; set; }
-
- public GraphType GraphType { get; set; }
-
- public string XAxisLabel { get; set; }
-
- public string YAxisLabel { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/Models/Reports/ReportTextEntry.cs b/src/Models/Reports/ReportTextEntry.cs
deleted file mode 100644
index 1f9ab8f..0000000
--- a/src/Models/Reports/ReportTextEntry.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Festispec.Models.Reports
-{
- public class ReportTextEntry : ReportEntry
- {
- public string Header { get; set; }
-
- public string Text { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/UnitTests/AddressServiceTests.cs b/src/UnitTests/AddressServiceTests.cs
new file mode 100755
index 0000000..f4bb647
--- /dev/null
+++ b/src/UnitTests/AddressServiceTests.cs
@@ -0,0 +1,176 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Festispec.DomainServices.Services;
+using Festispec.Models;
+using Festispec.Models.EntityMapping;
+using Festispec.Models.Exception;
+using Festispec.UnitTests.Helpers;
+using Moq;
+using Xunit;
+
+namespace Festispec.UnitTests
+{
+ public class AddressServiceTests
+ {
+ public AddressServiceTests()
+ {
+ _dbMock = new Mock();
+ _modelMocks = new ModelMocks();
+ _dbMock.Setup(x => x.Customers).Returns(MockHelpers.CreateDbSetMock(_modelMocks.Customers).Object);
+ _dbMock.Setup(x => x.Addresses).Returns(MockHelpers.CreateDbSetMock(_modelMocks.Addresses).Object);
+ _dbMock.Setup(x => x.Festivals).Returns(MockHelpers.CreateDbSetMock(_modelMocks.Festivals).Object);
+ _dbMock.Setup(x => x.Employees).Returns(MockHelpers.CreateDbSetMock(_modelMocks.Employees).Object);
+
+ _addressService = new AddressService(_dbMock.Object);
+ }
+
+ private readonly Mock _dbMock;
+ private readonly ModelMocks _modelMocks;
+ private readonly AddressService _addressService;
+
+ public static IEnumerable