Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 22 | Rev 26 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  DataService.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 2/27/22.
6
//
7
 
8
import Foundation
9
import SwiftyJSON
10
 
11
class DataService
12
{
17 efrain 13
    private var appData = AppData.sharedInstance
1 efrain 14
 
15
 
16
 
17 efrain 17
    func complete(topicModel : TopicModel, capsuleModel : CapsuleModel)
1 efrain 18
    {
19
        let now = Date()
20
        let dateFormatter = DateFormatter()
21
        dateFormatter.dateFormat = Constants.FORMAT_DATETIME_SERVICE
22
        let dateOn = dateFormatter.string(from: now)
23
 
24
 
25
        let userUuid = appData.userUuid
26
        var json : [String: Any]
27
        var sync : SyncModel
28
        var userLog : UserLogModel
29
 
30
        let syncDao = SyncDao.sharedInstance
31
        let progressDao = ProgressDao.sharedInstance
32
        let userLogDao = UserLogDao.sharedInstance
33
 
34
        var progressCapsule = progressDao.selectByCapsuleUuidAndUserUuid(capsuleUuid: capsuleModel.uuid, userUuid: userUuid)
17 efrain 35
 
1 efrain 36
        if progressCapsule.id > 0 && progressCapsule.progress >= 100 {
37
            progressCapsule.completed = 1
38
            progressCapsule.updatedOn = dateOn
39
            progressDao.update(record: progressCapsule)
40
 
41
            json = progressCapsule.toJson()
42
            json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS
43
 
44
            sync = SyncModel();
45
            sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
46
            if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
47
               let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
48
                    sync.data = data
49
                }
50
 
51
            syncDao.insert(record : sync);
52
 
53
            userLog = UserLogModel()
54
            userLog.userUuid = userUuid
55
            userLog.companyUuid = topicModel.companyUuid
56
            userLog.topicUuid = topicModel.uuid
57
            userLog.capsuleUuid = capsuleModel.uuid
58
            userLog.activity = Constants.USER_LOG_ACTIVITY_COMPLETED_CAPSULE
59
            userLog.addedOn = dateOn
60
            userLogDao.insert(record: userLog)
61
 
62
            json = userLog.toJson()
63
            json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_USER_LOG
64
 
65
            sync = SyncModel();
66
            sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
67
            if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
68
                let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
69
                    sync.data = data
70
                }
71
 
72
            syncDao.insert(record : sync);
73
        }
74
 
75
        var progressTopic = progressDao.selectByTopicUuidAndUserUuid(topicUuid: topicModel.uuid, userUuid: userUuid)
17 efrain 76
 
1 efrain 77
        if progressTopic.id > 0 && progressTopic.progress >= 100 {
78
            progressTopic.completed = 1
79
            progressTopic.updatedOn = dateOn
80
            progressDao.update(record: progressTopic)
17 efrain 81
 
82
            json = progressTopic.toJson()
1 efrain 83
            json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS
84
 
85
            sync = SyncModel();
86
            sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
87
            if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
88
               let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
89
                    sync.data = data
90
                }
91
 
92
            syncDao.insert(record : sync);
93
 
94
            userLog = UserLogModel()
95
            userLog.userUuid = userUuid
96
            userLog.companyUuid = topicModel.companyUuid
97
            userLog.topicUuid = topicModel.uuid
98
            userLog.activity = Constants.USER_LOG_ACTIVITY_COMPLETED_TOPIC
99
            userLog.addedOn = dateOn
100
            userLogDao.insert(record: userLog)
101
 
102
            json = userLog.toJson()
103
            json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_USER_LOG
104
 
105
            sync = SyncModel();
106
            sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
107
            if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
108
                let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
109
                    sync.data = data
110
                }
111
 
112
            syncDao.insert(record : sync);
113
        }
114
    }
115
 
116
    func incompleteSlide (slide: SlideModel)
117
    {
11 efrain 118
        //print("Notification: \(Constants.NOTIFICATION_NAME_INCOMPLETED_SLIDE) ")
17 efrain 119
       // NotificationCenter.default.post(name:Constants.NOTIFICATION_NAME_INCOMPLETED_SLIDE,
120
       //                                 object: nil, userInfo: ["slideUuid": slide.uuid])
1 efrain 121
    }
122
 
123
    func completeSlide( slide : SlideModel)
124
    {
24 efrain 125
        //var changeProgress = false
1 efrain 126
        let now = Date()
127
        let dateFormatter = DateFormatter()
128
        dateFormatter.dateFormat = Constants.FORMAT_DATETIME_SERVICE
129
        let dateOn = dateFormatter.string(from: now)
130
 
131
        let slideDao = SlideDao.sharedInstance
132
 
133
        let capsuleDao = CapsuleDao.sharedInstance
134
        let capsule = capsuleDao.selectByUuid(uuid: slide.capsuleUuid)
135
 
136
 
137
        let topicDao = TopicDao.sharedInstance
138
        let topic = topicDao.selectByUuid(uuid: slide.topicUuid)
139
 
140
 
141
        let userUuid = appData.userUuid
142
        var json : [String: Any]
143
        var sync : SyncModel
144
        var userLog : UserLogModel
145
 
146
        let syncDao = SyncDao.sharedInstance
147
        let progressDao = ProgressDao.sharedInstance
148
        let userLogDao = UserLogDao.sharedInstance
149
 
150
 
151
        var progressSlide = progressDao.selectBySlideUuidAndUserUuid(slideUuid: slide.uuid, userUuid: userUuid)
152
        var progressCapsule = progressDao.selectByCapsuleUuidAndUserUuid(capsuleUuid: slide.capsuleUuid, userUuid: userUuid)
153
        var progressTopic = progressDao.selectByTopicUuidAndUserUuid(topicUuid: slide.topicUuid, userUuid: userUuid)
154
 
155
        if progressTopic.id == 0 {
156
            userLog = UserLogModel()
157
            userLog.userUuid = userUuid
158
            userLog.companyUuid = topic.companyUuid
159
            userLog.topicUuid = topic.uuid
160
            userLog.activity = Constants.USER_LOG_ACTIVITY_START_TOPIC
161
            userLog.addedOn = dateOn
162
            userLogDao.insert(record: userLog)
163
 
164
            json = userLog.toJson()
165
            json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_USER_LOG
166
 
167
            sync = SyncModel();
168
            sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
169
            if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
170
                let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
171
                    sync.data = data
172
                }
173
 
174
            syncDao.insert(record : sync);
175
        }
176
 
177
        if progressCapsule.id == 0 {
178
            userLog = UserLogModel()
179
            userLog.userUuid = userUuid
180
            userLog.companyUuid = topic.companyUuid
181
            userLog.topicUuid = topic.uuid
182
            userLog.capsuleUuid = capsule.uuid
183
            userLog.activity = Constants.USER_LOG_ACTIVITY_START_CAPSULE
184
            userLog.addedOn = dateOn
185
            userLogDao.insert(record: userLog)
186
 
187
            json = userLog.toJson()
188
            json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_USER_LOG
189
 
190
            sync = SyncModel();
191
            sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
192
            if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
193
                let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
194
                    sync.data = data
195
                }
196
 
197
            syncDao.insert(record : sync);
198
        }
199
 
200
        if progressSlide.id == 0 {
201
            progressSlide.userUuid = userUuid
202
            progressSlide.companyUuid = topic.companyUuid
203
            progressSlide.topicUuid = topic.uuid
204
            progressSlide.capsuleUuid = capsule.uuid
205
            progressSlide.slideUuid = slide.uuid
206
            progressSlide.viewSlides = 0
207
            progressSlide.totalSlides = 0
208
            progressSlide.progress = 0
209
            progressSlide.type = Constants.PROGRESS_TYPE_SLIDE
210
            progressSlide.returning = 0
211
            progressSlide.returningAfterCompleted = 0
212
            progressSlide.completed = 1
213
            progressSlide.addedOn = dateOn
214
            progressSlide.updatedOn = dateOn
215
            progressDao.insert(record: progressSlide)
216
 
24 efrain 217
            //changeProgress = true
1 efrain 218
        } else {
219
 
220
            if progressCapsule.id > 0 && progressCapsule.completed == 1 {
221
 
222
                progressSlide.returningAfterCompleted = progressSlide.returningAfterCompleted + 1
223
 
224
                progressSlide.updatedOn = dateOn
225
                progressDao.update(record: progressSlide)
226
            }
227
        }
228
 
229
        json = progressSlide.toJson()
230
        json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS
231
 
232
        sync = SyncModel();
233
        sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
234
        if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
235
           let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
236
                sync.data = data
237
            }
238
 
239
        syncDao.insert(record : sync);
240
 
241
        userLog = UserLogModel()
242
        userLog.userUuid = userUuid
243
        userLog.companyUuid = topic.companyUuid
244
        userLog.topicUuid = topic.uuid
245
        userLog.capsuleUuid = capsule.uuid
246
        userLog.slideUuid = slide.uuid
247
        userLog.activity = slide.type == Constants.SLIDE_TYPE_QUIZ ? Constants.USER_LOG_ACTIVITY_APPROVED_TEST :  Constants.USER_LOG_ACTIVITY_VIEW_SLIDE
248
        userLog.addedOn = dateOn
249
        userLogDao.insert(record: userLog)
250
 
251
 
252
        json = userLog.toJson()
253
        json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_USER_LOG
254
 
255
        sync = SyncModel();
256
        sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
257
        if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
258
            let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
259
                sync.data = data
260
            }
261
 
262
        syncDao.insert(record : sync);
263
 
264
 
265
 
266
 
267
 
268
 
24 efrain 269
        //if changeProgress {
1 efrain 270
 
271
            var totalSlides = slideDao.getCountByCapsuleUuid(capsuleUuid: slide.capsuleUuid)
272
            var totalViews = progressDao.getCountSlideCompletedByCapsuleUuidAndUserUuid(capsuleUuid: slide.capsuleUuid, userUuid: userUuid)
273
            var progress = totalSlides > 0 ? ((totalViews * 100) / totalSlides) : 0
274
 
275
 
276
            if progressCapsule.id == 0 {
277
 
278
                progressCapsule = ProgressModel()
279
                progressCapsule.userUuid = userUuid
280
                progressCapsule.companyUuid = topic.companyUuid
281
                progressCapsule.topicUuid = slide.topicUuid
282
                progressCapsule.capsuleUuid = slide.capsuleUuid
283
                progressCapsule.type = Constants.PROGRESS_TYPE_CAPSULE
284
 
285
                progressCapsule.addedOn = dateOn
286
                progressCapsule.updatedOn = dateOn
287
                progressCapsule.viewSlides = totalViews
288
                progressCapsule.totalSlides = totalSlides
289
                progressCapsule.progress = Double(progress)
290
 
291
                progressDao.insert(record: progressCapsule)
292
 
22 efrain 293
                appData.capsuleUuidOld = appData.capsuleUuidActive
294
                appData.save()
295
 
1 efrain 296
            } else {
297
                progressCapsule.updatedOn = dateOn
298
                progressCapsule.viewSlides = totalViews
299
                progressCapsule.totalSlides = totalSlides
300
                progressCapsule.progress = Double(progress)
301
 
302
 
24 efrain 303
                print("capsuleUuidActive: \(appData.capsuleUuidActive) capsuleUuidOld : \(appData.capsuleUuidOld)")
304
 
305
                if progressCapsule.completed == 1 && appData.capsuleUuidActive != appData.capsuleUuidOld {
1 efrain 306
                    progressCapsule.returningAfterCompleted = progressCapsule.returningAfterCompleted + 1
307
                    progressDao.update(record: progressCapsule)
308
 
309
 
24 efrain 310
                    print("set capsuleUuidOld : \(appData.capsuleUuidActive)")
311
                    appData.capsuleUuidOld = appData.capsuleUuidActive
17 efrain 312
                    appData.save()
11 efrain 313
 
1 efrain 314
                } else {
315
                    progressDao.update(record: progressCapsule)
316
                }
317
            }
318
 
319
 
320
 
321
 
24 efrain 322
            json = progressCapsule.toJson()
1 efrain 323
            json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS
324
 
325
            sync = SyncModel();
326
            sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
327
            if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
328
               let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
329
                    sync.data = data
330
                }
331
 
332
            syncDao.insert(record : sync);
333
 
334
            totalSlides = slideDao.getCountByTopicUuid(topicUuid: slide.topicUuid)
335
            totalViews = progressDao.getCountSlideCompletedByTopicUuidAndUserUuid(topicUuid: slide.topicUuid, userUuid: userUuid)
336
            progress = totalSlides > 0 ? ((totalViews * 100) / totalSlides) : 0
337
 
338
 
339
            if progressTopic.id == 0 {
340
                progressTopic = ProgressModel()
341
                progressTopic.userUuid = userUuid
342
                progressTopic.companyUuid = topic.companyUuid
343
                progressTopic.topicUuid = slide.topicUuid
344
                progressTopic.type = Constants.PROGRESS_TYPE_TOPIC
345
 
346
                progressTopic.addedOn = dateOn
347
                progressTopic.updatedOn = dateOn
348
                progressTopic.viewSlides = totalViews
349
                progressTopic.totalSlides = totalSlides
350
                progressTopic.progress = Double(progress)
351
 
352
                progressDao.insert(record: progressTopic)
353
 
354
            } else {
355
 
356
                progressTopic.updatedOn = dateOn
357
                progressTopic.viewSlides = totalViews
358
                progressTopic.totalSlides = totalSlides
359
                progressTopic.progress = Double(progress)
360
                progressDao.update(record: progressTopic)
361
            }
362
 
363
 
364
 
24 efrain 365
            json = progressTopic.toJson()
1 efrain 366
            json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS
367
 
368
            sync = SyncModel();
369
            sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
370
            if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
371
               let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
372
                   sync.data = data
373
                }
374
 
375
            syncDao.insert(record : sync);
24 efrain 376
        //}
1 efrain 377
 
378
 
11 efrain 379
       // print("Notification: \(Constants.NOTIFICATION_NAME_COMPLETED_SLIDE) ")
17 efrain 380
       // NotificationCenter.default.post(name:Constants.NOTIFICATION_NAME_COMPLETED_SLIDE,
381
       //                                 object: nil, userInfo: ["slideUuid": slide.uuid])
1 efrain 382
 
17 efrain 383
       // if (changeProgress) {
1 efrain 384
 
11 efrain 385
            //print("Notification: \(Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_CAPSULE) ")
17 efrain 386
            //NotificationCenter.default.post(name: Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_CAPSULE, object: nil, userInfo:["capsuleUuid": slide.capsuleUuid])
1 efrain 387
 
388
 
11 efrain 389
            //print("Notification: \(Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_TOPIC) ")
17 efrain 390
            //NotificationCenter.default.post(name: Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_TOPIC, object: nil, userInfo:["topicUuid": slide.topicUuid])
1 efrain 391
 
17 efrain 392
        //}
1 efrain 393
 
394
    }
395
 
396
 
397
 
398
 
8 efrain 399
    public func syncFromServer(json : JSON?, refresh : Bool = false) -> Bool
1 efrain 400
    {
401
        let companyDao = CompanyDao.sharedInstance
402
        let topicDao = TopicDao.sharedInstance
403
        let capsuleDao = CapsuleDao.sharedInstance
404
        let slideDao = SlideDao.sharedInstance
405
        let quizDao = QuizDao.sharedInstance
406
        let questionDao = QuestionDao.sharedInstance
407
        let answerDao = AnswerDao.sharedInstance
408
        let userLogDao = UserLogDao.sharedInstance
409
        let progressDao = ProgressDao.sharedInstance
410
        let userExtendedDao = UserExtendedDao.sharedInstance
8 efrain 411
        let userNotificationDao = UserNotificationDao.sharedInstance
1 efrain 412
 
413
        answerDao.removeAll()
414
        questionDao.removeAll()
415
        quizDao.removeAll()
416
 
417
        slideDao.removeAll()
418
        capsuleDao.removeAll()
419
        topicDao.removeAll()
420
        companyDao.removeAll()
17 efrain 421
 
1 efrain 422
        userExtendedDao.removeAll()
423
 
17 efrain 424
        //userLogDao.removeAll()
425
        //progressDao.removeAll()
426
        //userNotificationDao.removeAll()
427
 
1 efrain 428
        var companyModel : CompanyModel
429
        let now = Date()
430
        let dateFormatter = DateFormatter()
431
        dateFormatter.dateFormat = Constants.FORMAT_DATETIME_SERVICE
17 efrain 432
        let dateOn = dateFormatter.string(from: now)
1 efrain 433
 
8 efrain 434
        if json?["data"]["max_date_changes"] != ""  {
1 efrain 435
            let maxDateChanges = json?["data"]["max_date_changes"].string ?? ""
436
 
11 efrain 437
            //print("maxDateChanges : \(maxDateChanges)")
1 efrain 438
            appData.maxDateChanges = maxDateChanges
439
        }
440
 
8 efrain 441
        if !refresh  && json?["data"]["device"] != "" {
1 efrain 442
            let deviceAes = json?["data"]["device"]["aes"].string ?? ""
443
            let devicePassword = json?["data"]["device"]["password"].string ?? ""
444
 
11 efrain 445
            //print("deviceAes: \(deviceAes)")
446
           // print("devicePassword: \(devicePassword)")
9 efrain 447
            appData.deviceAes = deviceAes
448
            appData.devicePassword = devicePassword
1 efrain 449
 
450
        }
8 efrain 451
        if json?["data"]["user"] != "" {
1 efrain 452
            let userUuid = json?["data"]["user"]["uuid"].string ?? ""
453
            let userFirstName = json?["data"]["user"]["first_name"].string ?? ""
454
            let userLastName = json?["data"]["user"]["last_name"].string ?? ""
455
            let userEmail = json?["data"]["user"]["email"].string ?? ""
456
            let userImage = json?["data"]["user"]["image"].string ?? ""
457
 
11 efrain 458
            //print("userUuid : \(userUuid)")
459
            //print("userFirstName : \(userFirstName)")
460
            //print("userLastName: \(userLastName)")
461
            //print("userEmail : \(userEmail)")
462
            //print("userImage : \(userImage)")
1 efrain 463
 
464
            appData.userUuid = userUuid
9 efrain 465
            appData.userFirstname = userFirstName
466
            appData.userLastname =  userLastName
467
            appData.userEmail = userEmail
468
            appData.userImage = userImage
1 efrain 469
        }
470
 
17 efrain 471
        appData.lastCheckChanges = dateOn
9 efrain 472
        appData.topicUuidActive = ""
473
        appData.capsuleUuidActive = ""
474
        appData.capsuleUuidOld = ""
475
        appData.slideUuidActive = ""
17 efrain 476
        appData.save()
11 efrain 477
 
17 efrain 478
        userLogDao.removeAllUserUuidNotEqual(userUuid: appData.userUuid)
479
        progressDao.removeAllUserUuidNotEqual(userUuid: appData.userUuid)
480
        userNotificationDao.removeAllUserUuidNotEqual(userUuid: appData.userUuid)
1 efrain 481
 
482
        if json?["data"]["topics"] != "" {
483
            var topicModel : TopicModel
484
            var capsuleModel : CapsuleModel
485
            var slideModel : SlideModel
486
 
487
            for topic in json!["data"]["topics"]
488
            {
489
 
490
                companyModel = CompanyModel()
491
                companyModel.uuid = topic.1["company_uuid"].string ?? ""
492
                companyModel.name = topic.1["company_name"].string ?? ""
493
                companyModel.image = topic.1["company_image"].string ?? ""
494
 
11 efrain 495
               // print("companyUuid : \(companyModel.uuid)")
496
               // print("companyName : \(companyModel.name)")
497
               // print("companyImage : \(companyModel.image)")
1 efrain 498
 
499
                let company = companyDao.selectByUuid(uuid:  companyModel.uuid)
500
                if(company.uuid.isEmpty) {
501
                    companyDao.insert(company: companyModel)
502
                } else {
503
                    companyDao.update(company: companyModel)
504
                }
505
 
506
                topicModel = TopicModel()
507
                topicModel.companyUuid = companyModel.uuid
508
                topicModel.uuid = topic.1["uuid"].string ?? ""
509
                topicModel.name  = topic.1["name"].string ?? ""
510
                topicModel.description = topic.1["description"].string ?? ""
511
                topicModel.image = topic.1["image"].string ?? ""
512
                topicModel.position = Int(topic.1["position"].string ?? "") ?? 1
513
                topicModel.addedOn = topic.1["added_on"].string ?? ""
514
                topicModel.updatedOn = topic.1["updated_on"].string ?? ""
515
 
516
 
11 efrain 517
               // print("topiccompanyUuid: \(topicModel.companyUuid)")
518
                //print("topicUuid: \(topicModel.uuid)")//
519
               // print("topicName: \(topicModel.name)")
520
                //print("topicDescription: \(topicModel.description)")//
521
                //print("topicImage: \(topicModel.image)")
522
                //print("topicPosition: \(topicModel.position)")
1 efrain 523
 
524
 
525
 
526
                // Insert Topics in DB
527
                topicDao.insert(topic: topicModel)
528
 
529
                for capsule in topic.1["capsules"]
530
                {
531
 
532
                    capsuleModel = CapsuleModel()
533
                    capsuleModel.topicUuid = topicModel.uuid
534
                    capsuleModel.uuid = capsule.1["uuid"].string ?? ""
535
                    capsuleModel.name = capsule.1["name"].string ?? ""
536
                    capsuleModel.description = capsule.1["description"].string ?? ""
537
                    capsuleModel.image = capsule.1["image"].string ?? ""
538
                    capsuleModel.position = Int(capsule.1["position"].string ?? "") ?? 1
8 efrain 539
                    capsuleModel.linkComments = capsule.1["link_comments"].string ?? ""
540
                    capsuleModel.linkCommentAdd = capsule.1["link_comment_add"].string ?? ""
541
                    capsuleModel.totalComments = Int(capsule.1["total_comments"].string ?? "") ?? 1
542
                    capsuleModel.totalRating = Decimal(Double(capsule.1["total_rating"].string ?? "") ?? 0)
1 efrain 543
                    capsuleModel.addedOn = capsule.1["added_on"].string ?? ""
544
                    capsuleModel.updatedOn = capsule.1["updated_on"].string ?? ""
545
 
11 efrain 546
                    //print("capsuletopicUuid: \(capsuleModel.topicUuid)")
547
                    //print("capsuleUuid: \(capsuleModel.uuid)")
548
                    //print("capsuleName: \(capsuleModel.name)")
549
                    //print("capsuleDescription: \(capsuleModel.description)")
550
                    //print("capsuleImage: \(capsuleModel.image)")
551
                    //print("capsulePosition: \(capsuleModel.position)")
552
                    //print("capsuleLinkComments: \(capsuleModel.linkComments)")
553
                    //print("capsuleLinkCommentAdd: \(capsuleModel.linkCommentAdd)")
554
                    //print("capsuleTotalComments: \(capsuleModel.totalComments)")
555
                    //print("capsuleTotalRating: \(capsuleModel.totalRating)")
1 efrain 556
 
557
 
558
                    // Insert Capsules in DB
559
                    capsuleDao.insert(capsule: capsuleModel)
560
 
561
                    for slide in capsule.1["slides"]
562
                    {
563
                        slideModel = SlideModel()
564
                        slideModel.topicUuid = capsuleModel.topicUuid
565
                        slideModel.capsuleUuid = capsuleModel.uuid
566
                        slideModel.uuid = slide.1["uuid"].string ?? ""
567
                        slideModel.quizUuid = slide.1["quiz_uuid"].string ?? ""
568
                        slideModel.name = slide.1["name"].string ?? ""
569
                        slideModel.description = slide.1["description"].string ?? ""
570
                        slideModel.position = Int(slide.1["position"].string ?? "") ?? 1
571
                        slideModel.background = slide.1["background"].string ?? ""
572
                        slideModel.file = slide.1["file"].string ?? ""
573
                        slideModel.type = slide.1["type"].string ?? ""
574
                        slideModel.addedOn = slide.1["added_on"].string ?? ""
575
                        slideModel.updatedOn = slide.1["updated_on"].string ?? ""
576
 
577
 
11 efrain 578
                        //print("slidetopicUuid: \(slideModel.topicUuid)")
579
                        //print("slidecapsuleUuid: \(slideModel.capsuleUuid)")
580
                        //print("slideUuid: \(slideModel.uuid)")
581
                        //print("slideQuizUuid: \(slideModel.quizUuid)")
582
                        //print("slideName: \(slideModel.name)")
583
                        //print("slideDescription: \(slideModel.description)")
584
                        //print("slidePosition: \(slideModel.position)")
585
                        //print("slideBackground: \(slideModel.background)")
586
                        //print("slideFile: \(slideModel.file)")
587
                        //print("slideTye: \(slideModel.type)")
1 efrain 588
 
589
                        // Insert Slides in DB
590
                        slideDao.insert(slide: slideModel)
591
                    }
592
                }
593
            }
594
        }
595
 
596
        if json?["data"]["quizzes"] != "" {
597
            var quizModel : QuizModel
598
            var questionModel : QuestionModel
599
            var answerModel  : AnswerModel
600
            for quiz in json!["data"]["quizzes"]
601
            {
602
 
603
 
604
                companyModel = CompanyModel()
605
                companyModel.uuid = quiz.1["company_uuid"].string ?? ""
606
                companyModel.name = quiz.1["company_name"].string ?? ""
607
                companyModel.image =  quiz.1["company_image"].string ?? ""
608
 
11 efrain 609
                //print("companyUuid : \(companyModel.uuid)")
610
                //print("companyName : \(companyModel.name)")
611
                //print("companyImage : \(companyModel.image)")
1 efrain 612
 
613
                let company = companyDao.selectByUuid(uuid:  companyModel.uuid)
614
                if(company.uuid.isEmpty) {
615
                    companyDao.insert(company: companyModel)
616
                } else {
617
                    companyDao.update(company: companyModel)
618
                }
619
 
620
                quizModel = QuizModel()
621
                quizModel.companyUuid = company.uuid
622
                quizModel.uuid = quiz.1["uuid"].string ?? ""
623
                quizModel.name = quiz.1["name"].string ?? ""
624
                quizModel.text = quiz.1["text"].string ?? ""
625
                quizModel.failed = quiz.1["failed"].string ?? ""
626
                quizModel.points = Int(quiz.1["points"].string ?? "") ?? 0
627
                quizModel.minimumPointsRequired = Int(quiz.1["minimum_points_required"].string ?? "") ?? 0
628
                quizModel.maxTime = Int(quiz.1["max_time"].string ?? "") ?? 0
629
                quizModel.addedOn = quiz.1["added_on"].string ?? ""
630
                quizModel.updatedOn = quiz.1["updated_on"].string ?? ""
631
 
632
 
11 efrain 633
                //print("quizcompanyUuid: \(quizModel.companyUuid)")
634
                //print("quizUuid: \(quizModel.uuid)")
635
                //print("quizName: \(quizModel.name)")
636
                //print("quizText: \(quizModel.text)")
637
                //print("quizFailed: \(quizModel.failed)")
638
                //print("quizPoints: \(quizModel.points)")
639
                //print("quizMinimumPointsRequired: \(quizModel.minimumPointsRequired)")
640
                //print("quizMaxTime: \(quizModel.maxTime)")
1 efrain 641
 
642
 
643
                quizDao.insert(quiz: quizModel)
644
 
645
                for question in quiz.1["questions"]
646
                {
647
                    questionModel = QuestionModel()
648
                    questionModel.quizUuid = quizModel.uuid
649
                    questionModel.uuid = question.1["uuid"].string ?? ""
650
                    questionModel.text  = question.1["text"].string ?? ""
651
                    questionModel.type = question.1["type"].string ?? ""
652
                    questionModel.points  = Int(question.1["points"].string ?? "") ?? 0
653
                    questionModel.max_length = Int(question.1["maxlength"].string ?? "") ?? 0
654
                    questionModel.addedOn = question.1["added_on"].string ?? ""
655
                    questionModel.updatedOn = question.1["updated_on"].string ?? ""
656
 
11 efrain 657
                    //print("questionQuizUuid: \(questionModel.quizUuid)")
658
                    //print("questionId: \(questionModel.uuid)")
659
                    //print("questionText: \(questionModel.text)")
660
                    //print("questionType: \(questionModel.type)")
661
                    //print("questionPoints: \(questionModel.points)")
662
                    //print("questionMaxLength: \(questionModel.max_length)")
1 efrain 663
 
664
 
665
                    questionDao.insert(question: questionModel)
666
 
667
                    for answer in question.1["answers"]
668
                    {
669
                        answerModel = AnswerModel()
670
                        answerModel.questionUuid = questionModel.uuid
671
                        answerModel.uuid  = answer.1["uuid"].string ?? ""
672
                        answerModel.text = answer.1["text"].string ?? ""
673
                        answerModel.correct = Int(answer.1["correct"].string ?? "") ?? 0
674
                        answerModel.points = Int(answer.1["points"].string ?? "") ?? 0
675
                        answerModel.addedOn = answer.1["added_on"].string ?? ""
676
                        answerModel.updatedOn = answer.1["updated_on"].string ?? ""
677
 
11 efrain 678
                        //print("answerQuestionUuid: \(answerModel.questionUuid)")
679
                        //print("answerId: \(answerModel.uuid)")
680
                        //print("answerText: \(answerModel.text)")
681
                        //print("answerCorrect: \(answerModel.correct)")
1 efrain 682
 
683
 
684
 
685
                        answerDao.insert(answer: answerModel)
686
 
687
                    }
688
 
689
 
690
                }
691
 
692
            }
693
        }
694
 
695
        if json?["data"]["userlog"] != "" {
696
 
697
            var userLogModel : UserLogModel
698
            for userlog in json!["data"]["userlog"]
699
            {
700
                userLogModel = UserLogModel()
701
                userLogModel.companyUuid = userlog.1["company_uuid"].string ?? ""
702
                userLogModel.userUuid = userlog.1["user_uuid"].string ?? ""
703
                userLogModel.topicUuid = userlog.1["topic_uuid"].string ?? ""
704
                userLogModel.capsuleUuid = userlog.1["capsule_uuid"].string ?? ""
705
                userLogModel.slideUuid = userlog.1["slide_uuid"].string ?? ""
706
                userLogModel.activity = userlog.1["activity"].string ?? ""
707
                userLogModel.addedOn = userlog.1["added_on"].string ?? ""
708
 
709
                userLogDao.insert(record: userLogModel)
710
            }
711
        }
712
 
713
        if json?["data"]["extended"] != "" {
714
 
715
            var userExtendedModel : UserExtendedModel
716
            for userExtended in json!["data"]["extended"]
717
            {
718
                companyModel = CompanyModel()
719
                companyModel.uuid = userExtended.1["company_uuid"].string ?? ""
720
                companyModel.name = userExtended.1["company_name"].string ?? ""
721
                companyModel.image =  userExtended.1["company_image"].string ?? ""
722
 
723
                print("companyUuid : \(companyModel.uuid)")
724
                print("companyName : \(companyModel.name)")
725
                print("companyImage : \(companyModel.image)")
726
 
727
                let company = companyDao.selectByUuid(uuid: companyModel.uuid)
728
                if(company.uuid.isEmpty) {
729
                    companyDao.insert(company: companyModel)
730
                } else {
731
                    companyDao.update(company: companyModel)
732
                }
733
 
734
                for detail in userExtended.1["details"]
735
                {
736
                    userExtendedModel = UserExtendedModel()
737
                    userExtendedModel.companyUuid = companyModel.uuid
738
                    userExtendedModel.uuid = detail.1["uuid"].string ?? ""
739
                    userExtendedModel.label = detail.1["label"].string ?? ""
740
                    userExtendedModel.value = detail.1["value"].string ?? ""
741
 
742
                    userExtendedDao.insert(record: userExtendedModel)
743
                }
744
            }
745
        }
746
 
747
        if json?["data"]["progress"] != "" {
748
 
749
            var progressModel : ProgressModel
750
            for progress in json!["data"]["progress"] {
751
 
752
 
753
                let userUuid = progress.1["user_uuid"].string ?? ""
754
                let topicUuid = progress.1["topic_uuid"].string ?? ""
755
                let capsuleUuid = progress.1["capsule_uuid"].string ?? ""
756
                let slideUuid = progress.1["slide_uuid"].string ?? ""
757
                let type = progress.1["type"].string ?? ""
758
 
759
 
760
                switch type {
761
                    case Constants.PROGRESS_TYPE_TOPIC:
762
                        progressModel = progressDao.selectByTopicUuidAndUserUuid(topicUuid: topicUuid, userUuid: userUuid)
763
                        break
764
 
765
                    case Constants.PROGRESS_TYPE_CAPSULE:
766
                        progressModel = progressDao.selectByCapsuleUuidAndUserUuid(capsuleUuid: capsuleUuid, userUuid: userUuid)
767
                        break
768
 
769
                    case Constants.PROGRESS_TYPE_SLIDE:
770
                        progressModel = progressDao.selectBySlideUuidAndUserUuid(slideUuid: slideUuid, userUuid: userUuid)
771
                        break
772
                    default:
773
                        continue
774
                    }
775
 
776
 
777
                if progressModel.id == 0 {
778
                    progressModel = ProgressModel()
779
                    progressModel.userUuid = userUuid
780
                    progressModel.topicUuid = topicUuid
781
                    progressModel.capsuleUuid = capsuleUuid
782
                    progressModel.slideUuid = slideUuid
783
                    progressModel.type = type
784
                    progressModel.companyUuid = progress.1["company_uuid"].string ?? ""
785
                    progressModel.progress = Double(progress.1["progress"].string ?? "") ?? 0.0
786
                    progressModel.totalSlides = Int(progress.1["total_slides"].string ?? "") ?? 0
787
                    progressModel.viewSlides = Int(progress.1["view_slides"].string ?? "") ?? 0
788
                    progressModel.returning = Int(progress.1["returning"].string ?? "") ?? 0
789
                    progressModel.returningAfterCompleted = Int(progress.1["returning_after_completed"].string ?? "") ?? 0
790
                    progressModel.completed = Int(progress.1["completed"].string ?? "") ?? 0
791
                    progressModel.addedOn = progress.1["added_on"].string ?? ""
792
                    progressModel.updatedOn = progress.1["updated_on"].string ?? ""
793
 
794
                    progressDao.insert(record: progressModel)
795
                }
796
 
797
            }
798
        }
8 efrain 799
 
1 efrain 800
 
801
        return true;
802
    }
803
 
804
 
805
}