Changeset 206

Show
Ignore:
Timestamp:
Fri Sep 15 21:16:28 2006
Author:
Alexander
Message:

Server: removed tabs in ganttpv_report.py

Files:

Legend:

Unmodified
Added
Removed
Modified
  • server/trunk/update/web/ganttpv_report.py

    r199 r206  
    5 5  
    6 6 # Note: The fonts used in this script are larger than in GanttPV. To reduce font  
    7   #       size to more closely match GanttPV, change the "font-size" lines below. #       size to more closely match GanttPV, change the "font-size" lines below.  
      7 #       size to more closely match GanttPV, change the "font-size" lines below. #       size to more closely match GanttPV, change the "font-size" lines below.  
    7 7  
    8 8 #    This file is part of GanttPV.  
     
    29 29 # 040718 - simplify report heading  
    30 30 # 041109 - convert value to string (to handle new float column type)  
    31   # 041113 - added WriteValue to create a common routine to handle character output conversions needed;  
    32   #               added export time message  
      31 # 041113 - added WriteValue to create a common routine to handle character output conversions needed; added export time message  
    33 32 # 041120 - changes to convert some unicode characters; added wrapcells flag  
    34 33 # 041203 - added support for weekly gantt charts and measurements  
     
    122 121         """  
    123 122         global datetime  
    124           if value == None or value == "":         if value == None or value == "":  
      123         if value == None or value == "":         if value == None or value == "":  
    124 123             result = ' '  
    125           elif isinstance(value, int) or isinstance(value, float):         elif isinstance(value, int) or isinstance(value, float):  
      124         elif isinstance(value, int) or isinstance(value, float):         elif isinstance(value, int) or isinstance(value, float):  
    125 124             result = str(value)  
    126           else:         else:  
      125         else:         else:  
    126 125             result = "?"  
    127 126             try:  
     
    153 152     def build_menu(fp, report):  
    154 153  
    155           header1 = """         header1 = """  
      154         header1 = """         header1 = """  
    155 154 <html><head>  
    156 155 <title>  
    157 156 """  
    158           header2 = """         header2 = """  
      157         header2 = """         header2 = """  
    158 157 </title><meta http-equiv="content-type" content="text/html;charset=""" + cset + """">  
    159 158 <style>  
     
    182 181 <tr><td>&nbsp;</td><td align=center>  
    183 182 """  
    184           footer1 = """         footer1 = """  
      183         footer1 = """         footer1 = """  
    184 183 </table>  
    185 184 </td><td>&nbsp;</td></tr>  
    186 185 <tr><td>&nbsp;</td><td align=right>  
    187 186 """  
    188           footer2 = """         footer2 = """  
      187         footer2 = """         footer2 = """  
    188 187 </td><td>&nbsp;</td></tr>  
    189 188 </table>  
     
    202 201         fp.write('<table border="1" cellspacing="0" cellpadding="1">\r')  
    203 202  
    204           # print column headings         # print column headings  
      203         # print column headings         # print column headings  
    204 203         cname1 = [ "Project", "Report", "View", "Edit" ]  
    205           fp.write("<tr>")  
    206           for i, c in enumerate(cname1):  
    207                   fp.write('<td class="head" colspan="' + str(cspan) + '"' + rspan + '>')  
    208                   fp.write(c)  
    209                   fp.write("</td>")  
    210           fp.write("</tr>")  
      204         fp.write("<tr>")  
      205         for i, c in enumerate(cname1):  
      206                 fp.write('<td class="head" colspan="' + str(cspan) + '"' + rspan + '>')  
      207                 fp.write(c)  
      208                 fp.write("</td>")  
      209         fp.write("</tr>")  
    211 210  
    212 211         rlist = report.get("Projects")  
    213           for ri, rid in enumerate(rlist):  
    214                   rr = Data.ReportRow[rid]  
    215                   rtable = rr.get('TableName')  
    216                   tid = rr['TableID']  # was 'TaskID' -> changed to generic ID  
    217                   if not show:  
    218                           hidden = rr.get('Hidden', False)  
    219                           active = rtable and tid and (Data.Database[rtable][tid].get('zzStatus', 'active') == 'active')  
    220                           if hidden or not active: continue  
    221                   fp.write("<tr>")  
    222                   for ci, col in enumerate(columns):  
    223                           of = coloffset[ci]  
    224                           ct = Data.ColumnType[ctypes[ci]]  
    225                           t = ct.get('T', 'X')  # either "A" or "B"  
    226                           ctable = Data.ReportType[rtid].get('Table' + t)  
    227                           at = ct.get('AccessType')  
    228                           if ri == 0:  
    229                                   wid = ' width="' + str(cwidth[ci]) + '" '  
    230                           else:  
    231                                   wid = ''  
    232                           if of == -1:  
    233                                   if rtable != ctable:  
    234                                           value = ''  
    235                                   elif at == 'd':  # direct - value is in row  
    236                                           column = ct.get('Name')  
    237                                           value = Data.Database[rtable][tid].get(column, "")  
    238                                   elif at == 'i':  # indirect - value in other table  
    239                                           it, ic = ct.get('Name').split('/')  # indirect table & column  
    240                                           iid = Data.Database[rtable][tid].get(it+'ID')  
    241                                           value = Data.Database[it][iid].get(ic, "")  
    242    
    243                                   fp.write('<td class="body" ' + wid + wrap + ' >')  
    244                                   fp.write(MakeString(value))  
    245                                   fp.write("</td>")  
    246                           else:  # bar chart - decide on color of empty cell  
      212         for ri, rid in enumerate(rlist):  
      213                 rr = Data.ReportRow[rid]  
      214                 rtable = rr.get('TableName')  
      215                 tid = rr['TableID']  # was 'TaskID' -> changed to generic ID  
      216                 if not show:  
      217                         hidden = rr.get('Hidden', False)  
      218                         active = rtable and tid and (Data.Database[rtable][tid].get('zzStatus', 'active') == 'active')  
      219                         if hidden or not active: continue  
      220                 fp.write("<tr>")  
      221                 for ci, col in enumerate(columns):  
      222                         of = coloffset[ci]  
      223                         ct = Data.ColumnType[ctypes[ci]]  
      224                         t = ct.get('T', 'X')  # either "A" or "B"  
      225                         ctable = Data.ReportType[rtid].get('Table' + t)  
      226                         at = ct.get('AccessType')  
      227                         if ri == 0:  
      228                                 wid = ' width="' + str(cwidth[ci]) + '" '  
      229                         else:  
      230                                 wid = ''  
      231                         if of == -1:  
      232                                 if rtable != ctable:  
      233                                         value = ''  
      234                                 elif at == 'd':  # direct - value is in row  
      235                                         column = ct.get('Name')  
      236                                         value = Data.Database[rtable][tid].get(column, "")  
      237                                 elif at == 'i':  # indirect - value in other table  
      238                                         it, ic = ct.get('Name').split('/')  # indirect table & column  
      239                                         iid = Data.Database[rtable][tid].get(it+'ID')  
      240                                         value = Data.Database[it][iid].get(ic, "")  
      241  
      242                                 fp.write('<td class="body" ' + wid + wrap + ' >')  
      243                                 fp.write(MakeString(value))  
      244                                 fp.write("</td>")  
      245                         else:  # bar chart - decide on color of empty cell  
    247 246                                 ctperiod, ctfield = ct.get('Name').split("/")  
    248 247                                 if ctfield == "Gantt":  # don't display a value  
    249                                           if rtable == "Task":  
    250                                                   task = Data.Database['Task'][tid]  
    251                                                   column = Data.Database['ReportColumn'][col]  
    252                                                   es = task.get('hES', 0)  # if not found don't display gantt chart  
    253                                                   ef = task.get('hEF', 0)  
    254                                                   ix = Data.DateConv[ column.get('FirstDate') or Data.GetToday() ]  
    255                                                   if ctperiod == "Week":  
    256                                                           ix -= Data.DateInfo[ ix ][2]  # convert to beginning of week  
    257                                                           dh, cumh, dow = Data.DateInfo[ix  + of * 7]  
    258                                                           dh2, cumh2, dow2 = Data.DateInfo[ix  + (of + 1) * 7]  
    259                                                           dh = cumh2 - cumh  
    260                                                   else:  
    261                                                           dh, cumh, dow = Data.DateInfo[ix  + of]  
    262    
    263                                                   if dh == 0:  
    264                                                       cl = "off"  
    265                                                   elif es < (dh + cumh) and ef > cumh:  
    266                                                       # cl = "task"  
    267                                                       if task.get("ActualEndDate"):  
    268                                                           cl = "complete"  
    269                                                       elif task.get("PercentComplete"):  # is this cell end past current position in task  
    270                                                           # if task.get("PercentComplete") >= (( cumh + dh - es )*100 / (ef-es)):  # old formula  
    271                                                           pc = task.get("PercentComplete")  
    272                                                           position = es + (pc * (ef-es) / 100) # current position of task  
    273                                                           if pc == 100 or position >= (cumh + dh):  
    274                                                               cl = "complete"  
    275                                                           else:  
    276                                                               cl = "task"  
    277                                                       else:  
    278                                                           cl = "task"  
    279                                                       # if es <= cumh: xof = 0  
    280                                                       # else: xof = int( rect.width * (es - cumh)/dh)  
    281                                                       # if ef >= (cumh + dh): wof = 0  
    282                                                       # else: wof = int( rect.width * (cumh + dh - ef)/dh)  
    283                                                   else:  
    284                                                       cl = "non"  
      248                                         if rtable == "Task":  
      249                                                 task = Data.Database['Task'][tid]  
      250                                                 column = Data.Database['ReportColumn'][col]  
      251                                                 es = task.get('hES', 0)  # if not found don't display gantt chart  
      252                                                 ef = task.get('hEF', 0)  
      253                                                 ix = Data.DateConv[ column.get('FirstDate') or Data.GetToday() ]  
      254                                                 if ctperiod == "Week":  
      255                                                         ix -= Data.DateInfo[ ix ][2]  # convert to beginning of week  
      256                                                         dh, cumh, dow = Data.DateInfo[ix  + of * 7]  
      257                                                         dh2, cumh2, dow2 = Data.DateInfo[ix  + (of + 1) * 7]  
      258                                                         dh = cumh2 - cumh  
      259                                                 else:  
      260                                                         dh, cumh, dow = Data.DateInfo[ix  + of]  
      261  
      262                                                 if dh == 0:  
      263                                                     cl = "off"  
      264                                                 elif es < (dh + cumh) and ef > cumh:  
      265                                                     # cl = "task"  
      266                                                     if task.get("ActualEndDate"):  
      267                                                         cl = "complete"  
      268                                                     elif task.get("PercentComplete"):  # is this cell end past current position in task  
      269                                                         # if task.get("PercentComplete") >= (( cumh + dh - es )*100 / (ef-es)):  # old formula  
      270                                                         pc = task.get("PercentComplete")  
      271                                                         position = es + (pc * (ef-es) / 100) # current position of task  
      272                                                         if pc == 100 or position >= (cumh + dh):  
      273                                                             cl = "complete"  
      274                                                         else:  
      275                                                             cl = "task"  
      276                                                     else:  
      277                                                         cl = "task"  
      278                                                     # if es <= cumh: xof = 0  
      279                                                     # else: xof = int( rect.width * (es - cumh)/dh)  
      280                                                     # if ef >= (cumh + dh): wof = 0  
      281                                                     # else: wof = int( rect.width * (cumh + dh - ef)/dh)  
      282                                                 else:  
      283                                                     cl = "non"  
    285 284                                         else:  
    286 285                                             cl = "non"  
    287                                           fp.write('<td class="' + cl + '" ' + wid + wrap + ' >')  
    288                                           fp.write("&nbsp;")  
    289                                           fp.write("</td>")  
      286                                         fp.write('<td class="' + cl + '" ' + wid + wrap + ' >')  
      287                                         fp.write("&nbsp;")  
      288                                         fp.write("</td>")  
    290 289  
    291 290                                 else:  # table name, field name, time period, and record id  
     
    294 293                  
    295 294                                     if value == None: value = ''  
    296                                       cl = "non"  
    297                                       fp.write('<td class="' + cl + '" ' + wid + wrap + ' >')  
    298                                       if value == "":  
    299                                           fp.write("&nbsp;")  
    300                                       else:  
    301                                           fp.write(MakeString(value))  
    302                                       fp.write("</td>")  
    303                   fp.write("</tr>\r")  
    304                    
    305           fp.write(footer1)  
      295                                     cl = "non"  
      296                                     fp.write('<td class="' + cl + '" ' + wid + wrap + ' >')  
      297                                     if value == "":  
      298                                         fp.write("&nbsp;")  
      299                                     else:  
      300                                         fp.write(MakeString(value))  
      301                                     fp.write("</td>")  
      302                 fp.write("</tr>\r")  
      303  
      304         fp.write(footer1)  
    306 305         fp.write('<div class="time">')  
    307 306         # fp.write('<p><hr>')  
     
    311 310         fp.write(dToday.strftime("%y-%m-%d %H:%M")) # convert to display format  
    312 311         fp.write('</div>')  
    313           fp.write(footer2)  
    314           fp.close()  
      312         fp.write(footer2)  
      313         fp.close()  
    315 314  
    316 315 # ---- End of Do Not Change Area ----