116 lines
3.4 KiB
Go
116 lines
3.4 KiB
Go
package controllers
|
|
|
|
// 移动端进销存档案接口:商品、分类、仓库、客商。
|
|
//
|
|
// 档案维护(新建/修改/删除)仍留在 Web 端,手机端只读——开单时需要选商品、
|
|
// 选仓库、选客户/供应商,因此这里提供与 Web 端同一份过滤与补字段口径的列表/详情。
|
|
|
|
// AppErpArchiveController 档案查询(移动端只读)
|
|
type AppErpArchiveController struct {
|
|
AppErpBaseController
|
|
}
|
|
|
|
// ProductList GET /api/erp/product/list 商品列表(含分类名、全仓库存与预警状态)
|
|
func (c *AppErpArchiveController) ProductList() {
|
|
cl, err := c.erpClaims()
|
|
if c.erpDenied(err) {
|
|
return
|
|
}
|
|
page, pageSize := c.erpPage()
|
|
f := erpProductFilter{
|
|
Keyword: c.erpQuery("keyword"),
|
|
CategoryID: c.erpUint("category_id"),
|
|
Brand: c.erpQuery("brand"),
|
|
Status: c.erpQuery("status"),
|
|
IsDraft: c.erpQuery("is_draft"),
|
|
OnlyEnabled: c.erpFlag("only_enabled"),
|
|
}
|
|
list, total, code, msg := erpProductListCore(c.actor(cl), f, page, pageSize)
|
|
if msg != "" {
|
|
c.erpFail(code, code, msg)
|
|
return
|
|
}
|
|
c.erpListOK(list, total, page, pageSize, nil)
|
|
}
|
|
|
|
// ProductDetail GET /api/erp/product/detail/:id 商品详情(含分仓/分批次结存)
|
|
func (c *AppErpArchiveController) ProductDetail() {
|
|
cl, err := c.erpClaims()
|
|
if c.erpDenied(err) {
|
|
return
|
|
}
|
|
p, code, msg := erpProductDetailCore(c.actor(cl), c.erpPathID())
|
|
if msg != "" {
|
|
c.erpFail(code, code, msg)
|
|
return
|
|
}
|
|
c.erpOk(p)
|
|
}
|
|
|
|
// CategoryList GET /api/erp/product/category/list 商品分类(列表 + 树)
|
|
func (c *AppErpArchiveController) CategoryList() {
|
|
cl, err := c.erpClaims()
|
|
if c.erpDenied(err) {
|
|
return
|
|
}
|
|
rows, tree, code, msg := erpCategoryListCore(c.actor(cl))
|
|
if msg != "" {
|
|
c.erpFail(code, code, msg)
|
|
return
|
|
}
|
|
c.erpOk(map[string]interface{}{"list": rows, "tree": tree})
|
|
}
|
|
|
|
// WarehouseList GET /api/erp/warehouse/list 仓库列表(含在库品种数与货值)
|
|
func (c *AppErpArchiveController) WarehouseList() {
|
|
cl, err := c.erpClaims()
|
|
if c.erpDenied(err) {
|
|
return
|
|
}
|
|
rows, code, msg := erpWarehouseListCore(c.actor(cl), c.erpQuery("keyword"), c.erpQuery("status"), c.erpFlag("only_enabled"))
|
|
if msg != "" {
|
|
c.erpFail(code, code, msg)
|
|
return
|
|
}
|
|
c.erpOk(map[string]interface{}{"list": rows})
|
|
}
|
|
|
|
// PartnerList GET /api/erp/partner/list?partner_type=supplier|customer 客商列表
|
|
// 供应商与客户统一出参(partner_type/partner_name/open_amount),手机端开单与对账只需对接一种结构。
|
|
func (c *AppErpArchiveController) PartnerList() {
|
|
cl, err := c.erpClaims()
|
|
if c.erpDenied(err) {
|
|
return
|
|
}
|
|
page, pageSize := c.erpPage()
|
|
partnerType := c.erpQuery("partner_type")
|
|
if partnerType != "supplier" {
|
|
partnerType = "customer"
|
|
}
|
|
list, total, code, msg := erpPartnerListCore(c.actor(cl), partnerType,
|
|
c.erpQuery("keyword"), c.erpFlag("only_enabled"), page, pageSize)
|
|
if msg != "" {
|
|
c.erpFail(code, code, msg)
|
|
return
|
|
}
|
|
c.erpListOK(list, total, page, pageSize, nil)
|
|
}
|
|
|
|
// PartnerDetail GET /api/erp/partner/detail/:id?partner_type= 客商详情
|
|
func (c *AppErpArchiveController) PartnerDetail() {
|
|
cl, err := c.erpClaims()
|
|
if c.erpDenied(err) {
|
|
return
|
|
}
|
|
partnerType := c.erpQuery("partner_type")
|
|
if partnerType != "supplier" {
|
|
partnerType = "customer"
|
|
}
|
|
data, code, msg := erpPartnerDetailCore(c.actor(cl), partnerType, c.erpPathID())
|
|
if msg != "" {
|
|
c.erpFail(code, code, msg)
|
|
return
|
|
}
|
|
c.erpOk(data)
|
|
}
|