in iOS/MyStudies/MyStudies/Views/Steps/ActivityStep/ActivityStepResultModel/ActivityStepResult.swift [395:712]
func setResultValue(stepResult: ORKStepResult, activityType: ActivityType) {
if (stepResult.results?.count)! > 0 {
if activityType == .questionnaire {
// for question Step
if stepResult.results?.count == 1 && self.type != .form {
if let questionstepResult: ORKQuestionResult? = stepResult.results?.first
as? ORKQuestionResult?
{
self.setValue(questionstepResult: questionstepResult!)
} else {
// for consent step result we are storing the ORKConsentSignatureResult
let consentStepResult: ORKConsentSignatureResult? =
(stepResult.results?.first as? ORKConsentSignatureResult?)!
self.value = consentStepResult
}
} else {
// for form step result
self.value = [ActivityStepResult]()
var formResultArray: [Any] = [Any]()
var j: Int! = 0
var isAddMore: Bool? = false
if self.step as? ActivityFormStep != nil {
if (stepResult.results?.count)!
> (self.step as? ActivityFormStep)!.itemsArray
.count
{
isAddMore = true
}
}
// else if (stepResult.results?.count)!
// > (self.step as? ActivityStep)!.itemsArray
// .count
// {
// isAddMore = true
// }
var localArray: [[String: Any]] = [[String: Any]]()
for (i, result) in stepResult.results!.enumerated() {
let activityStepResult: ActivityStepResult? = ActivityStepResult()
activityStepResult?.startTime = self.startTime
activityStepResult?.endTime = self.endTime
activityStepResult?.skipped = self.skipped
let activityStep = ActivityStep()
activityStepResult?.step = activityStep
j = (i == 0 ? 0 : i % (self.step as? ActivityFormStep)!.itemsArray.count)
// Checking if formStep is RepeatableFormStep
if isAddMore! {
if j == 0 {
localArray.removeAll()
localArray = [[String: Any]]()
}
let stepDict = (((self.step as? ActivityFormStep)!.itemsArray) as [[String: Any]])[j]
activityStepResult?.key = stepDict["key"] as! String?
} else {
activityStepResult?.key = result.identifier
}
let itemDict = (self.step as? ActivityFormStep)!.itemsArray[j] as [String: Any]
activityStepResult?.step?.resultType = (itemDict["resultType"] as? String)!
if (result as? ORKQuestionResult) != nil {
let questionResult: ORKQuestionResult? = (result as? ORKQuestionResult)
if Utilities.isValidValue(
someObject: (activityStepResult?.step?.resultType as? String as AnyObject)
) {
self.subTypeForForm =
activityStepResult?.step?.resultType
as? String
} else {
self.subTypeForForm = ""
}
self.setValue(questionstepResult: questionResult!)
activityStepResult?.value = self.value
localArray.append((activityStepResult?.getActivityStepResultDict()!)!)
// checking if more steps added in RepeatableFormStep
if isAddMore! {
if j + 1 == (self.step as? ActivityFormStep)!.itemsArray.count {
if localArray.count > 0 {
formResultArray.append(localArray)
}
}
}
}
self.value = nil
}
if isAddMore! {
self.value = formResultArray
} else {
if localArray.count > 0 {
formResultArray.append(localArray)
}
self.value = formResultArray
}
}
} else if activityType == .activeTask {
// For Active task like Fetal Kick, Spatial Span Memory & Towers of Honoi
let activityResult: ORKResult? = stepResult.results?.first
var resultArray: [[String: Any]]? = Array()
if (activityResult as? ORKSpatialSpanMemoryResult) != nil {
// Result Handling for Spatial Span Memory
let stepTypeResult: ORKSpatialSpanMemoryResult? =
activityResult
as? ORKSpatialSpanMemoryResult
if Utilities.isValidValue(someObject: stepTypeResult?.score as AnyObject?)
&& Utilities.isValidValue(
someObject: stepTypeResult?.numberOfGames as AnyObject?
)
&& Utilities.isValidValue(
someObject: stepTypeResult?.numberOfFailures as AnyObject?
)
{
for i in 0..<3 {
var resultDict: [String: Any]? = Dictionary()
resultDict?[kActivityActiveKeyResultType] =
ActiveStepResultType.numeric
.rawValue
switch SpatialSpanMemoryType(rawValue: i)! as SpatialSpanMemoryType {
case .score:
resultDict?[kActivityActiveStepKey] = kSpatialSpanMemoryKeyScore
resultDict?[kActivityStepResultValue] = stepTypeResult?.score
case .numberOfGames:
resultDict?[kActivityActiveStepKey] = kSpatialSpanMemoryKeyNumberOfGames
resultDict?[kActivityStepResultValue] =
stepTypeResult?
.numberOfGames
case .numberOfFailures:
resultDict?[kActivityActiveStepKey] = kSpatialSpanMemoryKeyNumberOfFailures
resultDict?[kActivityStepResultValue] =
stepTypeResult?
.numberOfFailures
}
if self.startTime != nil
&& (Utilities.getStringFromDate(date: self.startTime!) != nil)
{
resultDict?[kActivityStepStartTime] = Utilities.getStringFromDate(
date: self.startTime!
)
} else {
let currentDate = Date()
let dateString = Utilities.getStringFromDate(date: currentDate)
resultDict?[kActivityStepStartTime] = dateString
}
if self.endTime != nil
&& (Utilities.getStringFromDate(date: self.endTime!) != nil)
{
resultDict?[kActivityStepEndTime] = Utilities.getStringFromDate(
date: self.endTime!
)
} else {
let currentDate = Date()
let dateString = Utilities.getStringFromDate(date: currentDate)
resultDict?[kActivityStepEndTime] = dateString
}
resultDict?[kActivityStepSkipped] = self.skipped
resultArray?.append(resultDict!)
}
self.key = Study.currentActivity?.actvityId
self.value = resultArray
} else {
self.value = 0
}
} else if (activityResult as? ORKTowerOfHanoiResult) != nil {
// Result Handling for Towers of Honoi
let stepTypeResult: ORKTowerOfHanoiResult? =
activityResult
as? ORKTowerOfHanoiResult
for i in 0..<2 {
var resultDict: [String: Any]? = Dictionary()
// Saving puzzleWasSolved & numberOfMoves
if TowerOfHanoiResultType(rawValue: i) == .puzzleWasSolved {
resultDict?[kActivityActiveStepKey] = kTowerOfHanoiKeyPuzzleWasSolved
resultDict?[kActivityStepResultValue] = stepTypeResult?.puzzleWasSolved
resultDict?[kActivityActiveKeyResultType] =
ActiveStepResultType.boolean
.rawValue
} else {
// numberOfMoves
resultDict?[kActivityActiveStepKey] = kTowerOfHanoiKeyNumberOfMoves
resultDict?[kActivityStepResultValue] = stepTypeResult?.moves?.count
resultDict?[kActivityActiveKeyResultType] =
ActiveStepResultType.numeric
.rawValue
}
if self.startTime != nil
&& (Utilities.getStringFromDate(date: self.startTime!) != nil)
{
resultDict?[kActivityStepStartTime] = Utilities.getStringFromDate(
date: self.startTime!
)
} else {
let currentDate = Date()
let dateString = Utilities.getStringFromDate(date: currentDate)
resultDict?[kActivityStepStartTime] = dateString
}
// Saving Start & End Time of Step
if self.endTime != nil
&& (Utilities.getStringFromDate(date: self.endTime!) != nil)
{
resultDict?[kActivityStepEndTime] = Utilities.getStringFromDate(
date: self.endTime!
)
} else {
let currentDate = Date()
let dateString = Utilities.getStringFromDate(date: currentDate)
resultDict?[kActivityStepEndTime] = dateString
}
resultDict?[kActivityStepSkipped] = self.skipped
resultArray?.append(resultDict!)
}
self.key = Study.currentActivity?.actvityId
self.value = resultArray
} else if (activityResult as? FetalKickCounterTaskResult) != nil {
// Result handling for FetalKickCounter
let stepTypeResult: FetalKickCounterTaskResult? =
activityResult
as? FetalKickCounterTaskResult
for i in 0..<2 {
var resultDict: [String: Any]? = Dictionary()
resultDict?[kActivityActiveKeyResultType] =
ActiveStepResultType.numeric
.rawValue
// Saving Duration & Kick Counts
if i == 0 { //Duration
resultDict?[kActivityActiveStepKey] = kFetalKickCounterDuration
resultDict?[kActivityStepResultValue] = Double(
(stepTypeResult?.duration) == nil ? 0 : (stepTypeResult?.duration)!
)
} else { // Kick Count
resultDict?[kActivityActiveStepKey] = kFetalKickCounterCount
resultDict?[kActivityStepResultValue] = Double(
(stepTypeResult?.totalKickCount) == nil
? 0 : (stepTypeResult?.totalKickCount)!
)
}
// Saving Start & End Time of Step
if self.startTime != nil
&& (Utilities.getStringFromDate(date: self.startTime!) != nil)
{
resultDict?[kActivityStepStartTime] = Utilities.getStringFromDate(
date: self.startTime!
)
} else {
let currentDate = Date()
let dateString = Utilities.getStringFromDate(date: currentDate)
resultDict?[kActivityStepStartTime] = dateString
}
if self.endTime != nil
&& (Utilities.getStringFromDate(date: self.endTime!) != nil)
{
resultDict?[kActivityStepEndTime] = Utilities.getStringFromDate(
date: self.endTime!
)
} else {
let currentDate = Date()
let dateString = Utilities.getStringFromDate(date: currentDate)
resultDict?[kActivityStepEndTime] = dateString
}
resultDict?[kActivityStepSkipped] = self.skipped
resultArray?.append(resultDict!)
}
self.value = resultArray
}
}
}
}