Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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