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
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
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