예제 #1
0
 def validate(self):
     if Form.validate(self):
         if not self.estimate_num.hidden:
             if self.ad_type.data == AD_TYPE_NORMAL:
                 if self.max_order_num.data > self.estimate_num.data:
                     self.max_order_num.errors.append(
                         u"最大预订不能大于预估量(如果新添加了广告单元, 请先保存, 然后根据计算所得调整)")
                     return False
             elif self.ad_type.data == AD_TYPE_CPD:
                 if self.cpd_num.data > self.estimate_num.data:
                     self.cpd_num.errors.append(u"CPD量不能大于预估量")
                     return False
         units = AdUnit.gets(self.units.data)
         medium = Medium.get(self.medium.data)
         if not units:
             self.units.errors.append(u"所含广告单元不能为空")
             return False
         for u in units:
             if u.medium != medium:
                 self.units.errors.append(u"%s不属于%s" %
                                          (u.display_name, medium.name))
                 return False
         return True
     else:
         return False
예제 #2
0
파일: medium.py 프로젝트: giveme168/braavos
 def validate(self):
     if Form.validate(self):
         if not self.estimate_num.hidden:
             if self.ad_type.data == AD_TYPE_NORMAL:
                 if self.max_order_num.data > self.estimate_num.data:
                     self.max_order_num.errors.append(
                         u"最大预订不能大于预估量(如果新添加了广告单元, 请先保存, 然后根据计算所得调整)")
                     return False
             elif self.ad_type.data == AD_TYPE_CPD:
                 if self.cpd_num.data > self.estimate_num.data:
                     self.cpd_num.errors.append(u"CPD量不能大于预估量")
                     return False
         units = AdUnit.gets(self.units.data)
         medium = Medium.get(self.medium.data)
         if not units:
             self.units.errors.append(u"所含广告单元不能为空")
             return False
         for u in units:
             if u.medium != medium:
                 self.units.errors.append(
                     u"%s不属于%s" % (u.display_name, medium.name))
                 return False
         return True
     else:
         return False
예제 #3
0
def new_position():
    form = PositionForm(request.form)
    form.estimate_num.hidden = True
    form.cpd_num.hidden = True
    form.max_order_num.hidden = True
    # the medium and size field will be set value at the same time: any data post to server side
    if form.medium.data and form.size.data:
        form_size = AdSize.get(form.size.data)
        form.units.choices = [(x.id, x.display_name)
                              for x in AdUnit.query.filter_by(
                                  medium_id=form.medium.data, size=form_size)]
    if request.method == 'POST' and form.validate():
        ad_position = AdPosition.add(name=form.name.data,
                                     description=form.description.data,
                                     size=AdSize.get(form.size.data),
                                     standard=form.standard.data,
                                     status=form.status.data,
                                     medium=Medium.get(form.medium.data),
                                     level=form.level.data,
                                     ad_type=form.ad_type.data,
                                     launch_strategy=form.launch_strategy.data,
                                     price=form.price.data)
        ad_position.units = AdUnit.gets(form.units.data)
        ad_position.cpd_num = sum([x.estimate_num for x in ad_position.units])
        ad_position.max_order_num = sum(
            [x.estimate_num for x in ad_position.units])
        ad_position.save()
        flash(u'新建展示位置成功!', 'success')
        return redirect(
            url_for("medium.position_detail", position_id=ad_position.id))
    return tpl('position.html', form=form, title=u"新建展示位置")
예제 #4
0
파일: export.py 프로젝트: giveme168/braavos
def get_export_units(_date):
    """广告单元索引信息,(订单项, 单元尺寸)"""
    ret = {}
    for u in AdUnit.all():
        items = [str(i.id) for i in u.online_order_items_by_date(_date)]
        if items:
            ret[str(u.id)] = unit_info(u, items)
    return ret
예제 #5
0
def add_unit(name, estimate_num, medium=None, size=None):
    size = size or add_size(300, 50)
    medium = medium or add_medium(TEST_MEDIUM)
    unit = AdUnit.add(
        name=name, description='', size=size,
        margin='', target=0, status=1, medium=medium,
        estimate_num=estimate_num)
    return unit
예제 #6
0
def position_detail(position_id):
    position = AdPosition.get(position_id)
    if not position:
        abort(404)
    form = PositionForm(request.form)
    form.units.choices = [(x.id, x.display_name)
                          for x in position.suitable_units]

    if request.method == 'POST':
        if form.validate():
            position.name = form.name.data
            position.description = form.description.data
            position.size = AdSize.get(form.size.data)
            position.standard = form.standard.data
            position.status = form.status.data
            position.units = AdUnit.gets(form.units.data)
            position.medium = Medium.get(form.medium.data)
            position.level = form.level.data
            position.ad_type = form.ad_type.data
            position.cpd_num = form.cpd_num.data
            position.max_order_num = form.max_order_num.data
            position.price = form.price.data
            position.launch_strategy = form.launch_strategy.data
            position.save()
            flash(u'保存成功!', 'success')
        else:
            flash(u'保存失败!', 'danger')
        return tpl('position.html',
                   form=form,
                   title=position.display_name,
                   position=position)
    else:
        form.name.data = position.name
        form.description.data = position.description
        form.size.data = position.size.id
        form.standard.data = position.standard
        form.status.data = position.status
        form.units.data = [x.id for x in position.units]
        form.medium.data = position.medium.id
        form.level.data = position.level
        form.ad_type.data = position.ad_type
        form.cpd_num.data = position.cpd_num or 0
        form.max_order_num.data = position.max_order_num
        form.price.data = position.price
        form.estimate_num.data = position.estimate_num
        form.launch_strategy.data = position.launch_strategy
        form.estimate_num.readonly = True
        sortby = request.args.get('sortby', '')
        orderby = request.args.get('orderby', '')
        reverse = orderby != 'asc'
        items = [o for o in position.order_items]
        schedules = AdItem.items_sort_scheduels(items, sortby, reverse)
    return tpl('position.html',
               form=form,
               title=position.display_name,
               position=position,
               schedules=schedules,
               orderby=orderby)
예제 #7
0
파일: medium.py 프로젝트: giveme168/braavos
 def __init__(self, *args, **kwargs):
     super(PositionForm, self).__init__(*args, **kwargs)
     self.status.choices = STATUS_CN.items()
     self.size.choices = [(x.id, x.name) for x in AdSize.all()]
     self.medium.choices = [(x.id, x.name) for x in Medium.all()]
     self.level.choices = POSITION_LEVEL_CN.items()
     self.ad_type.choices = AD_TYPE_CN.items()
     self.units.choices = [(x.id, x.display_name) for x in AdUnit.all()]
     self.estimate_num.readonly = True
     self.estimate_num.hidden = False
     self.launch_strategy.choices = LAUNCH_STRATEGY.items()
예제 #8
0
def unit_detail(unit_id):
    unit = AdUnit.get(unit_id)
    if not unit:
        abort(404)
    form = UnitForm(request.form)

    if request.method == 'POST':
        if form.validate():
            unit.name = form.name.data
            unit.description = form.description.data
            unit.size = AdSize.get(form.size.data)
            unit.margin = form.margin.data
            unit.target = form.target.data
            unit.status = form.status.data
            unit.positions = AdPosition.gets(form.positions.data)
            unit.medium = Medium.get(form.medium.data)
            unit.estimate_num = form.estimate_num.data
            unit.save()
            flash(u'保存成功!', 'success')

        if form.medium.data:
            form.positions.choices = [
                (x.id, x.display_name)
                for x in AdPosition.query.filter_by(medium_id=form.medium.data)
            ]
            return tpl('unit.html',
                       form=form,
                       title=unit.display_name,
                       unit=unit)
    else:
        form.name.data = unit.name
        form.description.data = unit.description
        form.size.data = unit.size.id
        form.margin.data = unit.margin
        form.target.data = unit.target
        form.status.data = unit.status
        form.positions.data = [x.id for x in unit.positions]
        form.positions.choices = [
            (x.id, x.display_name)
            for x in AdPosition.query.filter_by(medium_id=unit.medium.id)
        ]
        form.medium.data = unit.medium.id
        form.estimate_num.data = unit.estimate_num
        sortby = request.args.get('sortby', '')
        orderby = request.args.get('orderby', '')
        reverse = orderby != 'asc'
        items = [o for o in unit.order_items]
        schedules = AdItem.items_sort_scheduels(items, sortby, reverse)
    return tpl('unit.html',
               form=form,
               title=unit.display_name,
               unit=unit,
               schedules=schedules,
               orderby=orderby)
예제 #9
0
 def __init__(self, *args, **kwargs):
     super(PositionForm, self).__init__(*args, **kwargs)
     self.status.choices = STATUS_CN.items()
     self.size.choices = [(x.id, x.name) for x in AdSize.all()]
     self.medium.choices = [(x.id, x.name) for x in Medium.all()]
     self.level.choices = POSITION_LEVEL_CN.items()
     self.ad_type.choices = AD_TYPE_CN.items()
     self.units.choices = [(x.id, x.display_name) for x in AdUnit.all()]
     self.estimate_num.readonly = True
     self.estimate_num.hidden = False
     self.launch_strategy.choices = LAUNCH_STRATEGY.items()
예제 #10
0
def unit_to_position(unit_id):
    unit = AdUnit.get(unit_id)
    form = PositionForm(request.form)
    form.estimate_num.hidden = True
    form.cpd_num.hidden = True
    form.max_order_num.hidden = True
    form.medium.hidden = True
    form.units.hidden = True

    if request.method == 'POST':
        if form.validate():
            position = AdPosition.add(name=form.name.data,
                                      description=form.description.data,
                                      size=AdSize.get(form.size.data),
                                      standard=form.standard.data,
                                      status=form.status.data,
                                      medium=Medium.get(form.medium.data),
                                      level=form.level.data,
                                      ad_type=form.ad_type.data,
                                      price=form.price.data)
            position.units = AdUnit.gets(form.units.data)
            position.cpd_num = sum([x.estimate_num for x in position.units])
            position.max_order_num = sum(
                [x.estimate_num for x in position.units])
            position.save()
            return redirect(
                url_for("medium.position_detail", position_id=position.id))
    else:
        form.name.data = unit.name
        form.description.data = unit.description
        form.medium.data = unit.medium.id
        form.size.data = unit.size.id
        form.status.data = unit.status
        form.units.data = [unit.id]

    form.size.hidden = True
    return tpl('position.html',
               form=form,
               title=u"创建广告单元(%s)对应的展示位置" % unit.name)
예제 #11
0
def new_unit():
    form = UnitForm(request.form)

    if form.medium.data:
        form.positions.choices = [
            (x.id, x.display_name)
            for x in AdPosition.query.filter_by(medium_id=form.medium.data)
        ]

    if request.method == 'POST' and form.validate():
        adUnit = AdUnit.add(name=form.name.data,
                            description=form.description.data,
                            size=AdSize.get(form.size.data),
                            margin=form.margin.data,
                            target=form.target.data,
                            status=form.status.data,
                            medium=Medium.get(form.medium.data),
                            estimate_num=form.estimate_num.data)
        adUnit.positions = AdPosition.gets(form.positions.data)
        adUnit.save()
        return redirect(url_for("medium.unit_to_position", unit_id=adUnit.id))
    return tpl('unit.html', form=form, title=u"新建广告单元")
예제 #12
0
def units():
    units = AdUnit.all()
    return tpl('units.html', units=units)
예제 #13
0
def test_unit(session):
    unit = add_unit('testunit', 300)

    unit2 = AdUnit.get(unit.id)
    assert unit2.name == 'testunit'
    assert unit2.estimate_num == 300