# -*- coding: iso-8859-1 -*-

# Generarerar utifrån en OLA MySQL-databas en CSV-fil som kan användas
# av PocketSI för automatisk förvarning. Ändra parametrarna nedan till
# de korrekta för att ansluta till MySQL-databasen.

# Datat i CSV-filen ska vara kodad i latin1/iso-8859-1 för PocketSI
# ska hantera den korrekt. Den bör få korrekt teckenkodning
# automatiskt, men om PocketSI inte verkar lyckas läsa innehållet kan
# man dubbelkolla att filen verkligen är i rätt teckenkodning.

# Joakim Tosteberg <joakim@lok.se>
# Version 1.0 2011-08-14

mysql_host = "10.130.0.22"
mysql_user = "root"
mysql_pw = "somepass"
mysql_db = "h43"

filename = "startlist.csv"

import MySQLdb

def decode_field(field):
    if field == None:
        return ''
    if isinstance(field, basestring):
        return field.decode('utf-8').encode('iso-8859-1')
    return field

db = MySQLdb.connect(host=mysql_host, user=mysql_user, passwd=mysql_pw, db=mysql_db, use_unicode=False, charset="utf8")
#print db.charset
c=db.cursor()

f = open(filename,"w");
f.write("Startnr;Namn;Block;ut;Start;Tid;Status;Klubb nr.;Namn;Ort;Land;Klass nr.;Kort;Lång;Sträckor;Num1;Num2;Num3;Text1;Text2;Text3;Startavgift;Betalt;Efternamn;Förnamn;År;K;Start;Mål;Tid;Status;Bricka;Hyrd;Databas nr.;Efternamn;Förnamn;År;K;Start;Mål;Tid;Status;Bricka;Hyrd;Databas nr.;Efternamn;Förnamn;År;K;Start;Mål;Tid;Status;Bricka;Hyrd;Databas nr.;(kan fortsätta)..\n")

c.execute("SELECT entryId, bibNumber, teamName, eventclasses.name AS class, (SELECT COUNT(*) FROM results WHERE results.entryId=entries.entryId) AS legs, eventclasses.eventClassId AS classid, (SELECT countries.alpha3 FROM countries JOIN (results,persons) ON (relayPersonId=personId AND countries.countryId = persons.nationalityId) WHERE results.entryId=entries.entryId LIMIT 1) AS country FROM entries JOIN eventclasses ON acceptedEventClassId=eventClassId WHERE entries.eventId=1 ORDER BY teamName")
teams = c.fetchall()

clubId = 1
for team in teams:
    entryId = decode_field(team[0])
    bibNumber = decode_field(team[1])
    teamName = decode_field(team[2])
    className = decode_field(team[3])
    legs = decode_field(team[4])
    classId = decode_field(team[5])
    country = decode_field(team[6])
    if country == '':
        print "Varning: Ingen person i lag %s har land satt" % bibNumber
        
    f.write('%s;"1";;0;0:00;;0;%s;"";"%s";"%s";%u;"%s";"%s";%u;;;;"";"";"?";"100";0' % 
            (bibNumber, clubId, teamName, country, classId, className, className, legs))
    c.execute("SELECT persons.firstName, persons.familyName, persons.sex, electronicpunchingcards.cardNumber FROM results JOIN (persons, raceClasses) ON (relayPersonId=personId AND results.raceClassId=raceClasses.raceClassId) LEFT JOIN (electronicpunchingcards) ON (results.electronicPunchingCardId=electronicpunchingcards.cardId) WHERE results.entryId=%s ORDER BY raceClasses.relayLeg", (team[0],))
    persons = c.fetchall()
    for person in persons:
        first_name = decode_field(person[0])
        family_name = decode_field(person[1])
        sex = decode_field(person[2])
        si = decode_field(person[3])
        if sex == 'F':
            sex = 'K'
        f.write(';"%s";"%s";0;%s;0:00;;;0;%s;0;""' %
                (family_name, first_name, sex, si))
    f.write(";\n")
    clubId += 1
f.close()
c.close()
db.close()
