diff --git a/cannamanage-service/pom.xml b/cannamanage-service/pom.xml
index 98846d9..e5f47d6 100644
--- a/cannamanage-service/pom.xml
+++ b/cannamanage-service/pom.xml
@@ -67,6 +67,18 @@
org.springframework.boot
spring-boot-starter-mail
+
+
+ com.github.librepdf
+ openpdf
+ 2.0.4
+
+
+
+ org.apache.commons
+ commons-csv
+ 1.11.0
+
diff --git a/docs/cannamanage-frontend-shopping-list.pdf b/docs/cannamanage-frontend-shopping-list.pdf
new file mode 100644
index 0000000..46fca4b
--- /dev/null
+++ b/docs/cannamanage-frontend-shopping-list.pdf
@@ -0,0 +1,633 @@
+%PDF-1.4
+% ReportLab Generated PDF document http://www.reportlab.com
+1 0 obj
+<<
+/F1 2 0 R /F2+0 18 0 R /F3+0 22 0 R /F4+0 26 0 R
+>>
+endobj
+2 0 obj
+<<
+/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
+>>
+endobj
+3 0 obj
+<<
+/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 136 /Length 1268 /SMask 4 0 R
+ /Subtype /Image /Type /XObject /Width 218
+>>
+stream
+Gb"0W9huEg*67T9TiVn);(I\?+"h::0d`'&2"?PBGmD?QhRk]mL(!P1ar+"uA6V;)Ue,hg:o(H\['W7V-7VXBh:\4ln&+m`*dF'tr(-h?V7SOihnK6nzzzzzzz!'hMamB).tK(@Yph$K'LN]A,onfT]X/*E]QS<-DkV'@)odN+[N,="_IAm.5^?1W,YdLlI>2HFOfgC8Cr[mV0[)gD61:!J]8/I2nP;9=/\UOokW[J&1-RFh5C7b$CJ/#AD!h$_S>fdDDf89=#R"a6^o3uoFUE2<&'ZD7/>Q>sZqIr3>nuFQkBb$Keh^T5X(Ol_o'C?&JV3m>$"r&l;aj^h81QG4(d4Of(RUXF9L>l=!LXYIuuEBG3a5Q@LEdCcR>\0&Ifs0gi3'j.@66Y!2'q!X)W3Q5M,cIdrusE@`%LG]:^^?BT\=JDYhX1b9N%>4nIut`VrAnLBd$8FU$h<7$Op-"&MqMgm!g!;[TO#16%uD1+=4E@\!/Co#^^migad3endstream
+endobj
+4 0 obj
+<<
+/BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 136 /Length 2815
+ /Subtype /Image /Type /XObject /Width 218
+>>
+stream
+Gb"/jHZ0Zf*lho;'9Z(_8.$4HkLZ>sSt;P2b\ET0P*1ukP*1ukP*1ukP*1ukP*1ukP*1ukP*1u@"bIe[(>sC3(WE9t(P8\jFmc7mH$nN8;pVoF9fjceE:T?J'pJLd!0'8\2C$PJg%n[AWH7o-Vsq+sY8-kZ#V3&:]Rt>T\mnpb.p7YA\[QbnJR')X**HOkoD3e]6`@.5X[gJ+G8`$8k\S"X15,Aao`3YCSNg[f8$;:`)61G!l!U3N`4uq!?/bNQL>'dKP7-MWSg[]G]*EX06YK27(Qp9lnSd/&[GtY;D:gmhRkN74I^aFO>?tm0%Vq8Seini$j5!$(_5n"[r,*QldjQ@9_A8c+F.7Gt=s8ZPX3$HGZaUFDQS11dM8g/O=bd'FY%lR@,PQ?DfH$5tLa?oM_K2W(:Gs':>2,RgiYoPKn2p7Y"Eh2$M]h3BcLgG3_/LT[$^p.,:;8n%Vg!R=?IUpX1.KUV>gLisG;;n)6V"c!CErO$h^9s^lo*Z<\rhkd)hubkfHH[&^4UmnPNB(+V*fkHm/J%&&G:I8!2a$,UH3.W,c/_0")_.+:pbPtSF[jSf5UO&aDT?6Xh2b"Hj*XPOT_oHDA^8FK3:a"l.-ZU#LI8pRZ/l$p'#)j@/kC^g?4eu2B<"kT$cmq(>!0,\II*!P/VX3\KlD:X>sdeK;JOhEj^RZFuM/j*_.F_9Nr,n)*149&="l_*g=rWO>sNhN&;;\,!:+,kuX8g"7^:mWfk#qDQa`#,u!5odjs$aPsLeocHk,Gg1hdIB_oL=j@9:^k=7kL(D#VmbaCE+82M8Hi$T:Mck+/5S[=dL!64^S%dJ$r_:E,WeJZi6A?8lc)nA'OD0X>5-9V1bd@29a>E9U\Dsa/m4;r*aTaNX"PincD)Fp:*+&`5pE"[dhO.&aM7Fj6\@k1%G!8Q?$Z9imAFf"/WVVK:g?s),lZ8Hhn&4U5@PZR??\4d6,-B2T4qro%_h.S7B7&o1VI)Kii+>0bnuQB9]3&GX=*=X8C%J.-6;Keh`RAA::Od>\6#0`HEa#Gl(N*h9H%q,[YliZfk3[hYYml&3[Bt3](78,,.@1U`%)eE]%$mMmGtuX+"?hK&3NQVoQ7YZ?rRc4ihV`aD/gH&&7!]::G,gAk71P0i[YYKOc<1!3^R_+e+E262&[T/F,bg#r6rt$tk@_K5i.U_#j0f:-7-EjMh81o\EELi[Y_tj.Q+HYp$Nt2AR+7M:6m6U'#R6cP)*p#onRff/(kiP'po&go-I5PPn0_W(n"%M2+Stn=^!'Cn)nu@A@k=XI=:;^1K@'+den"c(th2g1Rj(Jjr^@c*TA*2G73hjT;M!JYL$q4iRSCedK-6$%Ao#cV"nql`>jb6,KJ'/(l_nf@Noh:o$&Ac0ab1_3@N&2ur_^fhQf.@e-RFJs2,&9jVD4NChaGYAD!4@rqSt_!Q=q!E(>r6+S19+o[*3d3j\FrE*bL0E]NPRpLZ"CpRQWloh0hW&W0/ed:%2%q'qV1+^BdJl":bQW%*^Pg,Whb)1:;g%hZ]'mLVLBeJH]*;rAma>tc#[-(/A=S\MN4\j8*0>"./0W0M@>(6f6=fepgl+;^As84q]'uhqU_V`6>%DAjZDO"2&g_7aY1Kd]>'\'N-dOuh0qb/\+D@?/)2Q[bJe.ZABK%6TQS>"0!Qsm23B';kL+8)$&.)mT[:QWCk0Y.Y$IJRR[SC+s^Ype02Q>o@9l["TX-5Zs?Ztala/I%CYaAVl)]@?b^L%[:FQ^c)B$g9,?5K@7SAF100T0Wlro>_eml[-VHja*Gd=77$Q_#T(C4/)qBrNfAVY7e"6siIuZHP76T(;)XJ!C*o:cts(\c5Fq::@4`l-kc2j/pdscT13c4j!D7aXHcuo/-EqPBe3_.mlA%^kh-Hk0b1>FrnjL-)O\CM-Ainn)\fjCdb0Hu%JiH9fuZKHK)t3o!Q<[qr#9k>+=f%endstream
+endobj
+5 0 obj
+<<
+/Contents 30 0 R /MediaBox [ 0 0 612 792 ] /Parent 29 0 R /Resources <<
+/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
+/FormXob.b1201bcf0191eee53a3a7555ffe47082 3 0 R
+>>
+>> /Rotate 0 /Trans <<
+
+>>
+ /Type /Page
+>>
+endobj
+6 0 obj
+<<
+/Contents 31 0 R /MediaBox [ 0 0 612 792 ] /Parent 29 0 R /Resources <<
+/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
+/FormXob.b1201bcf0191eee53a3a7555ffe47082 3 0 R
+>>
+>> /Rotate 0 /Trans <<
+
+>>
+ /Type /Page
+>>
+endobj
+7 0 obj
+<<
+/Contents 32 0 R /MediaBox [ 0 0 612 792 ] /Parent 29 0 R /Resources <<
+/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
+/FormXob.b1201bcf0191eee53a3a7555ffe47082 3 0 R
+>>
+>> /Rotate 0 /Trans <<
+
+>>
+ /Type /Page
+>>
+endobj
+8 0 obj
+<<
+/Contents 33 0 R /MediaBox [ 0 0 612 792 ] /Parent 29 0 R /Resources <<
+/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
+/FormXob.b1201bcf0191eee53a3a7555ffe47082 3 0 R
+>>
+>> /Rotate 0 /Trans <<
+
+>>
+ /Type /Page
+>>
+endobj
+9 0 obj
+<<
+/Contents 34 0 R /MediaBox [ 0 0 612 792 ] /Parent 29 0 R /Resources <<
+/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
+/FormXob.b1201bcf0191eee53a3a7555ffe47082 3 0 R
+>>
+>> /Rotate 0 /Trans <<
+
+>>
+ /Type /Page
+>>
+endobj
+10 0 obj
+<<
+/Contents 35 0 R /MediaBox [ 0 0 612 792 ] /Parent 29 0 R /Resources <<
+/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
+/FormXob.b1201bcf0191eee53a3a7555ffe47082 3 0 R
+>>
+>> /Rotate 0 /Trans <<
+
+>>
+ /Type /Page
+>>
+endobj
+11 0 obj
+<<
+/Contents 36 0 R /MediaBox [ 0 0 612 792 ] /Parent 29 0 R /Resources <<
+/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
+/FormXob.b1201bcf0191eee53a3a7555ffe47082 3 0 R
+>>
+>> /Rotate 0 /Trans <<
+
+>>
+ /Type /Page
+>>
+endobj
+12 0 obj
+<<
+/Contents 37 0 R /MediaBox [ 0 0 612 792 ] /Parent 29 0 R /Resources <<
+/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
+/FormXob.b1201bcf0191eee53a3a7555ffe47082 3 0 R
+>>
+>> /Rotate 0 /Trans <<
+
+>>
+ /Type /Page
+>>
+endobj
+13 0 obj
+<<
+/Contents 38 0 R /MediaBox [ 0 0 612 792 ] /Parent 29 0 R /Resources <<
+/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
+/FormXob.b1201bcf0191eee53a3a7555ffe47082 3 0 R
+>>
+>> /Rotate 0 /Trans <<
+
+>>
+ /Type /Page
+>>
+endobj
+14 0 obj
+<<
+/Contents 39 0 R /MediaBox [ 0 0 612 792 ] /Parent 29 0 R /Resources <<
+/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
+/FormXob.b1201bcf0191eee53a3a7555ffe47082 3 0 R
+>>
+>> /Rotate 0 /Trans <<
+
+>>
+ /Type /Page
+>>
+endobj
+15 0 obj
+<<
+/Filter [ /FlateDecode ] /Length 698
+>>
+stream
+xmKkQb-]FȢj1QF]>
+stream
+x \U8~{wpٗM@=(
+!X"ָi)fJchִتΦ8ڷl3_g2s{/Y4{{ﻝgs a-CdONH*??<