Phương thức thanh toán
Danh mục dùng chung cho mọi sản phẩm: khai các phương thức thanh toán của tổ chức (tiền mặt, chuyển khoản, thẻ, ví điện tử...) một chỗ, các màn thu tiền chỉ việc chọn.
Khai phương thức
Mỗi phương thức gồm tên tự đặt, loại chuẩn hoá và thứ tự hiển thị. Tên là chữ khách thấy trên màn thu tiền (ví dụ "Chuyển khoản VCB"), còn loại giúp báo cáo gom đúng bản chất dòng tiền dù tên đặt kiểu gì. Phương thức tắt hoạt động sẽ không hiện ở màn thu tiền nhưng chứng từ cũ đã thu bằng phương thức đó vẫn giữ nguyên.
Ghi chú cho dev sản phẩm khi nối
Bảng saas_payment_methods chỉ là danh mục theo công ty; giao dịch của sản phẩm trỏ mềm
payment_method_id vào đây, không khoá ngoại. Lấy danh sách cho màn thu tiền qua scope
PaymentMethod::activeForCompany($companyId). Nhóm menu đổi qua filter
saas_payment_method_navigation_group. Phần riêng từng sản phẩm (chi nhánh áp dụng, cấu hình
cổng thanh toán online) ở lại plugin sản phẩm.
Công ty vừa lập thì gọi PaymentMethod::seedDefaultsFor($companyId) để có sẵn hai dòng Tiền mặt
và Chuyển khoản. Gọi lại nhiều lần không sinh dòng trùng, và không đụng tới phương thức công ty
đã tự sửa.
Phiếu thu và loại phiếu
Model chứng từ nào nhận tiền thì gắn trait ReceivesPayments. Mỗi lần khách trả là một dòng
trong saas_payments, cột kind cho biết đó là loại nào:
| Giá trị | Nghĩa | Ảnh hưởng tới số đã thu |
|---|---|---|
payment |
khách trả tiền, đây là mặc định | cộng vào |
deposit |
đặt cọc trước | cộng vào, và đếm riêng qua getDepositAmount() |
refund |
trả lại tiền cho khách | trừ ra |
Số tiền luôn ghi số dương, dấu nằm ở loại phiếu. getPaidAmount() đã tự trừ phần hoàn nên sản
phẩm không phải nhớ trừ.
Cột amount là số nguyên không âm, đây là quyết định chứ không phải sót. Sổ tiền chỉ nhận số
dương, chiều tiền do loại phiếu nói. Gặp dữ liệu cũ có chứng từ mang số âm, ví dụ hoá đơn nhập từ
phần mềm khác, thì đừng đổi kiểu cột: dựng lại thành phiếu refund số dương, hoặc để sản phẩm xử
bằng chứng từ ghi có của mình rồi mới ghi phiếu thu sang đây. Ghi thẳng số âm là cơ sở dữ liệu chối,
và nó chối đúng.
Sản phẩm nào từ trước đã có ô khai tài khoản ngân hàng riêng thì để tài khoản khai ở đây đè lên ô cũ, ô cũ chỉ còn là đường lùi cho công ty chưa bật gói. Hai chỗ khai lệch nhau là khách chuyển vào một nơi còn cổng ngồi soi nơi khác: tiền về thật mà sổ vẫn báo chưa thu.
Cột kind là chuỗi trần, cố ý không đúc sang enum, vì gói dùng chung không biết trước sản
phẩm nào cần thêm loại nào. Sản phẩm nào trước đây đúc enum ở bảng riêng thì phải so bằng chuỗi khi
chuyển sang đây: whereIn('kind', [PaymentKind::Deposit]) không khớp dòng nào và tiền cọc đọc ra
bằng không, trong khi không có lỗi nào báo. Dùng hằng số Payment::KIND_DEPOSIT cho chắc.
Số tiền có dấu đọc bằng thuộc tính $payment->signed_amount, không phải hàm.
seedDefaultsFor() đặt tên phương thức theo ngôn ngữ đang dùng, nên chỗ nào cần tra lại thì tra
theo type (PaymentMethod::TYPE_CASH, TYPE_BANK_TRANSFER), đừng tra theo tên.
Đừng ném lỗi trong hook creating của Payment. Khi tiền về từ cổng, phiếu thu được ghi bên
trong một giao dịch cơ sở dữ liệu, nên ném lỗi ở đó là huỷ cả lượt ghi nhận và đồng tiền ấy rơi
ra ngoài sổ trong khi nhà cung cấp vẫn gọi lại. Muốn chặn thu lố hay chặn chứng từ đã huỷ thì
chặn ở phiếu ghi tay, còn đường tự động cứ để tiền vào sổ rồi xếp vào mục chưa khớp.
Phân quyền
Nhóm quyền Phương thức thanh toán cấp cho vai trò Quản lý khi tạo tổ chức mới; tổ chức có sẵn thì chủ tổ chức vào Phân quyền tự tick.
Tài khoản nhận tiền
Màn Tài khoản nhận tiền giữ các tài khoản ngân hàng công ty dùng để nhận tiền của khách. Nó phục vụ việc in thông tin chuyển khoản lên hoá đơn, sinh mã QR chuyển khoản, và về sau là đối chiếu tiền vào khi bật cổng thanh toán tự động.
Ngân hàng chọn từ danh mục dùng chung, không gõ tay. Hệ nhận diện ngân hàng bằng mã BIN nên ngân hàng có đổi tên thì tài khoản của bạn vẫn trỏ đúng chỗ.
- Số tài khoản: chỉ gồm chữ cái và chữ số, không có khoảng trắng, vì thư báo tiền về của ngân hàng cũng ghi liền như vậy, để lệch một dấu cách là đối chiếu trượt.
- Chủ tài khoản: ghi đúng như ngân hàng hiển thị, viết không dấu.
- Tên gọi: đặt cho dễ phân biệt khi có nhiều tài khoản, thường là tên chi nhánh.
- Tài khoản mặc định: dùng khi chứng từ không chỉ định tài khoản nào. Mỗi công ty chỉ có một tài khoản mặc định, đặt cái mới là cái cũ tự nhường chỗ.
Công ty nhiều chi nhánh khai mỗi nơi một tài khoản đều được, không giới hạn số lượng.
Tài khoản đã xoá vẫn nằm trong thùng rác nên phiếu thu cũ không mất dấu vết; muốn ẩn khỏi màn thu tiền mà giữ nguyên dữ liệu thì tắt Đang hoạt động.