def new_invoice_pay(invoice_id): if not g.user.is_finance(): abort(404) invoice = MediumInvoice.get(invoice_id) if not invoice: abort(404) money = float(request.values.get('money', 0)) pay_time = request.values.get('pay_time', '') detail = request.values.get('detail', '') bank = request.values.get('bank', '') bank_num = request.values.get('bank_num', '') company = request.values.get('company', '') pay = MediumInvoicePay.add(money=money, pay_status=0, medium_invoice=invoice, pay_time=pay_time, detail=detail, bank=bank, bank_num=bank_num, company=company) pay.save() flash(u'新建付款信息成功!', 'success') invoice.client_order.add_comment(g.user, u"财务添加打款信息\n\n发票号:%s\n\n打款金额:%s元\n\n\ 打款时间:%s\n\n公司名称:%s\n\n开户行:%s\n\n银行账号:%s" % (invoice.invoice_num, str(money), pay_time, company, bank, bank_num), msg_channel=3) return redirect(url_for("finance_client_order_medium_pay.pay_info", invoice_id=invoice.id))
def index_pass(): if not g.user.is_finance(): abort(404) orders = set([ invoicepay.medium_invoice.client_order for invoicepay in MediumInvoicePay.get_medium_invoices_status(MEDIUM_INVOICE_STATUS_PASS)]) return tpl('/finance/client_order/medium_pay/index.html', orders=orders, title=u'已打的款媒体信息')
def new_invoice_pay(invoice_id): money = float(request.values.get('money', 0)) pay_time = request.values.get('pay_time', '') detail = request.values.get('detail', '') bank = request.values.get('bank', '') bank_num = request.values.get('bank_num', '') company = request.values.get('company', '') mi = MediumInvoice.get(invoice_id) # if mi.pay_invoice_money + money > mi.money: # flash(u'付款金额大于发票金额,请重新填写!', 'danger') # return redirect(url_for('saler_client_order_medium_invoice.invoice', # invoice_id=invoice_id)) pay = MediumInvoicePay.add(money=money, medium_invoice=mi, pay_time=pay_time, detail=detail, bank=bank, bank_num=bank_num, company=company) pay.save() flash(u'新建打款信息成功!', 'success') mi.client_order.add_comment(g.user, u"新建打款信息\n\n发票号:%s\n\n打款金额:%s元\n\n\ 打款时间:%s\n\n公司名称:%s\n\n开户行:%s\n\n银行账号:%s" % (pay.medium_invoice.invoice_num, str(money), pay_time, company, bank, bank_num), msg_channel=3) return redirect(url_for('saler_client_order_medium_invoice.invoice', invoice_id=invoice_id))
def pay_medium_invoice(): if not (g.user.is_media() or g.user.is_media_leader() or g.user.is_contract()): abort(404) now_date = datetime.datetime.now() info = request.values.get('info', '').strip() location = int(request.values.get('location', 0)) year = request.values.get('year', now_date.strftime('%Y')) month = request.values.get('month', now_date.strftime('%m')) if month != '00': search_date = datetime.datetime.strptime( str(year) + '-' + str(month), '%Y-%m') end_search_date = ( search_date + datetime.timedelta(days=(search_date.max.day - search_date.day) + 1)).replace(day=1) orders = [k for k in MediumInvoicePay.query.filter(MediumInvoicePay.pay_time >= search_date, MediumInvoicePay.pay_time < end_search_date) if k.client_order.status == 1 and k.pay_status == 0] else: orders = [k for k in MediumInvoicePay.all() if k.pay_time.year == int( year) and k.client_order.status == 1 and k.pay_status == 0] if location != 0: orders = [k for k in orders if location in k.client_order.locations] if info: orders = [k for k in orders if info in k.client_order.search_info] orders = sorted(list(orders), key=lambda x: x.pay_time, reverse=False) if request.values.get('action', '') == 'download': response = write_order_excel(list(orders), 'pay_medium_invoice') return response return tpl('/media/client_order/data_query/index.html', orders=orders, location=location, year=year, month=month, info=info, title=u"付款给媒体金额", t_type='pay_medium_invoice')
def update_invoice_pay(invoice_id, invoice_pay_id): money = float(request.values.get('money', 0)) pay_time = request.values.get('pay_time', '') detail = request.values.get('detail', '') bank = request.values.get('bank', '') bank_num = request.values.get('bank_num', '') company = request.values.get('company', '') pay = MediumInvoicePay.get(invoice_pay_id) # mi = MediumInvoice.get(invoice_id) # if mi.pay_invoice_money - pay.money + money > mi.money: # flash(u'付款金额大于发票金额,请重新填写!', 'danger') # return redirect(url_for('saler_client_order_medium_invoice.invoice', # invoice_id=invoice_id)) pay.money = money pay.pay_time = pay_time pay.detail = detail pay.bank = bank pay.bank_num = bank_num pay.company = company pay.save() pay.medium_invoice.client_order.add_comment( g.user, u"更新打款信息\n\n发票号:%s\n\n打款金额:%s元\n\n\ 打款时间:%s\n\n公司名称:%s\n\n开户行:%s\n\n银行账号:%s" % (pay.medium_invoice.invoice_num, str(money), pay_time, company, bank, bank_num), msg_channel=3) return redirect( url_for('saler_client_order_medium_invoice.invoice', invoice_id=invoice_id))
def invoice_pay_time_update(invoice_id): pay_time = request.values.get('pay_time', '') invoice = MediumInvoicePay.get(invoice_id) invoice.pay_time = pay_time invoice.save() flash(u'保存成功!', 'success') invoice.client_order.add_comment(g.user, u"财务更新了打款信息\n\n发票号:%s\n\n打款金额:%s元\n\n\ 打款时间:%s\n\n公司名称:%s\n\n开户行:%s\n\n银行账号:%s" % (invoice.medium_invoice.invoice_num, str(invoice.money), invoice.pay_time, invoice.company, invoice.bank, invoice.bank_num), msg_channel=3) return jsonify({'ret': True})
def invoice_pay_delete(invoice_id, pid): if not g.user.is_finance(): abort(404) invoice = MediumInvoice.get(invoice_id) invoice_pay = MediumInvoicePay.get(pid) flash(u'删除成功', 'success') invoice.client_order.add_comment(g.user, u"财务删除打款信息\n\n发票号:%s\n\n打款金额:%s元\n\n\ 打款时间:%s\n\n公司名称:%s\n\n开户行:%s\n\n银行账号:%s" % (invoice.invoice_num, str(invoice_pay.money), invoice_pay.pay_time, invoice_pay.company, invoice_pay.bank, invoice_pay.bank_num), msg_channel=3) invoice_pay.delete() return redirect(url_for("finance_client_order_medium_pay.pay_info", invoice_id=invoice_id))
def invoice_pass(invoice_id): if not g.user.is_finance(): abort(404) invoice = MediumInvoice.get(invoice_id) if not invoice: abort(404) invoices_ids = request.values.getlist('invoices') invoices_pay = MediumInvoicePay.gets(invoices_ids) if not invoices_pay: abort(403) emails = request.values.getlist('email') msg = request.values.get('msg', '') action = int(request.values.get('action', 0)) to_users = [g.user] + \ User.medias() + User.media_leaders() + User.super_leaders() to_emails = list(set(emails + [x.email for x in to_users])) if action != 10: invoice_status = MEDIUM_INVOICE_STATUS_PASS action_msg = u'媒体款项已打款' for invoice_pay in invoices_pay: invoice_pay.pay_status = invoice_status invoice_pay.save() flash(u'媒体订单款已打,名称:%s, 付款金额%s' % ( invoice_pay.medium_invoice.client_order.name + '-' + invoice_pay.medium_invoice.medium.name, str(invoice_pay.money)), 'success') invoice_pay.medium_invoice.client_order.add_comment( g.user, u'媒体订单款已付款,名称%s, 付款金额%s ' % ( invoice_pay.medium_invoice.client_order.name + '-' + invoice_pay.medium_invoice.medium.name, str(invoice_pay.money)), msg_channel=3) else: action_msg = u'消息提醒' context = {"to_users": to_users, "action": 0, "action_msg": action_msg, "info": msg, "invoice": invoice, "order": invoice.client_order, "send_type": 'end', "invoice_pays": invoices_pay} medium_invoice_apply_signal.send( current_app._get_current_object(), context=context) flash(u'已发送邮件给 %s ' % (', '.join(to_emails)), 'info') return redirect(url_for("finance_client_order_medium_pay.pay_info", invoice_id=invoice_id))
def index(): if not g.user.is_finance(): abort(404) orders = list(ClientOrder.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_invoice_info.lower()] 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 i in orders.object_list: client_order = i medium_invoices = [k.id for k in MediumInvoice.query.filter_by(client_order=client_order)] pays = [k for k in MediumInvoicePay.all() if k.medium_invoice_id in medium_invoices] i.apply_num = len([k for k in pays if k.pay_status == 4]) i.pay_num = len([k for k in pays if k.pay_status == 0]) return tpl('/finance/client_order/medium_pay/index_pass.html', orders=orders, title=u'申请中的媒体付款', 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 apply(): if not g.user.is_finance(): abort(404) medium_id = int(request.args.get('medium_id', 0)) search_info = request.args.get('searchinfo', '').strip() location_id = int(request.args.get('selected_location', '-1')) page = int(request.args.get('p', 1)) orders = list(MediumInvoicePay.query.filter_by(pay_status=4)) if location_id >= 0: orders = [ o for o in orders if location_id in o.medium_invoice.client_order.locations] if search_info != '': orders = [ o for o in orders if search_info.lower() in o.medium_invoice.client_order.search_invoice_info.lower()] if medium_id: orders = [o for o in orders if medium_id == o.medium_invoice.medium_id] select_locations = TEAM_LOCATION_CN.items() select_locations.insert(0, (-1, u'全部区域')) paginator = Paginator(orders, ORDER_PAGE_NUM) try: orders = paginator.page(page) except: orders = paginator.page(paginator.num_pages) for i in orders.object_list: client_order = i.medium_invoice.client_order medium_invoices = [k.id for k in MediumInvoice.query.filter_by(client_order=client_order)] pays = [k for k in MediumInvoicePay.all() if k.medium_invoice_id in medium_invoices] i.apply_num = len([k for k in pays if k.pay_status == 4]) i.pay_num = len([k for k in pays if k.pay_status == 0]) return tpl('/finance/client_order/medium_pay/index.html', orders=orders, title=u'申请中的媒体付款', locations=select_locations, location_id=location_id, now_date=datetime.date.today(), search_info=search_info, page=page, mediums=[(k.id, k.name) for k in Medium.all()], medium_id=medium_id, params='&searchinfo=%s&selected_location=%s&medium_id=%s' % (search_info, location_id, str(medium_id)))
def cost(): client_invoices = list(Invoice.all()) medium_invoices = list(MediumInvoice.all()) medium_invoice_pays = list(MediumInvoicePay.all()) medium_invoice_rebate_invoice = list(MediumRebateInvoice.all()) agent_invoices = list(AgentInvoice.all()) agent_invoice_pays = list(AgentInvoicePay.all()) back_moneys = list(BackMoney.all()) back_money_rebates = list(BackInvoiceRebate.all()) now_date = datetime.datetime.now() info = request.values.get('info', '').strip() location = int(request.values.get('location', 0)) year = request.values.get('year', now_date.strftime('%Y')) month = request.values.get('month', now_date.strftime('%m')) if month != '00': search_date = datetime.datetime.strptime( str(year) + '-' + str(month), '%Y-%m') orders = set([ k.client_order for k in ClientOrderExecutiveReport.query.filter_by( month_day=search_date) if k.status == 1 ]) else: orders = [ k for k in ClientOrder.all() if k.client_start.year == int(year) or k.client_end.year == int(year) ] if location != 0: orders = [k for k in orders if location in k.locations] if info: orders = [k for k in orders if info in k.search_info] orders = sorted(list(orders), key=lambda x: x.client_start, reverse=False) for order in orders: order.pass_invoice_sum = sum([ k.money for k in client_invoices if k.invoice_status == 0 and k.client_order == order ]) order.back_money_sum = sum( [k.money for k in back_moneys if k.client_order == order]) order.back_money_rebate_sum = sum( [k.money for k in back_money_rebates if k.client_order == order]) order.agent_invoice_sum = sum( [k.money for k in agent_invoices if k.client_order == order]) agent_invoice_pay_sum = 0.0 invoices = [k for k in agent_invoices if k.client_order == order] for invoice in invoices: agent_invoice_pay_sum += sum([ k.money for k in agent_invoice_pays if k.pay_status == 0 and k.agent_invoice == invoice ]) order.agent_invoice_pay_sum = agent_invoice_pay_sum order.medium_invoice_sum = sum( [k.money for k in medium_invoices if k.client_order == order]) invoices = [k for k in medium_invoices if k.client_order == order] order.medium_invoice_pay_sum = sum([ k.money for k in medium_invoice_pays if k.pay_status == 0 and k.medium_invoice in invoices ]) order.medium_invoice_rebate_invoice_sum = sum([ k.money for k in medium_invoice_rebate_invoice if k.client_order == order and k.invoice_status == 0 ]) for m in order.medium_orders: m.medium_invoice_sum = sum([ k.money for k in medium_invoices if k.client_order == order and k.medium == m.medium ]) m_invoices = [ k for k in medium_invoices if k.client_order == order and k.medium == m.medium ] m.medium_invoice_pay_sum = sum([ k.money for k in medium_invoice_pays if k.pay_status == 0 and k.medium_invoice in m_invoices ]) m.medium_invoice_rebate_invoice_sum = sum([ k.money for k in medium_invoice_rebate_invoice if k.client_order == order and k.invoice_status == 0 and k.medium == m.medium ]) if request.values.get('action', '') == 'download': response = write_order_excel(list(orders)) return response return tpl('cost.html', orders=orders, location=location, year=year, month=month, info=info)
def back_moneys(self): medium_invoices = MediumInvoice.query.filter_by( client_order=self.client_order, medium_id=self.medium_id) return sum([k.money for k in MediumInvoicePay.all() if k.pay_status == 0 and k.medium_invoice in medium_invoices])
def cost(): client_invoices = list(Invoice.all()) medium_invoices = list(MediumInvoice.all()) medium_invoice_pays = list(MediumInvoicePay.all()) medium_invoice_rebate_invoice = list(MediumRebateInvoice.all()) agent_invoices = list(AgentInvoice.all()) agent_invoice_pays = list(AgentInvoicePay.all()) back_moneys = list(BackMoney.all()) back_money_rebates = list(BackInvoiceRebate.all()) now_date = datetime.datetime.now() info = request.values.get('info', '').strip() location = int(request.values.get('location', 0)) year = request.values.get('year', now_date.strftime('%Y')) month = request.values.get('month', now_date.strftime('%m')) if month != '00': search_date = datetime.datetime.strptime( str(year) + '-' + str(month), '%Y-%m') orders = set([k.client_order for k in ClientOrderExecutiveReport.query.filter_by( month_day=search_date) if k.status == 1]) else: orders = [k for k in ClientOrder.all() if k.client_start.year == int( year) or k.client_end.year == int(year)] if location != 0: orders = [k for k in orders if location in k.locations] if info: orders = [k for k in orders if info in k.search_info] orders = sorted(list(orders), key=lambda x: x.client_start, reverse=False) for order in orders: order.pass_invoice_sum = sum( [k.money for k in client_invoices if k.invoice_status == 0 and k.client_order == order]) order.back_money_sum = sum( [k.money for k in back_moneys if k.client_order == order]) order.back_money_rebate_sum = sum( [k.money for k in back_money_rebates if k.client_order == order]) order.agent_invoice_sum = sum( [k.money for k in agent_invoices if k.client_order == order]) agent_invoice_pay_sum = 0.0 invoices = [k for k in agent_invoices if k.client_order == order] for invoice in invoices: agent_invoice_pay_sum += sum( [k.money for k in agent_invoice_pays if k.pay_status == 0 and k.agent_invoice == invoice]) order.agent_invoice_pay_sum = agent_invoice_pay_sum order.medium_invoice_sum = sum( [k.money for k in medium_invoices if k.client_order == order]) invoices = [k for k in medium_invoices if k.client_order == order] order.medium_invoice_pay_sum = sum( [k.money for k in medium_invoice_pays if k.pay_status == 0 and k.medium_invoice in invoices]) order.medium_invoice_rebate_invoice_sum = sum( [k.money for k in medium_invoice_rebate_invoice if k.client_order == order and k.invoice_status == 0]) for m in order.medium_orders: m.medium_invoice_sum = sum( [k.money for k in medium_invoices if k.client_order == order and k.medium == m.medium]) m_invoices = [ k for k in medium_invoices if k.client_order == order and k.medium == m.medium] m.medium_invoice_pay_sum = sum( [k.money for k in medium_invoice_pays if k.pay_status == 0 and k.medium_invoice in m_invoices]) m.medium_invoice_rebate_invoice_sum = sum( [k.money for k in medium_invoice_rebate_invoice if k.client_order == order and k.invoice_status == 0 and k.medium == m.medium]) if request.values.get('action', '') == 'download': response = write_order_excel(list(orders)) return response return tpl('cost.html', orders=orders, location=location, year=year, month=month, info=info)
def apply_pay(invoice_id): medium_invoice = MediumInvoice.get(invoice_id) if not medium_invoice: abort(404) invoice_pay_ids = request.values.getlist('invoices') invoice_pays = MediumInvoicePay.gets(invoice_pay_ids) if not invoice_pays: abort(403) emails = request.values.getlist('email') msg = request.values.get('msg', '') action = int(request.values.get('action', 0)) to_users = [g.user] + User.medias() + User.media_leaders() + \ User.super_leaders() if action == 2: action_msg = u'媒体打款申请' for invoice in invoice_pays: invoice.pay_status = MEDIUM_INVOICE_STATUS_APPLY invoice.save() flash(u'[%s媒体申请打款,打款金额: %s, 发票号: %s] %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail), 'success') invoice.medium_invoice.client_order.add_comment(g.user, u"%s,%s" % ( action_msg, u' %s媒体申请打款,打款金额: %s, 发票号: %s %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail)), msg_channel=3) send_type = "saler" elif action == 3: action_msg = u'媒体打款申请' for invoice in invoice_pays: invoice.pay_status = MEDIUM_INVOICE_STATUS_F_AGREE invoice.save() flash(u'[副总裁同意%s媒体打款,打款金额: %s, 发票号: %s] %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail), 'success') invoice.medium_invoice.client_order.add_comment(g.user, u"%s,%s" % ( action_msg, u' 副总裁同意%s媒体打款,打款金额: %s, 发票号: %s %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail)), msg_channel=3) send_type = "saler" elif action == 4: action_msg = u'黄亮已批准媒体打款' to_users += User.finances() for invoice in invoice_pays: invoice.pay_status = MEDIUM_INVOICE_STATUS_AGREE invoice.save() flash(u' 同意%s媒体订单打款申请,打款金额: %s, 发票号: %s %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail), 'success') invoice.medium_invoice.client_order.add_comment(g.user, u"%s,%s" % ( action_msg, u' %s媒体同意打款,打款金额: %s, 发票号: %s %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail)), msg_channel=3) send_type = "finance" else: action_msg = u'消息提醒' context = {"to_users": to_users, "action": action, "to_other": emails, "action_msg": action_msg, "info": msg, "invoice": medium_invoice, "order": medium_invoice.client_order, "send_type": send_type, "invoice_pays": invoice_pays} medium_invoice_apply_signal.send( current_app._get_current_object(), context=context) return redirect(url_for('saler_client_order_medium_invoice.invoice', invoice_id=invoice_id))
def apply_pay(invoice_id): medium_invoice = MediumInvoice.get(invoice_id) if not medium_invoice: abort(404) invoice_pay_ids = request.values.getlist('invoices') invoice_pays = MediumInvoicePay.gets(invoice_pay_ids) if not invoice_pays: abort(403) emails = request.values.getlist('email') msg = request.values.get('msg', '') action = int(request.values.get('action', 0)) to_users = [g.user] + User.medias() + User.media_leaders() + \ User.super_leaders() if action == 2: action_msg = u'媒体打款申请' for invoice in invoice_pays: invoice.pay_status = MEDIUM_INVOICE_STATUS_APPLY invoice.save() flash( u'[%s媒体申请打款,打款金额: %s, 发票号: %s] %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail), 'success') invoice.medium_invoice.client_order.add_comment( g.user, u"%s,%s" % (action_msg, u' %s媒体申请打款,打款金额: %s, 发票号: %s %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail)), msg_channel=3) send_type = "saler" elif action == 3: action_msg = u'媒体打款申请' for invoice in invoice_pays: invoice.pay_status = MEDIUM_INVOICE_STATUS_F_AGREE invoice.save() flash( u'[副总裁同意%s媒体打款,打款金额: %s, 发票号: %s] %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail), 'success') invoice.medium_invoice.client_order.add_comment( g.user, u"%s,%s" % (action_msg, u' 副总裁同意%s媒体打款,打款金额: %s, 发票号: %s %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail)), msg_channel=3) send_type = "saler" elif action == 4: action_msg = u'黄亮已批准媒体打款' to_users += User.finances() for invoice in invoice_pays: invoice.pay_status = MEDIUM_INVOICE_STATUS_AGREE invoice.save() flash( u' 同意%s媒体订单打款申请,打款金额: %s, 发票号: %s %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail), 'success') invoice.medium_invoice.client_order.add_comment( g.user, u"%s,%s" % (action_msg, u' %s媒体同意打款,打款金额: %s, 发票号: %s %s ' % (invoice.medium_invoice.company, invoice.money, invoice.medium_invoice.invoice_num, invoice.detail)), msg_channel=3) send_type = "finance" else: action_msg = u'消息提醒' context = { "to_users": to_users, "action": action, "to_other": emails, "action_msg": action_msg, "info": msg, "invoice": medium_invoice, "order": medium_invoice.client_order, "send_type": send_type, "invoice_pays": invoice_pays } medium_invoice_apply_signal.send(current_app._get_current_object(), context=context) return redirect( url_for('saler_client_order_medium_invoice.invoice', invoice_id=invoice_id))