Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 15 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  ProgressDao.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 2/21/22.
6
//
7
 
8
import UIKit
9
import SQLite3
10
 
11
class ProgressDao {
12
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
13
    private var database = Database.sharedInstance
14
 
15
    static let sharedInstance: ProgressDao = {
16
           let instance = ProgressDao()
17
 
18
           // setup code
19
           return instance
20
    }()
21
 
22
    func selectByTopicUuid(topicUuid: String)-> ProgressModel {
23
        let db = database.open()
24
        //var records = [ProgressModel]()
25
        var model = ProgressModel()
26
        var query = "SELECT "
27
        query = query +  Constants.TABLE_PROGRESS_FIELD_ID + " , "
28
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPANY_UUID + " , "
29
        query = query +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " , "
30
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " , "
31
        query = query +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " , "
32
        query = query +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " , "
33
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + " , "
34
        query = query +  Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + " , "
35
        query = query +  Constants.TABLE_PROGRESS_FIELD_PROGRESS + " , "
36
        query = query +  Constants.TABLE_PROGRESS_FIELD_TYPE + " , "
37
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING + " , "
38
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " , "
39
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + " , "
40
        query = query +  Constants.TABLE_PROGRESS_FIELD_ADDED_ON + " , "
41
        query = query +  Constants.TABLE_PROGRESS_FIELD_UPDATED_ON
42
        query = query +  " FROM " +  Constants.TABLE_PROGRESS
43
        query = query +  " WHERE " +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " = '\(topicUuid)'  "
44
        query = query +  " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + " = '\( Constants.PROGRESS_TYPE_TOPIC)' LIMIT 1 ;"
45
 
46
        var statement : OpaquePointer? = nil
47
 
48
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
49
            if (sqlite3_step(statement) == SQLITE_ROW) {
50
                model.id = Int(sqlite3_column_int(statement, 0))
51
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
52
                model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
53
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
54
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
55
                model.slideUuid = String(describing: String(cString: sqlite3_column_text(statement,5)))
56
                model.totalSlides = Int(sqlite3_column_int(statement, 6))
57
                model.viewSlides = Int(sqlite3_column_int(statement, 7))
58
                model.progress = Double(sqlite3_column_double(statement, 8))
59
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 9)))
60
                model.returning = Int(sqlite3_column_int(statement, 10))
61
                model.returningAfterCompleted = Int(sqlite3_column_int(statement, 11))
62
                model.completed = Int(sqlite3_column_int(statement, 12))
63
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 13)))
64
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 14)))
65
            }
66
        } else {
67
            database.printError()
68
        }
69
        sqlite3_finalize(statement)
70
        return model
71
    }
72
 
73
 
74
    func selectByTopicUuidAndUserUuid(topicUuid: String, userUuid : String)-> ProgressModel {
75
        let db = database.open()
76
        //var records = [ProgressModel]()
77
        var model = ProgressModel()
78
        var query = "SELECT "
79
        query = query +  Constants.TABLE_PROGRESS_FIELD_ID + " , "
80
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPANY_UUID + " , "
81
        query = query +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " , "
82
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " , "
83
        query = query +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " , "
84
        query = query +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " , "
85
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + " , "
86
        query = query +  Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + " , "
87
        query = query +  Constants.TABLE_PROGRESS_FIELD_PROGRESS + " , "
88
        query = query +  Constants.TABLE_PROGRESS_FIELD_TYPE + " , "
89
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING + " , "
90
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " , "
91
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + " , "
92
        query = query +  Constants.TABLE_PROGRESS_FIELD_ADDED_ON + " , "
93
        query = query +  Constants.TABLE_PROGRESS_FIELD_UPDATED_ON
94
        query = query +  " FROM " +  Constants.TABLE_PROGRESS
95
        query = query +  " WHERE " +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " = '\(topicUuid)'  "
96
        query = query +  " AND " +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " = '\(userUuid)'  "
97
        query = query +  " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + " = '\( Constants.PROGRESS_TYPE_TOPIC)' LIMIT 1 ;"
98
 
99
        var statement : OpaquePointer? = nil
100
 
101
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
102
            if (sqlite3_step(statement) == SQLITE_ROW) {
103
                model.id = Int(sqlite3_column_int(statement, 0))
104
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
105
                model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
106
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
107
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
108
                model.slideUuid = String(describing: String(cString: sqlite3_column_text(statement,5)))
109
                model.totalSlides = Int(sqlite3_column_int(statement, 6))
110
                model.viewSlides = Int(sqlite3_column_int(statement, 7))
111
                model.progress = Double(sqlite3_column_double(statement, 8))
112
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 9)))
113
                model.returning = Int(sqlite3_column_int(statement, 10))
114
                model.returningAfterCompleted = Int(sqlite3_column_int(statement, 11))
115
                model.completed = Int(sqlite3_column_int(statement, 12))
116
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 13)))
117
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 14)))
118
            }
119
        } else {
120
            database.printError()
121
        }
122
        sqlite3_finalize(statement)
123
        return model
124
    }
125
 
126
    func selectByCapsuleUuid(capsuleUuid: String)-> ProgressModel {
127
        let db = database.open()
128
        //var records = [ProgressModel]()
129
        var model = ProgressModel()
130
        var query = "SELECT "
131
        query = query +  Constants.TABLE_PROGRESS_FIELD_ID + " , "
132
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPANY_UUID + " , "
133
        query = query +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " , "
134
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " , "
135
        query = query +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " , "
136
        query = query +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " , "
137
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + " , "
138
        query = query +  Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + " , "
139
        query = query +  Constants.TABLE_PROGRESS_FIELD_PROGRESS + " , "
140
        query = query +  Constants.TABLE_PROGRESS_FIELD_TYPE + " , "
141
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING + " , "
142
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " , "
143
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + " , "
144
        query = query +  Constants.TABLE_PROGRESS_FIELD_ADDED_ON + " , "
145
        query = query +  Constants.TABLE_PROGRESS_FIELD_UPDATED_ON
146
        query = query +  " FROM " +  Constants.TABLE_PROGRESS
147
        query = query +  " WHERE " +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " = '\(capsuleUuid)'  "
148
        query = query +  " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + " = '\( Constants.PROGRESS_TYPE_CAPSULE)' LIMIT 1 ;"
149
 
150
 
151
        var statement : OpaquePointer? = nil
152
 
153
 
154
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
155
            if (sqlite3_step(statement) == SQLITE_ROW) {
156
                model.id = Int(sqlite3_column_int(statement, 0))
157
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
158
                model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
159
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
160
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
161
                model.slideUuid = String(describing: String(cString: sqlite3_column_text(statement,5)))
162
                model.totalSlides = Int(sqlite3_column_int(statement, 6))
163
                model.viewSlides = Int(sqlite3_column_int(statement, 7))
164
                model.progress = Double(sqlite3_column_double(statement, 8))
165
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 9)))
166
                model.returning = Int(sqlite3_column_int(statement, 10))
167
                model.returningAfterCompleted = Int(sqlite3_column_int(statement, 11))
168
                model.completed = Int(sqlite3_column_int(statement, 12))
169
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 13)))
170
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 14)))
171
 
172
            }
173
        } else {
174
            database.printError()
175
        }
176
        sqlite3_finalize(statement)
177
        return model
178
 
179
    }
180
 
181
    func selectByCapsuleUuidAndUserUuid(capsuleUuid: String, userUuid : String)-> ProgressModel {
182
        let db = database.open()
183
        //var records = [ProgressModel]()
184
        var model = ProgressModel()
185
        var query  = "SELECT "
186
        query = query +  Constants.TABLE_PROGRESS_FIELD_ID + " , "
187
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPANY_UUID + " , "
188
        query = query +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " , "
189
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " , "
190
        query = query +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " , "
191
        query = query +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " , "
192
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + " , "
193
        query = query +  Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + " , "
194
        query = query +  Constants.TABLE_PROGRESS_FIELD_PROGRESS + " , "
195
        query = query +  Constants.TABLE_PROGRESS_FIELD_TYPE + " , "
196
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING + " , "
197
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " , "
198
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + " , "
199
        query = query +  Constants.TABLE_PROGRESS_FIELD_ADDED_ON + " , "
200
        query = query +  Constants.TABLE_PROGRESS_FIELD_UPDATED_ON
201
        query = query +  " FROM " +  Constants.TABLE_PROGRESS
202
        query = query +  " WHERE " +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " = '\(capsuleUuid)'  "
203
        query = query +  " AND " + Constants.TABLE_PROGRESS_FIELD_USER_UUID + " = '\(userUuid)' "
204
        query = query +  " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + " = '\( Constants.PROGRESS_TYPE_CAPSULE)' LIMIT 1 ;"
205
 
206
        var statement : OpaquePointer? = nil
207
 
208
 
209
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
210
            if (sqlite3_step(statement) == SQLITE_ROW) {
211
                model.id = Int(sqlite3_column_int(statement, 0))
212
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
213
                model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
214
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
215
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
216
                model.slideUuid = String(describing: String(cString: sqlite3_column_text(statement,5)))
217
                model.totalSlides = Int(sqlite3_column_int(statement, 6))
218
                model.viewSlides = Int(sqlite3_column_int(statement, 7))
219
                model.progress = Double(sqlite3_column_double(statement, 8))
220
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 9)))
221
                model.returning = Int(sqlite3_column_int(statement, 10))
222
                model.returningAfterCompleted = Int(sqlite3_column_int(statement, 11))
223
                model.completed = Int(sqlite3_column_int(statement, 12))
224
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 13)))
225
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 14)))
226
 
227
            }
228
        } else {
229
            database.printError()
230
        }
231
        sqlite3_finalize(statement)
232
        return model
233
 
234
    }
235
 
236
    func selectBySlideUuid(slideUuid: String)-> ProgressModel {
237
        let db = database.open()
238
        //var records = [ProgressModel]()
239
        var model = ProgressModel()
240
        var query = "SELECT "
241
        query = query +  Constants.TABLE_PROGRESS_FIELD_ID + " , "
242
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPANY_UUID + " , "
243
        query = query +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " , "
244
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " , "
245
        query = query +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " , "
246
        query = query +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " , "
247
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + " , "
248
        query = query +  Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + " , "
249
        query = query +  Constants.TABLE_PROGRESS_FIELD_PROGRESS + " , "
250
        query = query +  Constants.TABLE_PROGRESS_FIELD_TYPE + " , "
251
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING + " , "
252
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " , "
253
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + " , "
254
        query = query +  Constants.TABLE_PROGRESS_FIELD_ADDED_ON + " , "
255
        query = query +  Constants.TABLE_PROGRESS_FIELD_UPDATED_ON
256
        query = query + " FROM " +  Constants.TABLE_PROGRESS
257
        query = query  + " WHERE " +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " = '\(slideUuid)'  "
258
        query = query  + " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + " = '\( Constants.PROGRESS_TYPE_SLIDE)' LIMIT 1 ;"
259
 
260
        var statement : OpaquePointer? = nil
261
 
262
 
263
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
264
            if (sqlite3_step(statement) == SQLITE_ROW) {
265
                model.id = Int(sqlite3_column_int(statement, 0))
266
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
267
                model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
268
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
269
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
270
                model.slideUuid = String(describing: String(cString: sqlite3_column_text(statement,5)))
271
                model.totalSlides = Int(sqlite3_column_int(statement, 6))
272
                model.viewSlides = Int(sqlite3_column_int(statement, 7))
273
                model.progress = Double(sqlite3_column_double(statement, 8))
274
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 9)))
275
                model.returning = Int(sqlite3_column_int(statement, 10))
276
                model.returningAfterCompleted = Int(sqlite3_column_int(statement, 11))
277
                model.completed = Int(sqlite3_column_int(statement, 12))
278
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 13)))
279
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 14)))
280
            }
281
        } else {
282
            database.printError()
283
        }
284
        sqlite3_finalize(statement)
285
        return model
286
    }
287
 
288
 
289
    func selectBySlideUuidAndUserUuid(slideUuid: String, userUuid : String)-> ProgressModel {
290
        let db = database.open()
291
        //var records = [ProgressModel]()
292
        var model = ProgressModel()
293
        var query = "SELECT "
294
        query = query +  Constants.TABLE_PROGRESS_FIELD_ID + " , "
295
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPANY_UUID + " , "
296
        query = query +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " , "
297
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " , "
298
        query = query +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " , "
299
        query = query +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " , "
300
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + " , "
301
        query = query +  Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + " , "
302
        query = query +  Constants.TABLE_PROGRESS_FIELD_PROGRESS + " , "
303
        query = query +  Constants.TABLE_PROGRESS_FIELD_TYPE + " , "
304
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING + " , "
305
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " , "
306
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + " , "
307
        query = query +  Constants.TABLE_PROGRESS_FIELD_ADDED_ON + " , "
308
        query = query +  Constants.TABLE_PROGRESS_FIELD_UPDATED_ON
309
        query = query + " FROM " +  Constants.TABLE_PROGRESS
310
        query = query  + " WHERE " +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + " = '\(slideUuid)'  "
311
        query = query  + " AND " +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " = '\(userUuid)'  "
312
        query = query  + " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + " = '\( Constants.PROGRESS_TYPE_SLIDE)' LIMIT 1 ;"
313
 
314
        var statement : OpaquePointer? = nil
315
 
316
 
317
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
318
            if (sqlite3_step(statement) == SQLITE_ROW) {
319
                model.id = Int(sqlite3_column_int(statement, 0))
320
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
321
                model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
322
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
323
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
324
                model.slideUuid = String(describing: String(cString: sqlite3_column_text(statement,5)))
325
                model.totalSlides = Int(sqlite3_column_int(statement, 6))
326
                model.viewSlides = Int(sqlite3_column_int(statement, 7))
327
                model.progress = Double(sqlite3_column_double(statement, 8))
328
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 9)))
329
                model.returning = Int(sqlite3_column_int(statement, 10))
330
                model.returningAfterCompleted = Int(sqlite3_column_int(statement, 11))
331
                model.completed = Int(sqlite3_column_int(statement, 12))
332
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 13)))
333
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 14)))
334
            }
335
        } else {
336
            database.printError()
337
        }
338
        sqlite3_finalize(statement)
339
        return model
340
    }
341
 
342
    func getCountSlideCompletedByCapsuleUuidAndUserUuid(capsuleUuid: String, userUuid: String) -> Int {
343
        let db = database.open()
344
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_PROGRESS +
345
        " WHERE " +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + " = '\(capsuleUuid)' "  +
346
        " AND " +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + "= '\(userUuid)'" +
347
        " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + "= '\(Constants.PROGRESS_TYPE_SLIDE)'" +
348
        " AND " +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + "  =  1 "
349
 
350
        var statement : OpaquePointer? = nil
351
        var count = 0;
352
 
353
 
354
 
355
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
356
            if(sqlite3_step(statement) == SQLITE_ROW){
357
                count = Int(sqlite3_column_int(statement, 0))
358
 
359
            }
360
        } else {
361
            database.printError()
362
        }
363
        sqlite3_finalize(statement)
364
        return count;
365
    }
366
 
367
    func getCountSlideCompletedByTopicUuidAndUserUuid(topicUuid: String, userUuid: String) -> Int {
368
        let db = database.open()
369
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_PROGRESS +
370
        " WHERE " +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " = '\(topicUuid)' "  +
371
        " AND " +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + "= '\(userUuid)'" +
372
        " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + "= '\(Constants.PROGRESS_TYPE_SLIDE)'" +
373
        " AND " +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + "  =  1 "
374
 
375
        var statement : OpaquePointer? = nil
376
        var count = 0;
377
 
378
 
379
 
380
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
381
            if(sqlite3_step(statement) == SQLITE_ROW){
382
                count = Int(sqlite3_column_int(statement, 0))
383
 
384
            }
385
        } else {
386
            database.printError()
387
        }
388
        sqlite3_finalize(statement)
389
        return count;
390
    }
391
 
392
    func getCountCapsulesCompletedByUserUuid(userUuid : String) -> Int {
393
        let db = database.open()
394
        var count = 0
395
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_PROGRESS +
396
            " WHERE " +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " = '\(userUuid)' " +
397
            " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + "= '\( Constants.PROGRESS_TYPE_CAPSULE)' " +
398
            " AND " +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + "= 1 LIMIT 1"
399
 
400
        var statement : OpaquePointer? = nil
401
 
402
 
403
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
404
            if(sqlite3_step(statement) == SQLITE_ROW){
405
                count = Int(sqlite3_column_int(statement, 0))
406
                //print("\(count)")
407
            }
408
        } else {
409
            database.printError()
410
        }
411
        sqlite3_finalize(statement)
412
        return count
413
    }
414
 
415
    func getCountCapsulesIncompletedByUserUuid(userUuid : String) -> Int {
416
        let db = database.open()
417
        var count = 0
418
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_PROGRESS +
419
            " WHERE " +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " = '\(userUuid)' " +
420
            " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + "= '\( Constants.PROGRESS_TYPE_CAPSULE)' " +
421
            " AND " +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + "= 0 LIMIT 1"
422
 
423
        var statement : OpaquePointer? = nil
424
 
425
 
426
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
427
            if(sqlite3_step(statement) == SQLITE_ROW){
428
                count = Int(sqlite3_column_int(statement, 0))
429
                //print("\(count)")
430
            }
431
        } else {
432
            database.printError()
433
        }
434
        sqlite3_finalize(statement)
435
        return count
436
    }
437
 
438
    func getCountCapsulesCompletedByTopicUuid(topicUuid : String) -> Int {
439
        let db = database.open()
440
        var count = 0
441
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_PROGRESS +
442
            " WHERE " +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " = '\(topicUuid)' " +
443
            " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + "= '\( Constants.PROGRESS_TYPE_CAPSULE)' " +
444
            " AND " +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + "= 1 LIMIT 1"
445
 
446
        var statement : OpaquePointer? = nil
447
 
448
 
449
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
450
            if(sqlite3_step(statement) == SQLITE_ROW){
451
                count = Int(sqlite3_column_int(statement, 0))
452
                //print("\(count)")
453
            }
454
        } else {
455
            database.printError()
456
        }
457
        sqlite3_finalize(statement)
458
        return count
459
    }
460
 
461
    func getCountCapsulesCompletedWithReturningByUserUuid(userUuid : String) -> Int {
462
        let db = database.open()
463
        var count = 0
464
        let query = "SELECT SUM(" +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + ") AS total FROM " +  Constants.TABLE_PROGRESS
465
            + " WHERE " +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " = '\(userUuid)' " +
466
            " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + "= '\( Constants.PROGRESS_TYPE_CAPSULE)' " +
467
            " AND " +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + "= 1 " +
468
            " AND " +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " > 0 LIMIT 1"
469
 
470
        var statement : OpaquePointer? = nil
471
 
472
 
473
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
474
            if(sqlite3_step(statement) == SQLITE_ROW){
475
                count = Int(sqlite3_column_int(statement, 0))
476
                //print("\(count)")
477
            }
478
        } else {
479
            database.printError()
480
        }
481
        sqlite3_finalize(statement)
482
        return count
483
    }
484
 
485
    func getCountCapsulesCompletedWithoutReturningByUserUuid(userUuid : String) -> Int {
486
        let db = database.open()
487
        var count = 0
488
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_PROGRESS + " WHERE "
489
            +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + " = '\(userUuid)' " +
490
            " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + "= '\( Constants.PROGRESS_TYPE_CAPSULE)' " +
491
            " AND " +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + "= 1 " +
492
            " AND " +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " = 0 LIMIT 1"
493
 
494
        var statement : OpaquePointer? = nil
495
 
496
 
497
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
498
            if(sqlite3_step(statement) == SQLITE_ROW){
499
                count = Int(sqlite3_column_int(statement, 0))
500
                //print("\(count)")
501
            }
502
        } else {
503
            database.printError()
504
        }
505
        sqlite3_finalize(statement)
506
        return count
507
    }
508
 
509
    func getCountCapsulesCompletedWithReturningByTopicUuid(topicUuid : String) -> Int {
510
        let db = database.open()
511
        var count = 0
512
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_PROGRESS
513
            + " WHERE " +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " = '\(topicUuid)' " +
514
            " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + "= '\( Constants.PROGRESS_TYPE_CAPSULE)' " +
515
            " AND " +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + "= 1 " +
516
            " AND " +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " > 0 LIMIT 1"
517
 
518
        var statement : OpaquePointer? = nil
519
 
520
 
521
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
522
            if(sqlite3_step(statement) == SQLITE_ROW){
523
                count = Int(sqlite3_column_int(statement, 0))
524
                //print("\(count)")
525
            }
526
        } else {
527
            database.printError()
528
        }
529
        sqlite3_finalize(statement)
530
        return count
531
    }
532
 
533
    func getCountCapsulesCompletedWithoutReturningByTopicUuid(topicUuid : String) -> Int {
534
        let db = database.open()
535
        var count = 0
536
        let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_PROGRESS + " WHERE "
537
            +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID + " = '\(topicUuid)' " +
538
            " AND " +  Constants.TABLE_PROGRESS_FIELD_TYPE + "= '\( Constants.PROGRESS_TYPE_CAPSULE)' " +
539
            " AND " +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + "= 1 " +
540
            " AND " +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " = 0 LIMIT 1"
541
 
542
        var statement : OpaquePointer? = nil
543
 
544
 
545
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
546
            if(sqlite3_step(statement) == SQLITE_ROW){
547
                count = Int(sqlite3_column_int(statement, 0))
548
                //print("\(count)")
549
            }
550
        } else {
551
            database.printError()
552
        }
553
        sqlite3_finalize(statement)
554
        return count
555
    }
556
 
557
 
558
    func insert( record : ProgressModel) {
559
        let db = database.open()
560
        var query = "INSERT INTO " +  Constants.TABLE_PROGRESS + " ( "
561
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPANY_UUID + ", "
562
        query = query +  Constants.TABLE_PROGRESS_FIELD_USER_UUID + ", "
563
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOPIC_UUID  + ", "
564
        query = query +  Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID + ", "
565
        query = query +  Constants.TABLE_PROGRESS_FIELD_SLIDE_UUID + ", "
566
        query = query +  Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + ", "
567
        query = query +  Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + ", "
568
        query = query +  Constants.TABLE_PROGRESS_FIELD_PROGRESS + ", "
569
        query = query +  Constants.TABLE_PROGRESS_FIELD_TYPE + ", "
570
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING + ", "
571
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + ", "
572
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + " , "
573
        query = query +  Constants.TABLE_PROGRESS_FIELD_ADDED_ON + ", "
574
        query = query +  Constants.TABLE_PROGRESS_FIELD_UPDATED_ON + " )"
575
 
576
        query = query + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
577
        var statement : OpaquePointer?
578
 
579
 
580
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK {
581
 
582
            sqlite3_bind_text(statement, 1, record.companyUuid, -1, SQLITE_TRANSIENT)
583
            sqlite3_bind_text(statement, 2, record.userUuid, -1, SQLITE_TRANSIENT)
584
            sqlite3_bind_text(statement, 3, record.topicUuid, -1, SQLITE_TRANSIENT)
585
            sqlite3_bind_text(statement, 4, record.capsuleUuid, -1, SQLITE_TRANSIENT)
586
            sqlite3_bind_text(statement, 5, record.slideUuid, -1, SQLITE_TRANSIENT)
587
            sqlite3_bind_int(statement, 6, Int32(record.totalSlides))
588
            sqlite3_bind_int(statement, 7, Int32(record.viewSlides))
589
            sqlite3_bind_double(statement, 8, Double(record.progress))
590
            sqlite3_bind_text(statement, 9, record.type , -1, SQLITE_TRANSIENT)
591
            sqlite3_bind_int(statement, 10, Int32(record.returning))
592
            sqlite3_bind_int(statement, 11, Int32(record.returningAfterCompleted))
593
            sqlite3_bind_int(statement, 12, Int32(record.completed))
594
            sqlite3_bind_text(statement, 13, record.addedOn, -1, SQLITE_TRANSIENT)
595
            sqlite3_bind_text(statement, 14, record.updatedOn, -1, SQLITE_TRANSIENT)
596
 
597
           if sqlite3_step(statement) != SQLITE_DONE {
598
                print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_PROGRESS)")
599
                database.printError()
600
 
601
           } else {
602
             print("insertamos un registro de progreso")
603
           }
604
        } else {
605
            print("No se pudo preparar insertar un registro en la tabla: \(Constants.TABLE_PROGRESS)")
606
            database.printError()
607
        }
608
 
609
        sqlite3_finalize(statement)
610
    }
611
 
612
    func update(record : ProgressModel) {
613
        let db = database.open()
614
        var query = "UPDATE " +  Constants.TABLE_PROGRESS
615
        query = query + " SET " +  Constants.TABLE_PROGRESS_FIELD_TOTAL_SLIDES + " = '\(record.totalSlides)', "
616
        query = query +  Constants.TABLE_PROGRESS_FIELD_VIEW_SLIDES + " = '\(record.viewSlides)', "
617
        query = query +  Constants.TABLE_PROGRESS_FIELD_PROGRESS + " = '\(record.progress)', "
618
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING + " = '\(record.returning)', "
619
        query = query +  Constants.TABLE_PROGRESS_FIELD_RETURNING_AFTER_COMPLETED + " = '\(record.returningAfterCompleted)', "
620
        query = query +  Constants.TABLE_PROGRESS_FIELD_COMPLETED + " = '\(record.completed)' "
621
        query = query + " WHERE " +  Constants.TABLE_PROGRESS_FIELD_ID + " = \(record.id);"
622
 
623
        //print("capsuleUpdate : \(query)")
624
 
625
        var statement : OpaquePointer? = nil
626
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
627
            if sqlite3_step(statement) != SQLITE_DONE {
628
                print("No se pudo actualizar un registro en la tabla: \(Constants.TABLE_PROGRESS)")
629
                database.printError()
630
            }
631
        } else {
632
            print("Fallo la preparación de actualizar un registro en la tabla: \(Constants.TABLE_PROGRESS)")
633
            database.printError()
634
        }
635
        sqlite3_finalize(statement)
636
    }
637
 
638
    func remove(id: Int) {
639
        let db = database.open()
640
        let query = "DELETE FROM " +  Constants.TABLE_PROGRESS + " WHERE " +  Constants.TABLE_PROGRESS_FIELD_ID + " = " + "\(id) ;"
641
        var statement : OpaquePointer? = nil
642
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
643
            if sqlite3_step(statement) != SQLITE_DONE {
644
                print("No se pudo borrar un registro con el id: \(id) en la tabla: \(Constants.TABLE_PROGRESS)")
645
                database.printError()
646
            }
647
        } else {
648
            print("Fallo la preparación de borrar un registro con el id: \(id) en la tabla: \(Constants.TABLE_PROGRESS)")
649
            database.printError()
650
        }
651
        sqlite3_finalize(statement)
652
    }
653
 
654
    func removeAll() {
655
        let db = database.open()
656
        let query = "DELETE FROM " +  Constants.TABLE_PROGRESS + ";"
657
        var statement : OpaquePointer? = nil
658
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
659
            if sqlite3_step(statement) != SQLITE_DONE {
660
                print("No se pudo borrar todos los registros en la tabla: \(Constants.TABLE_PROGRESS)")
661
                database.printError()
662
            }
663
        } else {
664
            print("Fallo la preparación de borrar todos los registros en la tabla: \(Constants.TABLE_PROGRESS)")
665
            database.printError()
666
        }
667
        sqlite3_finalize(statement)
668
    }
669
 
670
    func removeAllUserUuidNotEqual(userUuid : String)
671
    {
672
        let db = database.open()
673
        let query = "DELETE FROM " +  Constants.TABLE_PROGRESS +
674
            " WHERE " + Constants.TABLE_PROGRESS_FIELD_USER_UUID + " <> '\(userUuid)' ;"
675
        var statement : OpaquePointer? = nil
676
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
677
            if sqlite3_step(statement) != SQLITE_DONE {
678
                print("No se pudo borrar todos los registros en la tabla: \(Constants.TABLE_PROGRESS)" +
679
                " de los usuarios diferentes de : \(userUuid)" )
680
                database.printError()
681
            }
682
        } else {
683
            print("Fallo la preparación de borrar todos los registros en la tabla: \(Constants.TABLE_PROGRESS) de los usuarios diferentes de : \(userUuid) ")
684
            database.printError()
685
        }
686
        sqlite3_finalize(statement)
687
    }
688
 
689
}