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 @@
1
+ <style></style>
@@ -0,0 +1,15 @@
1
+ <script>
2
+ function localize_content(element) {
3
+ $(element).each(function(index, _element) {
4
+ var _element = $(_element)
5
+ const text = _element.text().replace(/\s+/g, '');
6
+ if (text == "True") {
7
+ _element.text("{% trans 'Yes' %}")
8
+ } else if (text == "False") {
9
+ _element.text("{% trans 'No' %}")
10
+ } else if (text == "None") {
11
+ _element.text('{% trans "None" %}')
12
+ }
13
+ });
14
+ }
15
+ </script>
@@ -0,0 +1,30 @@
1
+ <!-- templates/base.html -->
2
+ <!DOCTYPE html>
3
+ {% load i18n static %}
4
+ {% load crispy_forms_tags %}
5
+ {% load fnschool_tags %}
6
+ <html>
7
+ <head>
8
+ <title>
9
+ {% block title %}
10
+ {% trans "FNSCHOOL" %}
11
+ {% endblock %}
12
+ </title>
13
+ <link rel="icon"
14
+ href="{% static 'images/favicon.ico' %}"
15
+ type="image/x-icon" />
16
+ <link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet" />
17
+ <link href="{% static 'css/fnschool.css' %}" rel="stylesheet" />
18
+ <script src="{% static 'js/bootstrap.bundle.min.js' %}"></script>
19
+ <script src="{% static 'js/jquery.slim.min.js' %}"></script>
20
+ <script src="{% static 'js/popper.min.js' %}"></script>
21
+ <script src="{% static 'js/fnschool.js' %}"></script>
22
+ {% include 'base/_js.html' %}
23
+ {% include 'base/_css.html' %}
24
+ </head>
25
+ <body>
26
+ <main class="container" data-bs-scroll="true" data-bs-backdrop="false">
27
+ {% block content %}{% endblock %}
28
+ </main>
29
+ </body>
30
+ </html>
@@ -0,0 +1,35 @@
1
+ <!DOCTYPE html>
2
+ {% load i18n static %}
3
+ {% load crispy_forms_tags %}
4
+ {% load fnschool_tags %}
5
+ <html>
6
+ <head>
7
+ <title>
8
+ {% block title %}
9
+ {% trans "FNSCHOOL" %}
10
+ {% endblock %}
11
+ </title>
12
+ <link rel="icon"
13
+ href="{% static 'images/favicon.ico' %}"
14
+ type="image/x-icon" />
15
+ <link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet" />
16
+ <link href="{% static 'css/fnschool.css' %}" rel="stylesheet" />
17
+ <script src="{% static 'js/bootstrap.bundle.min.js' %}"></script>
18
+ <script src="{% static 'js/jquery.min.js' %}"></script>
19
+ <script src="{% static 'js/popper.min.js' %}"></script>
20
+ <script src="{% static 'js/fnschool.js' %}"></script>
21
+ {% include 'base/_js.html' %}
22
+ {% include 'base/_css.html' %}
23
+ </head>
24
+ <body>
25
+ <header class="fixed-top">
26
+ {% include 'includes/_header.html' %}
27
+ </header>
28
+ <main class="container" data-bs-scroll="true" data-bs-backdrop="false">
29
+ {% block content %}{% endblock %}
30
+ </main>
31
+ <footer class="py-3 bg-dark fixed-bottom">
32
+ {% include 'includes/_footer.html' %}
33
+ </footer>
34
+ </body>
35
+ </html>
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <body>
4
+ <script>
5
+ if (window.opener && !window.opener.closed) {
6
+ window.opener.location.reload();
7
+ }
8
+ window.close();
9
+ </script>
10
+ </body>
11
+ </html>
@@ -0,0 +1,51 @@
1
+ {% extends "base/header_content_footer.html" %}
2
+ {% load static %}
3
+ {% block title %}
4
+ {% trans "FNSCHOOL" %}
5
+ {% endblock %}
6
+ {% block content %}
7
+ <script>
8
+ // $('body').addClass( 'aurora');
9
+ </script>
10
+ <style>
11
+ .aurora {
12
+ width: 100%;
13
+ height: 100vh;
14
+ position: relative;
15
+ overflow: hidden;
16
+ }
17
+
18
+ .aurora::before {
19
+ content: "";
20
+ position: absolute;
21
+ top: -50%;
22
+ left: -50%;
23
+ width: 200%;
24
+ height: 200%;
25
+ background: linear-gradient(to right, #00ff00, #0000ff, #ff0000, #ff00ff, #00ff00);
26
+ animation: aurora-animation 50s linear infinite;
27
+ }
28
+
29
+ .aurora::after {
30
+ content: "";
31
+ position: absolute;
32
+ top: -50%;
33
+ left: -50%;
34
+ width: 200%;
35
+ height: 200%;
36
+ background: linear-gradient(to right, #00ff00, #0000ff, #ff0000, #ff00ff, #00ff00);
37
+ opacity: 0.1;
38
+ animation: aurora-animation 30s linear infinite;
39
+ }
40
+
41
+ @keyframes aurora-animation {
42
+ 0% {
43
+ transform: rotate(0deg);
44
+ }
45
+
46
+ 100% {
47
+ transform: rotate(360deg);
48
+ }
49
+ }
50
+ </style>
51
+ {% endblock %}
@@ -0,0 +1,39 @@
1
+ {% load i18n %}
2
+ {% load static %}
3
+ <div class="container">
4
+ <p class="m-0 text-center text-white">{% trans "Copyleft &copy; FNSCHOOL" %} {% now "Y" %}</p>
5
+ </div>
6
+ <div class="container ">
7
+ <p class="m-0 text-start text-white">
8
+ <form action="{% url 'set_language' %}" method="post">
9
+ {% csrf_token %}
10
+ <input name="next" type="hidden" value="{{ redirect_to }}">
11
+ <select name="language" onchange="this.form.submit()">
12
+ {% get_current_language as CURRENT_LANGUAGE %}
13
+ {% get_available_languages as LANGUAGES %}
14
+ {% for code, name in LANGUAGES %}
15
+ <option value="{{ code }}"
16
+ {% if code == CURRENT_LANGUAGE %}selected{% endif %}>{{ name }}</option>
17
+ {% endfor %}
18
+ </select>
19
+ </form>
20
+ </p>
21
+ </div>
22
+ <div id="cookieConsent" class="cookie-container">
23
+ <div class="container">
24
+ <div class="row align-items-center">
25
+ <div class="col-md-8">
26
+ <p class="mb-0">
27
+ {% blocktrans %}
28
+ We use cookies to ensure that you have the best website experience. By continuing to use this website, you agree to our cookie policy.
29
+ {% endblocktrans %}
30
+ </p>
31
+ </div>
32
+ <div class="col-md-4 text-md-end">
33
+ <button id="rejectCookies" class="btn btn-outline-secondary me-2">{% trans 'Cancel' %}</button>
34
+ <button id="acceptCookies" class="btn btn-primary">{% trans 'Accept All' %}</button>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ <div class="progress-footer"></div>
@@ -0,0 +1,77 @@
1
+ {% load static %}
2
+ {% load i18n %}
3
+ <nav class="navbar navbar-expand-lg navbar-dark bg-dark text-white fixed-top">
4
+ <div class="container">
5
+ <a class="navbar-brand" href="{% url 'home' %}">
6
+ <img src="{% static '/images/favicon.ico' %}"
7
+ alt="Logo"
8
+ width="30"
9
+ height="24"
10
+ class="d-inline-block align-text-top">
11
+ </a>
12
+ <button class="navbar-toggler"
13
+ type="button"
14
+ data-bs-toggle="collapse"
15
+ data-bs-target="#navbarSupportedContent"
16
+ aria-controls="navbarSupportedContent"
17
+ aria-expanded="false"
18
+ aria-label="Toggle navigation">
19
+ <span class="navbar-toggler-icon"></span>
20
+ </button>
21
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
22
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
23
+ <li class="nav-item">
24
+ <a class="nav-link active" aria-current="page" href="{% url 'home' %}">{% trans "Home" %}</a>
25
+ </li>
26
+ <li class="nav-item">
27
+ <a class="nav-link" href="{% url 'canteen:list_ingredients' %}">{% trans "Canteen" %}</a>
28
+ </li>
29
+ <li class="nav-item">
30
+ <a class="nav-link" href="#">{% trans "Bell" %}</a>
31
+ </li>
32
+ <li class="nav-item dropdown">
33
+ <a class="nav-link dropdown-toggle"
34
+ href="#"
35
+ id="navbarDropdown"
36
+ role="button"
37
+ data-bs-toggle="dropdown"
38
+ aria-expanded="false">{% trans "Develop" %}</a>
39
+ <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
40
+ <li>
41
+ <a class="dropdown-item" href="#"></a>
42
+ </li>
43
+ <li>
44
+ <a class="dropdown-item" href="#"></a>
45
+ </li>
46
+ <li>
47
+ <hr class="dropdown-divider">
48
+ </li>
49
+ <li>
50
+ <a class="dropdown-item" href="#"></a>
51
+ </li>
52
+ </ul>
53
+ </li>
54
+ <li class="nav-item">
55
+ <a class="nav-link" href="#">{% trans "About" %}</a>
56
+ </li>
57
+ </ul>
58
+ <div class="d-flex">
59
+ {% if request.user.is_authenticated %}
60
+ <ul class="nav-item">
61
+ <a class="nav-link" href="{% url 'profiles:update' %}">{{ request.user.username }}</a>
62
+ </ul>
63
+ <ul class="nav-item">
64
+ <a class="nav-link" href="{% url 'profiles:log_out' %}">{% trans "Log out" %}</a>
65
+ </ul>
66
+ {% else %}
67
+ <ul class="nav-item">
68
+ <a class="nav-link" href="{% url 'profiles:log_in' %}">{% trans "Login" %}</a>
69
+ </ul>
70
+ <ul class="nav-item">
71
+ <a class="nav-link" href="{% url 'profiles:create' %}">{% trans "Sign Up" %}</a>
72
+ </ul>
73
+ {% endif %}
74
+ </div>
75
+ </div>
76
+ </div>
77
+ </nav>
File without changes
@@ -0,0 +1,27 @@
1
+ {% load crispy_forms_tags %}
2
+ {% load fnschool_tags %}
3
+ <div class="pagination d-flex justify-content-center">
4
+ <span class="step-links d-flex justify-content-between align-items-center">
5
+ {% if page_obj.has_previous %}
6
+ <a onclick="set_page(1);" class="pe-2">&lt;&lt;</a>
7
+ <a onclick="set_page({{ page_obj.previous_page_number }});" class="pe-2">&lt;</a>
8
+ {% endif %}
9
+ <span class="current">{{ page_obj.number }}/{{ page_obj.paginator.num_pages }}</span>
10
+ <form method="get" action="" class="form-inline d-flex" name="page_size">
11
+ <input type="number"
12
+ name="page_size"
13
+ id="page_size"
14
+ class="form-control"
15
+ min="1"
16
+ onkeydown="if(event.keyCode==13){set_page_size();return false;}"
17
+ value="{{ page_obj.paginator.per_page }}"
18
+ style="width: 80px;
19
+ margin: 0 10px" />
20
+ <button type="button" onclick="set_page_size();" class="btn btn-primary">&#128640;</button>
21
+ </form>
22
+ {% if page_obj.has_next %}
23
+ <a onclick="set_page({{ page_obj.next_page_number }});" class="ps-2">&gt;</a>
24
+ <a onclick="set_page({{ page_obj.paginator.num_pages }});" class="ps-2">&gt;&gt;</a>
25
+ {% endif %}
26
+ </span>
27
+ </div>
File without changes
File without changes
@@ -0,0 +1,179 @@
1
+ Metadata-Version: 2.4
2
+ Name: fnschool
3
+ Version: 20251011.80531.840
4
+ Summary: Just some school related scripts, without any ambition.
5
+ Author-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>, Larry W3i <larryw3i@yeah.net>
6
+ Maintainer-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>
7
+ Project-URL: Homepage, https://github.com/larryw3i/funingschool
8
+ Project-URL: Documentation, https://github.com/larryw3i/funingschool/docs
9
+ Project-URL: Repository, https://github.com/larryw3i/funingschool.git
10
+ Project-URL: Issues, https://github.com/larryw3i/funingschool/issues
11
+ Project-URL: Changelog, https://github.com/larryw3i/funingschool/CHANGELOG.md
12
+ Classifier: Topic :: Education
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Requires-Python: >=3.9
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: django
18
+ Requires-Dist: pandas
19
+ Requires-Dist: matplotlib
20
+ Requires-Dist: numpy
21
+ Requires-Dist: openpyxl
22
+ Requires-Dist: platformdirs
23
+ Requires-Dist: tomlkit
24
+ Requires-Dist: django-crispy-forms
25
+ Requires-Dist: crispy-bootstrap5
26
+ Provides-Extra: gui
27
+ Provides-Extra: cli
28
+ Dynamic: license-file
29
+
30
+
31
+ <hr/>
32
+ <div align="center">
33
+ <pre>
34
+ _____ _ _ ____ ____ _ _ ___ ___ _
35
+ | ___| \ | / ___| / ___| | | |/ _ \ / _ \| |
36
+ | |_ | \| \___ \| | | |_| | | | | | | | |
37
+ | _| | |\ |___) | |___| _ | |_| | |_| | |___
38
+ |_| |_| \_|____/ \____|_| |_|\___/ \___/|_____|
39
+ </pre>
40
+ </div>
41
+ <p align="center">
42
+ funingschool
43
+ </p>
44
+ <h4 align="center">
45
+ NO Just some simple scripts for warehousing and consuming.
46
+ </h4>
47
+ <hr/>
48
+ <p align="center">
49
+ <a href="https://gitee.com/larryw3i/funingschool/blob/master/Documentation/README/zh_CN.md">简体中文</a> •
50
+ <a href="https://github.com/larryw3i/funingschool/blob/master/README.md">English</a>
51
+ </p>
52
+
53
+ <p align="center">
54
+ <a href="#key-features">
55
+ Key Features
56
+ </a>
57
+
58
+ <a href="#how-to-use">
59
+ How To Use
60
+ </a>
61
+
62
+ <a href="#credits">
63
+ Credits
64
+ </a>
65
+
66
+ <a href="#support">
67
+ Support
68
+ </a>
69
+
70
+ <a href="#license">
71
+ License
72
+ </a>
73
+ </p>
74
+
75
+ ![Screenshot](https://raw.githubusercontent.com/larryw3i/funingschool/master/Documentation/images/9432e132-f8cd-11ee-8ee6-f37309efa64b.png)
76
+
77
+ <h2 id="key-features">
78
+ Key Features
79
+ </h2>
80
+
81
+ <h3>
82
+ warehousing and consuming
83
+ </h3>
84
+
85
+ * Read food spreadsheets automatically.
86
+ * The simplest and most straightforward `consuming sheets`.
87
+ * Update sheets (warehousing, consuming, summing, etc) automatically.
88
+ * Reduce calculation errors.
89
+ * Effectively eliminate unit prices containing infinite decimals.
90
+ * Merge food sheets between spreadsheets.
91
+ * Easy to use.
92
+
93
+ <h3>
94
+ Test statistics
95
+ </h3>
96
+
97
+ * An easy-to-use "test score entry form".
98
+ * Clear test results at a glance, converting table data into Intuitive images.
99
+ * Display comments.
100
+ * Effectively assist testers, especially teachers and students.
101
+
102
+ <h2 id="how-to-use">
103
+ How To Use
104
+ </h2>
105
+
106
+ <h3>
107
+ Install Python3
108
+ </h3>
109
+ <p>
110
+
111
+ on `Ubuntu`:
112
+
113
+ ```bash
114
+ sudo apt-get install python3 python3-pip python3-tk
115
+ ```
116
+ For `Windows 10` and `Windows 11`, you can install Python3 from https://www.python.org/getit/ . (`fnschool` requires Python 3.12 or later)
117
+ </p>
118
+
119
+ <h3>
120
+ Install fnschool and run it
121
+ </h3>
122
+
123
+ <p>
124
+
125
+ Run the command line application:
126
+ * `Ubuntu`: `Ctrl+Alt+T`.
127
+ * `Windows`: "`Win+R, powershell, Enter`".
128
+
129
+ Enter the following commands:
130
+
131
+ </p>
132
+
133
+ ```bash
134
+ # install fnschool.
135
+ pip install -U fnschool
136
+
137
+ # Making bill of "canteen" module.
138
+ fnschool-cli canteen mk_bill
139
+ # Merging food sheets of "canteen" module.
140
+ fnschool-cli canteen merge_foodsheets
141
+
142
+ # run `test statistics` module.
143
+ fnschool-cli exam enter
144
+ ```
145
+
146
+ >Note: Read the information it prompts carefully, which is the key to using it well.
147
+
148
+ <h2 id="credits">
149
+ Credits
150
+ </h2>
151
+ <p>
152
+ This software uses the following open source packages:
153
+ <ul>
154
+ <li><a href="https://github.com/tartley/colorama">colorama</a></li>
155
+ <li><a href="https://pandas.pydata.org/">pandas</a></li>
156
+ <li><a href="https://numpy.org/">numpy</a></li>
157
+ <li><a href="https://openpyxl.readthedocs.io/">openpyxl</a></li>
158
+ <li><a href="http://github.com/ActiveState/appdirs">appdirs</a></li>
159
+ <li><a href="https://matplotlib.org/">matplotlib</a></li>
160
+ <li><a href="https://github.com/Miksus/red-mail">redmail</a></li>
161
+ </ul>
162
+ </p>
163
+
164
+ <h2 id="support">
165
+ Support
166
+ </h2>
167
+ <h3>
168
+ Buy me a `coffee`:
169
+ </h3>
170
+
171
+ ![Buy me a "coffee".](https://raw.githubusercontent.com/larryw3i/funingschool/master/Documentation/images/9237879a-f8d5-11ee-8411-23057db0a773.jpeg)
172
+
173
+ <h2 id="license">
174
+ License
175
+ </h2>
176
+
177
+ <a href="https://github.com/larryw3i/funingschool/blob/master/LICENSE">
178
+ GNU LESSER GENERAL PUBLIC LICENSE Version 3
179
+ </a>