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; using System.Configuration; namespace Yavsc.Controllers { /// /// Front office controller. /// Access granted to all /// public class FrontOfficeController : Controller { /// /// The wfmgr. /// protected WorkFlowManager wfmgr = null; /// /// Initialize the specified requestContext. /// /// Request context. protected override void Initialize (System.Web.Routing.RequestContext requestContext) { base.Initialize (requestContext); wfmgr = new WorkFlowManager (); } /// /// Index this instance. /// public ActionResult Index () { return View (); } /// /// Pub the Event /// /// The pub. /// Model. public ActionResult EventPub (EventPub model) { return View (model); } /// /// Estimates this instance. /// [Authorize] public ActionResult Estimates (string client) { 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); } /// /// Estimate the specified id. /// /// Identifier. 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); } /// /// Estimate the specified model and submit. /// /// Model. /// Submit. [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); } /// /// Catalog this instance. /// [AcceptVerbs ("GET")] public ActionResult Catalog () { return View ( CatalogManager.GetCatalog () ); } /// /// Catalog this instance. /// [AcceptVerbs ("GET")] public ActionResult Brand (string id) { Catalog c = CatalogManager.GetCatalog (); ViewData ["BrandName"] = id; return View (c.GetBrand (id)); } /// /// get the product category /// /// The category object. /// Brand id. /// Product category Id. [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); } /// /// Product the specified id, pc and pref. /// /// Identifier. /// Pc. /// Preference. [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); } /// /// Basket this instance. /// [Authorize] public ActionResult Basket () { return View (wfmgr.GetCommands (Membership.GetUser ().UserName)); } /// /// Command the specified collection. /// /// Collection. [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); } } } }