Esempio n. 1
0
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)
Esempio n. 2
0
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,
                )
Esempio n. 3
0
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'
Esempio n. 4
0
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: