public void RenewMembership(MembershipRenewal renewal) { this._tracer.Trace("Method: MembershipService.RenewMembership: MembershipNumber={0}", renewal.MembershipNumber); try { if (!string.IsNullOrEmpty(renewal.MembershipNumber)) { var sdk = ConnectionController.ConnectToCrm(this._tracer); if (sdk != null) { _tracer.Trace("membershipTypeId={0}, amount={1}", renewal.MembershipType.MembershipTypeId, renewal.MembershipType.Price); MembershipController mc = new MembershipController(sdk, this._tracer); bool renewed = mc.RenewMembership(renewal); this._tracer.Trace("mc.RenewMembership={0}", renewed); if (!renewed) { throw new Exception("Unable to renew the membership, this might be because the membership is in an invalid state."); } } else { string message = "Unable to connect to CRM. Check web.config"; this._tracer.Trace(message); throw new Exception(message); } } else { throw new Exception("Invalid input. The Member cannot be null for a Membership"); } } catch (FaultException <OrganizationServiceFault> fe) { if (fe.Detail != null) { this._tracer.Trace(fe.Detail.ToString()); } this._tracer.Trace(fe.ToString()); string reference = renewal.MembershipNumber; throw new WebFaultException <Error>(ConvertToError(fe, reference), HttpStatusCode.InternalServerError); } catch (Exception ex) { this._tracer.Trace(ex.ToString()); string reference = renewal.MembershipNumber; throw new WebFaultException <Error>(ConvertToError(ex, reference), HttpStatusCode.InternalServerError); } finally { // write to the log file this._tracer.WriteToLog(this._logPath); } }
public bool RenewMembership(MembershipRenewal renewal) { bool renewed = false; // Look for an Active Invoice, with a Pending Renewal Membership attached Entity membership = this.GetMembershipAndInvoice(renewal.MembershipNumber); if (membership == null) { Guid membershipId = this.GetLatestActiveMembershipId(renewal.MembershipNumber, true); if (membershipId != null && membershipId != Guid.Empty) { // Tag the active membership for renewing this.TriggerRenewal(membershipId); // Plugin runs on change of 'mag_pendingrenewalcomplete' which triggers a sync plugin to create the renewal membership and invoice // -- // Invoice should now be created, so this will now give us the new invoice/membership membership = this.GetMembershipAndInvoice(renewal.MembershipNumber); } else { _tracer.Trace("membershipNumber={0} is not valid for renewal.", renewal.MembershipNumber); } } if (membership != null) { this._tracer.Trace("membershipId={0}", membership.Id); this.UpdateMembershipAndInvoice(membership, renewal.MembershipType.MembershipTypeId, renewal.MembershipType.Price); renewed = true; } return(renewed); }
public static void MembershipRenewalReminders() { HttpContextWrapper c = new HttpContextWrapper(HttpContext.Current); RouteData routeData = new RouteData(); routeData.Values.Add("controller", typeof(MembershipSurfaceController).Name.ToLower().Replace("controller", "")); ControllerContext controllerContext = new ControllerContext(new RequestContext(c, routeData), new MembershipSurfaceController()); ViewDataDictionary viewData = new ViewDataDictionary(); TempDataDictionary tempData = new TempDataDictionary(); DataManager dm = new DataManager(); var members = dm.GetCurrentMemberships(); //send reminder a week before var model = new MembershipRenewal(); model.BaseUri = System.Web.HttpContext.Current.Request.Url.Scheme + "://" + System.Web.HttpContext.Current.Request.Url.Authority + System.Web.HttpContext.Current.Request.ApplicationPath.TrimEnd('/'); ViewData.Model = model; var html = RazorHelpers.RenderRazorViewToString("~/Views/Reports/VehicleRegistrationReport.cshtml", ControllerContext, ViewData, TempData); var stream = pdfService.GenertatePdfFromHtml(html); foreach (var m in members.Where(n => n.EndDate.Date >= DateTime.UtcNow.Date.AddDays(-100)).ToList()) { if(m.IsSubscription) html = RazorHelpers.RenderRazorViewToString("") } foreach (var m in members.Where(n => n.EndDate.Date >= DateTime.UtcNow.Date).ToList()) { Debug.WriteLine($"Membership a week from renewal. Member id: {m.Member} End date: {m.EndDate} MembershipId: {m.MembershipId}"); } }
public static void MembershipRenewalReminders() { var httpContext = new HttpContextWrapper(HttpContext.Current ?? new HttpContext(new SimpleWorkerRequest("temp.aspx", "", new StringWriter()))); var context = UmbracoContext.EnsureContext(httpContext, ApplicationContext.Current, new WebSecurity(httpContext, ApplicationContext.Current), UmbracoConfig.For.UmbracoSettings(), UrlProviderResolver.Current.Providers, false); DataManager dm = new DataManager(context); var members = dm.GetCurrentMemberships(); var model = new MembershipRenewal(); model.BaseUri = "https://www.wellslittletheatre.com"; var subscriptionService = new StripeSubscriptionService(SensativeInformation.StripeKeys.SecretKey); string price = string.Empty; //send reminder a week before foreach ( var m in members.Where( n => (n.IsSubscription == false || (n.IsSubscription && n.CancelAtEnd == false)) && n.MembershipType != MembershipType.Life && n.EndDate.Date == DateTime.UtcNow.Date.AddMonths(1) || n.EndDate.Date == DateTime.UtcNow.Date.AddDays(7)).ToList()) { var member = dm.GetMember(m.Member); if (member != null) { if (m.IsSubscription && m.StripeSubscriptionId != null) { try { if (member.StripeUserId.IsNotNullOrEmpty()) { var subscription = subscriptionService.Get(m.StripeSubscriptionId); price = (subscription.StripePlan.Amount / 100m).ToString("N"); } } catch (StripeException e) { Log.Error( $"There was a stripe error whilst trying to load the current subscription price for the membership{m.MembershipId}. The error was {e.Message}."); } } model.MembershipType = m.MembershipTypeName; model.DateDue = m.EndDate.AddDays(1); model.IsSubscription = m.IsSubscription; model.Price = price; model.Name = member.Name; var fileContents = GetFileContents("~/MembershipRenwalEmailContent/MembershipRenewalCommingUp.cshtml"); var html = Engine.Razor.RunCompile(fileContents, "MembershipRenewal", typeof(MembershipRenewal), model); EmailHelpers emailService = new EmailHelpers(); emailService.SendEmail(member.GetContactEmail, "Membership renewal is coming up!", html); Log.Info($"Renewal reminder sent to {member.Name}"); } } }