57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
"""标题序号须避开唯一索引仍占用的号,包括已软删记录。"""
|
|
from datetime import date, datetime
|
|
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
from app.models.bx_models import BxReimburseApply
|
|
from app.utils.bx_codegen import allocate_reimburse_title_seq, preview_reimburse_title_seq
|
|
|
|
TENANT = "shanxia2.0"
|
|
REIMBURSE_DATE = date(2026, 9, 20)
|
|
|
|
|
|
def _session():
|
|
engine = create_engine("sqlite://")
|
|
BxReimburseApply.__table__.create(engine)
|
|
return sessionmaker(bind=engine)()
|
|
|
|
|
|
def _apply(*, title_seq: int, del_flag: int, apply_code: str) -> BxReimburseApply:
|
|
now = datetime(2026, 9, 20, 19, 0, 0)
|
|
return BxReimburseApply(
|
|
id=apply_code,
|
|
apply_code=apply_code,
|
|
title=f"系统管理员报销单20260920{title_seq:03d}",
|
|
reimburse_date=REIMBURSE_DATE,
|
|
title_seq=title_seq,
|
|
applicant_id="u1",
|
|
applicant_name="系统管理员",
|
|
expense_id="67",
|
|
expense_name="职工福利费",
|
|
amount=1,
|
|
status="draft",
|
|
tenant_no=TENANT,
|
|
create_dept_id="dept",
|
|
create_time=now,
|
|
update_time=now,
|
|
del_flag=del_flag,
|
|
)
|
|
|
|
|
|
def test_allocate_title_seq_skips_soft_deleted_row():
|
|
db = _session()
|
|
db.add(_apply(title_seq=1, del_flag=1, apply_code="BX20260920001"))
|
|
db.commit()
|
|
|
|
assert allocate_reimburse_title_seq(db, TENANT, REIMBURSE_DATE) == 2
|
|
assert preview_reimburse_title_seq(db, TENANT, REIMBURSE_DATE) == 2
|
|
|
|
|
|
def test_allocate_title_seq_still_increments_live_row():
|
|
db = _session()
|
|
db.add(_apply(title_seq=1, del_flag=0, apply_code="BX20260920001"))
|
|
db.commit()
|
|
|
|
assert allocate_reimburse_title_seq(db, TENANT, REIMBURSE_DATE) == 2
|