Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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