using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Web; using System.Web.Security; using Yavsc; using Yavsc.Model.WorkFlow; using System.Web.Http; using Yavsc.Model.RolesAndMembers; using Yavsc.Helpers; using Yavsc.Model; using System.Web.Http.Controllers; namespace Yavsc.ApiControllers { /// /// Work flow controller. /// public class WorkFlowController : ApiController { string adminRoleName="Admin"; /// /// The wfmgr. /// protected WorkFlowManager wfmgr = null; /// /// Initialize the specified controllerContext. /// /// Controller context. protected override void Initialize (HttpControllerContext controllerContext) { // TODO move it in a module initialization base.Initialize (controllerContext); if (!Roles.RoleExists (adminRoleName)) { Roles.CreateRole (adminRoleName); } wfmgr = new WorkFlowManager (); } /// /// Creates the estimate. /// /// The estimate. /// Title. /// Client. /// Description. [HttpGet] [Authorize] public Estimate CreateEstimate (string title,string client,string description) { return wfmgr.CreateEstimate ( Membership.GetUser().UserName,client,title,description); } /// /// Register the specified model and isapprouved. /// /// Model. /// If set to true isapprouved. [HttpGet] [ValidateAjax] [Authorize(Roles="Admin,FrontOffice")] public void Register([FromBody] RegisterModel userModel) { if (ModelState.IsValid) { MembershipCreateStatus mcs; var user = Membership.CreateUser ( userModel.UserName, userModel.Password, userModel.Email, null, null, userModel.IsApprouved, out mcs); switch (mcs) { case MembershipCreateStatus.DuplicateEmail: ModelState.AddModelError ("Email", string.Format(LocalizedText.DuplicateEmail,userModel.UserName) ); return ; case MembershipCreateStatus.DuplicateUserName: ModelState.AddModelError ("UserName", string.Format(LocalizedText.DuplicateUserName,userModel.Email)); return ; case MembershipCreateStatus.Success: if (!userModel.IsApprouved) YavscHelpers.SendActivationEmail (user); return; default: throw new InvalidOperationException (string.Format("Unexpected user creation code :{0}",mcs)); } } } /// /// Drops the writting. /// /// Wrid. [HttpGet] [Authorize] public void DropWritting(long wrid) { wfmgr.DropWritting (wrid); } /// /// Drops the estimate. /// /// Estid. [HttpGet] [Authorize] public void DropEstimate(long estid) { string username = Membership.GetUser().UserName; Estimate e = wfmgr.GetEstimate (estid); if (e == null) throw new InvalidOperationException("not an estimate id:"+estid); if (username != e.Responsible && !Roles.IsUserInRole ("FrontOffice")) throw new UnauthorizedAccessException ("You're not allowed to drop this estimate"); wfmgr.DropEstimate (estid); } /// /// Index this instance. /// [HttpGet] [Authorize] public object Index() { // TODO inform user on its roles and alerts string username = Membership.GetUser ().UserName; return new { test=string.Format("Hello {0}!",username) }; } /// /// Updates the writting. /// /// The writting. /// Wr. [Authorize] [AcceptVerbs("POST")] [ValidateAjax] public HttpResponseMessage UpdateWritting([FromBody] Writting wr) { wfmgr.UpdateWritting (wr); return Request.CreateResponse (System.Net.HttpStatusCode.OK,"WrittingUpdated:"+wr.Id); } /// /// Adds the specified imputation to the given estimation by estimation id. /// /// Estimation identifier /// Imputation to add [AcceptVerbs("POST")] [Authorize] [ValidateAjax] public HttpResponseMessage Write ([FromUri] long estid, [FromBody] Writting wr) { if (estid <= 0) { ModelState.AddModelError ("EstimationId", "Spécifier un identifiant d'estimation valide"); return Request.CreateResponse (System.Net.HttpStatusCode.BadRequest, ValidateAjaxAttribute.GetErrorModelObject (ModelState)); } try { return Request.CreateResponse(System.Net.HttpStatusCode.OK, wfmgr.Write(estid, wr.Description, wr.UnitaryCost, wr.Count, wr.ProductReference)); } catch (Exception ex) { return Request.CreateResponse ( System.Net.HttpStatusCode.InternalServerError, "Internal server error:" + ex.Message + "\n" + ex.StackTrace); } } } }