Event Management System Overview
Event Management System Overview
INTRODUCTION
KEYWORDS:
Event Request – A submission by a client to organize a new event.
Forwarding – The process of sending an event request to a suitable event
manager.
Proposal – A detailed plan with budget and resources prepared by event
managers for client approval.
Client – A registered user who submits requests and reviews proposals.
Admin – The system administrator who oversees operations, user management,
and final approvals.
Event Manager – A user responsible for managing and executing events based
on forwarded requests.
Finalized Event – An event that has been confirmed and approved for execution.
Payment – The client’s financial contribution toward the event proposal.
Dashboard – A role-specific user interface showing relevant actions and event
information.
[Link] ANALYSIS
2.1 IDENTIFICATION OF NEED
This project aims to create an Online Event Management System (EMS) portal for a
campus or organization. The portal allows registered users (Admins, Event Managers,
and Clients) to interact through a centralized system to manage event requests, planning,
proposals, and finalization activities efficiently.
Users can register themselves as Clients (who submit event requests), Event Managers
(who handle event execution), or Admins (who oversee and manage the entire process).
When a person registers as an Event Manager, an approval mechanism is triggered,
which sends a notification to the Administrator for verification. The admin has access to
an approval page to review and authorize event managers to ensure authenticity and
proper role assignment.
Once logged in, users are provided with role-specific dashboards:
Clients can submit new event requests, view the status of their requests, and
respond to proposals.
Event Managers can view assigned event requests, submit event proposals, and
manage planning tasks.
Admins can forward event requests to managers, review proposals, finalize
events, and manage system data.
Each event request includes details such as event type, description, date range, client
budget, and status. The admin coordinates between Clients and Event Managers to
ensure events are planned, proposed, and executed efficiently. Every proposal, approval,
and payment is timestamped and tracked throughout its lifecycle.
Key Features:
Secure login system with role-based access control.
Event request module where Clients can describe and request event services.
Proposal submission module for Event Managers to respond to forwarded
requests.
Admin dashboard to oversee system-wide activities and manage roles.
Status tracking so all users can monitor the progress of their events.
Document and media upload functionality for proposals and planning.
Approval system for Event Manager registration to ensure quality and security.
Notifications (email/SMS) to keep users informed of key actions and updates.
•Technical Feasibility
•Economic Feasibility
•Behavioral Feasibility
Technical Feasibility
Technical Feasibility deals with the hardware as well as software requirements.
Technology is not a constraint to type system development. We have to find out whether
the necessary technology, the proposed equipments have the capacity to hold the data,
which is used in the project, should be checked to carryout this technical feasibility.
The technical feasibility issues usually raised during the feasibility stage of investigation
includes these
• This software is running in windows 2000 Operating System, which can
be easily
installed.
• The hardware required is Pentium based server.
• The system can be expanded.
Economical Feasibility
This feasibility study present tangible and intangible benefits from the prefect by
comparing the development and operational cost. The technique of cost benefit analysis
is often used as a basis for assessing economic feasibility. This system needs some more
initial investment than the existing system, but it can be justifiable that it will improve
quality of service.
This analysis involves how it will work when it is installed and the assessment of
political and managerial environment in which it is implemented. People are inherently
resistant to change and computers have been known to facilitate change. The new
proposed system is very much useful to the useful to the users and there for it will accept
broad audience from around the world.
2.5SoftwareEngineering Paradigm
Waterfall Model
This is the most common and classic of life cycle models, also referred to as a linear-
sequential life cycle model. It is very simple to understand and use. In a waterfall
model, each phase must be completed in its entirety before the next phase can begin. At
the end of each phase, a review takes place to determine if the project is on the right path
and whether or not to continue or discard the project. Unlike what I mentioned in the
general model, phases do not overlap in a waterfall model.
2.6 E-R diagram
Entity relationship diagramming is a technique that is widely used in the world of business and
information technology to show how information is, or should be, stored and used within a
business system.
Entities are the things about which we seek the [Link] are the
things of the real world which have some physical existence.
user info
Send request
Event Management
system
Manage events
0.0
Admin
CLIENT
View proposal
create proposal
Event
manager
n
atio
s valid Admin_profile
ck
Che
Add new user
User_profile
ADMIN
Login
Process
Ad d
even
t Manage event
forwa
rd ev
e nt
forward_event
il
eventmanager
deta
Event manager Login
info
LOGIN
PROCESS
eventproposal
create
Event
info
ail
r det client
ome
Cust
client Login
info
LOGIN
PROCESS
view
eventproposal
Event
info
clientresponse
2.8 USE CASE DIAGRAM
3. SYSTEM DESIGN
1. ADMINISTRATOR MODULE
Purpose: Admins manage user roles, oversee event flow, and finalize events.
Sub-Modules:
Login/Logout – Secure authentication for Admins
User Management – Approve and manage Clients and Event Managers
Event Management – View all event requests, forward requests, and track
progress
Proposal Review – View proposals submitted by Event Managers
Finalization – Approve proposals and mark events as finalized
Report Generation – View event statistics and generate reports
Feedback Review – Read feedback from clients
Profile Update – Modify admin details
Change Password – Update admin credentials securely
2. CLIENT MODULE
Purpose: Clients submit event requests and respond to proposals.
Sub-Modules:
Register/Login – User registration and secure login
Event Request Form – Submit event details (title, description, budget, date
range)
Proposal View – Review proposals from Event Managers
Response & Payment – Accept/reject proposal and proceed to payment
Status Tracker – View the current state of the event
Event History – Access previously requested events and their statuses
Feedback Submission – Rate and review the event after completion
Profile Update – Update personal details
Change Password – Credential management
3.2DATABASE FESIGN:
mysql>desceventapp_userprofile;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| role_id | bigint | NO | MUL | NULL | |
| user_id | int | NO | UNI | NULL | |
| address | longtext | YES | | NULL | |
| contact | varchar(15) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
5 rows in set (0.03 sec)
mysql>desceventapp_role;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| role |varchar(20) | NO | UNI | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql>desceventapp_payment;
+----------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| amount | decimal(10,2) | NO | | NULL | |
| status | varchar(20) | NO | | NULL | |
| transaction_id | varchar(100) | NO | UNI | NULL | |
| client_id | int | NO | MUL | NULL | |
| event_id | bigint | NO | MUL | NULL | |
+----------------+---------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
mysql>desceventapp_eventproposal;
+---------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| proposal_text | longtext | NO | | NULL | |
| proposal_image | varchar(100) |YES | | NULL | |
| facility_document | varchar(100) |YES | | NULL | |
| required_payment | decimal(10,2) | YES | | NULL | |
| status | varchar(20) | NO | | NULL | |
| submitted_at | datetime(6) | NO | | NULL | |
| forwarded_event_id |bigint | NO | UNI | NULL | |
| is_sent_to_client | tinyint(1) | NO | | NULL | |
| forwarded_to_client | tinyint(1) | NO | | NULL | |
+---------------------+---------------+------+-----+---------+----------------+
10 rows in set (0.00 sec)
mysql>desceventapp_clientresponse;
+------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| response | varchar(10) | NO | | NULL | |
| client_id | int | YES | MUL | NULL | |
| event_request_id | bigint | YES | MUL | NULL | |
| payment_link | varchar(200) |YES | | NULL | |
| payment_status | varchar(10) | NO | | NULL | |
| payment_amount | decimal(10,2) | YES | | NULL | |
| payment_method | varchar(20) | YES | | NULL | |
+------------------+---------------+------+-----+---------+----------------+
8 rows in set (0.02 sec)
mysql>desceventapp_eventmanager;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| username | varchar(150) | NO | UNI | NULL | |
| password | varchar(128) | NO | | NULL | |
| email | varchar(254) | NO | UNI | NULL | |
| contact |varchar(15) | NO | UNI | NULL | |
+----------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql>desceventapp_event;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
| description | longtext | NO | | NULL | |
| date | date | NO | | NULL | |
| location | varchar(255) | NO | | NULL | |
| status | varchar(20) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
6 rows in set (0.02 sec)
mysql>desceventapp_forwardedevent;
+---------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| status | varchar(20) | NO | | NULL | |
| forwarded_at | datetime(6) | NO | | NULL | |
| admin_id | int | YES | MUL | NULL | |
| event_manager_id | bigint | NO | MUL | NULL | |
| event_request_id | bigint | NO | MUL | NULL | |
| client_id | int | YES | MUL | NULL | |
| event_id | bigint | YES | MUL | NULL | |
| client_budget | decimal(10,2) | NO | | NULL | |
| end_date | date | YES | | NULL | |
| event_title | varchar(255) |YES | | NULL | |
| forwarded_by_id | int | YES | MUL | NULL | |
| proposal | longtext | YES | | NULL | |
| start_date | date | YES | | NULL | |
| is_client_forwarded | tinyint(1) | NO | | NULL | |
+---------------------+---------------+------+-----+---------+----------------+
15 rows in set (0.02 sec)
mysql>desceventapp_eventrequest;
+---------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| description | longtext | YES | | NULL | |
| status | varchar(20) | NO | | NULL | |
| client_id | int | NO | MUL | NULL | |
| event_id | bigint | YES | MUL | NULL | |
| client_budget | decimal(10,2) | YES | | NULL | |
| created_at | datetime(6) | NO | | NULL | |
| end_date | date | NO | | NULL | |
| event_title | varchar(255) |YES | | NULL | |
| start_date | date | NO | | NULL | |
| title | varchar(255) |YES | | NULL | |
| is_forwarded |tinyint(1) | NO | | NULL | |
+---------------+---------------+------+-----+---------+----------------+
12 rows in set (0.00 sec)
mysql>desceventapp_eventmanager_assigned_events;
+-----------------+--------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| eventmanager_id | bigint | NO | MUL | NULL | |
| event_id | bigint | NO | MUL | NULL | |
+-----------------+--------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
4. CODE
from [Link] import post_migrate
from [Link] import receiver
from [Link] import User
from [Link] import Role, UserProfile
def create_default_admin():
# Check if the admin user already exists
admin_user, created = [Link].get_or_create(
username="barsha",
defaults={
"email": "pani@[Link]",
"is_superuser": True,
"is_staff": True,
},
)
if created:
admin_user.set_password("pani@123") # Hash password
admin_user.save()
print("✅ Super admin created successfully!")
# Check if the user profile exists, if not, create and assign role
user_profile, created = [Link].get_or_create(user=admin_user,
defaults={"role": admin_role})
if created:
print(f"✅ Role '{admin_role.role}' assigned to admin user.")
else:
print("ℹ️Admin user already has a role assigned.")
@receiver(post_migrate)
def create_roles_and_admin(sender, **kwargs):
if [Link] == "eventapp": # Ensure it only runs for your app
# Ensure default roles exist
roles = ["admin", "event_manager", "client"]
for role in roles:
[Link].get_or_create(role=role)
class Role([Link]):
ROLE_CHOICES = (
("admin", "Admin"),
("event_manager", "Event Manager"),
("client", "Client"),
)
role = [Link](max_length=20, choices=ROLE_CHOICES, unique=True)
# Changed 'name' to 'role'
def __str__(self):
return [Link]
def __str__(self):
return f"{[Link]} - {[Link]}"
class Event([Link]):
title = [Link](max_length=255)
description = [Link]()
date = [Link]()
location = [Link](max_length=255)
status = [Link](
max_length=20,
choices=[('upcoming', 'Upcoming'), ('ongoing', 'Ongoing'), ('completed',
'Completed')],
default='upcoming'
)
def __str__(self):
return [Link]
def __str__(self):
return [Link]
class Client([Link]):
user = [Link](User, on_delete=[Link])
address = [Link](max_length=255)
phone_number = [Link](max_length=15)
date_of_birth = [Link]()
registration_date = [Link](auto_now_add=True)
def __str__(self):
return [Link]
class Payment([Link]):
client = [Link](User, on_delete=[Link])
event = [Link](Event, on_delete=[Link])
amount = [Link](max_digits=10, decimal_places=2)
status = [Link](
max_length=20,
choices=[('pending', 'Pending'), ('completed', 'Completed')],
default='pending'
)
transaction_id = [Link](max_length=100, unique=True)
def __str__(self):
return f"Payment by {[Link]} for {[Link]}"
def create_default_admin():
if not [Link](username="barsha").exists():
admin_user = [Link].create_superuser(
username="barsha",
email="pani@[Link]",
password="pani@123"
)
print("Super admin created successfully!")
admin_role, _ = [Link].get_or_create(role="admin") # Use 'role' instead of 'name'
# Check if the user profile exists, if not, create and assign role
user_profile, created = [Link].get_or_create(user=admin_user,
defaults={"role": admin_role})
if created:
print(f" Role '{admin_role.role}' assigned to admin user.") # Use [Link] instead of
[Link]
else:
print(" Admin user already has a role assigned.")
class EventRequest([Link]):
STATUS_CHOICES = [
('pending', 'Pending'),
('approved', 'Approved'),
('rejected', 'Rejected'),
('forwarded', 'Forwarded'),
]
event = [Link](Event, on_delete=[Link], null=True,
blank=True) # Make it optional
client = [Link](User, on_delete=[Link])
event_title = [Link](max_length=255,null=True, blank=True)
description = [Link](null=True, blank=True)
title = [Link](max_length=255,null=True)
start_date = [Link](default=now) # Added Start Date
end_date = [Link](default=now) # Added End Date
client_budget = [Link](max_digits=10, decimal_places=2 , null=True,
blank=True) # Added Client Budget
status = [Link](max_length=20, choices=STATUS_CHOICES,
default='pending')
created_at = [Link](default=now)
is_forwarded = [Link](default=False)
def __str__(self):
return f"{self.event_title} - {[Link]}"
class ForwardedEvent([Link]):
STATUS_CHOICES = [
('pending', 'Pending'),
('proposal_sent', 'Proposal Sent'),
]
client = [Link](
User, on_delete=[Link], null=True,
related_name="client_forwarded_events"
)
admin = [Link](
User, on_delete=[Link], null=True, blank=True,
related_name="admin_forwarded_events"
)
forwarded_by = [Link](
User, on_delete=[Link], related_name="events_forwarded",null=True,
blank=True
)
event_manager = [Link](
User, on_delete=[Link], related_name="manager_assigned"
)
status = [Link](max_length=20, choices=STATUS_CHOICES,
default='pending')
forwarded_at = [Link](auto_now_add=True)
is_client_forwarded = [Link](default=False)
event_title = [Link](max_length=255,null=True)
proposal = [Link](null=True, blank=True)
start_date = [Link](null=True)
end_date = [Link](null=True)
client_budget = [Link](max_digits=10, decimal_places=2)
def __str__(self):
return f"Forwarded {self.event_request.event_title} to
{self.event_manager.username}"
class EventProposal([Link]):
STATUS_CHOICES = [
('pending', 'Pending'),
('approved', 'Approved'),
('rejected', 'Rejected'),
]
is_sent_to_client = [Link](default=False)
forwarded_event = [Link](ForwardedEvent,
on_delete=[Link])
proposal_text = [Link]()
proposal_image = [Link](upload_to='proposal_images/', null=True,
blank=True)
facility_document = [Link](upload_to='proposal_docs/', null=True,
blank=True)
required_payment = [Link](max_digits=10, decimal_places=2,
null=True, blank=True)
status = [Link](max_length=20, choices=STATUS_CHOICES,
default='pending')
submitted_at = [Link](auto_now_add=True)
forwarded_to_client = [Link](default=False)
def __str__(self):
return f"Proposal for {self.forwarded_event.event_request.event_title}"
class FinalizedEvent([Link]):
event_request = [Link](EventRequest, on_delete=[Link],
null=True, blank=True)
proposal = [Link](
EventProposal, on_delete=models.SET_NULL, null=True, blank=True,
related_name="finalized_event"
)
event = [Link](Event, on_delete=[Link], null=True,
blank=True)
status = [Link](max_length=255, null=True, blank=True)
client = [Link](
UserProfile, on_delete=[Link], null=True,
related_name="client_forwarded_events" # Update this to UserProfile
)
created_at = [Link](auto_now_add=True)
finalized_by_admin = [Link](
User, on_delete=models.SET_NULL, null=True, blank=True,
related_name="finalized_events"
)
# Add this if needed
def __str__(self):
return f"Finalized Event: {self.event_request.title if self.event_request else 'No Event
Request'}"
class ClientResponse([Link]):
ACCEPTED = "Accepted by Client"
REJECTED = "Rejected by Client"
PENDING = "Pending"
RESPONSE_CHOICES = [
(ACCEPTED, "Accepted"),
(REJECTED, "Rejected"),
(PENDING, "Pending"),
]
PAYMENT_METHOD_CHOICES = [
('Credit Card', 'Credit Card'),
('Debit Card', 'Debit Card'),
('PayPal', 'PayPal'),
('Bank Transfer', 'Bank Transfer'),
]
event_request = [Link](EventRequest,
on_delete=[Link],null=True, blank=True)
client = [Link](User, on_delete=[Link],null=True,
blank=True)
response = [Link](max_length=10, choices=[('Yes', 'Yes'), ('No', 'No')])
[Link] == "No":
[Link] = [Link]
self.payment_link = None # No payment link if rejected
else:
[Link] = [Link]
super().save(*args, **kwargs)
def __str__(self):
return f"{[Link]} - {self.get_response_display()} - {self.payment_status}"
class DashboardImage([Link]):
title = [Link](max_length=255)
image = [Link](upload_to="dashboard_images/")
uploaded_at = [Link](auto_now_add=True)
def __str__(self):
return [Link]
class GalleryImage([Link]):
title = [Link](max_length=255, blank=True, null=True)
image = [Link](upload_to='gallery/')
uploaded_at = [Link](auto_now_add=True)
def __str__(self):
return [Link] if [Link] else "Untitled Image"
class Blog([Link]):
title = [Link](max_length=255)
content = [Link]()
image = [Link](upload_to='blog_images/', blank=True, null=True)
author = [Link](UserProfile, on_delete=[Link]) # Use
UserProfile instead
created_at = [Link](default=now)
def __str__(self):
return [Link]
class Comment([Link]):
blog = [Link](Blog, related_name="comments",
on_delete=[Link])
user = [Link](UserProfile, on_delete=[Link]) # Use
UserProfile instead
text = [Link]()
created_at = [Link](auto_now_add=True)
def __str__(self):
return f"Comment by {[Link]} on {[Link]}"
from django import forms
from .models import Event, EventRequest,EventManager
from [Link] import ValidationError
from [Link] import Role
from [Link] import
UserProfile ,Blog,ClientResponse,GalleryImage,FinalizedEvent,DashboardImage,Event
Request,EventProposal,ForwardedEvent
class LoginForm([Link]):
ROLE_CHOICES = [
('admin', 'Admin'),
('event_manager', 'Event Manager'),
('client', 'Client'),
]
role = [Link](choices=ROLE_CHOICES,
widget=[Link](attrs={'class': 'form-control'}))
username = [Link](widget=[Link](attrs={'class': 'form-control',
'placeholder': 'Username'}))
password = [Link](widget=[Link](attrs={'class': 'form-
control', 'placeholder': 'Password'}))
class RegisterForm([Link]):
username = [Link](
widget=[Link](attrs={'class': 'form-control', 'placeholder': 'Enter your
username'}),
max_length=150
)
email = [Link](
widget=[Link](attrs={'class': 'form-control', 'placeholder': 'Enter your
email'})
)
password = [Link](
widget=[Link](attrs={'class': 'form-control', 'placeholder': 'Enter
your password'})
)
confirm_password = [Link](
widget=[Link](attrs={'class': 'form-control', 'placeholder': 'Confirm
your password'})
)
contact = [Link](
widget=[Link](attrs={'class': 'form-control', 'placeholder': 'Enter your
contact number'}),
max_length=15
)
address = [Link](
widget=[Link](attrs={'class': 'form-control', 'placeholder': 'Enter your
address', 'rows': 2})
)
class AdminRegistrationForm([Link]):
username = [Link](widget=[Link](attrs={'class': 'form-control',
'placeholder': 'Username'}))
email = [Link](widget=[Link](attrs={'class': 'form-control',
'placeholder': 'Email'}))
password = [Link](widget=[Link](attrs={'class': 'form-
control', 'placeholder': 'Password'}))
confirm_password = [Link](widget=[Link](attrs={'class': 'form-
control', 'placeholder': 'Confirm Password'}))
contact = [Link](widget=[Link](attrs={'class': 'form-control',
'placeholder': 'Contact'}))
def clean(self):
cleaned_data = super().clean()
password = cleaned_data.get("password")
confirm_password = cleaned_data.get("confirm_password")
if password != confirm_password:
raise [Link]("Passwords do not match")
class EventManagerRegistrationForm([Link]):
username = [Link](widget=[Link](attrs={'class': 'form-control',
'placeholder': 'Username'}))
password = [Link](widget=[Link](attrs={'class': 'form-
control', 'placeholder': 'Password'}))
email = [Link](widget=[Link](attrs={'class': 'form-control',
'placeholder': 'Email'}))
contact = [Link](widget=[Link](attrs={'class': 'form-control',
'placeholder': 'Contact'}))
class EventRequestForm([Link]):
class Meta:
model = EventRequest
fields = ['event', 'description']
widgets = {
'event': [Link](attrs={'class': 'form-control'}),
'description': [Link](attrs={'class': 'form-control', 'placeholder': 'Describe
your event...'}),
}
def clean(self):
cleaned_data = super().clean()
password = cleaned_data.get("password")
confirm_password = cleaned_data.get("confirm_password")
class AdminForm([Link]):
password = [Link](widget=[Link], required=False)
confirm_password = [Link](widget=[Link], required=False)
contact = [Link](max_length=15, required=True) # Handle contact here
class Meta:
model = User
fields = ['username', 'email'] # Contact is not part of User
def clean(self):
cleaned_data = super().clean()
password = cleaned_data.get("password")
confirm_password = cleaned_data.get("confirm_password")
if self.cleaned_data["password"]:
user.set_password(self.cleaned_data["password"]) # Hash password
if commit:
[Link]()
# Update or create UserProfile separately
[Link].update_or_create(user=user, defaults={"contact":
self.cleaned_data["contact"]})
return user
class EventRequestForm([Link]):
class Meta:
model = EventRequest
fields = ['title', 'description', 'start_date', 'end_date', 'client_budget']
widgets = {
'start_date': [Link](attrs={'type': 'date'}),
'end_date': [Link](attrs={'type': 'date'}),
}
class ForwardEventForm([Link]):
class Meta:
model = ForwardedEvent
fields = ['event_manager']
class ForwardClientForm([Link]):
client = [Link](
queryset=[Link](), # Fetch all users
empty_label="Select Client",
widget=[Link](attrs={'class': 'form-control'}),
)
class EventProposalForm([Link]):
class Meta:
model = EventProposal
fields = ['proposal_text', 'proposal_image', 'facility_document', 'required_payment']
class FinalizedEventForm([Link]):
class Meta:
model = FinalizedEvent
fields = ['finalized_by_admin']
class ClientResponseForm([Link]):
class Meta:
model = ClientResponse
fields = ['response']
widgets = {
'response': [Link](choices=ClientResponse.RESPONSE_CHOICES)
}
# [Link]
from django import forms
class PaymentForm([Link]):
payment_amount = [Link](label='Payment Amount', max_digits=10,
decimal_places=2)
payment_method = [Link](
label='Payment Method',
choices=[
('UPI', 'UPI'),
('NetBanking', 'Net Banking'),
('CreditCard', 'Credit Card'),
('DebitCard', 'Debit Card'),
]
)
class DashboardImageForm([Link]):
class Meta:
model = DashboardImage
fields = ["title", "image"]
class GalleryImageForm([Link]):
class Meta:
model = GalleryImage
fields = ['title', 'image']
class BlogForm([Link]):
class Meta:
model = Blog
fields = ['title', 'content', 'image']
@csrf_exempt
@login_required
def post_comment(request):
if [Link] == "POST":
blog_id = [Link]("blog_id")
text = [Link]("text")
return JsonResponse({
"success": True,
"username": [Link],
"comment_text": [Link]
})
def home(request):
return render(request, 'eventapp/[Link]')
def index(request):
form = LoginForm()
if [Link] == "POST":
form = LoginForm([Link])
if form.is_valid():
username = form.cleaned_data["username"]
password = form.cleaned_data["password"]
role = form.cleaned_data["role"].lower() # Convert role to lowercase
if user:
try:
user_profile = [Link](user=user)
def signup(request):
if [Link] == "POST":
print(" Signup form submitted!")
form = RegisterForm([Link])
if form.is_valid():
print(" Form is valid!")
username = form.cleaned_data["username"]
email = form.cleaned_data["email"]
password = form.cleaned_data["password"]
confirm_password = form.cleaned_data["confirm_password"]
contact = form.cleaned_data["contact"]
address = form.cleaned_data["address"]
if [Link](email=email).exists():
[Link](request, "Email already exists.")
print(" Email already exists!")
return render(request, "eventapp/user_signin.html", {"form": form})
if password != confirm_password:
[Link](request, "Passwords do not match.")
print(" Passwords do not match!")
return render(request, "eventapp/user_signin.html", {"form": form})
user = [Link].create_user(username=username, email=email,
password=password)
[Link]()
print(f" User '{username}' created successfully!")
client_role, created = [Link].get_or_create(role="client")
print(f" Role '{client_role.role}' fetched!")
else:
form = RegisterForm()
forwarded_client_responses = [Link](status__in=["Accepted by
Client", "Rejected by Client"])
all_event_requests = [Link]()
})
def user_logout(request):
logout(request)
return redirect("index")
@login_required
def user_dashboard(request):
try:
user_profile = [Link] # Get UserProfile instance
if user_profile.[Link]() != "client":
[Link](request, "Unauthorized Access! You do not have permission to view this
page.")
return redirect("index")
client_responses =
[Link](event_request__in=[event.event_request for event in
client_events])
response = client_responses.filter(event_request=event.event_request).first()
event.client_response = [Link] if response else None # Assign response or
None
images = [Link]()
return render(request, "eventapp/[Link]", {
"event_requests": event_requests,
"rejected_events": rejected_events,
"finalized_events": finalized_events,
"client_responses": client_responses,
"forwarded_events": forwarded_events,
"client_events": client_events, # Pass the combined events to the template
"images": images,
'client_events': client_events
})
except [Link]:
[Link](request, "Role not assigned! Contact admin.")
return redirect("index")
@login_required
def register_manager(request):
if [Link]() != "admin":
[Link](request, "Only Admins can register Event Managers.")
return redirect("dashboard")
if [Link] == "POST":
username = [Link]("username")
email = [Link]("email")
contact = [Link]("contact")
address = [Link]("address")
password = [Link]("password")
confirm_password = [Link]("confirm_password")
if [Link](username=username).exists():
[Link](request, "Username already exists.")
return redirect("register_manager")
if password != confirm_password:
[Link](request, "Passwords do not match.")
return redirect("register_manager")
@login_required
def list_managers(request):
event_managers =
[Link](role__role="event_manager").order_by("id")
paginator = Paginator(event_managers, 3)
page_number = [Link]("page")
page_obj = paginator.get_page(page_number)
if form.is_valid():
password = form.cleaned_data.get("password")
if password:
user.set_password(password)
event_manager.contact = form.cleaned_data["contact"]
event_manager.save()
else:
[Link]()
event_manager.delete()
[Link](request, "Event Manager deleted successfully!")
return redirect("list_managers")
@login_required
def reset_manager_password(request, id):
event_manager = get_object_or_404(UserProfile, id=id, role__role="event_manager")
user = event_manager.user
if [Link] == "POST":
new_password = [Link]("new_password")
confirm_password = [Link]("confirm_new_password")
if new_password != confirm_password:
[Link](request, "Passwords do not match!")
else:
print(f" Old Hashed Password: {[Link]}")
user.set_password(new_password)
[Link]()
if check_password(new_password, [Link]):
print(" Password updated successfully!")
else:
print(" Password update failed!")
forwarded_events = [Link](event_manager=[Link],
status="pending")
proposals =
[Link](forwarded_event__event_manager=[Link]).exclude(st
atus="Pending")
return render(request, "eventapp/[Link]", {
"forwarded_events": forwarded_events,
"proposals": proposals
})
def is_admin(user):
return user.is_authenticated and [Link](user=user,
role__role='admin').exists()
@login_required
@user_passes_test(is_admin)
def admin_list(request):
""" Show all admins """
admins = [Link](userprofile__role__role="admin")
return render(request, "eventapp/all_admin.html", {"admins": admins})
@login_required
@user_passes_test(is_admin)
def create_admin(request):
""" Allow an admin to create another admin """
if [Link] == "POST":
form = AdminForm([Link])
if form.is_valid():
user = [Link](commit=False)
user.set_password(form.cleaned_data["password"])
[Link]()
@login_required
@user_passes_test(is_admin)
def edit_admin(request, user_id):
""" Edit admin details including User and UserProfile fields """
user = get_object_or_404(User, id=user_id)
user_profile, _ = [Link].get_or_create(user=user) # Ensure UserProfile
exists
if [Link] == "POST":
form = AdminForm([Link], instance=user) # Handle username & email
if form.is_valid():
user = [Link]() # Save User model (username, email)
if [Link] == "POST":
if [Link] == "barsha": # Prevent deletion of the super admin
[Link](request, "Cannot delete the main super admin!")
else:
[Link]()
[Link](request, "Admin deleted successfully!")
return redirect("admin_list")
return render(request, "eventapp/delete_admin.html", {"admin": user})
@login_required
@user_passes_test(is_admin)
def reset_admin_password(request, user_id):
""" Allow an admin to reset another admin's password """
user = get_object_or_404(User, id=user_id)
if [Link] == "POST":
new_password = [Link]("new_password")
confirm_password = [Link]("confirm_password")
@login_required
def request_event(request):
if [Link] == "POST":
form = EventRequestForm([Link])
if form.is_valid():
event_request = [Link](commit=False)
event_request.client = [Link]
else:
form = EventRequestForm()
@login_required
def forward_event(request, event_id):
event_request = get_object_or_404(EventRequest, id=event_id)
if [Link] == "POST":
form = ForwardEventForm([Link])
if form.is_valid():
forwarded_event = [Link](commit=False)
forwarded_event.event_request = event_request
forwarded_event.event = event_request.event # ✅ Ensure event is linked
forwarded_event.save()
event_request.is_forwarded = True
event_request.save()
else:
form = ForwardEventForm()
if [Link] == "POST":
proposal_text = [Link]("proposal_text")
proposal_image = [Link]("proposal_image")
facility_document = [Link]("facility_document")
required_payment = [Link]("required_payment")
if not required_payment:
[Link](request, "Required payment cannot be empty!")
return redirect('eventapp/submit_proposal',
forwarded_event_id=forwarded_event_id)
try:
proposal.required_payment = float(required_payment)
except ValueError:
[Link](request, "Invalid payment amount.")
return redirect('submit_proposal', forwarded_event_id=forwarded_event_id)
if [Link] == "POST":
form = FinalizedEventForm([Link])
if form.is_valid():
finalized_event = [Link](commit=False)
finalized_event.event_proposal = proposal
finalized_event.finalized_by_admin = True
finalized_event.save()
if [Link] == "POST":
action = [Link]("action")
if action == "approve":
[Link] = "Approved"
[Link](request, "Proposal approved successfully!")
elif action == "reject":
[Link] = "Rejected"
[Link]() # Remove from database
[Link](request, "Proposal rejected and removed!")
[Link]()
return redirect("dashboard") # Redirect to admin dashboard after approval/rejection
return render(request, "eventapp/view_proposals.html", {"proposal": proposal})
if [Link] == "POST":
try:
event = [Link](id=event_id)
[Link] = "Rejected"
[Link]()
print(f"Event {event_id} rejected successfully.") # Debugging log
return JsonResponse({"success": True})
except [Link]:
print(f"Event {event_id} not found.") # Debugging log
return JsonResponse({"success": False, "error": "Event not found"})
if [Link] == "POST":
client_id = [Link]("client")
print("Selected Client ID:", client_id)
if client_id:
try:
client = get_object_or_404(UserProfile, id=client_id)
if not proposal:
[Link](request, "No proposal found for this event.")
return redirect("dashboard")
except Exception as e:
[Link](request, f"Error forwarding event: {str(e)}")
else:
[Link](request, "Please select a client before forwarding.")
if not forwarded_event:
return render(request, 'eventapp/clientview_proposal.html', {
'error_message': "No forwarded event found for this request.",
'finalized_event': finalized_event,
})
if not proposal:
return render(request, 'eventapp/clientview_proposal.html', {
'error_message': "No proposal linked to this event.",
'finalized_event': finalized_event,
})
forwarded_event.client_response = response_text
forwarded_event.save()
if [Link]() == "no":
forwarded_event.delete() # Remove if rejected
return JsonResponse({
"success": True,
"status": [Link](),
"message": f"ForwardedEvent {event_id} updated"
}, status=200)
# ✅ Check in FinalizedEvent
finalized_event = [Link](id=event_id).first()
if finalized_event:
print(f"✅ Event {event_id} found in FinalizedEvent. Processing response...")
finalized_event.client_response = response_text
finalized_event.save()
return JsonResponse({
"success": True,
"status": [Link](),
"message": f"ForwardedEvent {event_id} updated"
}, status=200)
if [Link] == "POST":
if not hasattr(proposal, "forwarded_event") or proposal.forwarded_event is None:
[Link](request, "Proposal has no associated ForwardedEvent.")
return redirect("dashboard")
if [Link] == "POST":
form = DashboardImageForm([Link], [Link])
if form.is_valid():
[Link]()
[Link](request, "Image uploaded successfully!")
return redirect("dashboard")
else:
form = DashboardImageForm()
def upload_image(request):
if [Link] == "POST":
form = GalleryImageForm([Link], [Link])
if form.is_valid():
[Link]()
return redirect('dashboard') # Redirect to gallery page
else:
form = GalleryImageForm()
return render(request, 'eventapp/upload_image.html', {'form': form})
response, _ = [Link].get_or_create(
event_request=event_request,
client=[Link],
defaults={'payment_status': 'Pending'}
)
if [Link] == 'POST':
form = PaymentForm([Link])
if form.is_valid():
response.payment_amount = form.cleaned_data['payment_amount']
response.payment_method = form.cleaned_data['payment_method']
response.payment_status = 'Completed'
[Link]()
print("Saved Amount:", response.payment_amount)
context = {
'event_request': event_request,
'amount': response.payment_amount if response else None, #✅ Pass amount to
template
}
According to security we provide security our application by using Java security levels like
1. Authentication
2. Authorization
3. Impersonation
1. Authentication
It is the process of validating the identity of a user to allow or deny a request. This involves
accepting credentials (e.g. username and password) from the users and validating it against a
designated authority. After the identity is verified and validated, the user is considered to be
legal and the resource request is fulfilled.
2. Authorization
The process of ensuring that users with valid identity are allowed to access specific resources.
3. Impersonation
This process enables an application to ensure the identity of the user, and in turn make
request to the other resources. Access to resources will be granted or denied based on the
identity that is being impersonated.
[Link]
Event management can provide improved accessibility for getting information. Such system
helps the user to keep in touch with the new events display product information in an easy
way.
The expense of logistics is reduced to almost nil after the initial setup is done. Electronic
technology speeds up the display of results. The user gets the information instantly. It bridges
the communication gap between the seller side and the customer side making a strong link.
The requirement of manpower is very minimal. Anybody can know about the craft product
details so easily.
BIBLIOGRAPHY
Bibliography
‘Instant Java Server Pages’ by CharlesHampfed,Universityof Toronto
‘Java Complete Reference’ by Herbert Schildt, Tata McGraw Hill,
Mastering Java2’ by John Zukowski, BPB Publications
‘Software engineering’ by Rajeev mall
Elmasri Navathe ‘Fundamentals of database systems’
Website
• [Link]
• [Link]/
• [Link]/wiki/java
• [Link]