Ejemplo n.º 1
0
        /**
         * public static bool GenerateUpdates(PortalContext db, Refund refund, RefundProfile user, Refund oldRefund)
         * {
         *  //First case scenario, a whole new refund entity
         *  if (oldRefund == null)
         *  {
         *      db.Refunds.Add(refund);
         *      foreach (var refundItem in refund.RefundItems)
         *      {
         *          refundItem.Status = RefundItemStatus.CREATED;
         *          db.RefundItemUpdates.Add(new RefundItemUpdate
         *          {
         *              Date = DateTime.Now,
         *              RefundItem = refundItem,
         *              RefundProfile = user,
         *              Status = RefundItemStatus.CREATED
         *          });
         *      }
         *      oldRefund = refund;
         *  }
         *  else
         *  {
         *      if (oldRefund.RefundItems == null)
         *      {
         *          oldRefund.RefundItems = new Collection<RefundItem>();
         *      }
         *      if (refund.RefundItems == null)
         *      {
         *          refund.RefundItems = new Collection<RefundItem>();
         *      }
         *      //Deleted items (don't issue updates for formerly deleted items)
         *      var deleted =
         *          oldRefund.RefundItems.Where(
         *              ori =>
         *                  ori.Status != RefundItemStatus.DELETED &&
         *                  refund.RefundItems.All(ri => ri.RefundItemID != ori.RefundItemID));
         *      var deletedList = deleted as IList<RefundItem> ?? deleted.ToList();
         *      foreach (var item in deletedList)
         *      {
         *          item.Status = RefundItemStatus.DELETED;
         *          db.RefundItemUpdates.Add(new RefundItemUpdate
         *          {
         *              Date = DateTime.Now,
         *              RefundItem = item,
         *              RefundProfile = user,
         *              Status = RefundItemStatus.DELETED
         *          });
         *      }
         *
         *      foreach (var refundItem in refund.RefundItems)
         *      {
         *          var oldRefundItem =
         *              oldRefund.RefundItems.FirstOrDefault(ori => ori.RefundItemID == refundItem.RefundItemID);
         *
         *          //New Item Created
         *          if (oldRefundItem == null)
         *          {
         *              refundItem.Status = RefundItemStatus.CREATED;
         *              db.RefundItemUpdates.Add(new RefundItemUpdate
         *              {
         *                  Date = DateTime.Now,
         *                  RefundItem = refundItem,
         *                  RefundProfile = user,
         *                  Status = RefundItemStatus.CREATED
         *              });
         *          }
         *          //Already existing item
         *          else
         *          {
         *              //Checks for status changes
         *              if (oldRefundItem.Status != refundItem.Status)
         *              {
         *                  oldRefundItem.Status = refundItem.Status;
         *                  db.RefundItemUpdates.Add(new RefundItemUpdate
         *                  {
         *                      Date = DateTime.Now,
         *                      RefundItem = oldRefundItem,
         *                      RefundProfile = user,
         *                      Status = refundItem.Status
         *                  });
         *                  db.RefundItems.Attach(oldRefundItem);
         *              }
         *              //And finally checks if the item was edited
         *              else
         *              {
         *                  var changed = false;
         *                  if (oldRefundItem.Activity != refundItem.Activity)
         *                  {
         *                      changed = true;
         *                      oldRefundItem.Activity = refundItem.Activity;
         *                  }
         *
         *                  if (oldRefundItem.Category != refundItem.Category)
         *                  {
         *                      changed = true;
         *                      oldRefundItem.Category = refundItem.Category;
         *                  }
         *
         *                  if (oldRefundItem.OtherSpecification != refundItem.OtherSpecification)
         *                  {
         *                      changed = true;
         *                      oldRefundItem.OtherSpecification = refundItem.OtherSpecification;
         *                  }
         *
         *                  if (oldRefundItem.Value != refundItem.Value)
         *                  {
         *                      changed = true;
         *                      oldRefundItem.Value = refundItem.Value;
         *                  }
         *
         *                  var item = refundItem;
         *                  if (item.Files != null)
         *                  {
         *                      var newFiles = oldRefundItem.Files == null
         *                          ? item.Files.ToList()
         *                          : item.Files.Where(f => oldRefundItem.Files.All(of => of.FileID != f.FileID));
         *                      foreach (var newFile in newFiles)
         *                      {
         *                          changed = true;
         *                          oldRefundItem.Files.Add(newFile);
         *                      }
         *                  }
         *
         *                  if (oldRefundItem.Files != null)
         *                  {
         *                      var deletedFiles = item.Files == null
         *                          ? oldRefundItem.Files.ToList()
         *                          : oldRefundItem.Files.Where(f => item.Files.All(of => of.FileID != f.FileID)).ToList();
         *                      foreach (var deletedFile in deletedFiles)
         *                      {
         *                          changed = true;
         *                          oldRefundItem.Files.Remove(deletedFile);
         *                      }
         *                  }
         *
         *
         *                  if (changed)
         *                  {
         *                      db.RefundItemUpdates.Add(new RefundItemUpdate
         *                      {
         *                          Date = DateTime.Now,
         *                          RefundItem = oldRefundItem,
         *                          RefundProfile = user,
         *                          Status = RefundItemStatus.UPDATED
         *                      });
         *                  }
         *              }
         *          }
         *      }
         *  }
         *  oldRefund.Update();
         *  db.SaveChanges();
         *  return true;
         * }
         */

        public static bool SendResponse(PortalContext db, RefundProfile refundProfile, RefundItemUpdate[] updates)
        {
            Refund refund = null;

            foreach (var update in updates)
            {
                var refundItem = db.RefundItems.First(r => r.RefundItemID == update.RefundItemID);
                if (refund == null)
                {
                    refund = refundItem.Refund;
                }
                refundItem.Status          = update.Status;
                refundItem.ReceivedInvoice = update.ReceivedInvoice;
                db.RefundItemUpdates.Add(new RefundItemUpdate
                {
                    Date            = DateTime.Now,
                    Comment         = update.Comment,
                    RefundItem      = refundItem,
                    RefundProfile   = refundProfile,
                    Status          = refundItem.Status,
                    Files           = update.Files,
                    ReceivedInvoice = update.ReceivedInvoice
                });
            }

            if (refund != null)
            {
                refund.Update();
                db.Refunds.Attach(refund);
                db.Entry(refund).State = EntityState.Modified;
            }
            db.SaveChanges();
            return(true);
        }
Ejemplo n.º 2
0
        private RefundProfile ProcessRefundProfile(string role)
        {
            var userProfile = ProcessUserProfile(role);

            if (userProfile == null)
            {
                return(null);
            }

            var currentRefund = userProfile.RefundProfile;

            if (currentRefund != null)
            {
                return(currentRefund);
            }

            currentRefund = new RefundProfile
            {
                UserID = userProfile.UserID
            };
            currentDb.RefundProfiles.Add(currentRefund);
            return(currentRefund);
        }