Changeset 3036 for pykota/trunk/pykota

Show
Ignore:
Timestamp:
10/13/06 23:51:14 (18 years ago)
Author:
jerome
Message:

Charging for ink usage, finally !

Location:
pykota/trunk/pykota
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/pykota/accounter.py

    r3000 r3036  
    4545        self.isSoftware = 1 # by default software accounting 
    4646        self.isPreAccounter = ispreaccounter  
     47        self.inkUsage = [] 
    4748         
    4849    def getLastPageCounter(self) :     
  • pykota/trunk/pykota/accounters/ink.py

    r3034 r3036  
    4242            # know the result. 
    4343            self.filter.logdebug("Precomputing pass told us that job is %s pages long." % self.filter.softwareJobSize) 
    44             return self.filter.softwareJobSize   # Optimize : already computed ! 
     44            self.inkUsage = self.filter.preaccounter.inkUsage   # Optimize : already computed ! 
     45            return self.filter.softwareJobSize                  # Optimize : already computed ! 
    4546             
    46         (colorspace, resolution) = [p.strip() for p in self.arguments.split(',')] 
     47        parameters = [p.strip() for p in self.arguments.split(',')] 
     48        if len(parameters) == 1 : 
     49            parameters.append("72") 
     50        (colorspace, resolution) = parameters 
    4751        colorspace = colorspace.lower() 
    4852        if colorspace not in ("cmyk", "bw", "cmy", "rgb") : 
     
    5761         
    5862        jobsize = 0 
    59         self.inkUsage = [] 
    6063        if self.filter.JobSizeBytes : 
    6164            try : 
  • pykota/trunk/pykota/storage.py

    r3033 r3036  
    308308        self.isDirty = True 
    309309         
    310     def computeJobPrice(self, jobsize) :     
     310    def computeJobPrice(self, jobsize, inkusage=[]) :     
    311311        """Computes the job price as the sum of all parent printers' prices + current printer's ones.""" 
    312312        totalprice = 0.0     
     
    314314            if self.User.OverCharge != 0.0 :    # optimization, but TODO : beware of rounding errors 
    315315                for upq in [ self ] + self.ParentPrintersUserPQuota : 
    316                     price = (float(upq.Printer.PricePerPage or 0.0) * jobsize) + float(upq.Printer.PricePerJob or 0.0) 
    317                     totalprice += price 
     316                    totalprice += float(upq.Printer.PricePerJob or 0.0) 
     317                    pageprice = float(upq.Printer.PricePerPage or 0.0) 
     318                    if not inkusage : 
     319                        totalprice += (jobsize * pageprice) 
     320                    else :     
     321                        for pageindex in range(jobsize) : 
     322                            try : 
     323                                usage = inkusage[pageindex] 
     324                            except IndexError :     
     325                                self.parent.tool.logdebug("No ink usage information. Using base cost of %f credits for page %i." % (pageprice, pageindex+1)) 
     326                                totalprice += pageprice 
     327                            else :     
     328                                coefficients = self.Printer.Coefficients 
     329                                for (ink, value) in usage.items() : 
     330                                    coefvalue = coefficients.get(ink, 1.0) 
     331                                    coefprice = (coefvalue * pageprice) / 100.0 
     332                                    inkprice = coefprice * value 
     333                                    self.parent.tool.logdebug("Applying coefficient %f for color %s (used at %f%% on page %i) to base cost %f gives %f" % (coefvalue, ink, value, pageindex+1, pageprice, inkprice)) 
     334                                    totalprice += coefprice 
    318335        if self.User.OverCharge != 1.0 : # TODO : beware of rounding errors 
    319336            overcharged = totalprice * self.User.OverCharge         
    320             self.parent.tool.logdebug("Overcharging %s by a factor of %s ===> User %s will be charged for %s units." % (totalprice, self.User.OverCharge, self.User.Name, overcharged)) 
     337            self.parent.tool.logdebug("Overcharging %s by a factor of %s ===> User %s will be charged for %s credits." % (totalprice, self.User.OverCharge, self.User.Name, overcharged)) 
    321338            return overcharged 
    322339        else :     
    323340            return totalprice 
    324341             
    325     def increasePagesUsage(self, jobsize) : 
     342    def increasePagesUsage(self, jobsize, inkusage=[]) : 
    326343        """Increase the value of used pages and money.""" 
    327         jobprice = self.computeJobPrice(jobsize) 
     344        jobprice = self.computeJobPrice(jobsize, inkusage) 
    328345        if jobsize : 
    329346            if jobprice : 
  • pykota/trunk/pykota/version.py

    r3025 r3036  
    2222# 
    2323 
    24 __version__ = "1.25alpha13_unofficial" 
     24__version__ = "1.25alpha14_unofficial" 
    2525 
    2626__doc__ = "PyKota : a complete Printing Quota Solution for CUPS."