fnschool 20250109.80500.803__py3-none-any.whl → 20251011.80531.840__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fnschool might be problematic. Click here for more details.

Files changed (276) hide show
  1. fnschoo1/__init__.py +52 -0
  2. fnschoo1/canteen/admin.py +3 -0
  3. fnschoo1/canteen/apps.py +6 -0
  4. fnschoo1/canteen/forms.py +84 -0
  5. fnschoo1/canteen/migrations/0001_initial.py +119 -0
  6. fnschoo1/canteen/migrations/0002_ingredient_is_disabled.py +20 -0
  7. fnschoo1/canteen/migrations/0003_consumption_is_disabled_alter_ingredient_is_disabled.py +23 -0
  8. fnschoo1/canteen/migrations/0004_alter_ingredient_name_category_and_more.py +66 -0
  9. fnschoo1/canteen/migrations/0005_alter_category_created_at_alter_category_name_and_more.py +41 -0
  10. fnschoo1/canteen/migrations/0006_category_is_disabled_alter_category_user_and_more.py +49 -0
  11. fnschoo1/canteen/migrations/0007_alter_consumption_amount_used_and_more.py +30 -0
  12. fnschoo1/canteen/migrations/0008_category_abbreviation_mealtype.py +67 -0
  13. fnschoo1/canteen/migrations/0009_alter_category_abbreviation_and_more.py +55 -0
  14. fnschoo1/canteen/migrations/0010_alter_consumption_options_alter_ingredient_options_and_more.py +215 -0
  15. fnschoo1/canteen/migrations/0011_category_pin_to_consumptions_top.py +23 -0
  16. fnschoo1/canteen/migrations/0012_alter_ingredient_storage_date.py +18 -0
  17. fnschoo1/canteen/models.py +179 -0
  18. fnschoo1/canteen/templates/canteen/category/create.html +17 -0
  19. fnschoo1/canteen/templates/canteen/category/delete.html +61 -0
  20. fnschoo1/canteen/templates/canteen/category/list.html +63 -0
  21. fnschoo1/canteen/templates/canteen/category/update.html +23 -0
  22. fnschoo1/canteen/templates/canteen/close.html +11 -0
  23. fnschoo1/canteen/templates/canteen/consumption/_create.html +19 -0
  24. fnschoo1/canteen/templates/canteen/consumption/create.html +456 -0
  25. fnschoo1/canteen/templates/canteen/ingredient/close.html +11 -0
  26. fnschoo1/canteen/templates/canteen/ingredient/create.html +19 -0
  27. fnschoo1/canteen/templates/canteen/ingredient/create_one.html +17 -0
  28. fnschoo1/canteen/templates/canteen/ingredient/delete.html +41 -0
  29. fnschoo1/canteen/templates/canteen/ingredient/list.html +128 -0
  30. fnschoo1/canteen/templates/canteen/ingredient/update.html +23 -0
  31. fnschoo1/canteen/templates/canteen/meal_type/create.html +17 -0
  32. fnschoo1/canteen/templates/canteen/meal_type/delete.html +56 -0
  33. fnschoo1/canteen/templates/canteen/meal_type/list.html +59 -0
  34. fnschoo1/canteen/templates/canteen/meal_type/update.html +23 -0
  35. fnschoo1/canteen/tests.py +3 -0
  36. fnschoo1/canteen/urls.py +116 -0
  37. fnschoo1/canteen/views.py +814 -0
  38. fnschoo1/canteen/workbook/generate.py +2098 -0
  39. fnschoo1/db.sqlite3 +0 -0
  40. fnschoo1/fnschool/__init__.py +13 -0
  41. fnschoo1/fnschool/asgi.py +16 -0
  42. fnschoo1/fnschool/settings.py +167 -0
  43. fnschoo1/fnschool/templatetags/fnschool_tags.py +27 -0
  44. fnschoo1/fnschool/urls.py +30 -0
  45. fnschoo1/fnschool/views.py +9 -0
  46. fnschoo1/fnschool/wsgi.py +16 -0
  47. fnschoo1/locale/en/LC_MESSAGES/django.mo +0 -0
  48. fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  49. fnschoo1/manage.py +25 -0
  50. fnschoo1/profiles/admin.py +27 -0
  51. fnschoo1/profiles/apps.py +12 -0
  52. fnschoo1/profiles/forms.py +67 -0
  53. fnschoo1/profiles/migrations/0001_initial.py +192 -0
  54. fnschoo1/profiles/migrations/0002_alter_profile_bio.py +20 -0
  55. fnschoo1/profiles/migrations/0003_alter_profile_options_alter_profile_address_and_more.py +67 -0
  56. fnschoo1/profiles/migrations/0004_profile_gender.py +26 -0
  57. fnschoo1/profiles/migrations/0005_alter_profile_gender.py +23 -0
  58. fnschoo1/profiles/models.py +60 -0
  59. fnschoo1/profiles/signals.py +20 -0
  60. fnschoo1/profiles/templates/profiles/create.html +16 -0
  61. fnschoo1/profiles/templates/profiles/detail.html +14 -0
  62. fnschoo1/profiles/templates/profiles/edit.html +12 -0
  63. fnschoo1/profiles/templates/profiles/log_in.html +20 -0
  64. fnschoo1/profiles/templates/profiles/log_out.html +12 -0
  65. fnschoo1/profiles/tests.py +3 -0
  66. fnschoo1/profiles/urls.py +15 -0
  67. fnschoo1/profiles/views.py +63 -0
  68. fnschoo1/static/css/bootstrap.min.css +11776 -0
  69. fnschoo1/static/css/fnschool.css +26 -0
  70. fnschoo1/static/js/bootstrap.bundle.min.js +4223 -0
  71. fnschoo1/static/js/bootstrap.min.js +2919 -0
  72. fnschoo1/static/js/fnschool.js +84 -0
  73. fnschoo1/static/js/jquery.min.js +5413 -0
  74. fnschoo1/static/js/jquery.slim.min.js +4331 -0
  75. fnschoo1/static/js/popper.min.js +1306 -0
  76. fnschoo1/static_collected/admin/css/autocomplete.css +377 -0
  77. fnschoo1/static_collected/admin/css/base.css +1224 -0
  78. fnschoo1/static_collected/admin/css/changelists.css +334 -0
  79. fnschoo1/static_collected/admin/css/dark_mode.css +136 -0
  80. fnschoo1/static_collected/admin/css/dashboard.css +30 -0
  81. fnschoo1/static_collected/admin/css/forms.css +546 -0
  82. fnschoo1/static_collected/admin/css/login.css +62 -0
  83. fnschoo1/static_collected/admin/css/nav_sidebar.css +145 -0
  84. fnschoo1/static_collected/admin/css/responsive.css +1043 -0
  85. fnschoo1/static_collected/admin/css/responsive_rtl.css +84 -0
  86. fnschoo1/static_collected/admin/css/rtl.css +311 -0
  87. fnschoo1/static_collected/admin/css/vendor/select2/select2.css +708 -0
  88. fnschoo1/static_collected/admin/css/vendor/select2/select2.min.css +1 -0
  89. fnschoo1/static_collected/admin/css/widgets.css +639 -0
  90. fnschoo1/static_collected/admin/js/SelectBox.js +128 -0
  91. fnschoo1/static_collected/admin/js/SelectFilter2.js +503 -0
  92. fnschoo1/static_collected/admin/js/actions.js +232 -0
  93. fnschoo1/static_collected/admin/js/admin/DateTimeShortcuts.js +496 -0
  94. fnschoo1/static_collected/admin/js/admin/RelatedObjectLookups.js +276 -0
  95. fnschoo1/static_collected/admin/js/autocomplete.js +33 -0
  96. fnschoo1/static_collected/admin/js/calendar.js +251 -0
  97. fnschoo1/static_collected/admin/js/cancel.js +29 -0
  98. fnschoo1/static_collected/admin/js/change_form.js +21 -0
  99. fnschoo1/static_collected/admin/js/collapse.js +43 -0
  100. fnschoo1/static_collected/admin/js/core.js +174 -0
  101. fnschoo1/static_collected/admin/js/filters.js +37 -0
  102. fnschoo1/static_collected/admin/js/inlines.js +439 -0
  103. fnschoo1/static_collected/admin/js/jquery.init.js +8 -0
  104. fnschoo1/static_collected/admin/js/nav_sidebar.js +81 -0
  105. fnschoo1/static_collected/admin/js/popup_response.js +24 -0
  106. fnschoo1/static_collected/admin/js/prepopulate.js +43 -0
  107. fnschoo1/static_collected/admin/js/prepopulate_init.js +20 -0
  108. fnschoo1/static_collected/admin/js/theme.js +57 -0
  109. fnschoo1/static_collected/admin/js/urlify.js +529 -0
  110. fnschoo1/static_collected/admin/js/vendor/jquery/jquery.js +10913 -0
  111. fnschoo1/static_collected/admin/js/vendor/jquery/jquery.min.js +2 -0
  112. fnschoo1/static_collected/admin/js/vendor/select2/i18n/af.js +43 -0
  113. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ar.js +36 -0
  114. fnschoo1/static_collected/admin/js/vendor/select2/i18n/az.js +33 -0
  115. fnschoo1/static_collected/admin/js/vendor/select2/i18n/bg.js +38 -0
  116. fnschoo1/static_collected/admin/js/vendor/select2/i18n/bn.js +39 -0
  117. fnschoo1/static_collected/admin/js/vendor/select2/i18n/bs.js +48 -0
  118. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ca.js +41 -0
  119. fnschoo1/static_collected/admin/js/vendor/select2/i18n/cs.js +62 -0
  120. fnschoo1/static_collected/admin/js/vendor/select2/i18n/da.js +37 -0
  121. fnschoo1/static_collected/admin/js/vendor/select2/i18n/de.js +41 -0
  122. fnschoo1/static_collected/admin/js/vendor/select2/i18n/dsb.js +51 -0
  123. fnschoo1/static_collected/admin/js/vendor/select2/i18n/el.js +43 -0
  124. fnschoo1/static_collected/admin/js/vendor/select2/i18n/en.js +41 -0
  125. fnschoo1/static_collected/admin/js/vendor/select2/i18n/es.js +41 -0
  126. fnschoo1/static_collected/admin/js/vendor/select2/i18n/et.js +38 -0
  127. fnschoo1/static_collected/admin/js/vendor/select2/i18n/eu.js +45 -0
  128. fnschoo1/static_collected/admin/js/vendor/select2/i18n/fa.js +42 -0
  129. fnschoo1/static_collected/admin/js/vendor/select2/i18n/fi.js +42 -0
  130. fnschoo1/static_collected/admin/js/vendor/select2/i18n/fr.js +43 -0
  131. fnschoo1/static_collected/admin/js/vendor/select2/i18n/gl.js +40 -0
  132. fnschoo1/static_collected/admin/js/vendor/select2/i18n/he.js +44 -0
  133. fnschoo1/static_collected/admin/js/vendor/select2/i18n/hi.js +40 -0
  134. fnschoo1/static_collected/admin/js/vendor/select2/i18n/hr.js +45 -0
  135. fnschoo1/static_collected/admin/js/vendor/select2/i18n/hsb.js +51 -0
  136. fnschoo1/static_collected/admin/js/vendor/select2/i18n/hu.js +44 -0
  137. fnschoo1/static_collected/admin/js/vendor/select2/i18n/hy.js +40 -0
  138. fnschoo1/static_collected/admin/js/vendor/select2/i18n/id.js +36 -0
  139. fnschoo1/static_collected/admin/js/vendor/select2/i18n/is.js +37 -0
  140. fnschoo1/static_collected/admin/js/vendor/select2/i18n/it.js +43 -0
  141. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ja.js +40 -0
  142. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ka.js +42 -0
  143. fnschoo1/static_collected/admin/js/vendor/select2/i18n/km.js +38 -0
  144. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ko.js +42 -0
  145. fnschoo1/static_collected/admin/js/vendor/select2/i18n/lt.js +45 -0
  146. fnschoo1/static_collected/admin/js/vendor/select2/i18n/lv.js +41 -0
  147. fnschoo1/static_collected/admin/js/vendor/select2/i18n/mk.js +42 -0
  148. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ms.js +38 -0
  149. fnschoo1/static_collected/admin/js/vendor/select2/i18n/nb.js +38 -0
  150. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ne.js +44 -0
  151. fnschoo1/static_collected/admin/js/vendor/select2/i18n/nl.js +46 -0
  152. fnschoo1/static_collected/admin/js/vendor/select2/i18n/pl.js +43 -0
  153. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ps.js +41 -0
  154. fnschoo1/static_collected/admin/js/vendor/select2/i18n/pt-BR.js +39 -0
  155. fnschoo1/static_collected/admin/js/vendor/select2/i18n/pt.js +41 -0
  156. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ro.js +43 -0
  157. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ru.js +48 -0
  158. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sk.js +61 -0
  159. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sl.js +41 -0
  160. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sq.js +43 -0
  161. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sr-Cyrl.js +48 -0
  162. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sr.js +48 -0
  163. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sv.js +40 -0
  164. fnschoo1/static_collected/admin/js/vendor/select2/i18n/th.js +36 -0
  165. fnschoo1/static_collected/admin/js/vendor/select2/i18n/tk.js +36 -0
  166. fnschoo1/static_collected/admin/js/vendor/select2/i18n/tr.js +40 -0
  167. fnschoo1/static_collected/admin/js/vendor/select2/i18n/uk.js +59 -0
  168. fnschoo1/static_collected/admin/js/vendor/select2/i18n/vi.js +37 -0
  169. fnschoo1/static_collected/admin/js/vendor/select2/i18n/zh-CN.js +36 -0
  170. fnschoo1/static_collected/admin/js/vendor/select2/i18n/zh-TW.js +33 -0
  171. fnschoo1/static_collected/admin/js/vendor/select2/select2.full.js +7115 -0
  172. fnschoo1/static_collected/admin/js/vendor/select2/select2.full.min.js +2 -0
  173. fnschoo1/static_collected/admin/js/vendor/xregexp/xregexp.js +4993 -0
  174. fnschoo1/static_collected/admin/js/vendor/xregexp/xregexp.min.js +160 -0
  175. fnschoo1/static_collected/css/bootstrap.min.css +11776 -0
  176. fnschoo1/static_collected/css/fnschool.css +26 -0
  177. fnschoo1/static_collected/js/bootstrap.bundle.min.js +4223 -0
  178. fnschoo1/static_collected/js/bootstrap.min.js +2919 -0
  179. fnschoo1/static_collected/js/fnschool.js +84 -0
  180. fnschoo1/static_collected/js/jquery.min.js +5413 -0
  181. fnschoo1/static_collected/js/jquery.slim.min.js +4331 -0
  182. fnschoo1/static_collected/js/popper.min.js +1306 -0
  183. fnschoo1/templates/base/_css.html +1 -0
  184. fnschoo1/templates/base/_js.html +15 -0
  185. fnschoo1/templates/base/content.html +30 -0
  186. fnschoo1/templates/base/header_content_footer.html +35 -0
  187. fnschoo1/templates/close.html +11 -0
  188. fnschoo1/templates/home.html +51 -0
  189. fnschoo1/templates/includes/_footer.html +39 -0
  190. fnschoo1/templates/includes/_header.html +77 -0
  191. fnschoo1/templates/includes/_navigation.html +0 -0
  192. fnschoo1/templates/includes/_paginator.html +27 -0
  193. fnschoo1/templates/registration/logged_out.html +0 -0
  194. fnschoo1/templates/registration/login.html +0 -0
  195. fnschool-20251011.80531.840.dist-info/METADATA +179 -0
  196. fnschool-20251011.80531.840.dist-info/RECORD +207 -0
  197. {fnschool-20250109.80500.803.dist-info → fnschool-20251011.80531.840.dist-info}/WHEEL +1 -1
  198. fnschool-20251011.80531.840.dist-info/entry_points.txt +2 -0
  199. fnschool-20251011.80531.840.dist-info/top_level.txt +1 -0
  200. fnschool/__init__.py +0 -35
  201. fnschool/__main__.py +0 -16
  202. fnschool/app.py +0 -103
  203. fnschool/canteen/__init__.py +0 -3
  204. fnschool/canteen/__main__.py +0 -3
  205. fnschool/canteen/bill.py +0 -253
  206. fnschool/canteen/canteen.py +0 -1
  207. fnschool/canteen/canteen.toml +0 -61
  208. fnschool/canteen/config.py +0 -10
  209. fnschool/canteen/consuming.py +0 -53
  210. fnschool/canteen/currency.py +0 -17
  211. fnschool/canteen/data/bill.i18n.xlsx +0 -0
  212. fnschool/canteen/data/bill.xlsx +0 -0
  213. fnschool/canteen/data/consuming.xlsx +0 -0
  214. fnschool/canteen/data/purchase_list.xlsx +0 -0
  215. fnschool/canteen/entry.py +0 -40
  216. fnschool/canteen/food.py +0 -206
  217. fnschool/canteen/food_classes.py +0 -33
  218. fnschool/canteen/food_classes.toml +0 -64
  219. fnschool/canteen/operator.py +0 -91
  220. fnschool/canteen/path.py +0 -28
  221. fnschool/canteen/spreadsheet/base.py +0 -212
  222. fnschool/canteen/spreadsheet/consuming.py +0 -310
  223. fnschool/canteen/spreadsheet/consumingsum.py +0 -76
  224. fnschool/canteen/spreadsheet/cover.py +0 -64
  225. fnschool/canteen/spreadsheet/ctspreadsheet.py +0 -351
  226. fnschool/canteen/spreadsheet/food.py +0 -680
  227. fnschool/canteen/spreadsheet/inventory.py +0 -375
  228. fnschool/canteen/spreadsheet/merging.py +0 -340
  229. fnschool/canteen/spreadsheet/preconsuming.py +0 -329
  230. fnschool/canteen/spreadsheet/purchasing.py +0 -885
  231. fnschool/canteen/spreadsheet/purchasingsum.py +0 -110
  232. fnschool/canteen/spreadsheet/spreadsheet.py +0 -363
  233. fnschool/canteen/spreadsheet/translating.py +0 -12
  234. fnschool/canteen/spreadsheet/unwarehousing.py +0 -178
  235. fnschool/canteen/spreadsheet/unwarehousingsum.py +0 -11
  236. fnschool/canteen/spreadsheet/warehousing.py +0 -360
  237. fnschool/canteen/spreadsheet/workbook.py +0 -17
  238. fnschool/canteen/test.py +0 -97
  239. fnschool/config.py +0 -48
  240. fnschool/entry.py +0 -67
  241. fnschool/exam/__init__.py +0 -8
  242. fnschool/exam/data/parental_emails.xlsx +0 -0
  243. fnschool/exam/data/score.xlsx +0 -0
  244. fnschool/exam/email.py +0 -349
  245. fnschool/exam/entry.py +0 -36
  246. fnschool/exam/language.py +0 -19
  247. fnschool/exam/path.py +0 -24
  248. fnschool/exam/score.py +0 -1191
  249. fnschool/exam/subject.py +0 -20
  250. fnschool/exam/teacher.py +0 -54
  251. fnschool/external.py +0 -89
  252. fnschool/games/__init__.py +0 -1
  253. fnschool/games/__main__.py +0 -1
  254. fnschool/games/games.py +0 -1
  255. fnschool/inoutput.py +0 -97
  256. fnschool/language.py +0 -40
  257. fnschool/locales/en_US/LC_MESSAGES/fnschool.mo +0 -0
  258. fnschool/locales/zh_CN/LC_MESSAGES/fnschool.mo +0 -0
  259. fnschool/locales/zh_HK/LC_MESSAGES/fnschool.mo +0 -0
  260. fnschool/locales/zh_SG/LC_MESSAGES/fnschool.mo +0 -0
  261. fnschool/locales/zh_TW/LC_MESSAGES/fnschool.mo +0 -0
  262. fnschool/path.py +0 -45
  263. fnschool/test.py +0 -24
  264. fnschool/user.py +0 -262
  265. fnschool-20250109.80500.803.dist-info/METADATA +0 -342
  266. fnschool-20250109.80500.803.dist-info/RECORD +0 -78
  267. fnschool-20250109.80500.803.dist-info/entry_points.txt +0 -5
  268. fnschool-20250109.80500.803.dist-info/top_level.txt +0 -1
  269. /fnschool/canteen/consume.py → /fnschoo1/canteen/__init__.py +0 -0
  270. /fnschool/canteen/food_recount.toml → /fnschoo1/canteen/migrations/__init__.py +0 -0
  271. {fnschool/canteen/spreadsheet → fnschoo1/canteen/workbook}/__init__.py +0 -0
  272. /fnschool/exam/__main__.py → /fnschoo1/fnschool/templatetags/__init__.py +0 -0
  273. /fnschool/canteen/food_recounts.toml → /fnschoo1/profiles/__init__.py +0 -0
  274. /fnschool/canteen/warehouse.py → /fnschoo1/profiles/migrations/__init__.py +0 -0
  275. /fnschool/canteen/workbook.toml → /fnschoo1/templates/base/_content.html +0 -0
  276. {fnschool-20250109.80500.803.dist-info → fnschool-20251011.80531.840.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,207 @@
1
+ fnschoo1/__init__.py,sha256=62ba1NEcYX7nXeltmj3tPTm-SqqFU-5J9aAx6XSzOSw,1505
2
+ fnschoo1/db.sqlite3,sha256=j6eerAiRZWsV3UJ3l-tIxuj-s6Jrl3AjZMOfmegOXhs,176128
3
+ fnschoo1/manage.py,sha256=pMv0yE2eTcNrgskSHDUdRrnY51iTm1DXg32I8mWDDqw,696
4
+ fnschoo1/canteen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ fnschoo1/canteen/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
6
+ fnschoo1/canteen/apps.py,sha256=zUjM0ZJwHW4i72vOm87QewRlvFQORQo5yb053u4YIGs,146
7
+ fnschoo1/canteen/forms.py,sha256=4Y75VHpnONdN5hM8aShyr7tbQSElLa-22PQK7fDRflw,2296
8
+ fnschoo1/canteen/models.py,sha256=20r24iNJW0hmPwhY96pQLYaIgqf8kc_Tx76IqORR_LE,5219
9
+ fnschoo1/canteen/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
10
+ fnschoo1/canteen/urls.py,sha256=4GtrqC9L59c8zopfjRgqhbcvA5iPnGcAUVuM6CrKWpk,2797
11
+ fnschoo1/canteen/views.py,sha256=4zzDoaMNRWJ0FseZOIJFhQiDLxx6AnJUK5w6-M4o7FU,26184
12
+ fnschoo1/canteen/migrations/0001_initial.py,sha256=IHlyfT9sNc-kRQZy7NyjgWzp4EGus405QCAUw4oNdAQ,3943
13
+ fnschoo1/canteen/migrations/0002_ingredient_is_disabled.py,sha256=j8oGWb2b99YwsEk-uwESLA_JRITEcz6b35ekoYOUGGc,444
14
+ fnschoo1/canteen/migrations/0003_consumption_is_disabled_alter_ingredient_is_disabled.py,sha256=9RB5SHjINgrrqtDpcVIUXEBa3C_MTcR_keXLGG_PcOs,619
15
+ fnschoo1/canteen/migrations/0004_alter_ingredient_name_category_and_more.py,sha256=b62kB_wODbvNFHi3mBQRYKGuCWfW3shXWWMsrh0DEWA,2042
16
+ fnschoo1/canteen/migrations/0005_alter_category_created_at_alter_category_name_and_more.py,sha256=sUzpYTNgvwUwiwkHP8gxUYWFzh-IoDkJjmfGOdVzQ2I,1277
17
+ fnschoo1/canteen/migrations/0006_category_is_disabled_alter_category_user_and_more.py,sha256=QeUkyilOgDCpO6jWvFJtWDFLlM0z0KlSBmNze23Z0vw,1427
18
+ fnschoo1/canteen/migrations/0007_alter_consumption_amount_used_and_more.py,sha256=vrBYOFnGpFYMsHVGKJ3DdhiYSLvcUPBl0pyrn4KNZMc,855
19
+ fnschoo1/canteen/migrations/0008_category_abbreviation_mealtype.py,sha256=nxQAGc-wsvkSNiql1tqRTJpWc6atzoZe2IkEmtHXFJI,2117
20
+ fnschoo1/canteen/migrations/0009_alter_category_abbreviation_and_more.py,sha256=RGvFViWQjhpbAUaaU-IGEfyZ96SNe7GU3gYitGGWmYc,1733
21
+ fnschoo1/canteen/migrations/0010_alter_consumption_options_alter_ingredient_options_and_more.py,sha256=tG5k-8s2KYfkFHGKxsLXShCvZsO59TFMYl675_fUFao,6997
22
+ fnschoo1/canteen/migrations/0011_category_pin_to_consumptions_top.py,sha256=gonvx7T23KlesYUGFx-WTvkz1BLZSnq0n62qKvtWnUo,553
23
+ fnschoo1/canteen/migrations/0012_alter_ingredient_storage_date.py,sha256=JvU9xrAbGN8uoKHQw00wq6U4CaR_6WojQo-8VwmID3I,436
24
+ fnschoo1/canteen/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ fnschoo1/canteen/templates/canteen/close.html,sha256=pLYeJmGaOEJKMUJdZmYzz_n--l28IRDQ4fXvetP_Vsc,200
26
+ fnschoo1/canteen/templates/canteen/category/create.html,sha256=7Hq62BqEpamDt52_Ut7DTO74_3yEn8_CqXH4e4va6dY,593
27
+ fnschoo1/canteen/templates/canteen/category/delete.html,sha256=MnPyFzjO3HonOljwxGf6r1UzmbFjow7VT6h7YGkxxfk,1709
28
+ fnschoo1/canteen/templates/canteen/category/list.html,sha256=aj81uoA-jmdv8mZT-Y9DxjOHVGrSfI1z0DB1YnJWb4w,2045
29
+ fnschoo1/canteen/templates/canteen/category/update.html,sha256=8Nzdbe8UorrJHzElkrdqvLaPnUvcvGhrViZB4D86wqo,815
30
+ fnschoo1/canteen/templates/canteen/consumption/_create.html,sha256=lpST1R0vL1PEI1YE9d0-bcWWpCMH-INjIF-7pweAHuU,1008
31
+ fnschoo1/canteen/templates/canteen/consumption/create.html,sha256=uqS5rEWdAn3u7L7F4SgpOHK931u60rGMDQAA7IofRlk,14714
32
+ fnschoo1/canteen/templates/canteen/ingredient/close.html,sha256=pLYeJmGaOEJKMUJdZmYzz_n--l28IRDQ4fXvetP_Vsc,200
33
+ fnschoo1/canteen/templates/canteen/ingredient/create.html,sha256=xZvh0tP_cv2HPQ96JSHChO6Ni23tzHc5YJCUhE2yEqM,807
34
+ fnschoo1/canteen/templates/canteen/ingredient/create_one.html,sha256=O8EPSvAnEZ-4VJiwFdoyxJrMOoMpRkH6CyfvWwHaVgc,599
35
+ fnschoo1/canteen/templates/canteen/ingredient/delete.html,sha256=w1GK8vLTTBz4xolFce6ITZMNeBgv-XgMx9dkOykE8-A,1211
36
+ fnschoo1/canteen/templates/canteen/ingredient/list.html,sha256=b3FC5bcprUau-TtRPdBlOdtbqlcIdDSdelzXvfm57OI,4205
37
+ fnschoo1/canteen/templates/canteen/ingredient/update.html,sha256=VTlNSvTb-kck0S3bGtvxdJbYAtfszjtUEXP7OYva1FA,819
38
+ fnschoo1/canteen/templates/canteen/meal_type/create.html,sha256=7Pe0RSGtd2G2IMHwnggr0Gzs23oBqpaPqWH5zlNzc_4,596
39
+ fnschoo1/canteen/templates/canteen/meal_type/delete.html,sha256=1UmCyXD-6lbYl-IE63EnQCEXJr82rUCDvycI4bGuMoo,1551
40
+ fnschoo1/canteen/templates/canteen/meal_type/list.html,sha256=c5kJUE1OgpRtSrMV4wFwL_gbRSaX_XMM4Zt1JTx34_g,1907
41
+ fnschoo1/canteen/templates/canteen/meal_type/update.html,sha256=Rfv1TamSFIKHzvUNlgnmrPmfmzrehPpuo5Hv8VF0yek,818
42
+ fnschoo1/canteen/workbook/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
43
+ fnschoo1/canteen/workbook/generate.py,sha256=o6dCRE7Ne8tSCZkdu8MIsgvt4UEuf9YiefsBBAGMVec,81958
44
+ fnschoo1/fnschool/__init__.py,sha256=YdtocD2DWeq4iocf-YtZ7SO3z6Yz594IW8Jcj8Zetpw,287
45
+ fnschoo1/fnschool/asgi.py,sha256=kzkqosS10uBlyBX53EXcsATcvEZmac6nsPzyOHCuucE,393
46
+ fnschoo1/fnschool/settings.py,sha256=l9Y1iQCivSfmsNfnHltfXLzxP6gG4VMIL4GEZgAp8YM,4357
47
+ fnschoo1/fnschool/urls.py,sha256=8WPemtCUuStd0R9gDP70c-NRQ5k7G4ksq6dYGH6xCDM,1036
48
+ fnschoo1/fnschool/views.py,sha256=MfujMhFkRLxT-saID1xTU16v0khzIl6ceDl7_JgrgFs,152
49
+ fnschoo1/fnschool/wsgi.py,sha256=dQq4S0vZWCz8w5R9KooJeLYTVFXvEgJRYe7NFZwVxU8,393
50
+ fnschoo1/fnschool/templatetags/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
51
+ fnschoo1/fnschool/templatetags/fnschool_tags.py,sha256=l5Zov4VlQKpz-69SFftP4kXyMymz-a0D5F_ss_eiFc4,568
52
+ fnschoo1/locale/en/LC_MESSAGES/django.mo,sha256=M8AB6fmjwlEd761iFlasNWdiEYfE-2nIwBoioGtEVUo,404
53
+ fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=P0tb0kB1WEjdQ87eI-sm0GD4l-MI5JKFsKJA1tcNJs8,19747
54
+ fnschoo1/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ fnschoo1/profiles/admin.py,sha256=93UCvdODI63KzCDfFFnKmfvCMGCp6FCG9WErE91i79Y,522
56
+ fnschoo1/profiles/apps.py,sha256=WDu6eceFnDkBFMqquAolMZMo7XPb0ah6l2q2AruTrl4,215
57
+ fnschoo1/profiles/forms.py,sha256=pTSpwU2zCXxo_UpMU_MsDEGnPDgtqZlGJWLyZuuwGrQ,1875
58
+ fnschoo1/profiles/models.py,sha256=23RL4cPxOTguBwLCZu98v2y8Peo6ZJI4psDaBKFzwg8,1603
59
+ fnschoo1/profiles/signals.py,sha256=u5cv6xoZ7PUrKoD6ZOVWLLKg_93w_FCgWIiC4DxJADA,486
60
+ fnschoo1/profiles/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
61
+ fnschoo1/profiles/urls.py,sha256=IOQ6GaPdOB4E0J-plfqIFHkabXZwOJKyFCKS7m9uKMY,426
62
+ fnschoo1/profiles/views.py,sha256=msH3WLy08K58IBeAQ7YVUN0AtNv5WLqJSgEoLP5RoPw,1962
63
+ fnschoo1/profiles/migrations/0001_initial.py,sha256=zZ7l2DxJHf7YpLBBX3ztUfCmdoRNz1O5oSrdbBOdPjI,6776
64
+ fnschoo1/profiles/migrations/0002_alter_profile_bio.py,sha256=LD7FdqcJ747XuKfIrZpq7avfx7_uZXr_t-Obc7yntSU,444
65
+ fnschoo1/profiles/migrations/0003_alter_profile_options_alter_profile_address_and_more.py,sha256=R8rIXtXgGgOQKaucoDz93tcrHlzq1B1_Fq5DlWHPDSw,2057
66
+ fnschoo1/profiles/migrations/0004_profile_gender.py,sha256=n5eQwBDRcEORGM7HZOcjoY_m1pckuKbjrwk--J7-LjA,625
67
+ fnschoo1/profiles/migrations/0005_alter_profile_gender.py,sha256=dPAoUEcwjYt6AxgBfRZTCJCnEsJgCAfx_jae32TVLD4,550
68
+ fnschoo1/profiles/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ fnschoo1/profiles/templates/profiles/create.html,sha256=roTR6ZwN8TMoKW0ALQ9aBSrc4bfPLaDg8-yipTH8GbY,545
70
+ fnschoo1/profiles/templates/profiles/detail.html,sha256=xowq2ul9RGEHfP9WDuvSAyixWqhvvEeR1P4zH8NS9Dw,582
71
+ fnschoo1/profiles/templates/profiles/edit.html,sha256=HOrMK8RBnYfvY3qNdDjrN5Jd1SPPcR3nHsgEv3HwYDA,421
72
+ fnschoo1/profiles/templates/profiles/log_in.html,sha256=ziOavqdW6PggMLgQGiPnRJRT3GbxjpNKN1UtAROjB7E,724
73
+ fnschoo1/profiles/templates/profiles/log_out.html,sha256=RRb6K-0G1Jm4RhfY9VwftJgNwgI8jsKb_N5Gvp5XtiE,320
74
+ fnschoo1/static/css/bootstrap.min.css,sha256=eGY1FwN6FhXUvbmXraT1t_q2vcNlQa8g5xQDwg8mG6w,280591
75
+ fnschoo1/static/css/fnschool.css,sha256=nPjOh0vWuuFnZWrXcT2E3j3adL77v_PRyeml65MvkEE,418
76
+ fnschoo1/static/js/bootstrap.bundle.min.js,sha256=6kw84LCFc4QJzifgkle0FsvQrpt2NVRNPNjSSc9caiM,125881
77
+ fnschoo1/static/js/bootstrap.min.js,sha256=0SHpZTHghUOz_BNedMzuH00z5lgwOSRKP_KI9G5Ogbk,88597
78
+ fnschoo1/static/js/fnschool.js,sha256=T8qklr48qTIfGPAK7y2A8F3x7mb4p3FJKD0ofZEBEOQ,2803
79
+ fnschoo1/static/js/jquery.min.js,sha256=np_WnfpAmUmEO_iheFAJKf6mbm0_laW3Ns4x7kjSlt4,162505
80
+ fnschoo1/static/js/jquery.slim.min.js,sha256=p5YkbOjgHxX3hTadKlGuDW58NvJ1ldjjokDuDQ_5yXs,129962
81
+ fnschoo1/static/js/popper.min.js,sha256=O2xdmtEow7gq3I7-0lKjshvxHkBe0hTWrMkbX2fy0XQ,36887
82
+ fnschoo1/static_collected/admin/css/autocomplete.css,sha256=q24tDb0vBuAG-_5JwOP7f_OFCIsWfLRB0BFABIm1-nw,9066
83
+ fnschoo1/static_collected/admin/css/base.css,sha256=-2fseq16BSts0QTDqgin7Q1mOvxkYzv-ogxT8I3oODY,20207
84
+ fnschoo1/static_collected/admin/css/changelists.css,sha256=lDHKFDSf8o04mpg7a7iXlAYCfcSgJFaqWZLHuXAbBOI,6285
85
+ fnschoo1/static_collected/admin/css/dark_mode.css,sha256=S87rvM897LwL_QRaTtbgrEX2IHact7w4S6wAGM2X_E4,2763
86
+ fnschoo1/static_collected/admin/css/dashboard.css,sha256=5qhRWlAY8HhHfHbQdEA-esKGc0HOeYsTb0XHvvzhtB0,424
87
+ fnschoo1/static_collected/admin/css/forms.css,sha256=3qkGi1hOos4_idNRj7LYmVRu_MsX7xqodmq7WZXQOkk,8674
88
+ fnschoo1/static_collected/admin/css/login.css,sha256=lSem9spVmFzm6hdwd5_7HMuwXsyEuyWXK3jkl0cJlNg,904
89
+ fnschoo1/static_collected/admin/css/nav_sidebar.css,sha256=TtR2qzDUZDe1woLqH2VUse8XfVFVTVijl6AQql6uZ2Q,2556
90
+ fnschoo1/static_collected/admin/css/responsive.css,sha256=kh8iClaYbJOJ6btvDC7d8waP9jHnqKj190l397YEcUo,16483
91
+ fnschoo1/static_collected/admin/css/responsive_rtl.css,sha256=aL_sNSGgQT-fGwCsv9PHedGCd4mDLYsoJK6yjrs3Cio,1690
92
+ fnschoo1/static_collected/admin/css/rtl.css,sha256=U9e4DCvkQ3WAzlDMdLc9hm5VlN61LtyITN-Ojl6biVs,4722
93
+ fnschoo1/static_collected/admin/css/widgets.css,sha256=_FadWlbQHP8WiqBQLdrwazugPQGE_2IYpIOQLlQMyLw,11347
94
+ fnschoo1/static_collected/admin/css/vendor/select2/select2.css,sha256=kkfmLvhg6Ek2fd05nqb0Rr-VxYlXOSuJ60Nsk-2hYtc,17038
95
+ fnschoo1/static_collected/admin/css/vendor/select2/select2.min.css,sha256=FdatTf20PQr_rWg-cAKfl6j4_IY3oohFAJ7gVC3M34E,14966
96
+ fnschoo1/static_collected/admin/js/SelectBox.js,sha256=ONZjFU81Hspp_98S7CYxPJMoU6_go887kheLRjlX7wc,3884
97
+ fnschoo1/static_collected/admin/js/SelectFilter2.js,sha256=zf0Hvaeel3SxhKqtfEAIpfM3iSkcI8-oRJ_p9WCNl_Q,15320
98
+ fnschoo1/static_collected/admin/js/actions.js,sha256=h95KB1nHullGuJ7wBkKvOAe6aUs8Ztr9ptjZVPqDiF0,7247
99
+ fnschoo1/static_collected/admin/js/autocomplete.js,sha256=6bUEVS2Tn5V3FAUaXc0ycl6vF88m3-2THRrZvcNAjJs,871
100
+ fnschoo1/static_collected/admin/js/calendar.js,sha256=uuODnCGkrNiDZJRoT89OOzGd1lfr0yoL3_MVLMoQt6A,7485
101
+ fnschoo1/static_collected/admin/js/cancel.js,sha256=Q7kGDZK1Gn2rJDVzKDrxjaQZPdUSbpTnuSSOCwacFW4,770
102
+ fnschoo1/static_collected/admin/js/change_form.js,sha256=wzx_Tc1B4WA2cG2P60BNp0DT3oFFAHvEDyrXJz9K7QE,577
103
+ fnschoo1/static_collected/admin/js/collapse.js,sha256=ousYeu1HLiKIxhW-5K3fvwcjZz_3me3sCk0zT-zHHBE,1519
104
+ fnschoo1/static_collected/admin/js/core.js,sha256=8kIXawbVKFsx5JZxssLF2e0TYhpf7jviFQ2YwQz_82M,5083
105
+ fnschoo1/static_collected/admin/js/filters.js,sha256=qiJoCwPLPhdLsijUE1YsmR24Ex08TpLWsZit-tJiwIk,957
106
+ fnschoo1/static_collected/admin/js/inlines.js,sha256=ySTVA4cCgTpjPsgx5ylFid6i3sEFnEu04eJWPWOQSB4,14440
107
+ fnschoo1/static_collected/admin/js/jquery.init.js,sha256=JaKWgrbHRkfJH_oDd1OcfW3FS2XkgGjPKsAAKP0dWP0,347
108
+ fnschoo1/static_collected/admin/js/nav_sidebar.js,sha256=GzryY2_3Uu_RaiHzh-92gKrrBPa_gbcUWjTLaL0kCGk,2642
109
+ fnschoo1/static_collected/admin/js/popup_response.js,sha256=3Ci9qabN7aZyeyGSmvvNWJDPg83J6vT1dfka9OdrsZc,581
110
+ fnschoo1/static_collected/admin/js/prepopulate.js,sha256=WiqEcYM132JeWcPEUJ2Xie98oXB-jeeX4A7FxzoW57o,1330
111
+ fnschoo1/static_collected/admin/js/prepopulate_init.js,sha256=KSHWv-6Gs47qmTjsF6feaTQfghd3HBAwxocln8yn-qg,571
112
+ fnschoo1/static_collected/admin/js/theme.js,sha256=bGUyZ-7MjSFG3__L5TiZ1HxbVQC1iSoTW3Iw1iDzxjQ,1632
113
+ fnschoo1/static_collected/admin/js/urlify.js,sha256=lK9bXrYgMWqj7zVq1RtdzwxIvQDSNwFBVjuxtZbSRlA,7865
114
+ fnschoo1/static_collected/admin/js/admin/DateTimeShortcuts.js,sha256=L65CG2JpQbUUy9j6MMY1qc2-af1kplrDrtgi_AT1wxs,17519
115
+ fnschoo1/static_collected/admin/js/admin/RelatedObjectLookups.js,sha256=9M35LXUkIFiRt2k75nR0wpqZhzk7EgKmpcRQpwE24A8,8184
116
+ fnschoo1/static_collected/admin/js/vendor/jquery/jquery.js,sha256=THMYZJnIGYwZSRXu1a65luWEwpRP8MwpkzyoioaCR2Q,329168
117
+ fnschoo1/static_collected/admin/js/vendor/jquery/jquery.min.js,sha256=MonzFlcAQzntZ48WxOYmmH5XMD8hB1d-1Jc_bJ4QUmA,86512
118
+ fnschoo1/static_collected/admin/js/vendor/select2/select2.full.js,sha256=F7388RjwR13LBLZw8md1HSoW9o68Re36y4uB7RDQ-P0,200502
119
+ fnschoo1/static_collected/admin/js/vendor/select2/select2.full.min.js,sha256=XG_auAy4aieWldzMImofrFDiySK-pwJC7aoo9St7rS0,79212
120
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/af.js,sha256=WPP1ybPWdv6CQ7pawhohwfTGQe99H3einHgPlyG94ME,1245
121
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/ar.js,sha256=p12F5_ur_MkBFRN2PuecrsGiBx2ZmfiEpXYiEyWR9-Y,1193
122
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/az.js,sha256=cY6DJm9ZZUaCCXAbkymDDGkirRs_BbP0JmV5vDQ82qg,976
123
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/bg.js,sha256=tIbIs6FItUM3YStNF3gmIRGifZ-s97QmfPcp1JVCRC4,1317
124
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/bn.js,sha256=TbQQA17z4MCrLiYQv-BR5fJptYFrqJYMbddDWhSRxio,1632
125
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/bs.js,sha256=PQXQ7qYfMjtp2fIbM-PkqFNNFk--FZU874VhJnrkxa8,1424
126
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/ca.js,sha256=MaKiQzh0GPsR9SoHeNTMaOERsNY673UQBj6YzQlRROg,1270
127
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/cs.js,sha256=yqhx3sMd4K587SjjfRnYIH4nDAuLsGxGtcjtfNkw3S0,1890
128
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/da.js,sha256=pADnQC2IXJYbBZAusP1wDHJl3bSFxPmRXcQxLPDvFzY,1134
129
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/de.js,sha256=Cy45xSw1OWdyhbcxWPj_OGedF-ofnKzr0XlVCo5GABI,1220
130
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/dsb.js,sha256=H42LglC73M-qXn9zC5ljwLH5cIInQJRn1efAh8m7Y8g,1517
131
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/el.js,sha256=IrtjgFFBnOHNfde5UqlbTpBXidzNv-DkvIheBFN8GCs,1575
132
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/en.js,sha256=kpJh3Um3wdLY7RrOnHFT1YSneEJDoIr7mrCeaNzUzrw,1203
133
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/es.js,sha256=w0JUdKmdDTaMoYOnUIXDhbqZ9wHL0_uDw99u4FMLln4,1292
134
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/et.js,sha256=wa9xJL4sUhjJo2di1WoCqSNLIyikp70Yk_e5UhnWYyk,1162
135
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/eu.js,sha256=J4oEvVzxZVwFS5HgxskIAm2ejL0K-i0y6wGMfWmdEYQ,1286
136
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/fa.js,sha256=nXDA92i2xKY2rfBTSBL_oNZ3IoLEespTWsG18h9NpuY,1375
137
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/fi.js,sha256=3GR9k8HLqyYekBj_PzPGNAZPMj1LBz_QymR0rgzG5qw,1155
138
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/fr.js,sha256=464u6a_utb72Cw4YfnysvRsIdMnwV6BZ_TX8Y-V8dtg,1308
139
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/gl.js,sha256=sLQ7m6_VHhLvtiX0yB4zjsSJ-OQRf0GDi-G-IzkybTo,1267
140
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/he.js,sha256=VUwk7PZdM7XxFORjitNzBa5P_nI2nWJav1STuoQjvT8,1393
141
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/hi.js,sha256=SirOla11XhXVYHsma_TMXYxmCKKftFccZ55op-8em3A,1516
142
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/hr.js,sha256=hx5iaFV3w4dSX1cjDMZfUlwcCOOcNyre2zqCrlzkAcw,1249
143
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/hsb.js,sha256=iHT2r3cK_erxVn-cwTg4QjI5WLodTXufHP9JAiUbtrY,1518
144
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/hu.js,sha256=8HSN6sQ5yEj8HCykuwFAN0UerUK9gk-ufMGzBFH-TB0,1203
145
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/hy.js,sha256=pwXoYvJlOmRSEbeACQfpO0GBAgO0DmesTVRJbJ87I_4,1358
146
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/id.js,sha256=hFR9w5Qe3mQ57BHGydp3HxUUEIC2_OrgX3pKNLfI7Ms,1056
147
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/is.js,sha256=lyXgc6hCS57q-E1gDYvqYLuyscZp5E8ocr_oR58t1tc,1133
148
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/it.js,sha256=9eGrIkSpyiQ4nz7Jp7XJYnEt0_f2xi69DkZj1yNiNaQ,1285
149
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/ja.js,sha256=oV35uOfdp9CD7EpHIhu-QIDbDeNBnt4EZUGE8vjgdjw,1186
150
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/ka.js,sha256=AFYbBtYX5gxhYtuKq9BF3URcGO16A9kbM7qFwJov-HU,1547
151
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/km.js,sha256=4Sf2qziH20c4jmqn78dwoVlUhWPW146c4B1AtfbltMM,1398
152
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/ko.js,sha256=awZsrGYqHEkV8qtT6Bx2owL4_c83nRpxPs89IOcGUGA,1207
153
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/lt.js,sha256=GmbIW2fcUstZuUw3WbdYP4EdQ99opEAGn3hXUPuTR-A,1382
154
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/lv.js,sha256=XMgKJsi5WDBNo-GUqRKhXPKeuT9HBU3mWgCAK9rFF4U,1271
155
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/mk.js,sha256=LG_CIng90hTyl1Wxw1_qPMcQ9xhNax0oQv-32PK3hro,1421
156
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/ms.js,sha256=HbHX3_3ZnkRM97zy2HoXtrLM54NolV39zGIRYEWQ3ps,1121
157
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/nb.js,sha256=hRfJ_2hJEtWO4CR1Pj__kXL4fR78hbA9maplJEtYIm4,1088
158
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/ne.js,sha256=ZjKCWSPb_jbX4dDuwrevwvhYe4iZRMTyS4khxz9I5hc,1759
159
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/nl.js,sha256=uAKjvD8nxOLX92uHWJ50tRqFDYZ-OMRO8roGQHQEmu0,1321
160
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/pl.js,sha256=1s4kdsSLzNhNo1hTflpkG6Hv0m5Xx-qR3DpZ_G4qx_s,1333
161
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/ps.js,sha256=TFBXIZabmiEpEzV0uN4VqshXluaKOlLMGSp5kKXb7TI,1410
162
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/pt-BR.js,sha256=BVah91_gKHMaSdcMAs3JnYqwr0ZU7URQaIsHEXvHF64,1221
163
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/pt.js,sha256=NCBKPX3PRNhOijfFsVxLl8MwCGv2H_cLuvxYB7mbaaU,1239
164
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/ro.js,sha256=4UVm_MtJFoPv0-Lw-Ljr-XCq44Mp19Fabj0YIfPDnOc,1320
165
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/ru.js,sha256=X1ZaANRO8ZyAk9vM0mP8uO3bDYfe3bDHaNYffyZhmS8,1633
166
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/sk.js,sha256=_6ajTitAEL2o89HJDepnqwvk6ojKblg-S_nXyYpGEaw,1895
167
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/sl.js,sha256=0WYBm4I86DH1UwtvAUXL2Dj-3FuYNkrZsa6VzusMLPI,1323
168
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/sq.js,sha256=ZQxgingiZ61sR088EDzbe970VwyJMk7AY2MOu8qnblQ,1282
169
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/sr-Cyrl.js,sha256=8r2VsfdC05caUdFo5Tet9cyhv8KiSdS1xMKBwNTigUw,1568
170
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/sr.js,sha256=Lw9WNTww5t-Nv6bpg5SnCSyrVpjSo41J_Y38vDbWVYM,1439
171
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/sv.js,sha256=mTHZj5LH7Fg77CwX4S21KC_jC6gSA2CaRtRAevypmzw,1116
172
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/th.js,sha256=-JmBrJY0jABqkbVJ7Iwg9jRm6hVR8IvkVJwAVuM8oJg,1362
173
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/tk.js,sha256=DHd1xbSDoxhp-efiEctbYi4_zmW6QLgq0lwD8JVNCFM,1056
174
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/tr.js,sha256=STOj8CEOY6QnNU1atvE-zYh3aGEpqe_2eLW8Vw8ghV4,1102
175
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/uk.js,sha256=NcF2AUeLlzUF74flMsyMwN6vbn5x5EX56QMNjN7tuWA,1717
176
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/vi.js,sha256=nh222BQeMvcIHLIr8tNTHIKiDdRFQMpCJFrHVIHAWbI,1099
177
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/zh-CN.js,sha256=Zsy7KfKg9WgInYviGjpS-RNQetyaZ0jDSkK5X3FLd1A,1056
178
+ fnschoo1/static_collected/admin/js/vendor/select2/i18n/zh-TW.js,sha256=IqFNL6uzC0ehym7g6bCUg1P1khWBD3LzBQ1pGmRrG0Q,968
179
+ fnschoo1/static_collected/admin/js/vendor/xregexp/xregexp.js,sha256=tHTyafGwj1dGD7WN72h9k1S8tuf2sDuiO3drXjn_AaM,266485
180
+ fnschoo1/static_collected/admin/js/vendor/xregexp/xregexp.min.js,sha256=e2iDfG6V1sfGUB92i5yNqQamsMCc8An0SFzoo3vbylg,125266
181
+ fnschoo1/static_collected/css/bootstrap.min.css,sha256=eGY1FwN6FhXUvbmXraT1t_q2vcNlQa8g5xQDwg8mG6w,280591
182
+ fnschoo1/static_collected/css/fnschool.css,sha256=nPjOh0vWuuFnZWrXcT2E3j3adL77v_PRyeml65MvkEE,418
183
+ fnschoo1/static_collected/js/bootstrap.bundle.min.js,sha256=6kw84LCFc4QJzifgkle0FsvQrpt2NVRNPNjSSc9caiM,125881
184
+ fnschoo1/static_collected/js/bootstrap.min.js,sha256=0SHpZTHghUOz_BNedMzuH00z5lgwOSRKP_KI9G5Ogbk,88597
185
+ fnschoo1/static_collected/js/fnschool.js,sha256=T8qklr48qTIfGPAK7y2A8F3x7mb4p3FJKD0ofZEBEOQ,2803
186
+ fnschoo1/static_collected/js/jquery.min.js,sha256=np_WnfpAmUmEO_iheFAJKf6mbm0_laW3Ns4x7kjSlt4,162505
187
+ fnschoo1/static_collected/js/jquery.slim.min.js,sha256=p5YkbOjgHxX3hTadKlGuDW58NvJ1ldjjokDuDQ_5yXs,129962
188
+ fnschoo1/static_collected/js/popper.min.js,sha256=O2xdmtEow7gq3I7-0lKjshvxHkBe0hTWrMkbX2fy0XQ,36887
189
+ fnschoo1/templates/close.html,sha256=pLYeJmGaOEJKMUJdZmYzz_n--l28IRDQ4fXvetP_Vsc,200
190
+ fnschoo1/templates/home.html,sha256=4iq52z9BuEHyFk4jKcJSZEQBB6VqJ4dvr47L6C57tss,1106
191
+ fnschoo1/templates/base/_content.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
+ fnschoo1/templates/base/_css.html,sha256=I7We2o3BzNq4PBN72UOKAtXHkZ1Xb-eYP8N4bF3rm1w,16
193
+ fnschoo1/templates/base/_js.html,sha256=E2mgj6LQjd37r660iG2cAIOfofwuwMC6SZ59fj6wUnA,443
194
+ fnschoo1/templates/base/content.html,sha256=wbbZVWuZwL7EX0K6x5Ex1sYx0N2YteA0XMAdGsW_ScU,974
195
+ fnschoo1/templates/base/header_content_footer.html,sha256=8HyXN5B0u2bUtAXvnTkFsUhRHNA_Y3V87KuosQoPPJ4,1134
196
+ fnschoo1/templates/includes/_footer.html,sha256=6qaI7S63vz33B-HyhsnjVQDMNlOARLHjNcQeqxtlOIE,1490
197
+ fnschoo1/templates/includes/_header.html,sha256=2gQnNkHo92uayqatMCrXnQ751sViR7CiBOg3hN5GBL4,2784
198
+ fnschoo1/templates/includes/_navigation.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
199
+ fnschoo1/templates/includes/_paginator.html,sha256=Z-Hxcdmun4SJ1YcHnWTDLfW8wrngROiBTwr4NZWaPP4,1246
200
+ fnschoo1/templates/registration/logged_out.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
+ fnschoo1/templates/registration/login.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
202
+ fnschool-20251011.80531.840.dist-info/licenses/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
203
+ fnschool-20251011.80531.840.dist-info/METADATA,sha256=k1ixWW6Sc1Dp2WXn77v3V2NKXao7Rv2JVa-oCGIwRhg,4752
204
+ fnschool-20251011.80531.840.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
205
+ fnschool-20251011.80531.840.dist-info/entry_points.txt,sha256=To2PDA9r0qhE0Wq1-M8hEE8uXxTrTe16BOcpKPT-q5g,47
206
+ fnschool-20251011.80531.840.dist-info/top_level.txt,sha256=s6ZKnNm94Q0-247a50eI7jDK98uPF6P2kC9Ovd3LUlM,9
207
+ fnschool-20251011.80531.840.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ fnschool-cli = fnschoo1:main
@@ -0,0 +1 @@
1
+ fnschoo1
fnschool/__init__.py DELETED
@@ -1,35 +0,0 @@
1
- import os
2
- import sys
3
- import argparse
4
- import random
5
- from pathlib import Path
6
- import tomllib
7
- import re
8
- import math
9
- import copy
10
- from datetime import datetime, timedelta
11
- from tkinter import filedialog, ttk
12
- import tkinter as tk
13
-
14
- import calendar
15
- from datetime import datetime
16
-
17
- import pandas as pd
18
- import numpy as np
19
- from openpyxl import load_workbook
20
- from openpyxl.styles import numbers
21
- from openpyxl.styles import Font
22
- from fnschool.app import *
23
- from fnschool.language import _
24
- from fnschool.inoutput import *
25
- from fnschool.path import *
26
- from fnschool.entry import *
27
- from fnschool.external import *
28
- from fnschool.user import *
29
- from fnschool.config import *
30
-
31
-
32
- __version__ = "20250109.80500.803"
33
-
34
-
35
- # The end.
fnschool/__main__.py DELETED
@@ -1,16 +0,0 @@
1
- import os
2
- import sys
3
- from pathlib import Path
4
-
5
-
6
- p_dpath = (Path(__file__).parent.parent).as_posix()
7
- if not p_dpath in sys.path:
8
- sys.path.append(p_dpath)
9
-
10
-
11
- from fnschool import *
12
- from fnschool.entry import *
13
-
14
- read_cli()
15
-
16
- # The end.
fnschool/app.py DELETED
@@ -1,103 +0,0 @@
1
- import os
2
- import sys
3
- import random
4
-
5
- app_name = "fnschool"
6
- app_author = "larryw3i"
7
- app_version = None
8
-
9
-
10
- def get_app_version():
11
-
12
- global app_version
13
- if not app_version:
14
- from fnschool import __version__
15
-
16
- app_version = __version__
17
- return app_version
18
-
19
-
20
- def print_app():
21
-
22
- app_name = random.choice(
23
- [
24
- [
25
- r" _____ _ _ ____ ____ _ _ ___ ___ _ ",
26
- r"| ___| \ | / ___| / ___| | | |/ _ \ / _ \| | ",
27
- r"| |_ | \| \___ \| | | |_| | | | | | | | | ",
28
- r"| _| | |\ |___) | |___| _ | |_| | |_| | |___ ",
29
- r"|_| |_| \_|____/ \____|_| |_|\___/ \___/|_____|",
30
- r"",
31
- ],
32
- [
33
- r"|`````````````````````````````````````````````````|",
34
- r"| _____ _ _ ____ ____ _ _ ___ ___ _ |",
35
- r"|| ___| \ | / ___| / ___| | | |/ _ \ / _ \| | |",
36
- r"|| |_ | \| \___ \| | | |_| | | | | | | | | |",
37
- r"|| _| | |\ |___) | |___| _ | |_| | |_| | |___ |",
38
- r"||_| |_| \_|____/ \____|_| |_|\___/ \___/|_____||",
39
- r"| |",
40
- r"```````````````````````````````````````````````````",
41
- r"",
42
- ],
43
- [
44
- "",
45
- " ▄▄ ▗▖ ▗▄▖ ",
46
- " ▐▛▀ ▐▌ ▝▜▌ ",
47
- "▐███ ▐▙██▖▗▟██▖ ▟██▖▐▙██▖ ▟█▙ ▟█▙ ▐▌ ",
48
- " ▐▌ ▐▛ ▐▌▐▙▄▖▘▐▛ ▘▐▛ ▐▌▐▛ ▜▌▐▛ ▜▌ ▐▌ ",
49
- " ▐▌ ▐▌ ▐▌ ▀▀█▖▐▌ ▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌ ▐▌ ",
50
- " ▐▌ ▐▌ ▐▌▐▄▄▟▌▝█▄▄▌▐▌ ▐▌▝█▄█▘▝█▄█▘ ▐▙▄",
51
- " ▝▘ ▝▘ ▝▘ ▀▀▀ ▝▀▀ ▝▘ ▝▘ ▝▀▘ ▝▀▘ ▀▀",
52
- "",
53
- ],
54
- [
55
- " _______________________________________",
56
- "| ▄▄ ▗▖ ▗▄▖ |",
57
- "| ▐▛▀ ▐▌ ▝▜▌ |",
58
- "|▐███ ▐▙██▖▗▟██▖ ▟██▖▐▙██▖ ▟█▙ ▟█▙ ▐▌ |",
59
- "| ▐▌ ▐▛ ▐▌▐▙▄▖▘▐▛ ▘▐▛ ▐▌▐▛ ▜▌▐▛ ▜▌ ▐▌ |",
60
- "| ▐▌ ▐▌ ▐▌ ▀▀█▖▐▌ ▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌ ▐▌ |",
61
- "| ▐▌ ▐▌ ▐▌▐▄▄▟▌▝█▄▄▌▐▌ ▐▌▝█▄█▘▝█▄█▘ ▐▙▄|",
62
- "| ▝▘ ▝▘ ▝▘ ▀▀▀ ▝▀▀ ▝▘ ▝▘ ▝▀▘ ▝▀▘ ▀▀|",
63
- "|_______________________________________|",
64
- "",
65
- ],
66
- [
67
- "",
68
- "▗▄▄▄▖▗▄ ▗▖ ▗▄▖ ▄▄ ▗▖ ▗▖ ▗▄▖ ▗▄▖ ▗▖ ",
69
- "▐▛▀▀▘▐█ ▐▌▗▛▀▜ █▀▀▌▐▌ ▐▌ █▀█ █▀█ ▐▌ ",
70
- "▐▌ ▐▛▌▐▌▐▙ ▐▛ ▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌▐▌ ",
71
- "▐███ ▐▌█▐▌ ▜█▙ ▐▌ ▐███▌▐▌ ▐▌▐▌ ▐▌▐▌ ",
72
- "▐▌ ▐▌▐▟▌ ▜▌▐▙ ▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌▐▌ ",
73
- "▐▌ ▐▌ █▌▐▄▄▟▘ █▄▄▌▐▌ ▐▌ █▄█ █▄█ ▐▙▄▄▖",
74
- "▝▘ ▝▘ ▀▘ ▀▀▘ ▀▀ ▝▘ ▝▘ ▝▀▘ ▝▀▘ ▝▀▀▀▘",
75
- "",
76
- ],
77
- [
78
- "============================================",
79
- "||▗▄▄▄▖▗▄ ▗▖ ▗▄▖ ▄▄ ▗▖ ▗▖ ▗▄▖ ▗▄▖ ▗▖ ||",
80
- "||▐▛▀▀▘▐█ ▐▌▗▛▀▜ █▀▀▌▐▌ ▐▌ █▀█ █▀█ ▐▌ ||",
81
- "||▐▌ ▐▛▌▐▌▐▙ ▐▛ ▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌▐▌ ||",
82
- "||▐███ ▐▌█▐▌ ▜█▙ ▐▌ ▐███▌▐▌ ▐▌▐▌ ▐▌▐▌ ||",
83
- "||▐▌ ▐▌▐▟▌ ▜▌▐▙ ▐▌ ▐▌▐▌ ▐▌▐▌ ▐▌▐▌ ||",
84
- "||▐▌ ▐▌ █▌▐▄▄▟▘ █▄▄▌▐▌ ▐▌ █▄█ █▄█ ▐▙▄▄▖||",
85
- "||▝▘ ▝▘ ▀▘ ▀▀▘ ▀▀ ▝▘ ▝▘ ▝▀▘ ▝▀▘ ▝▀▀▀▘||",
86
- "============================================",
87
- "",
88
- ],
89
- ]
90
- )
91
-
92
- app_name_len = max([len(l) for l in app_name])
93
- version = "v" + get_app_version()
94
- version0 = f"{version:>{app_name_len}}"
95
- version1 = f"{version:^{app_name_len}}"
96
-
97
- app_name = "\n".join(app_name)
98
- version = random.choice([version0, version1])
99
- app_info = "\n" + app_name + version + "\n"
100
- print(app_info)
101
-
102
-
103
- # The end.
@@ -1,3 +0,0 @@
1
- from fnschool import *
2
-
3
- # The end.
@@ -1,3 +0,0 @@
1
- import os
2
- import sys
3
- from fnschool import *
fnschool/canteen/bill.py DELETED
@@ -1,253 +0,0 @@
1
- import os
2
- import sys
3
- import calendar
4
- from fnschool import *
5
-
6
- from fnschool.canteen.spreadsheet.spreadsheet import *
7
- from fnschool.canteen.operator import *
8
- from fnschool.canteen.path import *
9
- from fnschool.canteen.currency import Currency
10
- from fnschool.canteen.consuming import Consuming
11
-
12
-
13
- class Bill:
14
- def __init__(self):
15
- self._spreadsheet = None
16
- self._foods = None
17
- self._time_nodes = None
18
- self._operator_name = None
19
- self._food_classes = None
20
- self._operator = None
21
- self._currency = None
22
- self._consuming = None
23
- self.significant_digits = 2
24
- self._meal_type = None
25
-
26
- pass
27
-
28
- @property
29
- def currency(self):
30
- if not self._currency:
31
- self._currency = Currency().CNY if is_zh_CN else Currency().CNY
32
- return self._currency
33
-
34
- @property
35
- def consuming(self):
36
- if not self._consuming:
37
- self._consuming = Consuming(self)
38
- return self._consuming
39
-
40
- def get_CNY_chars(self, value):
41
- format_word = [
42
- "分",
43
- "角",
44
- "元",
45
- "拾",
46
- "佰",
47
- "仟",
48
- "万",
49
- "拾",
50
- "佰",
51
- "仟",
52
- "亿",
53
- "拾",
54
- "佰",
55
- "仟",
56
- "万",
57
- "拾",
58
- "佰",
59
- "仟",
60
- "兆",
61
- ]
62
-
63
- format_num = [
64
- "零",
65
- "壹",
66
- "贰",
67
- "叁",
68
- "肆",
69
- "伍",
70
- "陆",
71
- "柒",
72
- "捌",
73
- "玖",
74
- ]
75
- if type(value) == str:
76
- if "." in value:
77
- try:
78
- value = float(value)
79
- except:
80
- print_info(_("%s can't change.") % value)
81
- else:
82
- try:
83
- value = int(value)
84
- except:
85
- print_info(_("%s can't change.") % value)
86
-
87
- if type(value) == float:
88
- real_numbers = []
89
- for i in range(len(format_word) - 3, -3, -1):
90
- if value >= 10**i or i < 1:
91
- real_numbers.append(int(round(value / (10**i), 2) % 10))
92
-
93
- elif isinstance(value, int):
94
- real_numbers = []
95
- for i in range(len(format_word), -3, -1):
96
- if value >= 10**i or i < 1:
97
- real_numbers.append(int(round(value / (10**i), 2) % 10))
98
-
99
- else:
100
- print_info(_("%s can't change.") % value)
101
-
102
- zflag = 0
103
- start = len(real_numbers) - 3
104
- CNY_chars = []
105
- for i in range(start, -3, -1):
106
- if 0 < real_numbers[start - i] or len(CNY_chars) == 0:
107
- if zflag:
108
- CNY_chars.append(format_num[0])
109
- zflag = 0
110
- CNY_chars.append(format_num[real_numbers[start - i]])
111
- CNY_chars.append(format_word[i + 2])
112
-
113
- elif 0 == i or (0 == i % 4 and zflag < 3):
114
- CNY_chars.append(format_word[i + 2])
115
- zflag = 0
116
- else:
117
- zflag += 1
118
-
119
- if CNY_chars[-1] not in (
120
- format_word[0],
121
- # format_word[1]
122
- ):
123
- CNY_chars.append("整")
124
-
125
- result = "".join(CNY_chars)
126
- return result
127
-
128
- @property
129
- def spreadsheet(self):
130
- if not self._spreadsheet:
131
- self._spreadsheet = SpreadSheet(self)
132
- return self._spreadsheet
133
-
134
- @property
135
- def foods(self):
136
- if not self._foods:
137
- self._foods = self.spreadsheet.purchasing.read_pfoods()
138
- return self._foods
139
-
140
- @foods.setter
141
- def foods(self, foods):
142
- self._foods = foods
143
-
144
- @property
145
- def meal_type(self):
146
- if not self._meal_type:
147
- if len(self.foods) > 0:
148
- self._meal_type = self.foods[0].meal_type
149
-
150
- return self._meal_type
151
-
152
- @meal_type.setter
153
- def meal_type(self, mtype):
154
- self._meal_type = mtype
155
-
156
- @meal_type.deleter
157
- def meal_type(self):
158
- self._meal_type = None
159
-
160
- @property
161
- def purchaser(self):
162
- purchaser = self.foods[-1].purchaser
163
- return purchaser
164
-
165
- def make_spreadsheets_g(self):
166
- pass
167
-
168
- def make_spreadsheets(self):
169
- self.spreadsheet.update()
170
- pass
171
-
172
- def merge_foodsheets(self):
173
- self.spreadsheet.merge()
174
- pass
175
-
176
- @property
177
- def time_nodes(self):
178
- if not self._time_nodes:
179
- year = self.get_consuming_year()
180
- month = self.get_consuming_month()
181
- self._time_nodes = sorted(
182
- list(
183
- set(
184
- [f.xdate for f in self.foods]
185
- + [
186
- datetime(
187
- year,
188
- month,
189
- calendar.monthrange(year, month)[1],
190
- )
191
- ]
192
- )
193
- )
194
- )
195
-
196
- return self._time_nodes
197
-
198
- @property
199
- def food_class_names(self):
200
- fclass_names = ["蔬菜类"] + list(self.food_classes.keys())
201
- return fclass_names
202
-
203
- @property
204
- def food_classes(self):
205
- if not self._food_classes:
206
- print_info(_("Food classes files:"))
207
- for f in [
208
- self.operator.food_classes_fpath,
209
- food_classes_config0_fpath,
210
- ]:
211
-
212
- print("\t", f)
213
-
214
- with open(self.operator.food_classes_fpath, "rb") as f:
215
- self._food_classes = tomllib.load(f)
216
- print_info(
217
- _(
218
- 'Your food classes were read from "{0}". '
219
- + "It will be used first."
220
- ).format(self.operator.food_classes_fpath)
221
- )
222
-
223
- food_classes0 = None
224
- with open(food_classes_config0_fpath, "rb") as f:
225
- food_classes0 = tomllib.load(f)
226
- print_info(
227
- _('Preset food classes were read from "{0}".').format(
228
- food_classes_config0_fpath
229
- )
230
- )
231
- for fclass, name_likes in food_classes0.items():
232
- if fclass in self._food_classes.keys():
233
- user_name_likes = self._food_classes.get(fclass)
234
- for name_like in name_likes:
235
- if not name_like in user_name_likes:
236
- user_name_likes.append(name_like)
237
- self._food_classes[fclass] = user_name_likes
238
- else:
239
- self._food_classes[fclass] = name_likes
240
-
241
- print_info(_("Ok! I know it. (Press any key to continue)"))
242
- get_input()
243
-
244
- return self._food_classes
245
-
246
- @property
247
- def operator(self):
248
- if not self._operator:
249
- self._operator = Operator(self)
250
- return self._operator
251
-
252
-
253
- # The end.
@@ -1 +0,0 @@
1
- # The end.