From 2b2013359288c4cd8ef7b253a44d7bbd651fb21e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 19 Apr 2022 16:59:54 -0400 Subject: [PATCH 1/3] Update styling --- app/models/CarrierDetails.scala | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/models/CarrierDetails.scala b/app/models/CarrierDetails.scala index 346d9b6..afe317b 100644 --- a/app/models/CarrierDetails.scala +++ b/app/models/CarrierDetails.scala @@ -3,14 +3,14 @@ package models import org.joda.time.DateTime case class CarrierDetails ( - carrierPlan:Option[String] = None, - carrierPlanStatus:Option[String] = None, - carrierAccount:Option[String] = None, - deviceIds:Seq[DeviceId] = Nil, - ipAddress: Option[String] = None, - created: Option[DateTime] = None, - lastActivated: Option[DateTime] = None - ) { + carrierPlan:Option[String] = None, + carrierPlanStatus:Option[String] = None, + carrierAccount:Option[String] = None, + deviceIds:Seq[DeviceId] = Nil, + ipAddress: Option[String] = None, + created: Option[DateTime] = None, + lastActivated: Option[DateTime] = None +) { def deviceIdOfType(deviceIdType: DeviceIdType.Value): Option[DeviceId] = deviceIds.find(_.kind == deviceIdType) } From 4bfade8e1b337a72f1ad130f8b213c9abb1c0449 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 19 Apr 2022 17:00:05 -0400 Subject: [PATCH 2/3] Add recent Activation search --- app/controllers/LineController.scala | 17 +++++++++++++++++ app/repos/LineRepo.scala | 12 +++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/controllers/LineController.scala b/app/controllers/LineController.scala index 6206a1e..bb8bb4f 100644 --- a/app/controllers/LineController.scala +++ b/app/controllers/LineController.scala @@ -1,6 +1,7 @@ package controllers import models.{Line, SearchResult, ServicePlan} +import org.joda.time.DateTime import javax.inject._ import play.api._ @@ -41,4 +42,20 @@ class LineController @Inject()( .map(line => Ok(Json.toJson(line))) } + def findLinesByActivationDate(startDate: Option[DateTime]) = Action.async { + lineRepo.findByActivationDate(startDate.map(date => date.toString())) + .flatMap { line => + var out = List[Line]() + for (l <- line) { + if (l.carrierDetails.lastActivated.isDefined && l.carrierDetails.lastActivated.get.isAfter(startDate.get)) { + out = out ++ Seq(l) + } + } + Future.successful(out) + } + .map(line => Ok(Json.toJson(line))) + } + + + } diff --git a/app/repos/LineRepo.scala b/app/repos/LineRepo.scala index 4a18986..a3b7562 100644 --- a/app/repos/LineRepo.scala +++ b/app/repos/LineRepo.scala @@ -3,11 +3,12 @@ package repos import akka.actor.ActorSystem import models.Line import org.slf4j.LoggerFactory +import play.api.libs.json.Json import play.api.libs.json.Json.obj import play.modules.reactivemongo.{NamedDatabase, ReactiveMongoApi} import reactivemongo.api.Cursor import reactivemongo.api.bson.{BSONDocumentReader, BSONDocumentWriter, BSONObjectID} -import reactivemongo.play.json.compat.json2bson.toDocumentWriter +import reactivemongo.play.json.compat.json2bson.{toDocumentReader, toDocumentWriter} import reactivemongo.api.bson.collection.BSONCollection import reactivemongo.play.json.compat._ @@ -30,4 +31,13 @@ class LineRepo @Inject()(implicit .cursor[Line]().collect[Seq](defaultMaxDocs, Cursor.FailOnError[Seq[Line]]()) } + def findByActivationDate(startDate: Option[String]): Future[List[Line]] = collection() { col => + col.find( + Json.obj( + "carrierDetails.lastActivated" -> Json.obj("$gt" -> startDate.get) + ) + ).cursor[Line]().collect[List](defaultMaxDocs, Cursor.FailOnError[List[Line]]()) + } + + } From 19937d4c47f0d36ce08114c0282532c63b507f72 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 19 Apr 2022 17:30:29 -0400 Subject: [PATCH 3/3] Add lines by last netsuite sync --- app/controllers/LineController.scala | 11 ++++++++++- app/repos/LineRepo.scala | 7 ++++++- build.sbt | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/controllers/LineController.scala b/app/controllers/LineController.scala index bb8bb4f..385d009 100644 --- a/app/controllers/LineController.scala +++ b/app/controllers/LineController.scala @@ -1,6 +1,6 @@ package controllers -import models.{Line, SearchResult, ServicePlan} +import models.{Line, LineStatus, SearchResult, ServicePlan} import org.joda.time.DateTime import javax.inject._ @@ -56,6 +56,15 @@ class LineController @Inject()( .map(line => Ok(Json.toJson(line))) } + def downloadAllLinesThatAreActiveAndHaventSyncedWithNetsuiteInAYear() = Action { + val source = lineRepo.streamAll(Json.obj()) + .filter( line => line.lineStatus.isDefined && line.lineStatus.get.equals(LineStatus.Active) ) + .filter( line => line.lastSyncWithNetsuite.isDefined && line.lastSyncWithNetsuite.get.isAfter(DateTime.now().minusYears(1))) + .map( line => { + Json.toJson(line) + }) + Ok.streamed(source, None) + } } diff --git a/app/repos/LineRepo.scala b/app/repos/LineRepo.scala index a3b7562..263c601 100644 --- a/app/repos/LineRepo.scala +++ b/app/repos/LineRepo.scala @@ -3,7 +3,7 @@ package repos import akka.actor.ActorSystem import models.Line import org.slf4j.LoggerFactory -import play.api.libs.json.Json +import play.api.libs.json.{JsObject, Json} import play.api.libs.json.Json.obj import play.modules.reactivemongo.{NamedDatabase, ReactiveMongoApi} import reactivemongo.api.Cursor @@ -11,6 +11,7 @@ import reactivemongo.api.bson.{BSONDocumentReader, BSONDocumentWriter, BSONObjec import reactivemongo.play.json.compat.json2bson.{toDocumentReader, toDocumentWriter} import reactivemongo.api.bson.collection.BSONCollection import reactivemongo.play.json.compat._ +import reactivemongo.akkastream.{ State, cursorProducer } import javax.inject.Inject import scala.concurrent.{ExecutionContext, Future} @@ -39,5 +40,9 @@ class LineRepo @Inject()(implicit ).cursor[Line]().collect[List](defaultMaxDocs, Cursor.FailOnError[List[Line]]()) } + def streamAll(filter:JsObject, sortCriteria:JsObject = Json.obj("carrierDetails.lastActivated" -> -1)) = streaming() { col => + col.find(filter) + .sort(sortCriteria).cursor[Line]().documentSource() + } } diff --git a/build.sbt b/build.sbt index d75191c..a1592e2 100644 --- a/build.sbt +++ b/build.sbt @@ -11,6 +11,7 @@ libraryDependencies += guice libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "5.1.0" % Test libraryDependencies += "com.typesafe.play" %% "play-json-joda" % "2.9.2" libraryDependencies += "org.reactivemongo" %% "play2-reactivemongo" % "1.0.6-play28" +libraryDependencies += "org.reactivemongo" %% "reactivemongo-akkastream" % "1.0.6" libraryDependencies += "org.typelevel" %% "squants" % "1.8.3" // Adds additional packages into Twirl