def check_looupvalue(lookup_id, changevalues): from application.nutils.excel import safe_convert_unicode lookup_by_store_and_name = Lookup.get_description_by_store_id(lookup_id) description = lookup_by_store_and_name.description sections = LookupValue.find_all_by_lookup_id_by_order(lookup_id)[0] for changevalue in changevalues: value = changevalue['value'] if not value and not changevalue['orders'] and not changevalue[ 'section']: continue if not value: return u"此行%s必须有值" % description else: value = safe_convert_unicode(value) if LookupValue.find_value_in_lookupvalue_by_lookup_id_by_order_by_value( lookup_id, value): return u"%s已经存在" % value if not isinstance(changevalue['orders'], int): return u"次序必须是数值" if sections.section: if not changevalue['section']: return u"类别必须有值" else: if changevalue['section']: return u"类别必须为空"
def match_intent_level_lookups(store_ids): from application.models.hwaccount import HwjdAccount stores = HwjdAccount.find_all_stores() if store_ids: stores = filter(lambda s: unicode(s.store_id) in store_ids, stores) for store_config in stores: from application.models.lookup import Lookup isr_lookup = Lookup.find_by_name_and_store(store_config.store_id, 'intent-level') hwjd_lookupvalues = HwjdLookup.find_by_type(u'市场-级别') for index, item in enumerate(hwjd_lookupvalues): from application.models.lookup import LookupValue isr_lookupvalue = LookupValue() isr_lookupvalue.code = item.name isr_lookupvalue.value = item.name isr_lookupvalue.lookup_id = isr_lookup.id isr_lookupvalue.parent_id = -1 # order从10开始,按照10步进 isr_lookupvalue.order = 10 + index * 10 isr_lookupvalue.version = isr_lookup.version + 1 isr_lookupvalue.vendor_code = item.code isr_lookupvalue.vendor_value = item.name db.session.add(isr_lookupvalue) isr_lookup.version += 1
def generate_lookupvalue(lookup_ids, lookupvalues_data): ''' 1: copy age-group appt-type last-instore on lookupvalue 2: insert intent-car test-drive-car intent-color intent-level channel on lookupvalue ''' from application.models.base import db lookupvalue_age_groups = _age_groups(lookup_id=11) lookupvalue_appt_type = _age_groups(lookup_id=17) lookupvalue_last_instore = _age_groups(lookup_id=18) try: for copy_lookupvalue in [ lookupvalue_age_groups, lookupvalue_appt_type, lookupvalue_last_instore ]: for lookup_name, code, value, order in copy_lookupvalue: lookupvalue = LookupValue.create( code=code, value=value, lookup_id=lookup_ids[lookup_name], parent_id='-1', order=order, section=None, version='1') if lookupvalue is not None: db.session.add(lookupvalue) db.session.commit() except Exception as e: raise e try: for lookup_name_key in lookupvalues_data: order_count = 10 for code, value, section in lookupvalues_data[lookup_name_key]: lookupvalue = LookupValue.create( code=code, value=value, lookup_id=lookup_ids[lookup_name_key], parent_id='-1', order=order_count, section=section, version='1') if lookupvalue is not None: db.session.add(lookupvalue) order_count += 10 db.session.commit() except Exception as e: raise e return True
def lookupvalues_delete(lookupvalue_id): from application.models.lookup import Lookup from application.models.lookup import LookupValue lookupvalue = LookupValue.find(lookupvalue_id) version = lookupvalue.version LookupValue.update_version(lookupvalue.lookup_id, version, lookupvalue.id) Lookup.update_version(lookupvalue.lookup_id, version) lookup = Lookup.find(lookupvalue.lookup_id) from werkzeug.datastructures import ImmutableMultiDict request.args = ImmutableMultiDict(dict(store_filter=lookup.store_id, lookup_filter=lookup.id)) return lookupvalues()
def lookupvalues(): from application.forms.ops import LookupvalueForm from application.models.lookup import LookupValue selections = remove_empty_storename(get_stores_selection()) search_lookupvalue = LookupvalueForm(request.args) search_lookupvalue.store_filter.choices = selections lookup_id = request.args.get('lookup_filter', None) descriptions = get_stores_descriptions_and_lookupvalues(lookup_id) if search_lookupvalue.store_filter.data and search_lookupvalue.store_filter.data not in ('None', 'all'): store_id = search_lookupvalue.store_filter.data store_name = Store.find_storename_by_store_id(store_id).name from application.models.lookup import Lookup id_and_description = Lookup.get_descriptions_by_store_id(store_id) search_lookupvalue.lookup_filter.choices = [(lookup.id, lookup.description) for lookup in id_and_description] else: store_id = '' store_name = '' search_lookupvalue.lookup_filter.choices = {} if lookup_id and lookup_id is not None: lookupvalueslist = LookupValue.find_all_by_lookup_id_by_order(lookup_id) else: lookupvalueslist = [] return render_template('ops/lookupvalue.html', selected_menu=LOOKUPVALUE_MGMT_SUMMARY, form=search_lookupvalue, lookupvalues=lookupvalueslist, descriptions=descriptions, storename=store_name, lookup_id=lookup_id, store_id=store_id)
def get_lookup_values(): parent_id = request.args.get('parent_id', None) if parent_id is None: abort(400, description=gettext('parent_id is empty')) return LookupValue.find_all_by_parent_id(parent_id)
def get_car_stats_between_dates_in_stores(start, end, store_id, stats_names=None): intent_cars_dict = LookupValue.find_all_in_dict_by_lookup_name_of_store_from_cache( long(store_id), 'intent-car') data_per_category = {} for stats_name in stats_names: data_per_category[stats_name] = car_stats_meta.get(stats_name)( start, end, store_id) result = [] for code, value in intent_cars_dict.iteritems(): data = {} ignore = False for stats_name in stats_names: stats = data_per_category.get(stats_name).get(code, 0) if stats == 0: ignore = True continue data[stats_name] = stats if not ignore: stats = StoreStatsData() stats.category = value.value stats.data = data result.append(stats) return result
def update_car_series(mapper, connection, target): if target.ordered_car_id: lookupvalue_dict = LookupValue.find_all_in_dict_by_lookup_name_of_store_from_cache( long(target.store_id), 'intent-car') lookupvalue = lookupvalue_dict.get(target.ordered_car_id) if lookupvalue: target.ordered_car_name = lookupvalue.value target.ordered_car_series = lookupvalue.section
def get_lookupvalues_by_lookup_name(store_id, name): lookup = Lookup.find_by_name_and_store(store_id, name) if not lookup: abort(404, description=gettext(u'lookup with name %(name)s is not found', name=name)) return LookupValue.find_all_by_lookup_id(lookup.id)
def refresh_lookup(store_id): data = request.json if data is None or not data.get('name'): abort(400, description=gettext('invalid json request')) cache.delete_memoized( LookupValue.find_all_in_dict_by_lookup_name_of_store_from_cache, LookupValue, long(store_id), data.get('name')) return LookupValue.find_all_in_dict_by_lookup_name_of_store_from_cache( store_id, data.get('name'))
def edit(selected_menu, campaign=None): current_user = g.user store_id = get_or_set_store_id() from application.forms.campaign import CampaignForm form = None campaign_cars = [] if campaign: campaign_cars = campaign.related_cars.split(',') form = CampaignForm(obj=campaign) else: form = CampaignForm() lookup = Lookup.find_by_name_and_store(store_id, 'intent-car') if lookup: cars = LookupValue.find_all_by_lookup_id(lookup.id) form.related_cars.choices = [(car.code, car.value) for car in cars] if form.related_cars.choices is None: form.related_cars.choices = [] if request.method == 'GET': form.related_cars.data = campaign_cars if request.method == 'POST' and form.validate_on_submit(): if campaign is None: campaign = Campaign() campaign.store_id = store_id form.populate_obj(campaign) campaign.related_cars = u','.join(form.related_cars.data) campaign.save_and_flush() flash_success(gettext(u'campaign saved')) return redirect(url_for('campaigns.campaigns')) # form. # campaign = form.po # if form.validate_on_submit(): # json_r = uc_login(form.username.data, form.password.data) # # if json_r and json_r['status'] == 0 and get_user_type(json_r) == 6: # user = save_user_from_uc(json_r) # add_user(user) # return redirect(referer or url_for('user.dashboard')) # # flash_error(gettext(u'login failed')) return render_template('campaigns/edit.html', selected_menu=selected_menu, campaign=campaign, form=form, back_url=back_url(url_for('campaigns.campaigns')))
def lookup_str(value, store_id, lookup_name): if not value: return '' lookupvalue_dict = LookupValue.find_all_in_dict_by_lookup_name_of_store_from_cache( long(store_id), lookup_name) lookupvalue = lookupvalue_dict.get(value, None) if not lookupvalue: return '' elif lookupvalue == 'none': return u'无' else: return lookupvalue.value
def convert_car_code(store_id, isr_car_codes): car_codes = parse_comma_seperated_args(isr_car_codes) if car_codes and len(car_codes) > 0: car_code = car_codes[0] # use the first one lookups = LookupValue.find_all_in_dict_by_lookup_name_of_store_from_cache( long(store_id), 'intent-car') lookup = lookups.get(car_code) if lookup: return lookup.vendor_code, lookup.vendor_section, lookup.vendor_value return '', '', ''
def add_lookupvalue(lookup_id, version, changevalues): from application.models.base import db from application.nutils.excel import convert_value_to_code, safe_convert_unicode count = 0 try: for changevalue in changevalues: if not changevalue['value'] and not changevalue['orders']: continue lookupvalue = LookupValue.create( code=convert_value_to_code( safe_convert_unicode(changevalue['value'])), value=safe_convert_unicode(changevalue['value']), lookup_id=lookup_id, parent_id='-1', order=safe_convert_unicode(changevalue['orders']), section=safe_convert_unicode(changevalue['section']), version=version, ) db.session.add(lookupvalue) count += 1 db.session.commit() except Exception as e: raise e if count == 0: return count try: Lookup.update_version(lookup_id, version) LookupValue.update_version(lookup_id, version) db.session.commit() except Exception as e: raise e return count
def lookup_sections_by_codes(store_id, codes, lookup_name): from application.models.lookup import LookupValue lookupvalue_dict = LookupValue.find_all_in_dict_by_lookup_name_of_store_from_cache(long(store_id), lookup_name) if codes and codes.strip() and lookupvalue_dict and len(lookupvalue_dict) > 0: codes_arr = codes.split(',') sections = set() for code in codes_arr: lookupvalue = lookupvalue_dict.get(code, None) if lookupvalue and lookupvalue.section: sections.add(lookupvalue.section) if len(sections) > 0: return ','.join(sections) return ''
def get_unordered_customers_count_by_intent_level(start, end, store_id): uoc_stats = Reception.get_unordered_customers_count_by_intent_level_between_dates_in_store( start, end, store_id) uoc_stats = {s[1]: s[0] for s in uoc_stats} intent_levels_dict = LookupValue.find_all_in_dict_by_lookup_name_of_store_from_cache( long(store_id), 'intent-level') result = [] for code, value in intent_levels_dict.iteritems(): stats = uoc_stats.get(code, 0) if stats != 0: result.append((value.value, stats)) return result
def get_rx_customers_count_by_car_models(start, end, store_id): rx_customers_by_car = Reception.get_rx_customers_count_by_car_models_bwteeen_dates_in_stores( start, end, store_id) intent_cars_dict = LookupValue.find_all_in_dict_by_lookup_name_of_store_from_cache( long(store_id), 'intent-car') result = dict() for code, value in intent_cars_dict.iteritems(): count = 0 for stats in rx_customers_by_car: # need to calc count again since there would be multiple intent cars seperated by comma. if code in stats[1]: count += stats[0] if count > 0: result[code] = count return result
def match_intent_car_lookups(store_ids): from application.models.hwaccount import HwjdAccount stores = HwjdAccount.find_all_stores() if store_ids: stores = filter(lambda s: unicode(s.store_id) in store_ids, stores) for store_config in stores: hwjd_lookupvalues = HwjdLookup.find_by_make_models( store_config.make, store_config.models_array()) if hwjd_lookupvalues and len(hwjd_lookupvalues) > 0: from application.models.lookup import Lookup isr_lookup = Lookup.find_by_name_and_store( store_config.store_id, 'intent-car') for index, item in enumerate(hwjd_lookupvalues): # 六位的code证明这个值不是具体车型的值,不做mapping if len(item.code) > 6 and item.name != item.extra: from application.models.lookup import LookupValue isr_lookupvalue = LookupValue() # 没用用hwjd的code是因为在报表里, 有可能直接用code来做显示了 from application.utils import underscore_join_str isr_lookupvalue.code = u'%s_%s' % ( item.model, underscore_join_str(item.extra)) isr_lookupvalue.value = item.extra isr_lookupvalue.lookup_id = isr_lookup.id isr_lookupvalue.parent_id = -1 # order从10开始,按照10步进 isr_lookupvalue.order = 10 + index * 10 isr_lookupvalue.section = item.model isr_lookupvalue.version = isr_lookup.version + 1 isr_lookupvalue.vendor_code = item.code isr_lookupvalue.vendor_value = item.extra isr_lookupvalue.vendor_section = item.name db.session.add(isr_lookupvalue) isr_lookup.version += 1
def _age_groups(lookup_id): from application.models.base import db search_result = LookupValue.find_code_value_order_by_lookup_id_by_order( db.session, lookup_id) if len(search_result) == 0: return False return search_result
def convert_from_reception(cls, reception): hc = cls.find_by_reception_id(reception.id) if not hc: hc = cls() hc.reception_id = reception.id hc.customer_id = reception.customer_id hc.store_id = reception.store_id hc.uuid = str(uuid.uuid4()) customer = reception.customer from application.models.hwaccount import HwjdAccount hwjd_account = HwjdAccount.find_by_store_id(hc.store_id) hc.company_code = hwjd_account.org_code if hwjd_account else '' hc.created_date = reception.rx_date hc.intent_car_code, hc.intent_car_model, hc.intent_car_name = convert_car_code( hc.store_id, customer.intent_car_ids) hc.visit_type = convert_visit_type(reception.rx_type) hc.rx_start = reception.created_on.strftime(TIME_FORMAT_WO_SEC) hc.rx_end = (reception.created_on + timedelta( seconds=reception.rx_duration)).strftime(TIME_FORMAT_WO_SEC) hc.rx_duration = reception.rx_duration hc.rx_type = convert_rx_type(reception.rx_type) hc.channel = u'其他' hc.sales = reception.sales.username hc.intent_car_color = customer.intent_car_colors.split( ',')[0] if customer.intent_car_colors and len( customer.intent_car_colors) > 0 else '' hc.intent_order_date = None hc.budget = customer.budget hc.payment = customer.payment hc.purchase_type = convert_purchase_type(customer) hc.intent_level = LookupValue.get_vendor_code_by_code( customer.intent_level, hc.store_id, 'intent-level') hc.on_file = convert_boolean(customer.mobile and len(customer.mobile) >= 11) hc.has_trail = convert_boolean( customer.test_drive_car_ids and customer.test_drive_car_ids != 'none' and len(customer.test_drive_car_ids) > 0) hc.name = customer.respect_name hc.age_group = LookupValue.get_vendor_code_by_code( customer.channel, hc.store_id, 'age-group') hc.gender = customer.gender_str hc.mobile = customer.mobile if customer.mobile and customer.mobile != '000' else '' hc.has_order = convert_boolean( Order.has_valid_orders_by_customer(hc.customer_id)) hc.discount = '' hc.price = '' hc.gadgets_gift = u'否' hc.gadgets_purchase = u'否' hc.competing_car_brand = u'未定' hc.competing_car_name = u'未定' hc.used_car_model = u'无' hc.remark = customer.remark from application.models.customer import CustomerAddlInfo addl_info = CustomerAddlInfo.find_by_customer_id(reception.customer_id) if addl_info: hc.purpose = addl_info.purpose hc.industry = addl_info.industry hc.district = addl_info.district hc.dealership = addl_info.dealership hc.used_car_value = addl_info.used_car_value hc.has_used_car_assess = addl_info.has_used_car_assessed return hc
def get_lookupvalues_by_lookup_id(uid): return LookupValue.find_all_by_lookup_id(uid)
def get_selections_by_lookup_name(store_id, lookup_name): from application.models.lookup import LookupValue lookupvalues_list = LookupValue.find_all_in_dict_by_lookup_name_of_store_from_cache( long(store_id), lookup_name).values() lookupvalues_list.sort(key=lambda value: value.id) return [(value.code, value.value) for value in lookupvalues_list]
def get_lookup_values_by_store(store_id): ids = Lookup.get_all_store_ids(store_id) return LookupValue.find_all_by_lookup_ids([id.id for id in ids])