* 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
This commit is contained in:
Paul Schneider
2015-06-10 23:38:18 +02:00
parent 3d050e019e
commit 6680addcc8
24 changed files with 909 additions and 340 deletions

View File

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

View File

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

View File

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

View File

@ -22,6 +22,9 @@ using System;
using Yavsc.Model.Circles; using Yavsc.Model.Circles;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.Configuration; using System.Configuration;
using Npgsql;
using NpgsqlTypes;
using System.Collections.Generic;
namespace WorkFlowProvider namespace WorkFlowProvider
{ {
@ -38,45 +41,172 @@ namespace WorkFlowProvider
} }
#region implemented abstract members of CircleProvider #region implemented abstract members of CircleProvider
/// <summary>
/// Add the specified user.
/// </summary>
/// <param name="id">circle Identifier.</param>
/// <param name="username">User name.</param>
public override void Add (long id, string username)
{
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>
/// Remove the specified user.
/// </summary>
/// <param name="id">circle Identifier.</param>
/// <param name="username">User name.</param>
public override void Remove (long id, string username)
{
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 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> /// <summary>
/// Add the specified owner, title and users. /// Add the specified owner, title and users.
/// </summary> /// </summary>
/// <param name="owner">Owner.</param> /// <param name="owner">Owner.</param>
/// <param name="title">Title.</param> /// <param name="title">Title.</param>
/// <param name="users">Users.</param> /// <param name="users">Users.</param>
public override void Add (string owner, string title, string[] users) 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 (); throw new NotImplementedException ();
} }
/// <summary> /// <summary>
/// Delete the specified owner and title. /// Delete the specified owner and title.
/// </summary> /// </summary>
/// <param name="owner">Owner.</param> /// <param name="id">Identifier.</param>
/// <param name="title">Title.</param> public override void Delete (long id)
public override void Delete (string owner, string title)
{ {
throw new NotImplementedException (); 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> /// <summary>
/// Get the specified owner and title. /// List user's circles.
/// </summary> /// </summary>
/// <param name="owner">Owner.</param> /// <param name="user">User.</param>
/// <param name="title">Title.</param> public override CircleInfoCollection List (string user)
public override Circle Get (string owner, string title)
{ {
throw new NotImplementedException (); CircleInfoCollection cc = null;
} using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString))
/// <summary> using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
/// List this instance. cmd.CommandText = "select _id, title from circle where owner = :wnr";
/// </summary> cmd.Parameters.AddWithValue("wnr",user);
public override CircleInfoCollection List () cnx.Open ();
{ cmd.Prepare ();
throw new NotImplementedException (); 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 #endregion
string cnxstr = null; string connectionString = null;
string applicationName = null; string applicationName = null;
/// <summary> /// <summary>
/// Initialize this object using the specified name and config. /// Initialize this object using the specified name and config.
@ -88,7 +218,7 @@ namespace WorkFlowProvider
if ( string.IsNullOrWhiteSpace(config ["connectionStringName"])) if ( string.IsNullOrWhiteSpace(config ["connectionStringName"]))
throw new ConfigurationErrorsException ("No name for Npgsql connection string found"); 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"] ?? "/"; applicationName = config["applicationName"] ?? "/";
} }

11
WebControls/ChangeLog Normal file
View File

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

163
WebControls/InputCircle.cs Normal file
View File

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

View File

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

81
WebControls/UserCard.cs Normal file
View File

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

View File

@ -39,11 +39,20 @@
<Reference Include="System.Web.Mvc" /> <Reference Include="System.Web.Mvc" />
<Reference Include="System.Web.Http" /> <Reference Include="System.Web.Http" />
<Reference Include="System.Web.ApplicationServices" /> <Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Configuration" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ResultPages.cs" /> <Compile Include="ResultPages.cs" />
<Compile Include="InputUserName.cs" /> <Compile Include="InputUserName.cs" />
<Compile Include="InputCircle.cs" />
<Compile Include="UserCard.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <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> </Project>

View File

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

View File

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

View File

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

View File

@ -100,7 +100,6 @@ namespace Yavsc.ApiControllers
Estimate e = wfmgr.GetEstimate (estimid); Estimate e = wfmgr.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 prpro = new Profile (ProfileBase.Create (e.Responsible)); Profile prpro = new Profile (ProfileBase.Create (e.Responsible));
if (!prpro.HasBankAccount) if (!prpro.HasBankAccount)
throw new TemplateException ("NotBankable:" + e.Responsible); throw new TemplateException ("NotBankable:" + e.Responsible);
@ -114,6 +113,8 @@ namespace Yavsc.ApiControllers
tmpe.Session.Add ("from", prpro); tmpe.Session.Add ("from", prpro);
tmpe.Session.Add ("to", prcli); 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 (); tmpe.Init ();
return tmpe.TransformText (); return tmpe.TransformText ();
} }

View File

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

View File

@ -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> 2015-06-10 Paul Schneider <paul@pschneider.fr>
* CalendarController.cs: refactoring * CalendarController.cs: refactoring

View File

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

View File

@ -256,10 +256,10 @@ CREATE TABLE comment
CONSTRAINT comment_pkey PRIMARY KEY (_id), CONSTRAINT comment_pkey PRIMARY KEY (_id),
CONSTRAINT fkey_blog FOREIGN KEY (postid) CONSTRAINT fkey_blog FOREIGN KEY (postid)
REFERENCES blog (_id) MATCH SIMPLE 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) CONSTRAINT fkey_users FOREIGN KEY (username, applicationname)
REFERENCES users (username, applicationname) MATCH SIMPLE REFERENCES users (username, applicationname) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ON UPDATE CASCADE ON DELETE CASCADE
) )
WITH ( WITH (
OIDS=FALSE OIDS=FALSE
@ -342,7 +342,7 @@ CREATE TABLE histoestim
ON UPDATE CASCADE ON DELETE CASCADE, ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT histoestim_username_fkey FOREIGN KEY (username, applicationname) CONSTRAINT histoestim_username_fkey FOREIGN KEY (username, applicationname)
REFERENCES users (username, applicationname) MATCH SIMPLE REFERENCES users (username, applicationname) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ON UPDATE CASCADE ON DELETE CASCADE
) )
WITH ( WITH (
OIDS=FALSE OIDS=FALSE
@ -401,7 +401,7 @@ CREATE TABLE projet
CONSTRAINT projet_pk_new PRIMARY KEY (id), CONSTRAINT projet_pk_new PRIMARY KEY (id),
CONSTRAINT pk_project_manager FOREIGN KEY (managerid, "ApplicationName") CONSTRAINT pk_project_manager FOREIGN KEY (managerid, "ApplicationName")
REFERENCES users (username, applicationname) MATCH SIMPLE REFERENCES users (username, applicationname) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ON UPDATE CASCADE ON DELETE CASCADE
) )
WITH ( WITH (
OIDS=FALSE OIDS=FALSE
@ -427,7 +427,7 @@ CREATE TABLE stocksymbols
stocksymbol character varying(10), stocksymbol character varying(10),
CONSTRAINT fkprofiles1 FOREIGN KEY (uniqueid) CONSTRAINT fkprofiles1 FOREIGN KEY (uniqueid)
REFERENCES profiles (uniqueid) MATCH SIMPLE REFERENCES profiles (uniqueid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ON UPDATE CASCADE ON DELETE CASCADE
) )
WITH ( WITH (
OIDS=FALSE OIDS=FALSE
@ -489,7 +489,7 @@ CREATE TABLE tasks
CONSTRAINT tasks_pk_new PRIMARY KEY (id), CONSTRAINT tasks_pk_new PRIMARY KEY (id),
CONSTRAINT tasks_fk_new FOREIGN KEY (prid) CONSTRAINT tasks_fk_new FOREIGN KEY (prid)
REFERENCES projet (id) MATCH SIMPLE REFERENCES projet (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ON UPDATE CASCADE ON DELETE CASCADE
) )
WITH ( WITH (
OIDS=FALSE OIDS=FALSE
@ -507,10 +507,10 @@ CREATE TABLE taskdeps
CONSTRAINT pk_tasks_deps PRIMARY KEY ("taskId", deptask), CONSTRAINT pk_tasks_deps PRIMARY KEY ("taskId", deptask),
CONSTRAINT pk_foreign_dep FOREIGN KEY (deptask) CONSTRAINT pk_foreign_dep FOREIGN KEY (deptask)
REFERENCES tasks (id) MATCH SIMPLE 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") CONSTRAINT pk_foreign_task FOREIGN KEY ("taskId")
REFERENCES tasks (id) MATCH SIMPLE REFERENCES tasks (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ON UPDATE CASCADE ON DELETE CASCADE
) )
WITH ( WITH (
OIDS=FALSE OIDS=FALSE
@ -583,10 +583,10 @@ CREATE TABLE wrtags
CONSTRAINT wrtags_pkey1 PRIMARY KEY (wrid, tagid), CONSTRAINT wrtags_pkey1 PRIMARY KEY (wrid, tagid),
CONSTRAINT cstwrtagsref FOREIGN KEY (tagid) CONSTRAINT cstwrtagsref FOREIGN KEY (tagid)
REFERENCES tag (_id) MATCH SIMPLE 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) CONSTRAINT wrtags_wrid_fkey1 FOREIGN KEY (wrid)
REFERENCES writtings (_id) MATCH SIMPLE REFERENCES writtings (_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION ON UPDATE CASCADE ON DELETE CASCADE
) )
WITH ( WITH (
OIDS=FALSE OIDS=FALSE
@ -640,11 +640,52 @@ CREATE TABLE histowritting
CONSTRAINT histowritting_pkey PRIMARY KEY (_id), CONSTRAINT histowritting_pkey PRIMARY KEY (_id),
CONSTRAINT histowritting_username_fkey FOREIGN KEY (username, applicationname) CONSTRAINT histowritting_username_fkey FOREIGN KEY (username, applicationname)
REFERENCES users (username, applicationname) MATCH SIMPLE 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) CONSTRAINT histowritting_wrtid_fkey FOREIGN KEY (wrtid)
REFERENCES writtings (_id) MATCH SIMPLE REFERENCES writtings (_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE ON UPDATE CASCADE ON DELETE CASCADE
) )
WITH ( WITH (
OIDS=FALSE 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
);

View File

@ -37,6 +37,18 @@ namespace Yavsc.templates {
return this._toField; 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() { public virtual string TransformText() {
@ -48,168 +60,132 @@ namespace Yavsc.templates {
#line default #line default
#line hidden #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 {"); 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 default
#line hidden #line hidden
#line 73 "" #line 75 ""
this.Write(this.ToStringHelper.ToStringWithCulture( estim.Id.ToString() )); this.Write(this.ToStringHelper.ToStringWithCulture( estim.Id.ToString() ));
#line default #line default
#line hidden #line hidden
#line 73 "" #line 75 ""
this.Write("} % Numéro de facture\n\\def\\FactureAcquittee {non} % Facture acquittée : oui/non\n\\def\\FactureLieu {"); this.Write("} % Numéro de facture\n\\def\\FactureAcquittee {non} % Facture acquittée : oui/non\n\\def\\FactureLieu {");
#line default #line default
#line hidden #line hidden
#line 75 "" #line 77 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.CityAndState )); this.Write(this.ToStringHelper.ToStringWithCulture( from.CityAndState ));
#line default #line default
#line hidden #line hidden
#line 75 "" #line 77 ""
this.Write("} % Lieu de l'édition de la facture\n\\def\\FactureObjet {Facture : "); this.Write("} % Lieu de l'édition de la facture\n\\def\\FactureObjet {Facture : ");
#line default #line default
#line hidden #line hidden
#line 76 "" #line 78 ""
this.Write(this.ToStringHelper.ToStringWithCulture( estim.Title )); this.Write(this.ToStringHelper.ToStringWithCulture( estim.Title ));
#line default #line default
#line hidden #line hidden
#line 76 "" #line 78 ""
this.Write("} % Objet du document\n% Description de la facture\n\\def\\FactureDescr {%\n "); this.Write("} % Objet du document\n% Description de la facture\n\\def\\FactureDescr {%\n ");
#line default #line default
#line hidden #line hidden
#line 79 "" #line 81 ""
this.Write(this.ToStringHelper.ToStringWithCulture( estim.Description )); this.Write(this.ToStringHelper.ToStringWithCulture( estim.Description ));
#line default #line default
#line hidden #line hidden
#line 79 "" #line 81 ""
this.Write("\n}\n\n% Infos Client\n\\def\\ClientNom{"); this.Write("\n}\n\n% Infos Client\n\\def\\ClientNom{");
#line default #line default
#line hidden #line hidden
#line 83 "" #line 85 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( to.Name ));
#line default #line default
#line hidden #line hidden
#line 83 "" #line 85 ""
this.Write("} % Nom du client\n\\def\\ClientAdresse{% % Adresse du client\n "); this.Write("} % Nom du client\n\\def\\ClientAdresse{% % Adresse du client\n ");
#line default #line default
#line hidden #line hidden
#line 85 "" #line 87 ""
if (!string.IsNullOrWhiteSpace(to.Address)) { if (!string.IsNullOrWhiteSpace(to.Address)) {
#line default #line default
#line hidden #line hidden
#line 86 "" #line 88 ""
this.Write(" "); this.Write(" ");
#line default #line default
#line hidden #line hidden
#line 86 "" #line 88 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.Address )); this.Write(this.ToStringHelper.ToStringWithCulture( to.Address ));
#line default #line default
#line hidden #line hidden
#line 86 "" #line 88 ""
this.Write("\\\\\n "); this.Write("\\\\\n ");
#line default #line default
#line hidden #line hidden
#line 87 "" #line 89 ""
} }
#line default #line default
#line hidden #line hidden
#line 88 "" #line 90 ""
this.Write(" "); this.Write(" ");
#line default #line default
#line hidden #line hidden
#line 88 "" #line 90 ""
if (!string.IsNullOrWhiteSpace(to.ZipCode)) { if (!string.IsNullOrWhiteSpace(to.ZipCode)) {
#line default #line default
#line hidden #line hidden
#line 89 "" #line 91 ""
this.Write(" "); this.Write(" ");
#line default #line default
#line hidden #line hidden
#line 89 "" #line 91 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.ZipCode )); this.Write(this.ToStringHelper.ToStringWithCulture( to.ZipCode ));
#line default #line default
#line hidden #line hidden
#line 89 "" #line 91 ""
this.Write(" "); this.Write(" ");
#line default #line default
#line hidden #line hidden
#line 89 ""
}
#line default
#line hidden
#line 90 ""
this.Write(" ");
#line default
#line hidden
#line 90 ""
if (!string.IsNullOrWhiteSpace(to.ZipCode)) {
#line default
#line hidden
#line 91 ""
this.Write(" ");
#line default
#line hidden
#line 91 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.CityAndState ));
#line default
#line hidden
#line 91 ""
this.Write("\\\\ ");
#line default
#line hidden
#line 91 "" #line 91 ""
} }
@ -217,91 +193,97 @@ namespace Yavsc.templates {
#line hidden #line hidden
#line 92 "" #line 92 ""
this.Write(" \n"); this.Write(" ");
#line default
#line hidden
#line 92 ""
if (!string.IsNullOrWhiteSpace(to.ZipCode)) {
#line default #line default
#line hidden #line hidden
#line 93 "" #line 93 ""
if (!string.IsNullOrWhiteSpace(to.Phone)) { this.Write(" ");
#line default
#line hidden
#line 93 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.CityAndState ));
#line default
#line hidden
#line 93 ""
this.Write("\\\\ ");
#line default
#line hidden
#line 93 ""
}
#line default #line default
#line hidden #line hidden
#line 94 "" #line 94 ""
this.Write(" Téléphone fixe: "); this.Write(" \n");
#line default
#line hidden
#line 94 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.Phone ));
#line default
#line hidden
#line 94 ""
this.Write("\\\\\n");
#line default #line default
#line hidden #line hidden
#line 95 "" #line 95 ""
} if (!string.IsNullOrWhiteSpace(to.Phone)) {
#line default #line default
#line hidden #line hidden
#line 96 "" #line 96 ""
if (!string.IsNullOrWhiteSpace(to.Mobile)) { this.Write(" Téléphone fixe: ");
#line default #line default
#line hidden #line hidden
#line 97 "" #line 96 ""
this.Write(" Mobile: "); this.Write(this.ToStringHelper.ToStringWithCulture( to.Phone ));
#line default #line default
#line hidden #line hidden
#line 97 "" #line 96 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.Mobile ));
#line default
#line hidden
#line 97 ""
this.Write("\\\\\n"); this.Write("\\\\\n");
#line default #line default
#line hidden #line hidden
#line 98 "" #line 97 ""
} }
#line default #line default
#line hidden #line hidden
#line 99 "" #line 98 ""
this.Write(" "); if (!string.IsNullOrWhiteSpace(to.Mobile)) {
#line default #line default
#line hidden #line hidden
#line 99 "" #line 99 ""
if (!string.IsNullOrWhiteSpace(to.Email)) { this.Write(" Mobile: ");
#line default #line default
#line hidden #line hidden
#line 100 "" #line 99 ""
this.Write(" E-mail: "); this.Write(this.ToStringHelper.ToStringWithCulture( to.Mobile ));
#line default #line default
#line hidden #line hidden
#line 100 "" #line 99 ""
this.Write(this.ToStringHelper.ToStringWithCulture( to.Email )); this.Write("\\\\\n");
#line default #line default
#line hidden #line hidden
@ -313,91 +295,85 @@ namespace Yavsc.templates {
#line hidden #line hidden
#line 101 "" #line 101 ""
this.Write("}\n\n% Liste des produits facturés : Désignation, prix\n\n ");
#line default
#line hidden
#line 105 ""
foreach (Writting wr in estim.Lines) {
#line default
#line hidden
#line 106 ""
this.Write("\\AjouterService {");
#line default
#line hidden
#line 106 ""
this.Write(this.ToStringHelper.ToStringWithCulture(wr.Description));
#line default
#line hidden
#line 106 ""
this.Write(" "); this.Write(" ");
#line default #line default
#line hidden #line hidden
#line 106 "" #line 101 ""
if (!string.IsNullOrWhiteSpace(wr.ProductReference)) { if (!string.IsNullOrWhiteSpace(eto)) {
#line default #line default
#line hidden #line hidden
#line 107 "" #line 102 ""
this.Write(" ("); this.Write(" E-mail: ");
#line default #line default
#line hidden #line hidden
#line 107 "" #line 102 ""
this.Write(this.ToStringHelper.ToStringWithCulture(wr.ProductReference)); this.Write(this.ToStringHelper.ToStringWithCulture( eto ));
#line default #line default
#line hidden #line hidden
#line 107 "" #line 102 ""
this.Write(")");
#line default
#line hidden
#line 107 ""
} }
#line default #line default
#line hidden #line hidden
#line 108 "" #line 103 ""
this.Write("} {"); this.Write("}\n\n% Liste des produits facturés : Désignation, prix\n\n ");
#line default
#line hidden
#line 107 ""
foreach (Writting wr in estim.Lines) {
#line default #line default
#line hidden #line hidden
#line 108 "" #line 108 ""
this.Write(this.ToStringHelper.ToStringWithCulture(wr.Count)); this.Write("\\AjouterService {");
#line default #line default
#line hidden #line hidden
#line 108 "" #line 108 ""
this.Write("} {"); this.Write(this.ToStringHelper.ToStringWithCulture(wr.Description));
#line default #line default
#line hidden #line hidden
#line 108 "" #line 108 ""
this.Write(this.ToStringHelper.ToStringWithCulture(wr.UnitaryCost)); this.Write(" ");
#line default #line default
#line hidden #line hidden
#line 108 "" #line 108 ""
this.Write("} \n "); if (!string.IsNullOrWhiteSpace(wr.ProductReference)) {
#line default
#line hidden
#line 109 ""
this.Write(" (");
#line default
#line hidden
#line 109 ""
this.Write(this.ToStringHelper.ToStringWithCulture(wr.ProductReference));
#line default
#line hidden
#line 109 ""
this.Write(")");
#line default #line default
#line hidden #line hidden
@ -409,49 +385,55 @@ namespace Yavsc.templates {
#line hidden #line hidden
#line 110 "" #line 110 ""
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 "); this.Write("} {");
#line default #line default
#line hidden #line hidden
#line 123 "" #line 110 ""
if (!string.IsNullOrWhiteSpace(from.Name)) { this.Write(this.ToStringHelper.ToStringWithCulture(wr.Count));
#line default #line default
#line hidden #line hidden
#line 124 "" #line 110 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Name )); this.Write("} {");
#line default #line default
#line hidden #line hidden
#line 124 "" #line 110 ""
this.Write(this.ToStringHelper.ToStringWithCulture(wr.UnitaryCost));
#line default
#line hidden
#line 110 ""
this.Write("} \n ");
#line default
#line hidden
#line 111 ""
} }
#line default #line default
#line hidden #line hidden
#line 125 "" #line 112 ""
this.Write(" "); 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 default
#line hidden #line hidden
#line 125 "" #line 125 ""
if (!string.IsNullOrWhiteSpace(from.Address)) { if (!string.IsNullOrWhiteSpace(from.Name)) {
#line default #line default
#line hidden #line hidden
#line 126 "" #line 126 ""
this.Write(" - "); this.Write(this.ToStringHelper.ToStringWithCulture( from.Name ));
#line default
#line hidden
#line 126 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Address ));
#line default #line default
#line hidden #line hidden
@ -463,119 +445,119 @@ namespace Yavsc.templates {
#line hidden #line hidden
#line 127 "" #line 127 ""
this.Write(" \n "); this.Write(" ");
#line default
#line hidden
#line 127 ""
if (!string.IsNullOrWhiteSpace(from.Address)) {
#line default #line default
#line hidden #line hidden
#line 128 "" #line 128 ""
if (!string.IsNullOrWhiteSpace(from.CityAndState)) {
#line default
#line hidden
#line 129 ""
this.Write(" - "); this.Write(" - ");
#line default #line default
#line hidden #line hidden
#line 129 "" #line 128 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.CityAndState )); this.Write(this.ToStringHelper.ToStringWithCulture( from.Address ));
#line default
#line hidden
#line 128 ""
}
#line default #line default
#line hidden #line hidden
#line 129 "" #line 129 ""
} this.Write(" \n ");
#line default #line default
#line hidden #line hidden
#line 130 "" #line 130 ""
this.Write(" \\newline\n \\small{\n "); if (!string.IsNullOrWhiteSpace(from.CityAndState)) {
#line default
#line hidden
#line 131 ""
this.Write(" - ");
#line default
#line hidden
#line 131 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.CityAndState ));
#line default
#line hidden
#line 131 ""
}
#line default #line default
#line hidden #line hidden
#line 132 "" #line 132 ""
if (!string.IsNullOrWhiteSpace(from.Email)) { this.Write(" \\newline\n \\small{\n ");
#line default #line default
#line hidden #line hidden
#line 133 "" #line 134 ""
if (!string.IsNullOrWhiteSpace(efrom)) {
#line default
#line hidden
#line 135 ""
this.Write("E-mail: "); this.Write("E-mail: ");
#line default #line default
#line hidden #line hidden
#line 133 "" #line 135 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Email )); this.Write(this.ToStringHelper.ToStringWithCulture( efrom ));
#line default #line default
#line hidden #line hidden
#line 133 "" #line 135 ""
} }
#line default #line default
#line hidden #line hidden
#line 134 "" #line 136 ""
this.Write(" "); this.Write(" ");
#line default #line default
#line hidden #line hidden
#line 134 "" #line 136 ""
if (!string.IsNullOrWhiteSpace(from.Mobile)) { if (!string.IsNullOrWhiteSpace(from.Mobile)) {
#line default #line default
#line hidden #line hidden
#line 135 "" #line 137 ""
this.Write(" - Téléphone mobile: "); this.Write(" - Téléphone mobile: ");
#line default #line default
#line hidden #line hidden
#line 135 "" #line 137 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Mobile )); this.Write(this.ToStringHelper.ToStringWithCulture( from.Mobile ));
#line default #line default
#line hidden #line hidden
#line 135 ""
}
#line default
#line hidden
#line 136 ""
this.Write(" ");
#line default
#line hidden
#line 136 ""
if (!string.IsNullOrWhiteSpace(from.Phone)) {
#line default
#line hidden
#line 137 ""
this.Write(" - Téléphone fixe: ");
#line default
#line hidden
#line 137 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Phone ));
#line default
#line hidden
#line 137 "" #line 137 ""
} }
@ -583,164 +565,194 @@ namespace Yavsc.templates {
#line hidden #line hidden
#line 138 "" #line 138 ""
this.Write(" ");
#line default
#line hidden
#line 138 ""
if (!string.IsNullOrWhiteSpace(from.Phone)) {
#line default
#line hidden
#line 139 ""
this.Write(" - Téléphone fixe: ");
#line default
#line hidden
#line 139 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Phone ));
#line default
#line hidden
#line 139 ""
}
#line default
#line hidden
#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"); 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 default
#line hidden #line hidden
#line 147 "" #line 149 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Name )); this.Write(this.ToStringHelper.ToStringWithCulture( from.Name ));
#line default #line default
#line hidden #line hidden
#line 147 "" #line 149 ""
this.Write("\\\\\n"); this.Write("\\\\\n");
#line default #line default
#line hidden #line hidden
#line 148 "" #line 150 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.Address )); this.Write(this.ToStringHelper.ToStringWithCulture( from.Address ));
#line default #line default
#line hidden #line hidden
#line 148 "" #line 150 ""
this.Write("\\\\\n"); this.Write("\\\\\n");
#line default #line default
#line hidden #line hidden
#line 149 "" #line 151 ""
this.Write(this.ToStringHelper.ToStringWithCulture(from.ZipCode )); this.Write(this.ToStringHelper.ToStringWithCulture(from.ZipCode ));
#line default #line default
#line hidden #line hidden
#line 149 "" #line 151 ""
this.Write(" "); this.Write(" ");
#line default #line default
#line hidden #line hidden
#line 149 "" #line 151 ""
this.Write(this.ToStringHelper.ToStringWithCulture(from.CityAndState)); this.Write(this.ToStringHelper.ToStringWithCulture(from.CityAndState));
#line default #line default
#line hidden #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 "); 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 default
#line hidden #line hidden
#line 194 "" #line 196 ""
if (!string.IsNullOrWhiteSpace(from.BankCode) && !string.IsNullOrWhiteSpace(from.WicketCode) if (!string.IsNullOrWhiteSpace(from.BankCode) && !string.IsNullOrWhiteSpace(from.WicketCode)
&& !string.IsNullOrWhiteSpace(from.AccountNumber) ) { && !string.IsNullOrWhiteSpace(from.AccountNumber) ) {
#line default #line default
#line hidden #line hidden
#line 196 "" #line 198 ""
this.Write(" \\hline \\textbf{Code banque} & \\textbf{Code guichet} & \\textbf{N° de Compte} & \\textbf{Clé RIB} \\\\\n "); this.Write(" \\hline \\textbf{Code banque} & \\textbf{Code guichet} & \\textbf{N° de Compte} & \\textbf{Clé RIB} \\\\\n ");
#line default #line default
#line hidden #line hidden
#line 197 "" #line 199 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.BankCode )); this.Write(this.ToStringHelper.ToStringWithCulture( from.BankCode ));
#line default #line default
#line hidden #line hidden
#line 197 "" #line 199 ""
this.Write(" & "); this.Write(" & ");
#line default #line default
#line hidden #line hidden
#line 197 "" #line 199 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.WicketCode )); this.Write(this.ToStringHelper.ToStringWithCulture( from.WicketCode ));
#line default #line default
#line hidden #line hidden
#line 197 "" #line 199 ""
this.Write(" & "); this.Write(" & ");
#line default #line default
#line hidden #line hidden
#line 197 "" #line 199 ""
this.Write(this.ToStringHelper.ToStringWithCulture(from.AccountNumber )); this.Write(this.ToStringHelper.ToStringWithCulture(from.AccountNumber ));
#line default #line default
#line hidden #line hidden
#line 197 "" #line 199 ""
this.Write(" & "); this.Write(" & ");
#line default #line default
#line hidden #line hidden
#line 197 "" #line 199 ""
this.Write(this.ToStringHelper.ToStringWithCulture(from.BankedKey)); this.Write(this.ToStringHelper.ToStringWithCulture(from.BankedKey));
#line default #line default
#line hidden #line hidden
#line 197 "" #line 199 ""
this.Write(" \\\\\n "); this.Write(" \\\\\n ");
#line default #line default
#line hidden #line hidden
#line 198 "" #line 200 ""
} }
if (!string.IsNullOrWhiteSpace(from.IBAN) && !string.IsNullOrWhiteSpace(from.BIC)) { if (!string.IsNullOrWhiteSpace(from.IBAN) && !string.IsNullOrWhiteSpace(from.BIC)) {
#line default #line default
#line hidden #line hidden
#line 200 "" #line 202 ""
this.Write(" \\hline \\textbf{IBAN N°} & \\multicolumn{3}{|l|}{ "); this.Write(" \\hline \\textbf{IBAN N°} & \\multicolumn{3}{|l|}{ ");
#line default #line default
#line hidden #line hidden
#line 200 "" #line 202 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.IBAN )); this.Write(this.ToStringHelper.ToStringWithCulture( from.IBAN ));
#line default #line default
#line hidden #line hidden
#line 200 "" #line 202 ""
this.Write(" } \\\\\n \\hline \\textbf{Code BIC} & \\multicolumn{3}{|l|}{ "); this.Write(" } \\\\\n \\hline \\textbf{Code BIC} & \\multicolumn{3}{|l|}{ ");
#line default #line default
#line hidden #line hidden
#line 201 "" #line 203 ""
this.Write(this.ToStringHelper.ToStringWithCulture( from.BIC )); this.Write(this.ToStringHelper.ToStringWithCulture( from.BIC ));
#line default #line default
#line hidden #line hidden
#line 201 "" #line 203 ""
this.Write(" }\n "); this.Write(" }\n ");
#line default #line default
#line hidden #line hidden
#line 202 "" #line 204 ""
} }
#line default #line default
#line hidden #line hidden
#line 203 "" #line 205 ""
this.Write(" \\\\\n \\hline\n \\end{tabular}\n \\end{center}\n}\n\\end{document}\n"); this.Write(" \\\\\n \\hline\n \\end{tabular}\n \\end{center}\n}\n\\end{document}\n");
#line default #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");
}
}
}
} }
} }

View File

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

View File

@ -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> 2015-06-10 Paul Schneider <paul@pschneider.fr>
* CircleManager.cs: initializes the default provider * CircleManager.cs: initializes the default provider

View File

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

View File

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

View File

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

View File

@ -13,8 +13,6 @@ namespace Yavsc.Model.RolesAndMembers
/// </summary> /// </summary>
public class Profile public class Profile
{ {
/// <summary> /// <summary>
/// Gets or sets the name. /// Gets or sets the name.
/// </summary> /// </summary>
@ -107,14 +105,6 @@ namespace Yavsc.Model.RolesAndMembers
[StringLength (15)] [StringLength (15)]
public string Mobile { get; set; } 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> /// <summary>
/// Gets or sets the BI. /// Gets or sets the BI.
/// </summary> /// </summary>
@ -187,7 +177,10 @@ namespace Yavsc.Model.RolesAndMembers
( string.IsNullOrWhiteSpace (BIC) ( string.IsNullOrWhiteSpace (BIC)
|| string.IsNullOrWhiteSpace (IBAN)) || 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 { public bool HasPostalAddress {
get { get {
return !string.IsNullOrWhiteSpace (Address) 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> /// <value><c>true</c> if this instance is billable; otherwise, <c>false</c>.</value>
public bool IsBillable { public bool IsBillable {
get { 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 // Name is not null and
// ( // (
// (Address and CityAndState and ZipCode) // (Address and CityAndState and ZipCode)
// or Email or Phone or Mobile // or Email or Phone or Mobile
// ) // )
return !string.IsNullOrWhiteSpace (Name) return !string.IsNullOrWhiteSpace (Name)
&& !( ( && !( (string.IsNullOrWhiteSpace (Address)
string.IsNullOrWhiteSpace (Address)
|| string.IsNullOrWhiteSpace (CityAndState) || string.IsNullOrWhiteSpace (CityAndState)
|| string.IsNullOrWhiteSpace (ZipCode)) || string.IsNullOrWhiteSpace (ZipCode))
&& string.IsNullOrWhiteSpace (Email)
&& string.IsNullOrWhiteSpace (Phone) && string.IsNullOrWhiteSpace (Phone)
&& string.IsNullOrWhiteSpace (Mobile)); && 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 string UserName { get ; set; }
public Profile () : base () public Profile () : base ()
@ -276,9 +270,6 @@ namespace Yavsc.Model.RolesAndMembers
UserName = profile.UserName; UserName = profile.UserName;
MembershipUser u = Membership.GetUser (profile.UserName);
Email = u.Email;
s = profile.GetPropertyValue ("BankCode"); s = profile.GetPropertyValue ("BankCode");
BankCode = (s is DBNull) ? null : (string)s; BankCode = (s is DBNull) ? null : (string)s;