Exemplo n.º 1
0
        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"));
            }
        }
Exemplo n.º 2
0
        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"));
            }
        }