优化付款交货待办展示并支持列表快捷登记
This commit is contained in:
+61
-1
@@ -56,7 +56,7 @@ def test_follow_payment_dashboard_and_archived_pdf(app, clients):
|
||||
assert not contains(clients['approver'], 'paid_undelivered', number)
|
||||
assert clients['maker'].get('/orders/%s/pdf' % oid).data == pdf
|
||||
dashboard = clients['admin'].get('/').get_data(as_text=True)
|
||||
assert re.search(r'data-tracking="completed"[^>]*><div class="v">1</div>', dashboard)
|
||||
assert re.search(r'data-tracking="closed"[^>]*>查看已全部完成(1)', dashboard)
|
||||
other_dashboard = clients['other'].get('/').get_data(as_text=True)
|
||||
assert number not in other_dashboard
|
||||
with app.Session() as db:
|
||||
@@ -160,3 +160,63 @@ def test_admin_can_follow_and_pay_and_invalid_filter_is_rejected(app, clients):
|
||||
assert follow(app, clients, oid, actor='admin').status_code == 302
|
||||
assert pay(app, clients, oid, actor='admin').status_code == 302
|
||||
assert clients['admin'].get('/orders?tracking=invalid').status_code == 400
|
||||
|
||||
|
||||
def test_action_queue_keeps_old_open_orders_and_unreceived_invoices(app, clients):
|
||||
with app.Session() as db:
|
||||
maker = db.query(app.User).filter_by(username='maker').one()
|
||||
for i in range(16):
|
||||
db.add(app.Order(order_no='QUEUE-%02d' % i, created_by=maker.id,
|
||||
supplier_name='待办测试', status='approved', revision=1,
|
||||
payment_status='paid', delivery_status='delivered',
|
||||
invoice_status='received', fulfillment_revision=1, payment_revision=1))
|
||||
db.flush()
|
||||
rows = db.query(app.Order).order_by(app.Order.id).all()
|
||||
rows[0].payment_status = 'unpaid'
|
||||
rows[0].needs_prepayment = True
|
||||
rows[1].invoice_status = 'pending'
|
||||
rows[2].payment_revision = 0
|
||||
rows[3].payment_status = 'unknown'
|
||||
db.commit()
|
||||
html = clients['maker'].get('/').get_data(as_text=True)
|
||||
board = html.split('<table class="grid tracking-table order-cards">')[1].split('</table>')[0]
|
||||
assert all('QUEUE-%02d' % i in board for i in range(4))
|
||||
assert 'QUEUE-15' not in board
|
||||
assert board.index('QUEUE-02') < board.index('QUEUE-00')
|
||||
assert '跟进收票' in board and '变更前记录 · 待核对' in board
|
||||
assert 'QUEUE-15' not in clients['maker'].get('/orders').get_data(as_text=True)
|
||||
assert 'QUEUE-15' in clients['maker'].get('/orders?show_completed=1').get_data(as_text=True)
|
||||
assert 'QUEUE-15' in clients['maker'].get('/orders?tracking=closed').get_data(as_text=True)
|
||||
assert 'QUEUE-00' not in clients['other'].get('/').get_data(as_text=True)
|
||||
assert clients['admin'].get('/?tracking=invalid').status_code == 400
|
||||
|
||||
|
||||
@pytest.mark.parametrize('actor,kind,status', [
|
||||
('maker', 'payment', 403), ('approver', 'follow-up', 403),
|
||||
('other', 'follow-up', 404), ('maker', 'follow-up', 200),
|
||||
('approver', 'payment', 200), ('admin', 'follow-up', 200),
|
||||
])
|
||||
def test_quick_editor_checks_permissions(app, clients, actor, kind, status):
|
||||
oid = approved(app, clients)
|
||||
for suffix in ('', '?fragment=1'):
|
||||
assert clients[actor].get('/orders/%s/tracking/%s%s' % (oid, kind, suffix)).status_code == status
|
||||
|
||||
|
||||
def test_quick_payment_preserves_concurrency_archive_and_latest_actor(app, clients):
|
||||
oid = approved(app, clients)
|
||||
pdf = clients['maker'].get('/orders/%s/pdf' % oid).data
|
||||
version = order(app, oid)['version']
|
||||
values = {'row_version': str(version), 'payment_status': 'partial',
|
||||
'payment_date': date.today().isoformat(), 'payment_note': '已付首款,尾款待交齐'}
|
||||
response = post(clients['approver'], '/orders/%s/payment' % oid, values,
|
||||
headers={'X-Tracking-Modal': '1'})
|
||||
assert response.status_code == 200 and response.json == {'ok': True}
|
||||
stale = post(clients['approver'], '/orders/%s/payment' % oid, values,
|
||||
headers={'X-Tracking-Modal': '1'})
|
||||
assert stale.status_code == 409
|
||||
assert follow(app, clients, oid).status_code == 302
|
||||
html = clients['maker'].get('/orders/%s/view' % oid).get_data(as_text=True)
|
||||
assert '最近登记:' in html and '最近跟进:' in html
|
||||
assert '已付首款,尾款待交齐' in html and '已收第一批货' in html
|
||||
assert html.index('付款与交货跟进') < html.index('单据信息')
|
||||
assert clients['maker'].get('/orders/%s/pdf' % oid).data == pdf
|
||||
|
||||
Reference in New Issue
Block a user