Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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