* Fixed the Pdf generation under Slackware

* Estimate view developpement
vnext
Paul Schneider 10 years ago
parent 312585d4f0
commit f695d108fb
27 changed files with 459 additions and 242 deletions

@ -230,9 +230,6 @@ namespace WorkFlowProvider
cmd.CommandText = cmd.CommandText =
"insert into writtings (description, estimid, ucost, count, productid) VALUES (@dscr,@estid,@ucost,@count,@prdid) returning _id"; "insert into writtings (description, estimid, ucost, count, productid) VALUES (@dscr,@estid,@ucost,@count,@prdid) returning _id";
cmd.Parameters.Add ("@dscr", desc); cmd.Parameters.Add ("@dscr", desc);
// cmd.Parameters.Add ("@prdid", productid);
// cmd.Parameters.Add("@ucost", ucost);
// cmd.Parameters.Add("@mult", count);
cmd.Parameters.Add("@estid", estid); cmd.Parameters.Add("@estid", estid);
cmd.Parameters.Add("@ucost", ucost); cmd.Parameters.Add("@ucost", ucost);

@ -143,7 +143,7 @@ namespace Yavsc.Controllers
return UserPost (BlogManager.GetPost (postid)); return UserPost (BlogManager.GetPost (postid));
} }
} }
string prevstr = App_GlobalResources.LocalizedText.Preview; string prevstr = LocalizedText.Preview;
return UserPost (BlogManager.GetPost (user, title)); return UserPost (BlogManager.GetPost (user, title));
} }

@ -88,9 +88,12 @@ namespace Yavsc.ApiControllers
[AcceptVerbs("GET")] [AcceptVerbs("GET")]
public HttpResponseMessage GetEstimTex(long estimid) public HttpResponseMessage GetEstimTex(long estimid)
{ {
string texest = getEstimTex (estimid);
if (texest == null)
throw new HttpRequestValidationException ("Not an estimation id:"+estimid);
return new HttpResponseMessage () { return new HttpResponseMessage () {
Content = new ObjectContent (typeof(string), Content = new ObjectContent (typeof(string),
getEstimTex (estimid), texest,
new SimpleFormatter ("text/x-tex")) new SimpleFormatter ("text/x-tex"))
}; };
} }
@ -101,12 +104,21 @@ namespace Yavsc.ApiControllers
Estimate e = WorkFlowManager.GetEstimate (estimid); Estimate e = WorkFlowManager.GetEstimate (estimid);
tmpe.Session = new Dictionary<string,object>(); tmpe.Session = new Dictionary<string,object>();
tmpe.Session.Add ("estim", e); tmpe.Session.Add ("estim", e);
Profile pr = AccountController.GetProfile (e.Responsible);
tmpe.Session.Add ("from", pr); Profile prpro = new Profile(ProfileBase.Create(e.Responsible));
tmpe.Session.Add ("to", pr); if (!prpro.IsBankable)
throw new Exception ("NotBankable:"+e.Responsible);
Profile prcli = new Profile(ProfileBase.Create(e.Client));
if (!prcli.IsBillable)
throw new Exception ("NotBillable:"+e.Client);
tmpe.Session.Add ("from", prpro);
tmpe.Session.Add ("to", prcli);
tmpe.Init (); tmpe.Init ();
return tmpe.TransformText (); return tmpe.TransformText ();
} }
/// <summary> /// <summary>
/// Gets the estimate in pdf format from tex generation. /// Gets the estimate in pdf format from tex generation.
/// </summary> /// </summary>
@ -115,14 +127,7 @@ namespace Yavsc.ApiControllers
public HttpResponseMessage GetEstimPdf(long estimid) public HttpResponseMessage GetEstimPdf(long estimid)
{ {
Estimate estim = WorkFlowManager.GetEstimate (estimid); Estimate estim = WorkFlowManager.GetEstimate (estimid);
//TODO better with pro.IsBankable && cli.IsBillable
Profile prpro = new Profile(ProfileBase.Create(estim.Responsible));
if (!prpro.IsBankable)
throw new Exception ("NotBankable:"+estim.Responsible);
Profile prcli = new Profile(ProfileBase.Create(estim.Client));
if (!prcli.IsBillable)
throw new Exception ("NotBillable:"+estim.Client);
return new HttpResponseMessage () { return new HttpResponseMessage () {
Content = new ObjectContent ( Content = new ObjectContent (

@ -9,8 +9,8 @@ using System.Web.Mvc;
using System.Web.Mvc.Ajax; using System.Web.Mvc.Ajax;
using Yavsc; using Yavsc;
using System.Reflection; using System.Reflection;
using Yavsc.App_GlobalResources;
using System.Resources; using System.Resources;
using Yavsc.Model;
namespace Yavsc.Controllers namespace Yavsc.Controllers
{ {

@ -2,12 +2,13 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Web; using System.Web;
using System.Web.Http;
using WorkFlowProvider; using WorkFlowProvider;
using Yavsc.Model.WorkFlow; using Yavsc.Model.WorkFlow;
using System.Web.Http.Controllers; using System.Web.Http.Controllers;
using System.Web.Security; using System.Web.Security;
using System.Web.Http.ModelBinding;
using System.Net.Http;
using System.Web.Http;
namespace Yavsc.ApiControllers namespace Yavsc.ApiControllers
{ {
@ -38,18 +39,8 @@ namespace Yavsc.ApiControllers
{ {
WorkFlowManager.DropWritting (wrid); WorkFlowManager.DropWritting (wrid);
} }
class Error {}
[Authorize]
[AcceptVerbs("POST")]
public object UpdateWritting([FromBody] Writting model)
{
if (!ModelState.IsValid) {
return ModelState.Where ( k => k.Value.Errors.Count>0) ;
}
WorkFlowManager.UpdateWritting (model);
return null;
}
[HttpGet] [HttpGet]
[Authorize] [Authorize]
@ -67,17 +58,54 @@ namespace Yavsc.ApiControllers
return new { test=string.Format("Hello {0}!",username) }; return new { test=string.Format("Hello {0}!",username) };
} }
private HttpResponseMessage CreateModelStateErrorResponse () {
// strip exceptions
Dictionary<string,string[]> errs = new Dictionary<string, string[]> ();
foreach (KeyValuePair<string,ModelState> st
in ModelState.Where (x => x.Value.Errors.Count > 0))
errs.Add(st.Key, st.Value.Errors.Select(x=>x.ErrorMessage).ToArray());
return Request.CreateResponse(System.Net.HttpStatusCode.BadRequest,
errs);
}
[Authorize]
[AcceptVerbs("POST")]
[ValidateAjax]
public HttpResponseMessage UpdateWritting([FromBody] Writting wr)
{
WorkFlowManager.UpdateWritting (wr);
return Request.CreateResponse (System.Net.HttpStatusCode.OK);
}
[AcceptVerbs("POST")] [AcceptVerbs("POST")]
[Authorize] [Authorize]
[ValidateAjax]
/// <summary> /// <summary>
/// Adds the specified imputation to the given estimation by estimation id. /// Adds the specified imputation to the given estimation by estimation id.
/// </summary> /// </summary>
/// <param name="estid">Estimation identifier</param> /// <param name="estid">Estimation identifier</param>
/// <param name="wr">Imputation to add</param> /// <param name="wr">Imputation to add</param>
public long Write ([FromUri] long estid, Writting wr) { public HttpResponseMessage Write ([FromUri] long estid, [FromBody] Writting wr) {
return WorkFlowManager.Write(estid, wr.Description, if (estid <= 0) {
wr.UnitaryCost, wr.Count, wr.ProductReference); ModelState.AddModelError ("EstimationId", "Spécifier un identifiant d'estimation valide");
return Request.CreateResponse (System.Net.HttpStatusCode.BadRequest,
ValidateAjaxAttribute.GetErrorModelObject (ModelState));
}
try {
return Request.CreateResponse(System.Net.HttpStatusCode.OK,
WorkFlowManager.Write(estid, wr.Description,
wr.UnitaryCost, wr.Count, wr.ProductReference));
}
catch (Exception ex) {
return Request.CreateResponse (
System.Net.HttpStatusCode.InternalServerError,
"Internal server error:" + ex.Message + "\n" + ex.StackTrace);
}
} }
} }
} }

@ -69,15 +69,17 @@ namespace Yavsc.Formatters
var pbc = ProfileBase.Create (e.Client); var pbc = ProfileBase.Create (e.Client);
Profile prcli = new Profile (pbc); Profile prcli = new Profile (pbc);
if (!prpro.IsBankable)
throw new Exception ("This provider is not bankable."); if (!prpro.IsBankable || !prcli.IsBillable)
throw new Exception("not bankable or not billable.");
tmpe.Session.Add ("from", prpro); tmpe.Session.Add ("from", prpro);
tmpe.Session.Add ("to", prcli); tmpe.Session.Add ("to", prcli);
tmpe.Init (); tmpe.Init ();
string content = tmpe.TransformText (); string content = tmpe.TransformText ();
string name = string.Format ("tmpestimtex{0}", e.Id); string name = string.Format ("tmpestimtex-{0}", e.Id);
string fullname = Path.Combine ( string fullname = Path.Combine (
HttpRuntime.CodegenDir, name); HttpRuntime.CodegenDir, name);
FileInfo fi = new FileInfo(fullname + ".tex"); FileInfo fi = new FileInfo(fullname + ".tex");
@ -86,17 +88,19 @@ namespace Yavsc.Formatters
{ {
sw.Write (content); sw.Write (content);
} }
using (Process p = new Process ()) { using (Process p = new Process ()) {
p.StartInfo.WorkingDirectory = HttpRuntime.CodegenDir; p.StartInfo.WorkingDirectory = HttpRuntime.CodegenDir;
p.StartInfo = new ProcessStartInfo (); p.StartInfo = new ProcessStartInfo ();
p.StartInfo.UseShellExecute = false; p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = "/usr/bin/texi2pdf"; p.StartInfo.FileName = "/usr/bin/texi2pdf";
p.StartInfo.Arguments = p.StartInfo.Arguments =
string.Format ("--batch -o {0} {1}", string.Format ("--batch --build-dir={2} -o {0} {1}",
fo.FullName, fo.FullName,
fi.FullName); fi.FullName,HttpRuntime.CodegenDir);
p.Start (); p.Start ();
p.WaitForExit (); p.WaitForExit ();
if (p.ExitCode != 0)
throw new Exception ("Pdf generation failed with exit code:" + p.ExitCode);
} }
using (StreamReader sr = new StreamReader (fo.FullName)) { using (StreamReader sr = new StreamReader (fo.FullName)) {

@ -52,23 +52,6 @@ namespace Yavsc
); );
RegisterRoutes (RouteTable.Routes); RegisterRoutes (RouteTable.Routes);
Error += HandleError;
} }
void HandleError (object sender, EventArgs e)
{
if (Server.GetLastError ().GetBaseException () is System.Web.HttpRequestValidationException) {
Response.Clear ();
Response.Write ("Invalid characters.<br>");
Response.Write ("You may want to use your " +
"browser to go back to your form. " +
"You also can <a href=\"" +
Request.UrlReferrer +
"\">hit the url referrer</a>.");
Response.StatusCode = 200;
Response.End ();
}
}
} }
} }

@ -35,6 +35,8 @@
</asp:ContentPlaceHolder> </asp:ContentPlaceHolder>
</main> </main>
<aside> <aside>
<asp:ContentPlaceHolder ID="MASContent" runat="server">
</asp:ContentPlaceHolder>
<div id="login"> <div id="login">
<% if (Membership.GetUser()==null) { %> <% if (Membership.GetUser()==null) { %>
<%= Html.ActionLink( YavscHelpers.SiteName, "Index", "Home" ,null, new { @class="actionlink" } ) %> <%= Html.ActionLink( YavscHelpers.SiteName, "Index", "Home" ,null, new { @class="actionlink" } ) %>
@ -42,7 +44,7 @@
<%= Html.ActionLink("Login", "Login", "Account", new { returnUrl=Request.Url.PathAndQuery }, new { @class="actionlink" } ) %> <%= Html.ActionLink("Login", "Login", "Account", new { returnUrl=Request.Url.PathAndQuery }, new { @class="actionlink" } ) %>
<span class="hidcom">Pour pouvoir poster ou commenter</span> <span class="hidcom">Pour pouvoir poster ou commenter</span>
<% } else { %> <% } else { %>
<%= Html.ActionLink(HttpContext.Current.User.Identity.Name, "Account", "Profile",null, new { @class="actionlink" }) %> <%= Html.ActionLink(HttpContext.Current.User.Identity.Name, "Profile", "Account", null, new { @class="actionlink" }) %>
<span class="hidcom"> &Eacute;dition de votre profile </span> <span class="hidcom"> &Eacute;dition de votre profile </span>
@ <%= Html.ActionLink( YavscHelpers.SiteName, "Index", "Home" ,null, new { @class="actionlink" }) %> @ <%= Html.ActionLink( YavscHelpers.SiteName, "Index", "Home" ,null, new { @class="actionlink" }) %>
<span class="hidcom"> Page d'accueil </span> <span class="hidcom"> Page d'accueil </span>
@ -51,8 +53,6 @@
<%= Html.ActionLink( "Deconnexion", "Logout", "Account", new { returnUrl=Request.Url.PathAndQuery }, new { @class="actionlink" }) %> <%= Html.ActionLink( "Deconnexion", "Logout", "Account", new { returnUrl=Request.Url.PathAndQuery }, new { @class="actionlink" }) %>
<% } %> <% } %>
</div> </div>
<asp:ContentPlaceHolder ID="MASContent" runat="server">
</asp:ContentPlaceHolder>
</aside> </aside>
<footer> <footer>
<% foreach ( string link in Yavsc.ThanksHelper.Links()) { %> <% foreach ( string link in Yavsc.ThanksHelper.Links()) { %>

@ -4,7 +4,6 @@ table.tablesorter {
background-color: #333; background-color: #333;
margin:10px 0pt 15px; margin:10px 0pt 15px;
font-size: 8pt; font-size: 8pt;
width: 100%;
text-align: left; text-align: left;
} }
table.tablesorter thead tr th, table.tablesorter tfoot tr th { table.tablesorter thead tr th, table.tablesorter tfoot tr th {
@ -23,13 +22,17 @@ table.tablesorter tbody td {
color: #ffa; color: #ffa;
padding: 4px; padding: 4px;
vertical-align: top; vertical-align: top;
background-color: #002;
} }
table.tablesorter .odd td { table.tablesorter .odd td {
background-color: #004; background-color: rgba(0,0,32,0.5);
} }
table.tablesorter .even td {
background-color: rgba(16,0,16,0.5);
}
table.tablesorter thead tr .headerSortUp { table.tablesorter thead tr .headerSortUp {
background-image: url(/Theme/dark/asc.gif); background-image: url(/Theme/dark/asc.gif);
} }
@ -39,6 +42,3 @@ table.tablesorter thead tr .headerSortDown {
table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp { table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp {
background-color: #123; background-color: #123;
} }
tr.selected td {
background-color:#102010;
}

@ -54,16 +54,14 @@ label {
} }
.message { .message {
color: #7FFF00;
font-size: large; font-size: large;
border: solid green; background-color: rgba(0,64,0,0.1);
background-color: rgba(32,0,32,0.3);
} }
.error { .error {
color: #f88; color: #f88;
font-size: large; font-size: large;
border: solid green; border: solid green;
background-color: rgba(64,0,0,0.3); background-color: rgba(64,0,0,0.1);
} }
.validation-summary-errors{ .validation-summary-errors{
color: #f88; color: #f88;

@ -0,0 +1,58 @@
//
// ValidateAjaxAttribute.cs
//
// Author:
// Paul Schneider <paulschneider@free.fr>
//
// Copyright (c) 2014 Paul Schneider
//
// 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 System.Linq;
using System.Net;
using System.Web.Http.Filters;
using System.Net.Http;
using System.Web.Http.ModelBinding;
namespace Yavsc
{
public class ValidateAjaxAttribute : ActionFilterAttribute
{
public static object GetErrorModelObject(ModelStateDictionary modelState) {
var errorModel =
from x in modelState.Keys
where modelState[x].Errors.Count > 0
select new
{
key = x,
errors = modelState[x].Errors.
Select(y => y.ErrorMessage).
ToArray()
};
return errorModel;
}
public override void OnActionExecuting (System.Web.Http.Controllers.HttpActionContext actionContext)
{
var modelState = actionContext.ModelState;
if (!modelState.IsValid)
{
actionContext.Response =
actionContext.Request.CreateResponse
(HttpStatusCode.BadRequest,GetErrorModelObject(modelState));
}
}
}
}

@ -121,10 +121,19 @@ Avatar </td><td> <img class="avatar" src="/Blogs/Avatar?user=<%=ViewData["User
<input type="submit"/> <input type="submit"/>
<% } %> <% } %>
</asp:Content> </asp:Content>
<asp:Content ID="MASC1" ContentPlaceHolderID="MASContent" runat="server"> <asp:Content ID="MASC1" ContentPlaceHolderID="MASContent" runat="server">
<% if (Roles.IsUserInRole("Admin")) { %>
Admin,
Bankable:<%= Model.IsBankable %>, Billable:<%=Model.IsBillable%>
<% } %>
<%= Html.ActionLink("Changer de mot de passe","ChangePassword", "Account")%> <%= Html.ActionLink("Changer de mot de passe","ChangePassword", "Account")%>
</asp:Content> </asp:Content>

@ -1,14 +1,14 @@
<%@ Page Title="Devis" Language="C#" Inherits="System.Web.Mvc.ViewPage<Estimate>" MasterPageFile="~/Models/App.master" %> <%@ Page Title="Devis" Language="C#" Inherits="System.Web.Mvc.ViewPage<Estimate>" MasterPageFile="~/Models/App.master" %>
<asp:Content ContentPlaceHolderID="head" ID="head1" runat="server" > <asp:Content ContentPlaceHolderID="head" ID="head1" runat="server" >
<script type="text/javascript" src="/js/jquery-latest.js"></script> <script type="text/javascript" src="<%=Url.Content("~/js/jquery-latest.js")%>"></script>
<script type="text/javascript" src="/js/jquery.tablesorter.js"></script> <script type="text/javascript" src="<%=Url.Content("~/js/jquery.tablesorter.js")%>"></script>
<link rel="stylesheet" href="/Theme/dark/style.css" type="text/css" media="print, projection, screen" /> <script type="text/javascript" src="<%=Url.Content("~/js/jquery.validate.js")%>"></script>
<script type="text/javascript" src="<%=Url.Content("~/js/jquery.validate.unobtrusive.js")%>"></script>
<link rel="stylesheet" href="<%=Url.Content("~/Theme/dark/style.css")%>" type="text/css" media="print, projection, screen" />
</asp:Content> </asp:Content>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server"> <asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
<%= Html.ValidationSummary("Devis") %> <%= Html.ValidationSummary("Devis") %>
<% using (Html.BeginForm("Estimate","FrontOffice")) { %> <% using (Html.BeginForm("Estimate","FrontOffice")) { %>
<%= Html.LabelFor(model => model.Title) %>:<%= Html.TextBox( "Title" ) %> <%= Html.LabelFor(model => model.Title) %>:<%= Html.TextBox( "Title" ) %>
@ -21,14 +21,12 @@
<%= Html.LabelFor(model => model.Description) %>:<%=Html.TextArea( "Description") %> <%= Html.LabelFor(model => model.Description) %>:<%=Html.TextArea( "Description") %>
<%= Html.ValidationMessage("Description", "*") %> <%= Html.ValidationMessage("Description", "*") %>
<br/> <br/>
<%= Html.LabelFor(model => model.Id) %>:<%=Model.Id%>
<%= Html.Hidden( "Id" ) %> <%= Html.Hidden( "Id" ) %>
<br/> <br/>
<% if (Model.Id==0) { %> <% if (Model.Id==0) { %>
<input type="submit" name="submit" value="Create"/> <input type="submit" name="submit" value="Create"/>
<% } else { %> <% } else { %>
<input type="submit" name="submit" value="Update"/> <input type="submit" name="submit" value="Update"/>
<% } %> <% } %>
@ -36,17 +34,17 @@
<table class="tablesorter"> <table class="tablesorter">
<thead> <thead>
<tr> <tr>
<th><%=LocalizedText.Description%></th> <th><%=Yavsc.Model.LocalizedText.Description%></th>
<th><%=LocalizedText.Product_reference%></th> <th><%=Yavsc.Model.LocalizedText.Product_reference%></th>
<th><%=LocalizedText.Count%></th> <th><%=Yavsc.Model.LocalizedText.Count%></th>
<th><%=LocalizedText.Unitary_cost%></th> <th><%=Yavsc.Model.LocalizedText.Unitary_cost%></th>
</tr> </tr>
</thead> </thead>
<tbody id="wrts"> <tbody id="wrts">
<% int lc=0; <% int lc=0;
if (Model.Lines!=null) if (Model.Lines!=null)
foreach (Writting wr in Model.Lines) { lc++; %> foreach (Writting wr in Model.Lines) { lc++; %>
<tr class="<%= (lc%2==0)?"odd ":"" %>row" id="wr<%=wr.Id%>"> <tr class="<%= (lc%2==0)?"odd ":"even " %>row" id="wr<%=wr.Id%>">
<td><%=wr.Description%></td> <td><%=wr.Description%></td>
<td><%=wr.ProductReference%></td> <td><%=wr.ProductReference%></td>
<td><%=wr.Count%></td> <td><%=wr.Count%></td>
@ -60,73 +58,61 @@
</asp:Content> </asp:Content>
<asp:Content ContentPlaceHolderID="MASContent" ID="MASContent1" runat="server"> <asp:Content ContentPlaceHolderID="MASContent" ID="MASContent1" runat="server">
<div>
<script type="text/javascript" > <% ViewData["EstimateId"]=Model.Id; %>
function ShowHideBtn(btn,id) <%= Html.Partial("Writting",new Writting(),new ViewDataDictionary(ViewData)
{ {
var shdiv = document.getElementById(id); TemplateInfo = new System.Web.Mvc.TemplateInfo
var wanit = shdiv.style.display == "none"; // switch button {
shdiv.style.display = wanit ? "block" : "none"; HtmlFieldPrefix = ViewData.TemplateInfo.HtmlFieldPrefix==""?"wr":ViewData.TemplateInfo.HtmlFieldPrefix+"_wr"
btn.value = wanit ? "-" : "+"; }
} }) %>
</script> <form>
<input type="button" id="btnnew" value="Nouvelle écriture"/>
<form id="writeform"> <input type="button" id="btncreate" value="Ecrire"/>
<input type="button" id="btndtl" value="+"/> <input type="button" id="btnmodify" value="Modifier" class="hidden"/>
<input type="button" id="btndrop" value="Supprimer" class="hidden"/>
<div id="writearea" style="display:none;"> </form>
<input type="button" id="btnnew" value="Nouvelle écriture"/> <tt id="msg" class="hidden message"></tt>
<input type="hidden" name="estid" id="estid" value="<%=Model.Id%>"/>
<label for="Description">Description:</label>
<textarea name="Description" id="wrdesc" ></textarea>
<label for="UnitaryCost">Prix unitaire:</label>
<input type="number" name="UnitaryCost" id="UnitaryCost" step="0.01"/>
<label for="Count">Quantité:</label>
<input type="number" name="Count" id="Count"/>
<label for="ProductReference">Référence du produit:</label>
<input type="text" name="ProductReference" id="ProductReference"/>
<input type="button" name="btnmodify" id="btnmodify" value="Modifier"/>
<input type="button" name="btncreate" id="btncreate" value="Écrire"/>
<input type="button" name="btndrop" id="btndrop" value="Supprimer"/>
<input type="hidden" name="wrid" id="wrid" />
<tt id="msg" class="message" style="display:none;"></tt>
<style> <style>
.row { cursor:pointer; } .row { cursor:pointer; }
table.tablesorter td:hover { background-color: rgba(0,64,0,0.5); } table.tablesorter td:hover { background-color: rgba(0,64,0,0.5); }
.hidden { display:none; } .hidden { display:none; }
.selected *, .odd .selected { font-size-adjust: +1; background-color: rgb(0,64,0); } .selected td { background-color: rgba(0,64,0,0.5); }
</style> </style>
<script> <script>
jQuery.support.cors = true; jQuery.support.cors = true;
function message(msg) { function message(msg) {
if (msg) { $("#msg").css("display:inline"); if (msg) {
$("#msg").text(msg);} else { $("#msg").css("display:hidden"); } } $("#msg").removeClass("hidden");
$("#msg").text(msg);
} else { $("#msg").addClass("hidden"); } }
function GetWritting () {
function GetWritting () {
return { return {
Id: Number($("#wrid").val()), Id: Number($("#wr_Id").val()),
UnitaryCost: Number($("#UnitaryCost").val()), UnitaryCost: Number($("#wr_UnitaryCost").val()),
Count: parseInt($("#Count").val()), Count: parseInt($("#wr_Count").val()),
ProductReference: $("#ProductReference").val(), ProductReference: $("#wr_ProductReference").val(),
Description: $("#wrdesc").val() Description: $("#wr_Description").val()
}; };
} }
function wredit(pwrid) function wredit(pwrid)
{ {
$("#wr"+wrid.value).removeClass("selected");
$("#wrid").val(pwrid); $("#wr"+wr_Id.value).removeClass("selected");
if (wrid.value!=0) $("#wr"+wr_Id.value).addClass((wr_Id.value%2==0)?"even":"odd");
$("#wr"+wrid.value).addClass("selected"); $("#wr_Id").val(pwrid);
if (pwrid>0) { if (pwrid>0) {
$("#btncreate").addClass("hidden"); $("#btncreate").addClass("hidden");
$("#btnmodify").removeClass("hidden"); $("#btnmodify").removeClass("hidden");
$("#btndrop").removeClass("hidden"); $("#btndrop").removeClass("hidden");
$("#wr"+wr_Id.value).removeClass((wr_Id.value%2==0)?"even":"odd");
$("#wr"+wr_Id.value).addClass("selected");
} else { } else {
$("#btncreate").removeClass("hidden"); $("#btncreate").removeClass("hidden");
$("#btnmodify").addClass("hidden"); $("#btnmodify").addClass("hidden");
@ -136,19 +122,19 @@
function delRow() { function delRow() {
$.ajax({ $.ajax({
url: "<%=ViewData["WABASEWF"]+"/DropWritting"%>", url: "<%=Url.Content("~/api/WorkFlow/DropWritting")%>",
type: "Get", type: "Get",
data: { wrid: wrid.value }, data: { wrid: wr_Id.value },
contentType: 'application/json; charset=utf-8', contentType: 'application/json; charset=utf-8',
success: function () { success: function () {
var tr = document.getElementById("wr"+wrid.value); $("#wr"+wr_Id.value).remove();
$("#wr"+wrid.value).remove(); $("#wr_Id").val(0);
$("#wrid").val(0); $("#wr_UnitaryCost").val(0);
$("#ucost").val(0); $("#wr_Count").val(0);
$("#Count").val(0); $("#wr_Description").val();
$("#Description").val(); $("#wr_ProductReference").val();
$("#ProductReference").val();
wredit(0); wredit(0);
message(false);
}, },
error: function (xhr, ajaxOptions, thrownError) { error: function (xhr, ajaxOptions, thrownError) {
message(xhr.status+" : "+xhr.responseText);} message(xhr.status+" : "+xhr.responseText);}
@ -159,22 +145,19 @@
function setRow() { function setRow() {
var wrt = GetWritting(); var wrt = GetWritting();
$.ajax({ $.ajax({
url: "<%=ViewData["WABASEWF"]+"/UpdateWritting"%>", url: "<%=Url.Content("~/api/WorkFlow/UpdateWritting")%>",
type: 'POST', type: 'POST',
data: wrt, data: wrt,
success: function (ms) { success: function () {
if (ms) var cells = document.getElementById("wr"+wrt.Id).getElementsByTagName("TD");
message(JSON.stringify(ms));
else {
var cells = document.getElementById("wr"+wrt.Id).getElementsByTagName("TD");
cells[0].innerHTML=wrt.Description; cells[0].innerHTML=wrt.Description;
cells[1].innerHTML=wrt.ProductReference; cells[1].innerHTML=wrt.ProductReference;
cells[2].innerHTML=wrt.UnitaryCost; cells[2].innerHTML=wrt.Count;
cells[3].innerHTML=wrt.Count; cells[3].innerHTML=wrt.UnitaryCost;
} message(false);
}, },
error: function (xhr, ajaxOptions, thrownError) { error: function (xhr, ajaxOptions, thrownError) {
$("#msg").text(xhr.status+" : "+xhr.responseText);} message (xhr.status+" : "+xhr.responseText+" / "+thrownError);}
}); });
} }
@ -183,15 +166,13 @@ function addRow(){
var wrt = GetWritting(); var wrt = GetWritting();
var estid = parseInt($("#Id").val()); var estid = parseInt($("#Id").val());
$.ajax({ $.ajax({
url: "<%=ViewData["WABASEWF"]+"/Write"%>/?estid="+estid, url: "<%=Url.Content("~/api/WorkFlow/Write?estid=")%>"+estid,
type: "POST", type: "POST",
data: wrt, data: wrt,
success: function (data) { success: function (data) {
wrt.Id = Number(data); wrt.Id = Number(data);
wrid.value = wrt.Id; wr_Id.value = wrt.Id;
var wridval = 'wr'+wrt.Id; var wridval = 'wr'+wrt.Id;
//$("#wrts").append("<tr class=\"selected row\" id=\"wr"+wrt.Id+"\"><td>"+wrt.Description+"</td><td>"+wrt.ProductReference+"</td><td>"+wrt.Count+"</td><td>"+wrt.UnitaryCost+"</td></tr>");
jQuery('<tr/>', { jQuery('<tr/>', {
id: wridval, id: wridval,
"class": 'selected row', "class": 'selected row',
@ -201,50 +182,56 @@ function addRow(){
$("<td>"+wrt.Count+"</td>").appendTo("#"+wridval); $("<td>"+wrt.Count+"</td>").appendTo("#"+wridval);
$("<td>"+wrt.UnitaryCost+"</td>").appendTo("#"+wridval); $("<td>"+wrt.UnitaryCost+"</td>").appendTo("#"+wridval);
$("#"+wridval).click(function(ev){onEditRow(ev);}); $("#"+wridval).click(function(ev){onEditRow(ev);});
$(".tablesorter").tablesorter( {sortList: [[0,0], [1,0]]} );
message(false);
}, },
statusCode: {
400: function(data) {
alert(JSON.stringify(data));
}
},
error: function (xhr, ajaxOptions, thrownError) { error: function (xhr, ajaxOptions, thrownError) {
message(xhr.status+" : "+xhr.responseText);}}); message(xhr.status+" : "+xhr.responseText+" / "+thrownError);}});
} }
function ShowDtl(val)
{
document.getElementById("writearea").style.display = val ? "block" : "none";
document.getElementById("btndtl").value = val ? "-" : "+";
}
function onEditRow(e) { function onEditRow(e) {
ShowDtl(true);
var cells = e.delegateTarget.getElementsByTagName("TD"); var cells = e.delegateTarget.getElementsByTagName("TD");
var hid=e.delegateTarget.id; var hid=e.delegateTarget.id;
var vwrid = Number(hid.substr(2)); var vwrid = Number(hid.substr(2));
wredit(vwrid); wredit(vwrid);
$("#wrdesc").val(cells[0].innerHTML); $("#wr_Description").val(cells[0].innerHTML);
$("#ProductReference").val(cells[1].innerHTML); $("#wr_ProductReference").val(cells[1].innerHTML);
$("#Count").val(cells[2].innerHTML); $("#wr_Count").val(cells[2].innerHTML);
$("#UnitaryCost").val(Number(cells[3].innerHTML.replace(",","."))); $("#wr_UnitaryCost").val(Number(cells[3].innerHTML.replace(",",".")));
} }
$(document).ready(function () { $(document).ready(function () {
// bug when no row: $(".tablesorter").tablesorter( {sortList: [[0,0], [1,0]]} ); // bug when no row:
<% if (Model.Lines != null) if (Model.Lines.Length>0) { %>
$(".tablesorter").tablesorter( {sortList: [[0,0], [1,0]]} );
<% } %>
$("#btncreate").click(addRow); $("#btncreate").click(addRow);
$("#btnmodify").click(setRow); $("#btnmodify").click(setRow);
$("#btndrop").click(delRow); $("#btndrop").click(delRow);
$("#btndtl").click(function(){ShowDtl(document.getElementById("writearea").style.display != "block");});
$(".row").click(function (e) {onEditRow(e);}); $(".row").click(function (e) {onEditRow(e);});
$("#btnnew").click(function () { $("#btnnew").click(function () {
wredit(0); wredit(0);
$("#wrdesc").val(""); $("#wr_Description").val("");
$("#ProductReference").val(""); $("#wr_ProductReference").val("");
$("#Count").val(1); $("#wr_Count").val(1);
$("#UnitaryCost").val(0); $("#wr_UnitaryCost").val(0);
}); });
}); });
</script> </script>
</div>
</div>
</form> </form>
<a class="actionlink" href="<%=ViewData["WebApiBase"]%>/FrontOffice/GetEstimTex?estimid=<%=Model.Id%>"><%= LocalizedText.Tex_version %></a> <a class="actionlink" href="<%=ViewData["WebApiBase"]%>/FrontOffice/GetEstimTex?estimid=<%=Model.Id%>"><%= LocalizedText.Tex_version %></a>
<a class="actionlink" href="<%=ViewData["WebApiBase"]%>/FrontOffice/GetEstimPdf?estimid=<%=Model.Id%>"><%= LocalizedText.Pdf_version %></a> <a class="actionlink" href="<%=ViewData["WebApiBase"]%>/FrontOffice/GetEstimPdf?estimid=<%=Model.Id%>"><%= LocalizedText.Pdf_version %></a>
</div>
</asp:Content> </asp:Content>

@ -1,14 +0,0 @@
<%@ Page Title="Ligne de devis" Language="C#" Inherits="System.Web.Mvc.ViewPage<Writting>" MasterPageFile="~/Models/App.master" %>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
<%= Html.ValidationSummary("Ligne de devis") %>
<% using (Html.BeginForm("Write","WorkFlow")) { %>
<%= Html.LabelFor(model => model.Id) %>:<%=Model.Id%>
<%= Html.Hidden( "Id" ) %>
<%= Html.Hidden( "EstimateId", (long) ViewData["EstimateId"]) %>
<%= Html.LabelFor(model => model.UnitaryCost) %>:<%= Html.TextBox( "UnitaryCost" ) %>
<%= Html.ValidationMessage("UnitaryCost", "*") %>
<% } %>
</asp:Content>

@ -0,0 +1,23 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Writting>" %>
<%= Html.ValidationSummary("Ligne de devis") %>
<% using (Html.BeginForm("Write","WorkFlow")) { %>
<%= Html.Hidden( "Id" ) %>
<%= Html.Hidden( "EstimateId", (long) ViewData["EstimateId"]) %>
<%= Html.LabelFor(model => model.Description) %>:<%= Html.TextBox( "Description" ) %>
<%= Html.ValidationMessage("Description", "*") %>
<br/>
<%= Html.LabelFor(model => model.ProductReference) %>:<%= Html.TextBox( "ProductReference" ) %>
<%= Html.ValidationMessage("ProductReference", "*") %>
<br/>
<%= Html.LabelFor(model => model.UnitaryCost) %>:<%= Html.TextBox( "UnitaryCost" ) %>
<%= Html.ValidationMessage("UnitaryCost", "*") %>
<br/>
<%= Html.LabelFor(model => model.Count) %>:<%= Html.TextBox( "Count" ) %>
<%= Html.ValidationMessage("Count", "*") %><br/>
<% } %>

@ -1,17 +0,0 @@
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<div>
test
</div>
</body>
</html>

@ -29,7 +29,6 @@
<add namespace="Yavsc.Model.Admin" /> <add namespace="Yavsc.Model.Admin" />
<add namespace="Yavsc.Model.Blogs" /> <add namespace="Yavsc.Model.Blogs" />
<add namespace="Yavsc.Model.WorkFlow" /> <add namespace="Yavsc.Model.WorkFlow" />
<add namespace="Yavsc.App_GlobalResources" />
</namespaces> </namespaces>
</pages> </pages>
</system.web> </system.web>

@ -227,5 +227,7 @@ http://msdn2.microsoft.com/en-us/library/b5ysx397.aspx
<add key="Name" value="Psc" /> <add key="Name" value="Psc" />
<add key="DefaultAvatar" value="/images/noavatar.png;image/png" /> <add key="DefaultAvatar" value="/images/noavatar.png;image/png" />
<add key="RegistrationMessage" value="/RegistrationMail.txt" /> <add key="RegistrationMessage" value="/RegistrationMail.txt" />
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings> </appSettings>
</configuration> </configuration>

@ -155,14 +155,9 @@
<DependentUpon>Estim.tt</DependentUpon> <DependentUpon>Estim.tt</DependentUpon>
</Compile> </Compile>
<Compile Include="templates\TexEstimInit.cs" /> <Compile Include="templates\TexEstimInit.cs" />
<Compile Include="Formatters\TexFormatter.cs" />
<Compile Include="Formatters\EstimToPdfFormatter.cs" /> <Compile Include="Formatters\EstimToPdfFormatter.cs" />
<Compile Include="App_GlobalResources\LocalizedText.Designer.cs"> <Compile Include="Formatters\SimpleFormatter.cs" />
<DependentUpon>LocalizedText.resx</DependentUpon> <Compile Include="ValidateAjaxAttribute.cs" />
</Compile>
<Compile Include="App_GlobalResources\LocalizedText.fr.Designer.cs">
<DependentUpon>LocalizedText.fr.resx</DependentUpon>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Views\Web.config" /> <Content Include="Views\Web.config" />
@ -221,12 +216,10 @@
<Content Include="Views\Admin\Restored.aspx" /> <Content Include="Views\Admin\Restored.aspx" />
<Content Include="Views\Admin\Index.aspx" /> <Content Include="Views\Admin\Index.aspx" />
<Content Include="Views\FrontOffice\Estimate.aspx" /> <Content Include="Views\FrontOffice\Estimate.aspx" />
<Content Include="Views\FrontOffice\test.cshtml" />
<Content Include="js\jquery.metadata.js" /> <Content Include="js\jquery.metadata.js" />
<Content Include="js\jquery.tablesorter.js" /> <Content Include="js\jquery.tablesorter.js" />
<Content Include="js\jquery.tablesorter.min.js" /> <Content Include="js\jquery.tablesorter.min.js" />
<Content Include="js\jquery-latest.js" /> <Content Include="js\jquery-latest.js" />
<Content Include="Views\FrontOffice\Write.aspx" />
<Content Include="Theme\style.css" /> <Content Include="Theme\style.css" />
<Content Include="Theme\green\asc.png" /> <Content Include="Theme\green\asc.png" />
<Content Include="Theme\green\bg.png" /> <Content Include="Theme\green\bg.png" />
@ -247,6 +240,7 @@
<Content Include="Catalog.xml" /> <Content Include="Catalog.xml" />
<Content Include="RegistrationMail.txt" /> <Content Include="RegistrationMail.txt" />
<Content Include="instdbws.sql" /> <Content Include="instdbws.sql" />
<Content Include="Views\FrontOffice\Writting.ascx" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
@ -301,14 +295,4 @@
<Name>NpgsqlWorkflow</Name> <Name>NpgsqlWorkflow</Name>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="App_GlobalResources\LocalizedText.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>LocalizedText.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="App_GlobalResources\LocalizedText.fr.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>LocalizedText.fr.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project> </Project>

@ -75,10 +75,10 @@
\def\FactureNum {<#= estim.Id.ToString() #>} % Numéro de facture \def\FactureNum {<#= estim.Id.ToString() #>} % Numéro de facture
\def\FactureAcquittee {non} % Facture acquittée : oui/non \def\FactureAcquittee {non} % Facture acquittée : oui/non
\def\FactureLieu {<#= from.CityAndState #>} % Lieu de l'édition de la facture \def\FactureLieu {<#= from.CityAndState #>} % Lieu de l'édition de la facture
\def\FactureObjet {Facture} % Objet du document \def\FactureObjet {Facture : <#= estim.Title #>} % Objet du document
% Description de la facture % Description de la facture
\def\FactureDescr {% \def\FactureDescr {%
<#= estim.Title #> <#= estim.Description #>
} }
% Infos Client % Infos Client
@ -104,9 +104,6 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\geometry{verbose,tmargin=4em,bmargin=8em,lmargin=6em,rmargin=6em} \geometry{verbose,tmargin=4em,bmargin=8em,lmargin=6em,rmargin=6em}
\setlength{\parindent}{0pt} \setlength{\parindent}{0pt}
\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex} \setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
@ -185,7 +182,5 @@ Facture n°\FactureNum
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
} }
\end{document} \end{document}

@ -0,0 +1,151 @@
// ------------------------------------------------------------------------------
// <autogenerated>
// This code was generated by a tool.
// Mono Runtime Version: 4.0.30319.17020
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </autogenerated>
// ------------------------------------------------------------------------------
namespace Yavsc.Model {
using System;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class LocalizedText {
private static System.Resources.ResourceManager resourceMan;
private static System.Globalization.CultureInfo resourceCulture;
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal LocalizedText() {
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
public static System.Resources.ResourceManager ResourceManager {
get {
if (object.Equals(null, resourceMan)) {
System.Resources.ResourceManager temp = new System.Resources.ResourceManager("Yavsc.Model.LocalizedText", typeof(LocalizedText).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
public static System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
public static string Preview {
get {
return ResourceManager.GetString("Preview", resourceCulture);
}
}
public static string Register {
get {
return ResourceManager.GetString("Register", resourceCulture);
}
}
public static string Unitary_cost {
get {
return ResourceManager.GetString("Unitary_cost", resourceCulture);
}
}
public static string Not_Approuved {
get {
return ResourceManager.GetString("Not Approuved", resourceCulture);
}
}
public static string Remove {
get {
return ResourceManager.GetString("Remove", resourceCulture);
}
}
public static string Online {
get {
return ResourceManager.GetString("Online", resourceCulture);
}
}
public static string Product_reference {
get {
return ResourceManager.GetString("Product_reference", resourceCulture);
}
}
public static string Welcome {
get {
return ResourceManager.GetString("Welcome", resourceCulture);
}
}
public static string Title {
get {
return ResourceManager.GetString("Title", resourceCulture);
}
}
public static string Offline {
get {
return ResourceManager.GetString("Offline", resourceCulture);
}
}
public static string Ciffer {
get {
return ResourceManager.GetString("Ciffer", resourceCulture);
}
}
public static string Pdf_version {
get {
return ResourceManager.GetString("Pdf_version", resourceCulture);
}
}
public static string Description {
get {
return ResourceManager.GetString("Description", resourceCulture);
}
}
public static string User_name {
get {
return ResourceManager.GetString("User_name", resourceCulture);
}
}
public static string User_List {
get {
return ResourceManager.GetString("User List", resourceCulture);
}
}
public static string Tex_version {
get {
return ResourceManager.GetString("Tex_version", resourceCulture);
}
}
public static string Count {
get {
return ResourceManager.GetString("Count", resourceCulture);
}
}
}
}

@ -12,6 +12,13 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="Count"><value>Nombre</value></data>
<data name="Ciffer"><value>Chiffre</value></data>
<data name="Title"><value>Titre</value></data>
<data name="Description"><value>Description</value></data>
<data name="Product_reference"><value>Référence produit</value></data>
<data name="Unitary_cost"><value>Coût unitaire</value></data>
<data name="Count"><value>Nombre</value></data>
<data name="Preview"><value>Prévisualiser</value><comment>Prévisualiser le document</comment></data> <data name="Preview"><value>Prévisualiser</value><comment>Prévisualiser le document</comment></data>
<data name="Welcome"><value>Bienvenue</value><comment></comment></data> <data name="Welcome"><value>Bienvenue</value><comment></comment></data>
<data name="User List"><value>Liste des utilisateurs</value><comment></comment></data> <data name="User List"><value>Liste des utilisateurs</value><comment></comment></data>
@ -23,8 +30,4 @@
<data name="Pdf_version"><value>Version Pdf</value></data> <data name="Pdf_version"><value>Version Pdf</value></data>
<data name="Tex_version"><value>Version LaTeX</value></data> <data name="Tex_version"><value>Version LaTeX</value></data>
<data name="User_name"><value>Nom d'utilisateur</value></data> <data name="User_name"><value>Nom d'utilisateur</value></data>
<data name="Description"><value>Description</value></data>
<data name="Product_reference"><value>Référence produit</value></data>
<data name="Unitary_cost"><value>Coût unitaire</value></data>
<data name="Count"><value>Nombre</value></data>
</root> </root>

@ -11,7 +11,14 @@
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="Count"><value>Count</value></data>
<data name="Ciffer"><value>Ciffer</value></data>
<data name="Title"><value>Title</value></data>
<data name="Description"><value>Description</value></data>
<data name="Product_reference"><value>Product_reference</value></data>
<data name="Unitary_cost"><value>Unitary_cost</value></data>
<data name="Count"><value>Count</value></data>
<data name="Preview"><value>Preview</value><comment>comment on preview</comment></data> <data name="Preview"><value>Preview</value><comment>comment on preview</comment></data>
<data name="Welcome"><value>Welcome</value><comment></comment></data> <data name="Welcome"><value>Welcome</value><comment></comment></data>
<data name="User List"><value>User List</value><comment></comment></data> <data name="User List"><value>User List</value><comment></comment></data>
@ -23,9 +30,4 @@
<data name="Pdf_version"><value>Pdf version</value></data> <data name="Pdf_version"><value>Pdf version</value></data>
<data name="Tex_version"><value>LaTeX version</value></data> <data name="Tex_version"><value>LaTeX version</value></data>
<data name="User_name"><value>User name</value></data> <data name="User_name"><value>User name</value></data>
<data name="Description"><value>Description</value></data>
<data name="Product_reference"><value>Product_reference</value></data>
<data name="Unitary_cost"><value>Unitary_cost</value></data>
<data name="Count"><value>Count</value></data>
</root> </root>

@ -11,7 +11,7 @@ namespace Yavsc.Model.WorkFlow
{ {
} }
[Required] [Required]
[DisplayName("Titre")] [Display(ResourceType = typeof(LocalizedText),Name="Title")]
public string Title { get; set; } public string Title { get; set; }
[Required] [Required]
[DisplayName("Description")] [DisplayName("Description")]
@ -24,7 +24,7 @@ namespace Yavsc.Model.WorkFlow
public string Client { get; set; } public string Client { get; set; }
public long Id { get; set; } public long Id { get; set; }
[DisplayName("Chiffre")] [Display(ResourceType = typeof(LocalizedText),Name="Ciffer")]
public decimal Ciffer { public decimal Ciffer {
get { get {
decimal total = 0; decimal total = 0;

@ -1,5 +1,6 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Yavsc.Model;
namespace Yavsc.Model.WorkFlow namespace Yavsc.Model.WorkFlow
{ {
@ -20,13 +21,14 @@ namespace Yavsc.Model.WorkFlow
/// Who knows? /// Who knows?
/// </summary> /// </summary>
/// <value>The unitary cost.</value> /// <value>The unitary cost.</value>
[Display(Name="Coût unitaire")] [Display(ResourceType = typeof(LocalizedText),Name="Unitary_cost")]
[Required(ErrorMessage="Veuillez renseigner un coût unitaire")] [Required(ErrorMessage="Veuillez renseigner un coût unitaire")]
public decimal UnitaryCost { get; set; } public decimal UnitaryCost { get; set; }
/// <summary> /// <summary>
/// Gets or sets the count. /// Gets or sets the count.
/// </summary> /// </summary>
/// <value>The count.</value> /// <value>The count.</value>
[Display(ResourceType = typeof(LocalizedText),Name="Count")]
[Required(ErrorMessage="Veuillez renseigner un multiplicateur pour cette imputation")] [Required(ErrorMessage="Veuillez renseigner un multiplicateur pour cette imputation")]
public int Count { get; set; } public int Count { get; set; }
/// <summary> /// <summary>
@ -35,6 +37,7 @@ namespace Yavsc.Model.WorkFlow
/// <value>The product reference.</value> /// <value>The product reference.</value>
[Required(ErrorMessage="Veuillez renseigner une référence produit")] [Required(ErrorMessage="Veuillez renseigner une référence produit")]
[StringLength(512)] [StringLength(512)]
[Display(ResourceType = typeof(LocalizedText),Name="Product_reference")]
public string ProductReference { get; set; } public string ProductReference { get; set; }
/// <summary> /// <summary>
/// Gets or sets the description. /// Gets or sets the description.
@ -42,6 +45,7 @@ namespace Yavsc.Model.WorkFlow
/// <value>The description.</value> /// <value>The description.</value>
[Required(ErrorMessage="Veuillez renseigner une description de cette imputation.")] [Required(ErrorMessage="Veuillez renseigner une description de cette imputation.")]
[StringLength (2048)] [StringLength (2048)]
[Display(ResourceType = typeof(LocalizedText),Name="Description")]
public string Description { get; set; } public string Description { get; set; }
public override string ToString () public override string ToString ()

@ -7,7 +7,7 @@
<SchemaVersion>2.0</SchemaVersion> <SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{68F5B80A-616E-4C3C-91A0-828AA40000BD}</ProjectGuid> <ProjectGuid>{68F5B80A-616E-4C3C-91A0-828AA40000BD}</ProjectGuid>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<RootNamespace>yavscModel</RootNamespace> <RootNamespace>Yavsc.Model</RootNamespace>
<AssemblyName>YavscModel</AssemblyName> <AssemblyName>YavscModel</AssemblyName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@ -78,6 +78,12 @@
<Compile Include="Blogs\Configuration\BlogProvidersConfigurationCollection.cs" /> <Compile Include="Blogs\Configuration\BlogProvidersConfigurationCollection.cs" />
<Compile Include="Blogs\Configuration\BlogProvidersConfigurationSection.cs" /> <Compile Include="Blogs\Configuration\BlogProvidersConfigurationSection.cs" />
<Compile Include="WorkFlow\NewEstimateEvenArgs.cs" /> <Compile Include="WorkFlow\NewEstimateEvenArgs.cs" />
<Compile Include="LocalizedText.fr.Designer.cs">
<DependentUpon>LocalizedText.fr.resx</DependentUpon>
</Compile>
<Compile Include="LocalizedText.Designer.cs">
<DependentUpon>LocalizedText.resx</DependentUpon>
</Compile>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup> <ItemGroup>
@ -102,4 +108,14 @@
</Properties> </Properties>
</MonoDevelop> </MonoDevelop>
</ProjectExtensions> </ProjectExtensions>
<ItemGroup>
<EmbeddedResource Include="LocalizedText.fr.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>LocalizedText.fr.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="LocalizedText.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>LocalizedText.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project> </Project>
Loading…