display the /HairCut/Brush profile

vnext
Paul Schneider 6 years ago
parent cdc38236e0
commit e85b012184
27 changed files with 516 additions and 364 deletions

@ -5,6 +5,7 @@ using Yavsc.Helpers;
using Yavsc.Models; using Yavsc.Models;
using Yavsc.Models.Workflow; using Yavsc.Models.Workflow;
using Yavsc.Services; using Yavsc.Services;
using Yavsc.ViewModels.FrontOffice;
namespace Yavsc.ApiControllers namespace Yavsc.ApiControllers
{ {
@ -12,18 +13,21 @@ namespace Yavsc.ApiControllers
public class FrontOfficeApiController: Controller public class FrontOfficeApiController: Controller
{ {
ApplicationDbContext dbContext; ApplicationDbContext dbContext;
public FrontOfficeApiController(ApplicationDbContext context) private IBillingService billing;
public FrontOfficeApiController(ApplicationDbContext context, IBillingService billing)
{ {
dbContext = context; dbContext = context;
this.billing = billing;
} }
[HttpGet,Route("profiles/{actCode}")] [HttpGet("profiles/{actCode}")]
IEnumerable<PerformerProfile> Profiles (string actCode) IEnumerable<PerformerProfileViewModel> Profiles (string actCode)
{ {
return dbContext.ListPerformers(actCode); return dbContext.ListPerformers(billing, actCode);
} }
[HttpPost,Route("query/reject")] [HttpPost("query/reject")]
public IActionResult RejectQuery (string billingCode, long queryId) public IActionResult RejectQuery (string billingCode, long queryId)
{ {
if (billingCode==null) return HttpBadRequest("billingCode"); if (billingCode==null) return HttpBadRequest("billingCode");

@ -9,15 +9,19 @@ namespace Yavsc.Controllers
{ {
using Models; using Models;
using Yavsc.Helpers; using Yavsc.Helpers;
using Yavsc.Services;
[Produces("application/json")] [Produces("application/json")]
[Route("api/performers")] [Route("api/performers")]
public class PerformersApiController : Controller public class PerformersApiController : Controller
{ {
ApplicationDbContext dbContext; ApplicationDbContext dbContext;
public PerformersApiController(ApplicationDbContext context) private IBillingService billing;
public PerformersApiController(ApplicationDbContext context, IBillingService billing)
{ {
dbContext = context; dbContext = context;
this.billing = billing;
} }
/// <summary> /// <summary>
@ -56,7 +60,7 @@ namespace Yavsc.Controllers
[HttpGet("doing/{id}"),AllowAnonymous] [HttpGet("doing/{id}"),AllowAnonymous]
public IActionResult ListPerformers(string id) public IActionResult ListPerformers(string id)
{ {
return Ok(dbContext.ListPerformers(id)); return Ok(dbContext.ListPerformers(billing, id));
} }
} }
} }

@ -0,0 +1 @@
{"access_token":"ya29.GmnbBd3zsDsLPjI-ZkGhHLRiXI14NeNx7CJ5_XMlzu_1qOaLsrL-m3VWbKopO19yrnwK9z8CA6tv2QNxR3dkAU3Fsb29j6vcPsX3R7VNElHLCiwBF4w9jeNsA7fgw-0ydDjc3X78Oh_xlfM","token_type":"Bearer","expires_in":3600,"Issued":"2018-06-15T11:18:16.208+02:00","IssuedUtc":"2018-06-15T11:18:16.208+02:00"}

@ -0,0 +1 @@
{"access_token":"ya29.GmnbBfcZapScUHU2T2Bb2c8t5D4uUbsfrFRXxe05zYQTG22BmnHjeU33QeqJFSPxo8H5fk0EuN2YrhwZxa0FRjkdhOHOTtCwqUubfdN5tfIpXci3PKBBe9kAEI5LlLDxRMprak03VCyDwfg","token_type":"Bearer","expires_in":3599,"Issued":"2018-06-15T15:05:41.809+02:00","IssuedUtc":"2018-06-15T15:05:41.809+02:00"}

@ -125,7 +125,7 @@ namespace Yavsc.Controllers
}; };
model.HaveProfessionalSettings = _dbContext.Performers.Any(x => x.PerformerId == user.Id); model.HaveProfessionalSettings = _dbContext.Performers.Any(x => x.PerformerId == user.Id);
var usrActs = _dbContext.UserActivities.Include(a=>a.Does).Where(a=> a.UserId == user.Id).ToArray(); var usrActs = _dbContext.UserActivities.Include(a=>a.Does).Where(a=> a.UserId == user.Id).ToArray();
// TODO remember me who this magical a.Settings is built
var usrActToSet = usrActs.Where( a => ( a.Settings == null && a.Does.SettingsClassName != null )).ToArray(); var usrActToSet = usrActs.Where( a => ( a.Settings == null && a.Does.SettingsClassName != null )).ToArray();
model.HaveActivityToConfigure = usrActToSet .Count()>0; model.HaveActivityToConfigure = usrActToSet .Count()>0;
model.Activity = _dbContext.UserActivities.Include(a=>a.Does).Where(u=>u.UserId == user.Id).ToList(); model.Activity = _dbContext.UserActivities.Include(a=>a.Does).Where(u=>u.UserId == user.Id).ToList();

@ -68,7 +68,6 @@ namespace Yavsc.Controllers
Settings = settings, Settings = settings,
NeedsSettings = hasConfigurableSettings NeedsSettings = hasConfigurableSettings
}; };
logger.LogInformation(JsonConvert.SerializeObject(gift.Settings));
return View (gift); return View (gift);
} }

@ -24,8 +24,11 @@ namespace Yavsc.Controllers
ILogger _logger; ILogger _logger;
IStringLocalizer _SR; IStringLocalizer _SR;
private IBillingService _billing;
public FrontOfficeController(ApplicationDbContext context, public FrontOfficeController(ApplicationDbContext context,
UserManager<ApplicationUser> userManager, UserManager<ApplicationUser> userManager,
IBillingService billing,
ILoggerFactory loggerFactory, ILoggerFactory loggerFactory,
IStringLocalizer<Yavsc.Resources.YavscLocalisation> SR) IStringLocalizer<Yavsc.Resources.YavscLocalisation> SR)
{ {
@ -33,6 +36,7 @@ namespace Yavsc.Controllers
_userManager = userManager; _userManager = userManager;
_logger = loggerFactory.CreateLogger<FrontOfficeController>(); _logger = loggerFactory.CreateLogger<FrontOfficeController>();
_SR = SR; _SR = SR;
_billing = billing;
} }
public ActionResult Index() public ActionResult Index()
{ {
@ -61,7 +65,7 @@ namespace Yavsc.Controllers
throw new NotImplementedException("No Activity code"); throw new NotImplementedException("No Activity code");
} }
ViewBag.Activity = _context.Activities.FirstOrDefault(a => a.Code == id); ViewBag.Activity = _context.Activities.FirstOrDefault(a => a.Code == id);
var result = _context.ListPerformers(id); var result = _context.ListPerformers(_billing, id);
return View(result); return View(result);
} }
[AllowAnonymous] [AllowAnonymous]
@ -72,7 +76,7 @@ namespace Yavsc.Controllers
throw new NotImplementedException("No Activity code"); throw new NotImplementedException("No Activity code");
} }
ViewBag.Activity = _context.Activities.FirstOrDefault(a => a.Code == id); ViewBag.Activity = _context.Activities.FirstOrDefault(a => a.Code == id);
var result = _context.ListPerformers(id); var result = _context.ListPerformers(_billing, id);
return View(result); return View(result);
} }

@ -7,16 +7,32 @@ namespace Yavsc.Helpers
using Microsoft.Data.Entity; using Microsoft.Data.Entity;
using Models.Workflow; using Models.Workflow;
using Yavsc.Models; using Yavsc.Models;
using Yavsc.Services;
using Yavsc.ViewModels.FrontOffice;
public static class WorkflowHelpers public static class WorkflowHelpers
{ {
public static List<PerformerProfile> ListPerformers(this ApplicationDbContext context, string actCode) public static List<PerformerProfileViewModel> ListPerformers(this ApplicationDbContext context,
IBillingService billing,
string actCode)
{ {
return context.Performers var settings = billing.GetPerformersSettingsAsync(actCode).Result?.ToArray();
var actors = context.Performers
.Include(p=>p.Activity) .Include(p=>p.Activity)
.Include(p=>p.Performer) .Include(p=>p.Performer)
.Include(p=>p.Performer.Posts) .Include(p=>p.Performer.Posts)
.Include(p=>p.Performer.Devices) .Include(p=>p.Performer.Devices)
.Where(p => p.Active && p.Activity.Any(u=>u.DoesCode==actCode)).OrderBy( x => x.Rate ).ToList(); .Where(p => p.Active && p.Activity.Any(u=>u.DoesCode==actCode)).OrderBy( x => x.Rate )
.ToArray();
List<PerformerProfileViewModel> result = new List<PerformerProfileViewModel> ();
foreach (var perfer in actors)
{
var view = new PerformerProfileViewModel(perfer, actCode, settings?.FirstOrDefault(s => s.UserId == perfer.PerformerId));
result.Add(view);
}
return result;
} }
} }

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<!--
route name for the api controller used to tag the 'BlogPost' entity
-->
<data name="PerformerId"><value>Identifiant prestataire</value></data>
</root>

@ -45,17 +45,12 @@ namespace Yavsc.Services
public async Task<IQueryable<ISpecializationSettings>> GetPerformersSettingsAsync(string activityCode) public async Task<IQueryable<ISpecializationSettings>> GetPerformersSettingsAsync(string activityCode)
{ {
logger.LogDebug("searching for "+activityCode);
var activity = await DbContext.Activities.SingleAsync(a=>a.Code == activityCode); var activity = await DbContext.Activities.SingleAsync(a=>a.Code == activityCode);
logger.LogDebug(JsonConvert.SerializeObject(activity));
if (activity.SettingsClassName==null) return null; if (activity.SettingsClassName==null) return null;
var dbSetPropInfo = UserSettings.SingleOrDefault(s => s.PropertyType.GenericTypeArguments[0].FullName == activity.SettingsClassName); var dbSetPropInfo = UserSettings.SingleOrDefault(s => s.PropertyType.GenericTypeArguments[0].FullName == activity.SettingsClassName);
if (dbSetPropInfo == null) return null; if (dbSetPropInfo == null) return null;
// var settingType = dbSetPropInfo.PropertyType;
// var dbSetType = typeof(DbSet<>).MakeGenericType(new Type[] { settingType } );
// avec une info method Remove et Update, ça le ferait ...
return (IQueryable<ISpecializationSettings>) dbSetPropInfo.GetValue(DbContext); return (IQueryable<ISpecializationSettings>) dbSetPropInfo.GetValue(DbContext);
} }

@ -0,0 +1,40 @@
using System;
using System.Linq;
using Yavsc.Models;
using Yavsc.Models.Workflow;
namespace Yavsc.ViewModels.FrontOffice
{
public class PerformerProfileViewModel
{
public string UserName { get; set; }
public string PerformerId { get; set; }
public bool Active { get; set; }
public bool AcceptNotifications { get; set; }
public bool AcceptPublicContact { get; set; }
public UserActivity Context { get; set; }
public object Settings { get; set; }
public UserActivity[] Extra { get; set; }
public string WebSite { get; set; }
public string SettingsClassName { get; set; }
public PerformerProfileViewModel(PerformerProfile profile, string activityCode, object settings)
{
UserName = profile.Performer.UserName;
PerformerId = profile.PerformerId;
Active = profile.Active;
AcceptNotifications = profile.AcceptNotifications;
AcceptPublicContact = profile.AcceptPublicContact;
Context = profile.Activity.FirstOrDefault(a => a.DoesCode == activityCode);
SettingsClassName = Context.Does.SettingsClassName;
Settings = settings;
WebSite = profile.WebSite;
Extra = profile.Activity.Where(a => a.DoesCode != activityCode).ToArray();
}
}
}

@ -9,332 +9,8 @@
<hr /> <hr />
@if (Model!=null) { @if (Model!=null) {
<fieldset> @Html.DisplayFor(model => model)
<legend>Disponibilités</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Schedule)
</dt>
<dd>
@Html.DisplayFor(model => model.Schedule)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ActionDistance)
</dt>
<dd>
@Html.DisplayFor(model => model.ActionDistance)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs divers</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.ShampooPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShampooPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.CarePrice)
</dt>
<dd>
@Html.DisplayFor(model => model.CarePrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.FlatFeeDiscount)
</dt>
<dd>
@Html.DisplayFor(model => model.FlatFeeDiscount)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs balayages</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LongBalayagePrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongBalayagePrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfBalayagePrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfBalayagePrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortBalayagePrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortBalayagePrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs défrisage</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.HalfDefrisPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfDefrisPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.LongDefrisPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongDefrisPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortDefrisPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortDefrisPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs mèches</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.HalfMechPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfMechPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.LongMechPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongMechPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortMechPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortMechPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs coupes</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.WomenHalfCutPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.WomenHalfCutPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.WomenLongCutPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.WomenLongCutPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.WomenShortCutPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.WomenShortCutPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ManCutPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ManCutPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.KidCutPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.KidCutPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs couleurs</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LongColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongColorPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfColorPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortColorPrice)
</dd>
</dl>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.ShortMultiColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortMultiColorPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfMultiColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfMultiColorPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.LongMultiColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongMultiColorPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs burshing</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LongBrushingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongBrushingPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfBrushingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfBrushingPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortBrushingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortBrushingPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs permanentes</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LongPermanentPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongPermanentPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfPermanentPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfPermanentPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortPermanentPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortPermanentPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs mise en plis</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LongFoldingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongFoldingPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfFoldingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfFoldingPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortFoldingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortFoldingPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Spécialités homme</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.ManBrushPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ManBrushPrice)
</dd>
</dl>
</fieldset>
<p> <p>
<a asp-action="Edit" >@SR["Edit"]</a> <a asp-action="Edit" >@SR["Edit"]</a>
<a asp-action="Delete" asp-route-id="@Model.UserId">@SR["Delete"]</a> <a asp-action="Delete" asp-route-id="@Model.UserId">@SR["Delete"]</a>

@ -1,4 +1,4 @@
@model IEnumerable<PerformerProfile> @model IEnumerable<Yavsc.ViewModels.FrontOffice.PerformerProfileViewModel>
@{ @{
ViewData["Title"] = (ViewBag.Activity?.Name ?? SR["Any"]) ; ViewData["Title"] = (ViewBag.Activity?.Name ?? SR["Any"]) ;
@ -11,9 +11,9 @@
@Html.DisplayFor(m=>profile) @Html.DisplayFor(m=>profile)
<a asp-controller="HairCutCommand" asp-action="HairCut" <a asp-controller="HairCutCommand" asp-action="HairCut"
asp-route-activityCode="@ViewBag.Activity.Code" asp-route-activityCode="@ViewBag.Activity.Code"
asp-route-performerId="@profile.Performer.Id" asp-route-performerId="@profile.PerformerId"
class="btn btn-success"> class="btn btn-success">
@SR["Proposer un rendez-vous à"] @profile.Performer.UserName @SR["Proposer un rendez-vous à"] @profile.UserName
</a> </a>
} }

@ -1,4 +1,4 @@
@model IEnumerable<PerformerProfile> @model IEnumerable<PerformerProfileViewModel>
@{ @{
ViewData["Title"] = (ViewBag.Activity?.Name ?? SR["Any"]) ; ViewData["Title"] = (ViewBag.Activity?.Name ?? SR["Any"]) ;
@ -11,7 +11,7 @@
@Html.DisplayFor(m=>profile) @Html.DisplayFor(m=>profile)
<a class="btn btn-success" asp-controller="Command" asp-action="Create" asp-route-proId="@profile.PerformerId" <a class="btn btn-success" asp-controller="Command" asp-action="Create" asp-route-proId="@profile.PerformerId"
asp-route-billingCode="Profiles" asp-route-activityCode="@ViewBag.Activity.Code" > asp-route-billingCode="Profiles" asp-route-activityCode="@ViewBag.Activity.Code" >
@SR["Proposer un rendez-vous à"] @profile.Performer.UserName @SR["Proposer un rendez-vous à"] @profile.UserName
</a> </a>
} }

@ -140,10 +140,10 @@ Vous êtes sur le site de commande en coiffure à domicile de Soraya Boudjouraf,
un as de la coiffure, qui oeuvre en région parisienne. un as de la coiffure, qui oeuvre en région parisienne.
En validant un formulaire de commande ici, c'est à elle que vous notifiez votre demande. En validant un formulaire de commande ici, c'est à elle que vous notifiez votre demande.
Laissez lui votre numéro de téléphone, et des détails sur votre demande lors de votre premier contact,
elle vous rappelera si besoin. Vous pouvez ![lui laisser votre numéro de téléphone](/HairCutCommand/HairCut?activityCode=Brush&performerId=1bd841ab-c305-4971-940d-7ddca818310c)
et/ou des détails sur votre demande,
</markdown> elle vous rappelera.</markdown>
</environment> </environment>
<environment names="Development"> <environment names="Development">

@ -1,5 +1,5 @@
@model ShortUserInfo @model ShortUserInfo
<div style="display: inline-block;"> <div style="display: inline-block;">
<img src="@Model.Avatar" alt="@Model.UserName" class="smalltofhol" /> <img src="@Model.Avatar" class="smalltofhol" />
@Model.UserName @Model.UserName
</div> </div>

@ -0,0 +1,15 @@
@model Yavsc.ViewModels.FrontOffice.PerformerProfileViewModel
<div class="performer @(Model.Active?"active":"inactive")">
@Html.DisplayFor(m=>m.UserName)
@{ await Html.RenderPartialAsync(Model.SettingsClassName,Model.Settings); }
@if (Model.WebSite!=null) {
<a target="yaext" href="@Model.WebSite" class="btn btn-info">@SR["WebSite"]: @Model.WebSite</a>
}
<environment names="Development">
@Html.Raw(JsonConvert.SerializeObject(Model.Context.Settings))
</environment>
</div>

@ -0,0 +1,327 @@
@model Yavsc.Models.Haircut.BrusherProfile
<fieldset>
<legend>Disponibilités</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Schedule)
</dt>
<dd>
@Html.DisplayFor(model => model.Schedule)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ActionDistance)
</dt>
<dd>
@Html.DisplayFor(model => model.ActionDistance)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs divers</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.ShampooPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShampooPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.CarePrice)
</dt>
<dd>
@Html.DisplayFor(model => model.CarePrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.FlatFeeDiscount)
</dt>
<dd>
@Html.DisplayFor(model => model.FlatFeeDiscount)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs balayages</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LongBalayagePrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongBalayagePrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfBalayagePrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfBalayagePrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortBalayagePrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortBalayagePrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs défrisage</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.HalfDefrisPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfDefrisPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.LongDefrisPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongDefrisPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortDefrisPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortDefrisPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs mèches</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.HalfMechPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfMechPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.LongMechPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongMechPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortMechPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortMechPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs coupes</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.WomenHalfCutPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.WomenHalfCutPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.WomenLongCutPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.WomenLongCutPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.WomenShortCutPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.WomenShortCutPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ManCutPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ManCutPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.KidCutPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.KidCutPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs couleurs</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LongColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongColorPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfColorPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortColorPrice)
</dd>
</dl>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.ShortMultiColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortMultiColorPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfMultiColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfMultiColorPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.LongMultiColorPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongMultiColorPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs burshing</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LongBrushingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongBrushingPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfBrushingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfBrushingPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortBrushingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortBrushingPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs permanentes</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LongPermanentPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongPermanentPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfPermanentPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfPermanentPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortPermanentPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortPermanentPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Tarifs mise en plis</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LongFoldingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.LongFoldingPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.HalfFoldingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.HalfFoldingPrice)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ShortFoldingPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ShortFoldingPrice)
</dd>
</dl>
</fieldset>
<fieldset>
<legend>Spécialités homme</legend>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.ManBrushPrice)
</dt>
<dd>
@Html.DisplayFor(model => model.ManBrushPrice)
</dd>
</dl>
</fieldset>

@ -1,10 +1,14 @@
@using Microsoft.AspNet.Authorization;
@using Microsoft.AspNet.Hosting;
@using Microsoft.AspNet.Identity; @using Microsoft.AspNet.Identity;
@using Microsoft.AspNet.Mvc; @using Microsoft.AspNet.Mvc;
@using Microsoft.Extensions.Localization;
@using Microsoft.AspNet.Mvc.Localization; @using Microsoft.AspNet.Mvc.Localization;
@using Microsoft.AspNet.Authorization; @using Microsoft.Extensions.Localization;
@using Microsoft.Extensions.OptionsModel; @using Microsoft.Extensions.OptionsModel;
@using Microsoft.Extensions.PlatformAbstractions;
@using Newtonsoft.Json;
@using System.Security.Claims; @using System.Security.Claims;
@using System.Web.Optimization; @using System.Web.Optimization;
@using Yavsc; @using Yavsc;
@ -12,6 +16,7 @@
@using Yavsc.Models; @using Yavsc.Models;
@using Yavsc.Models.Access; @using Yavsc.Models.Access;
@using Yavsc.Models.Auth; @using Yavsc.Models.Auth;
@using Yavsc.Models.Google; @using Yavsc.Models.Google;
@using Yavsc.Models.Messaging; @using Yavsc.Models.Messaging;
@using Yavsc.Models.Musical; @using Yavsc.Models.Musical;
@ -19,26 +24,26 @@
@using Yavsc.Models.Market; @using Yavsc.Models.Market;
@using Yavsc.Models.Billing; @using Yavsc.Models.Billing;
@using Yavsc.Models.Workflow; @using Yavsc.Models.Workflow;
@using Yavsc.Models.Relationship @using Yavsc.Models.Relationship;
@using Yavsc.Models.Drawing; @using Yavsc.Models.Drawing;
@using Yavsc.Models.Haircut; @using Yavsc.Models.Haircut;
@using Yavsc.Models.Payment; @using Yavsc.Models.Payment;
@using Yavsc.Models.Calendar; @using Yavsc.Models.Calendar;
@using Yavsc.Models.Google.Calendar @using Yavsc.Models.Google.Calendar;
@using Yavsc.Billing; @using Yavsc.Billing;
@using Yavsc.Models.Blog; @using Yavsc.Models.Blog;
@using Yavsc.ViewModels; @using Yavsc.ViewModels;
@using Yavsc.ViewModels.Account; @using Yavsc.ViewModels.Account;
@using Yavsc.ViewModels.Blogspot;
@using Yavsc.ViewModels.Administration;
@using Yavsc.ViewModels.Auth;
@using Yavsc.ViewModels.Manage; @using Yavsc.ViewModels.Manage;
@using Yavsc.ViewModels.Calendar; @using Yavsc.ViewModels.Calendar;
@using Yavsc.ViewModels.Auth; @using Yavsc.ViewModels.FrontOffice;
@using Yavsc.ViewModels.Administration;
@using Yavsc.ViewModels.Relationship; @using Yavsc.ViewModels.Relationship;
@using Yavsc.ViewModels.Workflow; @using Yavsc.ViewModels.Workflow;
@using Yavsc.ViewModels.Blogspot;
@using Microsoft.AspNet.Hosting;
@using Microsoft.Extensions.PlatformAbstractions;
@using PayPal.PayPalAPIInterfaceService.Model; @using PayPal.PayPalAPIInterfaceService.Model;

Binary file not shown.
Loading…