Second updates
This commit is contained in:
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
478
.idea/workspace.xml
generated
478
.idea/workspace.xml
generated
@@ -1,7 +1,25 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="a0020f0b-7bf3-4cde-a27d-39657ebd0286" name="Default Changelist" comment="" />
|
<list default="true" id="a0020f0b-7bf3-4cde-a27d-39657ebd0286" name="Default Changelist" comment="">
|
||||||
|
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/templates/events/event_images_form.html" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/templates/events/event_images_list.html" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/templates/events/example.html" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/templatetags/__init__.py" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/templatetags/form_filters.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/accounts/forms.py" beforeDir="false" afterPath="$PROJECT_DIR$/accounts/forms.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/events/forms.py" beforeDir="false" afterPath="$PROJECT_DIR$/events/forms.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/events/models.py" beforeDir="false" afterPath="$PROJECT_DIR$/events/models.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/events/urls.py" beforeDir="false" afterPath="$PROJECT_DIR$/events/urls.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/events/views.py" beforeDir="false" afterPath="$PROJECT_DIR$/events/views.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/master_data/forms.py" beforeDir="false" afterPath="$PROJECT_DIR$/master_data/forms.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/templates/accounts/login.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/accounts/login.html" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/templates/accounts/user_form.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/accounts/user_form.html" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/templates/events/event_form.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/events/event_form.html" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/templates/master_data/event_type_form.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/master_data/event_type_form.html" afterDir="false" />
|
||||||
|
</list>
|
||||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@@ -11,54 +29,22 @@
|
|||||||
<component name="FileEditorManager">
|
<component name="FileEditorManager">
|
||||||
<leaf>
|
<leaf>
|
||||||
<file pinned="false" current-in-tab="false">
|
<file pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/accounts/models.py">
|
<entry file="file://$PROJECT_DIR$/accounts/views.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="260">
|
<state relative-caret-position="460">
|
||||||
<caret line="13" lean-forward="true" selection-start-line="13" selection-end-line="13" />
|
<caret line="41" lean-forward="true" selection-start-line="41" selection-end-line="41" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#51#0" expanded="true" />
|
<element signature="e#0#35#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file pinned="false" current-in-tab="false">
|
<file pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/templates/accounts/login.html">
|
<entry file="file://$PROJECT_DIR$/eventify/urls.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="-103" />
|
<state relative-caret-position="140">
|
||||||
</provider>
|
<caret line="7" column="28" selection-start-line="7" selection-start-column="28" selection-end-line="7" selection-end-column="28" />
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/templates/accounts/user_form.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/templates/accounts/user_list.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/templates/accounts/user_confirm_delete.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="true">
|
|
||||||
<entry file="file://$PROJECT_DIR$/templates/base.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/master_data/models.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/master_data/views.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-183">
|
|
||||||
<caret line="6" column="47" lean-forward="true" selection-start-line="6" selection-start-column="47" selection-end-line="6" selection-end-column="47" />
|
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#32#0" expanded="true" />
|
<element signature="e#0#32#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
@@ -67,29 +53,123 @@
|
|||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file pinned="false" current-in-tab="false">
|
<file pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/eventify/settings.py">
|
<entry file="file://$PROJECT_DIR$/templates/accounts/login.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="-1463">
|
<state relative-caret-position="240">
|
||||||
|
<caret line="12" column="26" lean-forward="true" selection-end-line="41" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/templatetags/__init__.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file pinned="false" current-in-tab="true">
|
||||||
|
<entry file="file://$PROJECT_DIR$/templatetags/form_filters.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="100">
|
||||||
|
<caret line="5" column="42" selection-start-line="5" selection-start-column="42" selection-end-line="5" selection-end-column="42" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/events/views.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="200">
|
||||||
|
<caret line="86" column="44" lean-forward="true" selection-start-line="86" selection-start-column="44" selection-end-line="86" selection-end-column="44" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#9#0" expanded="true" />
|
<element signature="e#0#32#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file pinned="false" current-in-tab="false">
|
<file pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/master_data/migrations/0001_initial.py">
|
<entry file="file://$PROJECT_DIR$/events/urls.py">
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="180">
|
||||||
|
<caret line="9" column="83" selection-start-line="9" selection-start-column="83" selection-end-line="9" selection-end-column="83" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#28#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/templates/events/event_images_form.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="240">
|
||||||
|
<caret line="34" column="14" lean-forward="true" selection-start-line="34" selection-start-column="14" selection-end-line="34" selection-end-column="14" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/events/forms.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="213">
|
||||||
|
<caret line="35" column="15" selection-start-line="35" selection-start-column="15" selection-end-line="35" selection-end-column="15" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#24#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/templates/events/event_images_list.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="200">
|
||||||
|
<caret line="10" lean-forward="true" selection-start-line="10" selection-end-line="10" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
</leaf>
|
</leaf>
|
||||||
</component>
|
</component>
|
||||||
|
<component name="FileTemplateManagerImpl">
|
||||||
|
<option name="RECENT_TEMPLATES">
|
||||||
|
<list>
|
||||||
|
<option value="HTML File" />
|
||||||
|
<option value="Python Script" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="Git.Settings">
|
||||||
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
|
</component>
|
||||||
|
<component name="IdeDocumentHistory">
|
||||||
|
<option name="CHANGED_PATHS">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$/templates/events/example.html" />
|
||||||
|
<option value="$PROJECT_DIR$/events/models.py" />
|
||||||
|
<option value="$PROJECT_DIR$/templates/events/event_form.html" />
|
||||||
|
<option value="$PROJECT_DIR$/master_data/forms.py" />
|
||||||
|
<option value="$PROJECT_DIR$/templates/master_data/event_type_form.html" />
|
||||||
|
<option value="$PROJECT_DIR$/templates/accounts/user_form.html" />
|
||||||
|
<option value="$PROJECT_DIR$/accounts/forms.py" />
|
||||||
|
<option value="$PROJECT_DIR$/templates/events/event_images_form.html" />
|
||||||
|
<option value="$PROJECT_DIR$/templates/events/event_images_list.html" />
|
||||||
|
<option value="$PROJECT_DIR$/events/urls.py" />
|
||||||
|
<option value="$PROJECT_DIR$/events/views.py" />
|
||||||
|
<option value="$PROJECT_DIR$/events/forms.py" />
|
||||||
|
<option value="$PROJECT_DIR$/templates/accounts/login.html" />
|
||||||
|
<option value="$PROJECT_DIR$/templatetags/__init__.py" />
|
||||||
|
<option value="$PROJECT_DIR$/templatetags/form_filters.py" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
<component name="ProjectFrameBounds" extendedState="6">
|
<component name="ProjectFrameBounds" extendedState="6">
|
||||||
<option name="x" value="-85" />
|
<option name="x" value="-85" />
|
||||||
<option name="y" value="14" />
|
<option name="y" value="14" />
|
||||||
<option name="width" value="1386" />
|
<option name="width" value="1386" />
|
||||||
<option name="height" value="788" />
|
<option name="height" value="788" />
|
||||||
</component>
|
</component>
|
||||||
|
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||||
<component name="ProjectView">
|
<component name="ProjectView">
|
||||||
<navigator proportions="" version="1">
|
<navigator proportions="" version="1">
|
||||||
<foldersAlwaysOnTop value="true" />
|
<foldersAlwaysOnTop value="true" />
|
||||||
@@ -106,12 +186,7 @@
|
|||||||
<path>
|
<path>
|
||||||
<item name="eventify_prod" type="b2602c69:ProjectViewProjectNode" />
|
<item name="eventify_prod" type="b2602c69:ProjectViewProjectNode" />
|
||||||
<item name="eventify_prod" type="462c0819:PsiDirectoryNode" />
|
<item name="eventify_prod" type="462c0819:PsiDirectoryNode" />
|
||||||
<item name="master_data" type="462c0819:PsiDirectoryNode" />
|
<item name="templatetags" type="462c0819:PsiDirectoryNode" />
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="eventify_prod" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="eventify_prod" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="templates" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
</path>
|
||||||
</expand>
|
</expand>
|
||||||
<select />
|
<select />
|
||||||
@@ -120,6 +195,8 @@
|
|||||||
</panes>
|
</panes>
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent">
|
<component name="PropertiesComponent">
|
||||||
|
<property name="DefaultHtmlFileTemplate" value="HTML File" />
|
||||||
|
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
|
||||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||||
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||||
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
|
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
|
||||||
@@ -172,25 +249,24 @@
|
|||||||
<option name="number" value="Default" />
|
<option name="number" value="Default" />
|
||||||
<option name="presentableId" value="Default" />
|
<option name="presentableId" value="Default" />
|
||||||
<updated>1764194364815</updated>
|
<updated>1764194364815</updated>
|
||||||
<workItem from="1764194366807" duration="1596000" />
|
<workItem from="1764194366807" duration="9826000" />
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="TimeTrackingManager">
|
<component name="TimeTrackingManager">
|
||||||
<option name="totallyTimeSpent" value="1596000" />
|
<option name="totallyTimeSpent" value="9826000" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ToolWindowManager">
|
<component name="ToolWindowManager">
|
||||||
<frame x="-8" y="-8" width="1382" height="744" extended-state="7" />
|
<frame x="-8" y="-8" width="1382" height="744" extended-state="6" />
|
||||||
<editor active="true" />
|
|
||||||
<layout>
|
<layout>
|
||||||
<window_info id="Favorites" side_tool="true" />
|
<window_info id="Favorites" side_tool="true" />
|
||||||
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24962178" />
|
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.24962178" />
|
||||||
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
||||||
<window_info anchor="bottom" id="Docker" show_stripe_button="false" />
|
<window_info anchor="bottom" id="Docker" show_stripe_button="false" />
|
||||||
<window_info anchor="bottom" id="Database Changes" />
|
<window_info anchor="bottom" id="Database Changes" />
|
||||||
<window_info anchor="bottom" id="Version Control" />
|
<window_info anchor="bottom" id="Version Control" />
|
||||||
<window_info anchor="bottom" id="Python Console" />
|
<window_info anchor="bottom" id="Python Console" />
|
||||||
<window_info anchor="bottom" id="Terminal" visible="true" weight="0.32840723" />
|
<window_info active="true" anchor="bottom" id="Terminal" visible="true" weight="0.354201" />
|
||||||
<window_info anchor="bottom" id="Event Log" side_tool="true" />
|
<window_info anchor="bottom" id="Event Log" side_tool="true" />
|
||||||
<window_info anchor="bottom" id="Message" order="0" />
|
<window_info anchor="bottom" id="Message" order="0" />
|
||||||
<window_info anchor="bottom" id="Find" order="1" weight="0.32840723" />
|
<window_info anchor="bottom" id="Find" order="1" weight="0.32840723" />
|
||||||
@@ -210,38 +286,9 @@
|
|||||||
<option name="version" value="1" />
|
<option name="version" value="1" />
|
||||||
</component>
|
</component>
|
||||||
<component name="editorHistoryManager">
|
<component name="editorHistoryManager">
|
||||||
<entry file="file://$PROJECT_DIR$/accounts/views.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="660">
|
|
||||||
<caret line="33" column="25" selection-start-line="33" selection-start-column="25" selection-end-line="33" selection-end-column="25" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#0#35#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/events/views.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="197">
|
|
||||||
<caret line="16" column="51" selection-start-line="16" selection-start-column="51" selection-end-line="16" selection-end-column="51" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#0#32#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/.env.example">
|
<entry file="file://$PROJECT_DIR$/.env.example">
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/events/models.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state>
|
|
||||||
<folding>
|
|
||||||
<element signature="e#0#28#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/requirements.txt">
|
<entry file="file://$PROJECT_DIR$/requirements.txt">
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
@@ -263,36 +310,9 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/eventify/settings.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-1463">
|
|
||||||
<folding>
|
|
||||||
<element signature="e#0#9#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/master_data/migrations/0001_initial.py">
|
<entry file="file://$PROJECT_DIR$/master_data/migrations/0001_initial.py">
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/accounts/models.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="260">
|
|
||||||
<caret line="13" lean-forward="true" selection-start-line="13" selection-end-line="13" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#0#51#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/templates/accounts/login.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-103" />
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/templates/accounts/user_form.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/templates/accounts/user_list.html">
|
<entry file="file://$PROJECT_DIR$/templates/accounts/user_list.html">
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
@@ -302,18 +322,244 @@
|
|||||||
<entry file="file://$PROJECT_DIR$/master_data/models.py">
|
<entry file="file://$PROJECT_DIR$/master_data/models.py">
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/templates/base.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="220">
|
||||||
|
<caret line="11" column="67" selection-start-line="11" selection-start-column="67" selection-end-line="11" selection-end-column="67" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/accounts/urls.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state>
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#28#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/master_data/urls.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="160">
|
||||||
|
<caret line="8" column="36" selection-start-line="8" selection-start-column="35" selection-end-line="8" selection-end-column="36" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#28#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://C:/Python38/Lib/site-packages/django/views/generic/base.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-1774">
|
||||||
|
<caret line="35" column="6" selection-start-line="35" selection-start-column="6" selection-end-line="35" selection-end-column="6" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://C:/Python38/Lib/site-packages/django/views/generic/detail.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="118">
|
||||||
|
<caret line="103" column="41" selection-start-line="103" selection-start-column="41" selection-end-line="103" selection-end-column="41" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://C:/Python38/Lib/site-packages/django/views/generic/__init__.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="40">
|
||||||
|
<caret line="10" column="42" selection-start-line="10" selection-start-column="42" selection-end-line="10" selection-end-column="42" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/templates/events/example.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="180">
|
||||||
|
<caret line="40" lean-forward="true" selection-start-line="40" selection-end-line="40" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/templates/events/event_list.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
|
</entry>
|
||||||
|
<entry file="file://C:/Python38/Lib/site-packages/django/views/generic/list.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="241">
|
||||||
|
<caret line="90" selection-start-line="90" selection-end-line="90" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/master_data/forms.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="220">
|
||||||
|
<caret line="11" lean-forward="true" selection-start-line="11" selection-end-line="11" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#24#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/master_data/views.py">
|
<entry file="file://$PROJECT_DIR$/master_data/views.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="-183">
|
<state relative-caret-position="420">
|
||||||
<caret line="6" column="47" lean-forward="true" selection-start-line="6" selection-start-column="47" selection-end-line="6" selection-end-column="47" />
|
<caret line="24" column="21" lean-forward="true" selection-start-line="24" selection-start-column="21" selection-end-line="24" selection-end-column="21" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#32#0" expanded="true" />
|
<element signature="e#0#32#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/templates/base.html">
|
<entry file="file://$PROJECT_DIR$/templates/events/event_form.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="160">
|
||||||
|
<caret line="8" column="35" lean-forward="true" selection-end-line="23" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://C:/Python38/Lib/site-packages/django/contrib/auth/forms.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-67">
|
||||||
|
<caret line="93" column="6" selection-start-line="93" selection-start-column="6" selection-end-line="93" selection-end-column="6" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/templates/master_data/event_type_form.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state>
|
||||||
|
<caret line="3" column="66" lean-forward="true" selection-start-line="3" selection-start-column="66" selection-end-line="3" selection-end-column="66" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/templates/accounts/user_form.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="180">
|
||||||
|
<caret line="9" column="34" lean-forward="true" selection-end-line="23" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/accounts/forms.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="320">
|
||||||
|
<caret line="28" selection-start-line="28" selection-end-line="28" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#24#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/accounts/models.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="20">
|
||||||
|
<caret line="1" column="28" lean-forward="true" selection-start-line="1" selection-start-column="28" selection-end-line="1" selection-end-column="28" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#51#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/eventify/settings.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state>
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#9#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/events/models.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="80">
|
||||||
|
<caret line="37" selection-start-line="37" selection-end-line="43" selection-end-column="36" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#28#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/templates/events/event_images_form.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="240">
|
||||||
|
<caret line="34" column="14" lean-forward="true" selection-start-line="34" selection-start-column="14" selection-end-line="34" selection-end-column="14" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/templates/events/event_images_list.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="200">
|
||||||
|
<caret line="10" lean-forward="true" selection-start-line="10" selection-end-line="10" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/events/urls.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="180">
|
||||||
|
<caret line="9" column="83" selection-start-line="9" selection-start-column="83" selection-end-line="9" selection-end-column="83" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#28#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/events/views.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="200">
|
||||||
|
<caret line="86" column="44" lean-forward="true" selection-start-line="86" selection-start-column="44" selection-end-line="86" selection-end-column="44" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#32#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/events/forms.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="213">
|
||||||
|
<caret line="35" column="15" selection-start-line="35" selection-start-column="15" selection-end-line="35" selection-end-column="15" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#24#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/accounts/views.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="460">
|
||||||
|
<caret line="41" lean-forward="true" selection-start-line="41" selection-end-line="41" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#35#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://C:/Python38/Lib/site-packages/django/contrib/auth/views.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="61">
|
||||||
|
<caret line="66" column="6" selection-start-line="66" selection-start-column="6" selection-end-line="66" selection-end-column="6" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/eventify/urls.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="140">
|
||||||
|
<caret line="7" column="28" selection-start-line="7" selection-start-column="28" selection-end-line="7" selection-end-column="28" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#32#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/templates/accounts/login.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="240">
|
||||||
|
<caret line="12" column="26" lean-forward="true" selection-end-line="41" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/templatetags/__init__.py">
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/templatetags/form_filters.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="100">
|
||||||
|
<caret line="5" column="42" selection-start-line="5" selection-start-column="42" selection-end-line="5" selection-end-column="42" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
@@ -1,12 +1,32 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth.forms import UserCreationForm
|
from django.contrib.auth.forms import UserCreationForm
|
||||||
|
from django.contrib.auth.forms import AuthenticationForm
|
||||||
from .models import User
|
from .models import User
|
||||||
|
|
||||||
|
|
||||||
class UserForm(UserCreationForm):
|
class UserForm(UserCreationForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = ('username','email','phone_number','role','is_staff','is_customer','is_user')
|
fields = ('username', 'email', 'phone_number', 'role',
|
||||||
|
'is_staff', 'is_customer', 'is_user')
|
||||||
|
|
||||||
|
widgets = {
|
||||||
|
'username': forms.TextInput(attrs={'class': 'form-control form-control-sm'}),
|
||||||
|
'email': forms.EmailInput(attrs={'class': 'form-control form-control-sm'}),
|
||||||
|
'phone_number': forms.TextInput(attrs={'class': 'form-control form-control-sm'}),
|
||||||
|
'role': forms.Select(attrs={'class': 'form-select form-select-sm'}),
|
||||||
|
'is_staff': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
|
||||||
|
'is_customer': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
|
||||||
|
'is_user': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
# Apply bootstrap small styling to password fields
|
||||||
|
self.fields['password1'].widget.attrs.update({'class': 'form-control form-control-sm'})
|
||||||
|
self.fields['password2'].widget.attrs.update({'class': 'form-control form-control-sm'})
|
||||||
|
|
||||||
|
|
||||||
from django.contrib.auth.forms import AuthenticationForm
|
|
||||||
class LoginForm(AuthenticationForm):
|
class LoginForm(AuthenticationForm):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ INSTALLED_APPS = [
|
|||||||
'master_data',
|
'master_data',
|
||||||
'events',
|
'events',
|
||||||
'accounts',
|
'accounts',
|
||||||
|
'templatetags'
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|||||||
@@ -1,11 +1,53 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from .models import Event
|
from .models import Event
|
||||||
|
from .models import EventImages
|
||||||
|
|
||||||
|
|
||||||
class EventForm(forms.ModelForm):
|
class EventForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Event
|
model = Event
|
||||||
exclude = ['created_date']
|
fields = "__all__"
|
||||||
widgets = {
|
widgets = {
|
||||||
'start_date': forms.DateInput(attrs={'type':'date'}),
|
'name': forms.TextInput(attrs={'class': 'form-control'}),
|
||||||
'end_date': forms.DateInput(attrs={'type':'date'}),
|
'description': forms.Textarea(attrs={'class': 'form-control'}),
|
||||||
|
'start_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
|
||||||
|
'end_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
|
||||||
|
'latitude': forms.NumberInput(attrs={'class': 'form-control'}),
|
||||||
|
'longitude': forms.NumberInput(attrs={'class': 'form-control'}),
|
||||||
|
'pincode': forms.TextInput(attrs={'class': 'form-control'}),
|
||||||
|
'district': forms.TextInput(attrs={'class': 'form-control'}),
|
||||||
|
'state': forms.TextInput(attrs={'class': 'form-control'}),
|
||||||
|
'place': forms.TextInput(attrs={'class': 'form-control'}),
|
||||||
|
'outside_event_url': forms.URLInput(attrs={'class': 'form-control'}),
|
||||||
|
'event_status': forms.Select(attrs={'class': 'form-select'}),
|
||||||
|
'event_type': forms.Select(attrs={'class': 'form-select'}),
|
||||||
|
'cancelled_reason': forms.Textarea(attrs={'class': 'form-control'}),
|
||||||
|
'is_bookable': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
|
||||||
|
'is_eventify_event': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class MultipleFileInput(forms.ClearableFileInput):
|
||||||
|
allow_multiple_selected = True
|
||||||
|
|
||||||
|
|
||||||
|
class EventImagesForm(forms.ModelForm):
|
||||||
|
event_image = forms.ImageField(
|
||||||
|
widget=MultipleFileInput(
|
||||||
|
attrs={
|
||||||
|
'multiple': True,
|
||||||
|
'class': 'form-control',
|
||||||
|
}
|
||||||
|
),
|
||||||
|
label="Upload Images"
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = EventImages
|
||||||
|
fields = ['event_image', 'is_primary']
|
||||||
|
widgets = {
|
||||||
|
'is_primary': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
|
||||||
|
}
|
||||||
|
labels = {
|
||||||
|
'is_primary': 'Set as Primary Image (If only one uploaded)',
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from master_data.models import EventType
|
from master_data.models import EventType
|
||||||
|
|
||||||
|
|
||||||
class Event(models.Model):
|
class Event(models.Model):
|
||||||
created_date = models.DateField(auto_now_add=True)
|
created_date = models.DateField(auto_now_add=True)
|
||||||
name = models.CharField(max_length=200)
|
name = models.CharField(max_length=200)
|
||||||
@@ -33,6 +34,7 @@ class Event(models.Model):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.name} ({self.start_date})"
|
return f"{self.name} ({self.start_date})"
|
||||||
|
|
||||||
|
|
||||||
class EventImages(models.Model):
|
class EventImages(models.Model):
|
||||||
event = models.ForeignKey(Event, on_delete=models.CASCADE)
|
event = models.ForeignKey(Event, on_delete=models.CASCADE)
|
||||||
is_primary = models.BooleanField(default=False)
|
is_primary = models.BooleanField(default=False)
|
||||||
|
|||||||
@@ -8,4 +8,9 @@ urlpatterns = [
|
|||||||
path('add/', views.EventCreateView.as_view(), name='event_add'),
|
path('add/', views.EventCreateView.as_view(), name='event_add'),
|
||||||
path('<int:pk>/edit/', views.EventUpdateView.as_view(), name='event_edit'),
|
path('<int:pk>/edit/', views.EventUpdateView.as_view(), name='event_edit'),
|
||||||
path('<int:pk>/delete/', views.EventDeleteView.as_view(), name='event_delete'),
|
path('<int:pk>/delete/', views.EventDeleteView.as_view(), name='event_delete'),
|
||||||
|
|
||||||
|
path('<int:pk>/images/', views.event_images, name='event_images'),
|
||||||
|
path('<int:pk>/images/add/', views.add_event_images, name='add_event_images'),
|
||||||
|
path('<int:pk>/images/<int:img_id>/delete/', views.delete_event_image, name='delete_event_image'),
|
||||||
|
path('<int:pk>/images/<int:img_id>/primary/', views.set_primary_image, name='set_primary_image'),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
from django.views import generic
|
from django.views import generic
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from .models import Event
|
from .models import Event
|
||||||
|
from .models import EventImages
|
||||||
from .forms import EventForm
|
from .forms import EventForm
|
||||||
|
from .forms import EventImagesForm
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
from django.contrib import messages
|
||||||
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
|
from django.contrib.auth.decorators import login_required
|
||||||
|
|
||||||
|
|
||||||
class EventListView(LoginRequiredMixin, generic.ListView):
|
class EventListView(LoginRequiredMixin, generic.ListView):
|
||||||
model = Event
|
model = Event
|
||||||
@@ -10,19 +16,76 @@ class EventListView(LoginRequiredMixin, generic.ListView):
|
|||||||
template_name = 'events/event_list.html'
|
template_name = 'events/event_list.html'
|
||||||
paginate_by = 10
|
paginate_by = 10
|
||||||
|
|
||||||
|
|
||||||
class EventCreateView(LoginRequiredMixin, generic.CreateView):
|
class EventCreateView(LoginRequiredMixin, generic.CreateView):
|
||||||
model = Event
|
model = Event
|
||||||
form_class = EventForm
|
form_class = EventForm
|
||||||
template_name = 'events/event_form.html'
|
template_name = 'events/event_form.html'
|
||||||
success_url = reverse_lazy('events:event_list')
|
success_url = reverse_lazy('events:event_list')
|
||||||
|
|
||||||
|
|
||||||
class EventUpdateView(LoginRequiredMixin, generic.UpdateView):
|
class EventUpdateView(LoginRequiredMixin, generic.UpdateView):
|
||||||
model = Event
|
model = Event
|
||||||
form_class = EventForm
|
form_class = EventForm
|
||||||
template_name = 'events/event_form.html'
|
template_name = 'events/event_form.html'
|
||||||
success_url = reverse_lazy('events:event_list')
|
success_url = reverse_lazy('events:event_list')
|
||||||
|
|
||||||
|
|
||||||
class EventDeleteView(LoginRequiredMixin, generic.DeleteView):
|
class EventDeleteView(LoginRequiredMixin, generic.DeleteView):
|
||||||
model = Event
|
model = Event
|
||||||
template_name = 'events/event_confirm_delete.html'
|
template_name = 'events/event_confirm_delete.html'
|
||||||
success_url = reverse_lazy('events:event_list')
|
success_url = reverse_lazy('events:event_list')
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def add_event_images(request, pk):
|
||||||
|
event = get_object_or_404(Event, pk=pk)
|
||||||
|
|
||||||
|
if request.method == "POST":
|
||||||
|
form = EventImagesForm(request.POST, request.FILES)
|
||||||
|
|
||||||
|
images = request.FILES.getlist('event_image')
|
||||||
|
|
||||||
|
if images:
|
||||||
|
for img in images:
|
||||||
|
EventImages.objects.create(event=event, event_image=img)
|
||||||
|
|
||||||
|
messages.success(request, "Images uploaded successfully!")
|
||||||
|
return redirect("events:event_images", pk=event.pk)
|
||||||
|
|
||||||
|
else:
|
||||||
|
form = EventImagesForm()
|
||||||
|
|
||||||
|
return render(request, "events/event_images_form.html", {
|
||||||
|
"form": form,
|
||||||
|
"event": event,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def event_images(request, pk):
|
||||||
|
event = get_object_or_404(Event, pk=pk)
|
||||||
|
images = EventImages.objects.filter(event=event)
|
||||||
|
return render(request, "events/event_images_list.html", {
|
||||||
|
"event": event,
|
||||||
|
"images": images,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def set_primary_image(request, pk, img_id):
|
||||||
|
event = get_object_or_404(Event, pk=pk)
|
||||||
|
|
||||||
|
EventImages.objects.filter(event=event, is_primary=True).update(is_primary=False)
|
||||||
|
EventImages.objects.filter(pk=img_id).update(is_primary=True)
|
||||||
|
|
||||||
|
messages.success(request, "Primary image updated!")
|
||||||
|
return redirect("events:event_images", pk=pk)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def delete_event_image(request, pk, img_id):
|
||||||
|
image = get_object_or_404(EventImages, pk=img_id)
|
||||||
|
image.delete()
|
||||||
|
messages.success(request, "Image deleted!")
|
||||||
|
return redirect("events:event_images", pk=pk)
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from .models import EventType
|
from .models import EventType
|
||||||
|
|
||||||
|
|
||||||
class EventTypeForm(forms.ModelForm):
|
class EventTypeForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EventType
|
model = EventType
|
||||||
fields = ['event_type']
|
fields = ['event_type']
|
||||||
|
widgets = {
|
||||||
|
'event_type': forms.TextInput(attrs={'class': 'form-control'}),
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,17 +1,54 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row justify-content-center">
|
|
||||||
|
<div class="row justify-content-center mt-5">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="card p-4 shadow-sm">
|
|
||||||
<h3 class="text-center mb-3">Login</h3>
|
<div class="card shadow-sm border-0 rounded-3">
|
||||||
|
<div class="card-body p-4">
|
||||||
|
|
||||||
|
<h3 class="text-center mb-4">Login</h3>
|
||||||
|
|
||||||
<form method="post" novalidate>
|
<form method="post" novalidate>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.non_field_errors }}
|
{{ form.non_field_errors }}
|
||||||
<div class="mb-3">{{ form.username.label_tag }}{{ form.username }}</div>
|
|
||||||
<div class="mb-3">{{ form.password.label_tag }}{{ form.password }}</div>
|
<!-- Username field -->
|
||||||
<button class="btn btn-primary w-100">Login</button>
|
<div class="mb-3">
|
||||||
</form>
|
<label class="form-label">{{ form.username.label }}</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
name="{{ form.username.name }}"
|
||||||
|
value="{{ form.username.value|default:'' }}"
|
||||||
|
class="form-control"
|
||||||
|
placeholder="Enter username"
|
||||||
|
required
|
||||||
|
>
|
||||||
|
{{ form.username.errors }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Password field -->
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="form-label">{{ form.password.label }}</label>
|
||||||
|
<input
|
||||||
|
type="password"
|
||||||
|
name="{{ form.password.name }}"
|
||||||
|
class="form-control"
|
||||||
|
placeholder="Enter password"
|
||||||
|
required
|
||||||
|
>
|
||||||
|
{{ form.password.errors }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-primary w-100">
|
||||||
|
Login
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,9 +1,23 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h3>{% if object %}Edit{% else %}Add{% endif %} User</h3>
|
<div class="container mt-4">
|
||||||
<form method="post">{% csrf_token %}
|
<h3>{% if object %}Edit{% else %}Add{% endif %} Event</h3>
|
||||||
{{ form.as_p }}
|
|
||||||
|
<form method="post" novalidate>
|
||||||
|
{% csrf_token %}
|
||||||
|
|
||||||
|
{% for field in form %}
|
||||||
|
<div class="mb-3">
|
||||||
|
{{ field.label_tag }}
|
||||||
|
{{ field }}
|
||||||
|
{% for error in field.errors %}
|
||||||
|
<div class="text-danger">{{ error }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
<button class="btn btn-primary">Save</button>
|
<button class="btn btn-primary">Save</button>
|
||||||
<a class="btn btn-secondary" href="{% url 'accounts:user_list' %}">Cancel</a>
|
<a class="btn btn-secondary" href="{% url 'accounts:user_list' %}">Cancel</a>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,9 +1,23 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h3>{% if object %}Edit{% else %}Add{% endif %} Event</h3>
|
<div class="container mt-4">
|
||||||
<form method="post">{% csrf_token %}
|
<h3>{% if object %}Edit{% else %}Add{% endif %} Event</h3>
|
||||||
{{ form.as_p }}
|
|
||||||
|
<form method="post" novalidate>
|
||||||
|
{% csrf_token %}
|
||||||
|
|
||||||
|
{% for field in form %}
|
||||||
|
<div class="mb-3">
|
||||||
|
{{ field.label_tag }}
|
||||||
|
{{ field }}
|
||||||
|
{% for error in field.errors %}
|
||||||
|
<div class="text-danger">{{ error }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
<button class="btn btn-primary">Save</button>
|
<button class="btn btn-primary">Save</button>
|
||||||
<a class="btn btn-secondary" href="{% url 'events:event_list' %}">Cancel</a>
|
<a class="btn btn-secondary" href="{% url 'events:event_list' %}">Cancel</a>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
38
templates/events/event_images_form.html
Normal file
38
templates/events/event_images_form.html
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="container mt-4">
|
||||||
|
<div class="card shadow-sm">
|
||||||
|
<div class="card-header bg-primary text-white">
|
||||||
|
<h4 class="mb-0">Upload Images for: {{ event.title }}</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
<form method="post" enctype="multipart/form-data">
|
||||||
|
{% csrf_token %}
|
||||||
|
|
||||||
|
<!-- Image field -->
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="form-label fw-bold">{{ form.event_image.label }}</label>
|
||||||
|
{{ form.event_image }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Primary flag (optional) -->
|
||||||
|
<div class="form-check mb-3">
|
||||||
|
{{ form.is_primary }}
|
||||||
|
<label class="form-check-label">{{ form.is_primary.label }}</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button class="btn btn-primary">
|
||||||
|
<i class="bi bi-upload"></i> Upload
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<a href="{% url 'events:event_images' event.pk %}" class="btn btn-secondary">
|
||||||
|
Back
|
||||||
|
</a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
52
templates/events/event_images_list.html
Normal file
52
templates/events/event_images_list.html
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="container mt-4">
|
||||||
|
|
||||||
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||||
|
<h3>Images for {{ event.title }}</h3>
|
||||||
|
<a class="btn btn-success" href="{% url 'events:add_event_images' event.pk %}">
|
||||||
|
<i class="bi bi-plus-circle"></i> Add More Images
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row g-4">
|
||||||
|
{% for img in images %}
|
||||||
|
<div class="col-md-3 col-sm-6">
|
||||||
|
<div class="card shadow-sm h-100">
|
||||||
|
|
||||||
|
<img src="{{ img.event_image.url }}" class="card-img-top rounded-top" alt="Event Image">
|
||||||
|
|
||||||
|
<div class="card-body text-center">
|
||||||
|
|
||||||
|
{% if img.is_primary %}
|
||||||
|
<h6><span class="badge bg-primary">Primary Image</span></h6>
|
||||||
|
{% else %}
|
||||||
|
<a href="{% url 'events:set_primary_image' event.pk img.pk %}"
|
||||||
|
class="btn btn-outline-primary btn-sm w-100 mb-2">
|
||||||
|
Set as Primary
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<a href="{% url 'events:delete_event_image' event.pk img.pk %}"
|
||||||
|
class="btn btn-danger btn-sm w-100">
|
||||||
|
Delete Image
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% empty %}
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="alert alert-info text-center">
|
||||||
|
No images uploaded yet for this event.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href="{% url 'events:event_list' %}" class="btn btn-secondary mt-4">
|
||||||
|
Back to Events
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
42
templates/events/example.html
Normal file
42
templates/events/example.html
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% load static %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class="container mt-4">
|
||||||
|
|
||||||
|
<h3 class="mb-4">
|
||||||
|
{% if object %}Edit{% else %}Add{% endif %} Event
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<form method="post" novalidate>
|
||||||
|
{% csrf_token %}
|
||||||
|
|
||||||
|
{% for field in form %}
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="{{ field.id_for_label }}" class="form-label">
|
||||||
|
{{ field.label }}
|
||||||
|
</label>
|
||||||
|
|
||||||
|
{{ field.as_widget|add_class:"form-control" }}
|
||||||
|
|
||||||
|
{% if field.help_text %}
|
||||||
|
<div class="form-text">{{ field.help_text }}</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if field.errors %}
|
||||||
|
<div class="text-danger small">
|
||||||
|
{{ field.errors }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<button class="btn btn-primary">Save</button>
|
||||||
|
<a class="btn btn-secondary" href="{% url 'events:event_list' %}">
|
||||||
|
Cancel
|
||||||
|
</a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -1,9 +1,24 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h3>{% if object %}Edit{% else %}Add{% endif %} Category</h3>
|
<div class="container mt-4">
|
||||||
<form method="post">{% csrf_token %}
|
<h3>{% if object %}Edit{% else %}Add{% endif %} Event</h3>
|
||||||
{{ form.as_p }}
|
|
||||||
|
<form method="post" novalidate>
|
||||||
|
{% csrf_token %}
|
||||||
|
|
||||||
|
{% for field in form %}
|
||||||
|
<div class="mb-3">
|
||||||
|
{{ field.label_tag }}
|
||||||
|
{{ field }}
|
||||||
|
{% for error in field.errors %}
|
||||||
|
<div class="text-danger">{{ error }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
<button class="btn btn-primary">Save</button>
|
<button class="btn btn-primary">Save</button>
|
||||||
<a class="btn btn-secondary" href="{% url 'master_data:event_type_list' %}">Cancel</a>
|
<a class="btn btn-secondary" href="{% url 'master_data:event_type_list' %}">Cancel</a>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
0
templatetags/__init__.py
Normal file
0
templatetags/__init__.py
Normal file
8
templatetags/form_filters.py
Normal file
8
templatetags/form_filters.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
from django import template
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
|
@register.filter(name='add_class')
|
||||||
|
def add_class(value, css_class):
|
||||||
|
return value.as_widget(attrs={"class": css_class})
|
||||||
Reference in New Issue
Block a user