public PoStatusModel(PoStatus entity) { this.PoId = entity.PoId; this.CustomerId = entity.CustomerId; this.AtsDate = entity.AtsDate; this.DcCancelDate = entity.DCCancelDate; this.CountUnroutedPo = entity.CountUntoutedPO; this.CountRotingInProgressPo = entity.CountRoutingInprogressPo; this.CountRoutedPo = entity.CountRoutedPO; this.ShippingId = entity.ShippingId; this.BuildingId = entity.BuildingId; this.CustomerName = entity.CustomerName; this.DcId = entity.DcId; }
public IEnumerable <POActionViewModel> PoValidActions(PoStatus status) { return (Context.PurchaseOrderActions .Include(i => i.ValidStatus) .Where(w => w.PoStatusId == status) .Select(s => new POActionViewModel { Id = s.ValidStatus.Id, Name = s.ValidStatus.Name, Description = s.ValidStatus.Description, ClassIcon = s.ValidStatus.ClassIcon, ClassName = s.ValidStatus.ClassName }) .ToList()); }
public async Task <IActionResult> Action(long id, PoStatus action) { var po = Context.PurchaseOrder .FirstOrDefault(a => a.Id == id); var response = new Response(); if (po != null && ((po.PurchaseOrderStatusId == PoStatus.Purchase && (action == PoStatus.Approve || action == PoStatus.Declined)) || (po.PurchaseOrderStatusId == PoStatus.Approve && action == PoStatus.Done) || (po.PurchaseOrderStatusId == PoStatus.Done && action == PoStatus.Paid))) { var items = Context.PurchaseOrderItem .Include(i => i.Item) .Where(w => w.PurchaseOrderId == id) .ToList(); var statusAction = string.Empty; var newJobOrder = new JobOrder(); switch (action) { case PoStatus.Declined: items.ForEach(e => { e.Item.Qty = e.Item.Qty + (e.Qty - e.JobQty); }); po.PurchaseOrderStatusId = PoStatus.Declined; Context.PurchaseOrder.Update(po); Context.PurchaseOrderHistories.Add(new Project.Entities.PurchaseOrder.PurchaseOrderHistory { Action = "Declined", ActionDate = DateTime.Now, PoId = po.Id, ActionUserId = UserManager.GetUserId(User) }); Context.Item.UpdateRange(items.Select(s => s.Item)); await Context.SaveChangesAsync(); statusAction = "Declined"; response.Success = true; break; case PoStatus.Approve: if (items.Sum(s => s.JobQty) > 0) { newJobOrder = new JobOrder { PurchaseOrderId = po.Id, UserId = po.UserId, JoDate = DateTime.Now, JobOrderStatusId = JoStatus.CreatedWithPo, JobOrderItems = items .Where(w => w.JobQty > 0).Select(s => new JobOrderItem { ItemId = s.ItemId, Qty = s.JobQty, StatusId = JoItemStatus.Pending }).ToList(), History = new List <JobOrderHistory> { new JobOrderHistory { ActionUserId = UserManager.GetUserId(User), ActionDate = DateTime.Now, Action = "Approve = Created with Purchase order" } } }; Context.JobOrder.Add(newJobOrder); } po.PurchaseOrderStatusId = PoStatus.Approve; Context.PurchaseOrder.Update(po); Context.PurchaseOrderHistories.Add(new Project.Entities.PurchaseOrder.PurchaseOrderHistory { Action = "Approved", ActionDate = DateTime.Now, PoId = po.Id, ActionUserId = UserManager.GetUserId(User) }); await Context.SaveChangesAsync(); statusAction = "Approved"; response.Success = true; break; case PoStatus.Done: if (items.Sum(s => s.JobQty) > 0) { var jobOrder = Context.JobOrder.FirstOrDefault(f => f.PurchaseOrderId == po.Id); if (jobOrder != null && jobOrder.JobOrderStatusId == JoStatus.Done) { po.PurchaseOrderStatusId = PoStatus.Done; Context.PurchaseOrder.Update(po); Context.PurchaseOrderHistories.Add(new Project.Entities.PurchaseOrder.PurchaseOrderHistory { Action = "Done", ActionDate = DateTime.Now, PoId = po.Id, ActionUserId = UserManager.GetUserId(User) }); await Context.SaveChangesAsync(); response.Success = true; } else { response.Success = false; response.Message = $"Job Order : JO{jobOrder.Id} is not yet Done!"; } //Todo : Check JO is Done } else { po.PurchaseOrderStatusId = PoStatus.Done; Context.PurchaseOrder.Update(po); Context.PurchaseOrderHistories.Add(new Project.Entities.PurchaseOrder.PurchaseOrderHistory { Action = "Done", ActionDate = DateTime.Now, PoId = po.Id, ActionUserId = UserManager.GetUserId(User) }); await Context.SaveChangesAsync(); response.Success = true; } statusAction = "Done"; break; case PoStatus.Paid: po.PurchaseOrderStatusId = PoStatus.Paid; Context.PurchaseOrder.Update(po); Context.PurchaseOrderHistories.Add(new Project.Entities.PurchaseOrder.PurchaseOrderHistory { Action = "Paid", ActionDate = DateTime.Now, PoId = po.Id, ActionUserId = UserManager.GetUserId(User) }); await Context.SaveChangesAsync(); response.Success = true; statusAction = "Mark as Paid"; break; } var urlPo = Url.Action("Detail", "Purchase", new { area = "", id = po.Id }); Notify($"Purchase Order No: PO{po.Id} is {statusAction}", urlPo, $"PO{po.Id}", po.UserId); if (action == PoStatus.Approve && newJobOrder.Id > 0) { var userIds = await GetUserIdsForRoles("Administrator", "ProductionSupervisor"); var urlJo = Url.Action("Detail", "JobOrder", new { area = "", id = newJobOrder.Id }); Notify($"New Job Order No: JO{newJobOrder.Id}", urlJo, Guid.NewGuid().ToString(), userIds); } } else { response.Success = false; response.Message = "Invalid Actions!"; } return(Json(response)); }
public bool PoEditable(PoStatus status) => ((User.IsInRole("Administrator") || User.IsInRole("OfficeClerk")) && status == PoStatus.Purchase) || (User.IsInRole("Administrator") && status == PoStatus.Approve);