Skip to content

Commit c5f89c5

Browse files
authored
Merge pull request #59 from OpenDataSTL/develop
Merge develop to master for 1.1.0 Release
2 parents 598847d + 335ff87 commit c5f89c5

32 files changed

+319
-178
lines changed

src/main/java/svc/configuration/GsonConfiguration.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
import java.time.LocalDate;
99
import java.time.LocalDateTime;
10-
import java.time.ZoneId;
11-
import java.time.ZonedDateTime;
1210
import java.time.format.DateTimeFormatter;
1311

1412
import org.springframework.context.annotation.Configuration;
@@ -97,9 +95,7 @@ private class LocalDateTimeJsonAdapter extends TypeAdapter<LocalDateTime>{
9795
@Override
9896
public void write(JsonWriter out, LocalDateTime value) throws IOException {
9997
if (value !=null){
100-
ZonedDateTime zdt = value.atZone(ZoneId.of("America/Chicago"));
101-
String outPattern = zdt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss O"));
102-
out.value(outPattern);
98+
out.value(value.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
10399
}else{
104100
out.value("");
105101
}

src/main/java/svc/data/citations/datasources/mock/MockCitationDataSource.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public boolean insertCitations(List<Citation> citations){
9595
parameterMap.put("city", c.defendant_city);
9696
parameterMap.put("state", c.defendant_state);
9797
parameterMap.put("driversLicenseNumber", c.drivers_license_number);
98+
parameterMap.put("driversLicenseState", c.drivers_license_state);
9899
parameterMap.put("courtDate", DatabaseUtilities.convertLocalDateTimeToDatabaseDateString(c.court_dateTime));
99100
parameterMap.put("courtId", c.court_id.getValue());
100101
jdbcTemplate.update(getSql("citation/insert-citation.sql"), parameterMap);
@@ -136,6 +137,7 @@ public Citation mapRow(ResultSet rs, int i) {
136137
citation.defendant_city = rs.getString("defendant_city");
137138
citation.defendant_state = rs.getString("defendant_state");
138139
citation.drivers_license_number = rs.getString("drivers_license_number");
140+
citation.drivers_license_state = rs.getString("drivers_license_state");
139141
LocalDate courtDate = DatabaseUtilities.getDatabaseLocalDate(rs.getDate("court_date"));
140142
LocalTime courtTime = DatabaseUtilities.getDatabaseLocalTime(rs.getTime("court_date"));
141143
if (courtDate==null || courtTime==null){

src/main/java/svc/data/citations/datasources/tyler/TylerCitationDataSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ private List<Citation> performRestTemplateCall(URI uri) {
7979
try {
8080
tylerCitationsResponse = restTemplate.exchange(uri, HttpMethod.GET, query, type);
8181
tylerCitations = tylerCitationsResponse.getBody();
82-
return citationFilter.RemoveCitationsWithExpiredDates(citationTransformer.fromTylerCitations(tylerCitations));
82+
return citationFilter.Filter(citationTransformer.fromTylerCitations(tylerCitations));
8383
} catch (RestClientException ex) {
8484
System.out.println("Tyler datasource is down.");
8585
return Lists.newArrayList();

src/main/java/svc/data/citations/datasources/tyler/models/TylerCitation.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ public class TylerCitation {
1919

2020
@JsonProperty
2121
public String driversLicenseNumber;
22+
23+
@JsonProperty
24+
public String driversLicenseState;
2225

2326
@JsonProperty
2427
public String dob;

src/main/java/svc/data/citations/datasources/tyler/transformers/CitationTransformer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public Citation fromTylerCitation(TylerCitation tylerCitation) {
6363
genericCitation.first_name = tylerCitation.firstName;
6464
genericCitation.last_name = tylerCitation.lastName;
6565
genericCitation.drivers_license_number = tylerCitation.driversLicenseNumber;
66+
genericCitation.drivers_license_state = tylerCitation.driversLicenseState;
6667

6768
if (tylerCitation.dob == null) {
6869
LogSystem.LogEvent("Received tyler citation with no DOB.");
@@ -97,13 +98,11 @@ public Citation fromTylerCitation(TylerCitation tylerCitation) {
9798
// These could probably be added to the Tyler API
9899
// citation time?
99100
// Boolean mandatory_court_apperarnce
100-
// Boolean can_pay_online
101101

102102
// public String defendant_address; - not in Tyler API
103103
// public String defendant_city; - not in Tyler API
104104
// public String defendant_state; - not in Tyler API
105105

106-
// There is no property for muni_id, but there probably should be
107106

108107
return genericCitation;
109108
}

src/main/java/svc/data/citations/filters/CitationFilter.java

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.time.LocalDateTime;
44
import java.util.List;
55
import java.util.ListIterator;
6+
import java.util.stream.Collectors;
67

78
import javax.inject.Inject;
89

@@ -11,25 +12,45 @@
1112
import svc.managers.CourtManager;
1213
import svc.models.Citation;
1314
import svc.models.Court;
15+
import svc.models.Violation;
1416

1517
@Component
1618
public class CitationFilter {
1719
@Inject
1820
CourtManager courtManager;
1921

20-
public List<Citation> RemoveCitationsWithExpiredDates(List<Citation> citations){
21-
ListIterator<Citation> iter = citations.listIterator();
22-
while(iter.hasNext()){
23-
Citation citation = iter.next();
22+
public List<Citation> Filter(List<Citation> citations){
23+
return citations.stream()
24+
.filter(c -> courtDateFilter(c))
25+
.collect(Collectors.toList());
26+
}
27+
28+
private boolean courtDateFilter(Citation citation){
29+
boolean keepCitation = false;
30+
31+
ListIterator<Violation> violIter = citation.violations.listIterator();
32+
while(violIter.hasNext()){
33+
Violation violation = violIter.next();
34+
if (violation.warrant_status){
35+
keepCitation = true;
36+
break;
37+
}
38+
}
39+
40+
if (!keepCitation){
2441
Court court = courtManager.getCourtById(citation.court_id.getValue());
2542
if (court.citation_expires_after_days >= 0){
2643
LocalDateTime today = LocalDateTime.now();
2744
if (citation.court_dateTime.isBefore(today.minusDays(court.citation_expires_after_days))){
28-
iter.remove();
45+
keepCitation = false;
46+
}else{ //citation has not expired yet
47+
keepCitation = true;
2948
}
49+
}else{ //court field indicates citation never expires
50+
keepCitation = true;
3051
}
31-
3252
}
33-
return citations;
53+
54+
return keepCitation;
3455
}
3556
}

src/main/java/svc/data/textMessages/CitationTextMessage.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ private String getViolationSMS(Violation violation, boolean showDismissedViolati
4848
message += "\nStatus: "+violation.status.toString();
4949
if (violation.status != VIOLATION_STATUS.DISMISS_WITHOUT_COSTS){
5050
message += "\nFine Amount: $"+violation.fine_amount;
51-
message += "\nCourt Costs: $"+violation.court_cost;
5251
}
5352
}
5453

src/main/java/svc/managers/CitationManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public List<Citation> findCitations(CitationSearchCriteria criteria) {
2222
}
2323

2424
// DOB & License No
25-
if (criteria.dateOfBirth != null && criteria.driversLicenseNumber != null) {
25+
if (criteria.dateOfBirth != null && criteria.driversLicenseNumber != null && criteria.driversLicenseState != null) {
2626
return citationDAO.getByLicenseAndDOB(criteria.driversLicenseNumber, criteria.driversLicenseState, criteria.dateOfBirth);
2727
}
2828

src/main/java/svc/managers/DemoManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public List<DemoCitation> createCitationsAndViolations(){
4848
demoCitation.citationNumber = citation.citation_number;
4949
demoCitation.dob = citation.date_of_birth;
5050
demoCitation.driversLicenseNumber = citation.drivers_license_number;
51+
demoCitation.driversLicenseState = citation.drivers_license_state;
5152
Period daysTillCourt = DatabaseUtilities.getCurrentDate().until(citation.court_dateTime.toLocalDate());
5253
demoCitation.daysTillCourt = daysTillCourt.getDays();
5354
demoCitation.numberOfViolations = numberOfViolations;

src/main/java/svc/managers/SMSManager.java

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ private enum SMS_STAGE{
5656
WELCOME(0),
5757
READ_DOB(1),
5858
READ_LICENSE(2),
59-
VIEW_CITATION(3),
60-
READ_MENU_CHOICE_VIEW_CITATIONS_AGAIN(4);
59+
READ_STATE(3),
60+
VIEW_CITATION(4),
61+
READ_MENU_CHOICE_VIEW_CITATIONS_AGAIN(5);
6162

6263
private int numVal;
6364

@@ -152,10 +153,11 @@ private String generateReadDobMessage(HttpSession session, String dob){
152153
return message;
153154
}
154155

155-
private String ListCitations(LocalDate dob, String license){
156+
private String ListCitations(LocalDate dob, String license, String licenseState){
156157
CitationSearchCriteria criteria = new CitationSearchCriteria();
157158
criteria.dateOfBirth = dob;
158159
criteria.driversLicenseNumber = license;
160+
criteria.driversLicenseState = licenseState;
159161
List<Citation> citations = citationManager.findCitations(criteria);
160162

161163
ListCitationsTextMessage listCitationsTM = new ListCitationsTextMessage(citations);
@@ -166,18 +168,37 @@ private String ListCitations(LocalDate dob, String license){
166168
}
167169

168170
private String generateReadLicenseMessage(HttpSession session, String licenseNumber){
171+
SMS_STAGE nextTextStage;
172+
licenseNumber = (licenseNumber != null)?licenseNumber:(String)session.getAttribute("license_number");
173+
session.setAttribute("license_number", licenseNumber);
174+
String message = "Thank you. Now please enter your driver\'s license state, using the two letter abbreviation. Examples. Use \"MO\" for Missouri and \"IL\" for Illinois.";
175+
nextTextStage = SMS_STAGE.READ_STATE;
176+
setNextStageInSession(session,nextTextStage);
177+
return message;
178+
}
179+
180+
private String generateReadStateMessage(HttpSession session){
181+
String message = generateReadStateMessage(session, null);
182+
return message;
183+
}
184+
185+
private String generateReadStateMessage(HttpSession session, String licenseState){
169186
String message = "";
170187
SMS_STAGE nextTextStage;
171188

172-
licenseNumber = (licenseNumber != null)?licenseNumber:(String)session.getAttribute("license_number");
189+
licenseState = (licenseState != null)?licenseState:(String)session.getAttribute("license_state");
190+
licenseState = licenseState.toUpperCase();
191+
String licenseNumber = (String)session.getAttribute("license_number");
173192
String dob = (String)session.getAttribute("dob");
174193

175194
try{
176195
LocalDate date_of_birth = DatabaseUtilities.convertUSStringDateToLD(dob);
177-
session.setAttribute("license_number", licenseNumber);
178-
message = ListCitations(date_of_birth, licenseNumber);
196+
session.setAttribute("license_state", licenseState);
197+
message = ListCitations(date_of_birth, licenseNumber,licenseState);
179198
if (message == ""){
180-
message = "No tickets were found. If you have additional questions, go to www.yourSTLcourts.com.";
199+
message = "No tickets were found. If you have entered your information correctly, please visit the following link for possible reasons: \n\n";
200+
message += clientURL+"/tickets/error/notFound";
201+
message += "\n\n To use this system again, reply with \"TICKET\".";
181202
message += "\n\n" + SMSSpamProtector.addError(session);
182203
nextTextStage = SMS_STAGE.WELCOME;
183204
}else{
@@ -195,11 +216,6 @@ private String generateReadLicenseMessage(HttpSession session, String licenseNum
195216
return message;
196217
}
197218

198-
private String generateReadLicenseMessage(HttpSession session){
199-
String message = generateReadLicenseMessage(session, null);
200-
return message;
201-
}
202-
203219
private String replyWithAdditionalViewingOptions(){
204220
String message = "";
205221
message += "\nReply with '1' to view another ticket";
@@ -225,12 +241,13 @@ private String generateViewCitationsAgainMessage(HttpSession session, HttpServle
225241

226242
switch(menuChoice){
227243
case "1":
228-
message = generateReadLicenseMessage(session);
244+
message = generateReadStateMessage(session);
229245
break;
230246
case "2":
231247
message = "Visit ";
232-
message += clientURL+"/citations";
248+
message += clientURL+"/tickets";
233249
message += "/"+citationNumber;
250+
message += "/info";
234251
message += replyWithAdditionalViewingOptions();
235252
setNextStageInSession(session,SMS_STAGE.READ_MENU_CHOICE_VIEW_CITATIONS_AGAIN);
236253
break;
@@ -288,10 +305,12 @@ private String generateViewCitationMessage(HttpSession session, String citationN
288305

289306
String dob = (String)session.getAttribute("dob");
290307
String license = (String)session.getAttribute("license_number");
308+
String licenseState = (String)session.getAttribute("license_state");
291309
criteria = new CitationSearchCriteria();
292310
try{
293311
criteria.dateOfBirth = DatabaseUtilities.convertUSStringDateToLD(dob);
294312
criteria.driversLicenseNumber = license;
313+
criteria.driversLicenseState = licenseState;
295314
citations = citationManager.findCitations(criteria);
296315
int citationNumberToView = Integer.parseInt(citationNumber) - 1;
297316
if (citationNumberToView >= 0 && citationNumberToView < citations.size()){
@@ -345,6 +364,9 @@ public MessagingResponse getTwimlResponse(TwimlMessageRequest twimlMessageReques
345364
case READ_LICENSE:
346365
message = generateReadLicenseMessage(session, content);
347366
break;
367+
case READ_STATE:
368+
message = generateReadStateMessage(session, content);
369+
break;
348370
case VIEW_CITATION:
349371
message = generateViewCitationMessage(session, content);
350372
break;

src/main/java/svc/models/Citation.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ public class Citation {
1717
public String defendant_city;
1818
public String defendant_state;
1919
public String drivers_license_number;
20+
public String drivers_license_state;
2021
public LocalDateTime court_dateTime;
21-
22+
2223
public List<Violation> violations;
2324
public HashableEntity<Court> court_id;
2425
public HashableEntity<Municipality> municipality_id;

src/main/java/svc/models/DemoCitation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public class DemoCitation {
66
public String citationNumber;
77
public LocalDate dob;
88
public String driversLicenseNumber;
9+
public String driversLicenseState;
910
public Integer numberOfViolations;
1011
public Integer daysTillCourt;
1112
}

src/main/java/svc/util/DemoUtilities.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public List<Citation> generateRandomCitations(){
2828
citation0.defendant_city = "NORWOOD COURT";
2929
citation0.defendant_state = "MO";
3030
citation0.drivers_license_number = "STLDL"+demoRandomizer.encode(11L);
31+
citation0.drivers_license_state = "MO";
3132
citation0.court_dateTime = DatabaseUtilities.getCurrentDateTime().plusDays(1);
3233
citation0.court_id = new HashableEntity<Court>(Court.class,2L);
3334
citation0.municipality_id = new HashableEntity<Municipality>(Municipality.class,2L);
@@ -42,6 +43,7 @@ public List<Citation> generateRandomCitations(){
4243
citation1.defendant_city = "PASADENA HILLS";
4344
citation1.defendant_state = "MO";
4445
citation1.drivers_license_number = "STLDL"+demoRandomizer.encode(22L);
46+
citation1.drivers_license_state = "MO";
4547
citation1.court_dateTime = DatabaseUtilities.getCurrentDateTime().plusDays(7);
4648
citation1.court_id = new HashableEntity<Court>(Court.class,37L);
4749
citation1.municipality_id = new HashableEntity<Municipality>(Municipality.class,40L);
@@ -56,6 +58,7 @@ public List<Citation> generateRandomCitations(){
5658
citation2.defendant_city = "ST. ANN";
5759
citation2.defendant_state = "MO";
5860
citation2.drivers_license_number = "STLDL"+demoRandomizer.encode(33L);
61+
citation2.drivers_license_state = "MO";
5962
citation2.court_dateTime = DatabaseUtilities.getCurrentDateTime().plusDays(5);
6063
citation2.court_id = new HashableEntity<Court>(Court.class,79L);
6164
citation2.municipality_id = new HashableEntity<Municipality>(Municipality.class,90L);
@@ -70,6 +73,7 @@ public List<Citation> generateRandomCitations(){
7073
citation3.defendant_city = "BRIDGETON";
7174
citation3.defendant_state = "MO";
7275
citation3.drivers_license_number = "STLDL"+demoRandomizer.encode(44L);
76+
citation3.drivers_license_state = "MO";
7377
citation3.court_dateTime = DatabaseUtilities.getCurrentDateTime().plusDays(14);
7478
citation3.court_id = new HashableEntity<Court>(Court.class,1L);
7579
citation3.municipality_id = new HashableEntity<Municipality>(Municipality.class,1L);
@@ -84,6 +88,7 @@ public List<Citation> generateRandomCitations(){
8488
citation4.defendant_city = "EUREKA";
8589
citation4.defendant_state = "MO";
8690
citation4.drivers_license_number = "STLDL"+demoRandomizer.encode(55L);
91+
citation4.drivers_license_state = "MO";
8792
citation4.court_dateTime = DatabaseUtilities.getCurrentDateTime().plusDays(12);
8893
citation4.court_id = new HashableEntity<Court>(Court.class,6L);
8994
citation4.municipality_id = new HashableEntity<Municipality>(Municipality.class,6L);
@@ -98,6 +103,7 @@ public List<Citation> generateRandomCitations(){
98103
citation5.defendant_city = "EUREKA";
99104
citation5.defendant_state = "MO";
100105
citation5.drivers_license_number = "STLDL"+demoRandomizer.encode(55L);
106+
citation5.drivers_license_state = "MO";
101107
citation5.court_dateTime = DatabaseUtilities.getCurrentDateTime().plusDays(4);
102108
citation5.court_id = new HashableEntity<Court>(Court.class,23L);
103109
citation5.municipality_id = new HashableEntity<Municipality>(Municipality.class,23L);
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1-
INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (1,90);
1+
INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (1,90);
2+
INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (1,86);
3+
INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (1,74);
4+
INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (1,51);
5+
INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (1,56);
6+
INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (1,38);

0 commit comments

Comments
 (0)