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"?> <?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>

View File

@@ -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

View File

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

View File

@@ -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)',
} }

View File

@@ -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)

View File

@@ -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'),
] ]

View File

@@ -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)

View File

@@ -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'}),
}

View File

@@ -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">
<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> </form>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}

View File

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

View File

@@ -1,9 +1,23 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% block content %} {% block content %}
<div class="container mt-4">
<h3>{% if object %}Edit{% else %}Add{% endif %} Event</h3> <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> <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 %}

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' %} {% 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
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})