|
|
|
using System;
|
|
|
|
using Yavsc;
|
|
|
|
using System.Web.Mvc;
|
|
|
|
using System.Web;
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
using System.IO;
|
|
|
|
using Yavsc.Controllers;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using Yavsc.Model;
|
|
|
|
using Yavsc.Model.WorkFlow;
|
|
|
|
using System.Web.Security;
|
|
|
|
using System.Threading;
|
|
|
|
using Yavsc.Model.FrontOffice;
|
|
|
|
using Yavsc.Model.FileSystem;
|
|
|
|
using Yavsc.Model.Calendar;
|
* bg.gif:
* asc.gif:
* desc.gif:
* style.css: moved to App_Themes
* style.css:
* bg.gif:
* asc.gif:
* bg.png:
* rect.png:
* asc.png:
* desc.gif:
* jquery-ui.css:
* mdd_styles.css:
* croix.png:
* desc.png:
* style.css:
* jquery-ui.min.css:
* mdd_gripper.png:
* mdd_toolbar.png:
* jquery.timepicker.css:
* mdd_ajax_loader.gif:
* mdd_modal_background.png: moved to /App_Themes
* NpgsqlBlogProvider.cs: * Remove post by id
* Manage collections of entries on a couple (user,title), not a single
post
* NpgsqlCircleProvider.cs: Fixes the "Match" method.
* IDbModule.cs:
* Edit.aspx:
* Estimates.aspx:
* WorkFlowManager.cs:
* NpgsqlContentProvider.cs: refactoring
* NpgsqlMRPProviders.csproj: new NpgsqlUserName provider
* NpgsqlRoleProvider.cs: simpler init method
* NpgsqlUserNameProvider.cs: impements a UserNameProvider
* MyClass.cs: refactoring from Yavsc.Model
* BlogsController.cs: access control simplified
* FrontOfficeController.cs: Pdf generation made public ni case of
formatting exception
* mdd_styles.css: Theme -> App_Themes
* style.css: yet another style impact
* AccountController.cs: Fixes the user name modification
* BlogsController.cs: * Fixes the removal process
* On a title and user name, we get collection of posts, not only one.
* Implements an Access on circle
* FrontOfficeController.cs: * implements a new Get method.
* ensure a membership existence before delivering an estimate.
* GoogleController.cs: Fixes the user name modification on a Google
account
* ErrorHtmlFormatter.cs: nice error message in html (using Markdown
helper)
* FormatterException.cs: formatter exception exposes error and
standard output of the process
* TexToPdfFormatter.cs: * generates temporary files in the folder
returned by Path.GetTempPath()
* throws FormatterException
* Global.asax.cs: new route map:
Blogs/{action}/{user}/{title}
Blog/{user}/{title}
B/{id}
{controller}/{action}/{id}
* App.master: * refactoring: Theme moved to App_Themes
* a link to the logged user's blog
*
* NoLogin.master: refactoring: Theme moved to App_Themes
* Circles.aspx: refactoring : circles now are given as select items
* Login.aspx: fixes the html presentation
* Register.aspx: Fixes a Typo
* Index.aspx: Implements a blog index, due to M&C changes with this
commit
* RemovePost.aspx: links to the new route to the "RemovePost" action,
giving it a post id
* RemoveTitle.aspx: fixes a not yet linked page to remove a post
collection under a given title
* EventPub.aspx: code refactoring
* Writting.ascx: cleans the code
* Web.config: fills the config with new names in the space
* Web.config: configures the new NpgsqlUserNameProvider
* Web.csproj: refactoring and others
* BlogEntryCollection.cs: implement the BlogEntryCollection
* BlogManager.cs: the manager helps to filter on access
* BlogProvider.cs: The title is not unique anymore, and one can modify
it, post a lot under it, drop all posts under it.
A Post is deleted by id.
* UUBlogEntryCollection.cs: implements a collection of post under a
given user name.
* UUTBlogEntryCollection.cs: implements a collection of post under a
given couple (user name, title).
* ListItem.cs: ListItem is declared obsolete in this model, helpers
can build MVC SelectListItem on data returned by the manager.
* LocalizedText.Designer.cs:
* LocalizedText.fr.Designer.cs: autogenerated from xml
* LocalizedText.resx:
* LocalizedText.fr.resx: new labels
* ChangeUserNameProvider.cs: xml doc
* Profile.cs: the UserName property is read only, and comes from
authentication, to change it, we set a Name and validate it agains
the "Profile" method
* UserManager.cs: simpler code a init time
* IContentProvider.cs: implements the new IDataProvider interface
* IDataProvider.cs: defines the new IDataProvider interface
* YavscModel.csproj: includes new classes
* UserPosts.aspx: adds a link to remove a post
* UserPost.aspx: now uses the new BlogEntryCollection object
9 years ago
|
|
|
using System.Configuration;
|
|
|
|
|
|
|
|
namespace Yavsc.Controllers
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// Front office controller.
|
|
|
|
/// Access granted to all
|
|
|
|
/// </summary>
|
|
|
|
public class FrontOfficeController : Controller
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// The wfmgr.
|
|
|
|
/// </summary>
|
|
|
|
protected WorkFlowManager wfmgr = null;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Initialize the specified requestContext.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="requestContext">Request context.</param>
|
|
|
|
protected override void Initialize (System.Web.Routing.RequestContext requestContext)
|
|
|
|
{
|
|
|
|
base.Initialize (requestContext);
|
|
|
|
wfmgr = new WorkFlowManager ();
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Index this instance.
|
|
|
|
/// </summary>
|
|
|
|
public ActionResult Index ()
|
|
|
|
{
|
|
|
|
return View ();
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// Pub the Event
|
|
|
|
/// </summary>
|
|
|
|
/// <returns>The pub.</returns>
|
|
|
|
/// <param name="model">Model.</param>
|
|
|
|
public ActionResult EventPub (EventPub model)
|
|
|
|
{
|
|
|
|
return View (model);
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
|
|
/// Estimates this instance.
|
|
|
|
/// </summary>
|
|
|
|
[Authorize]
|
|
|
|
public ActionResult Estimates (string client)
|
|
|
|
{
|
* bg.gif:
* asc.gif:
* desc.gif:
* style.css: moved to App_Themes
* style.css:
* bg.gif:
* asc.gif:
* bg.png:
* rect.png:
* asc.png:
* desc.gif:
* jquery-ui.css:
* mdd_styles.css:
* croix.png:
* desc.png:
* style.css:
* jquery-ui.min.css:
* mdd_gripper.png:
* mdd_toolbar.png:
* jquery.timepicker.css:
* mdd_ajax_loader.gif:
* mdd_modal_background.png: moved to /App_Themes
* NpgsqlBlogProvider.cs: * Remove post by id
* Manage collections of entries on a couple (user,title), not a single
post
* NpgsqlCircleProvider.cs: Fixes the "Match" method.
* IDbModule.cs:
* Edit.aspx:
* Estimates.aspx:
* WorkFlowManager.cs:
* NpgsqlContentProvider.cs: refactoring
* NpgsqlMRPProviders.csproj: new NpgsqlUserName provider
* NpgsqlRoleProvider.cs: simpler init method
* NpgsqlUserNameProvider.cs: impements a UserNameProvider
* MyClass.cs: refactoring from Yavsc.Model
* BlogsController.cs: access control simplified
* FrontOfficeController.cs: Pdf generation made public ni case of
formatting exception
* mdd_styles.css: Theme -> App_Themes
* style.css: yet another style impact
* AccountController.cs: Fixes the user name modification
* BlogsController.cs: * Fixes the removal process
* On a title and user name, we get collection of posts, not only one.
* Implements an Access on circle
* FrontOfficeController.cs: * implements a new Get method.
* ensure a membership existence before delivering an estimate.
* GoogleController.cs: Fixes the user name modification on a Google
account
* ErrorHtmlFormatter.cs: nice error message in html (using Markdown
helper)
* FormatterException.cs: formatter exception exposes error and
standard output of the process
* TexToPdfFormatter.cs: * generates temporary files in the folder
returned by Path.GetTempPath()
* throws FormatterException
* Global.asax.cs: new route map:
Blogs/{action}/{user}/{title}
Blog/{user}/{title}
B/{id}
{controller}/{action}/{id}
* App.master: * refactoring: Theme moved to App_Themes
* a link to the logged user's blog
*
* NoLogin.master: refactoring: Theme moved to App_Themes
* Circles.aspx: refactoring : circles now are given as select items
* Login.aspx: fixes the html presentation
* Register.aspx: Fixes a Typo
* Index.aspx: Implements a blog index, due to M&C changes with this
commit
* RemovePost.aspx: links to the new route to the "RemovePost" action,
giving it a post id
* RemoveTitle.aspx: fixes a not yet linked page to remove a post
collection under a given title
* EventPub.aspx: code refactoring
* Writting.ascx: cleans the code
* Web.config: fills the config with new names in the space
* Web.config: configures the new NpgsqlUserNameProvider
* Web.csproj: refactoring and others
* BlogEntryCollection.cs: implement the BlogEntryCollection
* BlogManager.cs: the manager helps to filter on access
* BlogProvider.cs: The title is not unique anymore, and one can modify
it, post a lot under it, drop all posts under it.
A Post is deleted by id.
* UUBlogEntryCollection.cs: implements a collection of post under a
given user name.
* UUTBlogEntryCollection.cs: implements a collection of post under a
given couple (user name, title).
* ListItem.cs: ListItem is declared obsolete in this model, helpers
can build MVC SelectListItem on data returned by the manager.
* LocalizedText.Designer.cs:
* LocalizedText.fr.Designer.cs: autogenerated from xml
* LocalizedText.resx:
* LocalizedText.fr.resx: new labels
* ChangeUserNameProvider.cs: xml doc
* Profile.cs: the UserName property is read only, and comes from
authentication, to change it, we set a Name and validate it agains
the "Profile" method
* UserManager.cs: simpler code a init time
* IContentProvider.cs: implements the new IDataProvider interface
* IDataProvider.cs: defines the new IDataProvider interface
* YavscModel.csproj: includes new classes
* UserPosts.aspx: adds a link to remove a post
* UserPost.aspx: now uses the new BlogEntryCollection object
9 years ago
|
|
|
var u = Membership.GetUser ();
|
|
|
|
if (u == null) // There was no redirection to any login page
|
|
|
|
throw new ConfigurationErrorsException ("no redirection to any login page");
|
|
|
|
|
|
|
|
string username = u.UserName;
|
|
|
|
Estimate [] estims = wfmgr.GetUserEstimates (username);
|
|
|
|
ViewData ["UserName"] = username;
|
|
|
|
ViewData ["ResponsibleCount"] =
|
|
|
|
Array.FindAll (
|
|
|
|
estims,
|
|
|
|
x => x.Responsible == username).Length;
|
|
|
|
ViewData ["ClientCount"] =
|
|
|
|
Array.FindAll (
|
|
|
|
estims,
|
|
|
|
x => x.Client == username).Length;
|
|
|
|
return View (estims);
|
|
|
|
}
|
|
|
|
|
* bg.gif:
* asc.gif:
* desc.gif:
* style.css: moved to App_Themes
* style.css:
* bg.gif:
* asc.gif:
* bg.png:
* rect.png:
* asc.png:
* desc.gif:
* jquery-ui.css:
* mdd_styles.css:
* croix.png:
* desc.png:
* style.css:
* jquery-ui.min.css:
* mdd_gripper.png:
* mdd_toolbar.png:
* jquery.timepicker.css:
* mdd_ajax_loader.gif:
* mdd_modal_background.png: moved to /App_Themes
* NpgsqlBlogProvider.cs: * Remove post by id
* Manage collections of entries on a couple (user,title), not a single
post
* NpgsqlCircleProvider.cs: Fixes the "Match" method.
* IDbModule.cs:
* Edit.aspx:
* Estimates.aspx:
* WorkFlowManager.cs:
* NpgsqlContentProvider.cs: refactoring
* NpgsqlMRPProviders.csproj: new NpgsqlUserName provider
* NpgsqlRoleProvider.cs: simpler init method
* NpgsqlUserNameProvider.cs: impements a UserNameProvider
* MyClass.cs: refactoring from Yavsc.Model
* BlogsController.cs: access control simplified
* FrontOfficeController.cs: Pdf generation made public ni case of
formatting exception
* mdd_styles.css: Theme -> App_Themes
* style.css: yet another style impact
* AccountController.cs: Fixes the user name modification
* BlogsController.cs: * Fixes the removal process
* On a title and user name, we get collection of posts, not only one.
* Implements an Access on circle
* FrontOfficeController.cs: * implements a new Get method.
* ensure a membership existence before delivering an estimate.
* GoogleController.cs: Fixes the user name modification on a Google
account
* ErrorHtmlFormatter.cs: nice error message in html (using Markdown
helper)
* FormatterException.cs: formatter exception exposes error and
standard output of the process
* TexToPdfFormatter.cs: * generates temporary files in the folder
returned by Path.GetTempPath()
* throws FormatterException
* Global.asax.cs: new route map:
Blogs/{action}/{user}/{title}
Blog/{user}/{title}
B/{id}
{controller}/{action}/{id}
* App.master: * refactoring: Theme moved to App_Themes
* a link to the logged user's blog
*
* NoLogin.master: refactoring: Theme moved to App_Themes
* Circles.aspx: refactoring : circles now are given as select items
* Login.aspx: fixes the html presentation
* Register.aspx: Fixes a Typo
* Index.aspx: Implements a blog index, due to M&C changes with this
commit
* RemovePost.aspx: links to the new route to the "RemovePost" action,
giving it a post id
* RemoveTitle.aspx: fixes a not yet linked page to remove a post
collection under a given title
* EventPub.aspx: code refactoring
* Writting.ascx: cleans the code
* Web.config: fills the config with new names in the space
* Web.config: configures the new NpgsqlUserNameProvider
* Web.csproj: refactoring and others
* BlogEntryCollection.cs: implement the BlogEntryCollection
* BlogManager.cs: the manager helps to filter on access
* BlogProvider.cs: The title is not unique anymore, and one can modify
it, post a lot under it, drop all posts under it.
A Post is deleted by id.
* UUBlogEntryCollection.cs: implements a collection of post under a
given user name.
* UUTBlogEntryCollection.cs: implements a collection of post under a
given couple (user name, title).
* ListItem.cs: ListItem is declared obsolete in this model, helpers
can build MVC SelectListItem on data returned by the manager.
* LocalizedText.Designer.cs:
* LocalizedText.fr.Designer.cs: autogenerated from xml
* LocalizedText.resx:
* LocalizedText.fr.resx: new labels
* ChangeUserNameProvider.cs: xml doc
* Profile.cs: the UserName property is read only, and comes from
authentication, to change it, we set a Name and validate it agains
the "Profile" method
* UserManager.cs: simpler code a init time
* IContentProvider.cs: implements the new IDataProvider interface
* IDataProvider.cs: defines the new IDataProvider interface
* YavscModel.csproj: includes new classes
* UserPosts.aspx: adds a link to remove a post
* UserPost.aspx: now uses the new BlogEntryCollection object
9 years ago
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Estimate the specified id.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="id">Identifier.</param>
|
|
|
|
public ActionResult Get (long id)
|
|
|
|
{
|
|
|
|
Estimate f = wfmgr.GetEstimate (id);
|
|
|
|
if (f == null) {
|
|
|
|
ModelState.AddModelError ("Id", "Wrong Id");
|
|
|
|
return View (new Estimate () { Id=id } );
|
|
|
|
}
|
|
|
|
return View (f);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Estimate the specified model and submit.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="model">Model.</param>
|
|
|
|
/// <param name="submit">Submit.</param>
|
|
|
|
[Authorize]
|
|
|
|
public ActionResult Estimate (Estimate model, string submit)
|
|
|
|
{
|
|
|
|
string username = Membership.GetUser().UserName;
|
|
|
|
// Obsolete, set in master page
|
|
|
|
ViewData ["WebApiBase"] = Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative);
|
|
|
|
ViewData ["WABASEWF"] = ViewData ["WebApiBase"] + "/WorkFlow";
|
|
|
|
if (submit == null) {
|
|
|
|
if (model.Id > 0) {
|
|
|
|
Estimate f = wfmgr.GetEstimate (model.Id);
|
|
|
|
if (f == null) {
|
|
|
|
ModelState.AddModelError ("Id", "Wrong Id");
|
|
|
|
return View (model);
|
|
|
|
}
|
|
|
|
model = f;
|
|
|
|
ModelState.Clear ();
|
|
|
|
if (username != model.Responsible
|
|
|
|
&& username != model.Client
|
|
|
|
&& !Roles.IsUserInRole ("FrontOffice"))
|
|
|
|
throw new UnauthorizedAccessException ("You're not allowed to view this estimate");
|
|
|
|
} else if (model.Id == 0) {
|
|
|
|
if (string.IsNullOrWhiteSpace(model.Responsible))
|
|
|
|
model.Responsible = username;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if (model.Id == 0) // if (submit == "Create")
|
|
|
|
if (string.IsNullOrWhiteSpace (model.Responsible))
|
|
|
|
model.Responsible = username;
|
|
|
|
if (username != model.Responsible
|
|
|
|
&& !Roles.IsUserInRole ("FrontOffice"))
|
|
|
|
throw new UnauthorizedAccessException ("You're not allowed to modify this estimate");
|
|
|
|
|
|
|
|
if (ModelState.IsValid) {
|
|
|
|
if (model.Id == 0)
|
|
|
|
model = wfmgr.CreateEstimate (
|
|
|
|
username,
|
|
|
|
model.Client, model.Title, model.Description);
|
|
|
|
else {
|
|
|
|
wfmgr.UpdateEstimate (model);
|
|
|
|
model = wfmgr.GetEstimate (model.Id);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return View (model);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Catalog this instance.
|
|
|
|
/// </summary>
|
|
|
|
[AcceptVerbs ("GET")]
|
|
|
|
public ActionResult Catalog ()
|
|
|
|
{
|
|
|
|
return View (
|
|
|
|
CatalogManager.GetCatalog ()
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Catalog this instance.
|
|
|
|
/// </summary>
|
|
|
|
[AcceptVerbs ("GET")]
|
|
|
|
public ActionResult Brand (string id)
|
|
|
|
{
|
|
|
|
Catalog c = CatalogManager.GetCatalog ();
|
|
|
|
ViewData ["BrandName"] = id;
|
|
|
|
return View (c.GetBrand (id));
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// get the product category
|
|
|
|
/// </summary>
|
|
|
|
/// <returns>The category object.</returns>
|
|
|
|
/// <param name="brandid">Brand id.</param>
|
|
|
|
/// <param name="pcid">Product category Id.</param>
|
|
|
|
[AcceptVerbs ("GET")]
|
|
|
|
public ActionResult ProductCategory (string brandid, string pcid)
|
|
|
|
{
|
|
|
|
ViewData ["BrandId"] = brandid;
|
|
|
|
ViewData ["ProductCategoryId"] = pcid;
|
|
|
|
|
|
|
|
var cat = CatalogManager.GetCatalog ();
|
|
|
|
if (cat == null)
|
|
|
|
throw new Exception ("No catalog");
|
|
|
|
var brand = cat.GetBrand (brandid);
|
|
|
|
if (brand == null)
|
|
|
|
throw new Exception ("Not a brand id: "+brandid);
|
|
|
|
var pcat = brand.GetProductCategory (pcid);
|
|
|
|
if (pcat == null)
|
|
|
|
throw new Exception ("Not a product category id in this brand: " + pcid);
|
|
|
|
return View (pcat);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Product the specified id, pc and pref.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="id">Identifier.</param>
|
|
|
|
/// <param name="pc">Pc.</param>
|
|
|
|
/// <param name="pref">Preference.</param>
|
|
|
|
[AcceptVerbs ("GET")]
|
|
|
|
public ActionResult Product (string id, string pc, string pref)
|
|
|
|
{
|
|
|
|
Product p = null;
|
|
|
|
ViewData ["BrandName"] = id;
|
|
|
|
ViewData ["ProdCatRef"] = pc;
|
|
|
|
ViewData ["ProdRef"] = pref;
|
|
|
|
Catalog cat = CatalogManager.GetCatalog ();
|
|
|
|
if (cat == null) {
|
|
|
|
ViewData ["Message"] = "Catalog introuvable";
|
|
|
|
ViewData ["RefType"] = "Catalog";
|
|
|
|
return View ("ReferenceNotFound");
|
|
|
|
}
|
|
|
|
Brand b = cat.GetBrand (id);
|
|
|
|
if (b == null) {
|
|
|
|
ViewData ["RefType"] = "Brand";
|
|
|
|
return View ("ReferenceNotFound");
|
|
|
|
}
|
|
|
|
ProductCategory pcat = b.GetProductCategory (pc);
|
|
|
|
if (pcat == null) {
|
|
|
|
ViewData ["RefType"] = "ProductCategory";
|
|
|
|
return View ("ReferenceNotFound");
|
|
|
|
}
|
|
|
|
ViewData ["ProdCatName"] = pcat.Name;
|
|
|
|
p = pcat.GetProduct (pref);
|
|
|
|
if (p.CommandForm == null)
|
|
|
|
p.CommandForm = b.DefaultForm;
|
|
|
|
|
|
|
|
return View ((p is Service) ? "Service" : "Product", p);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Basket this instance.
|
|
|
|
/// </summary>
|
|
|
|
[Authorize]
|
|
|
|
public ActionResult Basket ()
|
|
|
|
{
|
|
|
|
return View (wfmgr.GetCommands (Membership.GetUser ().UserName));
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Command the specified collection.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="collection">Collection.</param>
|
|
|
|
[HttpPost]
|
|
|
|
[Authorize]
|
|
|
|
public ActionResult Command (FormCollection collection)
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
// Add specified product command to the basket,
|
|
|
|
// saves it in db
|
|
|
|
new Command(collection,HttpContext.Request.Files);
|
|
|
|
ViewData ["Message"] = LocalizedText.Item_added_to_basket;
|
|
|
|
return View (collection);
|
|
|
|
} catch (Exception e) {
|
|
|
|
ViewData ["Message"] = "Exception:" + e.Message;
|
|
|
|
return View (collection);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|