Proyectos de Subversion Iphone Microlearning

Rev

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