From acf097326b7c354cacf8a8cb1ff25d5b75610995 Mon Sep 17 00:00:00 2001
From: Maz Jaleel <mazjaleel@gmail.com>
Date: Thu, 19 Jan 2017 16:30:06 +0300
Subject: [PATCH] added some Day queries

---
 .../Model/Generated/Day+CoreDataClass.swift   | 36 +++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/QamarDeen/QamarDeen/Model/Generated/Day+CoreDataClass.swift b/QamarDeen/QamarDeen/Model/Generated/Day+CoreDataClass.swift
index 0507716..1051bb9 100644
--- a/QamarDeen/QamarDeen/Model/Generated/Day+CoreDataClass.swift
+++ b/QamarDeen/QamarDeen/Model/Generated/Day+CoreDataClass.swift
@@ -12,4 +12,40 @@ import CoreData
 @objc(Day)
 public class Day: NSManagedObject {
 
+    /// USAGE: 
+    /// used stricly for creating actions, such as pray, fast, ... etc.
+    /// using this function will ensure there is a day backing the action.
+    class func fetchOrCreate(forDate date: Date) -> Day {
+        
+        let query: NSFetchRequest<Day> = Day.fetchRequest()
+        query.predicate = NSPredicate(format: "gregorianDate = %@", date as NSDate)
+        
+        let result = try! query.execute()
+        if let day = result.first {
+            return day
+        }
+        
+        let day = Day(context: DataManager.instance.moc)
+        day.gregorianDate = date as NSDate
+        day.hijriDate = date as NSDate
+        
+        return day
+    }
+    
+    /// USAGE:
+    /// convenience query for retrieving a range of days for displaying information
+    /// some days may have not been created, for which they will be nil
+    class func fetchRange(startDate: Date, endDate: Date) -> [Date:Day] {
+        assert(startDate <= endDate, "please ensure start date preceeds endDate")
+        
+        let query: NSFetchRequest<Day> = Day.fetchRequest()
+        query.relationshipKeyPathsForPrefetching = ["charities", "prayers", "readings", "fast"]
+        query.predicate = NSPredicate(format: "gregorianDate >= %@ AND gregorianDate <= %@",
+                                      startDate as NSDate, endDate as NSDate)
+        
+        var daysDict: [Date:Day] = [:]
+        (try! query.execute()).forEach { daysDict[$0.gregorianDate! as Date] = $0 }
+
+        return daysDict
+    }
 }