le theme, WIP les cercles

* input.css: refabrication des feuilles de style : la feuille des
  champs de formulaire.

* CircleMember.cs: un membre de cercle est un nom d'utilisateur
  associé au cercle d'un autre utilisateur.

* ICircle.cs: Définit l'interface d'un cercle:
un cercle est identifié par un entier long,
il a un possesseur.

* Makefile: utilise le fichier de conf généré pour débugger.

* NpgsqlContentProvider.cs: bug fix

* README.md: maj priorités

* AccountController.cs: implémente une méthode de l'API pour ajouter
  un utilisateur au cercle

* links.css: Corrige la couleur du boutton de validation des
  formulaire de classe `ActionLink`

* style.css: refabrication: importe la nouvelle feuille de style des
  champs de formulaires

* style.css: nettoyage du thème sombre

* style.css: nettoyage + section principale (`main`) centré

* FrontOfficeController.cs: Repositionne la route vers le devis à
  do/Estimate

* YavscHelpers.cs: corrige ma ré-écriture des helpers html ActionLink

* App.master: formattage du code source

* AppAdmin.master: synchronisation avec la page maître,
beaucoup de changements dans cette page maître pour les
  administrateurs:
* prend en charge les côtes d'article
* utilise les fontes de caractère de la page pour les lien action
* prend en charge les zones de formulaire masquable.

* NoLogin.master: synchronisation avec la page maître

* Performer.ascx: WIP permet d'ajouter un préstataire à un de ses
  cercles.

* YourEstimates.aspx: corrige un lien cassé

* Yavsc.csproj: mise à niveau Npgsql,
renommage Estimate

* packages.config: mise à niveau de la bibliothèque Npgsql (pilote
  d'accès à la base de donnée)

* CircleBase.cs: un objet cercle basique implémente l'interface d'un
  cercle.

* PerformerProfile.cs: s'assure que le nom d'utilisateur utilisé n'est
  pas vide.

* IIdentified.cs: doc xml

* UserNameBase.cs: l'objet base de type "nom d'utilisateur" implémente
  l'interface générique
d'un identifié, par une chaine de caractère.

* YavscModel.csproj: reference les nouvelles definitions :
* un membre de cercle
* l'interface d'un cercle

* MainClass.cs: format du code

* YavscClient.csproj:
* Estimate.aspx: refabrication
vnext
Paul Schneider 9 years ago
parent d999ae5a8e
commit 58839ab69c
33 changed files with 343 additions and 121 deletions

@ -1,3 +1,9 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* Makefile: utilise le fichier de conf généré pour débugger.
* README.md: maj priorités
2015-12-09 Paul Schneider <paul@pschneider.fr>
* README.md: mise à jour des priorités

@ -76,7 +76,12 @@ distclean: clean
sourcepkg:
git archive --format=tar --prefix=yavsc-$(CONFIG)/ $(CONFIG) | bzip2 > yavsc-$(CONFIG).tar.bz2
start_xsp: build
dist/web/$(CONFIG)/Web.config: deploy
web/Web.config: dist/web/$(CONFIG)/Web.config
cp dist/web/$(CONFIG)/Web.config web
start_xsp: build web/Web.config
(cd web; export MONO_OPTIONS=--debug; xsp4 --port 8080)
xmldoc: $(patsubst %,web/bin/%,$(DOCASSBS))

@ -1,3 +1,7 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* NpgsqlContentProvider.cs: bug fix
2015-12-09 Paul Schneider <paul@pschneider.fr>
* NpgsqlCircleProvider.cs: liste les cercles auquels

@ -50,9 +50,8 @@ namespace Yavsc
using (var rdr = cmd.ExecuteReader ()) {
if (rdr.HasRows) {
while (rdr.Read ()) {
var profile = new PerformerProfile ();
var profile = new PerformerProfile (rdr.GetString (1));
profile.Id = rdr.GetInt64 (0);
profile.UserName = rdr.GetString (1);
profile.EMail = rdr.GetString (2);
profile.MEACode = MEACode;
profile.Rate = rdr.GetInt32 (3);

@ -7,8 +7,8 @@ yavsc
-1) Messagerie instantanée : choisir entre directement Google Hangouts API,
SIP, ou Signal R custom
0) Fixer l'edition de la côte zéro. (y en a 6, ou onze avec les moitiés, pas cinq (ni dix avec les moitiés))
0) Bug fixes :
stocker le token calendar à part
1) Créer un contrôle "bouton utilisateur" `UserNameControl`
avec
@ -18,10 +18,6 @@ yavsc
* Si c'est un préstataire, et si on est pas déjà dans un formulaire de reservation,
un lien vers la reservation de ses services
1.1) Donner des descriptions textuelles au cotes (ex: dans le cadre d'un prestataire, ses 5 cotes seraient
par exemple "Nouvelle star" "Artiste local" "Artiste régional" "Star nationale" "Star internationale"
1.2) Concevoir un objet Contact listant les point d'accès par protocol (email, http, sip, irc, téléphone, adresse postale ...)
2) Refabrication de l'Api :
@ -42,7 +38,6 @@ par exemple "Nouvelle star" "Artiste local" "Artiste régional" "Star nationale"
seules les propriétés spécifiées non nulles sont mises à jour
(NDLR:la visibilité est donc par exemple toujours mis à jour).
3) Corriger un peu le thème clair (fond de titres trop sombre)
4) Terminer l'édition du profile de site, avec la modification
et la suppression des activités et compétences

@ -132,5 +132,13 @@ namespace Yavsc.ApiControllers
new string [] { model.Role } );
}
[ValidateAjax]
[Authorize()]
public void AddUserToCircle(UserRole model)
{
if (ModelState.IsValid)
Roles.AddUserToRole (model.UserName,
model.Role );
}
}
}

@ -0,0 +1,19 @@

input, textarea, checkbox {
color: black;
background-color: white;
font-size: larger;
border: solid 1px rgb(128,128,128);
animation-name: flash;
animation-duration: 1s;
animation-iteration-count: 1;
}
input:hover, textarea:hover {
color: black;
background-color: rgba(256,256,256,.8);
}
.input-validation-error { border: solid 1px red; }
.field-validation-error { color: red; }

@ -1,5 +1,4 @@

a, .actionlink {
z-index: 1;
color: white;
@ -10,18 +9,24 @@ a, .actionlink {
position: relative;
transition: color 1s;
}
/* inputs have a white background in this theme */
input.actionlink
{
color: black;
}
a:visited { color: white; }
/* inverse the font color, as long as a black one
is rolling out in backgound */
a:hover, a:visited:hover, .actionlink:hover {
color:black;
}
@media print {
.actionlink, .menuitem { display:none;}
}
/* button dark background */
div.bback {
position: absolute;
top: 0;
@ -29,10 +34,9 @@ div.bback {
width:100%;
height:100%;
z-index: -2;
background-color: rgba(32,32,32,.2);
background-color: rgba(32,32,32,.3);
}
/* button white animated */
div.aback {
transform: scaleX(0);
transform-origin: 0px 50% 0px;

@ -1,6 +1,6 @@
@import url(http://fonts.googleapis.com/css?family=Josefin+Sans&subset=latin,latin-ext);
@import url(/App_Themes/clear/links.css);
@import url(/App_Themes/clear/input.css);
body {
background-color: white;
color: black;
@ -23,15 +23,7 @@ body {
no-repeat;
}
input, textarea, checkbox {
color: black;
background-color: white;
font-size: larger;
border: solid 1px rgb(128,128,128);
animation-name: flash;
animation-duration: 1s;
animation-iteration-count: 1;
}
header { float: left; }
@ -137,18 +129,11 @@ a:active {
background-color:rgba(184,180,132,0.9);
}
input:hover, textarea:hover {
color: black;
background-color: rgba(256,256,256,.8);
}
.code {
background-color: rgba(230,230,230,0.5);
}
.input-validation-error { border: solid 1px red; }
.field-validation-error { color: red; }
@media all and (max-width: 640px) {

@ -1,22 +1,6 @@
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,700);
@import url(/App_Themes/dark/links.css);
.panel {
display:inline-block;
width: calc(33% - 10px);
}
@media all and (max-width: 1200px) {
.panel {
width: calc(50% - 5px);
}
}
@media all and (max-width: 720px) {
.panel {
width: 100%;
}
}
.skillname {
background-color: rgba(16,16,64,0.8);
border-color: #aaf;
@ -28,7 +12,6 @@ body {
color: #D0FFD0;
}
.rate {
border: solid rgb(128,128,0) 1px;
background-color: rgba(20,20,20,.8);
@ -215,7 +198,6 @@ header h1, header a , .actionlink, .menuitem, a { padding:.5em;}
padding:.3em;
}
.bshpanel { cursor:zoom-in; }
.c2 { display:initial; }
.c2-alt { display:none; }

@ -43,6 +43,7 @@ main {
margin: 2em;
padding: 2em;
display: block;
text-align: center;
}
main video, main img {
max-width:100%;
@ -352,7 +353,6 @@ div.panel {
.usertitleref{
padding:.3em;
}
.bshpanel { cursor:zoom-in; }
.c2 { display:initial; }
.c2-alt { display:none; }

@ -1,3 +1,54 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* input.css: refabrication des feuilles de style : la feuille
des champs de formulaire.
* AccountController.cs: implémente une méthode de l'API pour
ajouter un utilisateur au cercle
* links.css: Corrige la couleur du boutton de validation des
formulaire de classe `ActionLink`
* style.css: refabrication: importe la nouvelle feuille de
style des champs de formulaires
* style.css: nettoyage du thème sombre
* style.css: nettoyage + section principale (`main`) centré
* FrontOfficeController.cs: Repositionne la route vers le
devis à do/Estimate
* YavscHelpers.cs: corrige ma ré-écriture des helpers html
ActionLink
* App.master: formattage du code source
* AppAdmin.master: synchronisation avec la page maître,
beaucoup de changements dans cette page maître pour les
administrateurs:
* prend en charge les côtes d'article
* utilise les fontes de caractère de la page pour les lien
action
* prend en charge les zones de formulaire masquable.
* NoLogin.master: synchronisation avec la page maître
* Performer.ascx: WIP permet d'ajouter un préstataire à un de
ses cercles.
* YourEstimates.aspx: corrige un lien cassé
* Yavsc.csproj: mise à niveau Npgsql,
renommage Estimate
* packages.config: mise à niveau de la bibliothèque Npgsql
(pilote d'accès à la base de donnée)
* Estimate.aspx: refabrication
2015-12-09 Paul Schneider <paul@pschneider.fr>
* animate.css: animations css

@ -95,7 +95,7 @@ namespace Yavsc.Controllers
/// <param name="model">Model.</param>
/// <param name="submit">Submit.</param>
[Authorize]
public ActionResult DoAnEstimate (Estimate model, string submit)
public ActionResult Estimate (Estimate model, string submit)
{
string username = Membership.GetUser ().UserName;
// Obsolete, set in master page

@ -422,6 +422,7 @@ namespace Yavsc.Helpers
string actionLabel, object htmlAttributes = null) {
return TranslatedActionLink (helper, actionLabel, actionLabel, htmlAttributes);
}
/// <summary>
/// Translateds the action link.
/// </summary>
@ -431,10 +432,13 @@ namespace Yavsc.Helpers
/// <param name="method">Method.</param>
/// <param name="htmlAttributes">Html attributes.</param>
public static IHtmlString TranslatedActionLink (this HtmlHelper helper,
string actionLabel, string method, object htmlAttributes = null) {
return TranslatedActionLink (helper,
actionLabel, method, null, htmlAttributes = null);
string actionName, string method, object routes, object htmlAttributes = null) {
string controllerName = helper.ViewContext.Controller.GetType ().Name;
if (controllerName.EndsWith ("Controller"))
controllerName = controllerName.Substring (0,controllerName.Length - 10);
return TranslatedActionLink (helper, actionName, method,
controllerName, routes, htmlAttributes);
}
/// <summary>
/// Translateds the action link.
@ -447,6 +451,11 @@ namespace Yavsc.Helpers
/// <param name="htmlAttributes">Html attributes.</param>
public static IHtmlString TranslatedActionLink (this HtmlHelper helper,
string actionLabel, string method, string controller, object htmlAttributes = null) {
string controllerName = helper.ViewContext.Controller.GetType ().Name;
if (controllerName.EndsWith ("Controller"))
controllerName = controllerName.Substring (0,controllerName.Length - 10);
if (controller == null)
controller = controllerName;
return TranslatedActionLink (helper, actionLabel, method, controller,
new { controller = controller, action = actionLabel }, htmlAttributes);
}
@ -491,15 +500,7 @@ namespace Yavsc.Helpers
}
public static IHtmlString TranslatedActionLink (this HtmlHelper helper,
string actionName, string method, object routes, object htmlAttributes = null) {
string controllerName = helper.ViewContext.Controller.GetType ().Name;
if (controllerName.EndsWith ("Controller"))
controllerName = controllerName.Substring (0,controllerName.Length - 10);
return TranslatedActionLink (helper, actionName, method,
controllerName, routes, htmlAttributes);
}

@ -36,7 +36,6 @@ var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
</asp:ContentPlaceHolder>
</head>
<body>
<header >
<asp:ContentPlaceHolder ID="overHeaderOne" runat="server">
<h1>
@ -101,7 +100,7 @@ Vos billets
$(document).ready(function() {
$('fieldset.mayhide').hidefieldset();
$( "a" ).append("<div class='aback'></div>").append("<div class='bback'></div>");
});
});
</script>
</body>
</html>

@ -1,4 +1,4 @@
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" EnableTheming="true"%>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<% ViewState["orgtitle"] = Html.Translate(Page.Title); %>
@ -6,7 +6,7 @@
Page.Theme = (string) Profile.UITheme;
Page.StyleSheetTheme = (string) Profile.UITheme; %>
<asp:ContentPlaceHolder id="init" runat="server">
</asp:ContentPlaceHolder>
</asp:ContentPlaceHolder>
<head runat="server">
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@ -23,18 +23,23 @@ Page.StyleSheetTheme = (string) Profile.UITheme; %>
<script src="<%=Url.Content("~/Scripts/Prettify/run_prettify.js")%>"></script>
<script type="text/javascript">
var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
$(document).ready(function(){
$('[data-type="rate-bill"]').rate({webTarget: 'Blogs/Rate'});
});
</script>
<%=Ajax.YaGlobalizationScript()%>
<script src="<%=Url.Content("~/Scripts/yavsc.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.tags.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.rate.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.hidefieldset.js")%>"></script>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<header data-type="background" data-speed="8" >
<header >
<asp:ContentPlaceHolder ID="overHeaderOne" runat="server">
<h1><a href="<%= Url.RouteUrl("Default") %>">
<%=ViewState["orgtitle"]%></a>
<h1>
<%=ViewState["orgtitle"]%>
- <a href="<%= Url.RouteUrl("Default", new {controller = "Home" , action = "Index" }) %>"><%= YavscHelpers.SiteName %></a>
</h1>
</asp:ContentPlaceHolder>
@ -51,10 +56,10 @@ else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>, <%=note.click_acti
</script>
<% } %>
</header>
<nav data-type="background" data-speed="5">
<nav >
<% if (Membership.GetUser()==null) { %>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Login", returnUrl=Request.Url.PathAndQuery}) %>" class="menuitem" accesskey = "C">
<i class="fa fa-sign-in">Connexion</i>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Login", returnUrl=Request.Url.PathAndQuery}) %>" class="link" accesskey = "C">
<i class="fa fa-sign-in"></i> Connexion
</a>
<% } else { %>
<ul>
@ -68,38 +73,45 @@ else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>, <%=note.click_acti
<li><%= Html.TranslatedActionLink("Role list", "RoleList") %></li>
</ul>
<a href="<%=Url.RouteUrl("Blogs", new { user = HttpContext.Current.User.Identity.Name } )%>" accesskey = "B" class="menuitem" >
<img src="<%=Url.AvatarUrl(HttpContext.Current.User.Identity.Name)%>" alt="vos billets" class="iconsmall" />
<span class="hint">Vos billets</span>
<a href="<%=Url.RouteUrl("Blogs", new { user = HttpContext.Current.User.Identity.Name } )%>" accesskey = "B" class="link" >
<img src="<%=Url.AvatarUrl(HttpContext.Current.User.Identity.Name)%>" alt="" class="iconsmall" />
Vos billets
</a>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Profile", id = HttpContext.Current.User.Identity.Name} ) %>" accesskey="P" class="menuitem fa fa-user">
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Profile", id = HttpContext.Current.User.Identity.Name} ) %>" accesskey="P" class="link ">
<i class="fa fa-user"></i>
<%= HttpContext.Current.User.Identity.Name %>
<span class="hint"> &Eacute;dition de votre profile </span>
</a>
<a href="/Blogs/Post" accesskey="P" class="menuitem fa fa-pencil">
<a href="/Blogs/Post" accesskey="P" class="link">
<i class="fa fa-pencil"></i>
<u>P</u>oster
<span class="hint">&Eacute;dition d'un nouveau billet </span>
</a>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Logout", returnUrl=Request.Url.PathAndQuery}) %>" accesskey = "C" class="menuitem fa fa-sign-out">
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Logout", returnUrl=Request.Url.PathAndQuery}) %>" accesskey = "C" class="link">
<i class="fa fa-sign-out"></i>
<%=Html.Translate("Logout")%></a>
<% } %>
</nav>
<main data-type="background" data-speed="10" data-emheight="10" data-posx="0" data-posy="22" >
<main>
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
</main>
<footer data-type="background" data-speed="5" >
<footer>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
<div id="copyr">
<a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">© 2015 GNU GENERAL PUBLIC LICENSE <i>Version 3, 29 June 2007</i></a>
<a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">
<%=Html.Encode("© 2015 GNU GENERAL PUBLIC LICENSE")%> <i>Version 3, 29 June 2007</i></a>
</div>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
<% foreach ( Link link in Html.Thanks()) { %>
<a class="thanks" href="<%=link.Url%>"><% if (link.Image !=null) {
%><img src="<%= link.Image %>" alt="<%= link.Text %>"/></a>
<% } else { %>
<a class="thanks" href="<%=link.Url%>"><%= link.Text %></a>
<% }} %>
</footer><div class="modal"></div>
<script>
$(document).ready(function() {
$('fieldset.mayhide').hidefieldset();
$( "a" ).append("<div class='aback'></div>").append("<div class='bback'></div>");
});
</script>
</body>
</html>

@ -1,4 +1,4 @@
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" EnableTheming="true"%>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<% ViewState["orgtitle"] = Html.Translate(Page.Title); %>
@ -27,18 +27,19 @@ var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
$('[data-type="rate-bill"]').rate({webTarget: 'Blogs/Rate'});
});
</script>
<%=Ajax.GlobalizationScript()%>
<%=Ajax.YaGlobalizationScript()%>
<script src="<%=Url.Content("~/Scripts/yavsc.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.tags.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.rate.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.hidefieldset.js")%>"></script>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<header data-type="background" data-speed="8" >
<header >
<asp:ContentPlaceHolder ID="overHeaderOne" runat="server">
<h1><a href="<%= Url.RouteUrl("Default") %>">
<%=ViewState["orgtitle"]%></a>
<h1>
<%=ViewState["orgtitle"]%>
- <a href="<%= Url.RouteUrl("Default", new {controller = "Home" , action = "Index" }) %>"><%= YavscHelpers.SiteName %></a>
</h1>
</asp:ContentPlaceHolder>
@ -59,12 +60,21 @@ else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>, <%=note.click_acti
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
</main>
<footer data-type="background" data-speed="5" >
<footer>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
<div id="copyr">
<a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">© 2015 GNU GENERAL PUBLIC LICENSE <i>Version 3, 29 June 2007</i></a>
<a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">
<%=Html.Encode("© 2015 GNU GENERAL PUBLIC LICENSE")%> <i>Version 3, 29 June 2007</i></a>
</div>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
</footer><div class="modal"></div>
<script>
$(document).ready(function() {
$('fieldset.mayhide').hidefieldset();
$( "a" ).append("<div class='aback'></div>").append("<div class='bback'></div>");
});
</script>
</body>
</html>

@ -1,10 +1,12 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<PerformerProfile>" %>
<% ViewBag.BlogCounter = BlogManager.GetPostCounter(Model.UserName); %>
<% ViewBag.WithinCircles = CircleManager.Circles(Model.UserName); %>
<div class="performer">
<h2>
<img src="<%= Model.Avatar %>" alt="" class="bigavatar">
<span class="username" data-type="user" data-roles="" data-blog-counter="<%=ViewBag.BlogCounter%>" data-circles="" ><%=Html.Encode(Model.UserName)%></span>
<span class="username" data-type="user"
data-roles="<%=string.Join (" ",Roles.GetRolesForUser (Model.UserName)) %>"
data-blog-counter="<%=BlogManager.GetPostCounter(Model.UserName)%>"
data-circles="<%=string.Join (" ",CircleManager.Circles(Model.UserName))%>" >
<%=Html.Encode(Model.UserName)%></span>
<%=Html.Partial("RateUserSkillControl", Model) %>
</h2>
<address>

@ -17,7 +17,7 @@ foreach (Estimate estim in Model) {
Vos estimations en tant que client
(<%=ViewData["ClientCount"]%>):<br>
<% foreach (Estimate estim in Model) { %>
<%= Html.TranslatedActionLink("Titre:"+estim.Title+" Responsable:"+estim.Responsible,"Estimate",new{id=estim.Id}) %>
<%= Html.TranslatedActionLink("Titre:"+estim.Title+" Responsable:"+estim.Responsible,"Estimate", new{ Id=estim.Id }) %>
<br><% } %>
</div>
<% } %>

@ -116,9 +116,6 @@
<Reference Include="PayPalCoreSDK">
<HintPath>..\packages\PayPalCoreSDK.1.6.3\lib\net451\PayPalCoreSDK.dll</HintPath>
</Reference>
<Reference Include="Npgsql">
<HintPath>..\packages\Npgsql.3.0.3\lib\net45\Npgsql.dll</HintPath>
</Reference>
<Reference Include="log4net">
<HintPath>..\packages\log4net.2.0.4\lib\net45-full\log4net.dll</HintPath>
</Reference>
@ -138,6 +135,9 @@
<Reference Include="System.ServiceModel" />
<Reference Include="System.ServiceModel.Web" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="Npgsql">
<HintPath>..\packages\Npgsql.3.0.4\lib\net45\Npgsql.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Folder Include="Admin\" />
@ -757,7 +757,6 @@
<Content Include="Scripts\yavsc.user.js" />
<Content Include="Views\FrontOffice\SiteSkills.aspx" />
<Content Include="Views\FrontOffice\YourEstimates.aspx" />
<Content Include="Views\FrontOffice\DoAnEstimate.aspx" />
<Content Include="App_Themes\animate.css" />
<Content Include="App_Themes\images\live-concert-fg.png" />
<Content Include="App_Themes\images\live-concert-scene.jpg" />
@ -766,6 +765,8 @@
<Content Include="App_Themes\clear\links.css" />
<Content Include="App_Themes\images\splash-image-2.jpg" />
<Content Include="Views\Home\Test.aspx" />
<Content Include="App_Themes\clear\input.css" />
<Content Include="Views\FrontOffice\Estimate.aspx" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

@ -12,7 +12,7 @@
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net451" />
<package id="Mono.Web.Xdt" version="1.0.0" targetFramework="net451" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
<package id="Npgsql" version="3.0.3" targetFramework="net451" />
<package id="Npgsql" version="3.0.4" targetFramework="net451" />
<package id="PayPalButtonManagerSDK" version="2.9.109" targetFramework="net45" />
<package id="PayPalCoreSDK" version="1.6.3" targetFramework="net451" />
<package id="Prettify" version="3.3.04.2013" targetFramework="net451" />

@ -1,3 +1,28 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* CircleMember.cs: un membre de cercle est un nom
d'utilisateur associé au cercle d'un autre utilisateur.
* ICircle.cs: Définit l'interface d'un cercle:
un cercle est identifié par un entier long,
il a un possesseur.
* CircleBase.cs: un objet cercle basique implémente
l'interface d'un cercle.
* PerformerProfile.cs: s'assure que le nom d'utilisateur
utilisé n'est pas vide.
* IIdentified.cs: doc xml
* UserNameBase.cs: l'objet base de type "nom d'utilisateur"
implémente l'interface générique
d'un identifié, par une chaine de caractère.
* YavscModel.csproj: reference les nouvelles definitions :
* un membre de cercle
* l'interface d'un cercle
2015-12-09 Paul Schneider <paul@pschneider.fr>
* CircleManager.cs: implémente les methodes utilisées à la

@ -25,7 +25,7 @@ namespace Yavsc.Model.Circles
/// <summary>
/// Circle base.
/// </summary>
public class CircleBase
public class CircleBase : ICircle
{
/// <summary>
/// Initializes a new instance of the <see cref="Yavsc.Model.Circles.CircleBase"/> class.

@ -0,0 +1,43 @@
//
// CircleMember.cs
//
// Author:
// Paul Schneider <paul@pschneider.fr>
//
// Copyright (c) 2015 GNU GPL
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
using Yavsc.Model.RolesAndMembers;
namespace Yavsc.Model.Circles
{
/// <summary>
/// Circle member.
/// </summary>
public class CircleMember : UserNameBase
{
/// <summary>
/// Gets or sets the owner.
/// </summary>
/// <value>The owner.</value>
#region ICircle implementation
public string Owner {
get;
set;
}
#endregion
}
}

@ -0,0 +1,39 @@
//
// CircleBase.cs
//
// Author:
// Paul Schneider <paul@pschneider.fr>
//
// Copyright (c) 2015 GNU GPL
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
namespace Yavsc.Model.Circles
{
/// <summary>
/// I circle.
/// </summary>
public interface ICircle: IIdentified<long>
{
/// <summary>
/// Gets or sets the owner.
/// </summary>
/// <value>The owner.</value>
string Owner { get; set; }
}
}

@ -37,12 +37,6 @@ namespace Yavsc.Model.FrontOffice
/// </summary>
public class PerformerProfile: UserNameBase, IRating, IIdentified<long>
{
/// <summary>
/// Initializes a new instance of the <see cref="Yavsc.Model.Skill.PerformerProfile"/> class.
/// </summary>
public PerformerProfile()
{
}
/// <summary>
/// Gets or sets the identifier.
@ -63,6 +57,9 @@ namespace Yavsc.Model.FrontOffice
/// <param name="username">Username.</param>
public PerformerProfile(string username)
{
if (string.IsNullOrWhiteSpace (username))
throw new InvalidOperationException (
"The specified username cannot be blank.");
UserName = username;
}

@ -22,8 +22,15 @@ using System;
namespace Yavsc.Model
{
/// <summary>
/// I identified.
/// </summary>
public interface IIdentified<T>
{
/// <summary>
/// Gets or sets the identifier.
/// </summary>
/// <value>The identifier.</value>
T Id { get; set; }
}
}

@ -28,7 +28,7 @@ namespace Yavsc.Model.RolesAndMembers
/// <summary>
/// User name base.
/// </summary>
public class UserNameBase {
public class UserNameBase : IIdentified<string> {
/// <summary>
/// Gets or sets the name of the user.
/// </summary>
@ -37,6 +37,20 @@ namespace Yavsc.Model.RolesAndMembers
,Display(ResourceType=typeof(LocalizedText),Name="User_name"),RegularExpression(@"^[a-zA-Z .-_#]{1,100}$")]
public string UserName { get; set; }
#region IIdentified implementation
/// <summary>
/// Gets or sets the identifier.
/// </summary>
/// <value>The identifier.</value>
public string Id {
get {
return UserName;
}
set {
throw new NotImplementedException ();
}
}
#endregion
}
}

@ -241,6 +241,8 @@
<Compile Include="FrontOffice\PerformerAvailability.cs" />
<Compile Include="Skill\AuthentificatedSkillRating.cs" />
<Compile Include="Skill\SkillRating.cs" />
<Compile Include="Circles\CircleMember.cs" />
<Compile Include="Circles\ICircle.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>

@ -1,3 +1,9 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* MainClass.cs: format du code
* YavscClient.csproj: refabrication
2015-11-30 Paul Schneider <paul@pschneider.fr>
* YavscClient.csproj: ...

@ -3,10 +3,10 @@ using System.Net.Http;
using System.Threading.Tasks;
using System.Net.Http.Headers;
using System.Collections.Generic;
using System.Net.Http.Formatting;
using Newtonsoft.Json;
using Yavsc.Model.FrontOffice;
using Yavsc.Model.FrontOffice.Catalog;
using System.Net.Http.Formatting;
using Newtonsoft.Json;
namespace Yavsc
{

@ -9,7 +9,7 @@
<OutputType>Exe</OutputType>
<RootNamespace>maeclient</RootNamespace>
<AssemblyName>yavscclient</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@ -36,36 +36,42 @@
<Optimize>false</Optimize>
<OutputPath>bin\Lua</OutputPath>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'TotemPre|AnyCPU' ">
<Optimize>false</Optimize>
<OutputPath>bin\TotemPre</OutputPath>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'TotemProd|AnyCPU' ">
<Optimize>false</Optimize>
<OutputPath>bin\TotemProd</OutputPath>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'YavscPre|AnyCPU' ">
<Optimize>false</Optimize>
<OutputPath>bin\YavscPre</OutputPath>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Yavsc|AnyCPU' ">
<Optimize>false</Optimize>
<OutputPath>bin\Yavsc</OutputPath>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Net.Http" />
<Reference Include="System.ServiceModel.Activation" />
<Reference Include="System.Core" />
<Reference Include="System.Net.Http.Formatting" />
</ItemGroup>
<ItemGroup>
<Compile Include="MyClass.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="MainClass.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>

Loading…