Files
yunzerwebsiteallinone/go/controllers/app_erp_report.go
T
2026-10-19 01:13:17 +08:00

90 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package controllers
import (
"server/models"
)
// 移动端进销存报表接口:购销汇总、热销排行、收发存、毛利。
//
// 统计口径全部来自「已生效」单据与库存流水,与 Web 端报表共用 erp_report_core.go,
// 因此手机端看到的金额一定能和后台对得上;经营看板见 /api/erp/dashboard。
// AppErpReportController 报表(移动端)
type AppErpReportController struct {
AppErpBaseController
}
// PurchaseSummary GET /api/erp/report/purchase?dimension=product|supplier|month 采购汇总
func (c *AppErpReportController) PurchaseSummary() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
from, to := c.erpDateRange(0)
group := erpReportDimension(c.erpQuery("dimension"))
items, docPartner, returnItems := erpSummaryDocs(c.actor(cl).Tid,
models.ErpDocPurchaseIn, models.ErpDocPurchaseReturn, from, to, c.erpUint("partner_id"))
c.erpOk(erpSummaryReportData(group, items, docPartner, returnItems))
}
// SalesSummary GET /api/erp/report/sales?dimension=product|customer|month 销售汇总
func (c *AppErpReportController) SalesSummary() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
from, to := c.erpDateRange(0)
group := erpReportDimension(c.erpQuery("dimension"))
items, docPartner, returnItems := erpSummaryDocs(c.actor(cl).Tid,
models.ErpDocSalesOut, models.ErpDocSalesReturn, from, to, c.erpUint("partner_id"))
c.erpOk(erpSummaryReportData(group, items, docPartner, returnItems))
}
// Rank GET /api/erp/report/rank?order=desc|asc&top=10 热销/滞销排行
func (c *AppErpReportController) Rank() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
from, to := c.erpDateRange(0)
top, _ := c.GetInt("top", 10)
data, code, msg := erpSalesRankCore(c.actor(cl), from, to, top, c.erpQuery("order") == "asc")
if msg != "" {
c.erpFail(code, code, msg)
return
}
c.erpOk(data)
}
// StockMove GET /api/erp/report/stockmove 收发存汇总表
func (c *AppErpReportController) StockMove() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
from, to := c.erpDateRange(0)
page, pageSize := c.erpPage()
list, total, summary, code, msg := erpStockMoveCore(
c.actor(cl), from, to, c.erpUint("warehouse_id"), c.erpQuery("keyword"), page, pageSize)
if msg != "" {
c.erpFail(code, code, msg)
return
}
c.erpListOK(list, total, page, pageSize, map[string]interface{}{"summary": summary})
}
// Profit GET /api/erp/report/profit 毛利分析
func (c *AppErpReportController) Profit() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
from, to := c.erpDateRange(0)
data, code, msg := erpProfitCore(c.actor(cl), from, to)
if msg != "" {
c.erpFail(code, code, msg)
return
}
c.erpOk(data)
}