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

Charging for ink usage, finally !

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • 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 :