Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -72,6 +72,9 @@ func ExportCustomerBalancePDFHandler(_ *sql.DB) http.HandlerFunc {
|
|||||||
|
|
||||||
rows = filterCustomerBalanceRowsForPDF(rows, excludeZero12, excludeZero13)
|
rows = filterCustomerBalanceRowsForPDF(rows, excludeZero12, excludeZero13)
|
||||||
summaries, detailsByMaster := buildCustomerBalancePDFData(rows)
|
summaries, detailsByMaster := buildCustomerBalancePDFData(rows)
|
||||||
|
sortBy := strings.TrimSpace(r.URL.Query().Get("sort_by"))
|
||||||
|
sortDesc := parseBoolQuery(r.URL.Query().Get("sort_desc"))
|
||||||
|
sortBalanceSummariesForPDF(summaries, sortBy, sortDesc)
|
||||||
|
|
||||||
pdf := gofpdf.New("L", "mm", "A4", "")
|
pdf := gofpdf.New("L", "mm", "A4", "")
|
||||||
pdf.SetMargins(8, 8, 8)
|
pdf.SetMargins(8, 8, 8)
|
||||||
@@ -240,6 +243,79 @@ func buildCustomerBalancePDFData(rows []models.CustomerBalanceListRow) ([]balanc
|
|||||||
return summaries, detailsByMaster
|
return summaries, detailsByMaster
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sortBalanceSummariesForPDF(summaries []balanceSummaryPDF, sortBy string, descending bool) {
|
||||||
|
key := strings.TrimSpace(sortBy)
|
||||||
|
if key == "" || len(summaries) <= 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
textCmp := func(a, b string) int {
|
||||||
|
return strings.Compare(strings.ToUpper(strings.TrimSpace(a)), strings.ToUpper(strings.TrimSpace(b)))
|
||||||
|
}
|
||||||
|
numCmp := func(a, b float64) int {
|
||||||
|
if a < b {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
if a > b {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.SliceStable(summaries, func(i, j int) bool {
|
||||||
|
a := summaries[i]
|
||||||
|
b := summaries[j]
|
||||||
|
cmp := 0
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "ana_cari_kodu":
|
||||||
|
cmp = textCmp(a.AnaCariKodu, b.AnaCariKodu)
|
||||||
|
case "ana_cari_adi":
|
||||||
|
cmp = textCmp(a.AnaCariAdi, b.AnaCariAdi)
|
||||||
|
case "piyasa":
|
||||||
|
cmp = textCmp(a.Piyasa, b.Piyasa)
|
||||||
|
case "temsilci":
|
||||||
|
cmp = textCmp(a.Temsilci, b.Temsilci)
|
||||||
|
case "risk_durumu":
|
||||||
|
cmp = textCmp(a.RiskDurumu, b.RiskDurumu)
|
||||||
|
case "usd_bakiye_1_2":
|
||||||
|
cmp = numCmp(a.USDBakiye12, b.USDBakiye12)
|
||||||
|
case "tl_bakiye_1_2":
|
||||||
|
cmp = numCmp(a.TLBakiye12, b.TLBakiye12)
|
||||||
|
case "usd_bakiye_1_3":
|
||||||
|
cmp = numCmp(a.USDBakiye13, b.USDBakiye13)
|
||||||
|
case "tl_bakiye_1_3":
|
||||||
|
cmp = numCmp(a.TLBakiye13, b.TLBakiye13)
|
||||||
|
case "vade_gun":
|
||||||
|
cmp = numCmp(a.VadeGun, b.VadeGun)
|
||||||
|
case "vade_belge_tarihi_gun":
|
||||||
|
cmp = numCmp(a.VadeBelge, b.VadeBelge)
|
||||||
|
case "prbr_1_2":
|
||||||
|
cmp = numCmp(sumCurrencyMapForSort(a.Bakiye12Map), sumCurrencyMapForSort(b.Bakiye12Map))
|
||||||
|
case "prbr_1_3":
|
||||||
|
cmp = numCmp(sumCurrencyMapForSort(a.Bakiye13Map), sumCurrencyMapForSort(b.Bakiye13Map))
|
||||||
|
default:
|
||||||
|
cmp = textCmp(a.AnaCariKodu, b.AnaCariKodu)
|
||||||
|
}
|
||||||
|
|
||||||
|
if cmp == 0 {
|
||||||
|
cmp = textCmp(a.AnaCariKodu, b.AnaCariKodu)
|
||||||
|
}
|
||||||
|
if descending {
|
||||||
|
return cmp > 0
|
||||||
|
}
|
||||||
|
return cmp < 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func sumCurrencyMapForSort(m map[string]float64) float64 {
|
||||||
|
total := 0.0
|
||||||
|
for _, v := range m {
|
||||||
|
total += v
|
||||||
|
}
|
||||||
|
return total
|
||||||
|
}
|
||||||
|
|
||||||
func drawCustomerBalancePDF(
|
func drawCustomerBalancePDF(
|
||||||
pdf *gofpdf.Fpdf,
|
pdf *gofpdf.Fpdf,
|
||||||
selectedDate string,
|
selectedDate string,
|
||||||
|
|||||||
@@ -73,6 +73,9 @@ func ExportStatementAgingPDFHandler(_ *sql.DB) http.HandlerFunc {
|
|||||||
|
|
||||||
rows = filterCustomerBalanceRowsForPDF(rows, excludeZero12, excludeZero13)
|
rows = filterCustomerBalanceRowsForPDF(rows, excludeZero12, excludeZero13)
|
||||||
summaries, detailsByMaster := buildCustomerBalancePDFData(rows)
|
summaries, detailsByMaster := buildCustomerBalancePDFData(rows)
|
||||||
|
sortBy := strings.TrimSpace(r.URL.Query().Get("sort_by"))
|
||||||
|
sortDesc := parseBoolQuery(r.URL.Query().Get("sort_desc"))
|
||||||
|
sortBalanceSummariesForPDF(summaries, sortBy, sortDesc)
|
||||||
|
|
||||||
pdf := gofpdf.New("L", "mm", "A4", "")
|
pdf := gofpdf.New("L", "mm", "A4", "")
|
||||||
pdf.SetMargins(8, 8, 8)
|
pdf.SetMargins(8, 8, 8)
|
||||||
|
|||||||
@@ -839,6 +839,8 @@ async function downloadAgingBalancePDF (detailed) {
|
|||||||
ilce: (store.filters.ilce || []).join(','),
|
ilce: (store.filters.ilce || []).join(','),
|
||||||
exclude_zero_12: store.filters.excludeZeroBalance12 ? '1' : '0',
|
exclude_zero_12: store.filters.excludeZeroBalance12 ? '1' : '0',
|
||||||
exclude_zero_13: store.filters.excludeZeroBalance13 ? '1' : '0',
|
exclude_zero_13: store.filters.excludeZeroBalance13 ? '1' : '0',
|
||||||
|
sort_by: String(summaryPagination.value?.sortBy || ''),
|
||||||
|
sort_desc: summaryPagination.value?.descending ? '1' : '0',
|
||||||
detailed: detailed ? '1' : '0'
|
detailed: detailed ? '1' : '0'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -727,6 +727,8 @@ async function downloadCustomerBalancePDF (detailed) {
|
|||||||
ilce: (store.filters.ilce || []).join(','),
|
ilce: (store.filters.ilce || []).join(','),
|
||||||
exclude_zero_12: store.filters.excludeZeroBalance12 ? '1' : '0',
|
exclude_zero_12: store.filters.excludeZeroBalance12 ? '1' : '0',
|
||||||
exclude_zero_13: store.filters.excludeZeroBalance13 ? '1' : '0',
|
exclude_zero_13: store.filters.excludeZeroBalance13 ? '1' : '0',
|
||||||
|
sort_by: String(summaryPagination.value?.sortBy || ''),
|
||||||
|
sort_desc: summaryPagination.value?.descending ? '1' : '0',
|
||||||
detailed: detailed ? '1' : '0'
|
detailed: detailed ? '1' : '0'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user