Exemple #1
0
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"类别必须为空"
Exemple #2
0
    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
Exemple #3
0
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
Exemple #4
0
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()
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
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
Exemple #8
0
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
Exemple #9
0
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)
Exemple #10
0
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'))
Exemple #11
0
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')))
Exemple #12
0
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
Exemple #13
0
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 '', '', ''
Exemple #14
0
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
Exemple #15
0
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 ''
Exemple #16
0
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
Exemple #17
0
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
Exemple #18
0
    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
Exemple #19
0
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
Exemple #20
0
    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
Exemple #21
0
def get_lookupvalues_by_lookup_id(uid):
    return LookupValue.find_all_by_lookup_id(uid)
Exemple #22
0
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]
Exemple #23
0
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])