feat: 入库新增「送货日期」字段(与业务日期区分)
- models.Inbound 增加 delivery_date 列(可空, 默认 None) - 入库单笔录入表单新增「送货日期」输入(默认当天, 可改供应商实际到货日); 出库不受影响 - 物料明细页入库流水新增「送货日期」列展示 - seed_admin 增加幂等补列: 旧库启动时自动 ALTER TABLE inbound ADD COLUMN delivery_date, 开发/EXE 均兼容 - 教程补充送货日期字段说明 (注: instance/app.db 已本地补列, 但未纳入本次提交; dist/app.db 为运行库已 gitignore)
This commit is contained in:
@@ -430,11 +430,14 @@ def inbound():
|
||||
if qty <= 0:
|
||||
flash("入库数量必须大于 0", "error")
|
||||
else:
|
||||
dlv = request.form.get("delivery_date", "").strip()
|
||||
delivery_date = _date(dlv) if dlv else None
|
||||
rec = Inbound(
|
||||
material_id=mid, batch_no=request.form.get("batch_no", ""),
|
||||
qty=qty, operator=request.form.get("operator", ""),
|
||||
source=request.form.get("source", ""),
|
||||
occur_date=_date(request.form.get("occur_date")),
|
||||
delivery_date=delivery_date,
|
||||
remark=request.form.get("remark", ""))
|
||||
db.session.add(rec)
|
||||
db.session.commit()
|
||||
@@ -1009,6 +1012,15 @@ def api_import_boms_commit():
|
||||
def seed_admin():
|
||||
with app.app_context():
|
||||
db.create_all()
|
||||
# 兼容旧库: 给 inbound 表补充 delivery_date 列(幂等)
|
||||
try:
|
||||
cols = [r[1] for r in db.session.execute(
|
||||
db.text("PRAGMA table_info(inbound)")).fetchall()]
|
||||
if "delivery_date" not in cols:
|
||||
db.session.execute(db.text("ALTER TABLE inbound ADD COLUMN delivery_date DATE"))
|
||||
db.session.commit()
|
||||
except Exception:
|
||||
db.session.rollback()
|
||||
if not db.session.scalar(db.select(User).where(User.username == "admin")):
|
||||
db.session.add(User(username="admin", password=sha256("admin123"),
|
||||
role="admin", display_name="管理员"))
|
||||
|
||||
@@ -49,6 +49,7 @@ class Inbound(db.Model):
|
||||
operator = db.Column(db.String(64), default="") # 经手人
|
||||
source = db.Column(db.String(255), default="") # 来源 / 供应商
|
||||
occur_date = db.Column(db.Date, default=date.today)
|
||||
delivery_date = db.Column(db.Date, default=None) # 送货日期(供应商到货日, 可空)
|
||||
remark = db.Column(db.String(255), default="")
|
||||
created_at = db.Column(db.DateTime, default=datetime.now)
|
||||
|
||||
|
||||
@@ -29,11 +29,12 @@
|
||||
|
||||
<h3>入库流水(每次入库时间 / 数量)</h3>
|
||||
<table class="tbl">
|
||||
<thead><tr><th>入库日期</th><th>录入时间</th><th>数量</th><th>批次号</th><th>来源 / 供应商</th><th>经手人</th><th>备注</th></tr></thead>
|
||||
<thead><tr><th>入库日期</th><th>送货日期</th><th>录入时间</th><th>数量</th><th>批次号</th><th>来源 / 供应商</th><th>经手人</th><th>备注</th></tr></thead>
|
||||
<tbody>
|
||||
{% for r in inbounds %}
|
||||
<tr>
|
||||
<td>{{ r.occur_date }}</td>
|
||||
<td>{{ r.delivery_date or '-' }}</td>
|
||||
<td class="small muted">{{ r.created_at.strftime('%Y-%m-%d %H:%M') if r.created_at else '-' }}</td>
|
||||
<td class="num">{{ '%.2f'|format(r.qty) }}</td>
|
||||
<td>{{ r.batch_no or '-' }}</td>
|
||||
@@ -42,7 +43,7 @@
|
||||
<td>{{ r.remark or '-' }}</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr><td colspan="7" class="muted">暂无入库记录</td></tr>
|
||||
<tr><td colspan="8" class="muted">暂无入库记录</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
{% if kind=='inbound' %}
|
||||
<label>来源 / 供应商</label>
|
||||
<input name="source">
|
||||
<label>送货日期</label>
|
||||
<input name="delivery_date" type="date" value="{{ today }}">
|
||||
{% else %}
|
||||
<label>用途</label>
|
||||
<input name="purpose">
|
||||
|
||||
+2
-2
@@ -109,7 +109,7 @@
|
||||
|
||||
### 5.4 物料明细与流水查询
|
||||
点列表里的 **明细** 链接,进入单颗物料页面,顶部三张卡片显示在库 / 入库总 / 消耗总;下方两张表分别是:
|
||||
- **入库流水**:入库日期、录入时间、数量、批次、来源、经手人
|
||||
- **入库流水**:入库日期、送货日期、录入时间、数量、批次、来源、经手人
|
||||
- **出库流水**:出库日期、录入时间、数量、批次、用途、关联单号、经手人
|
||||
|
||||
> 这就是「查看每颗物料每次的入库时间」的入口。
|
||||
@@ -130,7 +130,7 @@
|
||||
表单顶部有一个 **「物料编码」输入框**(与「物料」下拉并列):
|
||||
- **直接输入或扫码**物料编码(如 `P0001`),系统会**自动定位**到下拉里对应的物料:精确命中、或编码前缀唯一时立即锁定,并把光标跳到「数量」;多个前缀候选会提示「继续输入」;编码不存在会标红提示「未找到」。
|
||||
- 也可以照旧在「物料」下拉里手动选择——手选后编码框会自动反向填入对应编码,两种方式互通。
|
||||
- 填批次号、数量、经手人、来源/供应商(出库为用途/关联单号)、业务日期、备注 → 提交。库存实时 +N(出库实时 −N,不足会拦截),并写操作日志。
|
||||
- 填送货日期、批次号、数量、经手人、来源/供应商(出库为用途/关联单号)、业务日期、备注 → 提交。库存实时 +N(出库实时 −N,不足会拦截),并写操作日志。送货日期默认当天,可改成供应商实际到货日,与「业务日期」(记账日)区分。
|
||||
|
||||
### 6.2 批量导入窗口
|
||||
点右上角 **⊞ 批量导入窗口**,支持两种方式:
|
||||
|
||||
Reference in New Issue
Block a user