57 | | def beginJob(self) : |
58 | | """Saves the computed job size.""" |
59 | | self.JobSize = self.computeJobSize() |
60 | | |
61 | | # get last job information for this printer |
62 | | if not printer.LastJob.Exists : |
63 | | # The printer hasn't been used yet, from PyKota's point of view |
64 | | self.LastPageCounter = 0 |
65 | | else : |
66 | | # get last job size and page counter from Quota Storage |
67 | | # Last lifetime page counter before actual job is |
68 | | # last page counter + last job size |
69 | | self.LastPageCounter = int(printer.LastJob.PrinterPageCounter or 0) + int(printer.LastJob.JobSize or 0) |
70 | | |
71 | | def endJob(self) : |
72 | | """Do nothing.""" |
73 | | pass |
74 | | |
75 | | def getJobSize(self) : |
76 | | """Returns the actual job size.""" |
77 | | try : |
78 | | return self.JobSize |
79 | | except AttributeError : |
80 | | return 0 |
81 | | |
82 | | def doAccounting(self, printer, user) : |
83 | | """Does print accounting by stupidly counting the 'showpage' postscript instructions in the document. |
84 | | |
85 | | This method is essentially unreliable, but shows how to create a simple accounter. |
86 | | """ |
87 | | # first we log a message because using this accounting method is not recommended. |
88 | | self.filter.logger.log_message(_("Using the 'stupid' accounting method is unreliable."), "warn") |
89 | | |
90 | | # get the job size |
91 | | jobsize = self.computeJobSize() * self.filter.copies |
92 | | |
93 | | # get last job information for this printer |
94 | | if not printer.LastJob.Exists : |
95 | | # The printer hasn't been used yet, from PyKota's point of view |
96 | | counterbeforejob = 0 |
97 | | else : |
98 | | # get last job size and page counter from Quota Storage |
99 | | # Last lifetime page counter before actual job is |
100 | | # last page counter + last job size |
101 | | counterbeforejob = int(printer.LastJob.PrinterPageCounter or 0) + int(printer.LastJob.JobSize or 0) |
102 | | |
103 | | # Is the current user allowed to print at all ? |
104 | | userpquota = self.filter.storage.getUserPQuota(user, printer) |
105 | | action = self.filter.warnUserPQuota(userpquota) |
106 | | |
107 | | # update the quota for the current user on this printer, if allowed to print |
108 | | if action == "DENY" : |
109 | | jobsize = 0 |
110 | | else : |
111 | | userpquota.increasePagesUsage(jobsize) |
112 | | |
113 | | # adds the current job to history |
114 | | jobprice = (float(printer.PricePerPage or 0.0) * jobsize) + float(printer.PricePerJob or 0.0) |
115 | | printer.addJobToHistory(self.filter.jobid, user, counterbeforejob, action, jobsize, jobprice, self.filter.preserveinputfile, self.filter.title, self.filter.copies, self.filter.options) |
116 | | |
117 | | return action |
118 | | |