# Invoice Manager：分销商的库存与开票应用

Company: Upwork
Service: 应用开发
Period: 2022-05 - 2022-07
Tech: TypeScript, Expo, React Native, Google Maps, Redux, NestJS, Express.js, GraphQL, MongoDB, Twilio
Canonical: https://webanion.com/zh/portfolio/invoice-manager-inventory-and-billing-app-for-distributors

一款离线优先的平板应用，让分销商的销售代表在零售商柜台前接单、查看库存并打印发票，有没有信号都一样。下单时即时校验库存，每张发票按顺序取得下一个编号并在同步后保持不变，销售代表离开前就能通过 Bluetooth 打印 PDF，还有一个筛选器显示哪些店铺仍有欠款。它在外勤现场处理过真实的库存，打印过真实的发票。

## 完整故事

分销的主战场在门店柜台，而不在办公室。这款应用让单据工作也能在柜台前完成。

### 订单在柜台前拿下

<p>分销商的销售代表一家接一家地跑店，站在柜台前接单。过去，订单常常先记在纸上，回到办公室再录入。店铺后屋和市场里信号时有时无，货车与仓库之间的库存数字对不上，一张录了两次或编号出错的发票，就会变成和零售商的一场争执，而这些零售商正是分销商需要留住的客户。</p><p>客户希望整笔交易都在柜台前完成，而且一次就对：订单、订单带动的库存变化、发票和付款，全部在一台无论有没有网络连接都能正常工作的平板上完成。</p>

### 整本产品目录握在销售代表手中

<p>平板一打开就是四个入口：可下单的产品、客户、购物车和发票，每个入口都显示数量，让销售代表清楚当天的进度。产品目录收录了每一件产品，附有照片、类别和剩余库存，可按名称搜索、按类别筛选。</p><p>库存在下单过程中同步核对。当门店要的数量超过剩余库存时，应用会在下单前提示，所以销售代表不会承诺没有的货，零售商也不用苦等一批根本来不了的货。</p>

### 从购物车到发票，只需三步

<p>销售代表和店主一起再核对一遍购物车，调整数量，选好客户，最终发票随即自动生成。折扣、配送费和税费当场加上，合计金额随改动实时更新，销售代表离店前，发票就已标明已付或未付。</p><p>每张发票都按顺序取下一个编号，而且同步之后编号依然不乱，所以办公室永远不会发现两张发票共用一个编号，也不会遇到需要解释的断号。</p>

### 销售代表离店前就已打印

<p>提交订单后，发票会以 PDF 格式保存在平板上，文件名包含客户名称和日期，可以立即通过 Bluetooth 打印，也可以分享出去。零售商在销售代表走出店门之前就已拿到纸质发票，单据记录从成交的地方开始，而不是第二天早上在某张办公桌前才开始。</p>

### 谁欠多少，一目了然

<p>发票列表就是分销商在外勤现场的账本。每家门店的发票都列出编号、日期、合计金额和是否已付，还可以筛选只看未付的发票，所以销售代表在接新单之前就知道该找哪些门店收款。</p><p>发票之后可以重新打开修改，保存的那一刻应用就会生成新的 PDF，因此办公室留存的副本始终与门店拿到的那份一致。</p>

### 什么都不会丢，也不会被误删

<p>这款应用离线优先：产品、客户和发票都保存在平板上，网络恢复后再核对同步，所以任何一笔销售都不会因为没有信号而耽搁。删除产品、导入产品目录或导出发票都需要输入管理员密码，这样新来的销售代表就不会一不小心清空一整天的工作。</p><p>产品目录和客户列表可以导出为带日期的备份文件，再导入到另一台平板上，老板正是这样让新的销售代表迅速上手，同时在设备之外保留一份完整副本。</p>

### 业务赖以运转的工作流程

<p>客户最初聘请工作室，为 <a href="/portfolio/coverfanz-fan-engagement-and-artist-booking-platform">CoverFanz</a> 做了一个为期一个月的平台冲刺开发，之后带着自家业务赖以运转的工作流程再次找来，后来又签下了第三份合同。Invoice Manager 在外勤现场处理真实的库存、打印真实的发票，而对这类软件来说，这才是唯一算数的检验。</p><p>对销售代表来说，这意味着每次拜访结束时，单据工作已经全部完成。对老板来说，这意味着库存、发票以及每家门店的欠款，都与实际卖出的货物保持一致。</p>
