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
This commit is contained in:
2015-12-15 21:36:33 +01:00
parent d999ae5a8e
commit 58839ab69c
33 changed files with 343 additions and 121 deletions

View File

@ -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

View File

@ -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))

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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 );
}
}
}

View File

@ -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; }

View File

@ -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;

View File

@ -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) {

View File

@ -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; }

View File

@ -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; }

View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>
<% } %>

View File

@ -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" />

View File

@ -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" />

View File

@ -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

View File

@ -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.

View File

@ -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
}
}

View File

@ -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; }
}
}

View File

@ -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;
}

View File

@ -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; }
}
}

View File

@ -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
}
}

View File

@ -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>

View File

@ -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: ...

View File

@ -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
{

View File

@ -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>