Changeset 3036 for pykota/trunk/pykota
- Timestamp:
- 10/13/06 23:51:14 (18 years ago)
- Location:
- pykota/trunk/pykota
- Files:
-
- 4 modified
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/pykota/accounter.py
r3000 r3036 45 45 self.isSoftware = 1 # by default software accounting 46 46 self.isPreAccounter = ispreaccounter 47 self.inkUsage = [] 47 48 48 49 def getLastPageCounter(self) : -
pykota/trunk/pykota/accounters/ink.py
r3034 r3036 42 42 # know the result. 43 43 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 ! 45 46 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 47 51 colorspace = colorspace.lower() 48 52 if colorspace not in ("cmyk", "bw", "cmy", "rgb") : … … 57 61 58 62 jobsize = 0 59 self.inkUsage = []60 63 if self.filter.JobSizeBytes : 61 64 try : -
pykota/trunk/pykota/storage.py
r3033 r3036 308 308 self.isDirty = True 309 309 310 def computeJobPrice(self, jobsize ) :310 def computeJobPrice(self, jobsize, inkusage=[]) : 311 311 """Computes the job price as the sum of all parent printers' prices + current printer's ones.""" 312 312 totalprice = 0.0 … … 314 314 if self.User.OverCharge != 0.0 : # optimization, but TODO : beware of rounding errors 315 315 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 318 335 if self.User.OverCharge != 1.0 : # TODO : beware of rounding errors 319 336 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)) 321 338 return overcharged 322 339 else : 323 340 return totalprice 324 341 325 def increasePagesUsage(self, jobsize ) :342 def increasePagesUsage(self, jobsize, inkusage=[]) : 326 343 """Increase the value of used pages and money.""" 327 jobprice = self.computeJobPrice(jobsize )344 jobprice = self.computeJobPrice(jobsize, inkusage) 328 345 if jobsize : 329 346 if jobprice : -
pykota/trunk/pykota/version.py
r3025 r3036 22 22 # 23 23 24 __version__ = "1.25alpha1 3_unofficial"24 __version__ = "1.25alpha14_unofficial" 25 25 26 26 __doc__ = "PyKota : a complete Printing Quota Solution for CUPS."