// Main loop int mainloop(char *argv){ FILE *database = fopen(argv, "r"); char buffer[128]; Node list = NULL; while(!(feof(database))){ Node newNode = malloc(sizeof(struct node)); readline(buffer, 128, database); newNode->key = malloc(strlen(buffer) + 1); strcpy(newNode->key, buffer); readline(buffer, 128, database); newNode->value = malloc(strlen(buffer) + 1); strcpy(newNode->value, buffer); newNode->next = list; list = newNode; } int choice = -1; while(choice != 0){ puts("Please choose an operation"); puts("1. Query a key"); puts("2. Update an entry"); puts("3. New entry"); puts("4. Remove entry"); puts("5. Print database"); puts("0. Exit database"); printf("? "); scanf("%d", &choice); while(getchar() != '\n'); // Clear stdin /*int found; Node cursor;*/ switch(choice){ case 1: querykey(list); break; case 2: updateentry(list); break; case 3: newentry(list); break; /*case 4: removeentry(list); break; case 5: printdb(list); break;*/ case 0: // Exit puts("¡Adios señor!\n"); break; default: puts("Could not parse choice! Please try again!\n"); } } return 0; }
bool CGantnerTime::isAccess(QMap<QString, QVariant> params, bool, bool ) { QString userId = params["userId"].toString(); QString deviceId = params["deviceId"].toString(); QString date = params["date"].toString(); QString time = params["time"].toString(); QString key = params["key"].toString(); QString code = params["code"].toString(); QString reason = params["reason"].toString() == "" ? "0" : params["reason"].toString(); QString keyId = ""; QString trackingIdToCheck = ""; if(userId == "0") { QSqlQuery querykey = "SELECT ka.id_user FROM hr_user AS u LEFT JOIN hr_keys_attribution AS ka ON ka.id_user=u.id LEFT JOIN hr_keys AS k ON k.id=ka.id_key WHERE k.serialNumber='" + key + "'"; if(querykey.next()) { userId = querykey.value(0).toString(); } else { return false; } } // get the id of the key QSqlQuery querykey("SELECT id FROM hr_keys WHERE serialNumber='" + key + "'"); if(querykey.next()) { keyId = querykey.value(0).toString(); } if(code == "150") { QString BDE1 = params["BDEValue1"].toString(); QString BDE2 = params["BDEValue2"].toString(); QString BDE3 = params["BDEValue3"].toString(); QString BDE4 = params["BDEValue4"].toString(); QString BDE5 = params["BDEValue5"].toString(); QString BDE6 = params["BDEValue6"].toString(); QString BDE7 = params["BDEValue7"].toString(); QString BDE8 = params["BDEValue8"].toString(); QString BDE9 = params["BDEValue9"].toString(); QString BDE10 = params["BDEValue10"].toString(); QString BDE11 = params["BDEValue11"].toString(); QString BDE12 = params["BDEValue12"].toString(); QString BDE13 = params["BDEValue13"].toString(); QString BDE14 = params["BDEValue14"].toString(); QString BDE15 = params["BDEValue15"].toString(); QString BDE16 = params["BDEValue16"].toString(); QString BDE17 = params["BDEValue17"].toString(); QString BDE18 = params["BDEValue18"].toString(); QString BDE19 = params["BDEValue19"].toString(); QString BDE20 = params["BDEValue20"].toString(); QSqlQuery bookquery("INSERT INTO `hr_timux_booking_bde` ( `user_id` , `device_id`, `date`, `time`, `code`, `BDE1`, `BDE2`, `BDE3`, `BDE4`, `BDE5`, `BDE6`, `BDE7`, `BDE8`, `BDE9`, `BDE10`, `BDE11`, `BDE12`, `BDE13`, `BDE14`, `BDE15`, `BDE16`, `BDE17`, `BDE18`, `BDE19`, `BDE20` ) VALUES (" + userId + "," + deviceId + ",'" + date + "','" + time + "','" + code + "','" + BDE1 + "','" + BDE2 + "','" + BDE3 + "','" + BDE4 + "','" + BDE5 + "','" + BDE6 + "','" + BDE7 + "','" + BDE8 + "','" + BDE9 + "','" + BDE10 + "','" + BDE11 + "','" + BDE12 + "','" + BDE13 + "','" + BDE14 + "','" + BDE15 + "','" + BDE16 + "','" + BDE17 + "','" + BDE18 + "','" + BDE19 + "','" + BDE20 + "')" ); setUserPresence(userId, true); } else { // compute the round of the time QStringList timeSplit = time.split(":"); QTime roundBooking ; QTime noRoundBooking(timeSplit.at(0).toInt(),timeSplit.at(1).toInt(),timeSplit.at(2).toInt()) ; QSqlQuery queryTimuxConfig("SELECT bookingRounding FROM hr_timux_config"); if(queryTimuxConfig.next()) { int round = queryTimuxConfig.value(0).toInt(); if(round == 0) { roundBooking = noRoundBooking; if(code == "255" || reason.right(3) == "_IN" || code == "155") // arrive { setUserPresence(userId, true); } else { if(code == "254" || reason.right(4) == "_OUT") // leave { setUserPresence(userId, false); } } } else { if(round == 1) { if(code == "255" || reason.right(3) == "_IN" || code == "155") // arrive { roundBooking.setHMS(noRoundBooking.hour(),noRoundBooking.minute()+1,0); setUserPresence(userId, true); } else { if(code == "254" || reason.right(4) == "_OUT") // leave { roundBooking.setHMS(noRoundBooking.hour(),noRoundBooking.minute(),0); setUserPresence(userId, false); } } } else { int m = noRoundBooking.minute(); while(m % round != 0) { if(code == "255" || reason.right(3) == "_IN" || code == "155") // arrive { m++; } else { if(code == "254" || reason.right(4) == "_OUT") // leave { m--; } } } if(code == "255" || reason.right(3) == "_IN" || code == "155") // arrive { roundBooking.setHMS(noRoundBooking.hour(),m,0); setUserPresence(userId, true); } else { if(code == "254" || reason.right(4) == "_OUT") // leave { roundBooking.setHMS(noRoundBooking.hour(),m,0); setUserPresence(userId, false); } } } } } QString lastTrackingId; // this is an entry BDE if(code == "155") { // be sure the last booking was an exit. Wo have to check this. If not the case, we have to insert an exit booking with the same time than // this booking QSqlQuery lastBooking("SELECT tb.action FROM hr_timux_booking AS tb LEFT JOIN hr_tracking AS t ON tb.tracking_id=t.id WHERE t.id_user="******" ORDER BY t.date DESC, t.time DESC, tb.tracking_id DESC LIMIT 0,1"); if(lastBooking.next()) { if(lastBooking.value(0) == "255") { // last booking was an already an entry, we have to insert an exit QSqlQuery query = "INSERT INTO `hr_tracking` ( `id` , `id_user` , `id_key` , `time` , `date` , `id_entry` , `is_access` , `id_comment`, `key`, `extData` ) VALUES ('', '" + userId + "','" + keyId + "', '" + time +"', '" + date +"', '" + deviceId + "', '" + "1" + "', '" + "0" + "', '" + key + "', '" + "hr_timux_booking" "')"; QSqlQuery lastTracking = "SELECT id FROM `hr_tracking` WHERE id_entry=" + deviceId + " AND id_user="******" ORDER BY id DESC LIMIT 0,1"; lastTracking.next(); QString last = lastTracking.value(0).toString(); QSqlQuery bookquery("INSERT INTO `hr_timux_booking` ( `tracking_id` , `action` , `actionReason`, `roundBooking` ) VALUES (" + last + "," + "254" + ",'" + reason + "','" + roundBooking.toString("hh:mm:ss") + "')" ); } } QSqlQuery query("INSERT INTO `hr_tracking` ( `id` , `id_user` , `id_key` , `time` , `date` , `id_entry` , `is_access` , `id_comment`, `key`, `extData` ) VALUES ('', '" + userId + "','" + keyId + "', '" + time +"', '" + date +"', '" + deviceId + "', '" + "1" + "', '" + "0" + "', '" + key + "', '" + "hr_timux_booking" "')" ); QSqlQuery lastTracking = "SELECT id FROM `hr_tracking` WHERE id_entry=" + deviceId + " AND id_user="******" ORDER BY id DESC LIMIT 0,1"; lastTracking.next(); lastTrackingId = lastTracking.value(0).toString(); QString BDE1 = params["BDEValue1"].toString(); QString BDE2 = params["BDEValue2"].toString(); QString BDE3 = params["BDEValue3"].toString(); QString BDE4 = params["BDEValue4"].toString(); QString BDE5 = params["BDEValue5"].toString(); QString BDE6 = params["BDEValue6"].toString(); QString BDE7 = params["BDEValue7"].toString(); QString BDE8 = params["BDEValue8"].toString(); QString BDE9 = params["BDEValue9"].toString(); QString BDE10 = params["BDEValue10"].toString(); QString BDE11 = params["BDEValue11"].toString(); QString BDE12 = params["BDEValue12"].toString(); QString BDE13 = params["BDEValue13"].toString(); QString BDE14 = params["BDEValue14"].toString(); QString BDE15 = params["BDEValue15"].toString(); QString BDE16 = params["BDEValue16"].toString(); QString BDE17 = params["BDEValue17"].toString(); QString BDE18 = params["BDEValue18"].toString(); QString BDE19 = params["BDEValue19"].toString(); QString BDE20 = params["BDEValue20"].toString(); QSqlQuery bookquery("INSERT INTO `hr_timux_booking_bde` ( `tracking_id` , `user_id` , `device_id`, `date`, `time`, `code`, `BDE1`, `BDE2`, `BDE3`, `BDE4`, `BDE5`, `BDE6`, `BDE7`, `BDE8`, `BDE9`, `BDE10`, `BDE11`, `BDE12`, `BDE13`, `BDE14`, `BDE15`, `BDE16`, `BDE17`, `BDE18`, `BDE19`, `BDE20` ) VALUES (" + lastTrackingId + "," + userId + "," + deviceId + ",'" + date + "','" + roundBooking.toString("hh:mm:ss") + "','" + code + "','" + BDE1 + "','" + BDE2 + "','" + BDE3 + "','" + BDE4 + "','" + BDE5 + "','" + BDE6 + "','" + BDE7 + "','" + BDE8 + "','" + BDE9 + "','" + BDE10 + "','" + BDE11 + "','" + BDE12 + "','" + BDE13 + "','" + BDE14 + "','" + BDE15 + "','" + BDE16 + "','" + BDE17 + "','" + BDE18 + "','" + BDE19 + "','" + BDE20 + "')" ); code = "255"; //check the booking if it is a valid input trackingIdToCheck = lastTrackingId; } else { QSqlQuery query("INSERT INTO `hr_tracking` ( `id` , `id_user` , `id_key` , `time` , `date` , `id_entry` , `is_access` , `id_comment`, `key`, `extData` ) VALUES ('', '" + userId + "','" + keyId + "', '" + time +"', '" + date +"', '" + deviceId + "', '" + "1" + "', '" + "0" + "', '" + key + "', '" + "hr_timux_booking" "')" ); QSqlQuery lastTracking = "SELECT id FROM `hr_tracking` WHERE id_entry=" + deviceId + " AND id_user="******" ORDER BY id DESC LIMIT 0,1"; lastTracking.next(); lastTrackingId = lastTracking.value(0).toString(); } QSqlQuery bookquery("INSERT INTO `hr_timux_booking` ( `tracking_id` , `action` , `actionReason`, `roundBooking` ) VALUES (" + lastTrackingId + "," + code + ",'" + reason + "','" + roundBooking.toString("hh:mm:ss") + "')" ); if(trackingIdToCheck != "") { QtSoapMessage message; message.setMethod("callServiceComponent"); QtSoapArray *array = new QtSoapArray(QtSoapQName("params")); array->insert(0, new QtSoapSimpleType(QtSoapQName("component"),"timuxadmin")); array->insert(1, new QtSoapSimpleType(QtSoapQName("class"),"timuxAdminDevice")); array->insert(2, new QtSoapSimpleType(QtSoapQName("function"),"checkInputBDE")); array->insert(3, new QtSoapSimpleType(QtSoapQName("trackingId"),lastTrackingId)); message.addMethodArgument(array); soapClientInputBDE.submitRequest(message, saas_path+"/index.php?soap=soapComponent&password="******"&username="******"Check the input BDE"; } checkBalances(userId.toInt()); } return true; }