Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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