fnschool 20250109.80531.837__py3-none-any.whl → 20251011.81638.854__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 (278) hide show
  1. fnschoo1/__init__.py +53 -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/images/favicon.ico +0 -0
  71. fnschoo1/static/js/bootstrap.bundle.min.js +4223 -0
  72. fnschoo1/static/js/bootstrap.min.js +2919 -0
  73. fnschoo1/static/js/fnschool.js +84 -0
  74. fnschoo1/static/js/jquery.min.js +5413 -0
  75. fnschoo1/static/js/jquery.slim.min.js +4331 -0
  76. fnschoo1/static/js/popper.min.js +1306 -0
  77. fnschoo1/static_collected/admin/css/autocomplete.css +377 -0
  78. fnschoo1/static_collected/admin/css/base.css +1224 -0
  79. fnschoo1/static_collected/admin/css/changelists.css +334 -0
  80. fnschoo1/static_collected/admin/css/dark_mode.css +136 -0
  81. fnschoo1/static_collected/admin/css/dashboard.css +30 -0
  82. fnschoo1/static_collected/admin/css/forms.css +546 -0
  83. fnschoo1/static_collected/admin/css/login.css +62 -0
  84. fnschoo1/static_collected/admin/css/nav_sidebar.css +145 -0
  85. fnschoo1/static_collected/admin/css/responsive.css +1043 -0
  86. fnschoo1/static_collected/admin/css/responsive_rtl.css +84 -0
  87. fnschoo1/static_collected/admin/css/rtl.css +311 -0
  88. fnschoo1/static_collected/admin/css/vendor/select2/select2.css +708 -0
  89. fnschoo1/static_collected/admin/css/vendor/select2/select2.min.css +1 -0
  90. fnschoo1/static_collected/admin/css/widgets.css +639 -0
  91. fnschoo1/static_collected/admin/js/SelectBox.js +128 -0
  92. fnschoo1/static_collected/admin/js/SelectFilter2.js +503 -0
  93. fnschoo1/static_collected/admin/js/actions.js +232 -0
  94. fnschoo1/static_collected/admin/js/admin/DateTimeShortcuts.js +496 -0
  95. fnschoo1/static_collected/admin/js/admin/RelatedObjectLookups.js +276 -0
  96. fnschoo1/static_collected/admin/js/autocomplete.js +33 -0
  97. fnschoo1/static_collected/admin/js/calendar.js +251 -0
  98. fnschoo1/static_collected/admin/js/cancel.js +29 -0
  99. fnschoo1/static_collected/admin/js/change_form.js +21 -0
  100. fnschoo1/static_collected/admin/js/collapse.js +43 -0
  101. fnschoo1/static_collected/admin/js/core.js +174 -0
  102. fnschoo1/static_collected/admin/js/filters.js +37 -0
  103. fnschoo1/static_collected/admin/js/inlines.js +439 -0
  104. fnschoo1/static_collected/admin/js/jquery.init.js +8 -0
  105. fnschoo1/static_collected/admin/js/nav_sidebar.js +81 -0
  106. fnschoo1/static_collected/admin/js/popup_response.js +24 -0
  107. fnschoo1/static_collected/admin/js/prepopulate.js +43 -0
  108. fnschoo1/static_collected/admin/js/prepopulate_init.js +20 -0
  109. fnschoo1/static_collected/admin/js/theme.js +57 -0
  110. fnschoo1/static_collected/admin/js/urlify.js +529 -0
  111. fnschoo1/static_collected/admin/js/vendor/jquery/jquery.js +10913 -0
  112. fnschoo1/static_collected/admin/js/vendor/jquery/jquery.min.js +2 -0
  113. fnschoo1/static_collected/admin/js/vendor/select2/i18n/af.js +43 -0
  114. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ar.js +36 -0
  115. fnschoo1/static_collected/admin/js/vendor/select2/i18n/az.js +33 -0
  116. fnschoo1/static_collected/admin/js/vendor/select2/i18n/bg.js +38 -0
  117. fnschoo1/static_collected/admin/js/vendor/select2/i18n/bn.js +39 -0
  118. fnschoo1/static_collected/admin/js/vendor/select2/i18n/bs.js +48 -0
  119. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ca.js +41 -0
  120. fnschoo1/static_collected/admin/js/vendor/select2/i18n/cs.js +62 -0
  121. fnschoo1/static_collected/admin/js/vendor/select2/i18n/da.js +37 -0
  122. fnschoo1/static_collected/admin/js/vendor/select2/i18n/de.js +41 -0
  123. fnschoo1/static_collected/admin/js/vendor/select2/i18n/dsb.js +51 -0
  124. fnschoo1/static_collected/admin/js/vendor/select2/i18n/el.js +43 -0
  125. fnschoo1/static_collected/admin/js/vendor/select2/i18n/en.js +41 -0
  126. fnschoo1/static_collected/admin/js/vendor/select2/i18n/es.js +41 -0
  127. fnschoo1/static_collected/admin/js/vendor/select2/i18n/et.js +38 -0
  128. fnschoo1/static_collected/admin/js/vendor/select2/i18n/eu.js +45 -0
  129. fnschoo1/static_collected/admin/js/vendor/select2/i18n/fa.js +42 -0
  130. fnschoo1/static_collected/admin/js/vendor/select2/i18n/fi.js +42 -0
  131. fnschoo1/static_collected/admin/js/vendor/select2/i18n/fr.js +43 -0
  132. fnschoo1/static_collected/admin/js/vendor/select2/i18n/gl.js +40 -0
  133. fnschoo1/static_collected/admin/js/vendor/select2/i18n/he.js +44 -0
  134. fnschoo1/static_collected/admin/js/vendor/select2/i18n/hi.js +40 -0
  135. fnschoo1/static_collected/admin/js/vendor/select2/i18n/hr.js +45 -0
  136. fnschoo1/static_collected/admin/js/vendor/select2/i18n/hsb.js +51 -0
  137. fnschoo1/static_collected/admin/js/vendor/select2/i18n/hu.js +44 -0
  138. fnschoo1/static_collected/admin/js/vendor/select2/i18n/hy.js +40 -0
  139. fnschoo1/static_collected/admin/js/vendor/select2/i18n/id.js +36 -0
  140. fnschoo1/static_collected/admin/js/vendor/select2/i18n/is.js +37 -0
  141. fnschoo1/static_collected/admin/js/vendor/select2/i18n/it.js +43 -0
  142. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ja.js +40 -0
  143. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ka.js +42 -0
  144. fnschoo1/static_collected/admin/js/vendor/select2/i18n/km.js +38 -0
  145. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ko.js +42 -0
  146. fnschoo1/static_collected/admin/js/vendor/select2/i18n/lt.js +45 -0
  147. fnschoo1/static_collected/admin/js/vendor/select2/i18n/lv.js +41 -0
  148. fnschoo1/static_collected/admin/js/vendor/select2/i18n/mk.js +42 -0
  149. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ms.js +38 -0
  150. fnschoo1/static_collected/admin/js/vendor/select2/i18n/nb.js +38 -0
  151. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ne.js +44 -0
  152. fnschoo1/static_collected/admin/js/vendor/select2/i18n/nl.js +46 -0
  153. fnschoo1/static_collected/admin/js/vendor/select2/i18n/pl.js +43 -0
  154. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ps.js +41 -0
  155. fnschoo1/static_collected/admin/js/vendor/select2/i18n/pt-BR.js +39 -0
  156. fnschoo1/static_collected/admin/js/vendor/select2/i18n/pt.js +41 -0
  157. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ro.js +43 -0
  158. fnschoo1/static_collected/admin/js/vendor/select2/i18n/ru.js +48 -0
  159. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sk.js +61 -0
  160. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sl.js +41 -0
  161. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sq.js +43 -0
  162. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sr-Cyrl.js +48 -0
  163. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sr.js +48 -0
  164. fnschoo1/static_collected/admin/js/vendor/select2/i18n/sv.js +40 -0
  165. fnschoo1/static_collected/admin/js/vendor/select2/i18n/th.js +36 -0
  166. fnschoo1/static_collected/admin/js/vendor/select2/i18n/tk.js +36 -0
  167. fnschoo1/static_collected/admin/js/vendor/select2/i18n/tr.js +40 -0
  168. fnschoo1/static_collected/admin/js/vendor/select2/i18n/uk.js +59 -0
  169. fnschoo1/static_collected/admin/js/vendor/select2/i18n/vi.js +37 -0
  170. fnschoo1/static_collected/admin/js/vendor/select2/i18n/zh-CN.js +36 -0
  171. fnschoo1/static_collected/admin/js/vendor/select2/i18n/zh-TW.js +33 -0
  172. fnschoo1/static_collected/admin/js/vendor/select2/select2.full.js +7115 -0
  173. fnschoo1/static_collected/admin/js/vendor/select2/select2.full.min.js +2 -0
  174. fnschoo1/static_collected/admin/js/vendor/xregexp/xregexp.js +4993 -0
  175. fnschoo1/static_collected/admin/js/vendor/xregexp/xregexp.min.js +160 -0
  176. fnschoo1/static_collected/css/bootstrap.min.css +11776 -0
  177. fnschoo1/static_collected/css/fnschool.css +26 -0
  178. fnschoo1/static_collected/images/favicon.ico +0 -0
  179. fnschoo1/static_collected/js/bootstrap.bundle.min.js +4223 -0
  180. fnschoo1/static_collected/js/bootstrap.min.js +2919 -0
  181. fnschoo1/static_collected/js/fnschool.js +84 -0
  182. fnschoo1/static_collected/js/jquery.min.js +5413 -0
  183. fnschoo1/static_collected/js/jquery.slim.min.js +4331 -0
  184. fnschoo1/static_collected/js/popper.min.js +1306 -0
  185. fnschoo1/templates/base/_css.html +1 -0
  186. fnschoo1/templates/base/_js.html +15 -0
  187. fnschoo1/templates/base/content.html +30 -0
  188. fnschoo1/templates/base/header_content_footer.html +35 -0
  189. fnschoo1/templates/close.html +11 -0
  190. fnschoo1/templates/home.html +51 -0
  191. fnschoo1/templates/includes/_footer.html +39 -0
  192. fnschoo1/templates/includes/_header.html +77 -0
  193. fnschoo1/templates/includes/_navigation.html +0 -0
  194. fnschoo1/templates/includes/_paginator.html +27 -0
  195. fnschoo1/templates/registration/logged_out.html +0 -0
  196. fnschoo1/templates/registration/login.html +0 -0
  197. fnschool-20251011.81638.854.dist-info/METADATA +179 -0
  198. fnschool-20251011.81638.854.dist-info/RECORD +209 -0
  199. {fnschool-20250109.80531.837.dist-info → fnschool-20251011.81638.854.dist-info}/WHEEL +1 -1
  200. fnschool-20251011.81638.854.dist-info/entry_points.txt +2 -0
  201. fnschool-20251011.81638.854.dist-info/top_level.txt +1 -0
  202. fnschool/__init__.py +0 -35
  203. fnschool/__main__.py +0 -16
  204. fnschool/app.py +0 -103
  205. fnschool/canteen/__init__.py +0 -3
  206. fnschool/canteen/__main__.py +0 -3
  207. fnschool/canteen/bill.py +0 -253
  208. fnschool/canteen/canteen.py +0 -1
  209. fnschool/canteen/canteen.toml +0 -61
  210. fnschool/canteen/config.py +0 -10
  211. fnschool/canteen/consuming.py +0 -53
  212. fnschool/canteen/currency.py +0 -17
  213. fnschool/canteen/data/bill.i18n.xlsx +0 -0
  214. fnschool/canteen/data/bill.xlsx +0 -0
  215. fnschool/canteen/data/consuming.xlsx +0 -0
  216. fnschool/canteen/data/purchase_list.xlsx +0 -0
  217. fnschool/canteen/entry.py +0 -40
  218. fnschool/canteen/food.py +0 -206
  219. fnschool/canteen/food_classes.py +0 -33
  220. fnschool/canteen/food_classes.toml +0 -64
  221. fnschool/canteen/operator.py +0 -91
  222. fnschool/canteen/path.py +0 -28
  223. fnschool/canteen/spreadsheet/base.py +0 -213
  224. fnschool/canteen/spreadsheet/consuming.py +0 -310
  225. fnschool/canteen/spreadsheet/consumingsum.py +0 -76
  226. fnschool/canteen/spreadsheet/cover.py +0 -64
  227. fnschool/canteen/spreadsheet/ctspreadsheet.py +0 -351
  228. fnschool/canteen/spreadsheet/food.py +0 -680
  229. fnschool/canteen/spreadsheet/inventory.py +0 -375
  230. fnschool/canteen/spreadsheet/merging.py +0 -340
  231. fnschool/canteen/spreadsheet/preconsuming.py +0 -329
  232. fnschool/canteen/spreadsheet/purchasing.py +0 -885
  233. fnschool/canteen/spreadsheet/purchasingsum.py +0 -110
  234. fnschool/canteen/spreadsheet/spreadsheet.py +0 -363
  235. fnschool/canteen/spreadsheet/translating.py +0 -12
  236. fnschool/canteen/spreadsheet/unwarehousing.py +0 -178
  237. fnschool/canteen/spreadsheet/unwarehousingsum.py +0 -11
  238. fnschool/canteen/spreadsheet/warehousing.py +0 -360
  239. fnschool/canteen/spreadsheet/workbook.py +0 -17
  240. fnschool/canteen/test.py +0 -97
  241. fnschool/config.py +0 -48
  242. fnschool/entry.py +0 -67
  243. fnschool/exam/__init__.py +0 -8
  244. fnschool/exam/data/parental_emails.xlsx +0 -0
  245. fnschool/exam/data/score.xlsx +0 -0
  246. fnschool/exam/email.py +0 -349
  247. fnschool/exam/entry.py +0 -36
  248. fnschool/exam/language.py +0 -19
  249. fnschool/exam/path.py +0 -24
  250. fnschool/exam/score.py +0 -1191
  251. fnschool/exam/subject.py +0 -20
  252. fnschool/exam/teacher.py +0 -54
  253. fnschool/external.py +0 -89
  254. fnschool/games/__init__.py +0 -1
  255. fnschool/games/__main__.py +0 -1
  256. fnschool/games/games.py +0 -1
  257. fnschool/inoutput.py +0 -97
  258. fnschool/language.py +0 -40
  259. fnschool/locales/en_US/LC_MESSAGES/fnschool.mo +0 -0
  260. fnschool/locales/zh_CN/LC_MESSAGES/fnschool.mo +0 -0
  261. fnschool/locales/zh_HK/LC_MESSAGES/fnschool.mo +0 -0
  262. fnschool/locales/zh_SG/LC_MESSAGES/fnschool.mo +0 -0
  263. fnschool/locales/zh_TW/LC_MESSAGES/fnschool.mo +0 -0
  264. fnschool/path.py +0 -45
  265. fnschool/test.py +0 -24
  266. fnschool/user.py +0 -262
  267. fnschool-20250109.80531.837.dist-info/METADATA +0 -342
  268. fnschool-20250109.80531.837.dist-info/RECORD +0 -78
  269. fnschool-20250109.80531.837.dist-info/entry_points.txt +0 -5
  270. fnschool-20250109.80531.837.dist-info/top_level.txt +0 -1
  271. /fnschool/canteen/consume.py → /fnschoo1/canteen/__init__.py +0 -0
  272. /fnschool/canteen/food_recount.toml → /fnschoo1/canteen/migrations/__init__.py +0 -0
  273. {fnschool/canteen/spreadsheet → fnschoo1/canteen/workbook}/__init__.py +0 -0
  274. /fnschool/exam/__main__.py → /fnschoo1/fnschool/templatetags/__init__.py +0 -0
  275. /fnschool/canteen/food_recounts.toml → /fnschoo1/profiles/__init__.py +0 -0
  276. /fnschool/canteen/warehouse.py → /fnschoo1/profiles/migrations/__init__.py +0 -0
  277. /fnschool/canteen/workbook.toml → /fnschoo1/templates/base/_content.html +0 -0
  278. {fnschool-20250109.80531.837.dist-info → fnschool-20251011.81638.854.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.81638.854
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>