fnschool 20251016.81833.820__tar.gz → 20251018.80430.821__tar.gz

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 (115) hide show
  1. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/PKG-INFO +1 -1
  2. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/__init__.py +1 -1
  3. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/models.py +4 -0
  4. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/category/create.html +3 -1
  5. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/category/delete.html +3 -1
  6. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/category/update.html +3 -1
  7. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/consumption/create.html +46 -32
  8. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/ingredient/create.html +6 -2
  9. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/ingredient/create_one.html +3 -1
  10. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/ingredient/delete.html +3 -1
  11. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/ingredient/list.html +3 -1
  12. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/ingredient/update.html +3 -1
  13. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/meal_type/create.html +3 -1
  14. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/meal_type/delete.html +3 -1
  15. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/meal_type/update.html +3 -1
  16. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/views.py +11 -2
  17. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/workbook/generate.py +546 -22
  18. fnschool-20251018.80430.821/src/fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  19. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/templates/profiles/create.html +3 -1
  20. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/templates/profiles/detail.html +3 -1
  21. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/templates/profiles/edit.html +3 -1
  22. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/templates/profiles/log_in.html +3 -1
  23. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/includes/_footer.html +12 -4
  24. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/includes/_paginator.html +3 -1
  25. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/PKG-INFO +1 -1
  26. fnschool-20251016.81833.820/src/fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  27. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/LICENSE +0 -0
  28. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/README.md +0 -0
  29. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/pyproject.toml +0 -0
  30. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/setup.cfg +0 -0
  31. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/__init__.py +0 -0
  32. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/admin.py +0 -0
  33. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/apps.py +0 -0
  34. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/forms.py +0 -0
  35. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0001_initial.py +0 -0
  36. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0002_ingredient_is_disabled.py +0 -0
  37. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0003_consumption_is_disabled_alter_ingredient_is_disabled.py +0 -0
  38. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0004_alter_ingredient_name_category_and_more.py +0 -0
  39. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0005_alter_category_created_at_alter_category_name_and_more.py +0 -0
  40. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0006_category_is_disabled_alter_category_user_and_more.py +0 -0
  41. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0007_alter_consumption_amount_used_and_more.py +0 -0
  42. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0008_category_abbreviation_mealtype.py +0 -0
  43. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0009_alter_category_abbreviation_and_more.py +0 -0
  44. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0010_alter_consumption_options_alter_ingredient_options_and_more.py +0 -0
  45. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0011_category_pin_to_consumptions_top.py +0 -0
  46. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0012_alter_ingredient_storage_date.py +0 -0
  47. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0013_alter_consumption_options_alter_ingredient_options_and_more.py +0 -0
  48. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0014_category_priority.py +0 -0
  49. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0015_alter_category_options_alter_category_priority.py +0 -0
  50. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/0016_consumption_unique_ingredient_date_of_using.py +0 -0
  51. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/migrations/__init__.py +0 -0
  52. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/category/list.html +0 -0
  53. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/close.html +0 -0
  54. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/consumption/_create.html +0 -0
  55. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/ingredient/close.html +0 -0
  56. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/templates/canteen/meal_type/list.html +0 -0
  57. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/tests.py +0 -0
  58. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/urls.py +0 -0
  59. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/canteen/workbook/__init__.py +0 -0
  60. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/fnschool/__init__.py +0 -0
  61. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/fnschool/asgi.py +0 -0
  62. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/fnschool/settings.py +0 -0
  63. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/fnschool/templatetags/__init__.py +0 -0
  64. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/fnschool/templatetags/fnschool_tags.py +0 -0
  65. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/fnschool/urls.py +0 -0
  66. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/fnschool/views.py +0 -0
  67. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/fnschool/wsgi.py +0 -0
  68. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/locale/en/LC_MESSAGES/django.mo +0 -0
  69. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/manage.py +0 -0
  70. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/__init__.py +0 -0
  71. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/admin.py +0 -0
  72. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/apps.py +0 -0
  73. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/forms.py +0 -0
  74. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/migrations/0001_initial.py +0 -0
  75. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/migrations/0002_alter_profile_bio.py +0 -0
  76. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/migrations/0003_alter_profile_options_alter_profile_address_and_more.py +0 -0
  77. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/migrations/0004_profile_gender.py +0 -0
  78. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/migrations/0005_alter_profile_gender.py +0 -0
  79. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/migrations/__init__.py +0 -0
  80. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/models.py +0 -0
  81. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/signals.py +0 -0
  82. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/templates/profiles/log_out.html +0 -0
  83. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/tests.py +0 -0
  84. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/urls.py +0 -0
  85. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/profiles/views.py +0 -0
  86. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/static/css/bootstrap.min.css +0 -0
  87. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/static/css/fnschool.css +0 -0
  88. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/static/images/favicon.ico +0 -0
  89. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/static/js/bootstrap.bundle.min.js +0 -0
  90. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/static/js/bootstrap.min.js +0 -0
  91. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/static/js/fnschool.js +0 -0
  92. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/static/js/jquery.min.js +0 -0
  93. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/static/js/jquery.slim.min.js +0 -0
  94. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/static/js/popper.min.js +0 -0
  95. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/base/_content.html +0 -0
  96. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/base/_css.html +0 -0
  97. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/base/_js.html +0 -0
  98. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/base/content.html +0 -0
  99. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/base/header_content_footer.html +0 -0
  100. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/close.html +0 -0
  101. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/home.html +0 -0
  102. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/includes/_header.html +0 -0
  103. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/includes/_navigation.html +0 -0
  104. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/registration/logged_out.html +0 -0
  105. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschoo1/templates/registration/login.html +0 -0
  106. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/SOURCES.txt +0 -0
  107. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/SOURCES.txt.py +0 -0
  108. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/dependency_links.txt +0 -0
  109. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/dependency_links.txt.py +0 -0
  110. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/entry_points.txt +0 -0
  111. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/entry_points.txt.py +0 -0
  112. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/requires.txt +0 -0
  113. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/requires.txt.py +0 -0
  114. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/top_level.txt +0 -0
  115. {fnschool-20251016.81833.820 → fnschool-20251018.80430.821}/src/fnschool.egg-info/top_level.txt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fnschool
3
- Version: 20251016.81833.820
3
+ Version: 20251018.80430.821
4
4
  Summary: Just some school related scripts, without any ambition.
5
5
  Author-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>, Larry W3i <larryw3i@yeah.net>
6
6
  Maintainer-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>
@@ -6,4 +6,4 @@ import random
6
6
  import sys
7
7
  from pathlib import Path
8
8
 
9
- __version__ = "20251016.81833.820"
9
+ __version__ = "20251018.80430.821"
@@ -113,6 +113,10 @@ class Ingredient(models.Model):
113
113
  default=False, verbose_name=_("Is Ingredient Disabled")
114
114
  )
115
115
 
116
+ def __init__(self, *args, **kwargs):
117
+ super().__init__(*args, **kwargs)
118
+ self.quantity_used = Decimal("0")
119
+
116
120
  @property
117
121
  def unit_price(self):
118
122
  if self.quantity > 0:
@@ -11,7 +11,9 @@
11
11
  {{ form|crispy }}
12
12
  <div class="py-3 fixed-bottom text-end bg-dark">
13
13
  <button type="submit" class="btn btn-primary">{% trans "Save" %}</button>
14
- <button type="button" class="btn btn-danger" onclick="window.close();">{% trans "Cancel" %}</button>
14
+ <button type="button" class="btn btn-danger" onclick="window.close();">
15
+ {% trans "Cancel" %}
16
+ </button>
15
17
  </div>
16
18
  </form>
17
19
  {% endblock %}
@@ -55,7 +55,9 @@
55
55
  style="display: inline">
56
56
  {% csrf_token %}
57
57
  <button type="submit" class="btn btn-danger">{% trans 'Delete' %}</button>
58
- <button type="button" class="btn btn-primary" onclick="window.close();">{% trans "Cancel" %}</button>
58
+ <button type="button" class="btn btn-primary" onclick="window.close();">
59
+ {% trans "Cancel" %}
60
+ </button>
59
61
  </form>
60
62
  </div>
61
63
  <script>
@@ -17,7 +17,9 @@
17
17
  {% csrf_token %} {{ form|crispy }}
18
18
  <div class="py-3 fixed-bottom text-end bg-dark">
19
19
  <button type="submit" class="btn btn-primary">{% trans "Save" %}</button>
20
- <button type="button" class="btn btn-danger" onclick="window.close();">{% trans "Cancel" %}</button>
20
+ <button type="button" class="btn btn-danger" onclick="window.close();">
21
+ {% trans "Cancel" %}
22
+ </button>
21
23
  </div>
22
24
  </form>
23
25
  {% endblock %}
@@ -9,10 +9,14 @@
9
9
  <div class="container">
10
10
  <div class="row justify-content-end">
11
11
  <button class="btn btn-outline-success col-md-1 col-lg-1 col-2 mx-2"
12
- onclick="list_consumptions_by_week();">{% trans "Consume by Week" %}</button>
12
+ onclick="list_consumptions_by_week();">
13
+ {% trans "Consume by Week" %}
14
+ </button>
13
15
 
14
16
  <button class="btn btn-outline-success col-md-1 col-lg-1 col-2"
15
- onclick="list_consumptions_rapidly();">{% trans "Rapid Consumption" %}</button>
17
+ onclick="list_consumptions_rapidly();">
18
+ {% trans "Rapid Consumption" %}
19
+ </button>
16
20
 
17
21
  <a class="btn btn-success col-md-1 col-lg-1 col-2 mx-2"
18
22
  target="canteen_list_categories"
@@ -65,6 +69,9 @@
65
69
  data-ingredient_id="{{ ingredient.id }}"
66
70
  data-ingredient_name="{{ ingredient.name }}"
67
71
  data-ingredient_quantity="{{ ingredient.quantity }}"
72
+ data-ingredient_quantity_used="{{ ingredient.quantity_used }}"
73
+ data-ingredient_remaining_quantity="{{ ingredient.remaining_quantity }}"
74
+ data-ingredient_consuming_quantity="{{ ingredient.consuming_quantity }}"
68
75
  data-ingredient_total_price="{{ ingredient.total_price }}"
69
76
  data-ingredient_meal_type="{{ ingredient.meal_type }}"
70
77
  data-ingredient_quantity_unit_name="{{ ingredient.quantity_unit_name }}"
@@ -73,16 +80,15 @@
73
80
  <td title="{% blocktrans with storage_date=ingredient.storage_date %}Storaged on {{ storage_date }} .{% endblocktrans %}"
74
81
  class="">
75
82
  <div class='ingredient-progress'
76
- style="width:{% widthratio ingredient.remaining_quantity ingredient.quantity 100 %}%"></div>
83
+ style="width:{% widthratio ingredient.remaining_quantity ingredient.quantity 100 %}%">
84
+ </div>
77
85
  {{ ingredient.name }}
78
86
  {% if ingredient.meal_type != meal_type_name_0 %}
79
87
  <br />
80
88
  ({{ ingredient.meal_type }})
81
89
  {% endif %}
82
90
  </td>
83
- <td name="remaining_{{ ingredient.id }}">
84
- {{ ingredient.quantity }}-{{ ingredient.consuming_quantity }}={{ ingredient.remaining_quantity }}
85
- </td>
91
+ <td name="remaining_{{ ingredient.id }}"></td>
86
92
  </tr>
87
93
  {% empty %}
88
94
  <tr>{% trans "No ingredient found." %}</tr>
@@ -91,13 +97,21 @@
91
97
  </table>
92
98
  </div>
93
99
  <div class="">
94
- <button id="body_mp0_trigger"
95
- onclick="set_body_to_mp0();"
96
- class="btn btn-submit-consumptions btn-success float-end">||</button>
97
100
  <button onclick="generate_spreadsheet();"
98
- class="btn btn-submit-consumptions btn-success float-end">{% trans "Generate Spreadsheet" %}</button>
101
+ class="btn btn-submit-consumptions btn-success float-end">
102
+ {% trans "Generate Spreadsheet" %}
103
+ </button>
99
104
  <select class="workbook-month-select form-select float-end mx-2"
100
105
  style="width:118px"></select>
106
+ <div class="form-check float-end mx-1 pt-2">
107
+ <label class="form-check-label" for="include_food_sheets">
108
+ {% trans 'Ingredient Sheets are also included.' %}
109
+ </label>
110
+ <input class="form-check-input"
111
+ type="checkbox"
112
+ value=""
113
+ id="include_food_sheets">
114
+ </div>
101
115
  </div>
102
116
  {{ ingredient_ids|json_script:'ingredient_ids' }}
103
117
  {{ months|json_script:'months' }}
@@ -110,31 +124,24 @@
110
124
  var months = JSON.parse($("#months").text())
111
125
  var meal_types = JSON.parse($("#meal_types").text())
112
126
  var date_range = JSON.parse($("#date_range").text())
113
-
114
127
  var storage_date_start = $('#storage_date_start').text().replace(new RegExp('"', 'g'), "")
115
128
 
116
129
  var dont_submit = false
117
130
 
118
131
  $(document).ready(function() {
119
- var body_mp0_cookie = get_cookie("body_mp0")
120
- if (body_mp0_cookie == "" || body_mp0_cookie == null) {
121
- $("#body_mp0_trigger").html("&lt;")
122
- } else {
123
- $("#body_mp0_trigger").html("&gt;")
124
- }
125
- });
132
+ $(ingredient_ids).each(function(index, ingredient_id) {
133
+ var td = $(`td[name='remaining_${ingredient_id}']`)
134
+ var tr = $(td.closest("tr"))
135
+ var ingredient_quantity = parseInt(tr.data("ingredient_quantity")) || 0
136
+ var ingredient_quantity_used = parseInt(tr.data("ingredient_quantity_used")) || 0
137
+ var ingredient_consuming_quantity = parseInt(tr.data("ingredient_consuming_quantity")) || 0
138
+ var ingredient_remaining_quantity = parseInt(tr.data("ingredient_remaining_quantity")) || 0
139
+ td.text(
140
+ `${ingredient_quantity-ingredient_quantity_used}-${ingredient_consuming_quantity-ingredient_quantity_used}=${ingredient_remaining_quantity}`
141
+ )
142
+ });
126
143
 
127
- function set_body_to_mp0() {
128
- if ($('body').hasClass("m-0")) {
129
- set_simple_cookie("body_mp0", "")
130
- $("#body_mp0_trigger").html("&gt;")
131
- $('body').removeClass("m-0 p-0");
132
- } else {
133
- set_simple_cookie("body_mp0", "1")
134
- $('#body_mp0_trigger').html("&lt;")
135
- $('body').addClass("m-0 p-0");
136
- }
137
- }
144
+ });
138
145
 
139
146
  function list_consumptions_rapidly() {
140
147
  query = {
@@ -239,8 +246,10 @@
239
246
 
240
247
  function amount_used_input_blur(element) {
241
248
  element = $(element)
242
- var ingredient_quantity = element.closest('tr').data("ingredient_quantity")
243
- ingredient_quantity = parseInt(ingredient_quantity) || 0
249
+ var ingredient_quantity = parseInt(element.closest('tr').data("ingredient_quantity")) || 0
250
+ var ingredient_quantity_used = parseInt(element.closest("tr").data("ingredient_quantity_used")) || 0
251
+ ingredient_quantity = ingredient_quantity - ingredient_quantity_used
252
+
244
253
  var $consumption_form = element.closest("form")
245
254
  var amount_used = parseInt($consumption_form.data("amount_used")) || 0
246
255
  var new_amount_used = parseInt($.trim(element.val())) || 0
@@ -386,8 +395,13 @@
386
395
  });
387
396
 
388
397
  function generate_spreadsheet() {
398
+ var include_food_sheets = $("#include_food_sheets").is(':checked')
389
399
  var month = $(".workbook-month-select").val()
390
- window.open(`/canteen/generate_spreadsheet/${month}`, 'generate_spreadsheet');
400
+ if (include_food_sheets) {
401
+ window.open(`/canteen/generate_spreadsheet/${month}?include_food_sheets=true`, 'generate_spreadsheet');
402
+ } else {
403
+ window.open(`/canteen/generate_spreadsheet/${month}`, 'generate_spreadsheet');
404
+ }
391
405
  }
392
406
 
393
407
  function set_consumptions_table_size() {
@@ -12,8 +12,12 @@
12
12
  <form method="post" enctype="multipart/form-data">
13
13
  {% csrf_token %} {{ form|crispy }}
14
14
  <div class="py-3 fixed-bottom text-end bg-dark">
15
- <button type="submit button" class="btn btn-outline-primary">{% trans "Upload" %}</button>
16
- <button type="button" class="btn btn-danger" onclick="window.close();">{% trans "Cancel" %}</button>
15
+ <button type="submit button" class="btn btn-outline-primary">
16
+ {% trans "Upload" %}
17
+ </button>
18
+ <button type="button" class="btn btn-danger" onclick="window.close();">
19
+ {% trans "Cancel" %}
20
+ </button>
17
21
  </div>
18
22
  </form>
19
23
  {% endblock %}
@@ -11,7 +11,9 @@
11
11
  {{ form|crispy }}
12
12
  <div class="py-3 fixed-bottom text-end bg-dark">
13
13
  <button type="submit" class="btn btn-primary">{% trans "Save" %}</button>
14
- <button type="button" class="btn btn-danger" onclick="window.close();">{% trans "Cancel" %}</button>
14
+ <button type="button" class="btn btn-danger" onclick="window.close();">
15
+ {% trans "Cancel" %}
16
+ </button>
15
17
  </div>
16
18
  </form>
17
19
  {% endblock %}
@@ -32,7 +32,9 @@
32
32
  style="display: inline">
33
33
  {% csrf_token %}
34
34
  <button type="submit" class="btn btn-danger">{% trans 'Delete' %}</button>
35
- <button type="button" class="btn btn-primary" onclick="window.close();">{% trans "Cancel" %}</button>
35
+ <button type="button" class="btn btn-primary" onclick="window.close();">
36
+ {% trans "Cancel" %}
37
+ </button>
36
38
  </form>
37
39
  </div>
38
40
  <script>
@@ -63,7 +63,9 @@
63
63
  class="form-check-input"
64
64
  id="ingredient_free_nark_{{ ingredient.id }}" />
65
65
  <label class="form-check-label"
66
- for="ingredient_free_nark_{{ ingredient.id }}">{{ forloop.counter }}</label>
66
+ for="ingredient_free_nark_{{ ingredient.id }}">
67
+ {{ forloop.counter }}
68
+ </label>
67
69
  </div>
68
70
  </th>
69
71
  <td>{{ ingredient.storage_date }}</td>
@@ -17,7 +17,9 @@
17
17
  {% csrf_token %} {{ form|crispy }}
18
18
  <div class="py-3 fixed-bottom text-end bg-dark">
19
19
  <button type="submit" class="btn btn-primary">{% trans "Save" %}</button>
20
- <button type="button" class="btn btn-danger" onclick="window.close();">{% trans "Cancel" %}</button>
20
+ <button type="button" class="btn btn-danger" onclick="window.close();">
21
+ {% trans "Cancel" %}
22
+ </button>
21
23
  </div>
22
24
  </form>
23
25
  {% endblock %}
@@ -11,7 +11,9 @@
11
11
  {{ form|crispy }}
12
12
  <div class="py-3 fixed-bottom text-end bg-dark">
13
13
  <button type="submit" class="btn btn-primary">{% trans "Save" %}</button>
14
- <button type="button" class="btn btn-danger" onclick="window.close();">{% trans "Cancel" %}</button>
14
+ <button type="button" class="btn btn-danger" onclick="window.close();">
15
+ {% trans "Cancel" %}
16
+ </button>
15
17
  </div>
16
18
  </form>
17
19
  {% endblock %}
@@ -47,7 +47,9 @@
47
47
  style="display: inline">
48
48
  {% csrf_token %}
49
49
  <button type="submit" class="btn btn-danger">{% trans 'Delete' %}</button>
50
- <button type="button" class="btn btn-primary" onclick="window.close();">{% trans "Cancel" %}</button>
50
+ <button type="button" class="btn btn-primary" onclick="window.close();">
51
+ {% trans "Cancel" %}
52
+ </button>
51
53
  </form>
52
54
  </div>
53
55
  <script>
@@ -17,7 +17,9 @@
17
17
  {% csrf_token %} {{ form|crispy }}
18
18
  <div class="py-3 fixed-bottom text-end bg-dark">
19
19
  <button type="submit" class="btn btn-primary">{% trans "Save" %}</button>
20
- <button type="button" class="btn btn-danger" onclick="window.close();">{% trans "Cancel" %}</button>
20
+ <button type="button" class="btn btn-danger" onclick="window.close();">
21
+ {% trans "Cancel" %}
22
+ </button>
21
23
  </div>
22
24
  </form>
23
25
  {% endblock %}
@@ -248,8 +248,7 @@ def create_consumptions(request, ingredient_id=None):
248
248
  ) == "true" or not by_week
249
249
 
250
250
  queries = (
251
- Q(storage_date__gte=date_start)
252
- & Q(storage_date__lte=date_end)
251
+ Q(storage_date__lte=date_end)
253
252
  & Q(user=request.user)
254
253
  & Q(is_disabled=False)
255
254
  & Q(is_ignorable=False)
@@ -275,6 +274,13 @@ def create_consumptions(request, ingredient_id=None):
275
274
  {"ingredients": ingredients, "date_range": date_range},
276
275
  )
277
276
 
277
+ ingredients = [
278
+ i
279
+ for i in ingredients
280
+ if i.get_remaining_quantity(date_end) > 0
281
+ or i.storage_date >= date_start
282
+ ]
283
+
278
284
  ingredients_pinned = []
279
285
  ingredients_unpinned = []
280
286
  categories_top = Category.objects.filter(
@@ -291,6 +297,9 @@ def create_consumptions(request, ingredient_id=None):
291
297
 
292
298
  ingredients = ingredients_pinned + ingredients_unpinned
293
299
 
300
+ for ingredient in ingredients:
301
+ ingredient.quantity_used = ingredient.get_consuming_quantity(date_start)
302
+
294
303
  date_range_cp = date_range
295
304
  date_range_cp = [d.strftime("%Y-%m-%d") for d in date_range]
296
305
  meal_types = list(set([i.meal_type.name for i in ingredients]))