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")
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)
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)
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))
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)
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)
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)
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())
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)
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)
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)
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))
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)
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))
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))
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)
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)))
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)
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)
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=[])
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)
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'直签豆瓣订单客户数量分析'})
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"))
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)
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)
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}
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'直签豆瓣订单客户数量分析'})
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)
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}
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 {}
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)
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)))
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)
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)))
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")
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)
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': {}})
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))
def index(order_id): order = DoubanOrder.get(order_id) return tpl('/saler/douban_order/money/index.html', order=order)
def douban_order_files(order_id): fo = DoubanOrder.get(order_id) return tpl("order_files.html", order=fo)
def finish_douban_order_upload(): order_id = request.values.get('order') order = DoubanOrder.get(order_id) return attachment_upload(order, FILE_TYPE_FINISH)
def finish_douban_order_upload(): order_id = request.values.get('order') order = DoubanOrder.get(order_id) return attachment_upload(order, FILE_TYPE_FINISH)
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
def douban_apply(order_id): order = DoubanOrder.get(order_id) order.add_comment(g.user, u"向豆瓣发送合同号申请邮件") return contract_apply(order)
def douban_order_files(order_id): fo = DoubanOrder.get(order_id) return tpl("order_files.html", order=fo)
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))
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())
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)
def outsource_douban_order_upload(): order_id = request.values.get('order') order = DoubanOrder.get(order_id) return attachment_upload(order, FILE_TYPE_OUTSOURCE)