Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
scheduling-system
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
External wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
SMASCH
scheduling-system
Commits
9f34a65a
Commit
9f34a65a
authored
7 years ago
by
Piotr Gawron
Browse files
Options
Downloads
Patches
Plain Diff
work in progress
parent
4793ed6f
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!85
subject list contain list of visits
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
smash/web/api_views/appointment.py
+0
-1
0 additions, 1 deletion
smash/web/api_views/appointment.py
smash/web/api_views/subject.py
+60
-16
60 additions, 16 deletions
smash/web/api_views/subject.py
smash/web/templates/subjects/index.html
+93
-2
93 additions, 2 deletions
smash/web/templates/subjects/index.html
with
153 additions
and
19 deletions
smash/web/api_views/appointment.py
+
0
−
1
View file @
9f34a65a
import
logging
import
traceback
from
datetime
import
datetime
from
django.contrib.auth.decorators
import
login_required
...
...
This diff is collapsed.
Click to expand it.
smash/web/api_views/subject.py
+
60
−
16
View file @
9f34a65a
...
...
@@ -3,12 +3,14 @@ import logging
from
django.contrib.auth.decorators
import
login_required
from
django.http
import
JsonResponse
from
web.models
import
Subject
from
web.models
import
Subject
,
Visit
,
Appointment
from
web.models.constants
import
SUBJECT_TYPE_CHOICES
from
web.views
import
e500_error
from
web.views.notifications
import
get_subjects_with_no_visit
,
get_subjects_with_reminder
from
web.views.notifications
import
get_subjects_with_no_visit
,
get_subjects_with_reminder
,
get_today_midnight_date
from
web.views.subject
import
SUBJECT_LIST_GENERIC
,
SUBJECT_LIST_NO_VISIT
,
SUBJECT_LIST_REQUIRE_CONTACT
from
django.db.models
import
Count
,
Case
,
When
,
Min
logger
=
logging
.
getLogger
(
__name__
)
...
...
@@ -48,37 +50,45 @@ def get_subjects(request, type):
raise
TypeError
(
"
Unknown query type:
"
+
type
)
def
get_subjects_order
(
subjects
,
order_column
,
order_direction
):
result
=
subjects
def
get_subjects_order
(
subjects
_to_be_ordered
,
order_column
,
order_direction
):
result
=
subjects
_to_be_ordered
if
order_direction
==
"
asc
"
:
order_direction
=
""
else
:
order_direction
=
"
-
"
if
order_column
==
"
first_name
"
:
result
=
subjects
.
order_by
(
order_direction
+
'
first_name
'
)
result
=
subjects
_to_be_ordered
.
order_by
(
order_direction
+
'
first_name
'
)
elif
order_column
==
"
last_name
"
:
result
=
subjects
.
order_by
(
order_direction
+
'
last_name
'
)
result
=
subjects
_to_be_ordered
.
order_by
(
order_direction
+
'
last_name
'
)
elif
order_column
==
"
nd_number
"
:
result
=
subjects
.
order_by
(
order_direction
+
'
nd_number
'
)
result
=
subjects
_to_be_ordered
.
order_by
(
order_direction
+
'
nd_number
'
)
elif
order_column
==
"
screening_number
"
:
result
=
subjects
.
order_by
(
order_direction
+
'
screening_number
'
)
result
=
subjects
_to_be_ordered
.
order_by
(
order_direction
+
'
screening_number
'
)
elif
order_column
==
"
default_location
"
:
result
=
subjects
.
order_by
(
order_direction
+
'
default_location
'
)
result
=
subjects
_to_be_ordered
.
order_by
(
order_direction
+
'
default_location
'
)
elif
order_column
==
"
dead
"
:
result
=
subjects
.
order_by
(
order_direction
+
'
dead
'
)
result
=
subjects
_to_be_ordered
.
order_by
(
order_direction
+
'
dead
'
)
elif
order_column
==
"
resigned
"
:
result
=
subjects
.
order_by
(
order_direction
+
'
resigned
'
)
result
=
subjects
_to_be_ordered
.
order_by
(
order_direction
+
'
resigned
'
)
elif
order_column
==
"
information_sent
"
:
result
=
subjects
.
order_by
(
order_direction
+
'
information_sent
'
)
result
=
subjects
_to_be_ordered
.
order_by
(
order_direction
+
'
information_sent
'
)
elif
order_column
==
"
postponed
"
:
result
=
subjects
.
order_by
(
order_direction
+
'
postponed
'
)
result
=
subjects
_to_be_ordered
.
order_by
(
order_direction
+
'
postponed
'
)
elif
order_column
==
"
type
"
:
result
=
subjects
.
order_by
(
order_direction
+
'
type
'
)
result
=
subjects_to_be_ordered
.
order_by
(
order_direction
+
'
type
'
)
elif
order_column
==
"
visit_0
"
:
result
=
subjects_to_be_ordered
.
annotate
(
visit_0
=
Min
(
'
visit__datetime_begin
'
)).
order_by
(
order_direction
+
'
visit_0
'
)
elif
order_column
==
"
visit_1
"
:
result
=
subjects_to_be_ordered
.
annotate
(
visit_0
=
Min
(
'
visit__datetime_begin
'
))
result
=
result
.
filter
(
visit__datetime_begin__gt
=
Min
(
'
visit__datetime_begin
'
))
result
=
result
.
annotate
(
visit_1
=
Min
(
'
visit__datetime_begin
'
)).
order_by
(
order_direction
+
'
visit_1
'
)
logger
.
info
(
result
.
query
)
return
result
def
get_subjects_filtered
(
subjects
,
filters
):
result
=
subjects
def
get_subjects_filtered
(
subjects
_to_be_filtered
,
filters
):
result
=
subjects
_to_be_filtered
for
row
in
filters
:
column
=
row
[
0
]
value
=
row
[
1
]
...
...
@@ -177,10 +187,43 @@ def get_yes_no(val):
return
"
NO
"
def
serialize_subject_visit
(
visit
):
status
=
"
---
"
appointments
=
visit
.
appointment_set
.
filter
()
pass
def
serialize_subject
(
subject
):
location
=
""
if
subject
.
default_location
is
not
None
:
location
=
subject
.
default_location
.
name
visits
=
Visit
.
objects
.
filter
(
subject
=
subject
)
serialized_visits
=
[]
for
visit
in
visits
:
if
visit
.
datetime_begin
<
get_today_midnight_date
():
if
visit
.
is_finished
:
finished_appointments_count
=
visit
.
appointment_set
.
filter
(
status
=
Appointment
.
APPOINTMENT_STATUS_FINISHED
).
count
()
if
finished_appointments_count
>
0
:
status
=
"
DONE
"
else
:
status
=
"
MISSED
"
elif
visit
.
datetime_end
<
get_today_midnight_date
():
status
=
"
EXCEEDED
"
else
:
scheduled_appointments_count
=
visit
.
appointment_set
.
filter
(
status
=
Appointment
.
APPOINTMENT_STATUS_SCHEDULED
).
count
()
if
scheduled_appointments_count
>
0
:
status
=
"
IN_PROGRESS
"
else
:
status
=
"
SHOULD_BE_IN_PROGRESS
"
else
:
status
=
"
UPCOMING
"
serialized_visits
.
append
({
"
status
"
:
status
,
"
datetime_start
"
:
visit
.
datetime_begin
.
strftime
(
'
%Y-%m-%d
'
),
"
datetime_end
"
:
visit
.
datetime_end
.
strftime
(
'
%Y-%m-%d
'
),
})
result
=
{
"
first_name
"
:
subject
.
first_name
,
...
...
@@ -195,5 +238,6 @@ def serialize_subject(subject):
"
information_sent
"
:
get_yes_no
(
subject
.
information_sent
),
"
type
"
:
subject
.
get_type_display
(),
"
id
"
:
subject
.
id
,
"
visits
"
:
serialized_visits
,
}
return
result
This diff is collapsed.
Click to expand it.
smash/web/templates/subjects/index.html
+
93
−
2
View file @
9f34a65a
...
...
@@ -32,8 +32,7 @@
<tr>
<th>
ND
</th>
<th>
Screening
</th>
<th>
First name
</th>
<th>
First name
</th>
<th>
Last name
</th>
<th>
Default location
</th>
<th>
Deceased
</th>
...
...
@@ -41,6 +40,14 @@
<th>
Postponed
</th>
<th>
Info sent
</th>
<th>
Type
</th>
<th>
Visit 1
</th>
<th>
Visit 2
</th>
<th>
Visit 3
</th>
<th>
Visit 4
</th>
<th>
Visit 5
</th>
<th>
Visit 6
</th>
<th>
Visit 7
</th>
<th>
Visit 8
</th>
<th>
Edit
</th>
</tr>
</thead>
...
...
@@ -76,6 +83,14 @@
<th>
<div
name=
"type_filter"
>
---
</div>
</th>
<th/>
<th/>
<th/>
<th/>
<th/>
<th/>
<th/>
<th/>
</tr>
</tfoot>
...
...
@@ -128,6 +143,34 @@
});
function
create_visit_row
(
visit
)
{
var
color
=
"
white
"
;
var
text
=
"
---
"
;
if
(
visit
!==
undefined
&&
visit
!==
null
)
{
if
(
visit
.
status
===
"
DONE
"
)
{
color
=
"
green
"
;
text
=
"
OK
"
;
}
else
if
(
visit
.
status
===
"
MISSED
"
)
{
color
=
"
pink
"
;
text
=
"
MISSED
"
;
}
else
if
(
visit
.
status
===
"
UPCOMING
"
)
{
color
=
"
blue
"
;
text
=
"
UPCOMING
"
;
}
else
if
(
visit
.
status
===
"
EXCEEDED
"
)
{
color
=
"
orange
"
;
text
=
"
EXCEEDED
"
;
}
else
if
(
visit
.
status
===
"
SHOULD_BE_IN_PROGRESS
"
)
{
color
=
"
orange
"
;
text
=
"
IN PROGRESS (NO APPOINTMENTS)
"
;
}
else
if
(
visit
.
status
===
"
IN_PROGRESS
"
)
{
color
=
"
lightgreen
"
;
text
=
"
IN PROGRESS
"
;
}
text
+=
"
<br/>
"
+
visit
.
datetime_start
+
"
-
"
+
visit
.
datetime_end
;
}
return
"
<div style='background-color:
"
+
color
+
"
';width:100%;height:100%>
"
+
text
+
"
</div>
"
;
}
$
(
function
()
{
table
=
$
(
'
#table
'
).
DataTable
({
pageLength
:
25
,
...
...
@@ -146,10 +189,58 @@
{
"
data
"
:
"
postponed
"
},
{
"
data
"
:
"
information_sent
"
},
{
"
data
"
:
"
type
"
},
{
"
data
"
:
"
visit_0
"
},
{
"
data
"
:
"
visit_1
"
},
{
"
data
"
:
null
},
{
"
data
"
:
null
},
{
"
data
"
:
null
},
{
"
data
"
:
null
},
{
"
data
"
:
null
},
{
"
data
"
:
null
},
{
"
data
"
:
null
}
],
columnDefs
:
[{
"
targets
"
:
10
,
"
render
"
:
function
(
data
,
type
,
row
,
meta
)
{
return
create_visit_row
(
row
.
visits
[
0
]);
}
},
{
"
targets
"
:
11
,
"
render
"
:
function
(
data
,
type
,
row
,
meta
)
{
return
create_visit_row
(
row
.
visits
[
1
]);
}
},
{
"
targets
"
:
12
,
"
render
"
:
function
(
data
,
type
,
row
,
meta
)
{
return
create_visit_row
(
row
.
visits
[
2
]);
}
},
{
"
targets
"
:
13
,
"
render
"
:
function
(
data
,
type
,
row
,
meta
)
{
return
create_visit_row
(
row
.
visits
[
3
]);
}
},
{
"
targets
"
:
14
,
"
render
"
:
function
(
data
,
type
,
row
,
meta
)
{
return
create_visit_row
(
row
.
visits
[
4
]);
}
},
{
"
targets
"
:
15
,
"
render
"
:
function
(
data
,
type
,
row
,
meta
)
{
return
create_visit_row
(
row
.
visits
[
5
]);
}
},
{
"
targets
"
:
16
,
"
render
"
:
function
(
data
,
type
,
row
,
meta
)
{
return
create_visit_row
(
row
.
visits
[
6
]);
}
},
{
"
targets
"
:
17
,
"
render
"
:
function
(
data
,
type
,
row
,
meta
)
{
return
create_visit_row
(
row
.
visits
[
7
]);
}
},
{
"
targets
"
:
18
,
"
data
"
:
"
id
"
,
"
defaultContent
"
:
'
<a href="#" type="button" class="btn btn-block btn-default">Edit</a>
'
}],
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment