public IHttpActionResult AddMaterialRequest() { try { using (MaxMasterDbEntities db = new MaxMasterDbEntities()) { var form = HttpContext.Current.Request.Form; var items = JsonConvert.DeserializeObject <List <BilledItemsModel> >(form.Get("items")); var emp = db.Employees.Where(x => x.Role_Id == "8").FirstOrDefault(); var category = db.Categories.Where(x => x.Name == "Stock").FirstOrDefault().Id; var subCategory = db.SubCategories.Where(x => x.Name == "Stock").FirstOrDefault().Id; StockRequest stockReq = new StockRequest(); stockReq.Employee = User.Identity.GetUserId(); stockReq.Client = form.Get("Client"); stockReq.ExpectedStockDate = Convert.ToDateTime(form.Get("expectedDate")); stockReq.Project = Convert.ToInt32(form.Get("project")); stockReq.Status = "Under Review"; stockReq.Notes = form.Get("notes"); stockReq.RequestDate = DateTime.Now; stockReq.LastUpdated = DateTime.Now; stockReq.UpdatedBy = User.Identity.GetUserId(); for (int i = 0; i < items.Count(); i++) { StockRequestMapping srm = new StockRequestMapping(); srm.ItemId = items[i].ModelId; srm.Quanitity = items[i].Quantity; stockReq.StockRequestMappings.Add(srm); } Activity act = new Activity(); if (emp != null) { act.AssignedTo = emp.AspNetUserId; } act.CreatedBy = User.Identity.GetUserId(); act.Status = "Open"; act.Subject = "Material request for project"; act.Project_Id = Convert.ToInt32(form.Get("project")); act.EDOC = Convert.ToDateTime(form.Get("expectedDate")); act.Client_Id = form.Get("Client"); act.Priority = 0; act.CreatedDate = DateTime.Now; act.TaskType = "Client"; act.TaskOwner = act.AssignedTo; act.Description = form.Get("notes"); act.TaskId = RandomString(4); stockReq.TaskId = act.TaskId; act.Category_Id = Convert.ToInt32(category); act.SubCategory_Id = Convert.ToInt32(subCategory); ActivitiesLog activityLog = new ActivitiesLog(); activityLog.Status = act.Status; activityLog.Description = act.Description; activityLog.TaskDate = MasterDataController.GetIndianTime(DateTime.UtcNow); activityLog.AssignedBy = act.CreatedBy; activityLog.AssignedTo = act.TaskOwner; act.ActivitiesLogs.Add(activityLog); db.Activities.Add(act); db.StockRequests.Add(stockReq); db.SaveChanges(); return(Ok()); } } catch (Exception ex) { new Error().logAPIError(System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString(), ex.StackTrace); return(Content(HttpStatusCode.InternalServerError, "An error occured, please try again later")); } }
public IHttpActionResult EditStockRequest(int StockId) { try { using (MaxMasterDbEntities db = new MaxMasterDbEntities()) { var form = HttpContext.Current.Request.Form; var ItemsRequired = JsonConvert.DeserializeObject <List <BilledItemsModel> >(form.Get("items")); var status = form.Get("status"); var task = form.Get("taskId"); var previouslyRequestedItems = db.StockRequestMappings.Where(x => x.StockReqId == StockId).ToList(); /* Get the stock through id */ StockRequest stockRequest = db.StockRequests.Find(StockId); stockRequest.Client = form.Get("Client"); stockRequest.ExpectedStockDate = Convert.ToDateTime(form.Get("expectedDate")); stockRequest.Project = Convert.ToInt32(form.Get("project")); stockRequest.Status = form.Get("status"); stockRequest.Notes = form.Get("notes"); stockRequest.LastUpdated = DateTime.Now; stockRequest.UpdatedBy = User.Identity.GetUserId(); /* Find task with the taskid */ Activity activity = db.Activities.Find(task); ActivitiesLog activityLog = new ActivitiesLog(); if (status.ToUpper() == "UNDER REVIEW") { foreach (var item in previouslyRequestedItems) { db.StockRequestMappings.Remove(item); db.SaveChanges(); } /* Add requested items to stock */ for (int i = 0; i < ItemsRequired.Count(); i++) { StockRequestMapping srm = new StockRequestMapping(); srm.ItemId = ItemsRequired[i].ModelId; srm.Quanitity = ItemsRequired[i].Quantity; stockRequest.StockRequestMappings.Add(srm); } activity.CreatedBy = User.Identity.GetUserId(); db.Entry(activity).State = System.Data.Entity.EntityState.Modified; } else if (status == "Approved") { /* Get Stock Manager and assign activity to manager from super admin */ var stockManager = db.StockManagers.Where(x => x.IsActive == true).FirstOrDefault(); foreach (var item in previouslyRequestedItems) { db.StockRequestMappings.Remove(item); db.SaveChanges(); } /* Add requested items to stock */ for (int i = 0; i < ItemsRequired.Count(); i++) { StockRequestMapping srm = new StockRequestMapping(); srm.ItemId = ItemsRequired[i].ModelId; srm.Quanitity = ItemsRequired[i].Quantity; stockRequest.StockRequestMappings.Add(srm); } for (int j = 0; j < ItemsRequired.Count(); j++) { int quantity = ItemsRequired[j].Quantity; int modelId = ItemsRequired[j].ModelId; /* Get items with model id based on manufactured date */ var itemsAvailable = db.Items.Where(x => x.ItemModelId == modelId && x.IsAvailable == true).OrderBy(x => x.StockInDate).ToList(); if (itemsAvailable.Count() >= ItemsRequired[j].Quantity) { for (int k = 0; k < ItemsRequired[j].Quantity; k++) { Item item = db.Items.Find(itemsAvailable[k].Id); item.ProjectId = Convert.ToInt32(form.Get("project")); item.IsAvailable = false; db.Entry(item).State = System.Data.Entity.EntityState.Modified; } } } if (stockManager != null) { activity.Status = "Pending"; activity.TaskOwner = stockManager.AspNetUserId; activityLog.TaskDate = DateTime.Now; activityLog.AssignedBy = User.Identity.GetUserId(); activityLog.AssignedTo = stockManager.AspNetUserId; activityLog.Description = "Items for the project is approved. Dispatch stock as early as possible"; activityLog.Status = "Pending"; activity.ActivitiesLogs.Add(activityLog); db.Entry(activity).State = System.Data.Entity.EntityState.Modified; } } else if (status == "Declined") { activity.Status = "Resolved"; activity.TaskOwner = stockRequest.Employee; activityLog.TaskDate = DateTime.Now; activityLog.AssignedBy = User.Identity.GetUserId(); activityLog.AssignedTo = activity.CreatedBy; activityLog.Status = "Resolved"; activityLog.Description = "Your request for stock is declined"; activity.ActivitiesLogs.Add(activityLog); db.Entry(activity).State = System.Data.Entity.EntityState.Modified; } else if (status == "Dispatched") { for (int j = 0; j < ItemsRequired.Count(); j++) { int quantity = ItemsRequired[j].Quantity; int modelId = ItemsRequired[j].ModelId; var stock = db.Items.Where(x => x.IsAvailable == false && x.StockOutDate == null).OrderBy(x => x.StockInDate).ToList(); if (stock.Count() >= ItemsRequired[j].Quantity) { for (int k = 0; k < ItemsRequired[j].Quantity; k++) { Item item = db.Items.Find(stock[k].Id); item.ProjectId = Convert.ToInt32(form.Get("project")); item.IsAvailable = false; item.StockOutDate = DateTime.Now; db.Entry(item).State = System.Data.Entity.EntityState.Modified; } activity.TaskOwner = activity.CreatedBy; activity.Status = "Resolved"; activityLog.TaskDate = DateTime.Now; activityLog.AssignedBy = User.Identity.GetUserId(); activityLog.AssignedTo = activity.CreatedBy; activityLog.Status = "Resolved"; activityLog.Description = "Your items were dispatched successfully "; activityLog.HoursWorked = Convert.ToInt32(form.Get("hoursWorked")); activity.ActivitiesLogs.Add(activityLog); db.Entry(activity).State = System.Data.Entity.EntityState.Modified; } else { stockRequest.Status = form.Get("status"); return(Content(HttpStatusCode.InternalServerError, "Requested stock is not available to dispatch")); } } } db.Entry(stockRequest).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } return(Ok()); } catch (Exception ex) { new Error().logAPIError(System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString(), ex.StackTrace); return(Content(HttpStatusCode.InternalServerError, "An error occured, please try again later")); } }