コード例 #1
0
    def new_agent_code(self):
        from uber.models import PromoCode
        new_agent_code = PromoCode.generate_random_code()

        self.session.add(
            PromoCode(discount=0,
                      discount_type=PromoCode._FIXED_DISCOUNT,
                      code=new_agent_code))

        return new_agent_code
コード例 #2
0
ファイル: budget.py プロジェクト: magfest/ubersystem
    def generate_promo_codes(self, session, message='', **params):
        defaults = dict(
            is_single_promo_code=1,
            count=1,
            use_words=False,
            length=9,
            segment_length=3,
            code='',
            expiration_date=c.ESCHATON,
            discount_type=0,
            discount=10,
            uses_allowed=1,
            export=False)
        params = dict(defaults, **{k: v for k, v in params.items() if k in defaults})

        params['code'] = params['code'].strip()
        params['expiration_date'] = PromoCode.normalize_expiration_date(params['expiration_date'])

        try:
            params['count'] = int(params['count'])
        except Exception:
            params['count'] = 1

        try:
            params['is_single_promo_code'] = int(params['is_single_promo_code'])
        except Exception:
            params['is_single_promo_code'] = 0

        words = PromoCodeWord.group_by_parts_of_speech(
            session.query(PromoCodeWord).order_by(PromoCodeWord.normalized_word).all())

        result = dict(
            params,
            message=message,
            promo_codes=[],
            words=[(i, s) for (i, s) in words.items()])

        if cherrypy.request.method == 'POST':
            codes = None
            if params['is_single_promo_code']:
                params['count'] = 1
                if params['code']:
                    codes = [params['code']]

            if params['use_words'] and not codes and \
                    not any(s for (_, s) in words.items()):
                result['message'] = 'Please add some promo code words!'
                return result

            if not codes:
                if params['use_words']:
                    codes = PromoCode.generate_word_code(params['count'])
                else:
                    try:
                        length = int(params['length'])
                    except Exception:
                        length = 9
                    try:
                        segment_length = int(params['segment_length'])
                    except Exception:
                        segment_length = 3
                    codes = PromoCode.generate_random_code(
                        params['count'], length, segment_length)

            promo_codes = []
            for code in codes:
                params['code'] = code
                promo_codes.append(PromoCode().apply(params, restricted=False))

            message = check_all(promo_codes)
            if message:
                result['message'] = message
                return result

            result['promo_codes'] = session.bulk_insert(promo_codes)
            generated_count = len(result['promo_codes'])
            if generated_count <= 0:
                result['message'] = "Could not generate any of the requested " \
                    "promo codes. Perhaps they've all been taken already?"
                return result

            if generated_count != params['count']:
                result['message'] = 'Some of the requested promo codes could not be generated'

        if params['export']:
            return self.export_promo_codes(codes=result['promo_codes'])

        result.update(defaults)
        return result
コード例 #3
0
ファイル: budget.py プロジェクト: floraline/ubersystem
    def generate_promo_codes(self, session, message='', **params):
        defaults = dict(is_single_promo_code=1,
                        count=1,
                        use_words=False,
                        length=9,
                        segment_length=3,
                        code='',
                        expiration_date=c.ESCHATON,
                        discount_type=0,
                        discount=10,
                        uses_allowed=1)
        params = dict(defaults,
                      **{k: v
                         for k, v in params.items() if k in defaults})

        params['code'] = params['code'].strip()

        try:
            params['count'] = int(params['count'])
        except Exception:
            params['count'] = 1

        try:
            params['is_single_promo_code'] = int(
                params['is_single_promo_code'])
        except Exception:
            params['is_single_promo_code'] = 0

        words = PromoCodeWord.group_by_parts_of_speech(
            session.query(PromoCodeWord).order_by(
                PromoCodeWord.normalized_word).all())

        result = dict(params,
                      message=message,
                      promo_codes=[],
                      words=[(i, s) for (i, s) in words.items()])

        if cherrypy.request.method == 'POST':
            codes = None
            if params['is_single_promo_code']:
                params['count'] = 1
                if params['code']:
                    codes = [params['code']]

            if params['use_words'] and not codes and \
                    not any(s for (_, s) in words.items()):
                result['message'] = 'Please add some promo code words!'
                return result

            if not codes:
                if params['use_words']:
                    codes = PromoCode.generate_word_code(params['count'])
                else:
                    try:
                        length = int(params['length'])
                    except Exception:
                        length = 9
                    try:
                        segment_length = int(params['segment_length'])
                    except Exception:
                        segment_length = 3
                    codes = PromoCode.generate_random_code(
                        params['count'], length, segment_length)

            promo_codes = []
            for code in codes:
                params['code'] = code
                promo_codes.append(PromoCode().apply(params, restricted=False))

            message = check_all(promo_codes)
            if message:
                result['message'] = message
                return result

            result['promo_codes'] = session.bulk_insert(promo_codes)
            generated_count = len(result['promo_codes'])
            if generated_count <= 0:
                result['message'] = "Could not generate any of the requested " \
                    "promo codes. Perhaps they've all been taken already?"
                return result

            if generated_count != params['count']:
                result[
                    'message'] = 'Some of the requested promo codes could not be generated'

        if 'export' in params:
            return self.export_promo_codes(codes=result['promo_codes'])

        result.update(defaults)
        return result