예제 #1
0
    def sExport(self, mode, dialog):
        
        print "I: ", self.name, ": export"

        if (mode == self.eTABLE):                
            format = "Csv"            
        elif mode == self.eWWW:
            format = "Htm"  
        elif mode == self.eDB:
            format = "Db"          
        else:
            print "sExport: ERROR"
            
                
        '''get filename, gui dialog, save path to datastore'''                        
        if dialog:
            print "as", "dir_export_"+format.lower()         
            filename = uiAccesories.getSaveFileName("Export table "+self.name+" to "+format.upper(),"dir_export_"+format.lower(), format.upper()+" Files (*."+format.lower()+")", self.name+"."+format.lower())
        else:
            filename = utils.get_filename("export/"+format.lower()+"/"+self.name+"_"+dstore.GetItem("racesettings-app",['race_name'])+"."+format.lower())
                     
        if(filename == ""):
            return                
                
        title = "Table '"+self.name + "'"+format.upper()+" Export"                        
                
        '''Write to the file'''
        if format == "Csv":
            
            #export times (with collumn's names)            
            try:
                self.model.df.to_csv(filename, ";", mode="w", index = False, encoding = "utf8", float_format = "%g")                
            except IOError:
                uiAccesories.showMessage(self.name+" Export warning", "File "+filename+"\nPermission denied!")                                                                                
        elif format == "Htm":                    
            '''Write to HTML file'''            
            try:                                                                
                html_page = ew_html.Page_table(filename, title = dstore.GetItem("racesettings-app", ['race_name']), styles= ["css/results.css",], lists = exportRows, keys = exportHeader)
                html_page.save()                             
                uiAccesories.showMessage(title, "Succesfully ("+filename+") : "+ time.strftime("%H:%M:%S", time.localtime()), msgtype = MSGTYPE.statusbar)            
            except IOError:            
                uiAccesories.showMessage(title, "NOT succesfully \n\nCannot write into the file ("+filename+")")                                           
예제 #2
0
def ExportToHtmFiles(dfs, type):       

    print "ExportToHtmFiles"
    #return info
    exported = {}
                            
    #get filename, gui dialog  
    racename = dstore.GetItem("racesettings-app", ['race_name'])      
    dirname = utils.get_filename("export/www/")
    
                
    for i in range(0, NUMBER_OF.EXPORTS): 
        
        if (tabExportColumns.IsEnabled(i, "htm") == False):
            continue        
        
        df = pd.DataFrame()
        if(type == eHTM_EXPORT):            
            df =  dfs[i]
            
            #filter to checked columns
            columns = GetExportCollumns(df, i)

            if(len(df) != 0):
                #get winner and compute GAPs                       
                for nr in range(0, NUMBER_OF.TIMESCOLUMNS):                                
                    df = AddGap(df, nr)
                df = df[columns]
            else:
                df = pd.DataFrame(columns=columns)
            css_filename = dstore.GetItem("export_www", [i, "css_filename"])
            js_filename = dstore.GetItem("export_www", [i, "js_filename"])
            title = dstore.GetItem("racesettings-app", ['race_name']) 
        elif(type == eHTM_EXPORT_LOGO):
            df =  pd.DataFrame()                      
            css_filename = u"css/logo.css"
            js_filename = u""
            title = "Časomíra Ewitis - <i>Vy závodíte, my měříme..</i>"
        else:
            print  "Error: This export is not defined!", type 
            return
        #complete export            
        #if(len(df) != 0) or (type == self.eHTM_EXPORT_LOGO):
        filename =  utils.get_filename(dirname+"e"+str(i+1)+"_"+racename+".htm")
        
        #convert header EN => CZ            
        tocz_dict = dstore.GetItem("export", ["names", i])                                                     
        df = df.rename(columns = tocz_dict)

        #firsttimes
        nr = dstore.GetItem("export_www", [i, "firsttimes"])
        if nr != 0:
            df = df.head(nr)    
        #lasttimes
        nr = dstore.GetItem("export_www", [i, "lasttimes"])
        if nr != 0:
            df = df.tail(nr)
            
        #transpose
        if dstore.GetItem("export_www", [i, "transpose"]):    
            aux_columns = df.columns
            df = df.T
            df.insert(0,"", aux_columns)
                
        ExportToHtmFile(filename, Columns2Cz(df, i), css_filename, js_filename, title)            
        exported["total"] = len(df)
         
    return exported 
예제 #3
0
def Export(utDf, export_type = eCSV_EXPORT):             
    
       
    # 3DFs for 3 exports
    exportDf = [pd.DataFrame()] * NUMBER_OF.EXPORTS
    
    
    if len(utDf) != 0:                      
        
        #update export df
        for i in range(0, NUMBER_OF.EXPORTS):
                          
            aux_df = utDf.copy()
            
            if (tabExportColumns.IsEnabled(i) == False):
                continue
            
            #get export filtersort
            filtersort = dstore.GetItem('export_filtersort', [i])
                                      
            filter = filtersort['filter']
            sort1 = filtersort['sort1'].lower()  
            sort2 = filtersort['sort2'].lower()
            sortorder1 = True if(filtersort['sortorder1'].lower() == "asc") else False
            sortorder2 = True if(filtersort['sortorder2'].lower() == "asc") else False
            
            #filter                 
            aux_df = df_utils.FilterEmptyColumns(aux_df, filter.split(" "))
                            
            #aux_df = self.joinedDf[(aux_df[column1].notnull()) & (self.joinedDf['user_id']!=0)]                
                        
            #last time from each user?                    
            aux_df = aux_df.sort("timeraw")                        
            if("last" in filter):                                                                
                aux_df = aux_df.groupby("nr", as_index = False).last()
                
            #beautify
            aux_df = aux_df.where(pd.notnull(aux_df), None)
            aux_df.set_index('id',  drop=False, inplace = True)
            
            #sort
            if(sort2 in aux_df.columns):
                aux_df = aux_df.sort([sort1, sort2], ascending = [sortorder1, sortorder2])
            else:
                aux_df = aux_df.sort(sort1, ascending = sortorder1)
                        
            #add "order in category" -> "3./Kategorie XY"
            for oc in range(0, NUMBER_OF.EXPORTS):
                ordercatX = 'ordercat'+str(oc+1)
                orderX = 'order'+str(oc+1)
                                
                #aux_df[ordercatX] = aux_df[orderX].astype(str)+"./"+aux_df.category
                                       
                aux_df[ordercatX] = aux_df[orderX].astype(float).map('{:,g}'.format)+"./"+aux_df.category
                                                
#             #get winner and compute GAPs                       
            for nr in range(0, NUMBER_OF.TIMESCOLUMNS):                                
                gapX = 'gap'+str(nr+1)
                lapX = 'lap'+str(nr+1)
                timeX = 'time'+str(nr+1)
                try:
                    winnerX = aux_df.sort([lapX,timeX], ascending = [False, True]).iloc[0] 
                    if (lapX in winnerX) and (timeX in winnerX):                    
                        aux_df[gapX] =  aux_df.apply(lambda row: GetGap(row[timeX],row[lapX], winnerX[timeX], winnerX[lapX]), axis = 1)
                    else:
                        aux_df[gapX] = None
                except:
                    aux_df[gapX] = None
                    
            #lapsexport
            if (dstore.GetItem('export_filtersort', [i, "onerow"]) != 0):                       
                aux_df = ToLapsExport(aux_df)
            
            #print "PRED",i, aux_df.head(2), aux_df.dtypes
            ConvertToInt(aux_df)
            #print "PO",i, aux_df.head(2), aux_df.dtypes
            
            #add missing users with DNS status
            if export_type == eCSV_EXPORT_DNS:
                #print "==========================AddMissingUsers", i                
                aux_df = AddMissingUsers(aux_df)                                        
                #beautify once again
                aux_df = aux_df.where(pd.notnull(aux_df), None)
                aux_df.set_index('id',  drop=False, inplace = True)
                ConvertToInt(aux_df)                            
                                                                        
            exportDf[i] = aux_df
    
    #export complete/ category and group results from export DFs        
    exported = {}
    if (export_type == eCSV_EXPORT) or (export_type == eCSV_EXPORT_DNS):
        #get dirname
        racename = dstore.GetItem("racesettings-app", ['race_name'])     
        dirname = utils.get_filename("export/"+timeutils.getUnderlinedDatetime()+"_"+racename+"/")        
        try:
            os.makedirs(dirname)
        except WindowsError:
            pass                                                                                      
        exported = ExportToCsvFiles(exportDf, dirname)
        exported.update(ExportToSmsFiles(exportDf, dirname))           
    elif (export_type == eHTM_EXPORT) or (export_type == eHTM_EXPORT_LOGO):
        exported = ExportToHtmFiles(exportDf, export_type)    
    else:
        print  "Error: This export is not defined!"
        
    return exported                                  
예제 #4
0
def ExportToCsvFiles(dfs, dirname):               
    
    #ret = uiAccesories.showMessage("Results Export", "Choose format of results", MSGTYPE.question_dialog, "NOT finally results", "Finally results")                        
    #if ret == False: #cancel button
    #    return         
    
    #return info
    exported = {}
    
    #get dirname
    racename = dstore.GetItem("racesettings-app", ['race_name'])      
    #dirname = utils.get_filename("export/"+timeutils.getUnderlinedDatetime()+"_"+racename+"/")
    #print "DN", dirname
    #os.makedirs(dirname)                                                                                       
            
    for i in range(0, NUMBER_OF.EXPORTS): 
        
        if (tabExportColumns.IsEnabled(i, "csv") == False):
            continue
        
        #get df
        df =  dfs[i]                        
        filtersort = dstore.GetItem('export_filtersort', [i])
        
        #get firstline (racename, time)
        header = dstore.GetItem("export_header", [i])             
        racename =  header["racename"].replace("%race%", dstore.GetItem("racesettings-app", ['race_name']))
        headertext = header["headertext"].replace("%time%", timeutils.getCurrentDateTime())
        firstline = [racename, headertext]            
                    
        #filter to checked columns            
        columns = GetExportCollumns(df, i)                                    
        
        #workarround
        #replace time with DNF for long times
        #df = self.DNF_workarround(df)          
                    
        #total export
        if "total" in filtersort["type"]:
            #print i, "TOTAL"
            if(len(df) != 0):
                #df = AddOrderToMissingUsers(df)                 
                #get winner and compute GAPs                       
                for nr in range(0, NUMBER_OF.TIMESCOLUMNS):                                
                    #print df.columns
                    #df = AddGap(df, nr)
                    pass
                    #print df[["nr","gap1"]]
                    #print "================"
                    
                #
                filename = utils.get_filename("e"+str(i+1)+"_t_"+racename)                                                         
                ExportToCsvFile(dirname+filename+".csv", Columns2Cz(df[columns], i), firstline)                                
                exported[filename] = len(df) 
                    
        #category export    
        if "categories" in filtersort["type"]:
            #print i, "CATEGORIES"            
            c_df = dfs[i]           
            c_df = c_df.set_index("category", drop = False)
            category_groupby = c_df.groupby(c_df.index)
            for c_name, c_df in category_groupby:
                c_df = AddOrderToMissingUsers(c_df)                
                if(len(c_df) != 0):
                    
                    #get winner and compute GAPs                       
                    for nr in range(0, NUMBER_OF.TIMESCOLUMNS):                                
                        c_df = AddGap(c_df, nr)


                    category = tableCategories.model.getCategoryParName(c_name)
                    category = category.to_dict()
                     
                    #get secondline (!!c_name used also for filename!!)
                    c_name = header["categoryname"].replace("%category%", c_name)
                    secondline = [c_name, header["description"].replace("%description%", category["description"])]
                    
                    #write to file
                    filename = utils.get_filename("e"+str(i+1)+"_c_"+c_name)
                    ExportToCsvFile(dirname+filename+".csv",  Columns2Cz(c_df[columns], i), firstline, secondline)                                                                                                                                                
                    
                    exported[filename] = len(c_df) 
                 
        #group export 
        if "groups" in filtersort["type"]: 
            #print i, "GROUPS"          
            g_df = dfs[i]
            for x in range(1,11):                
                g_label = "g"+str(x)
                categories = tableCategories.model.getCategoriesParGroupLabel(g_label)
                                                                 
                aux_df = g_df[g_df["category"].isin(categories["name"])]                                                                           
                if(aux_df.empty == False):
                    
                    #get winner and compute GAPs                       
                    for nr in range(0, NUMBER_OF.TIMESCOLUMNS):                                
                        aux_df = AddGap(aux_df, nr)
                                                         
                    group = tableCGroups.model.getCGrouptParLabel(g_label)
                    filename = utils.get_filename("e"+str(i+1)+"_"+g_label+"__"+group["name"])                        
                    ExportToCsvFile(dirname+filename+".csv", Columns2Cz(aux_df[columns], i), firstline, [group["name"], group["description"]])                                       
                    exported[filename] = len(aux_df)                                        
    return exported
예제 #5
0
def ExportToSmsFiles(dfs, dirname):
   
    exported = {}
   
#     #get dirname
    racename = dstore.GetItem("racesettings-app", ['race_name'])     
#     dirname = utils.get_filename("export/"+timeutils.getUnderlinedDatetime()+"_"+racename+"/")
#     try:
#         os.makedirs(dirname)
#     except WindowsError:
#         pass                                                                                      
            
    for i in range(0, NUMBER_OF.EXPORTS):
        
        if (tabExportColumns.IsEnabled(i, "sms") == False):
            continue
       
        #get df
        df =  dfs[i]                
                                               
        if(len(df) != 0):          
            #add sms-text as additional column
            mystr = dstore.GetItem("export_sms", ['text',i])
            mystr =  mystr.replace("%racename%", dstore.GetItem("racesettings-app", ['race_name']))
            df["sms_text"] = df.apply(lambda row: replaceSmsTags(mystr, row), axis = 1)            
            
            #create empty frame
            df_sms = pd.DataFrame(columns=["phone_nr", "prio", "sms_text"])
            
            #phone numbers are in phonecol (o1/o2/o3/o4) 
            for phonecol in dstore.GetItem("export_sms", ['phone_column']):
                
                if phonecol in df:
                    
                    #drop empty rows
                    df_temp = df[df[phonecol] != u""]
                    
                    #replace # => '
                    df_temp = df_temp.copy() #SettingWithCopyWarning:               
                    df_temp[phonecol] = df_temp[phonecol].str.replace("#","'")
                                        
                    #add forward sms
                    df_forwards = pd.DataFrame()
                    for forward in dstore.GetItem("export_sms", ['forward']):
                        if (forward["phone_nr"] != 0):
                            df_forward = df_temp[df_temp.nr == forward["user_nr"]].copy()
                            df_forward[phonecol] = forward["phone_nr"]
                            df_forwards = df_forwards.append(df_forward, ignore_index=True)                   
                    #df_forwards["sms_text"] = "Fwd:" + df_forwards["sms_text"] 
                    df_temp = df_temp.append(df_forwards, ignore_index=True)
                    
                    #reduce to 2 columns and rename phonecol (o1/o2/o3/o4 -> phone_nr)
                    df_temp = df_temp[[phonecol, "sms_text"]]
                    df_temp.columns =  ["phone_nr", "sms_text"]                    
                                           
                    #append numbers from this collumn            
                    df_sms = df_sms.append(df_temp, ignore_index=True)            
            #
            filename = utils.get_filename("e"+str(i+1)+"_sms_"+racename)                                                        
            ExportToCsvFile(dirname+filename+".csv", df_sms, firstline = None, secondline = None)                               
            exported[filename] = len(df_sms)
                                                                          
    return exported