This commit is contained in:
128
Controllers/SubscriptionController.cs
Normal file
128
Controllers/SubscriptionController.cs
Normal file
@@ -0,0 +1,128 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using rockfishCore.Models;
|
||||
using rockfishCore.Util;
|
||||
using System.Linq;
|
||||
using System;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace rockfishCore.Controllers
|
||||
{
|
||||
[Produces("application/json")]
|
||||
[Route("api/subscription")]
|
||||
[Authorize]
|
||||
public class SubscriptionController : Controller
|
||||
{
|
||||
private readonly rockfishContext _context;
|
||||
private readonly IConfiguration _configuration;
|
||||
public SubscriptionController(rockfishContext context, IConfiguration configuration)//these two are injected, see startup.cs
|
||||
{
|
||||
_context = context;
|
||||
_configuration = configuration;
|
||||
}
|
||||
|
||||
//**************************
|
||||
//TODO: ASYNCIFY ALL OF THIS
|
||||
|
||||
///////////////////////////////////////////////////////
|
||||
//Get notification list for expiring subscriptions
|
||||
//
|
||||
[HttpGet("notifylist")]
|
||||
public JsonResult Get()
|
||||
{
|
||||
var customerList = _context.Customer.Select(p => new { p.Id, p.Name });
|
||||
|
||||
/*Query: purchases with no renewal warning flag set, not cancelled and that are expiring subs in next 30 day window grouped by customer and then by purchase date
|
||||
Take that list show in UI, with button beside each customer group, press button, it generates a renewal warning email
|
||||
and puts it into the drafts folder, tags all the purchases with renewal warning sent true. */
|
||||
|
||||
//from three days ago to a month from now
|
||||
long windowStart = DateUtil.DateToEpoch(DateTime.Now.AddDays(-3));
|
||||
long windowEnd = DateUtil.DateToEpoch(DateTime.Now.AddMonths(1));
|
||||
|
||||
var rawExpiresList = _context.Purchase
|
||||
.Where(p => p.RenewNoticeSent == false)
|
||||
.Where(p => p.ExpireDate != null)
|
||||
.Where(p => p.ExpireDate > windowStart)
|
||||
.Where(p => p.ExpireDate < windowEnd)
|
||||
.Where(p => p.CancelDate == null)
|
||||
.OrderBy(p => p.CustomerId)
|
||||
.Select(p => new { id = p.Id, name = p.Name, customerId = p.CustomerId })
|
||||
.ToList();
|
||||
|
||||
|
||||
|
||||
//Initiate an empty list for return
|
||||
List<subnotifyResultItem> retList = new List<subnotifyResultItem>();
|
||||
//Bail if nothing to see here
|
||||
if (rawExpiresList.Count < 1)
|
||||
{
|
||||
return Json(retList);
|
||||
}
|
||||
|
||||
|
||||
long lastCustomerId = -1;
|
||||
subnotifyResultItem sn = new subnotifyResultItem();
|
||||
|
||||
//flatten the list and project it into return format
|
||||
foreach (var i in rawExpiresList)
|
||||
{
|
||||
//first loop?
|
||||
if (lastCustomerId == -1) lastCustomerId = i.customerId;
|
||||
|
||||
//New customer?
|
||||
if (i.customerId != lastCustomerId)
|
||||
{
|
||||
sn.purchasenames = sn.purchasenames.TrimStart(',').Trim();
|
||||
retList.Add(sn);
|
||||
sn = new subnotifyResultItem();
|
||||
lastCustomerId = i.customerId;
|
||||
}
|
||||
|
||||
if (sn.customerId == 0)
|
||||
{
|
||||
//get the full data
|
||||
sn.Customer = customerList.First(p => p.Id == i.customerId).Name;
|
||||
sn.customerId = i.customerId;
|
||||
sn.purchaseidlist = new List<long>();
|
||||
}
|
||||
sn.purchasenames += ", " + i.name;
|
||||
sn.purchaseidlist.Add(i.id);
|
||||
}
|
||||
//Add the last one
|
||||
sn.purchasenames = sn.purchasenames.TrimStart(',').Trim();
|
||||
retList.Add(sn);
|
||||
|
||||
return Json(retList);
|
||||
}
|
||||
|
||||
//dto classes for route
|
||||
public class subnotifyResultItem
|
||||
{
|
||||
public long id;
|
||||
public string Customer;
|
||||
public string purchasenames;
|
||||
public List<long> purchaseidlist;
|
||||
public long customerId;
|
||||
|
||||
}
|
||||
|
||||
//SEND SELECTED RENEWAL NOTIFICATIONS
|
||||
[HttpPost("sendnotify")]
|
||||
public JsonResult Generate([FromBody] List<long> purchaseidlist)
|
||||
{
|
||||
return Json(RfNotify.SendSubscriptionRenewalNotice(_context, purchaseidlist));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
}//eoc
|
||||
}//eons
|
||||
|
||||
Reference in New Issue
Block a user