From a99b53873bc4c8cafe46ece0328c83cc68982777 Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Mon, 24 Feb 2025 14:37:23 +0530 Subject: [PATCH] Group by and sum calculation for card : GWM --- main.go | 1 + pb_data/data.db | Bin 208896 -> 217088 bytes pb_data/logs.db | Bin 770048 -> 770048 bytes utils/card_calculation.go | 65 +++++++++++++++++++++++++++++++------- 4 files changed, 54 insertions(+), 12 deletions(-) diff --git a/main.go b/main.go index 2ea6055..4d3c01f 100644 --- a/main.go +++ b/main.go @@ -632,6 +632,7 @@ func main() { "card_type_json": record.Get("card_type_json"), "tab_order": record.GetString("tab_order"), "chart_type_json": record.Get("chart_type_json"), + "card_full_length": record.Get("card_full_length"), } // card data calculation diff --git a/pb_data/data.db b/pb_data/data.db index 1d0bcddb51b1e9c685eb95666157c7c792f69a87..28ee9f7664e3e5418ff69b9f2c9e03d7bd9cc1c9 100644 GIT binary patch delta 553 zcmZp8z|*jRcY?H_Jp%)SDG-|gF(VLnOw=)Ev~Nt>T6J~1yPzPL1Zx{nN#By(a;&h&p`Op?=6Wtaq}_scNZ zD?2Ia@Ny{tffAYyB`bw$h|KgY@=VH-5H+bK@g?~MKshBtC5UY8_6sshror5N0t|ct zOrktlEYBw!3be%eBCmRY03VRC2%N)(K3H7+F9;y{v(00|$@+29qxqT5qo} zV)Egge(o!yxI$`*VPZjIS(1{DQeI+is*)8_Ko)0KrA|Mf%p5rVbUl-*fDt$dOf9So v4D^gGO`qWl3^F`v;`89l8lo=w=Z7I zxRqsl_X@_Qbf#lG+XVv{-!gCiBg|yNCOebYR#uxsR#MltiPM!+T9%hrR#jG&m!s93 zLsWEntrU~_bTe5d5zZD@7P%HjmKM9|aZ*f@e9hWGX$~U;BU4?27ICl`Q&a5pN-3sj zegg#qQ!7(rD`QhVLnDKz>58#TX43`anG~m6Ni!{({!om`Z@Q%nlg0E*2_~WK4`i5B zgSi<(7#KpBM0v7Uo=-LuaM>PGz_f>Vy4`0+x9w6k%%zOeCH6p; diff --git a/pb_data/logs.db b/pb_data/logs.db index b323ab9593e4ff2add2fefeafc5949638df2ba15..4ebc9bcdb2d45d934fa413e0e8cc62a9a164c22a 100644 GIT binary patch delta 10362 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 delta 10468 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 diff --git a/utils/card_calculation.go b/utils/card_calculation.go index 5809a73..9b31151 100644 --- a/utils/card_calculation.go +++ b/utils/card_calculation.go @@ -19,14 +19,20 @@ type Observation struct { } // ------------------------------------------------------------ card calculation--------------------------------------------------- +type GroupByAndSum struct { + GroupByAndSum string `json:"groupby_and_sum"` + GetTop int `json:"get_top"` + Conversion int `json:"conversion"` +} type CardCalculationRequest struct { - Formula string `json:"formula"` - RecordCount string `json:"record_count"` - RecodeIndex string `json:"record_index"` - RecordKey string `json:"record_key"` - AdditionalRecordKey string `json:"additional_record_key"` - NumberFormat string `json:"number_format"` - Conversion string `json:"conversion"` + Formula string `json:"formula"` + RecordCount string `json:"record_count"` + RecodeIndex string `json:"record_index"` + RecordKey string `json:"record_key"` + AdditionalRecordKey string `json:"additional_record_key"` + NumberFormat string `json:"number_format"` + Conversion string `json:"conversion"` + GroupByAndSum GroupByAndSum `json:"groupby_and_sum"` } func CardCalculation(data []Observation, req CardCalculationRequest) (map[string]string, error) { @@ -72,16 +78,50 @@ func CardCalculation(data []Observation, req CardCalculationRequest) (map[string result = lowest(selectedData) case "different": result = difference(selectedData) + case "groupby_and_sum": + customCalculationReq := req.GroupByAndSum + + var chartCustomCalculationRequest ChartCalculationRequest + + jsonData, err := json.Marshal(customCalculationReq) + if err != nil { + fmt.Println("Error:", err) + } + + err = json.Unmarshal(jsonData, &chartCustomCalculationRequest) + if err != nil { + fmt.Println("Error:", err) + } + + selectedData, err = CalculateGroupedSum(selectedData, chartCustomCalculationRequest) + if err != nil { + fmt.Println("Error:", err) + } + + if len(selectedData) > 0 { + value, err := selectedData[0].ObsValue.Value.Float64() + if err == nil { + result = value + } else { + fmt.Println("Error converting first observation value to float64:", err) + } + } else { + fmt.Println("No observations returned from CalculateGroupedSum") + } + default: return nil, errors.New("invalid formula") } + fmt.Println("Selected Data :\n", (selectedData)) + fmt.Println("RecordKey Data :\n", (req.RecordKey)) + convertedValue := applyConversion(result, req.Conversion, req.NumberFormat) - fmt.Println("AdditionalRecordKey:", req.AdditionalRecordKey) + displayValue := extractRecordKeyValue(selectedData, req.RecordKey, req.AdditionalRecordKey, req.Formula, result) color := "" - if req.Formula == "different" { + if req.Formula == "different" || req.Conversion == "%" { // Remove the percentage sign if present convertedValueStr := strings.TrimSuffix(convertedValue, "%") @@ -264,15 +304,15 @@ func extractRecordKeyValue(data []Observation, key string, additionalkey string, } switch formula { - case "highest", "lowest", "none": + case "highest", "lowest", "none", "groupby_and_sum": for _, obs := range data { value, err := obs.ObsValue.Value.Float64() if err == nil && value == targetValue { if val, exists := obs.ObsKey[key]; exists { - fmt.Println("additionalkey:", additionalkey) + // Check if additionalkey exists in obs.ObsKey if val2, exists2 := obs.ObsKey[additionalkey]; exists2 { - fmt.Println("val2:", val2) + return val + " - " + val2 } else { return val @@ -309,6 +349,7 @@ type ChartCalculationRequest struct { // CalculateGroupedSum processes the observations based on the given request func CalculateGroupedSum(observations []Observation, request ChartCalculationRequest) ([]Observation, error) { + // Map to store the summed values summedData := make(map[string]float64)