예제 #1
0
 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;
 }
예제 #2
0
 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());
 }
예제 #3
0
        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));
        }
예제 #4
0
 public bool PoEditable(PoStatus status)
 => ((User.IsInRole("Administrator") || User.IsInRole("OfficeClerk")) && status == PoStatus.Purchase) ||
 (User.IsInRole("Administrator") && status == PoStatus.Approve);