|
@@ -1269,6 +1269,7 @@ func (rg *RegisterController) Export(c *gin.Context) {
|
|
|
// @Param EndDate query string false "结束日期"
|
|
|
// @Param MinAmount query float64 false "开票金额区间-最小值"
|
|
|
// @Param MaxAmount query float64 false "开票金额区间-最大值"
|
|
|
+// @Param IsExport query int false "是否导出: 0-否; 1-是"
|
|
|
// @Success 200 {object} fms.ContractInvoiceItem
|
|
|
// @router /contract/register/invoice_list [get]
|
|
|
func (rg *RegisterController) InvoiceList(c *gin.Context) {
|
|
@@ -1345,6 +1346,10 @@ func (rg *RegisterController) InvoiceList(c *gin.Context) {
|
|
|
page.SetPageSize(pageSize)
|
|
|
page.SetCurrent(pageIndex)
|
|
|
page.AddOrderItem(base.OrderItem{Column: "invoice_time", Asc: false})
|
|
|
+ if req.IsExport == 1 {
|
|
|
+ page.SetPageSize(10000)
|
|
|
+ page.SetCurrent(1)
|
|
|
+ }
|
|
|
total, list, e := fms.GetContractInvoiceItemPageList(page, cond, pars)
|
|
|
if e != nil {
|
|
|
resp.FailMsg("获取失败", "获取合同开票/到款列表失败, Err: "+e.Error(), c)
|
|
@@ -1357,7 +1362,7 @@ func (rg *RegisterController) InvoiceList(c *gin.Context) {
|
|
|
|
|
|
// 分币种合计金额
|
|
|
var amountTotal float64
|
|
|
- sumList, e := fms.GetInvoiceListCurrencySum(cond, pars)
|
|
|
+ sumList, e := fms.GetInvoiceListCurrencySum(cond, pars, "currency_unit")
|
|
|
if e != nil {
|
|
|
resp.FailMsg("获取失败", "获取开票/到款列表合计金额失败, Err: "+e.Error(), c)
|
|
|
return
|
|
@@ -1379,73 +1384,33 @@ func (rg *RegisterController) InvoiceList(c *gin.Context) {
|
|
|
AmountTotal: amountTotal,
|
|
|
CurrencyTotal: currencyTotals,
|
|
|
}
|
|
|
+ // 是否导出
|
|
|
+ if req.IsExport == 1 {
|
|
|
+ ExportInvoiceList(c, req, respData)
|
|
|
+ return
|
|
|
+ }
|
|
|
resp.OkData("获取成功", respData, c)
|
|
|
}
|
|
|
|
|
|
-// InvoiceExport
|
|
|
-// @Title 开票/到款列表-导出
|
|
|
-// @Description 合同登记-导出
|
|
|
-// @Param InvoiceType query int false "类型: 1-开票登记; 2-到款登记"
|
|
|
-// @Param ContractCode query string false "合同编号"
|
|
|
-// @Param StartDate query string false "开始日期"
|
|
|
-// @Param EndDate query string false "结束日期"
|
|
|
-// @Param MinAmount query float64 false "开票金额区间-最小值"
|
|
|
-// @Param MaxAmount query float64 false "开票金额区间-最大值"
|
|
|
-// @Success 200 string "操作成功"
|
|
|
-// @router /contract/register/invoice_export [get]
|
|
|
-func (rg *RegisterController) InvoiceExport(c *gin.Context) {
|
|
|
- var req fms.ContractInvoiceListReq
|
|
|
- if e := c.BindQuery(&req); e != nil {
|
|
|
- err, ok := e.(validator.ValidationErrors)
|
|
|
- if !ok {
|
|
|
- resp.FailData("参数解析失败", "Err:"+e.Error(), c)
|
|
|
- return
|
|
|
- }
|
|
|
- resp.FailData("参数解析失败", err.Translate(global.Trans), c)
|
|
|
+// ExportInvoiceList 导出开票/到款列表
|
|
|
+func ExportInvoiceList(c *gin.Context, req fms.ContractInvoiceListReq, results *fms.InvoiceListRespData) {
|
|
|
+ list := make([]*fms.ContractInvoiceItem, 0)
|
|
|
+ if val, ok := results.List.([]*fms.ContractInvoiceItem); ok {
|
|
|
+ list = val
|
|
|
+ } else {
|
|
|
+ resp.Fail("列表数据有误", c)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(list) == 0 {
|
|
|
+ resp.Fail("列表数据为空", c)
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
listName := "开票"
|
|
|
if req.InvoiceType == fms.ContractInvoiceTypePay {
|
|
|
listName = "到款"
|
|
|
}
|
|
|
|
|
|
- cond := `invoice_type = ?`
|
|
|
- pars := make([]interface{}, 0)
|
|
|
- pars = append(pars, req.InvoiceType)
|
|
|
- // 合同编号
|
|
|
- if req.ContractCode != "" {
|
|
|
- kw := fmt.Sprint("%", req.ContractCode, "%")
|
|
|
- cond += ` AND contract_code LIKE ?`
|
|
|
- pars = append(pars, kw)
|
|
|
- }
|
|
|
- if req.StartDate != "" && req.EndDate != "" {
|
|
|
- st := fmt.Sprint(req.StartDate, " 00:00:00")
|
|
|
- ed := fmt.Sprint(req.EndDate, " 23:59:59")
|
|
|
- cond += ` AND (invoice_time BETWEEN ? AND ?)`
|
|
|
- pars = append(pars, st, ed)
|
|
|
- }
|
|
|
- if req.MinAmount > 0 {
|
|
|
- cond += ` AND amount >= ?`
|
|
|
- pars = append(pars, req.MinAmount)
|
|
|
- }
|
|
|
- if req.MaxAmount > 0 {
|
|
|
- cond += ` AND amount <= ?`
|
|
|
- pars = append(pars, req.MaxAmount)
|
|
|
- }
|
|
|
-
|
|
|
- // 获取列表数据
|
|
|
- cr := new(fms.ContractInvoice)
|
|
|
- orderRule := `invoice_time DESC`
|
|
|
- list, e := cr.List(cond, pars, orderRule)
|
|
|
- if e != nil {
|
|
|
- resp.FailData(fmt.Sprintf("获取%s列表失败", listName), "Err:"+e.Error(), c)
|
|
|
- return
|
|
|
- }
|
|
|
- if len(list) == 0 {
|
|
|
- resp.Fail("无有效数据可导出", c)
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
// 生成Excel文件
|
|
|
xlsxFile := xlsx.NewFile()
|
|
|
style := xlsx.NewStyle()
|
|
@@ -1463,25 +1428,40 @@ func (rg *RegisterController) InvoiceExport(c *gin.Context) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 表头
|
|
|
+ // 前两行显示合计金额, 第三行空出与列表数据隔一行
|
|
|
+ rowA := sheet.AddRow()
|
|
|
+ cellAA := rowA.AddCell()
|
|
|
+ cellAA.SetString(fmt.Sprintf("已开票合计金额(换算后):%.2f(元)", results.AmountTotal))
|
|
|
+ rowBData := "已开票金额:"
|
|
|
+ for _, v := range results.CurrencyTotal {
|
|
|
+ rowBData += fmt.Sprintf("%s%.2f(%s) ", v.Name, v.Amount, v.UnitName)
|
|
|
+ }
|
|
|
+ rowB := sheet.AddRow()
|
|
|
+ rowB.AddCell().SetString(rowBData)
|
|
|
+ sheet.AddRow()
|
|
|
+
|
|
|
+ // 列表数据表头
|
|
|
+ titles := []string{"合同编号", fmt.Sprintf("%s金额", listName), "金额单位", "换算金额(元)",
|
|
|
+ fmt.Sprintf("%s日期", listName), "销售", "备注"}
|
|
|
titleRow := sheet.AddRow()
|
|
|
titleRow.SetHeight(40)
|
|
|
- cell1 := titleRow.AddCell()
|
|
|
- cell1.SetString("合同编号")
|
|
|
- cell1.SetStyle(style)
|
|
|
- cell2 := titleRow.AddCell()
|
|
|
- cell2.SetString(fmt.Sprintf("%s金额", listName))
|
|
|
- cell2.SetStyle(style)
|
|
|
- cell3 := titleRow.AddCell()
|
|
|
- cell3.SetString(fmt.Sprintf("%s日期", listName))
|
|
|
- cell3.SetStyle(style)
|
|
|
+ for i := range titles {
|
|
|
+ c := titleRow.AddCell()
|
|
|
+ c.SetString(titles[i])
|
|
|
+ c.SetStyle(style)
|
|
|
+ }
|
|
|
|
|
|
+ // 单元格赋值
|
|
|
for _, v := range list {
|
|
|
dataRow := sheet.AddRow()
|
|
|
dataRow.SetHeight(20)
|
|
|
- dataRow.AddCell().SetString(v.ContractCode)
|
|
|
- dataRow.AddCell().SetString(fmt.Sprint(v.Amount))
|
|
|
- dataRow.AddCell().SetString(utils.TimeTransferString("2006-01-02", v.InvoiceDate))
|
|
|
+ dataRow.AddCell().SetString(v.ContractCode) // 合同编号
|
|
|
+ dataRow.AddCell().SetString(fmt.Sprint(v.OriginAmount)) // 开票金额
|
|
|
+ dataRow.AddCell().SetString(v.UnitName) // 金额单位
|
|
|
+ dataRow.AddCell().SetString(fmt.Sprint(v.Amount)) // 换算金额(元)
|
|
|
+ dataRow.AddCell().SetString(v.InvoiceDate) // 开票日
|
|
|
+ dataRow.AddCell().SetString(v.SellerName) // 销售
|
|
|
+ dataRow.AddCell().SetString(v.Remark) // 备注
|
|
|
}
|
|
|
|
|
|
// 输出文件
|