]> gitweb @ CieloNegro.org - task-reporter.git/blobdiff - src/main/scala/jp/ymir/taskReporter/core/Task.scala
wip
[task-reporter.git] / src / main / scala / jp / ymir / taskReporter / core / Task.scala
index 71526941fd34099dc8785f03afe331ba8f5bdeae..2f05f41452c3f0ac0c96013466cb14f23ae728da 100644 (file)
@@ -19,12 +19,30 @@ case class Task(
 object Task {
   import TSV._
 
+  def endOfCurrentHalf: Calendar = {
+    val cal = new GregorianCalendar()
+    cal.set(Calendar.MONTH, ((cal.get(Calendar.MONTH) + 1 + 5) / 6) * 6 - 1)
+    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH))
+    return cal
+  }
+
+  def apply(): Task = Task(
+    date                   = new GregorianCalendar(),
+    ticketID               = None,
+    title                  = "",
+    expectedCompletionDate = endOfCurrentHalf,
+    deadline               = None,
+    status                 = Status.DoingFine,
+    description            = None
+  )
+
   sealed abstract class Status
   object Status {
-    case object DoingFine       extends Status { override def toString() = "順調"     }
-    case object Lagging         extends Status { override def toString() = "遅延"     }
-    case object DeadlineChanged extends Status { override def toString() = "期限変更" }
-    case object Completed       extends Status { override def toString() = "完了"     }
+    case object DoingFine extends Status { override def toString() = "順調"}
+    case object Lagging   extends Status { override def toString() = "遅延"}
+    case object Completed extends Status { override def toString() = "完了"}
+
+    def all: Seq[Status] = Seq(DoingFine, Lagging, Completed)
   }
 
   implicit val CalendarFromField = new FromField[Calendar] {
@@ -40,10 +58,9 @@ object Task {
 
   implicit val StatusFromField = new FromField[Status] {
     def parseField(f: Field): Parser[Status] = f.value match {
-      case "順調"     => (Status.DoingFine:       Status).point[Parser]
-      case "遅延"     => (Status.Lagging:         Status).point[Parser]
-      case "期限変更" => (Status.DeadlineChanged: Status).point[Parser]
-      case "完了"     => (Status.Completed:       Status).point[Parser]
+      case "順調" => (Status.DoingFine: Status).point[Parser]
+      case "遅延" => (Status.Lagging:   Status).point[Parser]
+      case "完了" => (Status.Completed: Status).point[Parser]
       case _ =>
         ("invalid status: " + f).raiseError[Status]
     }
@@ -53,12 +70,12 @@ object Task {
     def parseRecord(r: Record): Parser[Task] =
       for {
         date                   <- r.lookup[Calendar        ]('報告日)
-        ticketID               <- r.lookup[Option[Int]     ]('チケットID)
+        ticketID               <- r.lookup[Option[Int]     ]('チケットID, "")
         title                  <- r.lookup[String          ]('作業名)
         expectedCompletionDate <- r.lookup[Calendar        ]('作業完了予定年月日)
-        deadline               <- r.lookup[Option[Calendar]]('タスク期限)
+        deadline               <- r.lookup[Option[Calendar]]('タスク期限, "")
         status                 <- r.lookup[Status          ]('状態)
-        description            <- r.lookup[Option[String]  ]('説明).handleError(_ => None.point[Parser])
+        description            <- r.lookup[Option[String]  ]('説明, "")
       }
       yield Task(date, ticketID, title, expectedCompletionDate,
                  deadline, status, description)