Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions FusionIIIT/Fusion/settings/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@
'applications.hr2',
'applications.department',
'applications.iwdModuleV2',
'applications.patent_system',
'allauth',
'allauth.account',
'allauth.socialaccount',
Expand Down
12 changes: 11 additions & 1 deletion FusionIIIT/Fusion/settings/development.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'fusionlab',
'HOST': os.environ.get("DB_HOST", default='localhost'),
'PORT': '5433',
'USER': 'fusion_admin',
'PASSWORD': 'hello123',
}
Expand Down Expand Up @@ -64,4 +65,13 @@
('0 22 * * *', 'applications.central_mess.tasks.generate_bill'),
]

CRONTAB_DJANGO_MANAGE_PATH = '/home/owlman/Desktop/Fuse/Fusion/FusionIIIT/manage.py'
CRONTAB_DJANGO_MANAGE_PATH = '/home/owlman/Desktop/Fuse/Fusion/FusionIIIT/manage.py'

TEST_RUNNER = 'django.test.runner.DiscoverRunner'

DATABASES['default']['TEST'] = {
'MIRROR': 'default',
}

DEBUG = True
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
10 changes: 9 additions & 1 deletion FusionIIIT/Fusion/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.auth import views as auth_views

from django.views.static import serve
from django.urls import path

from applications.globals.views import RateLimitedPasswordResetView
Expand All @@ -40,6 +42,8 @@
url(r'^__debug__/', include(debug_toolbar.urls)),
url(r'^research_procedures/', include('applications.research_procedures.urls')),
url(r'^accounts/', include('allauth.urls')),

# url(r'^api/iwdModuleV2/', include('applications.iwdModuleV2.api.urls')),


url(r'^eis/', include('applications.eis.urls')),
Expand All @@ -55,6 +59,7 @@
url(r'^finance/', include('applications.finance_accounts.urls')),
url(r'^purchase-and-store/', include('applications.ps1.urls')),
url(r'^gymkhana/', include('applications.gymkhana.urls')),
# url(r'^inventory/', include('applications.inventory.urls')), # Commented out - module not present
url(r'^library/', include('applications.library.urls')),
url(r'^establishment/', include('applications.establishment.urls')),
url(r'^ocms/', include('applications.online_cms.urls')),
Expand All @@ -65,7 +70,10 @@
url(r'^recruitment/', include('applications.recruitment.urls')),
url(r'^examination/', include('applications.examination.urls')),
url(r'^otheracademic/', include('applications.otheracademic.urls')),

url(r'^patentsystem/', include('applications.patent_system.api.urls')),
url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT},),

# Password Reset URLs
path(
'password-reset/',
RateLimitedPasswordResetView.as_view(
Expand Down
1 change: 1 addition & 0 deletions FusionIIIT/applications/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Package marker\n
68 changes: 68 additions & 0 deletions FusionIIIT/applications/patent_system/Designated_Roles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Module Name: Patent Management System

## Designated User Roles & Permissions

### 1. Role Name: PCC Admin

* **Description:** Central module administrator responsible for operational control, workflow routing, and compliance handling.

* **Permissions:**

* Full CRUD on patent applications and related module records.

* Review new submissions and forward applications to Director.

* Request modifications, manage workflow state transitions, and monitor pending actions.

* Manage budget entries, communication logs, attorney assignment, filing records, and analytics dashboards.

* Access audit logs and module-wide reporting views.


### 2. Role Name: Director

* **Description:** Decision authority for review, approval/rejection, appeal decisions, and escalated budget approvals.

* **Permissions:**

* View applications assigned for Director review.

* Approve, reject, or mark applications for revision with mandatory feedback.

* Approve or deny escalated budgets.

* Review and decide appeals.

* View notifications and decision-linked records relevant to assigned workflows.


### 3. Role Name: Applicant / Inventor

* **Description:** Primary end-user who submits, tracks, and updates patent applications and inventor consent data.

* **Permissions:**

* Create and submit patent applications.

* View personal/associated applications and status timeline.

* Revise and resubmit applications when revision is requested.

* Withdraw applications (subject to workflow/state restrictions).

* Provide/revoke inventor consent where applicable.

* Lodge appeal for rejected applications within defined timeline constraints.


### 4. Role Name: External Attorney (Recorded Entity)

* **Description:** External legal expert tracked by the module for legal assessment and filing lifecycle stages.

* **Permissions:**

* Not a direct portal-authenticated role in current implementation.

* Assignment details, legal assessment inputs, and filing details are recorded by PCC Admin.

* Actions are represented through module records (assessment, filing, communication logs).
1 change: 1 addition & 0 deletions FusionIIIT/applications/patent_system/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Package marker\n
85 changes: 85 additions & 0 deletions FusionIIIT/applications/patent_system/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
from django.contrib import admin
from .models import (
Applicant, Application, ApplicationSectionI, ApplicationSectionII,
ApplicationSectionIII, Inventor, CommunicationLog, Budget, AuditLog, Document,
AttorneyAssignment, PatentabilityAssessment, FilingRecord,
)


class InventorInline(admin.TabularInline):
model = Inventor
extra = 0


class SectionIInline(admin.StackedInline):
model = ApplicationSectionI
extra = 0


class SectionIIInline(admin.StackedInline):
model = ApplicationSectionII
extra = 0


class SectionIIIInline(admin.TabularInline):
model = ApplicationSectionIII
extra = 0


@admin.register(Application)
class ApplicationAdmin(admin.ModelAdmin):
list_display = ("id", "title", "status", "decision_status", "primary_applicant", "submitted_date")
list_filter = ("status", "decision_status")
search_fields = ("title", "token_no")
inlines = [InventorInline, SectionIInline, SectionIIInline, SectionIIIInline]


@admin.register(Applicant)
class ApplicantAdmin(admin.ModelAdmin):
list_display = ("id", "name", "email", "user")
search_fields = ("name", "email")


@admin.register(CommunicationLog)
class CommunicationLogAdmin(admin.ModelAdmin):
list_display = ("id", "application", "direction", "subject", "logged_by", "created_at")
list_filter = ("direction",)


@admin.register(Budget)
class BudgetAdmin(admin.ModelAdmin):
list_display = ("id", "application", "total_cost", "decision")
list_filter = ("decision",)


@admin.register(AuditLog)
class AuditLogAdmin(admin.ModelAdmin):
list_display = ("id", "application", "action", "user", "timestamp")
list_filter = ("action",)
readonly_fields = ("application", "user", "action", "previous_state", "new_state", "details", "timestamp")


@admin.register(Document)
class DocumentAdmin(admin.ModelAdmin):
list_display = ("id", "title", "link", "created_at")


@admin.register(AttorneyAssignment)
class AttorneyAssignmentAdmin(admin.ModelAdmin):
list_display = ("id", "application", "attorney_name", "attorney_firm", "assigned_by", "assignment_date", "is_active")
list_filter = ("is_active",)
search_fields = ("attorney_name", "attorney_firm", "attorney_email")


@admin.register(PatentabilityAssessment)
class PatentabilityAssessmentAdmin(admin.ModelAdmin):
list_display = ("id", "application", "assessed_by_attorney", "recommendation", "assessment_date")
list_filter = ("recommendation",)
search_fields = ("assessed_by_attorney", "opinion_summary")


@admin.register(FilingRecord)
class FilingRecordAdmin(admin.ModelAdmin):
list_display = ("id", "application", "filing_office", "jurisdiction", "external_filing_id", "filing_date")
list_filter = ("filing_office", "jurisdiction")
search_fields = ("external_filing_id",)
Empty file.
Loading
Loading