diff --git a/svc/routes/order_mail.go b/svc/routes/order_mail.go index a6e4793..20cf7c6 100644 --- a/svc/routes/order_mail.go +++ b/svc/routes/order_mail.go @@ -9,11 +9,16 @@ import ( "net/http" "strings" + "bssapp-backend/auth" "bssapp-backend/internal/mailer" ) type sendOrderMarketMailPayload struct { - OrderHeaderID string `json:"orderHeaderID"` + OrderHeaderID string `json:"orderHeaderID"` + Operation string `json:"operation"` + DeletedItems []string `json:"deletedItems"` + UpdatedItems []string `json:"updatedItems"` + AddedItems []string `json:"addedItems"` } func SendOrderMarketMailHandler(pg *sql.DB, mssql *sql.DB, ml *mailer.GraphMailer) http.HandlerFunc { @@ -28,6 +33,11 @@ func SendOrderMarketMailHandler(pg *sql.DB, mssql *sql.DB, ml *mailer.GraphMaile http.Error(w, "database not initialized", http.StatusInternalServerError) return } + claims, ok := auth.GetClaimsFromContext(r.Context()) + if !ok || claims == nil { + http.Error(w, "unauthorized", http.StatusUnauthorized) + return + } var payload sendOrderMarketMailPayload if err := json.NewDecoder(r.Body).Decode(&payload); err != nil { @@ -80,14 +90,52 @@ func SendOrderMarketMailHandler(pg *sql.DB, mssql *sql.DB, ml *mailer.GraphMaile marketLabel = strings.TrimSpace(marketCode) } - subject := fmt.Sprintf("Sipariş %s - %s", number, marketLabel) - bodyHTML := fmt.Sprintf( - `
Sipariş kaydı oluşturuldu/güncellendi.
Sipariş No: %s
Cari: %s
Piyasa: %s
PDF ektedir.
`, - htmlEsc(number), - htmlEsc(currAccCode), - htmlEsc(marketLabel), + actor := strings.TrimSpace(claims.Username) + if actor == "" { + actor = strings.TrimSpace(claims.V3Username) + } + if actor == "" { + actor = "Bilinmeyen Kullanici" + } + + op := strings.ToLower(strings.TrimSpace(payload.Operation)) + isUpdate := op == "update" + + subjectAction := "SİPARİŞ KAYDI OLUŞTURULDU" + if isUpdate { + subjectAction = "SİPARİŞ GÜNCELLENDİ." + } + subject := fmt.Sprintf("%s kullanıcısı tarafından %s %s", actor, number, subjectAction) + + cariDetail := "" + customerRep := "" + if header != nil { + cariDetail = strings.TrimSpace(header.CurrAccName) + customerRep = strings.TrimSpace(header.CustomerRep) + } + + body := make([]string, 0, 12) + body = append(body, + ``,
+ fmt.Sprintf(`Cari Kodu: %s
`, htmlEsc(currAccCode)),
+ fmt.Sprintf(`Cari Detay: %s
`, htmlEsc(cariDetail)),
+ fmt.Sprintf(`Müşteri Temsilcisi: %s
`, htmlEsc(customerRep)),
+ fmt.Sprintf(`Piyasa: %s`, htmlEsc(marketLabel)),
+ `
Bu sipariş BaggiSS App Uygulamasından oluşturulmuştur.
`) + body = append(body, `PDF ektedir.
`) + bodyHTML := strings.Join(body, "\n") + fileNo := sanitizeFileName(number) if fileNo == "" { fileNo = orderID @@ -256,3 +304,31 @@ func htmlEsc(s string) string { ) return r.Replace(s) } + +func renderItemListHTML(title string, items []string) string { + clean := make([]string, 0, len(items)) + seen := make(map[string]struct{}, len(items)) + for _, raw := range items { + v := strings.TrimSpace(raw) + if v == "" { + continue + } + if _, ok := seen[v]; ok { + continue + } + seen[v] = struct{}{} + clean = append(clean, v) + } + + if len(clean) == 0 { + return fmt.Sprintf(`%s: Yok
`, htmlEsc(title)) + } + + b := make([]string, 0, len(clean)+3) + b = append(b, fmt.Sprintf(`%s:
`, htmlEsc(title)))
+ for _, item := range clean {
+ b = append(b, "- "+htmlEsc(item)+"
")
+ }
+ b = append(b, `