Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 9 | 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
{
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
    {
11 efrain 179
        //print("Notification: \(Constants.NOTIFICATION_NAME_INCOMPLETED_SLIDE) ")
1 efrain 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
11 efrain 370
 
371
                    print("update query : 2")
9 efrain 372
                    appDao.update(model: appData)
1 efrain 373
 
374
                } else {
375
                    progressDao.update(record: progressCapsule)
376
                }
377
            }
378
 
379
 
380
 
381
 
382
            json = progressSlide.toJson()
383
            json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS
384
 
385
            sync = SyncModel();
386
            sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
387
            if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
388
               let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
389
                    sync.data = data
390
                }
391
 
392
            syncDao.insert(record : sync);
393
 
394
            totalSlides = slideDao.getCountByTopicUuid(topicUuid: slide.topicUuid)
395
            totalViews = progressDao.getCountSlideCompletedByTopicUuidAndUserUuid(topicUuid: slide.topicUuid, userUuid: userUuid)
396
            progress = totalSlides > 0 ? ((totalViews * 100) / totalSlides) : 0
397
 
398
 
399
            if progressTopic.id == 0 {
400
                progressTopic = ProgressModel()
401
                progressTopic.userUuid = userUuid
402
                progressTopic.companyUuid = topic.companyUuid
403
                progressTopic.topicUuid = slide.topicUuid
404
                progressTopic.type = Constants.PROGRESS_TYPE_TOPIC
405
 
406
                progressTopic.addedOn = dateOn
407
                progressTopic.updatedOn = dateOn
408
                progressTopic.viewSlides = totalViews
409
                progressTopic.totalSlides = totalSlides
410
                progressTopic.progress = Double(progress)
411
 
412
                progressDao.insert(record: progressTopic)
413
 
414
            } else {
415
 
416
                progressTopic.updatedOn = dateOn
417
                progressTopic.viewSlides = totalViews
418
                progressTopic.totalSlides = totalSlides
419
                progressTopic.progress = Double(progress)
420
                progressDao.update(record: progressTopic)
421
            }
422
 
423
 
424
 
425
            json = progressSlide.toJson()
426
            json[Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME] = Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS
427
 
428
            sync = SyncModel();
429
            sync.type = Constants.SYNC_ADAPTER_TYPE_SYNC
430
            if let theJSONData = try?  JSONSerialization.data(withJSONObject: json, options: .prettyPrinted),
431
               let data = String(data: theJSONData, encoding: String.Encoding.ascii) {
432
                   sync.data = data
433
                }
434
 
435
            syncDao.insert(record : sync);
436
        }
437
 
438
 
11 efrain 439
       // print("Notification: \(Constants.NOTIFICATION_NAME_COMPLETED_SLIDE) ")
1 efrain 440
        NotificationCenter.default.post(name:Constants.NOTIFICATION_NAME_COMPLETED_SLIDE,
441
                                        object: nil, userInfo: ["slideUuid": slide.uuid])
442
 
443
        if (changeProgress) {
444
 
11 efrain 445
            //print("Notification: \(Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_CAPSULE) ")
1 efrain 446
            NotificationCenter.default.post(name: Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_CAPSULE, object: nil, userInfo:["capsuleUuid": slide.capsuleUuid])
447
 
448
 
11 efrain 449
            //print("Notification: \(Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_TOPIC) ")
1 efrain 450
            NotificationCenter.default.post(name: Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_TOPIC, object: nil, userInfo:["topicUuid": slide.topicUuid])
451
 
452
        }
453
 
454
    }
455
 
456
 
457
 
458
 
8 efrain 459
    public func syncFromServer(json : JSON?, refresh : Bool = false) -> Bool
1 efrain 460
    {
9 efrain 461
        var appData = appDao.selectOne()
1 efrain 462
        let companyDao = CompanyDao.sharedInstance
463
        let topicDao = TopicDao.sharedInstance
464
        let capsuleDao = CapsuleDao.sharedInstance
465
        let slideDao = SlideDao.sharedInstance
466
        let quizDao = QuizDao.sharedInstance
467
        let questionDao = QuestionDao.sharedInstance
468
        let answerDao = AnswerDao.sharedInstance
469
        let userLogDao = UserLogDao.sharedInstance
470
        let progressDao = ProgressDao.sharedInstance
471
        let userExtendedDao = UserExtendedDao.sharedInstance
8 efrain 472
        let userNotificationDao = UserNotificationDao.sharedInstance
1 efrain 473
 
474
        answerDao.removeAll()
475
        questionDao.removeAll()
476
        quizDao.removeAll()
477
 
478
        slideDao.removeAll()
479
        capsuleDao.removeAll()
480
        topicDao.removeAll()
481
        companyDao.removeAll()
482
 
483
        userLogDao.removeAll()
484
        progressDao.removeAll()
485
        userExtendedDao.removeAll()
8 efrain 486
        userNotificationDao.removeAll()
1 efrain 487
 
8 efrain 488
 
1 efrain 489
        var companyModel : CompanyModel
490
        let now = Date()
491
        let dateFormatter = DateFormatter()
492
        dateFormatter.dateFormat = Constants.FORMAT_DATETIME_SERVICE
493
 
494
 
495
 
8 efrain 496
        if json?["data"]["max_date_changes"] != ""  {
1 efrain 497
            let maxDateChanges = json?["data"]["max_date_changes"].string ?? ""
498
 
11 efrain 499
            //print("maxDateChanges : \(maxDateChanges)")
1 efrain 500
 
501
            appData.maxDateChanges = maxDateChanges
502
        }
503
 
8 efrain 504
        if !refresh  && json?["data"]["device"] != "" {
1 efrain 505
            let deviceAes = json?["data"]["device"]["aes"].string ?? ""
506
            let devicePassword = json?["data"]["device"]["password"].string ?? ""
507
 
11 efrain 508
            //print("deviceAes: \(deviceAes)")
509
           // print("devicePassword: \(devicePassword)")
9 efrain 510
            appData.deviceAes = deviceAes
511
            appData.devicePassword = devicePassword
1 efrain 512
 
513
        }
8 efrain 514
        if json?["data"]["user"] != "" {
1 efrain 515
            let userUuid = json?["data"]["user"]["uuid"].string ?? ""
516
            let userFirstName = json?["data"]["user"]["first_name"].string ?? ""
517
            let userLastName = json?["data"]["user"]["last_name"].string ?? ""
518
            let userEmail = json?["data"]["user"]["email"].string ?? ""
519
            let userImage = json?["data"]["user"]["image"].string ?? ""
520
 
521
 
11 efrain 522
            //print("userUuid : \(userUuid)")
523
            //print("userFirstName : \(userFirstName)")
524
            //print("userLastName: \(userLastName)")
525
            //print("userEmail : \(userEmail)")
526
            //print("userImage : \(userImage)")
1 efrain 527
 
528
 
529
            appData.userUuid = userUuid
9 efrain 530
            appData.userFirstname = userFirstName
531
            appData.userLastname =  userLastName
532
            appData.userEmail = userEmail
533
            appData.userImage = userImage
1 efrain 534
 
535
 
536
 
537
        }
538
 
9 efrain 539
        appData.topicUuidActive = ""
540
        appData.capsuleUuidActive = ""
541
        appData.capsuleUuidOld = ""
542
        appData.slideUuidActive = ""
11 efrain 543
 
544
        print("update query : 3")
9 efrain 545
        appDao.update(model: appData)
1 efrain 546
 
547
 
548
        if json?["data"]["topics"] != "" {
549
            var topicModel : TopicModel
550
            var capsuleModel : CapsuleModel
551
            var slideModel : SlideModel
552
 
553
            for topic in json!["data"]["topics"]
554
            {
555
 
556
                companyModel = CompanyModel()
557
                companyModel.uuid = topic.1["company_uuid"].string ?? ""
558
                companyModel.name = topic.1["company_name"].string ?? ""
559
                companyModel.image = topic.1["company_image"].string ?? ""
560
 
11 efrain 561
               // print("companyUuid : \(companyModel.uuid)")
562
               // print("companyName : \(companyModel.name)")
563
               // print("companyImage : \(companyModel.image)")
1 efrain 564
 
565
                let company = companyDao.selectByUuid(uuid:  companyModel.uuid)
566
                if(company.uuid.isEmpty) {
567
                    companyDao.insert(company: companyModel)
568
                } else {
569
                    companyDao.update(company: companyModel)
570
                }
571
 
572
                topicModel = TopicModel()
573
                topicModel.companyUuid = companyModel.uuid
574
                topicModel.uuid = topic.1["uuid"].string ?? ""
575
                topicModel.name  = topic.1["name"].string ?? ""
576
                topicModel.description = topic.1["description"].string ?? ""
577
                topicModel.image = topic.1["image"].string ?? ""
578
                topicModel.position = Int(topic.1["position"].string ?? "") ?? 1
579
                topicModel.addedOn = topic.1["added_on"].string ?? ""
580
                topicModel.updatedOn = topic.1["updated_on"].string ?? ""
581
 
582
 
11 efrain 583
               // print("topiccompanyUuid: \(topicModel.companyUuid)")
584
                //print("topicUuid: \(topicModel.uuid)")//
585
               // print("topicName: \(topicModel.name)")
586
                //print("topicDescription: \(topicModel.description)")//
587
                //print("topicImage: \(topicModel.image)")
588
                //print("topicPosition: \(topicModel.position)")
1 efrain 589
 
590
 
591
 
592
                // Insert Topics in DB
593
                topicDao.insert(topic: topicModel)
594
 
595
                for capsule in topic.1["capsules"]
596
                {
597
 
598
                    capsuleModel = CapsuleModel()
599
                    capsuleModel.topicUuid = topicModel.uuid
600
                    capsuleModel.uuid = capsule.1["uuid"].string ?? ""
601
                    capsuleModel.name = capsule.1["name"].string ?? ""
602
                    capsuleModel.description = capsule.1["description"].string ?? ""
603
                    capsuleModel.image = capsule.1["image"].string ?? ""
604
                    capsuleModel.position = Int(capsule.1["position"].string ?? "") ?? 1
8 efrain 605
                    capsuleModel.linkComments = capsule.1["link_comments"].string ?? ""
606
                    capsuleModel.linkCommentAdd = capsule.1["link_comment_add"].string ?? ""
607
                    capsuleModel.totalComments = Int(capsule.1["total_comments"].string ?? "") ?? 1
608
                    capsuleModel.totalRating = Decimal(Double(capsule.1["total_rating"].string ?? "") ?? 0)
1 efrain 609
                    capsuleModel.addedOn = capsule.1["added_on"].string ?? ""
610
                    capsuleModel.updatedOn = capsule.1["updated_on"].string ?? ""
611
 
11 efrain 612
                    //print("capsuletopicUuid: \(capsuleModel.topicUuid)")
613
                    //print("capsuleUuid: \(capsuleModel.uuid)")
614
                    //print("capsuleName: \(capsuleModel.name)")
615
                    //print("capsuleDescription: \(capsuleModel.description)")
616
                    //print("capsuleImage: \(capsuleModel.image)")
617
                    //print("capsulePosition: \(capsuleModel.position)")
618
                    //print("capsuleLinkComments: \(capsuleModel.linkComments)")
619
                    //print("capsuleLinkCommentAdd: \(capsuleModel.linkCommentAdd)")
620
                    //print("capsuleTotalComments: \(capsuleModel.totalComments)")
621
                    //print("capsuleTotalRating: \(capsuleModel.totalRating)")
1 efrain 622
 
623
 
624
                    // Insert Capsules in DB
625
                    capsuleDao.insert(capsule: capsuleModel)
626
 
627
                    for slide in capsule.1["slides"]
628
                    {
629
                        slideModel = SlideModel()
630
                        slideModel.topicUuid = capsuleModel.topicUuid
631
                        slideModel.capsuleUuid = capsuleModel.uuid
632
                        slideModel.uuid = slide.1["uuid"].string ?? ""
633
                        slideModel.quizUuid = slide.1["quiz_uuid"].string ?? ""
634
                        slideModel.name = slide.1["name"].string ?? ""
635
                        slideModel.description = slide.1["description"].string ?? ""
636
                        slideModel.position = Int(slide.1["position"].string ?? "") ?? 1
637
                        slideModel.background = slide.1["background"].string ?? ""
638
                        slideModel.file = slide.1["file"].string ?? ""
639
                        slideModel.type = slide.1["type"].string ?? ""
640
                        slideModel.addedOn = slide.1["added_on"].string ?? ""
641
                        slideModel.updatedOn = slide.1["updated_on"].string ?? ""
642
 
643
 
11 efrain 644
                        //print("slidetopicUuid: \(slideModel.topicUuid)")
645
                        //print("slidecapsuleUuid: \(slideModel.capsuleUuid)")
646
                        //print("slideUuid: \(slideModel.uuid)")
647
                        //print("slideQuizUuid: \(slideModel.quizUuid)")
648
                        //print("slideName: \(slideModel.name)")
649
                        //print("slideDescription: \(slideModel.description)")
650
                        //print("slidePosition: \(slideModel.position)")
651
                        //print("slideBackground: \(slideModel.background)")
652
                        //print("slideFile: \(slideModel.file)")
653
                        //print("slideTye: \(slideModel.type)")
1 efrain 654
 
655
                        // Insert Slides in DB
656
                        slideDao.insert(slide: slideModel)
657
                    }
658
                }
659
            }
660
        }
661
 
662
        if json?["data"]["quizzes"] != "" {
663
            var quizModel : QuizModel
664
            var questionModel : QuestionModel
665
            var answerModel  : AnswerModel
666
            for quiz in json!["data"]["quizzes"]
667
            {
668
 
669
 
670
                companyModel = CompanyModel()
671
                companyModel.uuid = quiz.1["company_uuid"].string ?? ""
672
                companyModel.name = quiz.1["company_name"].string ?? ""
673
                companyModel.image =  quiz.1["company_image"].string ?? ""
674
 
11 efrain 675
                //print("companyUuid : \(companyModel.uuid)")
676
                //print("companyName : \(companyModel.name)")
677
                //print("companyImage : \(companyModel.image)")
1 efrain 678
 
679
                let company = companyDao.selectByUuid(uuid:  companyModel.uuid)
680
                if(company.uuid.isEmpty) {
681
                    companyDao.insert(company: companyModel)
682
                } else {
683
                    companyDao.update(company: companyModel)
684
                }
685
 
686
                quizModel = QuizModel()
687
                quizModel.companyUuid = company.uuid
688
                quizModel.uuid = quiz.1["uuid"].string ?? ""
689
                quizModel.name = quiz.1["name"].string ?? ""
690
                quizModel.text = quiz.1["text"].string ?? ""
691
                quizModel.failed = quiz.1["failed"].string ?? ""
692
                quizModel.points = Int(quiz.1["points"].string ?? "") ?? 0
693
                quizModel.minimumPointsRequired = Int(quiz.1["minimum_points_required"].string ?? "") ?? 0
694
                quizModel.maxTime = Int(quiz.1["max_time"].string ?? "") ?? 0
695
                quizModel.addedOn = quiz.1["added_on"].string ?? ""
696
                quizModel.updatedOn = quiz.1["updated_on"].string ?? ""
697
 
698
 
11 efrain 699
                //print("quizcompanyUuid: \(quizModel.companyUuid)")
700
                //print("quizUuid: \(quizModel.uuid)")
701
                //print("quizName: \(quizModel.name)")
702
                //print("quizText: \(quizModel.text)")
703
                //print("quizFailed: \(quizModel.failed)")
704
                //print("quizPoints: \(quizModel.points)")
705
                //print("quizMinimumPointsRequired: \(quizModel.minimumPointsRequired)")
706
                //print("quizMaxTime: \(quizModel.maxTime)")
1 efrain 707
 
708
 
709
                quizDao.insert(quiz: quizModel)
710
 
711
                for question in quiz.1["questions"]
712
                {
713
                    questionModel = QuestionModel()
714
                    questionModel.quizUuid = quizModel.uuid
715
                    questionModel.uuid = question.1["uuid"].string ?? ""
716
                    questionModel.text  = question.1["text"].string ?? ""
717
                    questionModel.type = question.1["type"].string ?? ""
718
                    questionModel.points  = Int(question.1["points"].string ?? "") ?? 0
719
                    questionModel.max_length = Int(question.1["maxlength"].string ?? "") ?? 0
720
                    questionModel.addedOn = question.1["added_on"].string ?? ""
721
                    questionModel.updatedOn = question.1["updated_on"].string ?? ""
722
 
11 efrain 723
                    //print("questionQuizUuid: \(questionModel.quizUuid)")
724
                    //print("questionId: \(questionModel.uuid)")
725
                    //print("questionText: \(questionModel.text)")
726
                    //print("questionType: \(questionModel.type)")
727
                    //print("questionPoints: \(questionModel.points)")
728
                    //print("questionMaxLength: \(questionModel.max_length)")
1 efrain 729
 
730
 
731
                    questionDao.insert(question: questionModel)
732
 
733
                    for answer in question.1["answers"]
734
                    {
735
                        answerModel = AnswerModel()
736
                        answerModel.questionUuid = questionModel.uuid
737
                        answerModel.uuid  = answer.1["uuid"].string ?? ""
738
                        answerModel.text = answer.1["text"].string ?? ""
739
                        answerModel.correct = Int(answer.1["correct"].string ?? "") ?? 0
740
                        answerModel.points = Int(answer.1["points"].string ?? "") ?? 0
741
                        answerModel.addedOn = answer.1["added_on"].string ?? ""
742
                        answerModel.updatedOn = answer.1["updated_on"].string ?? ""
743
 
11 efrain 744
                        //print("answerQuestionUuid: \(answerModel.questionUuid)")
745
                        //print("answerId: \(answerModel.uuid)")
746
                        //print("answerText: \(answerModel.text)")
747
                        //print("answerCorrect: \(answerModel.correct)")
1 efrain 748
 
749
 
750
 
751
                        answerDao.insert(answer: answerModel)
752
 
753
                    }
754
 
755
 
756
                }
757
 
758
            }
759
        }
760
 
761
        if json?["data"]["userlog"] != "" {
762
 
763
            var userLogModel : UserLogModel
764
            for userlog in json!["data"]["userlog"]
765
            {
766
                userLogModel = UserLogModel()
767
                userLogModel.companyUuid = userlog.1["company_uuid"].string ?? ""
768
                userLogModel.userUuid = userlog.1["user_uuid"].string ?? ""
769
                userLogModel.topicUuid = userlog.1["topic_uuid"].string ?? ""
770
                userLogModel.capsuleUuid = userlog.1["capsule_uuid"].string ?? ""
771
                userLogModel.slideUuid = userlog.1["slide_uuid"].string ?? ""
772
                userLogModel.activity = userlog.1["activity"].string ?? ""
773
                userLogModel.addedOn = userlog.1["added_on"].string ?? ""
774
 
775
                userLogDao.insert(record: userLogModel)
776
            }
777
        }
778
 
779
        if json?["data"]["extended"] != "" {
780
 
781
            var userExtendedModel : UserExtendedModel
782
            for userExtended in json!["data"]["extended"]
783
            {
784
                companyModel = CompanyModel()
785
                companyModel.uuid = userExtended.1["company_uuid"].string ?? ""
786
                companyModel.name = userExtended.1["company_name"].string ?? ""
787
                companyModel.image =  userExtended.1["company_image"].string ?? ""
788
 
789
                print("companyUuid : \(companyModel.uuid)")
790
                print("companyName : \(companyModel.name)")
791
                print("companyImage : \(companyModel.image)")
792
 
793
                let company = companyDao.selectByUuid(uuid: companyModel.uuid)
794
                if(company.uuid.isEmpty) {
795
                    companyDao.insert(company: companyModel)
796
                } else {
797
                    companyDao.update(company: companyModel)
798
                }
799
 
800
                for detail in userExtended.1["details"]
801
                {
802
                    userExtendedModel = UserExtendedModel()
803
                    userExtendedModel.companyUuid = companyModel.uuid
804
                    userExtendedModel.uuid = detail.1["uuid"].string ?? ""
805
                    userExtendedModel.label = detail.1["label"].string ?? ""
806
                    userExtendedModel.value = detail.1["value"].string ?? ""
807
 
808
                    userExtendedDao.insert(record: userExtendedModel)
809
                }
810
            }
811
        }
812
 
813
        if json?["data"]["progress"] != "" {
814
 
815
            var progressModel : ProgressModel
816
            for progress in json!["data"]["progress"] {
817
 
818
 
819
                let userUuid = progress.1["user_uuid"].string ?? ""
820
                let topicUuid = progress.1["topic_uuid"].string ?? ""
821
                let capsuleUuid = progress.1["capsule_uuid"].string ?? ""
822
                let slideUuid = progress.1["slide_uuid"].string ?? ""
823
                let type = progress.1["type"].string ?? ""
824
 
825
 
826
                switch type {
827
                    case Constants.PROGRESS_TYPE_TOPIC:
828
                        progressModel = progressDao.selectByTopicUuidAndUserUuid(topicUuid: topicUuid, userUuid: userUuid)
829
                        break
830
 
831
                    case Constants.PROGRESS_TYPE_CAPSULE:
832
                        progressModel = progressDao.selectByCapsuleUuidAndUserUuid(capsuleUuid: capsuleUuid, userUuid: userUuid)
833
                        break
834
 
835
                    case Constants.PROGRESS_TYPE_SLIDE:
836
                        progressModel = progressDao.selectBySlideUuidAndUserUuid(slideUuid: slideUuid, userUuid: userUuid)
837
                        break
838
                    default:
839
                        continue
840
                    }
841
 
842
 
843
                if progressModel.id == 0 {
844
                    progressModel = ProgressModel()
845
                    progressModel.userUuid = userUuid
846
                    progressModel.topicUuid = topicUuid
847
                    progressModel.capsuleUuid = capsuleUuid
848
                    progressModel.slideUuid = slideUuid
849
                    progressModel.type = type
850
                    progressModel.companyUuid = progress.1["company_uuid"].string ?? ""
851
                    progressModel.progress = Double(progress.1["progress"].string ?? "") ?? 0.0
852
                    progressModel.totalSlides = Int(progress.1["total_slides"].string ?? "") ?? 0
853
                    progressModel.viewSlides = Int(progress.1["view_slides"].string ?? "") ?? 0
854
                    progressModel.returning = Int(progress.1["returning"].string ?? "") ?? 0
855
                    progressModel.returningAfterCompleted = Int(progress.1["returning_after_completed"].string ?? "") ?? 0
856
                    progressModel.completed = Int(progress.1["completed"].string ?? "") ?? 0
857
                    progressModel.addedOn = progress.1["added_on"].string ?? ""
858
                    progressModel.updatedOn = progress.1["updated_on"].string ?? ""
859
 
860
                    progressDao.insert(record: progressModel)
861
                }
862
 
863
            }
864
        }
8 efrain 865
 
1 efrain 866
 
867
        return true;
868
    }
869
 
870
 
871
}