def join_uio_printerquotas(old_id, new_id): # Delayed import in case module is not installed from Cerebrum.modules.no.uio.printer_quota import PaidPrinterQuotas from Cerebrum.modules.no.uio.printer_quota import PPQUtil pq_util = PPQUtil.PPQUtil(db) if not pq_util.join_persons(old_id, new_id): return # No changes done, so no more work needed ppq = PaidPrinterQuotas.PaidPrinterQuotas(db) # Assert that user hasn't received a free quota more than once term_init_prefix = PPQUtil.get_term_init_prefix(*time.localtime()[0:3]) free_this_term = {} # Now figure out if the user has been granted the same free-quota # twice, and if so, undo the duplicate(s) for row in ppq.get_history_payments( transaction_type=co.pqtt_quota_fill_free, desc_mask=term_init_prefix + '%%', person_id=new_id, order_by_job_id=True): free_this_term[int(row['job_id'])] = row['description'] logger.debug("Free this_term: %s" % free_this_term) for row in ppq.get_history_payments(transaction_type=co.pqtt_undo, person_id=new_id, order_by_job_id=True): if int(row['target_job_id']) in free_this_term: del free_this_term[int(row['target_job_id'])] logger.debug("... removed already undone: %s" % free_this_term) tmp = {} for job_id, desc in free_this_term.items(): tmp.setdefault(desc, []).append(job_id) logger.debug("Potential duplicates: %s" % tmp) for desc, job_ids in tmp.items(): if len(job_ids) > 1: for job_id in job_ids[1:]: logger.debug("Undoing pq_job_id %i" % job_id) pq_util.undo_transaction( new_id, job_id, '', 'Join-persons resulted in duplicate free quota', update_program='join_persons', ignore_transaction_type=True)
def join_uio_printerquotas(old_id, new_id): # Delayed import in case module is not installed from Cerebrum.modules.no.uio.printer_quota import PaidPrinterQuotas from Cerebrum.modules.no.uio.printer_quota import PPQUtil pq_util = PPQUtil.PPQUtil(db) if not pq_util.join_persons(old_id, new_id): return # No changes done, so no more work needed ppq = PaidPrinterQuotas.PaidPrinterQuotas(db) # Assert that user hasn't received a free quota more than once term_init_prefix = PPQUtil.get_term_init_prefix(*time.localtime()[0:3]) free_this_term = {} # Now figure out if the user has been granted the same free-quota # twice, and if so, undo the duplicate(s) for row in ppq.get_history_payments( transaction_type=co.pqtt_quota_fill_free, desc_mask=term_init_prefix + "%%", person_id=new_id, order_by_job_id=True, ): free_this_term[int(row["job_id"])] = row["description"] logger.debug("Free this_term: %s" % free_this_term) for row in ppq.get_history_payments(transaction_type=co.pqtt_undo, person_id=new_id, order_by_job_id=True): if int(row["target_job_id"]) in free_this_term: del free_this_term[int(row["target_job_id"])] logger.debug("... removed already undone: %s" % free_this_term) tmp = {} for job_id, desc in free_this_term.items(): tmp.setdefault(desc, []).append(job_id) logger.debug("Potential duplicates: %s" % tmp) for desc, job_ids in tmp.items(): if len(job_ids) > 1: for job_id in job_ids[1:]: logger.debug("Undoing pq_job_id %i" % job_id) pq_util.undo_transaction( new_id, job_id, "", "Join-persons resulted in duplicate free quota", update_program="join_persons", ignore_transaction_type=True, )
person = Person.Person(db) logger = Factory.get_logger("cronjob") pq_logger = bofhd_pq_utils.SimpleLogger('pq_bofhd.log') processed_pids = {} utv_quota = 250 utv_person = {} # term_init_mask brukes til å identifisere de kvotetildelinger som har # skjedde i dette semesteret. Den definerer også tidspunktet da # forrige-semesters gratis-kvote nulles, og ny initiell kvote # tildeles. # All PQ_DATES has the format month, day. Date is inclusive require_kopipenger = True term_init_prefix = PPQUtil.get_term_init_prefix(*time.localtime()[0:3]) require_kopipenger = not PPQUtil.is_free_period(*time.localtime()[0:3]) def set_quota(person_id, has_quota=False, has_blocked_quota=False, quota=None): logger.debug("set_quota(%i, has=%i, blocked=%i)" % ( person_id, has_quota, has_blocked_quota)) processed_pids[int(person_id)] = True if quota is None: quota = [] # Opprett pquota_status entry m/riktige has_*quota settinger try: ppq_info = ppq.find(person_id) new_has = has_quota and 'T' or 'F' new_blocked = has_blocked_quota and 'T' or 'F'
person = Person.Person(db) logger = Factory.get_logger("cronjob") pq_logger = bofhd_pq_utils.SimpleLogger('pq_bofhd.log') processed_pids = {} utv_quota = 250 utv_person = {} # term_init_mask brukes til å identifisere de kvotetildelinger som har # skjedde i dette semesteret. Den definerer også tidspunktet da # forrige-semesters gratis-kvote nulles, og ny initiell kvote # tildeles. # All PQ_DATES has the format month, day. Date is inclusive require_kopipenger = True term_init_prefix = PPQUtil.get_term_init_prefix(*time.localtime()[0:3]) require_kopipenger = not PPQUtil.is_free_period(*time.localtime()[0:3]) def set_quota(person_id, has_quota=False, has_blocked_quota=False, quota=None): logger.debug("set_quota(%i, has=%i, blocked=%i)" % (person_id, has_quota, has_blocked_quota)) processed_pids[int(person_id)] = True if quota is None: quota = [] # Opprett pquota_status entry m/riktige has_*quota settinger try: ppq_info = ppq.find(person_id) new_has = has_quota and 'T' or 'F' new_blocked = has_blocked_quota and 'T' or 'F' if ppq_info['has_quota'] != new_has: