* InputCircle.cs: An input control specialized for circle selection

* UserCard.cs: Displays user informations on a little div

* Estim.cs:
* WebControls.csproj:
* CircleInfo.cs:
* CircleProvider.cs:
* CircleApiController.cs:
* BasketApiController.cs:
* ITContentProvider.csproj:
* CalendarApiController.cs:
* WorkFlowApiController.cs:
* NpgsqlCircleProvider.cs:
* FrontOfficeApiController.cs:

* InputUserName.cs: Fixes the ToolBoxData attribute

* Web.csproj:
* Circle.cs: refactoring

* instdbws.sql: Foreign keys are cascading updates and deletions

* Estim.tt:
* Profile.cs: User's profile does not contain anymore the main e-mail
  address, it conflicts with registration informations, it is not part
  of the profile data
main
Paul Schneider 11 years ago
parent 3d050e019e
commit 6680addcc8
24 changed files with 796 additions and 227 deletions

@ -1,3 +1,7 @@
2015-06-10 Paul Schneider <paul@pschneider.fr>
* ITContentProvider.csproj:
2015-06-09 Paul Schneider <paul@pschneider.fr>
* ITContentProvider.csproj: Helps to fix packaging, and cleans

@ -66,7 +66,9 @@
<Folder Include="Views\Modules\" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Modules\IT\Index.aspx" />
<Content Include="Views\Modules\IT\Index.aspx">
<DeployService-Deploy>True</DeployService-Deploy>
</Content>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />

@ -1,3 +1,7 @@
2015-06-10 Paul Schneider <paul@pschneider.fr>
* NpgsqlCircleProvider.cs:
2015-06-10 Paul Schneider <paul@pschneider.fr>
* NpgsqlCircleProvider.cs: implements a Circle provider

@ -22,6 +22,9 @@ using System;
using Yavsc.Model.Circles;
using System.Collections.Specialized;
using System.Configuration;
using Npgsql;
using NpgsqlTypes;
using System.Collections.Generic;
namespace WorkFlowProvider
{
@ -38,45 +41,172 @@ namespace WorkFlowProvider
}
#region implemented abstract members of CircleProvider
/// <summary>
/// Add the specified owner, title and users.
/// Add the specified user.
/// </summary>
/// <param name="owner">Owner.</param>
/// <param name="title">Title.</param>
/// <param name="users">Users.</param>
public override void Add (string owner, string title, string[] users)
/// <param name="id">circle Identifier.</param>
/// <param name="username">User name.</param>
public override void Add (long id, string username)
{
throw new NotImplementedException ();
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString))
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
cmd.CommandText = "insert into circle_members (circle_id, member) values (:cid,:uname)";
cmd.Parameters.AddWithValue("cid",id);
cmd.Parameters.AddWithValue("uname",username);
cnx.Open ();
cmd.ExecuteNonQuery ();
cnx.Close ();
}
}
/// <summary>
/// Delete the specified owner and title.
/// Remove the specified user.
/// </summary>
/// <param name="owner">Owner.</param>
/// <param name="title">Title.</param>
public override void Delete (string owner, string title)
/// <param name="id">circle Identifier.</param>
/// <param name="username">User name.</param>
public override void Remove (long id, string username)
{
throw new NotImplementedException ();
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString))
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
cmd.CommandText = "delete from circle_members where circle_id = :cid and username = :uname";
cmd.Parameters.AddWithValue("cid",id);
cmd.Parameters.AddWithValue("uname",username);
cnx.Open ();
cmd.ExecuteNonQuery ();
cnx.Close ();
}
}
/// <summary>
/// Get the specified owner and title.
/// Get the specified id.
/// </summary>
/// <param name="id">Identifier.</param>
public override Circle Get (long id)
{
Circle circ=null;
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString)) {
cnx.Open ();
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
cmd.CommandText = "select title, owner from circle where _id = :cid";
cmd.Parameters.AddWithValue ("cid", id);
using (NpgsqlDataReader dr = cmd.ExecuteReader ()) {
if (dr.Read ()) {
circ = new Circle ();
circ.Id = id;
circ.Title = dr.GetString (
dr.GetOrdinal ("title"));
circ.Owner = dr.GetString (
dr.GetOrdinal ("owner"));
}
dr.Close ();
}
}
if (circ != null) {
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
cmd.CommandText = "select member from circle_members where circle_id = :cid";
cmd.Parameters.AddWithValue ("cid", id);
cmd.Prepare ();
List<string> members = new List<string> ();
using (NpgsqlDataReader dr = cmd.ExecuteReader ()) {
while (dr.Read ())
members.Add (dr.GetString (0));
dr.Close ();
circ.Members = members.ToArray ();
}
}
}
cnx.Close ();
}
return circ;
}
/// <summary>
/// Add the specified owner, title and users.
/// </summary>
/// <param name="owner">Owner.</param>
/// <param name="title">Title.</param>
public override Circle Get (string owner, string title)
/// <param name="users">Users.</param>
public override long Create (string owner, string title, string[] users)
{
long id = 0;
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString)) {
cnx.Open ();
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
cmd.CommandText = "insert into circle (owner,title,applicationname) values (:wnr,:tit,:app) returning _id";
cmd.Parameters.AddWithValue ("wnr", owner);
cmd.Parameters.AddWithValue ("tit", title);
cmd.Parameters.AddWithValue ("app", applicationName);
id = (long)cmd.ExecuteScalar ();
}
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
cmd.CommandText = "insert into circle_members (circle_id,member) values (@cid,@mbr)";
cmd.Parameters.AddWithValue ("cid", id);
cmd.Parameters.Add ("mbr", NpgsqlDbType.Varchar);
cmd.Prepare ();
foreach (string user in users) {
cmd.Parameters[1].Value = user;
cmd.ExecuteNonQuery ();
}
}
cnx.Close ();
}
throw new NotImplementedException ();
}
/// <summary>
/// Delete the specified owner and title.
/// </summary>
/// <param name="id">Identifier.</param>
public override void Delete (long id)
{
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString))
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
cmd.CommandText = "delete from circle where _id = @cid";
cmd.Parameters.AddWithValue("cid",id);
cnx.Open ();
cmd.ExecuteNonQuery ();
cnx.Close ();
}
}
/// <summary>
/// List this instance.
/// List user's circles.
/// </summary>
public override CircleInfoCollection List ()
/// <param name="user">User.</param>
public override CircleInfoCollection List (string user)
{
throw new NotImplementedException ();
CircleInfoCollection cc = null;
using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString))
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
cmd.CommandText = "select _id, title from circle where owner = :wnr";
cmd.Parameters.AddWithValue("wnr",user);
cnx.Open ();
cmd.Prepare ();
using (NpgsqlDataReader rdr = cmd.ExecuteReader ()) {
if (rdr.HasRows) {
cc = new CircleInfoCollection ();
while (rdr.Read ())
cc.Add(
new CircleInfo (
rdr.GetInt64 (0),
rdr.GetString (1)));
}
rdr.Close ();
}
cnx.Close ();
}
return cc;
}
#endregion
string cnxstr = null;
string connectionString = null;
string applicationName = null;
/// <summary>
/// Initialize this object using the specified name and config.
@ -88,7 +218,7 @@ namespace WorkFlowProvider
if ( string.IsNullOrWhiteSpace(config ["connectionStringName"]))
throw new ConfigurationErrorsException ("No name for Npgsql connection string found");
cnxstr = ConfigurationManager.ConnectionStrings [config ["connectionStringName"]].ConnectionString;
connectionString = ConfigurationManager.ConnectionStrings [config ["connectionStringName"]].ConnectionString;
applicationName = config["applicationName"] ?? "/";
}

@ -0,0 +1,11 @@
2015-06-10 Paul Schneider <paul@pschneider.fr>
* InputCircle.cs: An input control specialized for circle
selection
* UserCard.cs: Displays user informations on a little div
* InputUserName.cs: Fixes the ToolBoxData attribute
* WebControls.csproj:

@ -0,0 +1,163 @@
//
// InputCircle.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 System.Web;
using System.Security.Permissions;
using System.Web.UI;
using System.ComponentModel;
using System.Web.UI.WebControls;
using Yavsc.Model.Circles;
using System.Web.Security;
namespace WebControls
{
/// <summary>
/// Input circle.
/// </summary>
[
AspNetHostingPermission (SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission (SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal),
ParseChildren (true),
DefaultProperty ("Name"),
ToolboxData ("<{0}:InputCircle runat=\"server\"> </{0}:InputCircle>")
]
public class InputCircle: WebControl
{
/// <summary>
/// Initializes a new instance of the <see cref="WebControls.InputCircle"/> class.
/// </summary>
public InputCircle ()
{
}
/// <summary>
/// Gets or sets the name.
/// </summary>
/// <value>The name.</value>
[Bindable (true), DefaultValue(""), Localizable(true)]
public string Name {
get {
return (string) ViewState["Name"];
}
set {
ViewState ["Name"] = value;
}
}
/// <summary>
/// Gets or sets the value.
/// </summary>
/// <value>The value.</value>
[Bindable (true), DefaultValue(""), Localizable(true)]
public string Value {
get {
return (string) ViewState["Value"];
}
set {
ViewState ["Value"] = value;
}
}
/// <summary>
/// Gets or sets the on change.
/// </summary>
/// <value>The on change.</value>
[Bindable (true), DefaultValue(""), Localizable(false)]
public string OnChange {
get {
return (string) ViewState["OnChange"];
}
set {
ViewState ["OnChange"] = value;
}
}
/// <summary>
/// Gets or sets a value indicating whether this <see cref="Yavsc.WebControls.InputUserName"/> is multiple.
/// </summary>
/// <value><c>true</c> if multiple; otherwise, <c>false</c>.</value>
[Bindable (true), DefaultValue(false)]
public bool Multiple {
get {
return (bool) ViewState["Multiple"];
}
set {
ViewState ["Multiple"] = value;
}
}
/// <summary>
/// Gets or sets the empty value.
/// </summary>
/// <value>The empty value.</value>
[Bindable (true), DefaultValue(null)]
public string EmptyValue {
get {
return (string) ViewState["EmptyValue"];
}
set {
ViewState ["EmptyValue"] = value;
}
}
/// <summary>
/// Renders the contents.
/// </summary>
/// <param name="writer">Writer.</param>
protected override void RenderContents (HtmlTextWriter writer)
{
writer.AddAttribute ("id", ID);
writer.AddAttribute ("name", Name);
writer.AddAttribute ("class", CssClass);
if (!string.IsNullOrWhiteSpace(OnChange))
writer.AddAttribute ("onchange", OnChange);
if (Multiple)
writer.AddAttribute ("multiple","true");
writer.RenderBeginTag ("select");
string[] selected = null;
if (!string.IsNullOrWhiteSpace (Value)) {
selected = Value.Split (',');
}
if (EmptyValue!=null) {
writer.AddAttribute ("value", "");
writer.RenderBeginTag ("option");
writer.Write (EmptyValue);
writer.RenderEndTag ();
}
var u = Membership.GetUser ();
if (u != null) {
foreach (CircleInfo ci in CircleManager.DefaultProvider.List(u.UserName)) {
if (selected != null)
if (Array.Exists (selected, x => x == ci.Id.ToString ()))
writer.AddAttribute ("selected", null);
writer.AddAttribute ("value", ci.Id.ToString ());
writer.RenderBeginTag ("option");
writer.Write (ci.Title);
writer.RenderEndTag ();
}
}
writer.RenderEndTag ();
}
}
}

@ -39,7 +39,7 @@ namespace Yavsc.WebControls
Level = AspNetHostingPermissionLevel.Minimal),
ParseChildren (true),
DefaultProperty ("Name"),
ToolboxData ("<{0}:ResultPages runat=\"server\"> </{0}:ResultPages>")
ToolboxData ("<{0}:InputUserName runat=\"server\"> </{0}:InputUserName>")
]
public class InputUserName: WebControl
{
@ -70,9 +70,7 @@ namespace Yavsc.WebControls
/// Gets or sets the value.
/// </summary>
/// <value>The value.</value>
[Bindable (true)]
[DefaultValue("")]
[Localizable(true)]
[Bindable (true),DefaultValue(""),Localizable(true)]
public string Value {
get {
return (string) ViewState["Value"];
@ -82,9 +80,11 @@ namespace Yavsc.WebControls
}
}
[Bindable (true)]
[DefaultValue("")]
[Localizable(false)]
/// <summary>
/// Gets or sets the client side action on change.
/// </summary>
/// <value>The on change.</value>
[Bindable (true),DefaultValue(""),Localizable(false)]
public string OnChange {
get {
return (string) ViewState["OnChange"];
@ -99,9 +99,7 @@ namespace Yavsc.WebControls
/// Gets or sets the in role.
/// </summary>
/// <value>The in role.</value>
[Bindable (true)]
[DefaultValue("")]
[Localizable(true)]
[Bindable (true),DefaultValue(""),Localizable(true)]
public string InRole {
get {
return (string) ViewState["InRole"];
@ -115,8 +113,7 @@ namespace Yavsc.WebControls
/// Gets or sets a value indicating whether this <see cref="Yavsc.WebControls.InputUserName"/> is multiple.
/// </summary>
/// <value><c>true</c> if multiple; otherwise, <c>false</c>.</value>
[Bindable (true)]
[DefaultValue(false)]
[Bindable (true), DefaultValue(false)]
public bool Multiple {
get {
@ -128,9 +125,11 @@ namespace Yavsc.WebControls
}
}
[Bindable (true)]
[DefaultValue(null)]
/// <summary>
/// Gets or sets the empty value.
/// </summary>
/// <value>The empty value.</value>
[Bindable (true), DefaultValue(null)]
public string EmptyValue {
get {
return (string) ViewState["EmptyValue"];

@ -0,0 +1,81 @@
//
// UserCard.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 System.Web.UI.WebControls;
using System.Web;
using System.Security.Permissions;
using System.Web.UI;
using System.ComponentModel;
using System.Web.Security;
namespace WebControls
{
[
AspNetHostingPermission (SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission (SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal),
ParseChildren (true),
DefaultProperty ("Name"),
ToolboxData ("<{0}:UserCard runat=\"server\"> </{0}:UserCard>")
]
/// <summary>
/// User card.
/// </summary>
public class UserCard: WebControl
{
/// <summary>
/// Initializes a new instance of the <see cref="WebControls.UserCard"/> class.
/// </summary>
public UserCard ()
{
}
[Bindable (true), DefaultValue(""), Localizable(false)]
string UserName { get; set; }
[Bindable (true), DefaultValue("(<a href=\"/Account/Profile\">You</a>)"), Localizable(true)]
string yourTag { get; set; }
/// <summary>
/// Renders the contents.
/// </summary>
/// <param name="writer">Writer.</param>
protected override void RenderContents (HtmlTextWriter writer)
{
if (UserName != null) {
// icon, stats
writer.AddAttribute ("id", ID);
writer.AddAttribute ("class", CssClass);
writer.RenderBeginTag ("div");
writer.Write (UserName+" ");
var vuser = Membership.GetUser();
if (vuser != null)
if (vuser.UserName == UserName)
writer.Write (yourTag);
writer.RenderEndTag ();
}
}
}
}

@ -39,11 +39,20 @@
<Reference Include="System.Web.Mvc" />
<Reference Include="System.Web.Http" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Configuration" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ResultPages.cs" />
<Compile Include="InputUserName.cs" />
<Compile Include="InputCircle.cs" />
<Compile Include="UserCard.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\yavscModel\YavscModel.csproj">
<Project>{68F5B80A-616E-4C3C-91A0-828AA40000BD}</Project>
<Name>YavscModel</Name>
</ProjectReference>
</ItemGroup>
</Project>

@ -15,7 +15,7 @@ namespace Yavsc.ApiControllers
/// Maintains a collection of articles
/// qualified with name value pairs
/// </summary>
public class BasketController : ApiController
public class BasketApiController : ApiController
{
/// <summary>
/// The wfmgr.

@ -34,7 +34,7 @@ namespace Yavsc.ApiControllers
/// <summary>
/// Night flash controller.
/// </summary>
public class CalendarController: ApiController
public class CalendarApiController: ApiController
{
YaEvent[] getTestList()
{

@ -30,50 +30,71 @@ namespace Yavsc.ApiControllers
/// <summary>
/// Circle controller.
/// </summary>
public class CircleController : ApiController
public class CircleApiController : ApiController
{
/// <summary>
/// Add the specified id and users.
/// Creates the specified circle using the given title and user list.
/// </summary>
/// <param name="id">Identifier.</param>
/// <param name="title">Title.</param>
/// <param name="title">Identifier.</param>
/// <param name="users">Users.</param>
[Authorize]
public void Add(string id, string [] users)
public long Create(string title, string [] users)
{
string user = Membership.GetUser ().UserName;
CircleManager.DefaultProvider.Add (user, id, users);
return CircleManager.DefaultProvider.Create (user, title, users);
}
/// <summary>
/// Delete the specified id.
/// Add the specified users to the circle.
/// </summary>
/// <param name="id">Circle Identifier.</param>
/// <param name="username">username.</param>
[Authorize]
public void Add(long id, string username)
{
checkIsOwner (CircleManager.DefaultProvider.Get (id));
CircleManager.DefaultProvider.Add (id, username);
}
/// <summary>
/// Delete the circle specified by id.
/// </summary>
/// <param name="id">Identifier.</param>
[Authorize] public void Delete(string id)
[Authorize] public void Delete(long id)
{
checkIsOwner (CircleManager.DefaultProvider.Get(id));
CircleManager.DefaultProvider.Delete (id);
}
private void checkIsOwner(Circle c)
{
string user = Membership.GetUser ().UserName;
CircleManager.DefaultProvider.Delete (user, id);
if (c.Owner != user)
throw new AccessViolationException ("You're not owner of this circle");
}
/// <summary>
/// Get the specified id.
/// Get the circle specified id.
/// </summary>
/// <param name="id">Identifier.</param>
[Authorize]
public Circle Get(string id)
public Circle Get(long id)
{
string user = Membership.GetUser ().UserName;
return CircleManager.DefaultProvider.Get (user, id);
var c = CircleManager.DefaultProvider.Get (id);
checkIsOwner (c);
return c;
}
/// <summary>
/// List this instance.
/// List the circles
/// </summary>
[Authorize]
public CircleInfoCollection List()
{
string user = Membership.GetUser ().UserName;
return CircleManager.DefaultProvider.List ();
return CircleManager.DefaultProvider.List (user);
}
}
}

@ -100,7 +100,6 @@ namespace Yavsc.ApiControllers
Estimate e = wfmgr.GetEstimate (estimid);
tmpe.Session = new Dictionary<string,object> ();
tmpe.Session.Add ("estim", e);
Profile prpro = new Profile (ProfileBase.Create (e.Responsible));
if (!prpro.HasBankAccount)
throw new TemplateException ("NotBankable:" + e.Responsible);
@ -114,6 +113,8 @@ namespace Yavsc.ApiControllers
tmpe.Session.Add ("from", prpro);
tmpe.Session.Add ("to", prcli);
tmpe.Session.Add ("efrom", Membership.GetUser (e.Responsible).Email);
tmpe.Session.Add ("efrom", Membership.GetUser (e.Client).Email);
tmpe.Init ();
return tmpe.TransformText ();
}

@ -17,7 +17,7 @@ namespace Yavsc.ApiControllers
/// <summary>
/// Work flow controller.
/// </summary>
public class WorkFlowController : ApiController
public class WorkFlowApiController : ApiController
{
string adminRoleName="Admin";
/// <summary>

@ -1,3 +1,21 @@
2015-06-10 Paul Schneider <paul@pschneider.fr>
* Estim.cs:
* BasketApiController.cs:
* CircleApiController.cs:
* CalendarApiController.cs:
* WorkFlowApiController.cs:
* FrontOfficeApiController.cs:
* Web.csproj: refactoring
* instdbws.sql: Foreign keys are cascading updates and
deletions
* Estim.tt: User's profile does not contain anymore the main
e-mail address, it conflicts with registration informations,
it is not part of the profile data
2015-06-10 Paul Schneider <paul@pschneider.fr>
* CalendarController.cs: refactoring

@ -126,6 +126,7 @@
<Folder Include="Views\PayPal\" />
<Folder Include="ApiControllers\" />
<Folder Include="Views\Modules\" />
<Folder Include="Views\Circle\" />
</ItemGroup>
<ItemGroup>
<Compile Include="Controllers\HomeController.cs" />
@ -173,21 +174,21 @@
<Compile Include="Formatters\ErrorHtmlFormatter.cs" />
<Compile Include="Formatters\RssFeedsFormatter.cs" />
<Compile Include="Formatters\TexToPdfFormatter.cs" />
<Compile Include="ApiControllers\BasketController.cs" />
<Compile Include="ApiControllers\BlogsApiController.cs" />
<Compile Include="ApiControllers\FrontOfficeApiController.cs" />
<Compile Include="ApiControllers\PaypalApiController.cs" />
<Compile Include="WebApiConfig.cs" />
<Compile Include="ApiControllers\WorkFlowController.cs" />
<Compile Include="IValueProvider.cs" />
<Compile Include="Formatters\EstimToPdfFormatter.MSAN.cs" />
<Compile Include="Helpers\TemplateException.cs" />
<Compile Include="Helpers\MarkdownHelper.cs" />
<Compile Include="ApiControllers\CalendarController.cs" />
<Compile Include="Formatters\FormatterException.cs" />
<Compile Include="NUnitTestClass.cs" />
<Compile Include="TestExec.cs" />
<Compile Include="ApiControllers\CircleController.cs" />
<Compile Include="ApiControllers\CircleApiController.cs" />
<Compile Include="ApiControllers\BasketApiController.cs" />
<Compile Include="ApiControllers\CalendarApiController.cs" />
<Compile Include="ApiControllers\WorkFlowApiController.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Web.config" />

@ -256,10 +256,10 @@ CREATE TABLE comment
CONSTRAINT comment_pkey PRIMARY KEY (_id),
CONSTRAINT fkey_blog FOREIGN KEY (postid)
REFERENCES blog (_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
ON UPDATE CASCADE ON DELETE ,
CONSTRAINT fkey_users FOREIGN KEY (username, applicationname)
REFERENCES users (username, applicationname) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
@ -342,7 +342,7 @@ CREATE TABLE histoestim
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT histoestim_username_fkey FOREIGN KEY (username, applicationname)
REFERENCES users (username, applicationname) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
@ -401,7 +401,7 @@ CREATE TABLE projet
CONSTRAINT projet_pk_new PRIMARY KEY (id),
CONSTRAINT pk_project_manager FOREIGN KEY (managerid, "ApplicationName")
REFERENCES users (username, applicationname) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
@ -427,7 +427,7 @@ CREATE TABLE stocksymbols
stocksymbol character varying(10),
CONSTRAINT fkprofiles1 FOREIGN KEY (uniqueid)
REFERENCES profiles (uniqueid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
@ -489,7 +489,7 @@ CREATE TABLE tasks
CONSTRAINT tasks_pk_new PRIMARY KEY (id),
CONSTRAINT tasks_fk_new FOREIGN KEY (prid)
REFERENCES projet (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
@ -507,10 +507,10 @@ CREATE TABLE taskdeps
CONSTRAINT pk_tasks_deps PRIMARY KEY ("taskId", deptask),
CONSTRAINT pk_foreign_dep FOREIGN KEY (deptask)
REFERENCES tasks (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT pk_foreign_task FOREIGN KEY ("taskId")
REFERENCES tasks (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
@ -583,10 +583,10 @@ CREATE TABLE wrtags
CONSTRAINT wrtags_pkey1 PRIMARY KEY (wrid, tagid),
CONSTRAINT cstwrtagsref FOREIGN KEY (tagid)
REFERENCES tag (_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT wrtags_wrid_fkey1 FOREIGN KEY (wrid)
REFERENCES writtings (_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
@ -640,7 +640,7 @@ CREATE TABLE histowritting
CONSTRAINT histowritting_pkey PRIMARY KEY (_id),
CONSTRAINT histowritting_username_fkey FOREIGN KEY (username, applicationname)
REFERENCES users (username, applicationname) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT histowritting_wrtid_fkey FOREIGN KEY (wrtid)
REFERENCES writtings (_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
@ -648,3 +648,44 @@ CREATE TABLE histowritting
WITH (
OIDS=FALSE
);
-- Table: circle
-- DROP TABLE circle;
CREATE TABLE circle
(
_id serial NOT NULL, -- Circle identifier
owner character varying(255), -- creator of this circle
applicationname character varying(255), -- Application name
CONSTRAINT circle_pkey PRIMARY KEY (_id),
CONSTRAINT circle_owner_fkey FOREIGN KEY (owner, applicationname)
REFERENCES users (username, applicationname) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
COMMENT ON COLUMN circle._id IS 'Circle identifier';
COMMENT ON COLUMN circle.owner IS 'creator of this circle';
COMMENT ON COLUMN circle.applicationname IS 'Application name';
-- Table: circle_members
-- DROP TABLE circle_members;
CREATE TABLE circle_members
(
circle_id bigint NOT NULL,
member character varying NOT NULL,
CONSTRAINT circle_members_pkey PRIMARY KEY (circle_id, member),
CONSTRAINT circle_members_member_fkey FOREIGN KEY (member)
REFERENCES users (pkid) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);

@ -37,6 +37,18 @@ namespace Yavsc.templates {
return this._toField;
}
}
private String _efromField;
public String efrom {
get {
return this._efromField;
}
}
private String _etoField;
public String eto {
get {
return this._etoField;
}
}
public virtual string TransformText() {
@ -48,699 +60,699 @@ namespace Yavsc.templates {
#line default
#line hidden
#line 14 ""
#line 16 ""
this.Write("\n\\documentclass[french,11pt]{article}\n\\usepackage{babel}\n\\usepackage[T1]{fontenc}\n\\usepackage[utf8]{inputenc}\n\\usepackage[a4paper]{geometry}\n\\usepackage{units}\n\\usepackage{bera}\n\\usepackage{graphicx}\n\\usepackage{fancyhdr}\n\\usepackage{fp}\n\n\\def\\TVA{20} % Taux de la TVA\n\n\\def\\TotalHT{0}\n\\def\\TotalTVA{0}\n\n\\newcommand{\\AjouterService}[3]{% Arguments : Désignation, quantité, prix\n \\FPround{\\prix}{#3}{2}\n \\FPeval{\\montant}{#2 * #3}\n \\FPround{\\montant}{\\montant}{2}\n \\FPadd{\\TotalHT}{\\TotalHT}{\\montant}\n \n \\eaddto\\ListeProduits{#1 & \\prix & #2 & \\montant \\cr}\n}\n\n\n\\newcommand{\\AfficheResultat}{%\n \\ListeProduits\n \n \\FPeval{\\TotalTVA}{\\TotalHT * \\TVA / 100}\n \\FPadd{\\TotalTTC}{\\TotalHT}{\\TotalTVA}\n \\FPround{\\TotalHT}{\\TotalHT}{2}\n \\FPround{\\TotalTVA}{\\TotalTVA}{2}\n \\FPround{\\TotalTTC}{\\TotalTTC}{2}\n \\global\\let\\TotalHT\\TotalHT\n \\global\\let\\TotalTVA\\TotalTVA\n \\global\\let\\TotalTTC\\TotalTTC\n \n\n \\cr \n \\hline\n \\textbf{Total} & & & \\TotalHT\n}\n\n\\newcommand*\\eaddto[2]{% version développée de \\addto\n \\edef\\tmp{#2}%\n \\expandafter\\addto\n \\expandafter#1%\n \\expandafter{\\tmp}%\n}\n\n\\newcommand{\\ListeProduits}{}\n\n\n\n\n%%%%%%%%%%%%%%%%%%%%% A MODIFIER DANS LA FACTURE %%%%%%%%%%%%%%%%%%%%%\n\n\\def\\FactureNum {");
#line default
#line hidden
#line 73 ""
#line 75 ""
this.Write(this.ToStringHelper.ToStringWithCulture( estim.Id.ToString() ));
#line default
#line hidden
#line 73 ""
#line 75 ""
this.Write("} % Numéro de facture\n\\def\\FactureAcquittee {non} % Facture acquittée : oui/non\n\\def\\FactureLieu {");
#line default
#line hidden
#line 75 ""
#line 77 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.CityAndState ));
#line default
#line hidden
#line 75 ""
#line 77 ""
this.Write("} % Lieu de l'édition de la facture\n\\def\\FactureObjet {Facture : ");
#line default
#line hidden
#line 76 ""
#line 78 ""
this.Write(this.ToStringHelper.ToStringWithCulture( estim.Title ));
#line default
#line hidden
#line 76 ""
#line 78 ""
this.Write("} % Objet du document\n% Description de la facture\n\\def\\FactureDescr {%\n ");
#line default
#line hidden
#line 79 ""
#line 81 ""
this.Write(this.ToStringHelper.ToStringWithCulture( estim.Description ));
#line default
#line hidden
#line 79 ""
#line 81 ""
this.Write("\n}\n\n% Infos Client\n\\def\\ClientNom{");
#line default
#line hidden
#line 83 ""
#line 85 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.Name ));
#line default
#line hidden
#line 83 ""
#line 85 ""
this.Write("} % Nom du client\n\\def\\ClientAdresse{% % Adresse du client\n ");
#line default
#line hidden
#line 85 ""
#line 87 ""
if (!string.IsNullOrWhiteSpace(to.Address)) {
#line default
#line hidden
#line 86 ""
#line 88 ""
this.Write(" ");
#line default
#line hidden
#line 86 ""
#line 88 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.Address ));
#line default
#line hidden
#line 86 ""
#line 88 ""
this.Write("\\\\\n ");
#line default
#line hidden
#line 87 ""
#line 89 ""
}
#line default
#line hidden
#line 88 ""
#line 90 ""
this.Write(" ");
#line default
#line hidden
#line 88 ""
#line 90 ""
if (!string.IsNullOrWhiteSpace(to.ZipCode)) {
#line default
#line hidden
#line 89 ""
#line 91 ""
this.Write(" ");
#line default
#line hidden
#line 89 ""
#line 91 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.ZipCode ));
#line default
#line hidden
#line 89 ""
#line 91 ""
this.Write(" ");
#line default
#line hidden
#line 89 ""
#line 91 ""
}
#line default
#line hidden
#line 90 ""
#line 92 ""
this.Write(" ");
#line default
#line hidden
#line 90 ""
#line 92 ""
if (!string.IsNullOrWhiteSpace(to.ZipCode)) {
#line default
#line hidden
#line 91 ""
#line 93 ""
this.Write(" ");
#line default
#line hidden
#line 91 ""
#line 93 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.CityAndState ));
#line default
#line hidden
#line 91 ""
#line 93 ""
this.Write("\\\\ ");
#line default
#line hidden
#line 91 ""
#line 93 ""
}
#line default
#line hidden
#line 92 ""
#line 94 ""
this.Write(" \n");
#line default
#line hidden
#line 93 ""
#line 95 ""
if (!string.IsNullOrWhiteSpace(to.Phone)) {
#line default
#line hidden
#line 94 ""
#line 96 ""
this.Write(" Téléphone fixe: ");
#line default
#line hidden
#line 94 ""
#line 96 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.Phone ));
#line default
#line hidden
#line 94 ""
#line 96 ""
this.Write("\\\\\n");
#line default
#line hidden
#line 95 ""
#line 97 ""
}
#line default
#line hidden
#line 96 ""
#line 98 ""
if (!string.IsNullOrWhiteSpace(to.Mobile)) {
#line default
#line hidden
#line 97 ""
#line 99 ""
this.Write(" Mobile: ");
#line default
#line hidden
#line 97 ""
#line 99 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.Mobile ));
#line default
#line hidden
#line 97 ""
#line 99 ""
this.Write("\\\\\n");
#line default
#line hidden
#line 98 ""
#line 100 ""
}
#line default
#line hidden
#line 99 ""
#line 101 ""
this.Write(" ");
#line default
#line hidden
#line 99 ""
if (!string.IsNullOrWhiteSpace(to.Email)) {
#line 101 ""
if (!string.IsNullOrWhiteSpace(eto)) {
#line default
#line hidden
#line 100 ""
#line 102 ""
this.Write(" E-mail: ");
#line default
#line hidden
#line 100 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.Email ));
#line 102 ""
this.Write(this.ToStringHelper.ToStringWithCulture( eto ));
#line default
#line hidden
#line 100 ""
#line 102 ""
}
#line default
#line hidden
#line 101 ""
#line 103 ""
this.Write("}\n\n% Liste des produits facturés : Désignation, prix\n\n ");
#line default
#line hidden
#line 105 ""
#line 107 ""
foreach (Writting wr in estim.Lines) {
#line default
#line hidden
#line 106 ""
#line 108 ""
this.Write("\\AjouterService {");
#line default
#line hidden
#line 106 ""
#line 108 ""
this.Write(this.ToStringHelper.ToStringWithCulture(wr.Description));
#line default
#line hidden
#line 106 ""
#line 108 ""
this.Write(" ");
#line default
#line hidden
#line 106 ""
#line 108 ""
if (!string.IsNullOrWhiteSpace(wr.ProductReference)) {
#line default
#line hidden
#line 107 ""
#line 109 ""
this.Write(" (");
#line default
#line hidden
#line 107 ""
#line 109 ""
this.Write(this.ToStringHelper.ToStringWithCulture(wr.ProductReference));
#line default
#line hidden
#line 107 ""
#line 109 ""
this.Write(")");
#line default
#line hidden
#line 107 ""
#line 109 ""
}
#line default
#line hidden
#line 108 ""
#line 110 ""
this.Write("} {");
#line default
#line hidden
#line 108 ""
#line 110 ""
this.Write(this.ToStringHelper.ToStringWithCulture(wr.Count));
#line default
#line hidden
#line 108 ""
#line 110 ""
this.Write("} {");
#line default
#line hidden
#line 108 ""
#line 110 ""
this.Write(this.ToStringHelper.ToStringWithCulture(wr.UnitaryCost));
#line default
#line hidden
#line 108 ""
#line 110 ""
this.Write("} \n ");
#line default
#line hidden
#line 109 ""
#line 111 ""
}
#line default
#line hidden
#line 110 ""
#line 112 ""
this.Write("\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n\\geometry{verbose,tmargin=4em,bmargin=8em,lmargin=6em,rmargin=6em}\n\\setlength{\\parindent}{0pt}\n\\setlength{\\parskip}{1ex plus 0.5ex minus 0.2ex}\n\n\\thispagestyle{fancy}\n\\pagestyle{fancy}\n\\setlength{\\parindent}{0pt}\n\n\\renewcommand{\\headrulewidth}{0pt}\n\\cfoot{\n ");
#line default
#line hidden
#line 123 ""
#line 125 ""
if (!string.IsNullOrWhiteSpace(from.Name)) {
#line default
#line hidden
#line 124 ""
#line 126 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Name ));
#line default
#line hidden
#line 124 ""
#line 126 ""
}
#line default
#line hidden
#line 125 ""
#line 127 ""
this.Write(" ");
#line default
#line hidden
#line 125 ""
#line 127 ""
if (!string.IsNullOrWhiteSpace(from.Address)) {
#line default
#line hidden
#line 126 ""
#line 128 ""
this.Write(" - ");
#line default
#line hidden
#line 126 ""
#line 128 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Address ));
#line default
#line hidden
#line 126 ""
#line 128 ""
}
#line default
#line hidden
#line 127 ""
#line 129 ""
this.Write(" \n ");
#line default
#line hidden
#line 128 ""
#line 130 ""
if (!string.IsNullOrWhiteSpace(from.CityAndState)) {
#line default
#line hidden
#line 129 ""
#line 131 ""
this.Write(" - ");
#line default
#line hidden
#line 129 ""
#line 131 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.CityAndState ));
#line default
#line hidden
#line 129 ""
#line 131 ""
}
#line default
#line hidden
#line 130 ""
#line 132 ""
this.Write(" \\newline\n \\small{\n ");
#line default
#line hidden
#line 132 ""
if (!string.IsNullOrWhiteSpace(from.Email)) {
#line 134 ""
if (!string.IsNullOrWhiteSpace(efrom)) {
#line default
#line hidden
#line 133 ""
#line 135 ""
this.Write("E-mail: ");
#line default
#line hidden
#line 133 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Email ));
#line 135 ""
this.Write(this.ToStringHelper.ToStringWithCulture( efrom ));
#line default
#line hidden
#line 133 ""
#line 135 ""
}
#line default
#line hidden
#line 134 ""
#line 136 ""
this.Write(" ");
#line default
#line hidden
#line 134 ""
#line 136 ""
if (!string.IsNullOrWhiteSpace(from.Mobile)) {
#line default
#line hidden
#line 135 ""
#line 137 ""
this.Write(" - Téléphone mobile: ");
#line default
#line hidden
#line 135 ""
#line 137 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Mobile ));
#line default
#line hidden
#line 135 ""
#line 137 ""
}
#line default
#line hidden
#line 136 ""
#line 138 ""
this.Write(" ");
#line default
#line hidden
#line 136 ""
#line 138 ""
if (!string.IsNullOrWhiteSpace(from.Phone)) {
#line default
#line hidden
#line 137 ""
#line 139 ""
this.Write(" - Téléphone fixe: ");
#line default
#line hidden
#line 137 ""
#line 139 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Phone ));
#line default
#line hidden
#line 137 ""
#line 139 ""
}
#line default
#line hidden
#line 138 ""
#line 140 ""
this.Write(" }\n}\n\n\\begin{document}\n\n% Logo de la société\n%\\includegraphics{logo.jpg}\n\n% Nom et adresse de la société\n");
#line default
#line hidden
#line 147 ""
#line 149 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Name ));
#line default
#line hidden
#line 147 ""
#line 149 ""
this.Write("\\\\\n");
#line default
#line hidden
#line 148 ""
#line 150 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Address ));
#line default
#line hidden
#line 148 ""
#line 150 ""
this.Write("\\\\\n");
#line default
#line hidden
#line 149 ""
#line 151 ""
this.Write(this.ToStringHelper.ToStringWithCulture(from.ZipCode ));
#line default
#line hidden
#line 149 ""
#line 151 ""
this.Write(" ");
#line default
#line hidden
#line 149 ""
#line 151 ""
this.Write(this.ToStringHelper.ToStringWithCulture(from.CityAndState));
#line default
#line hidden
#line 149 ""
#line 151 ""
this.Write("\\\\\n\nFacture n°\\FactureNum\n\n\n{\\addtolength{\\leftskip}{10.5cm} %in ERT\n \\textbf{\\ClientNom} \\\\\n \\ClientAdresse \\\\\n\n} %in ERT\n\n\n\\hspace*{10.5cm}\n\\FactureLieu, le \\today\n\n~\\\\~\\\\\n\n\\textbf{Objet : \\FactureObjet \\\\}\n\n\\textnormal{\\FactureDescr}\n\n~\\\\\n\n\\begin{center}\n \\begin{tabular}{lrrr}\n \\textbf{Désignation ~~~~~~} & \\textbf{Prix unitaire} & \\textbf{Quantité} & \\textbf{Montant (EUR)} \\\\\n \\hline\n \\AfficheResultat{}\n \\end{tabular}\n\\end{center}\n\n\\begin{flushright}\n\\textit{Auto entreprise en franchise de TVA}\\\\\n\n\\end{flushright}\n~\\\\\n\n\\ifthenelse{\\equal{\\FactureAcquittee}{oui}}{\n Facture acquittée.\n}{\n\n À régler par chèque ou par virement bancaire :\n\n \\begin{center}\n \\begin{tabular}{|c c c c|}\n ");
#line default
#line hidden
#line 194 ""
#line 196 ""
if (!string.IsNullOrWhiteSpace(from.BankCode) && !string.IsNullOrWhiteSpace(from.WicketCode)
&& !string.IsNullOrWhiteSpace(from.AccountNumber) ) {
#line default
#line hidden
#line 196 ""
#line 198 ""
this.Write(" \\hline \\textbf{Code banque} & \\textbf{Code guichet} & \\textbf{N° de Compte} & \\textbf{Clé RIB} \\\\\n ");
#line default
#line hidden
#line 197 ""
#line 199 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.BankCode ));
#line default
#line hidden
#line 197 ""
#line 199 ""
this.Write(" & ");
#line default
#line hidden
#line 197 ""
#line 199 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.WicketCode ));
#line default
#line hidden
#line 197 ""
#line 199 ""
this.Write(" & ");
#line default
#line hidden
#line 197 ""
#line 199 ""
this.Write(this.ToStringHelper.ToStringWithCulture(from.AccountNumber ));
#line default
#line hidden
#line 197 ""
#line 199 ""
this.Write(" & ");
#line default
#line hidden
#line 197 ""
#line 199 ""
this.Write(this.ToStringHelper.ToStringWithCulture(from.BankedKey));
#line default
#line hidden
#line 197 ""
#line 199 ""
this.Write(" \\\\\n ");
#line default
#line hidden
#line 198 ""
#line 200 ""
}
if (!string.IsNullOrWhiteSpace(from.IBAN) && !string.IsNullOrWhiteSpace(from.BIC)) {
#line default
#line hidden
#line 200 ""
#line 202 ""
this.Write(" \\hline \\textbf{IBAN N°} & \\multicolumn{3}{|l|}{ ");
#line default
#line hidden
#line 200 ""
#line 202 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.IBAN ));
#line default
#line hidden
#line 200 ""
#line 202 ""
this.Write(" } \\\\\n \\hline \\textbf{Code BIC} & \\multicolumn{3}{|l|}{ ");
#line default
#line hidden
#line 201 ""
#line 203 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.BIC ));
#line default
#line hidden
#line 201 ""
#line 203 ""
this.Write(" }\n ");
#line default
#line hidden
#line 202 ""
#line 204 ""
}
#line default
#line hidden
#line 203 ""
#line 205 ""
this.Write(" \\\\\n \\hline\n \\end{tabular}\n \\end{center}\n}\n\\end{document}\n");
#line default
@ -819,6 +831,52 @@ namespace Yavsc.templates {
}
}
}
bool _efromAcquired = false;
if (((this.Session != null) && this.Session.ContainsKey("efrom"))) {
object data = this.Session["efrom"];
if (typeof(String).IsAssignableFrom(data.GetType())) {
this._efromField = ((String)(data));
_efromAcquired = true;
}
else {
this.Error("The type 'String' of the parameter 'efrom' did not match the type passed to the template");
}
}
if ((_efromAcquired == false)) {
object data = System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("efrom");
if ((data != null)) {
if (typeof(String).IsAssignableFrom(data.GetType())) {
this._efromField = ((String)(data));
_efromAcquired = true;
}
else {
this.Error("The type 'String' of the parameter 'efrom' did not match the type passed to the template");
}
}
}
bool _etoAcquired = false;
if (((this.Session != null) && this.Session.ContainsKey("eto"))) {
object data = this.Session["eto"];
if (typeof(String).IsAssignableFrom(data.GetType())) {
this._etoField = ((String)(data));
_etoAcquired = true;
}
else {
this.Error("The type 'String' of the parameter 'eto' did not match the type passed to the template");
}
}
if ((_etoAcquired == false)) {
object data = System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("eto");
if ((data != null)) {
if (typeof(String).IsAssignableFrom(data.GetType())) {
this._etoField = ((String)(data));
_etoAcquired = true;
}
else {
this.Error("The type 'String' of the parameter 'eto' did not match the type passed to the template");
}
}
}
}
}

@ -11,6 +11,8 @@
<#@ parameter type="Estimate" name="estim" #>
<#@ parameter type="Profile" name="from" #>
<#@ parameter type="Profile" name="to" #>
<#@ parameter type="String" name="efrom" #>
<#@ parameter type="String" name="eto" #>
\documentclass[french,11pt]{article}
\usepackage{babel}
@ -93,8 +95,8 @@
<# if (!string.IsNullOrWhiteSpace(to.Mobile)) { #>
Mobile: <#= to.Mobile #>\\
<# } #>
<# if (!string.IsNullOrWhiteSpace(to.Email)) { #>
E-mail: <#= to.Email #><# } #>
<# if (!string.IsNullOrWhiteSpace(eto)) { #>
E-mail: <#= eto #><# } #>
}
% Liste des produits facturés : Désignation, prix
@ -120,7 +122,7 @@
<# if (!string.IsNullOrWhiteSpace(from.Address)) { #> - <#= from.Address #><# } #>
<# if (!string.IsNullOrWhiteSpace(from.CityAndState)) { #> - <#= from.CityAndState #><# } #> \newline
\small{
<# if (!string.IsNullOrWhiteSpace(from.Email)) { #>E-mail: <#= from.Email #><# } #>
<# if (!string.IsNullOrWhiteSpace(efrom)) { #>E-mail: <#= efrom #><# } #>
<# if (!string.IsNullOrWhiteSpace(from.Mobile)) { #> - Téléphone mobile: <#= from.Mobile #><# } #>
<# if (!string.IsNullOrWhiteSpace(from.Phone)) { #> - Téléphone fixe: <#= from.Phone #><# } #>
}

@ -1,3 +1,14 @@
2015-06-10 Paul Schneider <paul@pschneider.fr>
* Circle.cs: refactoring
* CircleInfo.cs:
* CircleProvider.cs:
* Profile.cs: User's profile does not contain anymore the main
e-mail address, it conflicts with registration informations,
it is not part of the profile data
2015-06-10 Paul Schneider <paul@pschneider.fr>
* CircleManager.cs: initializes the default provider

@ -23,7 +23,6 @@ using System.Collections.Generic;
namespace Yavsc.Model.Circles
{
/// <summary>
/// Circle.
/// </summary>
@ -40,11 +39,17 @@ namespace Yavsc.Model.Circles
/// <value>The title.</value>
public string Title { get; set; }
/// <summary>
/// Gets or sets the owner.
/// </summary>
/// <value>The owner.</value>
public string Owner { get; set; }
/// <summary>
/// Gets or sets the users.
/// </summary>
/// <value>The users.</value>
public string [] Users { get; set; }
public string [] Members { get; set; }
/// <summary>
/// Union the specified that.
@ -54,7 +59,7 @@ namespace Yavsc.Model.Circles
{
List<string> content = new List<string>();
foreach (Circle c in those) {
foreach (string user_name in c.Users) {
foreach (string user_name in c.Members) {
if (!content.Contains (user_name))
content.Add (user_name);
}

@ -30,13 +30,19 @@ namespace Yavsc.Model.Circles
/// </summary>
public class CircleInfo
{
long Id { get; set; }
string Title { get; set; }
CircleInfo(Circle c)
public long Id { get; set; }
public string Title { get; set; }
public CircleInfo(Circle c)
{
Id = c.Id;
Title = c.Title;
}
public CircleInfo(long id, string title)
{
Id = id;
Title = title;
}
}
}

@ -39,27 +39,38 @@ namespace Yavsc.Model.Circles
/// <param name="owner">Owner.</param>
/// <param name="title">Title.</param>
/// <param name="users">Users.</param>
public abstract void Add(string owner, string title, string [] users);
public abstract long Create(string owner, string title, string [] users);
/// <summary>
/// Delete the specified owner and title.
/// Add the specified user.
/// </summary>
/// <param name="owner">Owner.</param>
/// <param name="title">Title.</param>
public abstract void Delete(string owner, string title) ;
/// <param name="id">circle Identifier.</param>
/// <param name="username">User name.</param>
public abstract void Add(long id, string username);
/// <summary>
/// Get the specified owner and title.
/// Remove the specified user.
/// </summary>
/// <param name="owner">Owner.</param>
/// <param name="title">Title.</param>
public abstract Circle Get(string owner, string title);
/// <param name="id">circle Identifier.</param>
/// <param name="username">User name.</param>
public abstract void Remove(long id, string username);
/// <summary>
/// Delete the specified id.
/// </summary>
/// <param name="id">Identifier.</param>
public abstract void Delete(long id) ;
/// <summary>
/// Get the specified id.
/// </summary>
/// <param name="id">Identifier.</param>
public abstract Circle Get(long id);
/// <summary>
/// List this instance.
/// </summary>
public abstract CircleInfoCollection List();
public abstract CircleInfoCollection List(string user);
}

@ -13,8 +13,6 @@ namespace Yavsc.Model.RolesAndMembers
/// </summary>
public class Profile
{
/// <summary>
/// Gets or sets the name.
/// </summary>
@ -107,14 +105,6 @@ namespace Yavsc.Model.RolesAndMembers
[StringLength (15)]
public string Mobile { get; set; }
/// <summary>
/// Gets or sets the email.
/// </summary>
/// <value>The email.</value>
[DisplayName ("E-mail")]
[StringLength (1024)]
public string Email { get; set; }
/// <summary>
/// Gets or sets the BI.
/// </summary>
@ -187,7 +177,10 @@ namespace Yavsc.Model.RolesAndMembers
( string.IsNullOrWhiteSpace (BIC)
|| string.IsNullOrWhiteSpace (IBAN))
); } }
/// <summary>
/// Gets a value indicating whether this instance has postal address.
/// </summary>
/// <value><c>true</c> if this instance has postal address; otherwise, <c>false</c>.</value>
public bool HasPostalAddress {
get {
return !string.IsNullOrWhiteSpace (Address)
@ -206,23 +199,24 @@ namespace Yavsc.Model.RolesAndMembers
/// <value><c>true</c> if this instance is billable; otherwise, <c>false</c>.</value>
public bool IsBillable {
get {
// true if
// true if has a name and, either a postal address, an email, or a Mobile phone number
// Name is not null and
// (
// (Address and CityAndState and ZipCode)
// or Email or Phone or Mobile
// )
return !string.IsNullOrWhiteSpace (Name)
&& !( (
string.IsNullOrWhiteSpace (Address)
&& !( (string.IsNullOrWhiteSpace (Address)
|| string.IsNullOrWhiteSpace (CityAndState)
|| string.IsNullOrWhiteSpace (ZipCode))
&& string.IsNullOrWhiteSpace (Email)
&& string.IsNullOrWhiteSpace (Phone)
&& string.IsNullOrWhiteSpace (Mobile));
}
}
/// <summary>
/// Gets or sets the name of the user.
/// </summary>
/// <value>The name of the user.</value>
public string UserName { get ; set; }
public Profile () : base ()
@ -276,9 +270,6 @@ namespace Yavsc.Model.RolesAndMembers
UserName = profile.UserName;
MembershipUser u = Membership.GetUser (profile.UserName);
Email = u.Email;
s = profile.GetPropertyValue ("BankCode");
BankCode = (s is DBNull) ? null : (string)s;

Loading…