public ActionResult Create(ShareModel share) { //IEnumerable<ApplicationUserModel> usersWithShares = shareBPL.GetAllUsersWithShareHoldingSummary(); IEnumerable<ShareModel> usersWithShares = shareBPL.GetShareTransactionHistoryForAllUser(); SelectList users = accountBPL.GetUserSelectList(false); ViewBag.Users = users; ViewBag.UserShares = usersWithShares; if (!ModelState.IsValid) return View("Share", share); share.CreatedUserId = User.Identity.GetUserId(); ShareModel addedShare = null; try { addedShare = shareBPL.AddShares(share); if (addedShare != null) { EmailSender emailSender = new EmailSender(); emailSender.SendSharePurchaseInvoice(addedShare); } TempData["CreateStatus"] = "Success"; return RedirectToAction("Share"); } catch (Exception ex) { ViewBag.ErrorMessage = ex.Message; } return View("Share", share); }
internal ShareModel GetLastShareEntryForShareHolder(string userId) { ShareModel model = new ShareModel(); ShareEntity entity = context.Shares.Where(x => x.PurchasedUserId == userId).OrderByDescending(x => x.PurchasedDateTimeUtc).FirstOrDefault(); if (entity != null) model = ShareMapper.ShareEntityToShareModel(entity); return model; }
public static ListDictionary ShareToDictionary(ShareModel share) { ListDictionary replacements = new ListDictionary(); replacements.Add("#FIRSTNAME#", ValueToString(share.FirstName)); replacements.Add("#QUANTITY#", ValueToString(share.NoOfShares)); replacements.Add("#RATE#", ValueToString(share.PricePerShare)); replacements.Add("#GROSSAMOUNT#", ValueToString(share.GrossAmount)); replacements.Add("#PURCHASEDTIMEUTC#", ValueToString(share.PurchasedDateTimeUtc.ToShortDateString())); return replacements; }
internal ShareModel AddShares(ShareModel shareModel) { ShareModel addedShare = null; ShareEntity entity = ShareMapper.ShareModelToShareEntity(shareModel); context.Shares.Add(entity); context.SaveChanges(); //TODO: Navigation Properties should load without following line, find out why its not loading in first insert and then loading in the following inserts for each user. ShareEntity addedEntity = context.Shares.Include(x => x.PurchasedUser).Include(x => x.CreatedUser).Single(x => x.Id == entity.Id); addedShare = ShareMapper.ShareEntityToShareModel(entity); return addedShare; }
internal ShareModel AddShares(ShareModel shareModel) { shareModel.Status = "Completed"; shareModel.Type = "Payment From"; if(!(shareModel.NoOfShares<0)) return shareRepo.AddShares(shareModel); bool isEligible = shareRepo.IsShareHolderEligibleForShareDeduction(shareModel); if (isEligible) return shareRepo.AddShares(shareModel); throw new Exception("No transaction for selected sponsors on selected date!"); }
internal void SendSharePurchaseInvoice(ShareModel addedShare) { MailDefinition mail = new MailDefinition(); mail.BodyFileName = "~/Content/EmailTemplate/Invoice.html"; mail.Subject = "ETC Canada - Confirmation of Share Purchase " + DateTime.Today.ToShortDateString(); ListDictionary replacements = ShareToDictionary(addedShare); System.Net.Mail.MailMessage message = mail.CreateMailMessage(addedShare.Email, replacements, new System.Web.UI.Control()); List<string> adminUserEmails = GetAllAdminUsersEmailAddress(); adminUserEmails.ForEach(x => message.CC.Add(x)); message.IsBodyHtml = true; EmailHandler handler = new EmailHandler(message); Thread thread = new Thread(new ThreadStart(handler.SendEmail)); thread.Start(); }
public static ShareEntity ShareModelToShareEntity(ShareModel model) { return new ShareEntity { Amount = model.GrossAmount, PricePerShare = model.PricePerShare, NoOfShares = model.NoOfShares, PurchasedDateTimeUtc = model.PurchasedDateTimeUtc, PurchasedUserId = model.PurchasedUserId, Type = model.Type, Status = model.Status, CreatedUserId = model.CreatedUserId }; }
internal bool IsShareHolderEligibleForShareDeduction(ShareModel model) { return context.Shares.Where(x => (x.PurchasedUserId == model.PurchasedUserId) && x.PurchasedDateTimeUtc == model.PurchasedDateTimeUtc).Any(); }