Fixe la recherche d'un préstataire.
* Makefile: Fixe: ne pas déployer sans hôte de destination Ajoute: le déployement de tous des sites en prod, avec la cible `syncall` * NpgsqlContentProvider.cs: Renseigne le code APE et la côte à la création du profile préstataire * SkillController.cs: * FrontOfficeController.cs: * NpgsqlSkillProvider.cs: * SimpleBookingQuery.cs: * AuthentificatedSkillRating.cs: refabrication * ResultPages.cs: * Title.aspx: * YavscHelpers.cs: ajoute une classe css au bloc de liens vers les autres pages de resultat * style.css: mise en forme du code * style.css: du style * Booking.aspx: * FrontOfficeController.cs: Modifie la recherche des prestataire, pour qu'un resultat soit donné dès qu'un utilisateur est déclaré prestataire. * PerformerProfile.cs: doc xml * LocalizedText.resx: * LocalizedText.fr.resx: * LocalizedText.Designer.cs: * LocalizedText.fr.Designer.cs: internationalisation * Profile.cs: Décore la valeur de profile "GoogleRegId" * SkillEntity.cs: refabrication pour l'instant inutile ... * SkillManager.cs: présente à l'espace de travail la nouvelle methode de recherche d'un préstataire * SkillProvider.cs: définit la nouvelle methode de recherche d'un préstataire * WorkFlowManager.cs: présente à l'espace de travail une nouvelle methode de recherche d'un préstataire, renvoyant toute l'information relative à chaque prestataire listé. * YavscModel.csproj: refabrication des cotes de compétences
This commit is contained in:
parent
a99232ba2b
commit
dbcbf8b318
30 changed files with 373 additions and 155 deletions
|
|
@ -202,7 +202,7 @@ namespace Yavsc.ApiControllers
|
|||
/// </summary>
|
||||
/// <param name="rate">Skill rating.</param>
|
||||
[Authorize()]
|
||||
public void RateSkill (SkillRating rate) {
|
||||
public void RateSkill (AuthentificatedSkillRating rate) {
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ namespace Yavsc.ApiControllers
|
|||
/// </summary>
|
||||
/// <param name="rate">Skill rating.</param>
|
||||
[Authorize()]
|
||||
public void RateSkill (SkillRating rate) {
|
||||
public void RateSkill (AuthentificatedSkillRating rate) {
|
||||
SkillManager.RateSkill(User.Identity.Name,rate);
|
||||
}
|
||||
|
||||
|
|
@ -91,9 +91,11 @@ namespace Yavsc.ApiControllers
|
|||
/// Finds the performer.
|
||||
/// </summary>
|
||||
/// <returns>The performer.</returns>
|
||||
/// <param name="skillIds">Skill identifiers.</param>
|
||||
public string [] FindPerformer (long []skillIds){
|
||||
return SkillManager.FindPerformer(skillIds);
|
||||
/// <param name="MEACode">MEA Code.</param>
|
||||
/// <param name="skills">Skill ratings.</param>
|
||||
public string [] FindPerformer (string MEACode, SkillRating []skills)
|
||||
{
|
||||
return SkillManager.FindPerformer(MEACode, skills);
|
||||
}
|
||||
/// <summary>
|
||||
/// Deletes the skill.
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ body {
|
|||
background-color: rgba(20,20,20,.8);
|
||||
color: yellow;
|
||||
}
|
||||
|
||||
.rate:hover { border-color: green;
|
||||
background-color:rgba(30,0,124,0.9); }
|
||||
|
||||
|
|
@ -181,6 +182,7 @@ header h1, header a , .actionlink, .menuitem, a { padding:.5em;}
|
|||
.usertitleref{
|
||||
padding:.3em;
|
||||
}
|
||||
|
||||
.bshpanel { cursor:zoom-in; }
|
||||
|
||||
.c2 { display:initial; }
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ body.loading .modal {
|
|||
border-radius:1em;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
padding:.2em;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
header {
|
||||
|
|
@ -273,7 +275,7 @@ input, select, textarea {
|
|||
padding:5px; margin:5px;
|
||||
background-color: rgba(0,0,40,.8);
|
||||
}
|
||||
.skillname {
|
||||
.skillname, .performer, .usercard, .pagelink {
|
||||
padding:.5em;
|
||||
margin:.25em;
|
||||
max-width: 24em;
|
||||
|
|
@ -282,6 +284,7 @@ input, select, textarea {
|
|||
border-radius:1em;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
font-size: large;
|
||||
}
|
||||
|
||||
.input-validation-error { border: solid 1px red; background-color: rgba(180,256,256,.5); }
|
||||
|
|
|
|||
|
|
@ -1,3 +1,21 @@
|
|||
2015-11-30 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* SkillController.cs:
|
||||
* FrontOfficeController.cs: refabrication
|
||||
|
||||
* style.css: mise en forme du code
|
||||
|
||||
* style.css: du style
|
||||
|
||||
* Booking.aspx:
|
||||
* FrontOfficeController.cs: Modifie la recherche des
|
||||
prestataire, pour qu'un resultat soit donné dès qu'un
|
||||
utilisateur est déclaré prestataire.
|
||||
|
||||
* Title.aspx:
|
||||
* YavscHelpers.cs: ajoute une classe css au bloc de liens vers
|
||||
les autres pages de resultat
|
||||
|
||||
2015-11-28 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* p8-av4.xxs.jpg:
|
||||
|
|
|
|||
|
|
@ -321,7 +321,7 @@ namespace Yavsc.Controllers
|
|||
// actually performed via the Web API :-°
|
||||
// else if (ModelState.IsValid) {}
|
||||
var usp = SkillManager.GetUserSkills (id);
|
||||
var skills = SkillManager.FindSkill ("%");
|
||||
var skills = SkillManager.FindSkill ("%",usp.MEACode);
|
||||
ViewData ["SiteSkills"] = skills;
|
||||
return View (usp);
|
||||
}
|
||||
|
|
@ -346,7 +346,8 @@ namespace Yavsc.Controllers
|
|||
var result = new List<PerformerProfile> ();
|
||||
|
||||
foreach (string meacode in model.MEACodes) {
|
||||
foreach (PerformerProfile profile in WorkFlowManager.FindPerformer(meacode)) {
|
||||
foreach (PerformerProfile profile in WorkFlowManager.FindPerformer(meacode,null)) {
|
||||
if (profile.HasCalendar())
|
||||
try {
|
||||
var events = ProfileBase.Create (profile.UserName).GetEvents (model.StartDate, model.EndDate);
|
||||
if (events.items.Length == 0)
|
||||
|
|
@ -376,25 +377,34 @@ namespace Yavsc.Controllers
|
|||
/// <summary>
|
||||
/// Booking the specified model.
|
||||
/// </summary>
|
||||
/// <param name="MEACode">MEA Code.</param>
|
||||
/// <param name="model">Model.</param>
|
||||
public ActionResult Booking (SimpleBookingQuery model)
|
||||
{
|
||||
|
||||
// assert (model.MEACode!=null), since it's the required part of the route data
|
||||
var needs = SkillManager.FindSkill ("%", model.MEACode);
|
||||
var specification = new List<SkillRating> ();
|
||||
ViewData ["Needs"] = needs;
|
||||
if (model.Need != null) {
|
||||
if (model.Need != "none")
|
||||
foreach (string specitem in model.Need.Split(',')) {
|
||||
string[] specvals = specitem.Split (' ');
|
||||
specification.Add (new SkillRating () { Id = long.Parse (specvals [0]),
|
||||
Rate = int.Parse (specvals [1])
|
||||
});
|
||||
}
|
||||
}
|
||||
// In order to present this form
|
||||
// with no need selected and without
|
||||
// validation error display,
|
||||
// we only check the need here, not at validation time.
|
||||
// Although, the need is indeed cruxial requirement,
|
||||
// but we already have got a MEA code
|
||||
if (ModelState.IsValid)
|
||||
if (model.Needs != null) {
|
||||
if (ModelState.IsValid && model.Need!=null) {
|
||||
var result = new List<PerformerAvailability> ();
|
||||
foreach (PerformerProfile profile in WorkFlowManager.FindPerformer(model.MEACode)) {
|
||||
foreach (PerformerProfile profile in WorkFlowManager.FindPerformer(model.MEACode,specification.ToArray()))
|
||||
if (profile.HasCalendar ()) {
|
||||
try {
|
||||
var events = ProfileBase.Create (profile.UserName)
|
||||
.GetEvents (
|
||||
var events = ProfileBase.Create (profile.UserName).GetEvents (
|
||||
model.PreferedDate.Date,
|
||||
model.PreferedDate.AddDays (1).Date);
|
||||
// TODO replace (events.items.Length == 0)
|
||||
|
|
@ -406,17 +416,17 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
} else
|
||||
result.Add (profile.CreateAvailability (model.PreferedDate, false));
|
||||
|
||||
}
|
||||
return View ("Performers", result.ToArray ());
|
||||
} else {
|
||||
// A first Get
|
||||
var needs = SkillManager.FindSkill ("%", model.MEACode);
|
||||
ViewData ["Needs"] = needs;
|
||||
model.Needs = needs.Select (
|
||||
x => string.Format ("{0}:{1}", x.Id, x.Rate)).ToArray ();
|
||||
}
|
||||
if (model.Need==null) {
|
||||
// A first Get, or no skill available
|
||||
model.Need =
|
||||
string.Join(",", needs.Select (x => string.Format ("{0}:{1}", x.Id, x.Rate)).ToArray ());
|
||||
if (string.IsNullOrWhiteSpace (model.Need))
|
||||
model.Need = "none";
|
||||
|
||||
}
|
||||
|
||||
|
||||
var activity = WorkFlowManager.GetActivity (model.MEACode);
|
||||
ViewData ["Activity"] = activity;
|
||||
ViewData ["Title"] = activity.Title;
|
||||
|
|
|
|||
|
|
@ -299,23 +299,33 @@ namespace Yavsc.Helpers
|
|||
/// </summary>
|
||||
/// <returns>The page links.</returns>
|
||||
/// <param name="helper">Helper.</param>
|
||||
/// <param name="ResultCount">Result count.</param>
|
||||
/// <param name="PageSize">Page size.</param>
|
||||
/// <param name="PageIndex">Page index.</param>
|
||||
/// <param name="PageSize">Page size.</param>
|
||||
/// <param name="ResultCount">Result count.</param>
|
||||
/// <param name="args">Arguments.</param>
|
||||
/// <param name="pagesLabel">Pages label.</param>
|
||||
/// <param name="singlePage">Single page.</param>
|
||||
/// <param name="none">None.</param>
|
||||
/// <param name="cssClass">Css class.</param>
|
||||
public static IHtmlString RenderPageLinks (
|
||||
this HtmlHelper helper,
|
||||
int PageIndex, int PageSize, int ResultCount,
|
||||
string args="?PageIndex={0}",
|
||||
string pagesLabel="Pages: ", string singlePage="",
|
||||
string none="néant"
|
||||
string none="néant", string cssClass = "pagelink"
|
||||
)
|
||||
{
|
||||
StringWriter strwr = new StringWriter ();
|
||||
HtmlTextWriter writer = new HtmlTextWriter(strwr);
|
||||
|
||||
if (PageSize <= 0)
|
||||
PageSize = 0;
|
||||
if (ResultCount > 0 && ResultCount > PageSize ) {
|
||||
int pageCount = ((ResultCount-1) / PageSize) + 1;
|
||||
if ( pageCount > 1 ) {
|
||||
|
||||
if (cssClass!=null)
|
||||
writer.AddAttribute ("class", cssClass);
|
||||
writer.RenderBeginTag ("div");
|
||||
writer.WriteEncodedText (pagesLabel);
|
||||
for (int pi = (PageIndex < 5) ? 0 : PageIndex - 5; pi < pageCount && pi < PageIndex + 5; pi++) {
|
||||
if (PageIndex == pi)
|
||||
|
|
@ -329,6 +339,7 @@ namespace Yavsc.Helpers
|
|||
writer.RenderEndTag ();
|
||||
writer.Write (" ");
|
||||
}
|
||||
writer.RenderEndTag ();
|
||||
}
|
||||
else {
|
||||
writer.Write (singlePage);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ if (((int) ViewData["ResultCount"]) > ((int) ViewData["PageSize"])) {
|
|||
rp1.PageIndex = (int) ViewData["PageIndex"];
|
||||
rp1.PageSize = (int) ViewData["PageSize"];
|
||||
%><aside><form runat="server" id="form1">
|
||||
<yavsc:ResultPages id="rp1" Action = "?pageIndex={0}" runat="server">
|
||||
<yavsc:ResultPages id="rp1" Action = "?pageIndex={0}" CssClass="pagelink" runat="server">
|
||||
<None><i>Pas de contenu</i></None>
|
||||
</yavsc:ResultPages>
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -30,13 +30,14 @@
|
|||
<%= Html.Hidden("MEACode") %>
|
||||
<fieldset>
|
||||
<legend><%= Html.Translate("YourNeed") %></legend>
|
||||
<input type="hidden" name="Needs" id="Needs" value="">
|
||||
<ul>
|
||||
<% foreach (var need in (SkillEntity[])(ViewData["Needs"])) { %>
|
||||
<li><%= need.Name %> <%= Html.Partial("RateSkillControl", need)%></li>
|
||||
<input type="hidden" name="Need" id="Need" value="">
|
||||
<ul >
|
||||
<% if (ViewData ["Needs"]!=null)
|
||||
foreach (var need in (SkillEntity[])(ViewData ["Needs"])) { %>
|
||||
<li class="skillname"><%= need.Name %> <%= Html.Partial("RateSkillControl", need)%></li>
|
||||
<% } %>
|
||||
</ul>
|
||||
<%= Html.ValidationMessageFor(model=>model.Needs) %>
|
||||
<%= Html.ValidationMessageFor(model=>model.Need) %>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend><%= Html.Translate("PerformanceDate") %></legend>
|
||||
|
|
@ -46,12 +47,10 @@ Intervention souhaitée le
|
|||
</fieldset>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
var needs = <%= Ajax.JSonString((SkillEntity[])(ViewData["Needs"])) %>;
|
||||
var fneeds = needs.map( function (need) {
|
||||
return need.Id+' '+need.Rate; } );
|
||||
|
||||
fneeds.forEach(function(elt) { console.log(Yavsc.dumpprops(elt)) } );
|
||||
$('#Needs').val(fneeds);
|
||||
var needs = <%= Ajax.JSonString((SkillEntity[])(ViewData ["Needs"])) %>;
|
||||
var fneeds = [];
|
||||
needs.forEach(function(elt) { fneeds.push (''+elt.Id+' '+elt.Rate); } );
|
||||
if (needs.length>0) $('#Need').val(fneeds); else $('#Need').val('none');
|
||||
$('[data-type="rate-site-skill"]').rate({jsTarget: function (rating)
|
||||
{
|
||||
// console.log(Yavsc.dumpprops(rating));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue