要如何实现挂账表功能?


发布人 Kaiyuan  发布时间 1649476437807
关键字 二次开发  模板引擎  报表 

就是我客户服务记录功能,因为是要不定期结账的,需要有一个记录 日期,项目或产品,客户名称,后面还要有是否结账和结账时间。

我还想要挂账表关联和库存能直接联动,挂账表上添加项目能自动出库。

我要修改出库的数据库来实现吗?





回复 (1)
  • #
  • #1 wx_15926 1649492144802

    描述的功能比较像进销存系统中的应收/应付款管理

    如果基于现在的进销存模块来配置的话,可以把销售出库表进行一些扩展。

    或者创建建一个新的挂帐表来实现这些的功能。都需要编写少量代码。

    详细操作可以参考OnceOA的相关教程,创建新表可以参考销售出库表,创建客户(1)与商品(2)的相关基本信息,并新建一个结帐时间字段:

    ar_invoice_9.png

    点击显示可以打开命令行终端,查看输出的调试信息。

    ar_invoice_1.png

    重启OnceOA Web Server后,可以看到编辑界面上的相关输入内容:

    ar_invoice_1.png

    然后可以在流程中设置流程字段,并创建一个结帐的流程结点:

    在过滤函数中输入更新库存和结帐时间的相关代码。

    也可以在结帐后面添加一个“已结帐”的状态流程结点,过滤函数留空即可。

    ar_invoice_1.png

    详细代码如下,这是以更新销售订单表为例,如果是新创建的表,需要将 's.order' 更改为新的表名:

    async function checkout(orderInfo) {
      for (var i = 0; i < (orderInfo.items || []).length; i++) {
        let orderItem = orderInfo.items[i]
        let quantity = Number(orderItem.quantity) || 0
    
        //订购数据小于1,忽略
        if (quantity < 1) {
          continue
        }
    
        //检查商品是否存在
        let itemInfo = (await oncedb.selectAsync('s.item', { id: orderItem.id }))[0]
        //打印调试信息
        console.trace(itemInfo)
        if (!itemInfo) {
          throw new Error('商品不存在')
        }
    
        //更新并检查库存
        let stock = Number(itemInfo.stock) || 0
        stock -= quantity
        if (stock < 0) {
          throw new Error(`商品 ${itemInfo.name} 库存不足`)
        }
    
        //更新s.item商品表的库存
        await oncedb.updateAsync('s.item', { id: orderItem.id, stock: stock })
      }
    
      //所有库存更新后,再更新s.order销售表的出帐时间
      await oncedb.updateAsync('s.order', { id: orderInfo.id, checkout: Date.now() })
    }
    

    在保存数据后就,出现结帐按钮,点击后会执行相应操作,如果库存不足会显示错误:

    ar_invoice_1.png

    创建新表后可编辑 serp.main.js文件,将这个表加入到进销存菜单中,复制红框部分,将高亮部分改成你创建新的新表名:

    ar_invoice_1.png

    编辑好后可重启OnceOA Web Server

 关键字
二次开发 模板引擎 报表

 关注
关注
OnceOA

OnceOA