From 4caacba9117c647b1600080077eea16db03ca9b6 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Sun, 5 Mar 2017 16:32:30 +0100 Subject: [PATCH] mib --- ...ribute.cs => ActivitySettingsAttribute.cs} | 2 +- Yavsc/Controllers/DoController.cs | 27 +++++++++++++------ .../InvalidActivityModelException.cs | 15 +++++++++++ Yavsc/Models/ApplicationDbContext.cs | 8 +++++- .../Yavsc.Resources.YavscLocalisation.resx | 2 +- Yavsc/Startup/Startup.Workflow.cs | 18 +++++++------ Yavsc/Views/Do/Details.cshtml | 12 ++++----- 7 files changed, 59 insertions(+), 25 deletions(-) rename Yavsc/Attributes/{ActivitySettingAttribute.cs => ActivitySettingsAttribute.cs} (54%) create mode 100644 Yavsc/Exceptions/InvalidActivityModelException.cs diff --git a/Yavsc/Attributes/ActivitySettingAttribute.cs b/Yavsc/Attributes/ActivitySettingsAttribute.cs similarity index 54% rename from Yavsc/Attributes/ActivitySettingAttribute.cs rename to Yavsc/Attributes/ActivitySettingsAttribute.cs index 7b9b77bf..f91a7279 100644 --- a/Yavsc/Attributes/ActivitySettingAttribute.cs +++ b/Yavsc/Attributes/ActivitySettingsAttribute.cs @@ -2,7 +2,7 @@ using System; namespace Yavsc.Attributes { - public class ActivitySettingAttribute : Attribute + public class ActivitySettingsAttribute : Attribute { } diff --git a/Yavsc/Controllers/DoController.cs b/Yavsc/Controllers/DoController.cs index d26798cd..8b9488db 100644 --- a/Yavsc/Controllers/DoController.cs +++ b/Yavsc/Controllers/DoController.cs @@ -10,6 +10,7 @@ namespace Yavsc.Controllers using Microsoft.Extensions.Logging; using Models; using Models.Workflow; + using Yavsc.Exceptions; using Yavsc.ViewModels.Workflow; [Authorize] @@ -40,6 +41,7 @@ namespace Yavsc.Controllers // GET: Do/Details/5 public IActionResult Details(string id, string activityCode) { + if (id == null || activityCode == null) { return HttpNotFound(); @@ -51,16 +53,25 @@ namespace Yavsc.Controllers { return HttpNotFound(); } - ViewBag.HasConfigurableSettings = (userActivity.Does.SettingsClassName != null); - if (ViewBag.HasConfigurableSettings) - ViewBag.SettingsControllerName = Startup.ProfileTypes.Single(t=>t.FullName==userActivity.Does.SettingsClassName).Name; - _logger.LogWarning(userActivity.Does.SettingsClassName); - var dbset = _context.GetDbSet(userActivity.Does.SettingsClassName); - _logger.LogWarning(dbset.Any(i=>i.UserId == id).ToString()); - return View(new UserActivityViewModel { + + bool hasConfigurableSettings = (userActivity.Does.SettingsClassName != null); + if (hasConfigurableSettings) { + + ViewBag.ProfileType = Startup.ProfileTypes.Single(t=>t.FullName==userActivity.Does.SettingsClassName); + + + var dbset = _context.GetDbSet(userActivity.Does.SettingsClassName); + if (dbset == null) throw new InvalidWorkflowModelException($"pas de db set pour {userActivity.Does.SettingsClassName}, vous avez peut-être besoin de décorer votre propriété avec l'attribut [ActivitySettings]"); + return View(new UserActivityViewModel { Declaration = userActivity, HasSettings = dbset?.Any(ua=>ua.UserId==id) ?? false, - NeedsSettings = userActivity.Does.SettingsClassName != null + NeedsSettings = hasConfigurableSettings + } ); + } + return View(new UserActivityViewModel { + Declaration = userActivity, + HasSettings = false, + NeedsSettings = hasConfigurableSettings } ); } diff --git a/Yavsc/Exceptions/InvalidActivityModelException.cs b/Yavsc/Exceptions/InvalidActivityModelException.cs new file mode 100644 index 00000000..5b3d086a --- /dev/null +++ b/Yavsc/Exceptions/InvalidActivityModelException.cs @@ -0,0 +1,15 @@ +using System; +namespace Yavsc.Exceptions +{ + public class InvalidWorkflowModelException : Exception + { + public InvalidWorkflowModelException(string descr) : base(descr) + { + + } + public InvalidWorkflowModelException(string descr, Exception inner) : base(descr,inner) + { + + } + } +} \ No newline at end of file diff --git a/Yavsc/Models/ApplicationDbContext.cs b/Yavsc/Models/ApplicationDbContext.cs index 615060ac..dbaa6dfd 100644 --- a/Yavsc/Models/ApplicationDbContext.cs +++ b/Yavsc/Models/ApplicationDbContext.cs @@ -229,8 +229,14 @@ namespace Yavsc.Models public DbSet Instrument { get; set; } public DbSet DjSettings { get; set; } + + [ActivitySettings] public DbSet Instrumentation { get; set; } + + [ActivitySettings] public DbSet FormationSettings { get; set; } + + [ActivitySettings] public DbSet GeneralSettings { get; set; } public DbSet WorkflowProviders { get; set; } @@ -282,7 +288,7 @@ namespace Yavsc.Models public DbSet HairPrestation { get; set; } - [ActivitySetting] + [ActivitySettings] public DbSet BrusherProfile { get; set; } diff --git a/Yavsc/Resources/Yavsc.Resources.YavscLocalisation.resx b/Yavsc/Resources/Yavsc.Resources.YavscLocalisation.resx index 86725436..40a3db9a 100644 --- a/Yavsc/Resources/Yavsc.Resources.YavscLocalisation.resx +++ b/Yavsc/Resources/Yavsc.Resources.YavscLocalisation.resx @@ -398,7 +398,7 @@ {0} devrait être disponible pour ce rendez-vous Paramètres musicien (l'instrument) Paramètres Dj (le compte SoundCloud.com) - Paramètres formation (les partenaires) + Paramètres formation (les partenaires) Paramètres généraux (visibilité et présentation) Paramètres coiffeur: tarifs, disponibilité diff --git a/Yavsc/Startup/Startup.Workflow.cs b/Yavsc/Startup/Startup.Workflow.cs index 3b246bcc..f1193cf4 100644 --- a/Yavsc/Startup/Startup.Workflow.cs +++ b/Yavsc/Startup/Startup.Workflow.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Reflection; using Microsoft.AspNet.Builder; using Microsoft.Extensions.Logging; +using Yavsc.Exceptions; using Yavsc.Models; using YavscLib; @@ -38,22 +39,23 @@ namespace Yavsc } foreach (var propinfo in typeof(ApplicationDbContext).GetProperties()) { foreach (var attr in propinfo.CustomAttributes) { - if (attr.AttributeType.FullName == "Yavsc.Attributes.ActivitySettingAttribute") { + if (attr.AttributeType == typeof(Yavsc.Attributes.ActivitySettingsAttribute)) { // bingo if (typeof(IQueryable).IsAssignableFrom(propinfo.PropertyType)) { logger.LogInformation($"Paramêtres utilisateur déclaré: {propinfo.Name}"); UserSettings.Add(propinfo); - } else // Design time error { - logger.LogCritical( -$@"la propriété {propinfo.Name} du contexte de la -base de donnée déclare être un refuge de paramêtre utilisateur -du workflow, mais l'implemente pas l'interface IQueryable, -Elle est du type {propinfo.MemberType.GetType()}"); - throw new NotSupportedException("invalid ActivitySettingAttribute on property from dbcontext"); + var msg = +$@"La propriété {propinfo.Name} du contexte de la +base de donnée porte l'attribut [ActivitySetting], +mais n'implemente pas l'interface IQueryable +({propinfo.MemberType.GetType()})"; + logger.LogCritical(msg); + + throw new InvalidWorkflowModelException(msg); } } } diff --git a/Yavsc/Views/Do/Details.cshtml b/Yavsc/Views/Do/Details.cshtml index e6fbdad9..2ad8bc93 100644 --- a/Yavsc/Views/Do/Details.cshtml +++ b/Yavsc/Views/Do/Details.cshtml @@ -11,13 +11,13 @@
@SR["Activity"]
-
@Html.DisplayFor(m=>m.Declaration.Does) - @if (ViewBag.HasConfigurableSettings) { - +
@Html.DisplayFor(m=>m.Declaration.Does) + @if (Model.NeedsSettings) { + @SR[Model.Declaration.Does.SettingsClassName] - - NeedsSettings: @Model.NeedsSettings - HasSettings: @Model.HasSettings + @if (!Model.HasSettings) { + Non renseigné: Cliquez vite
ici pour positionner les
paramêtres de cette activité
+ }
}