/** * 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); }
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); }