Files
bssapp/svc/routes/order_list_excel.go
2026-03-05 10:45:12 +03:00

138 lines
2.8 KiB
Go

package routes
import (
"bssapp-backend/queries"
"database/sql"
"fmt"
"net/http"
"time"
"github.com/xuri/excelize/v2"
)
func OrderListExcelRoute(db *sql.DB) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "no-store")
search := r.URL.Query().Get("search")
currAcc := r.URL.Query().Get("CurrAccCode")
orderDate := r.URL.Query().Get("OrderDate")
rows, err := queries.GetOrderListExcel(db, search, currAcc, orderDate)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer rows.Close()
f := excelize.NewFile()
sheet := "Orders"
f.SetSheetName("Sheet1", sheet)
headers := []string{
"Siparis No",
"Tarih",
"Termin Tarihi",
"Cari Kod",
"Cari Adi",
"Temsilci",
"Piyasa",
"PB",
"Tutar",
"Tutar (USD)",
"Paketlenen Tutar",
"Paketlenen (USD)",
"Paketlenme (%)",
"Uretim",
"USD Kur",
"Aciklama",
}
for i, h := range headers {
cell, _ := excelize.CoordinatesToCellName(i+1, 1)
f.SetCellValue(sheet, cell, h)
}
row := 2
for rows.Next() {
var (
id, no, date, termin, code, name string
rep, piyasa, cur string
total float64
totalUSD float64
packedAmount float64
packedUSD float64
packedRatePct float64
hasUretim bool
desc string
usdRate float64
)
err := rows.Scan(
&id, // 1
&no, // 2
&date, // 3
&termin, // 4
&code, // 5
&name, // 6
&rep, // 7
&piyasa, // 8
&cur, // 9
&total, // 10
&totalUSD, // 11
&packedAmount, // 12
&packedUSD, // 13
&packedRatePct, // 14
&hasUretim, // 15
&desc, // 16
&usdRate, // 17
)
if err != nil {
http.Error(w, "Scan error: "+err.Error(), http.StatusInternalServerError)
return
}
uretim := ""
if hasUretim {
uretim = "VAR"
}
f.SetSheetRow(sheet, fmt.Sprintf("A%d", row), &[]any{
no,
date,
termin,
code,
name,
rep,
piyasa,
cur,
total,
totalUSD,
packedAmount,
packedUSD,
packedRatePct,
uretim,
usdRate,
desc,
})
row++
}
buf, err := f.WriteToBuffer()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
filename := fmt.Sprintf("siparis_listesi_%s.xlsx", time.Now().Format("20060102_150405"))
w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
w.Header().Set("Content-Disposition", "attachment; filename=\""+filename+"\"")
w.Header().Set("Content-Length", fmt.Sprint(len(buf.Bytes())))
w.WriteHeader(http.StatusOK)
_, _ = w.Write(buf.Bytes())
})
}