Example #1
0
def outsource():
    if not (g.user.is_leader() or g.user.is_super_leader()):
        abort(403)
    orders = list(ClientOrder.all())
    orders += list(DoubanOrder.all())
    orders = [k for k in orders if k.status == 1]
    search_info = request.values.get('search_info', '')
    location = int(request.values.get('location', 0))
    if search_info:
        orders = [
            k for k in orders
            if search_info.lower().strip() in k.search_info.lower()
        ]
    if location:
        orders = [k for k in orders if location in k.locations]
    if g.user.team.type == TEAM_TYPE_LEADER:
        orders = [
            o for o in orders
            if g.user.location in o.locations and o.get_outsources_by_status(1)
        ]
    elif g.user.team.type == TEAM_TYPE_SUPER_LEADER:
        orders = [o for o in orders if o.get_outsources_by_status(5)]
    if g.user.is_super_admin():
        orders = [
            o for o in orders
            if o.get_outsources_by_status(5) or o.get_outsources_by_status(1)
        ]
    return tpl('/manage/apply/order.html',
               title=u'外包费用报备审批',
               orders=orders,
               search_info=search_info,
               location=location,
               a_type="outsource")
Example #2
0
def back_invoice(order_id):
    if not g.user.is_finance():
        abort(404)
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    if request.method == 'POST':
        money = float(request.values.get('money', 0))
        back_time = request.values.get(
            'back_time',
            datetime.date.today().strftime('%Y-%m-%d'))
        num = request.values.get('num', '')
        bm = BackInvoiceRebate.add(
            douban_order=order,
            money=money,
            back_time=back_time,
            num=num,
            create_time=datetime.date.today().strftime('%Y-%m-%d'))
        bm.save()
        apply_context = {
            'order': order,
            'num': money,
            'type': 'invoice',
        }
        back_money_apply_signal.send(current_app._get_current_object(),
                                     apply_context=apply_context)
        flash(u'返点发票信息保存成功!', 'success')
        order.add_comment(g.user,
                          u"更新了返点发票信息,发票金额: %s; 发票时间: %s; 发票号: %s;" %
                          (money, back_time, num),
                          msg_channel=4)
        return redirect(
            url_for("finance_douban_order_back_money.back_money",
                    order_id=order.id))
    return tpl('/finance/douban_order/back_money/info.html', order=order)
Example #3
0
def order_info():
    now_year = int(request.values.get('year', datetime.datetime.now().year))
    outsources = [_target_outsource_to_dict(
        k, 'client_order') for k in OutSource.all()]
    outsources += [_target_outsource_to_dict(k, 'douban_order')
                   for k in DoubanOutSource.all()]
    outsources = [k for k in outsources if k]
    orders = [k for k in ClientOrder.all() if (k.client_start.year ==
                                               now_year or k.client_end.year == now_year) and k.status == 1]
    orders += [k for k in DoubanOrder.all() if (k.client_start.year ==
                                                now_year or k.client_end.year == now_year) and k.status == 1]
    order_obj = []
    for k in orders:
        order_dict = {}
        if k.__tablename__ == 'bra_client_order':
            order_dict['outsource_obj'] = [o for o in outsources if o[
                'order_type'] == 'client_order' and o['order_id'] == k.id]
        else:
            order_dict['outsource_obj'] = [o for o in outsources if o[
                'order_type'] == 'douban_order' and o['order_id'] == k.id]
        order_dict['contract'] = k.contract
        order_dict['campaign'] = k.campaign
        order_dict['money'] = k.money
        order_dict['locations_cn'] = k.locations_cn
        order_dict['outsources_sum'] = k.outsources_sum
        order_dict['outsources_percent'] = k.outsources_percent
        order_dict['outsources_paied_sum'] = k.outsources_paied_sum_by_shenji('all')
        if order_dict['outsource_obj']:
            order_obj.append(order_dict)
    if request.values.get('action', '') == 'download':
        return write_outsource_order_info_excel(order_obj)
    return tpl('/data_query/outsource/order_info.html', orders=order_obj, now_year=now_year)
Example #4
0
def update(order_id, oid):
    if not (g.user.is_super_leader() or g.user.is_finance()
            or g.user.is_operater_leader()):
        abort(403)
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    company = request.values.get('company', '')
    money = request.values.get('money', 0)
    invoice = request.values.get('invoice', '')
    type = int(request.values.get('type', 1))
    on_time = request.values.get('on_time', datetime.datetime.today())
    other_cost = OtherCost.get(oid)
    other_cost.company = company
    other_cost.douban_order_order = order
    other_cost.money = money
    other_cost.invoice = invoice
    other_cost.type = type
    other_cost.on_time = on_time
    other_cost.save()
    order.add_comment(
        g.user,
        u"更新了外包,公司:%s ; 金额:%s ; 发票:%s ; 类型:%s ; 发生时间:%s" %
        (other_cost.company, str(other_cost.money), other_cost.invoice,
         other_cost.type_cn, other_cost.on_time_cn),
        msg_channel=10)
    return redirect(
        url_for('saler_douban_order_other_cost.index', order_id=order_id))
Example #5
0
def index():
    if not g.user.is_super_leader():
        abort(403)
    salers = User.sales()
    if request.method == 'POST':
        f_saler = int(request.values.get('f_saler', 0))
        t_saler = int(request.values.get('t_saler', 0))
        if not f_saler or not t_saler:
            flash(u'请选择正确的员工', 'danger')
            return tpl('/account/turnover/index.html', salers=salers)
        f_user = User.get(f_saler)
        t_user = User.get(t_saler)
        client_orders = ClientOrder.all()
        douban_orders = DoubanOrder.all()
        for k in client_orders:
            if f_user in k.salers and t_user not in k.replace_sales:
                k.replace_sales = k.replace_sales + [t_user]
                k.save()
            if k.creator == f_user and t_user not in k.replace_sales:
                k.replace_sales = k.replace_sales + [t_user]
                k.save()
        for k in douban_orders:
            if f_user in k.salers and t_user not in k.replace_sales:
                k.replace_sales = k.replace_sales + [t_user]
                k.save()
            if k.creator == f_user and t_user not in k.replace_sales:
                k.replace_sales = k.replace_sales + [t_user]
                k.save()
        flash(u'成功', 'success')
    return tpl('/account/turnover/index.html', salers=salers)
Example #6
0
def index():
    if not g.user.is_super_leader():
        abort(403)
    salers = User.sales()
    if request.method == 'POST':
        f_saler = int(request.values.get('f_saler', 0))
        t_saler = int(request.values.get('t_saler', 0))
        if not f_saler or not t_saler:
            flash(u'请选择正确的员工', 'danger')
            return tpl('/account/turnover/index.html', salers=salers)
        f_user = User.get(f_saler)
        t_user = User.get(t_saler)
        client_orders = ClientOrder.all()
        douban_orders = DoubanOrder.all()
        for k in client_orders:
            if f_user in k.salers and t_user not in k.replace_sales:
                k.replace_sales = k.replace_sales + [t_user]
                k.save()
            if k.creator == f_user and t_user not in k.replace_sales:
                k.replace_sales = k.replace_sales + [t_user]
                k.save()
        for k in douban_orders:
            if f_user in k.salers and t_user not in k.replace_sales:
                k.replace_sales = k.replace_sales + [t_user]
                k.save()
            if k.creator == f_user and t_user not in k.replace_sales:
                k.replace_sales = k.replace_sales + [t_user]
                k.save()
        flash(u'成功', 'success')
    return tpl('/account/turnover/index.html', salers=salers)
Example #7
0
def back_money(order_id):
    if not g.user.is_finance():
        abort(404)
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    if request.method == 'POST':
        money = float(request.values.get('money', 0))
        back_time = request.values.get(
            'back_time',
            datetime.date.today().strftime('%Y-%m-%d'))
        back_money_status = request.values.get('back_money_status', '')
        if back_money_status != '':
            if int(back_money_status) == 0:
                order.back_money_status = int(back_money_status)
                order.save()
                flash(u'完成所有回款!', 'success')
                order.add_comment(g.user, u"完成所有回款", msg_channel=4)
                apply_context = {
                    'order': order,
                    'num': 0,
                    'type': 'end',
                }
                back_money_apply_signal.send(current_app._get_current_object(),
                                             apply_context=apply_context)
            elif int(back_money_status) == -1:
                order.back_money_status = int(back_money_status)
                order.save()
                flash(u'该项目为划账!', 'success')
                order.add_comment(g.user, u"坏账项目", msg_channel=4)
                apply_context = {
                    'order': order,
                    'num': -1,
                    'type': 'end',
                }
                back_money_apply_signal.send(current_app._get_current_object(),
                                             apply_context=apply_context)
        else:
            bm = BackMoney.add(
                douban_order=order,
                money=money,
                back_time=back_time,
                create_time=datetime.date.today().strftime('%Y-%m-%d'))
            bm.save()
            apply_context = {
                'order': order,
                'num': money,
                'type': 'money',
            }
            back_money_apply_signal.send(current_app._get_current_object(),
                                         apply_context=apply_context)
            flash(u'回款信息保存成功!', 'success')
            order.add_comment(g.user,
                              u"更新了回款信息,回款金额: %s; 回款时间: %s;" %
                              (money, back_time),
                              msg_channel=4)
        return redirect(
            url_for("finance_douban_order_back_money.back_money",
                    order_id=order.id))
    return tpl('/finance/douban_order/back_money/info.html', order=order)
Example #8
0
def new_douban_outsource():
    form = DoubanOutsourceForm(request.form)
    order = DoubanOrder.get(form.douban_order.data)
    try:
        int(form.num.data)
    except:
        flash(u'保存失败,金额必须为数字!', 'danger')
        return redirect(url_for("outsource.douban_outsources", order_id=order.id))
    status = 0
    if g.user.is_super_leader():
        status = 2
    outsource = DoubanOutSource.add(target=OutSourceTarget.get(form.target.data),
                                    douban_order=order,
                                    num=form.num.data,
                                    type=form.type.data,
                                    subtype=form.subtype.data,
                                    remark=form.remark.data,
                                    invoice=False,
                                    status=status,
                                    pay_num=form.num.data)
    flash(u'新建外包成功!', 'success')
    outsource.douban_order.add_comment(g.user,
                                       u"""新建外包:\n\r %s""" % outsource.name,
                                       msg_channel=2)
    if g.user.is_super_leader():
        _insert_executive_report(order, rtype='reload')
    return redirect(outsource.info_path())
Example #9
0
def back_invoice(order_id):
    if not (g.user.is_contract() or g.user.is_finance()):
        abort(404)
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    if request.method == 'POST':
        money = float(request.values.get('money', 0))
        back_time = request.values.get(
            'back_time', datetime.date.today().strftime('%Y-%m-%d'))
        num = request.values.get('num', '')
        bm = BackInvoiceRebate.add(
            douban_order=order,
            money=money,
            back_time=back_time,
            num=num,
            create_time=datetime.date.today().strftime('%Y-%m-%d'))
        bm.save()
        apply_context = {
            'order': order,
            'num': money,
            'type': 'invoice',
        }
        back_money_apply_signal.send(
            current_app._get_current_object(), apply_context=apply_context)
        flash(u'返点发票信息保存成功!', 'success')
        order.add_comment(
            g.user, u"更新了返点发票信息,发票金额: %s; 发票时间: %s; 发票号: %s;" % (money, back_time, num), msg_channel=4)
        return redirect(url_for("saler_douban_order_back_money.back_money", order_id=order.id))
    return tpl('/saler/douban_order/back_money/index.html', order=order)
Example #10
0
def douban_orders_distribute():
    if request.method == 'POST':
        order_id = request.values.get('order_id', '')
        operator = request.values.get('operater_ids', '')
        order = DoubanOrder.get(order_id)
        if operator:
            operater_users = User.gets(operator.split(','))
            to_users = operater_users
            order.operaters = operater_users
        else:
            order.operaters = []
            to_users = []
        order.save()
        if to_users:
            context = {"to_users": to_users + [g.user],
                       "operater_users": operater_users,
                       "action_msg": u'分配执行人员',
                       "info": '',
                       "order": order}
            outsource_distribute_signal.send(
                current_app._get_current_object(), context=context)
        return redirect(url_for('outsource.douban_orders_distribute'))

    orders = [k for k in DoubanOrder.query.all() if k.contract != '']
    operaters = User.gets_by_team_type(
        TEAM_TYPE_OPERATER) + User.gets_by_team_type(TEAM_TYPE_OPERATER_LEADER)
    return display_orders(orders, 'douban_orders_distribute.html', title=u"直签豆瓣订单分配", operaters=operaters)
Example #11
0
def index(order_id):
    if not (g.user.is_super_leader() or g.user.is_finance() or g.user.is_aduit() or g.user.is_operater_leader()):
        abort(403)
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    return tpl('/saler/douban_order/other_cost/index.html', order=order)
Example #12
0
def update(order_id, oid):
    if not (g.user.is_super_leader() or g.user.is_finance() or g.user.is_operater_leader()):
        abort(403)
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    company = request.values.get('company', '')
    money = request.values.get('money', 0)
    invoice = request.values.get('invoice', '')
    type = int(request.values.get('type', 1))
    on_time = request.values.get('on_time', datetime.datetime.today())
    other_cost = OtherCost.get(oid)
    other_cost.company = company
    other_cost.douban_order_order = order
    other_cost.money = money
    other_cost.invoice = invoice
    other_cost.type = type
    other_cost.on_time = on_time
    other_cost.save()
    order.add_comment(g.user, u"更新了外包,公司:%s ; 金额:%s ; 发票:%s ; 类型:%s ; 发生时间:%s" % (
        other_cost.company,
        str(other_cost.money),
        other_cost.invoice,
        other_cost.type_cn,
        other_cost.on_time_cn), msg_channel=10)
    return redirect(url_for('saler_douban_order_other_cost.index', order_id=order_id))
Example #13
0
def index(order_id):
    if not (g.user.is_super_leader() or g.user.is_finance()
            or g.user.is_aduit() or g.user.is_operater_leader()):
        abort(403)
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    return tpl('/saler/douban_order/other_cost/index.html', order=order)
Example #14
0
def delete(order_id, bid):
    order = DoubanOrder.get(order_id)
    bm = BackMoney.get(bid)
    order.add_comment(g.user, u"删除了回款信息,回款金额: %s; 回款时间: %s;" %
                      (bm.money, bm.back_time_cn), msg_channel=4)
    bm.delete()
    flash(u'删除成功!', 'success')
    return redirect(url_for("saler_douban_order_back_money.back_money", order_id=order.id))
Example #15
0
def delete_invoice(order_id, bid):
    order = DoubanOrder.get(order_id)
    bm = BackInvoiceRebate.get(bid)
    order.add_comment(g.user, u"删除了返点发票信息,发票金额: %s; 开票时间: %s; 发票号: %s;" % (
        bm.money, bm.back_time_cn, bm.num), msg_channel=4)
    bm.delete()
    flash(u'删除成功!', 'success')
    return redirect(url_for("saler_douban_order_back_money.back_money", order_id=order.id))
Example #16
0
def index(order_id):
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    outsources = []
    for k in range(1, 6):
        outsources += order.get_outsources_by_status(k)
    invoices = DoubanOutsourceInvoice.query.filter_by(douban_order=order)
    return tpl('/saler/douban_order/outsource/index.html', order=order, outsources=outsources, invoices=invoices)
Example #17
0
def index():
    if not g.user.is_finance():
        abort(404)
    orders = list(DoubanOrder.all())
    if request.args.get('selected_status'):
        status_id = int(request.args.get('selected_status'))
    else:
        status_id = -1

    orderby = request.args.get('orderby', '')
    search_info = request.args.get('searchinfo', '').strip()
    location_id = int(request.args.get('selected_location', '-1'))
    page = int(request.args.get('p', 1))
    year = int(request.values.get('year', datetime.datetime.now().year))
    # page = max(1, page)
    # start = (page - 1) * ORDER_PAGE_NUM
    if location_id >= 0:
        orders = [o for o in orders if location_id in o.locations]
    if status_id >= 0:
        orders = [o for o in orders if o.contract_status == status_id]
    orders = [
        k for k in orders
        if k.client_start.year == year or k.client_end.year == year
    ]
    if search_info != '':
        orders = [
            o for o in orders if search_info.lower() in o.search_info.lower()
        ]
    if orderby and len(orders):
        orders = sorted(orders,
                        key=lambda x: getattr(x, orderby),
                        reverse=True)
    select_locations = TEAM_LOCATION_CN.items()
    select_locations.insert(0, (-1, u'全部区域'))
    select_statuses = CONTRACT_STATUS_CN.items()
    select_statuses.insert(0, (-1, u'全部合同状态'))
    paginator = Paginator(orders, ORDER_PAGE_NUM)
    try:
        orders = paginator.page(page)
    except:
        orders = paginator.page(paginator.num_pages)

    return tpl(
        '/finance/douban_order/back_money/index.html',
        orders=orders,
        locations=select_locations,
        location_id=location_id,
        statuses=select_statuses,
        status_id=status_id,
        orderby=orderby,
        now_date=datetime.date.today(),
        search_info=search_info,
        page=page,
        year=year,
        params=
        '&orderby=%s&searchinfo=%s&selected_location=%s&selected_status=%s&year=%s'
        % (orderby, search_info, location_id, status_id, str(year)))
Example #18
0
def back_money(order_id):
    if not (g.user.is_contract() or g.user.is_finance()):
        abort(404)
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    if request.method == 'POST':
        money = float(request.values.get('money', 0))
        back_time = request.values.get(
            'back_time', datetime.date.today().strftime('%Y-%m-%d'))
        back_money_status = request.values.get('back_money_status', '')
        if back_money_status != '':
            if int(back_money_status) == 0:
                order.back_money_status = int(back_money_status)
                order.save()
                flash(u'完成所有回款!', 'success')
                order.add_comment(g.user, u"完成所有回款", msg_channel=4)
                apply_context = {
                    'order': order,
                    'num': 0,
                    'type': 'end',
                }
                back_money_apply_signal.send(
                    current_app._get_current_object(), apply_context=apply_context)
            elif int(back_money_status) == -1:
                order.back_money_status = int(back_money_status)
                order.save()
                flash(u'该项目为划账!', 'success')
                order.add_comment(g.user, u"坏账项目", msg_channel=4)
                apply_context = {
                    'order': order,
                    'num': -1,
                    'type': 'end',
                }
                back_money_apply_signal.send(
                    current_app._get_current_object(), apply_context=apply_context)
        else:
            bm = BackMoney.add(
                douban_order=order,
                money=money,
                back_time=back_time,
                create_time=datetime.date.today().strftime('%Y-%m-%d'))
            bm.save()
            apply_context = {
                'order': order,
                'num': money,
                'type': 'money',
            }
            back_money_apply_signal.send(
                current_app._get_current_object(), apply_context=apply_context)
            flash(u'回款信息保存成功!', 'success')
            order.add_comment(
                g.user, u"更新了回款信息,回款金额: %s; 回款时间: %s;" % (money, back_time), msg_channel=4)
        return redirect(url_for("saler_douban_order_back_money.back_money", order_id=order.id))
    return tpl('/saler/douban_order/back_money/index.html', order=order)
Example #19
0
def douban_outsources(order_id):
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    new_outsource_form = DoubanOutsourceForm()
    new_outsource_form.douban_order.choices = [(order.id, order.name)]
    reminder_emails = [(u.name, u.email) for u in User.all_active()]
    context = {'new_outsource_form': new_outsource_form,
               'reminder_emails': reminder_emails,
               'order': order}
    return tpl('douban_outsources.html', **context)
Example #20
0
def douban_orders():
    if any([g.user.is_super_leader(),
            g.user.is_operater_leader(),
            g.user.is_contract(),
            g.user.is_media()]):
        orders = list([k for k in DoubanOrder.query.all() if k.contract != ''])
    elif g.user.is_leader():
        orders = [
            o for o in DoubanOrder.query.all() if g.user.location in o.locations and o.contract != '']
    else:
        orders = DoubanOrder.get_order_by_user(g.user)
    return display_orders(orders, 'o_douban_orders.html', title=u"我的直签豆瓣外包", operaters=[])
Example #21
0
def index(order_id):
    order = DoubanOrder.get(order_id)
    if not order:
        abort(404)
    outsources = []
    for k in range(1, 6):
        outsources += order.get_outsources_by_status(k)
    invoices = DoubanOutsourceInvoice.query.filter_by(douban_order=order)
    return tpl('/saler/douban_order/outsource/index.html',
               order=order,
               outsources=outsources,
               invoices=invoices)
Example #22
0
def douban_order_json():
    if not (g.user.is_super_leader() or g.user.is_aduit()
            or g.user.is_finance()):
        abort(403)
    now_date = datetime.datetime.now()
    location = int(request.values.get('location', 0))
    year = int(request.values.get('year', now_date.year))
    now_year_start = datetime.datetime.strptime(
        str(year) + '-01-01', '%Y-%m-%d')
    now_year_end = datetime.datetime.strptime(str(year) + '-12-01', '%Y-%m-%d')
    client_params = {}
    now_monthes = get_monthes_pre_days(now_year_start, now_year_end)
    for k in now_monthes:
        client_params[k['month'].date()] = {
            'orders': [],
            'order_count': 0,
            'order_pre_money': 0
        }
    # 获取所有合同
    orders = DoubanOrder.all()
    for k in orders:
        if k.contract_status in [2, 4, 5, 10, 19, 20]:
            create_month = k.client_start.replace(day=1)
            if create_month in client_params:
                if location == 0:
                    client_params[create_month]['orders'].append(k)
                elif location in k.locations:
                    client_params[create_month]['orders'].append(k)
    client_params = sorted(client_params.iteritems(), key=lambda x: x[0])
    # 初始化highcharts数据
    data = []
    data.append({'name': u'客户成交数量', 'data': []})
    data.append({'name': u'客户平均成交额', 'data': []})
    # 根据时间组装合同
    for k, v in client_params:
        order_count = len(v['orders'])
        sum_order_money = sum(
            [_get_money_by_location(i, location) for i in v['orders']])
        if order_count:
            order_pre_money = sum_order_money / order_count
        else:
            order_pre_money = 0
        # 主装highcharts数据
        day_time_stamp = int(
            datetime.datetime.strptime(str(k),
                                       '%Y-%m-%d').strftime('%s')) * 1000
        data[0]['data'].append([day_time_stamp, order_count])
        data[1]['data'].append([day_time_stamp, order_pre_money])
    return jsonify({'data': data, 'title': u'直签豆瓣订单客户数量分析'})
Example #23
0
def executive_report(order_id):
    otype = request.values.get('otype', 'ClientOrder')
    if otype == 'DoubanOrder':
        order = DoubanOrder.get(order_id)
    else:
        order = ClientOrder.get(order_id)
    if not order:
        abort(404)
    if not g.user.is_admin():
        abort(402)
    _insert_executive_report(order, request.values.get('rtype', None))
    if otype == 'ClientOrder':
        return redirect(url_for("outsource.client_orders"))
    else:
        return redirect(url_for("outsource.douban_orders"))
Example #24
0
def fix_data_douban():
    if not g.user.is_super_leader():
        abort(403)
    year = int(request.values.get('year', 2015))
    orders = [k for k in DoubanOrder.all() if k.client_start.year ==
              year and k.contract_status not in [0, 7, 8, 9] and k.status == 1 and k.contract]
    for k in orders:
        if int(k.self_agent_rebate.split('-')[0]) == 1:
            k.agent_rebate_value = float(k.self_agent_rebate.split('-')[1])
        else:
            agent_rebate = k.agent_rebate
            k.agent_rebate_value = k.money * agent_rebate / 100
    if request.values.get('action') == 'download':
        return write_fix_date(orders, 'douban_order')
    return tpl('/fix_data_douban.html', orders=orders, year=year)
Example #25
0
def order_info():
    now_year = int(request.values.get('year', datetime.datetime.now().year))
    outsources = [
        _target_outsource_to_dict(k, 'client_order') for k in OutSource.all()
    ]
    outsources += [
        _target_outsource_to_dict(k, 'douban_order')
        for k in DoubanOutSource.all()
    ]
    outsources = [k for k in outsources if k]
    orders = [
        k for k in ClientOrder.all()
        if (k.client_start.year == now_year or k.client_end.year == now_year)
        and k.status == 1
    ]
    orders += [
        k for k in DoubanOrder.all()
        if (k.client_start.year == now_year or k.client_end.year == now_year)
        and k.status == 1
    ]
    order_obj = []
    for k in orders:
        order_dict = {}
        if k.__tablename__ == 'bra_client_order':
            order_dict['outsource_obj'] = [
                o for o in outsources
                if o['order_type'] == 'client_order' and o['order_id'] == k.id
            ]
        else:
            order_dict['outsource_obj'] = [
                o for o in outsources
                if o['order_type'] == 'douban_order' and o['order_id'] == k.id
            ]
        order_dict['contract'] = k.contract
        order_dict['campaign'] = k.campaign
        order_dict['money'] = k.money
        order_dict['locations_cn'] = k.locations_cn
        order_dict['outsources_sum'] = k.outsources_sum
        order_dict['outsources_percent'] = k.outsources_percent
        order_dict['outsources_paied_sum'] = k.outsources_paied_sum_by_shenji(
            'all')
        if order_dict['outsource_obj']:
            order_obj.append(order_dict)
    if request.values.get('action', '') == 'download':
        return write_outsource_order_info_excel(order_obj)
    return tpl('/data_query/outsource/order_info.html',
               orders=order_obj,
               now_year=now_year)
Example #26
0
def douban_order_excle_data():
    now_date = datetime.datetime.now()
    location = int(request.values.get('location', 0))
    year = int(request.values.get('year', now_date.year))
    now_year_start = datetime.datetime.strptime(
        str(year) + '-01-01', '%Y-%m-%d')
    now_year_end = datetime.datetime.strptime(str(year) + '-12-01', '%Y-%m-%d')
    client_params = {}
    now_monthes = get_monthes_pre_days(now_year_start, now_year_end)
    for k in now_monthes:
        client_params[k['month'].date()] = {
            'orders': [],
            'order_count': 0,
            'order_pre_money': 0
        }
    # 获取所有合同
    orders = DoubanOrder.all()
    for k in orders:
        if k.contract_status in [2, 4, 5, 10, 19, 20]:
            create_month = k.client_start.replace(day=1)
            if create_month in client_params:
                if location == 0:
                    client_params[create_month]['orders'].append(k)
                elif location in k.locations:
                    client_params[create_month]['orders'].append(k)
    client_params = sorted(client_params.iteritems(), key=lambda x: x[0])

    headings = [u'月份', u'成单客户数', u'平均客户金额']
    data = []
    data.append([str(k + 1) + u'月' for k in range(len(client_params))])

    # 成单客户数
    count_client = []
    # 平均客户金额
    pre_money_client = []
    for k, v in client_params:
        order_count = len(v['orders'])
        sum_order_money = sum(
            [_get_money_by_location(i, location) for i in v['orders']])
        if order_count:
            order_pre_money = sum_order_money / order_count
        else:
            order_pre_money = 0
        count_client.append(order_count)
        pre_money_client.append(order_pre_money)
    data.append(count_client)
    data.append(pre_money_client)
    return {'data': data, 'title': u'直签豆瓣订单客户数量分析', 'headings': headings}
Example #27
0
def douban_order_json():
    if not (g.user.is_super_leader() or g.user.is_aduit() or g.user.is_finance()):
        abort(403)
    now_date = datetime.datetime.now()
    location = int(request.values.get('location', 0))
    year = int(request.values.get('year', now_date.year))
    now_year_start = datetime.datetime.strptime(
        str(year) + '-01-01', '%Y-%m-%d')
    now_year_end = datetime.datetime.strptime(str(year) + '-12-01', '%Y-%m-%d')
    client_params = {}
    now_monthes = get_monthes_pre_days(now_year_start, now_year_end)
    for k in now_monthes:
        client_params[k['month'].date()] = {'orders': [],
                                            'order_count': 0,
                                            'order_pre_money': 0}
    # 获取所有合同
    orders = DoubanOrder.all()
    for k in orders:
        if k.contract_status in [2, 4, 5, 10, 19, 20]:
            create_month = k.client_start.replace(day=1)
            if create_month in client_params:
                if location == 0:
                    client_params[create_month]['orders'].append(k)
                elif location in k.locations:
                    client_params[create_month]['orders'].append(k)
    client_params = sorted(
        client_params.iteritems(), key=lambda x: x[0])
    # 初始化highcharts数据
    data = []
    data.append({'name': u'客户成交数量',
                 'data': []})
    data.append({'name': u'客户平均成交额',
                 'data': []})
    # 根据时间组装合同
    for k, v in client_params:
        order_count = len(v['orders'])
        sum_order_money = sum([_get_money_by_location(i, location) for i in v['orders']])
        if order_count:
            order_pre_money = sum_order_money / order_count
        else:
            order_pre_money = 0
        # 主装highcharts数据
        day_time_stamp = int(datetime.datetime.strptime(
            str(k), '%Y-%m-%d').strftime('%s')) * 1000
        data[0]['data'].append([day_time_stamp, order_count])
        data[1]['data'].append([day_time_stamp, order_pre_money])
    return jsonify({'data': data, 'title': u'直签豆瓣订单客户数量分析'})
Example #28
0
def fix_data_douban():
    if not g.user.is_super_leader():
        abort(403)
    year = int(request.values.get('year', 2015))
    orders = [
        k for k in DoubanOrder.all() if k.client_start.year == year and
        k.contract_status not in [0, 7, 8, 9] and k.status == 1 and k.contract
    ]
    for k in orders:
        if int(k.self_agent_rebate.split('-')[0]) == 1:
            k.agent_rebate_value = float(k.self_agent_rebate.split('-')[1])
        else:
            agent_rebate = k.agent_rebate
            k.agent_rebate_value = k.money * agent_rebate / 100
    if request.values.get('action') == 'download':
        return write_fix_date(orders, 'douban_order')
    return tpl('/fix_data_douban.html', orders=orders, year=year)
Example #29
0
def douban_order_excle_data():
    now_date = datetime.datetime.now()
    location = int(request.values.get('location', 0))
    year = int(request.values.get('year', now_date.year))
    now_year_start = datetime.datetime.strptime(
        str(year) + '-01-01', '%Y-%m-%d')
    now_year_end = datetime.datetime.strptime(str(year) + '-12-01', '%Y-%m-%d')
    client_params = {}
    now_monthes = get_monthes_pre_days(now_year_start, now_year_end)
    for k in now_monthes:
        client_params[k['month'].date()] = {'orders': [],
                                            'order_count': 0,
                                            'order_pre_money': 0}
    # 获取所有合同
    orders = DoubanOrder.all()
    for k in orders:
        if k.contract_status in [2, 4, 5, 10, 19, 20]:
            create_month = k.client_start.replace(day=1)
            if create_month in client_params:
                if location == 0:
                    client_params[create_month]['orders'].append(k)
                elif location in k.locations:
                    client_params[create_month]['orders'].append(k)
    client_params = sorted(
        client_params.iteritems(), key=lambda x: x[0])

    headings = [u'月份', u'成单客户数', u'平均客户金额']
    data = []
    data.append([str(k + 1) + u'月' for k in range(len(client_params))])

    # 成单客户数
    count_client = []
    # 平均客户金额
    pre_money_client = []
    for k, v in client_params:
        order_count = len(v['orders'])
        sum_order_money = sum([_get_money_by_location(i, location) for i in v['orders']])
        if order_count:
            order_pre_money = sum_order_money / order_count
        else:
            order_pre_money = 0
        count_client.append(order_count)
        pre_money_client.append(order_pre_money)
    data.append(count_client)
    data.append(pre_money_client)
    return {'data': data, 'title': u'直签豆瓣订单客户数量分析', 'headings': headings}
Example #30
0
def _get_order_by_type(type, id):
    if type == 'client_order':
        client_order = ClientOrder.get(id)
        if client_order:
            return _order_to_dict(client_order)
        return {}
    elif type == 'douban_order':
        douban_order = DoubanOrder.get(id)
        if douban_order:
            return _order_to_dict(douban_order)
        return {}
    elif type == 'ass_douban_order':
        client_order = ClientOrder.get(id)
        if client_order:
            return _order_to_dict(client_order,
                                  client_order.associated_douban_orders[0])
        return {}
    return {}
Example #31
0
def index():
    print g.user.is_contract()
    if not (g.user.is_super_admin() or g.user.is_contract()):
        abort(403)
    form = DoubanOrderForm(request.form)
    if request.method == 'POST' and form.validate():
        if DoubanOrder.query.filter_by(contract=request.values.get('contract')).count() > 0:
            flash(u'合同号已存在', 'danger')
            return redirect(url_for('util_insert_douban_orders.index'))
        order = DoubanOrder.add(client=Client.get(form.client.data),
                                agent=Agent.get(form.agent.data),
                                campaign=form.campaign.data,
                                money=int(round(float(form.money.data or 0))),
                                medium_CPM=form.medium_CPM.data,
                                sale_CPM=form.sale_CPM.data,
                                client_start=form.client_start.data,
                                client_end=form.client_end.data,
                                reminde_date=form.reminde_date.data,
                                direct_sales=User.gets(form.direct_sales.data),
                                agent_sales=User.gets(form.agent_sales.data),
                                operaters=User.gets(form.operaters.data),
                                designers=User.gets(form.designers.data),
                                planers=User.gets(form.planers.data),
                                contract_type=form.contract_type.data,
                                resource_type=form.resource_type.data,
                                sale_type=form.sale_type.data,
                                creator=g.user,
                                contract=request.values.get('contract'),
                                contract_status=2,
                                create_time=datetime.now())
        order.add_comment(g.user,
                          u"导入了直签豆瓣订单:%s - %s - %s" % (
                              order.agent.name,
                              order.client.name,
                              order.campaign
                          ))
        insert_executive_report(order, '')
        flash(u'导入订单成功', 'success')
        return redirect(order.info_path())
    else:
        form.client_start.data = datetime.now().date()
        form.client_end.data = datetime.now().date()
        form.reminde_date.data = datetime.now().date()
    return tpl('insert_douban_order.html', form=form)
Example #32
0
def index():
    if not g.user.is_finance():
        abort(404)
    orders = list(DoubanOrder.all())
    if request.args.get('selected_status'):
        status_id = int(request.args.get('selected_status'))
    else:
        status_id = -1

    orderby = request.args.get('orderby', '')
    search_info = request.args.get('searchinfo', '').strip()
    location_id = int(request.args.get('selected_location', '-1'))
    page = int(request.args.get('p', 1))
    year = int(request.values.get('year', datetime.datetime.now().year))
    # page = max(1, page)
    # start = (page - 1) * ORDER_PAGE_NUM
    if location_id >= 0:
        orders = [o for o in orders if location_id in o.locations]
    if status_id >= 0:
        orders = [o for o in orders if o.contract_status == status_id]
    orders = [k for k in orders if k.client_start.year == year or k.client_end.year == year]
    if search_info != '':
        orders = [
            o for o in orders if search_info.lower() in o.search_info.lower()]
    if orderby and len(orders):
        orders = sorted(
            orders, key=lambda x: getattr(x, orderby), reverse=True)
    select_locations = TEAM_LOCATION_CN.items()
    select_locations.insert(0, (-1, u'全部区域'))
    select_statuses = CONTRACT_STATUS_CN.items()
    select_statuses.insert(0, (-1, u'全部合同状态'))
    paginator = Paginator(orders, ORDER_PAGE_NUM)
    try:
        orders = paginator.page(page)
    except:
        orders = paginator.page(paginator.num_pages)

    return tpl('/finance/douban_order/back_money/index.html', orders=orders,
               locations=select_locations, location_id=location_id,
               statuses=select_statuses, status_id=status_id,
               orderby=orderby, now_date=datetime.date.today(),
               search_info=search_info, page=page, year=year,
               params='&orderby=%s&searchinfo=%s&selected_location=%s&selected_status=%s&year=%s' %
                      (orderby, search_info, location_id, status_id, str(year)))
Example #33
0
def index():
    print g.user.is_contract()
    if not (g.user.is_super_admin() or g.user.is_contract()):
        abort(403)
    form = DoubanOrderForm(request.form)
    if request.method == 'POST' and form.validate():
        if DoubanOrder.query.filter_by(
                contract=request.values.get('contract')).count() > 0:
            flash(u'合同号已存在', 'danger')
            return redirect(url_for('util_insert_douban_orders.index'))
        order = DoubanOrder.add(client=Client.get(form.client.data),
                                agent=Agent.get(form.agent.data),
                                campaign=form.campaign.data,
                                money=int(round(float(form.money.data or 0))),
                                medium_CPM=form.medium_CPM.data,
                                sale_CPM=form.sale_CPM.data,
                                client_start=form.client_start.data,
                                client_end=form.client_end.data,
                                reminde_date=form.reminde_date.data,
                                direct_sales=User.gets(form.direct_sales.data),
                                agent_sales=User.gets(form.agent_sales.data),
                                operaters=User.gets(form.operaters.data),
                                designers=User.gets(form.designers.data),
                                planers=User.gets(form.planers.data),
                                contract_type=form.contract_type.data,
                                resource_type=form.resource_type.data,
                                sale_type=form.sale_type.data,
                                creator=g.user,
                                contract=request.values.get('contract'),
                                contract_status=2,
                                create_time=datetime.now())
        order.add_comment(
            g.user, u"导入了直签豆瓣订单:%s - %s - %s" %
            (order.agent.name, order.client.name, order.campaign))
        insert_executive_report(order, '')
        flash(u'导入订单成功', 'success')
        return redirect(order.info_path())
    else:
        form.client_start.data = datetime.now().date()
        form.client_end.data = datetime.now().date()
        form.reminde_date.data = datetime.now().date()
    return tpl('insert_douban_order.html', form=form)
Example #34
0
def index():
    if not g.user.is_finance():
        abort(404)
    orders = list(DoubanOrder.all())
    orderby = request.args.get('orderby', '')
    search_info = request.args.get('searchinfo', '')
    location_id = int(request.args.get('selected_location', '-1'))
    page = int(request.args.get('p', 1))
    year = int(request.values.get('year', datetime.datetime.now().year))
    if location_id >= 0:
        orders = [o for o in orders if location_id in o.locations]
    orders = [k for k in orders if k.client_start.year == year or k.client_end.year == year]
    if search_info != '':
        orders = [
            o for o in orders if search_info.lower() in o.search_info.lower()]
    if orderby and len(orders):
        orders = sorted(
            orders, key=lambda x: getattr(x, orderby), reverse=True)
    select_locations = TEAM_LOCATION_CN.items()
    select_locations.insert(0, (-1, u'全部区域'))
    select_statuses = CONTRACT_STATUS_CN.items()
    select_statuses.insert(0, (-1, u'全部合同状态'))
    paginator = Paginator(orders, ORDER_PAGE_NUM)
    try:
        orders = paginator.page(page)
    except:
        orders = paginator.page(paginator.num_pages)
    for k in orders.object_list:
        k.ex_money = sum(
            [i.ex_money for i in DoubanOutsourceInvoice.query.filter_by(douban_order=k)])
        k.pay_num = sum([i.pay_num for i in k.get_outsources_by_status(4)])
        apply_outsources = []
        for i in [1, 2, 3, 5]:
            apply_outsources += k.get_outsources_by_status(i)
        k.apply_money = sum([j.pay_num for j in apply_outsources])
    return tpl('/finance/douban_order/outsource/invoice.html', orders=orders, locations=select_locations,
               location_id=location_id, statuses=select_statuses, orderby=orderby,
               now_date=datetime.date.today(), search_info=search_info, page=page, year=year,
               params='&orderby=%s&searchinfo=%s&selected_location=%s&year=%s' %
                      (orderby, search_info, location_id, str(year)))
Example #35
0
def outsource():
    if not (g.user.is_leader() or g.user.is_super_leader()):
        abort(403)
    orders = list(ClientOrder.all())
    orders += list(DoubanOrder.all())
    orders = [k for k in orders if k.status == 1]
    search_info = request.values.get('search_info', '')
    location = int(request.values.get('location', 0))
    if search_info:
        orders = [k for k in orders if search_info.lower().strip()
                  in k.search_info.lower()]
    if location:
        orders = [k for k in orders if location in k.locations]
    if g.user.team.type == TEAM_TYPE_LEADER:
        orders = [
            o for o in orders if g.user.location in o.locations and o.get_outsources_by_status(1)]
    elif g.user.team.type == TEAM_TYPE_SUPER_LEADER:
        orders = [o for o in orders if o.get_outsources_by_status(5)]
    if g.user.is_super_admin():
        orders = [o for o in orders if o.get_outsources_by_status(
            5) or o.get_outsources_by_status(1)]
    return tpl('/manage/apply/order.html', title=u'外包费用报备审批', orders=orders,
               search_info=search_info, location=location, a_type="outsource")
Example #36
0
def info(order_id):
    if not g.user.is_finance():
        abort(404)
    order = DoubanOrder.get(order_id)
    outsources = order.get_outsources_by_status(4)
    apply_outsources = []
    for k in [1, 2, 3, 5]:
        apply_outsources += order.get_outsources_by_status(k)
    now_date = datetime.datetime.now().strftime('%Y-%m-%d')
    invoices = DoubanOutsourceInvoice.query.filter_by(douban_order=order)
    if request.method == 'POST':
        DoubanOutsourceInvoice.add(
            douban_order=order,
            company=request.values.get('company', ''),
            money=float(request.values.get('money', 0)),
            ex_money=float(request.values.get('ex_money', 0)),
            invoice_num=request.values.get('invoice_num', ''),
            add_time=request.values.get('add_time', now_date),
            create_time=datetime.datetime.now(),
            creator=g.user
        )
        return redirect(url_for('finance_douban_order_outsource_invoice.info', order_id=order.id))
    return tpl('/finance/douban_order/outsource/invoice_info.html', order=order, outsources=outsources,
               now_date=now_date, invoices=invoices, apply_outsources=apply_outsources)
Example #37
0
def order():
    sn = request.values.get('sn', '')
    client_order = [
        _order_to_dict(k) for k in ClientOrder.all()
        if k.contract.lower().strip() == sn.lower().strip()
    ]
    douban_order = [
        _order_to_dict(k) for k in DoubanOrder.all()
        if k.contract.lower().strip() == sn.lower().strip()
    ]
    client_order += [
        _order_to_dict(k.client_order) for k in Order.all()
        if k.medium_contract.lower().strip() == sn.lower().strip()
    ]
    client_order += [
        _order_to_dict(k.client_order, k) for k in AssociatedDoubanOrder.all()
        if k.contract.lower().strip() == sn.lower().strip()
    ]
    if client_order:
        return jsonify({'ret': True, 'data': client_order[0]})
    elif douban_order:
        return jsonify({'ret': True, 'data': douban_order[0]})
    else:
        return jsonify({'ret': False, 'data': {}})
Example #38
0
def index():
    if not (g.user.is_super_leader() or g.user.is_aduit()
            or g.user.is_finance()):
        abort(403)
    location = int(request.values.get('location', 1))
    now_date = datetime.datetime.now()
    year = int(request.values.get('year', now_date.year))
    # 获取所有关联豆瓣订单,用于判断媒体订单是否是关联豆瓣订单,全部取出减少链接数据库时间
    ass_douban_order_ids = [
        k.medium_order_id for k in AssociatedDoubanOrder.all()
    ]
    orders = [
        _format_douban_order(k, year) for k in DoubanOrder.all()
        if k.client_start.year >= year - 2 and k.client_start.year <= year
    ]
    orders += [
        _format_client_order(k, year, ass_douban_order_ids)
        for k in Order.all()
        if k.medium_start.year >= year - 2 and k.medium_start.year <= year
    ]
    # 去掉撤单、申请中的合同
    orders = [
        k for k in orders if k['contract_status'] in [2, 4, 5, 10, 19, 20]
        and k['status'] == 1 and k['contract']
    ]
    if location == 1:
        money, data = _fix_client_data(HB_data, orders, location)
    elif location == 2:
        money, data = _fix_client_data(HD_data, orders, location)
    elif location == 3:
        money, data = _fix_client_data(HN_data, orders, location)
    action = request.values.get('action', '')
    if action == 'excel':
        return write_client_total_excel(year=year,
                                        data=data,
                                        money=money,
                                        location=location)
    # 组装数据用于画图
    categories_1 = []
    series_1 = [{
        'name': str(year - 2) + u'年新媒体',
        'data': [],
        'stack': str(year - 2)
    }, {
        'name': str(year - 2) + u'年豆瓣',
        'data': [],
        'stack': str(year - 2)
    }, {
        'name': str(year - 1) + u'年新媒体',
        'data': [],
        'stack': str(year - 1)
    }, {
        'name': str(year - 1) + u'年豆瓣',
        'data': [],
        'stack': str(year - 1)
    }, {
        'name': str(year) + u'年新媒体',
        'data': [],
        'stack': str(year)
    }, {
        'name': str(year) + u'年豆瓣',
        'data': [],
        'stack': str(year)
    }]
    categories_2 = []
    series_2 = [{
        'name': str(year - 2) + u'年新媒体',
        'data': [],
        'stack': str(year - 2)
    }, {
        'name': str(year - 2) + u'年豆瓣',
        'data': [],
        'stack': str(year - 2)
    }, {
        'name': str(year - 1) + u'年新媒体',
        'data': [],
        'stack': str(year - 1)
    }, {
        'name': str(year - 1) + u'年豆瓣',
        'data': [],
        'stack': str(year - 1)
    }, {
        'name': str(year) + u'年新媒体',
        'data': [],
        'stack': str(year)
    }, {
        'name': str(year) + u'年豆瓣',
        'data': [],
        'stack': str(year)
    }]
    for k in data:
        clients = k['clients']
        for c in range(len(clients)):
            if c <= len(clients) / 2:
                categories_1.append(clients[c]['name'])
                series_1[0]['data'].append(clients[c]['client_money'][0])
                series_1[1]['data'].append(clients[c]['client_money'][1])
                series_1[2]['data'].append(clients[c]['client_money'][3])
                series_1[3]['data'].append(clients[c]['client_money'][4])
                series_1[4]['data'].append(clients[c]['client_money'][7] +
                                           clients[c]['client_money'][9] +
                                           clients[c]['client_money'][11] +
                                           clients[c]['client_money'][13])
                series_1[5]['data'].append(clients[c]['client_money'][8] +
                                           clients[c]['client_money'][10] +
                                           clients[c]['client_money'][12] +
                                           clients[c]['client_money'][14])
            else:
                categories_2.append(clients[c]['name'])
                series_2[0]['data'].append(clients[c]['client_money'][0])
                series_2[1]['data'].append(clients[c]['client_money'][1])
                series_2[2]['data'].append(clients[c]['client_money'][3])
                series_2[3]['data'].append(clients[c]['client_money'][4])
                series_2[4]['data'].append(clients[c]['client_money'][7] +
                                           clients[c]['client_money'][9] +
                                           clients[c]['client_money'][11] +
                                           clients[c]['client_money'][13])
                series_2[5]['data'].append(clients[c]['client_money'][8] +
                                           clients[c]['client_money'][10] +
                                           clients[c]['client_money'][12] +
                                           clients[c]['client_money'][14])
    return tpl('/data_query/super_leader/client_total.html',
               year=year,
               data=data,
               money=money,
               location=location,
               categories_1=json.dumps(categories_1),
               series_1=json.dumps(series_1),
               categories_2=json.dumps(categories_2),
               series_2=json.dumps(series_2))
Example #39
0
def index(order_id):
    order = DoubanOrder.get(order_id)
    return tpl('/saler/douban_order/money/index.html', order=order)
Example #40
0
def douban_order_files(order_id):
    fo = DoubanOrder.get(order_id)
    return tpl("order_files.html", order=fo)
Example #41
0
def finish_douban_order_upload():
    order_id = request.values.get('order')
    order = DoubanOrder.get(order_id)
    return attachment_upload(order, FILE_TYPE_FINISH)
Example #42
0
def finish_douban_order_upload():
    order_id = request.values.get('order')
    order = DoubanOrder.get(order_id)
    return attachment_upload(order, FILE_TYPE_FINISH)
Example #43
0
                                                    order=order,
                                                    medium_money=i[
                                                        'medium_money'],
                                                    medium_money2=i[
                                                        'medium_money2'],
                                                    sale_money=i[
                                                        'sale_money'],
                                                    month_day=i['month'],
                                                    days=i['days'],
                                                    create_time=None)
                er.save()
    return True

if __name__ == '__main__':
    client_orders = ClientOrder.all()
    douban_orders = DoubanOrder.all()
    framework_orders = FrameworkOrder.all()
    medium_framework_orders = MediumFrameworkOrder.all()
    search_client_orders = searchAdClientOrder.all()
    search_rebate_orders = searchAdRebateOrder.all()
    search_framework_orders = searchAdFrameworkOrder.all()

    for c in client_orders:
        c.client_start_year = c.client_start.year
        c.client_end_year = c.client_end.year
        c.save()
        _insert_zhiqu_executive_report(c, 'reload')

    for d in douban_orders:
        d.client_start_year = d.client_start.year
        d.client_end_year = d.client_end.year
Example #44
0
def douban_apply(order_id):
    order = DoubanOrder.get(order_id)
    order.add_comment(g.user, u"向豆瓣发送合同号申请邮件")
    return contract_apply(order)
Example #45
0
def douban_order_files(order_id):
    fo = DoubanOrder.get(order_id)
    return tpl("order_files.html", order=fo)
Example #46
0
def outsource_status(order_id):
    type = request.values.get('type', '')
    if type == 'douban':
        order = DoubanOrder.get(order_id)
    else:
        order = ClientOrder.get(order_id)
    if not order:
        abort(404)
    outsource_ids = request.values.getlist('outsources')

    action = int(request.values.get('action', 0))
    # emails = request.values.getlist('email')
    msg = request.values.get('msg', '')

    to_users = order.direct_sales + order.agent_sales + \
        [order.creator, g.user] + order.operater_users
    try:
        outsource_apply_user = User.outsource_leaders_email(
            (order.agent_sales + order.direct_sales)[0])
    except:
        outsource_apply_user = []
    outsources_ids = set(outsource_ids) | set(
        [str(k.id) for k in order.apply_outsources()])
    if type == 'douban':
        total_outsources = DoubanOutSource.gets(outsources_ids)
        outsources = DoubanOutSource.gets(outsource_ids)
    else:
        total_outsources = OutSource.gets(outsources_ids)
        outsources = OutSource.gets(outsource_ids)
    if not outsources:
        abort(403)

    if order.money:
        outsource_percent = sum(
            [k.pay_num for k in total_outsources]) / float(order.money)
    else:
        outsource_percent = sum([k.pay_num for k in total_outsources]) / 1

    if action == 0:
        if outsource_percent >= 0.02:
            next_status = OUTSOURCE_STATUS_EXCEED
            action_msg = u'外包费用超过2%,申请审批'
        else:
            next_status = OUTSOURCE_STATUS_APPLY_LEADER
            action_msg = u'外包费用申请审批'
        # to_users_name = ','.join(
        #     [k.name for k in outsource_apply_user] + [k.name for k in order.operater_users])

    elif action == 1:
        next_status = OUTSOURCE_STATUS_PASS
        action_msg = u'外包费用审批通过'
        # to_users_name = ','.join(
        #     [k.name for k in order.agent_sales] + [k.name for k in order.operater_users])
    elif action == 2:
        next_status = OUTSOURCE_STATUS_NEW
        action_msg = u'外包费用拒绝通过'
        # to_users_name = ','.join(
        #     [k.name for k in order.agent_sales] + [k.name for k in order.operater_users])
    elif action == 3:
        next_status = OUTSOURCE_STATUS_APPLY_MONEY
        action_msg = u'外包费用申请打款'
        # to_users_name = ','.join([k.name for k in User.operater_leaders()])
    elif action == 100:
        # to_users_name = ','.join([k.name for k in outsource_apply_user] + [k.name for k in order.operater_users])
        outsources_json = json.loads(
            request.values.get('outsource_json', '[]'))
        outsources = []
        # 先修改外包金额
        for k in outsources_json:
            if type == 'douban':
                outsource = DoubanOutSource.get(k['id'])
            else:
                outsource = OutSource.get(k['id'])
            outsource.num = float(k['num'])
            outsource.target = OutSourceTarget.get(k['target'])
            outsource.type = k['type']
            outsource.subtype = k['subtype']
            outsource.remark = k['remark']
            outsource.pay_num = float(k['num'])
            # outsource.status = next_status
            outsource.save()
            outsources.append(outsource)
        # 根据修改后的金额,计算是否超过占比
        outsource_percent = float(order.outsources_percent) / 100
        if outsource_percent >= 0.02:
            action_msg = u'外包费用超过2%,修改并申请审批'
            next_status = OUTSOURCE_STATUS_EXCEED
        else:
            action_msg = u'外包费用修改并重新申请审批'
            next_status = OUTSOURCE_STATUS_APPLY_LEADER
        for k in outsources_json:
            if type == 'douban':
                outsource = DoubanOutSource.get(k['id'])
            else:
                outsource = OutSource.get(k['id'])
            outsource.status = next_status
            outsource.save()
    else:
        action_msg = u'外包费用消息提醒'

    if action < 4:
        for outsource in outsources:
            outsource.status = next_status
            outsource.save()
        if action == 1:
            _insert_executive_report(order, rtype='reload')
    order.add_comment(g.user,
                      u"%s:\n\r%s\n\r%s" % (
                          action_msg, "\n\r".join([o.name for o in outsources]), msg),
                      msg_channel=2)
    # to_emails = list(set(emails + [x.email for x in to_users] + [k.email for k in outsource_apply_user]))
    apply_context = {"to_users": to_users + outsource_apply_user,
                     "outsource_apply_user": outsource_apply_user,
                     "action_msg": action_msg,
                     "info": msg,
                     "order": order,
                     "action": action,
                     "outsource_percent": outsource_percent,
                     "outsources": outsources}

    outsource_apply_signal.send(
        current_app._get_current_object(), context=apply_context)
    if type == 'douban':
        return redirect(url_for("outsource.douban_outsources", order_id=order.id))
    else:
        return redirect(url_for("outsource.client_outsources", order_id=order.id))
Example #47
0
def outsource(outsource_id):
    type = request.values.get('type', '')
    if type == 'douban':
        outsource = DoubanOutSource.get(outsource_id)
    else:
        outsource = OutSource.get(outsource_id)
    if not outsource:
        abort(404)
    if type == 'douban':
        form = DoubanOutsourceForm(request.form)
    else:
        form = OutsourceForm(request.form)

    outsource.target = OutSourceTarget.get(form.target.data)
    if type == 'douban':
        outsource.douban_order = DoubanOrder.get(form.douban_order.data)
    else:
        outsource.medium_order = Order.get(form.medium_order.data)
    try:
        int(form.num.data)
    except:
        flash(u'保存失败,金额必须为数字!', 'danger')
        return redirect(outsource.info_path())
    outsource.num = form.num.data
    outsource.type = form.type.data
    outsource.subtype = form.subtype.data
    outsource.remark = form.remark.data
    outsource.invoice = True
    outsource.pay_num = form.num.data
    outsource.save()
    flash(u'保存成功!', 'success')
    if type == "douban":
        outsource.douban_order.add_comment(g.user,
                                           u"更新了外包:\n\r%s" % outsource.name,
                                           msg_channel=2)
    else:
        outsource.client_order.add_comment(g.user,
                                           u"更新了外包:\n\r%s" % outsource.name,
                                           msg_channel=2)
    if type == 'douban':
        order = outsource.douban_order
    else:
        order = outsource.medium_order.client_order

    if outsource.status not in [0, 4]:
        to_users = order.direct_sales + order.agent_sales + \
            [order.creator, g.user] + order.operater_users
        try:
            outsource_apply_user = User.outsource_leaders_email(
                order.agent_sales[0])
        except:
            outsource_apply_user = []

        if outsource.status in [1, 2, 5]:
            to_users_name = ','.join(
                [k.name for k in order.operater_users] + [k.name for k in order.agent_sales])
        elif outsource.status == 3:
            to_users += User.finances()
            to_users_name = ','.join(
                [k.name for k in User.finances()] + [k.name for k in order.operater_users])

        to_emails = list(
            set([x.email for x in to_users] + [k.email for k in outsource_apply_user]))
        title = u'【费用报备】%s-%s-%s' % (order.contract or u'无合同号', order.jiafang_name, u'修改外包信息')
        apply_context = {"sender": g.user,
                         "to": to_emails,
                         "action_msg": u'修改外包信息',
                         "msg": '',
                         "order": order,
                         "title": title,
                         "to_users": to_users_name,
                         "outsources": [outsource]}

        outsource_apply_signal.send(
            current_app._get_current_object(), context=apply_context)
    return redirect(outsource.info_path())
Example #48
0
def index():
    query_type = int(request.args.get('query_type', 4))
    query_month = request.args.get('query_month', '')
    page = int(request.args.get('page', 1))
    if query_month:
        query_month = datetime.datetime.strptime(query_month, '%Y-%m')
    else:
        query_month = datetime.datetime.strptime(
            datetime.datetime.now().strftime('%Y-%m'), '%Y-%m')
    # 全部客户订单
    if query_type == 1:
        query_orders = [
            o for o in ClientOrder.all()
            if o.client_end.strftime('%Y-%m') >= query_month.strftime('%Y-%m')
            and o.contract_status in ECPM_CONTRACT_STATUS_LIST
        ]
        orders = [{
            'agent_name': o.agent.name,
            'client_name': o.client.name,
            'campaign': o.campaign,
            'start': o.client_start,
            'end': o.client_end,
            'money': o.money
        } for o in query_orders]
    # 全部媒体订单
    elif query_type == 2:
        query_orders = [
            o for o in Order.all()
            if o.medium_end.strftime('%Y-%m') >= query_month.strftime('%Y-%m')
            and o.contract_status in ECPM_CONTRACT_STATUS_LIST
        ]
        orders = [{
            'medium_name': o.medium.name,
            'campaign': o.campaign,
            'start': o.medium_start,
            'end': o.medium_end,
            'money': o.medium_money
        } for o in query_orders]
    # 全部关联豆瓣订单
    elif query_type == 3:
        query_orders = [
            o for o in AssociatedDoubanOrder.all()
            if o.end_date.strftime('%Y-%m') >= query_month.strftime('%Y-%m')
            and o.contract_status in ECPM_CONTRACT_STATUS_LIST
        ]
        orders = [{
            'jiafang_name': o.jiafang_name,
            'client_name': o.client.name,
            'campaign': o.campaign,
            'start': o.start_date,
            'end': o.end_date,
            'money': o.money
        } for o in query_orders]
    # 全部直签豆瓣订单
    else:
        query_orders = [
            o for o in DoubanOrder.all()
            if o.client_end.strftime('%Y-%m') >= query_month.strftime('%Y-%m')
            and o.contract_status in ECPM_CONTRACT_STATUS_LIST
        ]
        orders = [{
            'agent_name': o.agent.name,
            'client_name': o.client.name,
            'campaign': o.campaign,
            'start': o.client_start,
            'end': o.client_end,
            'money': o.money
        } for o in query_orders]
    th_count = 0
    th_obj = []
    for order in orders:
        if order['money']:
            pre_money = float(order['money']) / \
                ((order['end'] - order['start']).days + 1)
        else:
            pre_money = 0
        monthes_pre_days = get_monthes_pre_days(
            query_month,
            datetime.datetime.fromordinal(order['start'].toordinal()),
            datetime.datetime.fromordinal(order['end'].toordinal()))
        order['order_pre_money'] = [{
            'month': k['month'].strftime('%Y-%m'),
            'money': '%.2f' % (pre_money * k['days'])
        } for k in monthes_pre_days]
        if len(monthes_pre_days) > th_count:
            th_obj = [{
                'month': k['month'].strftime('%Y-%m')
            } for k in monthes_pre_days]
            th_count = len(monthes_pre_days)
    if 'excel' == request.args.get('extype', ''):
        if query_type == 1:
            filename = (
                "%s-%s.xls" %
                (u"月度客户订单金额", datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
            ).encode('utf-8')
        elif query_type == 2:
            filename = (
                "%s-%s.xls" %
                (u"月度媒体订单金额", datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
            ).encode('utf-8')
        elif query_type == 3:
            filename = ("%s-%s.xls" %
                        (u"月度关联豆瓣订单金额",
                         datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
                        ).encode('utf-8')
        else:
            filename = ("%s-%s.xls" %
                        (u"月度直签豆瓣订单金额",
                         datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
                        ).encode('utf-8')
        xls = write_excel(orders, query_type, th_obj)
        response = get_download_response(xls, filename)
        return response
    return tpl('/data_query/order/index.html',
               orders=orders,
               page=page,
               query_type=query_type,
               query_month=query_month.strftime('%Y-%m'),
               th_obj=th_obj)
Example #49
0
def outsource_douban_order_upload():
    order_id = request.values.get('order')
    order = DoubanOrder.get(order_id)
    return attachment_upload(order, FILE_TYPE_OUTSOURCE)