This commit is contained in:
2018-06-28 23:37:38 +00:00
commit 4518298aaf
152 changed files with 24114 additions and 0 deletions

View 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