Show
Ignore:
Timestamp:
09/27/08 22:02:37 (16 years ago)
Author:
jerome
Message:

Removed unnecessary spaces at EOL.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/bin/pkrefund

    r3411 r3413  
    99# the Free Software Foundation, either version 3 of the License, or 
    1010# (at your option) any later version. 
    11 #  
     11# 
    1212# This program is distributed in the hope that it will be useful, 
    1313# but WITHOUT ANY WARRANTY; without even the implied warranty of 
    1414# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1515# GNU General Public License for more details. 
    16 #  
     16# 
    1717# You should have received a copy of the GNU General Public License 
    1818# along with this program.  If not, see <http://www.gnu.org/licenses/>. 
     
    3434    from reportlab.lib import pagesizes 
    3535    from reportlab.lib.units import cm 
    36 except ImportError :     
     36except ImportError : 
    3737    hasRL = False 
    38 else :     
     38else : 
    3939    hasRL = True 
    40      
     40 
    4141try : 
    42     import PIL.Image  
    43 except ImportError :     
     42    import PIL.Image 
     43except ImportError : 
    4444    hasPIL = False 
    45 else :     
     45else : 
    4646    hasPIL = True 
    4747 
     
    5454from pykota.errors import PyKotaToolError, PyKotaCommandLineError 
    5555from pykota.tool import Percent, PyKotaTool 
    56          
    57 class PKRefund(PyKotaTool) :         
     56 
     57class PKRefund(PyKotaTool) : 
    5858    """A class for refund manager.""" 
    5959    validfilterkeys = [ "username", 
     
    6565                        "end", 
    6666                      ] 
    67                        
     67 
    6868    def printVar(self, label, value, size) : 
    6969        """Outputs a variable onto the PDF canvas. 
    70          
     70 
    7171           Returns the number of points to substract to current Y coordinate. 
    72         """    
     72        """ 
    7373        xcenter = (self.pagesize[0] / 2.0) - 1*cm 
    7474        self.canvas.saveState() 
     
    8181        self.canvas.restoreState() 
    8282        self.ypos -= (size + 4) 
    83          
     83 
    8484    def pagePDF(self, receiptnumber, name, values, unit, reason) : 
    8585        """Generates a new page in the PDF document.""" 
     
    9292            datetime = time.strftime("%c", time.localtime()).decode(self.charset, "replace") 
    9393            self.printVar(_("Edited on"), datetime, 14) 
    94                  
     94 
    9595            self.ypos -= 20 
    9696            self.printVar(_("Jobs refunded"), str(values["nbjobs"]), 18) 
     
    101101            self.canvas.showPage() 
    102102            return 1 
    103         return 0     
    104          
     103        return 0 
     104 
    105105    def initPDF(self, logo) : 
    106106        """Initializes the PDF document.""" 
    107         self.pdfDocument = cStringIO.StringIO()         
     107        self.pdfDocument = cStringIO.StringIO() 
    108108        self.canvas = c = canvas.Canvas(self.pdfDocument, \ 
    109109                                        pagesize=self.pagesize, \ 
    110110                                        pageCompression=1) 
    111          
     111 
    112112        c.setAuthor(self.effectiveUserName) 
    113113        c.setTitle(_("PyKota print job refunding receipts")) 
    114114        c.setSubject(_("Print job refunding receipts generated with PyKota")) 
    115          
     115 
    116116        self.canvas.beginForm("background") 
    117117        self.canvas.saveState() 
    118          
    119         self.ypos = self.pagesize[1] - (2 * cm)             
    120          
     118 
     119        self.ypos = self.pagesize[1] - (2 * cm) 
     120 
    121121        xcenter = self.pagesize[0] / 2.0 
    122122        if logo : 
    123             try :     
     123            try : 
    124124                imglogo = PIL.Image.open(logo) 
    125             except IOError :     
     125            except IOError : 
    126126                self.printInfo("Unable to open image %s" % logo, "warn") 
    127127            else : 
    128128                (width, height) = imglogo.size 
    129                 multi = float(width) / (8 * cm)  
     129                multi = float(width) / (8 * cm) 
    130130                width = float(width) / multi 
    131131                height = float(height) / multi 
     
    134134                                  self.ypos, \ 
    135135                                  width, height) 
    136          
     136 
    137137        self.ypos -= (cm + 20) 
    138138        self.canvas.setFont("Helvetica-Bold", 14) 
     
    140140        msg = _("Here's the receipt for the refunding of your print jobs") 
    141141        self.canvas.drawCentredString(xcenter, self.ypos, "%s :" % msg) 
    142          
     142 
    143143        self.yorigine = self.ypos 
    144144        self.canvas.restoreState() 
    145145        self.canvas.endForm() 
    146          
    147     def endPDF(self, fname) :     
     146 
     147    def endPDF(self, fname) : 
    148148        """Flushes the PDF generator.""" 
    149149        self.canvas.save() 
    150         if fname != "-" :         
     150        if fname != "-" : 
    151151            outfile = open(fname, "w") 
    152152            outfile.write(self.pdfDocument.getvalue()) 
    153153            outfile.close() 
    154         else :     
     154        else : 
    155155            sys.stdout.write(self.pdfDocument.getvalue()) 
    156156            sys.stdout.flush() 
    157          
     157 
    158158    def genReceipts(self, peruser, logo, outfname, firstnumber, reason, unit) : 
    159159        """Generates the receipts file.""" 
     
    162162            if outfname != "-" : 
    163163                percent.display("%s...\n" % _("Generating receipts")) 
    164                  
     164 
    165165            self.initPDF(logo) 
    166166            number = firstnumber 
     
    169169                if outfname != "-" : 
    170170                    percent.oneMore() 
    171                      
     171 
    172172            if number > firstnumber : 
    173173                self.endPDF(outfname) 
    174                  
     174 
    175175            if outfname != "-" : 
    176176                percent.done() 
    177          
     177 
    178178    def main(self, arguments, options) : 
    179179        """Refunds jobs.""" 
     
    182182        if not hasPIL : 
    183183            raise PyKotaToolError, "The Python Imaging Library is missing. Download it from http://www.pythonware.com/downloads" 
    184              
    185         self.adminOnly()     
    186              
     184 
     185        self.adminOnly() 
     186 
    187187        self.pagesize = getPageSize(options.pagesize) 
    188          
     188 
    189189        if (not options.reason) or (not options.reason.strip()) : 
    190190            raise PyKotaCommandLineError, _("Refunding for no reason is forbidden. Please use the --reason command line option.") 
    191              
     191 
    192192        extractonly = {} 
    193193        for filterexp in arguments : 
     
    197197                    filterkey = filterkey.lower() 
    198198                    if filterkey not in self.validfilterkeys : 
    199                         raise ValueError                 
    200                 except ValueError :     
     199                        raise ValueError 
     200                except ValueError : 
    201201                    raise PyKotaCommandLineError, _("Invalid filter value [%s], see help.") % filterexp 
    202                 else :     
     202                else : 
    203203                    extractonly.update({ filterkey : filtervalue }) 
    204              
     204 
    205205        percent = Percent(self) 
    206206        outfname = options.output.strip().encode(sys.getfilesystemencoding()) 
    207207        if outfname != "-" : 
    208208            percent.display("%s..." % _("Extracting datas")) 
    209         else :     
     209        else : 
    210210            options.force = True 
    211211            self.printInfo(_("The PDF file containing the receipts will be sent to stdout. --force is assumed."), "warn") 
    212              
    213         username = extractonly.get("username")     
     212 
     213        username = extractonly.get("username") 
    214214        if username : 
    215215            user = self.storage.getUser(username) 
    216216        else : 
    217217            user = None 
    218              
    219         printername = extractonly.get("printername")     
     218 
     219        printername = extractonly.get("printername") 
    220220        if printername : 
    221221            printer = self.storage.getPrinter(printername) 
    222         else :     
     222        else : 
    223223            printer = None 
    224              
     224 
    225225        start = extractonly.get("start") 
    226226        end = extractonly.get("end") 
    227227        (start, end) = self.storage.cleanDates(start, end) 
    228          
    229         jobs = self.storage.retrieveHistory(user=user,     
    230                                             printer=printer,  
     228 
     229        jobs = self.storage.retrieveHistory(user=user, 
     230                                            printer=printer, 
    231231                                            hostname=extractonly.get("hostname"), 
    232232                                            billingcode=extractonly.get("billingcode"), 
     
    235235                                            end=end, 
    236236                                            limit=0) 
    237                                              
    238         peruser = {}                                     
    239         nbjobs = 0                                     
    240         nbpages = 0                                             
     237 
     238        peruser = {} 
     239        nbjobs = 0 
     240        nbpages = 0 
    241241        nbcredits = 0.0 
    242242        percent.setSize(len(jobs)) 
    243243        if outfname != "-" : 
    244244            percent.display("\n") 
    245         for job in jobs :                                     
     245        for job in jobs : 
    246246            if job.JobSize and (job.JobAction not in ("DENY", "CANCEL", "REFUND")) : 
    247247                if options.force : 
     
    256256                    if outfname != "-" : 
    257257                        percent.oneMore() 
    258                 else :     
     258                else : 
    259259                    print _("Date : %s") % str(job.JobDate)[:19] 
    260260                    print _("Printer : %s") % job.PrinterName 
     
    266266                    print _("Pages : %i") % job.JobSize 
    267267                    print _("Credits : %.3f") % job.JobPrice 
    268                      
    269                     while True :                              
     268 
     269                    while True : 
    270270                        answer = raw_input("\t%s ? " % _("Refund (Y/N)")).strip().upper() 
    271271                        if answer == _("Y") : 
     
    278278                            counters["nbjobs"] += 1 
    279279                            nbjobs += 1 
    280                             break     
    281                         elif answer == _("N") :     
    282280                            break 
    283                     print         
     281                        elif answer == _("N") : 
     282                            break 
     283                    print 
    284284        if outfname != "-" : 
    285285            percent.done() 
    286         self.genReceipts(peruser,  
    287                          options.logo.strip().encode(sys.getfilesystemencoding()),  
    288                          outfname,  
    289                          options.number,  
    290                          options.reason,  
     286        self.genReceipts(peruser, 
     287                         options.logo.strip().encode(sys.getfilesystemencoding()), 
     288                         outfname, 
     289                         options.number, 
     290                         options.reason, 
    291291                         options.unit or _("Credits")) 
    292         if outfname != "-" :     
     292        if outfname != "-" : 
    293293            nbusers = len(peruser) 
    294294            print _("Refunded %(nbusers)i users for %(nbjobs)i jobs, %(nbpages)i pages and %(nbcredits).3f credits") \ 
    295295                     % locals() 
    296              
    297 if __name__ == "__main__" :  
     296 
     297if __name__ == "__main__" : 
    298298    parser = PyKotaOptionParser(description=_("Refunding tool for PyKota."), 
    299299                                usage="pkrefund [options] [filterexpr]") 
     
    313313                            default=u"A4", 
    314314                            help=_("Set the size of the page. Most well known page sizes are recognized, like 'A4' or 'Letter' to name a few. The default page size is %default.")) 
    315     parser.add_option("-n", "--number",                         
     315    parser.add_option("-n", "--number", 
    316316                            dest="number", 
    317317                            type="int", 
     
    329329                            type="string", 
    330330                            help=_("The reason why there was a refund.")) 
    331                              
     331 
    332332    # TODO : due to Python's optparse.py bug #1498146 fixed in rev 46861 
    333333    # TODO : we can't use 'default=_("Credits")' for this option 
    334     parser.add_option("-u", "--unit",                    
     334    parser.add_option("-u", "--unit", 
    335335                            dest="unit", 
    336336                            type="string", 
    337337                            help=_("The name of the unit to use on the receipts. The default value is 'Credits' or its locale translation.")) 
    338                              
     338 
    339339    parser.add_filterexpression("username", _("User's name")) 
    340340    parser.add_filterexpression("printername", _("Printer's name")) 
     
    344344    parser.add_filterexpression("start", _("Job's date of printing")) 
    345345    parser.add_filterexpression("end", _("Job's date of printing")) 
    346      
     346 
    347347    parser.add_example('--output /tmp/receipts.pdf jobid=503', 
    348348                       _("This would refund all jobs which Id is 503. A confirmation would be asked for each job to refund, and a PDF file named /tmp/receipts.pdf would be created containing printable receipts. BEWARE of job ids rolling over if you reset CUPS' history.")) 
    349    
     349 
    350350    parser.add_example('--reason "Hardware problem" jobid=503 start=today-7', 
    351351                       _("This would refund all jobs which id is 503 but which would have been printed during the  past week. The reason would be marked as being an hardware problem.")) 
    352    
     352 
    353353    parser.add_example('--force username=jerome printername=HP2100', 
    354354                       _("This would refund all jobs printed by user jerome on printer HP2100. No confirmation would be asked.")) 
    355    
     355 
    356356    parser.add_example('--force printername=HP2100 start=200602 end=yesterday', 
    357357                       _("This would refund all jobs printed on printer HP2100 between February 1st 2006 and yesterday. No confirmation would be asked.")) 
    358      
     358 
    359359    (options, arguments) = parser.parse_args() 
    360     run(parser, PKRefund)                    
     360    run(parser, PKRefund)