Example #1
0
File: db1.c Project: Hullberg/kod
  // 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;
}