Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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