更新
This commit is contained in:
1 parent
5718a00e31
commit
1850ac640e
226 files changed
+37772
-12071
No files matched your search
@@ -0,0 +1,230 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
erp "server/services/erp"
|
||||
)
|
||||
|
||||
// 移动端往来账与收付款接口。
|
||||
//
|
||||
// 往来账由单据生效时自动生成,手机端同样不开放手工新增/修改;
|
||||
// 收付款单可以手工开草稿并确认核销,逻辑全部复用 erp_finance_core.go。
|
||||
|
||||
// AppErpFinanceController 往来账 / 收付款(移动端)
|
||||
type AppErpFinanceController struct {
|
||||
AppErpBaseController
|
||||
}
|
||||
|
||||
// BillList GET /api/erp/finance/bill/list 往来账(应收/应付)
|
||||
func (c *AppErpFinanceController) BillList() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
page, pageSize := c.erpPage()
|
||||
f := erpBillFilter{
|
||||
BillType: c.erpQuery("bill_type"),
|
||||
PartnerID: c.erpUint("partner_id"),
|
||||
PartnerType: c.erpQuery("partner_type"),
|
||||
SourceDocID: c.erpUint("source_doc_id"),
|
||||
SettleState: c.erpQuery("settle_state"),
|
||||
Keyword: c.erpQuery("keyword"),
|
||||
DateFrom: c.erpQuery("date_from"),
|
||||
DateTo: c.erpQuery("date_to"),
|
||||
}
|
||||
list, total, summary, code, msg := erpBillListCore(c.actor(cl), f, page, pageSize)
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpListOK(list, total, page, pageSize, map[string]interface{}{"summary": summary})
|
||||
}
|
||||
|
||||
// BillDetail GET /api/erp/finance/bill/detail/:id 往来账详情(含核销记录与原单据)
|
||||
func (c *AppErpFinanceController) BillDetail() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
data, code, msg := erpBillDetailCore(c.actor(cl), c.erpPathID())
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpOk(data)
|
||||
}
|
||||
|
||||
// Aging GET /api/erp/finance/aging 账龄分析(按未结余额分桶)
|
||||
func (c *AppErpFinanceController) Aging() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
data, code, msg := erpAgingCore(c.actor(cl))
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpOk(data)
|
||||
}
|
||||
|
||||
// FundList GET /api/erp/finance/fund/list 收付款单列表
|
||||
func (c *AppErpFinanceController) FundList() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
page, pageSize := c.erpPage()
|
||||
f := erpFundFilter{
|
||||
FundType: c.erpQuery("fund_type"),
|
||||
Status: c.erpQuery("status"),
|
||||
PartnerID: c.erpUint("partner_id"),
|
||||
Keyword: c.erpQuery("keyword"),
|
||||
DateFrom: c.erpQuery("date_from"),
|
||||
DateTo: c.erpQuery("date_to"),
|
||||
}
|
||||
list, total, code, msg := erpFundListCore(c.actor(cl), f, page, pageSize)
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpListOK(list, total, page, pageSize, nil)
|
||||
}
|
||||
|
||||
// FundDetail GET /api/erp/finance/fund/detail/:id 收付款单详情(含核销明细与原往来账)
|
||||
func (c *AppErpFinanceController) FundDetail() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
data, code, msg := erpFundDetailCore(c.actor(cl), c.erpPathID())
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpOk(data)
|
||||
}
|
||||
|
||||
// FundSave POST /api/erp/finance/fund/save 新建/修改收付款草稿
|
||||
func (c *AppErpFinanceController) FundSave() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
var p erpFundPayload
|
||||
if !c.erpBody(&p, false) {
|
||||
return
|
||||
}
|
||||
id, fundNo, code, msg := erpFundSaveCore(c.actor(cl), p)
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpOk(map[string]interface{}{"id": id, "fund_no": fundNo})
|
||||
}
|
||||
|
||||
// FundConfirm POST /api/erp/finance/fund/confirm/:id
|
||||
// 确认收付款并核销;body 可选 settles=[{partner_bill_id,amount}],不传则按到期日自动 FIFO。
|
||||
func (c *AppErpFinanceController) FundConfirm() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
var body struct {
|
||||
Settles []erp.SettleItem `json:"settles"`
|
||||
}
|
||||
if !c.erpBody(&body, true) {
|
||||
return
|
||||
}
|
||||
code, msg := erpFundConfirmCore(c.actor(cl), c.erpPathID(), body.Settles)
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpOk(nil)
|
||||
}
|
||||
|
||||
// FundVoid POST /api/erp/finance/fund/void/:id 作废收付款单(回滚核销)
|
||||
func (c *AppErpFinanceController) FundVoid() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
code, msg := erpFundVoidCore(c.actor(cl), c.erpPathID())
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpOk(nil)
|
||||
}
|
||||
|
||||
// FundDelete DELETE /api/erp/finance/fund/delete/:id 仅草稿可删
|
||||
func (c *AppErpFinanceController) FundDelete() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
code, msg := erpFundDeleteCore(c.actor(cl), c.erpPathID())
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpOk(nil)
|
||||
}
|
||||
|
||||
// FundOpenBills GET /api/erp/finance/fund/openBills?fund_type=&partner_id=
|
||||
// 收款/付款时列出可核销的往来账,手机端据此勾选。
|
||||
func (c *AppErpFinanceController) FundOpenBills() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
ft, _ := erpInt8Query(c.erpQuery("fund_type"))
|
||||
list, code, msg := erpFundOpenBillsCore(c.actor(cl), ft, c.erpUint("partner_id"))
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpOk(map[string]interface{}{"list": list})
|
||||
}
|
||||
|
||||
// CashFlow GET /api/erp/finance/cashflow 资金流水(只统计实际收付)
|
||||
func (c *AppErpFinanceController) CashFlow() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
// 与 Web 端一致:默认统计近 30 天
|
||||
from, to := time.Now().AddDate(0, 0, -30), time.Now()
|
||||
if d := c.erpQuery("date_from"); d != "" {
|
||||
if t, e := time.ParseInLocation("2006-01-02", d, time.Local); e == nil {
|
||||
from = t
|
||||
}
|
||||
}
|
||||
if d := c.erpQuery("date_to"); d != "" {
|
||||
if t, e := time.ParseInLocation("2006-01-02", d, time.Local); e == nil {
|
||||
to = t
|
||||
}
|
||||
}
|
||||
data, code, msg := erpCashFlowCore(c.actor(cl), from, to)
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpOk(data)
|
||||
}
|
||||
|
||||
// PartnerSummary GET /api/erp/finance/partner 往来单位对账汇总
|
||||
func (c *AppErpFinanceController) PartnerSummary() {
|
||||
cl, err := c.erpClaims()
|
||||
if c.erpDenied(err) {
|
||||
return
|
||||
}
|
||||
data, code, msg := erpPartnerSummaryCore(c.actor(cl), c.erpQuery("partner_type"))
|
||||
if msg != "" {
|
||||
c.erpFail(code, code, msg)
|
||||
return
|
||||
}
|
||||
c.erpOk(data)
|
||||
}
|
||||
Reference in new issue
Block a user