Second updates

This commit is contained in:
Vivek P Prakash
2025-11-28 03:11:38 +05:30
parent aa40080012
commit d3cc7eb47e
18 changed files with 758 additions and 149 deletions

6
.idea/vcs.xml generated Normal file
View 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
View File

@@ -1,7 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<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="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -11,54 +29,22 @@
<component name="FileEditorManager">
<leaf>
<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">
<state relative-caret-position="260">
<caret line="13" lean-forward="true" selection-start-line="13" selection-end-line="13" />
<state relative-caret-position="460">
<caret line="41" lean-forward="true" selection-start-line="41" selection-end-line="41" />
<folding>
<element signature="e#0#51#0" expanded="true" />
<element signature="e#0#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<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">
<state relative-caret-position="-103" />
</provider>
</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" />
<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>
@@ -67,29 +53,123 @@
</entry>
</file>
<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">
<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>
<element signature="e#0#9#0" expanded="true" />
<element signature="e#0#32#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/master_data/migrations/0001_initial.py">
<provider selected="true" editor-type-id="text-editor" />
<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>
</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>
</file>
</leaf>
</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">
<option name="x" value="-85" />
<option name="y" value="14" />
<option name="width" value="1386" />
<option name="height" value="788" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
@@ -106,12 +186,7 @@
<path>
<item name="eventify_prod" type="b2602c69:ProjectViewProjectNode" />
<item name="eventify_prod" type="462c0819:PsiDirectoryNode" />
<item name="master_data" 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" />
<item name="templatetags" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
@@ -120,6 +195,8 @@
</panes>
</component>
<component name="PropertiesComponent">
<property name="DefaultHtmlFileTemplate" value="HTML File" />
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
@@ -172,25 +249,24 @@
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1764194364815</updated>
<workItem from="1764194366807" duration="1596000" />
<workItem from="1764194366807" duration="9826000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="1596000" />
<option name="totallyTimeSpent" value="9826000" />
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1382" height="744" extended-state="7" />
<editor active="true" />
<frame x="-8" y="-8" width="1382" height="744" extended-state="6" />
<layout>
<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 anchor="bottom" id="Docker" show_stripe_button="false" />
<window_info anchor="bottom" id="Database Changes" />
<window_info anchor="bottom" id="Version Control" />
<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="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" weight="0.32840723" />
@@ -210,38 +286,9 @@
<option name="version" value="1" />
</component>
<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">
<provider selected="true" editor-type-id="text-editor" />
</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">
<provider selected="true" editor-type-id="text-editor" />
</entry>
@@ -263,36 +310,9 @@
</state>
</provider>
</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">
<provider selected="true" editor-type-id="text-editor" />
</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">
<provider selected="true" editor-type-id="text-editor" />
</entry>
@@ -302,18 +322,244 @@
<entry file="file://$PROJECT_DIR$/master_data/models.py">
<provider selected="true" editor-type-id="text-editor" />
</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">
<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" />
<state relative-caret-position="420">
<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>
<element signature="e#0#32#0" expanded="true" />
</folding>
</state>
</provider>
</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" />
</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>
</project>

View File

@@ -1,12 +1,32 @@
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.forms import AuthenticationForm
from .models import User
class UserForm(UserCreationForm):
class Meta:
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):
pass

View File

@@ -19,6 +19,7 @@ INSTALLED_APPS = [
'master_data',
'events',
'accounts',
'templatetags'
]
MIDDLEWARE = [

View File

@@ -1,11 +1,53 @@
from django import forms
from .models import Event
from .models import EventImages
class EventForm(forms.ModelForm):
class Meta:
model = Event
exclude = ['created_date']
fields = "__all__"
widgets = {
'start_date': forms.DateInput(attrs={'type':'date'}),
'end_date': forms.DateInput(attrs={'type':'date'}),
'name': forms.TextInput(attrs={'class': 'form-control'}),
'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)',
}

View File

@@ -1,6 +1,7 @@
from django.db import models
from master_data.models import EventType
class Event(models.Model):
created_date = models.DateField(auto_now_add=True)
name = models.CharField(max_length=200)
@@ -33,6 +34,7 @@ class Event(models.Model):
def __str__(self):
return f"{self.name} ({self.start_date})"
class EventImages(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
is_primary = models.BooleanField(default=False)

View File

@@ -8,4 +8,9 @@ urlpatterns = [
path('add/', views.EventCreateView.as_view(), name='event_add'),
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>/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'),
]

View File

@@ -1,8 +1,14 @@
from django.views import generic
from django.urls import reverse_lazy
from .models import Event
from .models import EventImages
from .forms import EventForm
from .forms import EventImagesForm
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):
model = Event
@@ -10,19 +16,76 @@ class EventListView(LoginRequiredMixin, generic.ListView):
template_name = 'events/event_list.html'
paginate_by = 10
class EventCreateView(LoginRequiredMixin, generic.CreateView):
model = Event
form_class = EventForm
template_name = 'events/event_form.html'
success_url = reverse_lazy('events:event_list')
class EventUpdateView(LoginRequiredMixin, generic.UpdateView):
model = Event
form_class = EventForm
template_name = 'events/event_form.html'
success_url = reverse_lazy('events:event_list')
class EventDeleteView(LoginRequiredMixin, generic.DeleteView):
model = Event
template_name = 'events/event_confirm_delete.html'
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)

View File

@@ -1,7 +1,11 @@
from django import forms
from .models import EventType
class EventTypeForm(forms.ModelForm):
class Meta:
model = EventType
fields = ['event_type']
widgets = {
'event_type': forms.TextInput(attrs={'class': 'form-control'}),
}

View File

@@ -1,17 +1,54 @@
{% extends 'base.html' %}
{% block content %}
<div class="row justify-content-center">
<div class="row justify-content-center mt-5">
<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>
{% csrf_token %}
{{ 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>
<button class="btn btn-primary w-100">Login</button>
<!-- Username field -->
<div class="mb-3">
<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>
<!-- 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>
{% endblock %}

View File

@@ -1,9 +1,23 @@
{% extends 'base.html' %}
{% block content %}
<h3>{% if object %}Edit{% else %}Add{% endif %} User</h3>
<form method="post">{% csrf_token %}
{{ form.as_p }}
<div class="container mt-4">
<h3>{% if object %}Edit{% else %}Add{% endif %} Event</h3>
<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>
<a class="btn btn-secondary" href="{% url 'accounts:user_list' %}">Cancel</a>
</form>
</div>
{% endblock %}

View File

@@ -1,9 +1,23 @@
{% extends 'base.html' %}
{% block content %}
<div class="container mt-4">
<h3>{% if object %}Edit{% else %}Add{% endif %} Event</h3>
<form method="post">{% csrf_token %}
{{ 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>
<a class="btn btn-secondary" href="{% url 'events:event_list' %}">Cancel</a>
</form>
</div>
{% endblock %}

View 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 %}

View 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 %}

View 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 %}

View File

@@ -1,9 +1,24 @@
{% extends 'base.html' %}
{% block content %}
<h3>{% if object %}Edit{% else %}Add{% endif %} Category</h3>
<form method="post">{% csrf_token %}
{{ form.as_p }}
<div class="container mt-4">
<h3>{% if object %}Edit{% else %}Add{% endif %} Event</h3>
<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>
<a class="btn btn-secondary" href="{% url 'master_data:event_type_list' %}">Cancel</a>
</form>
</div>
{% endblock %}

0
templatetags/__init__.py Normal file
View File

View 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})