* Web.csproj:
* LocalizedText.resx: * SimpleFormatter.cs: * TemplateException.cs: * ErrorHtmlFormatter.cs: * LocalizedText.Designer.cs: * WorkFlowManager.cs: * Makefile: refactoring * FrontOfficeApiController.cs: nice html error response in case of error at rendering a tex or pdf document * LocalizedText.fr.resx: Gives as title at rendering a template processing error
This commit is contained in:
11
Makefile
11
Makefile
@ -3,8 +3,8 @@ VERSION=1.1
|
||||
CONFIG=Debug
|
||||
DESTDIR=build/web/$(CONFIG)
|
||||
COPYUNCHANGED="false"
|
||||
PREPRODHOST=yavsc.localdomain
|
||||
|
||||
PREPRODHOSTDIR=localhost:/srv/www/yavsc
|
||||
PRODHOSTDIR=localhost:/srv/www/lua
|
||||
all: deploy
|
||||
|
||||
ddir:
|
||||
@ -25,13 +25,10 @@ clean:
|
||||
rm -rf $(DESTDIR)
|
||||
|
||||
rsync-preprod: deploy
|
||||
rsync -ravu build/web/$(CONFIG)/ root@$(PREPRODHOST):/srv/www/yavsc
|
||||
rsync -ravu build/web/$(CONFIG)/ root@$(PREPRODHOSTDIR)
|
||||
|
||||
rsync-prod: deploy
|
||||
rsync -ravu build/web/$(CONFIG)/ root@$(PREPRODHOST):/srv/www/lua
|
||||
|
||||
rsync-local:
|
||||
rsync -ravu build/web/$(CONFIG)/ root@localhost:/srv/www/yavsc
|
||||
rsync -ravu build/web/$(CONFIG)/ root@$(PRODHOSTDIR)
|
||||
|
||||
sourcepkg:
|
||||
git archive --format=tar --prefix=yavsc-$(CONFIG)/ $(CONFIG) | bzip2 > yavsc-$(CONFIG).tar.bz2
|
||||
|
@ -22,6 +22,7 @@ using Yavsc.Formatters;
|
||||
using System.Text;
|
||||
using System.Web.Profile;
|
||||
using System.Collections.Specialized;
|
||||
using Yavsc.Model;
|
||||
|
||||
namespace Yavsc.ApiControllers
|
||||
{
|
||||
@ -102,9 +103,28 @@ namespace Yavsc.ApiControllers
|
||||
[AcceptVerbs("GET")]
|
||||
public HttpResponseMessage GetEstimTex(long estimid)
|
||||
{
|
||||
string texest = getEstimTex (estimid);
|
||||
string texest = null;
|
||||
try {
|
||||
texest = getEstimTex (estimid);
|
||||
}
|
||||
catch (TemplateException ex) {
|
||||
return new HttpResponseMessage (HttpStatusCode.OK){ Content =
|
||||
new ObjectContent (typeof(string),
|
||||
ex.Message, new ErrorHtmlFormatter(HttpStatusCode.NotAcceptable,
|
||||
LocalizedText.DocTemplateException
|
||||
))};
|
||||
}
|
||||
catch (Exception ex) {
|
||||
return new HttpResponseMessage (HttpStatusCode.OK){ Content =
|
||||
new ObjectContent (typeof(string),
|
||||
ex.Message, new SimpleFormatter("text/text")) };
|
||||
}
|
||||
if (texest == null)
|
||||
throw new HttpRequestValidationException ("Not an estimation id:"+estimid);
|
||||
return new HttpResponseMessage (HttpStatusCode.OK) { Content =
|
||||
new ObjectContent (typeof(string),
|
||||
"Not an estimation id:" + estimid, new SimpleFormatter ("text/text"))
|
||||
};
|
||||
|
||||
return new HttpResponseMessage () {
|
||||
Content = new ObjectContent (typeof(string),
|
||||
texest,
|
||||
@ -121,11 +141,11 @@ namespace Yavsc.ApiControllers
|
||||
|
||||
Profile prpro = new Profile(ProfileBase.Create(e.Responsible));
|
||||
if (!prpro.IsBankable)
|
||||
throw new Exception ("NotBankable:"+e.Responsible);
|
||||
throw new TemplateException ("NotBankable:"+e.Responsible);
|
||||
|
||||
Profile prcli = new Profile(ProfileBase.Create(e.Client));
|
||||
if (!prcli.IsBillable)
|
||||
throw new Exception ("NotBillable:"+e.Client);
|
||||
throw new TemplateException ("NotBillable:"+e.Client);
|
||||
tmpe.Session.Add ("from", prpro);
|
||||
tmpe.Session.Add ("to", prcli);
|
||||
tmpe.Init ();
|
||||
|
40
web/Controllers/TemplateException.cs
Normal file
40
web/Controllers/TemplateException.cs
Normal file
@ -0,0 +1,40 @@
|
||||
using System;
|
||||
using Yavsc;
|
||||
using SalesCatalog;
|
||||
using SalesCatalog.Model;
|
||||
using System.Web.Routing;
|
||||
using System.Threading.Tasks;
|
||||
using System.Diagnostics;
|
||||
using System.Web.Http;
|
||||
using System.Net.Http;
|
||||
using System.Web;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using WorkFlowProvider;
|
||||
using System.Web.Security;
|
||||
using Yavsc.Model.WorkFlow;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using Yavsc.Model.RolesAndMembers;
|
||||
using Yavsc.Controllers;
|
||||
using Yavsc.Formatters;
|
||||
using System.Text;
|
||||
using System.Web.Profile;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
namespace Yavsc.ApiControllers
|
||||
{
|
||||
|
||||
class TemplateException : Exception
|
||||
{
|
||||
public TemplateException(string message):base(message)
|
||||
{
|
||||
}
|
||||
public TemplateException(string message,Exception innerException):base(message,innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
74
web/Formatters/ErrorHtmlFormatter.cs
Normal file
74
web/Formatters/ErrorHtmlFormatter.cs
Normal file
@ -0,0 +1,74 @@
|
||||
//
|
||||
// ErrorHtmlFormatter.cs
|
||||
//
|
||||
// Author:
|
||||
// paul <${AuthorEmail}>
|
||||
//
|
||||
// Copyright (c) 2015 paul
|
||||
//
|
||||
// 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.Net.Http.Formatting;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net.Http;
|
||||
using System.Web.Mvc;
|
||||
using System.Net;
|
||||
|
||||
namespace Yavsc.Formatters
|
||||
{
|
||||
|
||||
public class ErrorHtmlFormatter:SimpleFormatter {
|
||||
public string Title { get ; set; }
|
||||
public HttpStatusCode ErrorCode { get ; set; }
|
||||
string doctype="<!DOCTYPE html>";
|
||||
public ErrorHtmlFormatter
|
||||
(HttpStatusCode errorCode, string title):base("text/html")
|
||||
{
|
||||
ErrorCode = errorCode;
|
||||
Title = title;
|
||||
|
||||
}
|
||||
|
||||
public override void WriteToStream (Type type, object value, Stream stream, HttpContentHeaders contentHeaders)
|
||||
{
|
||||
// TODO create a type containing T4 parameters, and generate from them
|
||||
using (var writer = new StreamWriter(stream))
|
||||
{
|
||||
string message = value as string;
|
||||
TagBuilder doc = new TagBuilder ("html");
|
||||
TagBuilder body = new TagBuilder ("body");
|
||||
TagBuilder h1 = new TagBuilder ("h1");
|
||||
TagBuilder p = new TagBuilder ("p");
|
||||
TagBuilder head = new TagBuilder ("head");
|
||||
head.InnerHtml = "<meta http-equiv=\"Content-Type\" " +
|
||||
"content=\"text/html; charset=utf-8\"/>" +
|
||||
"<link rel=\"stylesheet\" " +
|
||||
"href=\"/Theme/style.css\" />" +
|
||||
"<link rel=\"icon\" type=\"image/png\"" +
|
||||
" href=\"/favicon.png\" />";
|
||||
p.InnerHtml = MvcHtmlString.Create (message).ToHtmlString();
|
||||
h1.InnerHtml = MvcHtmlString.Create (Title).ToHtmlString();
|
||||
body.InnerHtml = h1.ToString()+p.ToString ();
|
||||
doc.InnerHtml = head.ToString()+"\n"+body.ToString ();
|
||||
writer.WriteLine (doctype);
|
||||
writer.Write (doc.ToString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -24,6 +24,8 @@ using System.Net.Http.Headers;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net.Http;
|
||||
using System.Web.Mvc;
|
||||
using System.Net;
|
||||
|
||||
namespace Yavsc.Formatters
|
||||
{
|
||||
@ -63,5 +65,6 @@ namespace Yavsc.Formatters
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -172,6 +172,8 @@
|
||||
<Compile Include="Helpers\Google\EntityQuery.cs" />
|
||||
<Compile Include="Helpers\Google\ApiClient.cs" />
|
||||
<Compile Include="Helpers\Google\Calendar.cs" />
|
||||
<Compile Include="Controllers\TemplateException.cs" />
|
||||
<Compile Include="Formatters\ErrorHtmlFormatter.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Web.config" />
|
||||
@ -639,7 +641,7 @@
|
||||
<Policies>
|
||||
<DotNetNamingPolicy DirectoryNamespaceAssociation="PrefixedFlat" ResourceNamePolicy="FileFormatDefault" />
|
||||
</Policies>
|
||||
<XspParameters Port="8080" Address="127.0.0.1" SslMode="None" SslProtocol="Default" KeyType="None" CertFile="" KeyFile="" PasswordOptions="None" Password="" Verbose="True" />
|
||||
<XspParameters Port="8080" Address="192.168.0.47" SslMode="None" SslProtocol="Default" KeyType="None" CertFile="" KeyFile="" PasswordOptions="None" Password="" Verbose="True" />
|
||||
</Properties>
|
||||
</MonoDevelop>
|
||||
</ProjectExtensions>
|
||||
|
6
yavscModel/LocalizedText.Designer.cs
generated
6
yavscModel/LocalizedText.Designer.cs
generated
@ -154,6 +154,12 @@ namespace Yavsc.Model {
|
||||
}
|
||||
}
|
||||
|
||||
public static string DocTemplateException {
|
||||
get {
|
||||
return ResourceManager.GetString("DocTemplateException", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
public static string Description {
|
||||
get {
|
||||
return ResourceManager.GetString("Description", resourceCulture);
|
||||
|
@ -39,4 +39,6 @@
|
||||
<data name="MaxDate"><value>Date maximale du rendez-vous</value></data>
|
||||
<data name="Date_search"><value>Demande de rendez-vous</value></data>
|
||||
<data name="Remember_me"><value>Se souvenir du mot de passe</value></data>
|
||||
<data name="DocTemplateException"><value>Une erreur est survenue à la génération de votre document</value></data>
|
||||
|
||||
</root>
|
||||
|
@ -39,4 +39,6 @@
|
||||
<data name="MaxDate"><value>Maximal date for the rendez-vous</value></data>
|
||||
<data name="Date_search"><value>Rendez-vous query</value></data>
|
||||
<data name="Remember_me"><value>Remember me</value></data>
|
||||
<data name="DocTemplateException"><value>Exception occured when rendering your document</value></data>
|
||||
|
||||
</root>
|
||||
|
@ -20,7 +20,11 @@ namespace Yavsc.Model.WorkFlow
|
||||
{
|
||||
ContentProvider.UpdateEstimate (estim);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the estimate.
|
||||
/// </summary>
|
||||
/// <returns>The estimate.</returns>
|
||||
/// <param name="estid">Estid.</param>
|
||||
public Estimate GetEstimate (long estid)
|
||||
{
|
||||
return ContentProvider.GetEstimate (estid);
|
||||
|
Reference in New Issue
Block a user