From d3127a29de2282e71aff2d2f4e5de0873dc56d65 Mon Sep 17 00:00:00 2001 From: Dennis Winghardt Date: Thu, 11 Dec 2025 10:51:44 +0000 Subject: [PATCH] csv -> xlsx --- csv/main.go | 28 ---------------------------- go.mod | 23 ++++++++++++++++------- go.sum | 27 +++++++++++++++++++++++++++ main.go | 4 ++-- plan.xlsx | Bin 0 -> 10961 bytes ui/pages/home.templ | 6 +++--- ui/pages/home_templ.go | 6 +++--- xlsx/main.go | 23 +++++++++++++++++++++++ 8 files changed, 74 insertions(+), 43 deletions(-) delete mode 100644 csv/main.go create mode 100644 plan.xlsx create mode 100644 xlsx/main.go diff --git a/csv/main.go b/csv/main.go deleted file mode 100644 index 9ef51df..0000000 --- a/csv/main.go +++ /dev/null @@ -1,28 +0,0 @@ -package csv - -import ( - "encoding/csv" - "os" - "strings" -) - -type Plan struct { - Menus [7][3]string -} - -func Load() (Plan, error) { - f, err := os.ReadFile("./plan.csv") - if err != nil { - return Plan{}, err - } - var menus [7][3]string - reader := csv.NewReader(strings.NewReader(string(f))) - reader.Comma = ';' - records, err := reader.ReadAll() - for y := 0; y <= 2; y++ { - for x := 0; x <= 6; x++ { - menus[x][y] = records[y+1][x+1] - } - } - return Plan{Menus: menus}, err -} diff --git a/go.mod b/go.mod index 4d72c56..f83154d 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,15 @@ go 1.25.4 require github.com/a-h/templ v0.3.960 +require ( + github.com/richardlehane/mscfb v1.0.4 // indirect + github.com/richardlehane/msoleps v1.0.4 // indirect + github.com/tiendc/go-deepcopy v1.7.1 // indirect + github.com/xuri/efp v0.0.1 // indirect + github.com/xuri/excelize/v2 v2.10.0 // indirect + github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect +) + require ( github.com/Oudwins/tailwind-merge-go v0.2.1 github.com/bytedance/sonic v1.14.0 // indirect @@ -30,12 +39,12 @@ require ( github.com/ugorji/go/codec v1.3.0 // indirect go.uber.org/mock v0.5.0 // indirect golang.org/x/arch v0.20.0 // indirect - golang.org/x/crypto v0.40.0 // indirect - golang.org/x/mod v0.26.0 // indirect - golang.org/x/net v0.42.0 // indirect - golang.org/x/sync v0.16.0 // indirect - golang.org/x/sys v0.35.0 // indirect - golang.org/x/text v0.27.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/crypto v0.43.0 // indirect + golang.org/x/mod v0.28.0 // indirect + golang.org/x/net v0.46.0 // indirect + golang.org/x/sync v0.17.0 // indirect + golang.org/x/sys v0.37.0 // indirect + golang.org/x/text v0.30.0 // indirect + golang.org/x/tools v0.37.0 // indirect google.golang.org/protobuf v1.36.9 // indirect ) diff --git a/go.sum b/go.sum index 6932651..6472c2c 100644 --- a/go.sum +++ b/go.sum @@ -52,6 +52,11 @@ github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= github.com/quic-go/quic-go v0.54.0 h1:6s1YB9QotYI6Ospeiguknbp2Znb/jZYjZLRXn9kMQBg= github.com/quic-go/quic-go v0.54.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY= +github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= +github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= +github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/richardlehane/msoleps v1.0.4 h1:WuESlvhX3gH2IHcd8UqyCuFY5yiq/GR/yqaSM/9/g00= +github.com/richardlehane/msoleps v1.0.4/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -61,29 +66,51 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/tiendc/go-deepcopy v1.7.1 h1:LnubftI6nYaaMOcaz0LphzwraqN8jiWTwm416sitff4= +github.com/tiendc/go-deepcopy v1.7.1/go.mod h1:4bKjNC2r7boYOkD2IOuZpYjmlDdzjbpTRyCx+goBCJQ= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA= github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= +github.com/xuri/efp v0.0.1 h1:fws5Rv3myXyYni8uwj2qKjVaRP30PdjeYe2Y6FDsCL8= +github.com/xuri/efp v0.0.1/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= +github.com/xuri/excelize/v2 v2.10.0 h1:8aKsP7JD39iKLc6dH5Tw3dgV3sPRh8uRVXu/fMstfW4= +github.com/xuri/excelize/v2 v2.10.0/go.mod h1:SC5TzhQkaOsTWpANfm+7bJCldzcnU/jrhqkTi/iBHBU= +github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 h1:+C0TIdyyYmzadGaL/HBLbf3WdLgC29pgyhTjAT/0nuE= +github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= golang.org/x/arch v0.20.0 h1:dx1zTU0MAE98U+TQ8BLl7XsJbgze2WnNKF/8tGp/Q6c= golang.org/x/arch v0.20.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= +golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= +golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= +golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= +golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= +golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= +golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= +golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/main.go b/main.go index 3606e7a..842595f 100644 --- a/main.go +++ b/main.go @@ -4,9 +4,9 @@ import ( "log" "net/http" - "github.com/b2dennis/meshi/csv" "github.com/b2dennis/meshi/gintemplrenderer" "github.com/b2dennis/meshi/ui/pages" + "github.com/b2dennis/meshi/xlsx" "github.com/gin-gonic/gin" ) @@ -27,7 +27,7 @@ func main() { } func getMenu(c *gin.Context) { - plan, err := csv.Load() + plan, err := xlsx.Load() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "couldn't load menu csv"}) return diff --git a/plan.xlsx b/plan.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..97d85b843a5d7c315b3cb20a988f171ea3090a5b GIT binary patch literal 10961 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⩔M975BF_7hpl4qUuLH53}=Jp=<6|fx*sr` zF&R|sKT5Xfyh!7OfL`rSmI2=CSvZ&6d6ZnID~1z*Yfuj(oqCy~Zvfe1!0v}_hHM?) zB%wP|I);YJI)`6_KK$z&tbUu}{={!!WYuZUCj9LXhq2C|4uM=#Rlfs(z7mDsSP$_J zfqBPNP${aNr11Lg0x=}t)a`7-0f$BI48EvyGV%f6)nSvk__HqL z5-veH;WUK%w`c}fxdTX^YvJ!T%V@5tWudJPGdNQ*Z+7n}YfZT~skMY1qKCVW&BN^A zXp()FnpN`?vV-y6m{C69fL2w0KzXf+>AhAsL}7PE#2hMm5o(p6?wU1B-~Z;L-)v)}6W34dm)bkEY!s z4lM8^Y|gZKYTavVQTB+2W3GE!PsYLS-K539B!D!MuFthByBF2v#5V_YYN6AIy!xlr zJyrm3T4$WG)*!dP*rZJmS3US31Aa44S+?MmfRSTdu|-$qngmWRJ-4*1oGP_|B5-j(Sg zGRh$%EbdMy(z)bb^=gD?ePD+4fn+H)^_$`*hvW6XIV=d3V#{YSayiUFqtxoEB!mPB zc)yI)@Z7h4sQp^XD+f>;`D%_VWfpu@zR{#uYcF^pJH;#eR9U>r_NgJOG+m z%54Aru7~}*B8Yk)L~Dne@dv)J9!dHBVWhk{Py+kWJ1tIx6S*J!5Ry5+bqW$bIL z4Y=7Quyi#(cGIg8!E z7}TpsMM{&@H%14a&hUiM@)XOpP7JIokUf#SzI=V}EKty6cfF6=i7IYuBq{2%tE1BO zeds=5asR^zMsj1d^t&Dvr$d;%@W>}~vyWG=h~ahCxrleaenN!w%+z3K6c-34`izI7 zs>}DqsdVo?K-^DSrzVXgs;E}@DxB_?fWLp=BE%#j4lB$v_1%|!m0ei~IQTO$uNbx0}0kbJ$By2x%(xrG`Y4gu5#&@01+|M$31MW+UNFuAJ>uu-W{KJHWM_g zJO6OL+DhoQ&>rPqs;F$hURSo0%uYX`C|{h}uCF_NI@V0{w79L$X|gi4#>JVXor5wn z4JCkFNYnq^Z~4&Ue(i}7U&UHyyeXbqMhH{!`kWa)m5;iHxoH_nnzV6h3=CDRvEYjs zBuu%Nh_VC5ceJY@(3*{=_@=#rH`Ga$R)&EivNTPFijwN|^*kd_u~{i{`pV(= z2y-rjeR`iIjdqP`38x;|rw|qk=FOLp$E!Jr_X@c2_A-GMqt3%@TvNz3|_1?bhcZIM__Fm)HXlxpXNZ&0o z-jr`aCdRWuNR5-1o+4vp1Q~N4y1~tH1P*b2T#LC|hN~gRYZ;CoPOf}HnZc5EH-BU%fw?rEZn8veL)OZ#o~L4Fo=}m>QyPyg^79k z{2MxTPVd+2Hb^tE9uP>A(vl&cPOSk;7MAZoi(>=%H?+o%{41P z*JfXyzvx!JMfsc?s!>|K3SX%B zj_rERN|P)-(PeQ0$!<1JMKxH)zzlR1FC}TL{`LZ!EQ&atq+HEuVFaa-wamzkCfw$e zNBbya$}oz|w*7Lvaq$DQIuUoro?Fgm`(dQ0b88=RA9g;*(#o>zn#CFj$EqRG8i*G3 z(SyINdxncFq3+YAs@0W*5@e}##B)a<)Z0jsUIiE1GGh?Ledj)eqy>~X|Ew?*&6q$Be^>{=Mh^!zSf8)Km=1c0U!U?;l$B3r{ z*`2Lk9Mo-Guv~IU<6p@I?=DxHwz0B9(9E=!Er1u@# z4X}#$%Bp?Vz0I(rHk1HYl2Oc;Tx6rps8xlM)}O{Slon$@>^Q~}C)%s6Tb8PfIz0B+ z;YsS@C|lbVbR3D7uJqp0dt+1%OW_RjbeGI!A8syUDAX9s*7;UrBkkg`rIG!uEQh-! z0w}aPrHhSpox?Kss-n;yt+G4}Wx<3W*4$o(rfOlgZJf}C7i9tLTfny$XfiQ?=e zsM|T>OtonVC$#~BfksiYHgr#DW&N37AO&wPD~ssIZZInzPsmG0$6giFcs(oy(@(3< z9*RIX=KF5H34UyxTHqnMfNJ7yEO2l0i| zhz(5ZKiBi?zogWt6chXm-_Ty^&w~F3_{LjJz|-(ucG<0($VfNl>s0caoyWayea|e2 z(Iw51jFVKcQ4)=^460Vmvf24AxYib(xYKjO?oVln(G~()Gk9Y01b+AfHe$F%T-I)P z+CRV!sjo$u&aFvT?W--uoV&17c+Te?Hw|M5OHID-@ek(0T<=DR4BC5k5IQG%)Urv- zjc!t_eu9@Nizb_UB8R??hjD(OmGlO7ssHR>!#0*w(19`rJ}~6b{uAz|dUi&JiVk*W z)+WEAK0HQ7s#_2_@YwHJZ{EGdOz@S2LM;j-EQG+(q@gs1v&qKjn~RRiL;>Uc&{&L9 z&U60r(^11Aj^im>v3g&-wq!~TV&$Crsm;6Z?dch2y`W0|Z~;wTZ)b+qZ>S6~UeBQH zG^76*jrd+7io}bAKT*W{aaX91i9N6-Sk69-Y9)nDLN)?QN<%q^@~fj;uJXI9g8pfS zDsjh{DtZ>`K~77}L_JMD6S2@?k3#2(*LQkDMb z%T!9r7T%MJo3C(rTEKU1822nPo=FNscvh^r_sjhYMPGeZLFVu!>OyO(BN-=RooK%n z!C+(;zZ80c&A%3q8NOLr|5rEiSg}ZT0^KJJbmh-= zdJXm@;^H1R^ATP|k%OdBc?V4YZUJ&JDf$}i(Y*%G=*!lY?bsH3+C6VEt}$W^-BdH^ z$4vuF)5;U~1^N!5D$cznG#Gl`XuU~>_Ea!gS;>(8Xf<@Ws*mzyk67JaJ@ZwOFvZdQ z+w&43u1sHV!*It-OU$j#bf9V(W$TXVHa%7Sx%m{-pAI5D33;vaI!49M#sVa`qILOm z#kmGV56^t`h4!7VGA%q2!3(X1ht98H{w_k8FQCDG9uh$!+=V6biqWT`|FX(EY` z>l7w@deC4fC@7Se9gNo*b^Sj2#>60yfvty9MY#TK|;HZkg@Lp^^XTXUz49&a^y_Q;ef*aFa z7$m`pm!ro*bD^tbccn2dLT)2CZ%T*EjkvRFQraS>0;^!^UDzt-s2Ni0vv#$SA9W9F z*`mX?O})ZgciKuf@;5?WjZ6MO>T3FBJE_XAbw5twte6O1wG4+^3N{6$%^7rU8A6pb z5=`;#DV+h~M{>>^mKndDSGmLNZ;~n{U7A?cb@r184T)OfB-g z)uZXGj#wpx2J@~MhYF*+2+)^ubI*r!pI;lPreLl^8S;8<_)F~2X}?uxZzo)&e85&} z#?St?w0FR!QFb)r|NZ^d`7^OKpMo7bb_?PrpB&!m$p$-{c?AkqoM5J+bT!ITixAW4 zsFP&BXRu(w@{(o5fN1>}3A?4?J34214tqb?)%x{=^1G|h0iVuO8u`T54*Z5{YuY^z zNkJGY5b|vBNOllRx7&5kGk1F%Ms7`V{@T-Ty+K{RBTIOaQ+v-T=zecqMi{x?n)9}VY$Gm@1yL90ff4P4n}&+KNc^&bAO-B6_nDbRqdgj zYaq!dALDp+pIZ^cgnUPwU&AH(CF@D0OPI>L{vjh-a<>OH`ZdGd)=Z=8M6?@Ux%bR% z4tTr|iX7;lj~M?Yg!}~9$^UaL>`eo6`6>U307;Auyc*gV$QU{38R|LcF-q&{8(B(N z8{7OW1C*kN%z;yEQSV+;Mkz_WS>}4MW%LQ<4qdVcb6+Qze7a8YjNSmVfEB7nw(Cmq)YD5cVi5{r_UW^|{Fn+WVYC#) zsu^OPhum9=l~emIjXvq1=rvd9K{^K&;u(?XMZ>82kU2VD25OIt0(?jC6`I2K89fDf7X-PqbG5nKJC;VAY z8_wjsZjiBw^gu~gu2&RpS4zez_j63!_p%l0ba6M&_h)eb=BdiyFF0~QFZlxr{|YFS z13e{YXJc#6XkcS!^wUGYdGY`BabO6A$I44}17%;}yj0|C9Dl6@cLMeTqQilNkS)t8 zJ(;s+rHly5;nlIsVwnoXx`Ey3qunU^yrpWwH%hfn<{6}^$Y{P8bxLk=c}ZI&nYjb5 z<>ZVO2wV&PA~ov|bf|$L3te$#2x=8yM1Aw|Q7PVP9wT(mh0rT4k$2|!HRLjQa1#|^MQ?W};tRsUlPhJnb+hH%Ebe!z9L@U5Vsp`M zT~j!4_u$tQ?DlrH*_$)5%fzw8F^CPkJKf*twpV?v(!87iP%>0t((}Dvz_1_JXfj22 zYTi=0+XZzZ4r?Di8JM=N-5eDN+^RqyXnEA}|FnIguUhGiVTeXj)4nFJE_1Xq1VN(^ z`@Wwof?7LPQw+K#wY^T=Yq$aZE^IG)*ZYkmR)Hl81p$a?;JbF2Q{dL3e-bvEC)hCy z7>3NioQ(X}Fx0cP{a+LU!|y*wdR(XM1{1J=6Te4{Ii8|!5iYU|m(%M7sZB_=%i@lk z>8hf457x*uA@s*(42%nA|HyY}W&Ct{JZ7M&b&L~Nhn4G8uRAF*%2GS1ykHGmPvf1X zQ$>d|2OD0aR>>#kMDLv*B5F$jW)`kqU0J28Ng}YpTSCu{Oes+>QLJt1qkzM{G+n3S zvOgu|pLiphsbjbFY614My*HDg|3+!S^Xszoy_%Uod~KEnb@c jJq!HR+?DJv=KskFa#9dLW#^~1g8;AsvO)G|vjX@(=aLk- literal 0 HcmV?d00001 diff --git a/ui/pages/home.templ b/ui/pages/home.templ index 891c47a..e9b97a2 100644 --- a/ui/pages/home.templ +++ b/ui/pages/home.templ @@ -3,7 +3,7 @@ package pages import ( "github.com/b2dennis/meshi/ui/components/table" "github.com/b2dennis/meshi/ui/components/card" - "github.com/b2dennis/meshi/csv" + "github.com/b2dennis/meshi/xlsx" ) var weekdays = [7]string{ @@ -16,7 +16,7 @@ var weekdays = [7]string{ "Sonntag", } -templ Home(plan csv.Plan) { +templ Home(plan xlsx.Plan) { @@ -25,7 +25,7 @@ templ Home(plan csv.Plan) { Menüplan - + @card.Card(card.Props{Class: "w-4/5 h-4/5"}) { @table.Table() { @table.Header() { diff --git a/ui/pages/home_templ.go b/ui/pages/home_templ.go index 0359375..3a0fd9f 100644 --- a/ui/pages/home_templ.go +++ b/ui/pages/home_templ.go @@ -9,9 +9,9 @@ import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" import ( - "github.com/b2dennis/meshi/csv" "github.com/b2dennis/meshi/ui/components/card" "github.com/b2dennis/meshi/ui/components/table" + "github.com/b2dennis/meshi/xlsx" ) var weekdays = [7]string{ @@ -24,7 +24,7 @@ var weekdays = [7]string{ "Sonntag", } -func Home(plan csv.Plan) templ.Component { +func Home(plan xlsx.Plan) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -45,7 +45,7 @@ func Home(plan csv.Plan) templ.Component { templ_7745c5c3_Var1 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "Menüplan") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "Menüplan") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/xlsx/main.go b/xlsx/main.go new file mode 100644 index 0000000..36a6d24 --- /dev/null +++ b/xlsx/main.go @@ -0,0 +1,23 @@ +package xlsx + +import ( + "github.com/xuri/excelize/v2" +) + +type Plan struct { + Menus [7][3]string +} + +func Load() (Plan, error) { + f, err := excelize.OpenFile("./plan.xlsx") + if err != nil { + return Plan{}, err + } + var menus [7][3]string + for x := 0; x <= 2; x++ { + for y := 0; y <= 6; y++ { + menus[y][x], err = f.GetCellValue("Menüplan", string([]rune{rune('B' + x), rune('2' + y)})) + } + } + return Plan{Menus: menus}, err +}