Skip to content

Commit

Permalink
Feature/appeals 44915.prodtest 4.4.0 (#22603)
Browse files Browse the repository at this point in the history
* Add in appeals_tied_to_non_ssc_avljs methods and SQL

* Update case_docket.rb

* Update case_docket.rb

* APPEALS-51263 added the lever to the seeds file (#22149)

* Amybids/appeals 51263 (#22169)

* APPEALS-51263 added the lever to the seeds file

* APPEALS-51263 test cleanup for case_docket, case_distribution_levers_controller_spec and case_distribution_test_data_spec.rb

* APPEALS-51262 (#22176)

* creates trait in factory for non_ssc_avlj user

* updates user in user factory with new traits in staff factory

* adds randomized judge method

* replaces user create with a vacols staff create and limits css_id to 12 using slogid, adds judge_role for active smemgrp

* updates naming

---------

Co-authored-by: Michael Beard <michael.beard@va.gov>

* APPEALS-45232. Added table in the DB and added requested columns (#22223)

* APPEALS-45232. Added table in the DB and added requested columns

* APPEALS-45232. Fix lint issues

* APPEALS-45232. Fixed the class name

* APPEALS-45232. Updated the column names from feedback

---------

Co-authored-by: SHarshain <spoosa@razortalent.com>

* Sharsha/appeals 45200 (#22233)

* APPEALS-45200. create Return Appeals tied to non-SSC AVLJs job

* APPEALS-45200. WIP

---------

Co-authored-by: SHarshain <spoosa@razortalent.com>

* Chrisbdetlef/appeals 45208 (#22305)

* Framework for seeds

* Add comments and fill in further methods

* Further shared dev work

* Update names

* Expanded possible functions

* More functions for shared work

* Combine everyones work into main branch

* Combined work - testing

* Combined work - testing complete

* rubocop fix

---------

Co-authored-by: Christopher Detlef <>

* APPEALS-45202.Added button to trigger the job and return the appeals (#22375)

Co-authored-by: SHarshain <spoosa@razortalent.com>

* Updates slack_service.rb to include local/demo console printout message (#22343)

* APPEALS-51487 Location 63 Query (#22398)

* APPEALS-51487 Location 63 Query

* fix naming and change query

* Working code

* Add 2 day limit to query

* Remove commented out code

* Fix lint issues

* Remove binding.pry

---------

Co-authored-by: Christopher Detlef <>

* APPEALS-45248 ACD Controls Test Page Alerts for Run Seed Fils and Case Movement Section Buttons (#22386)

* APPEALS-45248 Add success banner alerts to Run seed files and case movement section buttons

* APPEALS-45248 add fail job button and refactored code

* Ricky/APPEALS-45204 (#22373)

* Added button, and initial csv generation of appeals tied to non ssc avljs

* WIP. APPEALS-45204 tweaks to Push data into CSV

* APPEALS-45204. fix the method error

* APPEALS-45204. Lint fix

* Updated query to fetch hearing and grab non ssc avlj names properly

* Fixed outstanding issues and cleaned up seeds

* implements new hearing_judge, separates assigned_avlj and signing_avlj

* Fixed linting issues and other clean up

---------

Co-authored-by: SHarshain <133917878+SHarshain@users.noreply.github.com>
Co-authored-by: SHarshain <spoosa@razortalent.com>
Co-authored-by: Michael Beard <michael.beard@va.gov>

* Ricky/APPEALS-45204 (#22452)

* Added button, and initial csv generation of appeals tied to non ssc avljs

* WIP. APPEALS-45204 tweaks to Push data into CSV

* APPEALS-45204. fix the method error

* APPEALS-45204. Lint fix

* Updated query to fetch hearing and grab non ssc avlj names properly

* Fixed outstanding issues and cleaned up seeds

* implements new hearing_judge, separates assigned_avlj and signing_avlj

* Fixed linting issues and other clean up

* Updated name of CSV download button

---------

Co-authored-by: SHarshain <133917878+SHarshain@users.noreply.github.com>
Co-authored-by: SHarshain <spoosa@razortalent.com>
Co-authored-by: Michael Beard <michael.beard@va.gov>

* Chrisbdetlef/appeals 54138 (#22460)

* APPEALS-51487 Location 63 Query

* fix naming and change query

* Working code

* Add 2 day limit to query

* Remove commented out code

* Fix lint issues

* Remove binding.pry

* APPEALS-54138 Add button to seed non-SSC AVLJs

---------

Co-authored-by: Christopher Detlef <>

* Fix for routing table (#22466)

Co-authored-by: Christopher Detlef <>

* Chrisbdetlef/appeals 54138.1 (#22486)

* Fix for routing table

* Randomly select docket id number

---------

Co-authored-by: Christopher Detlef <>

* Updated query to correctly grab seed data (#22489)

Co-authored-by: Amy Detwiler <133032208+amybids@users.noreply.github.com>

* Ricky/APPEALS-51260 (#22497)

* Updated query to correctly grab seed data

* Replaced AOD and CAVC fields with Priority, fixed csv file name

---------

Co-authored-by: Amy Detwiler <133032208+amybids@users.noreply.github.com>

* APPEALS-54884. spec fix push priority appeals to judges job (#22505)

Co-authored-by: SHarshain <spoosa@razortalent.com>

* exchanges spaces for hyphens, updates method to filter by unique veteran file numbers (#22524)

* updates seed file names to match AC and adds hyphens instead of spaces (#22530)

* Chrisbdetlef/appeals 54152 (#22531)

* APPEALS-54152 Move Appeals to loc 63

* Fix minor issues with the query and data displayed in the CSV

* APPEALS-54152 Move qualifying appeals to Loc 63

---------

Co-authored-by: Christopher Detlef <>

* APPEALS-54152.1 Fix issues with the process of making and moving appeals tied to nonSSC AVLJs (#22541)

Co-authored-by: Christopher Detlef <>

* Chrisbdetlef/appeals 54152.1 (#22544)

* APPEALS-54152.1 Fix issues with the process of making and moving appeals tied to nonSSC AVLJs

* TEST ONLY DO NOT MERGE

---------

Co-authored-by: Christopher Detlef <>

* Chrisbdetlef/appeals 54152.2 (#22554)

* APPEALS-54152.2 Change movement to loc 63 to 2 per AVLJ

* Fix lint issues and errors

* Remove artifact code

* Fix errors

---------

Co-authored-by: Christopher Detlef <>

* Code changes to account for duplicates from base query (#22582)

* Code changes to account for duplicates from base query

* Add warning to join constant

* Fix issue with empty array

---------

Co-authored-by: Christopher Detlef <>
Co-authored-by: Amy Detwiler <133032208+amybids@users.noreply.github.com>

* mbeard/APPEALS-45203 (#22565)

* refactored to include new move_qualifying_appeals method

* updated filtered methods and eligible appeals, moved appeals variables

* moves logic for eligible and moved appeals into new method

* cleaned up filter_method, simplified other methods

* updates to failing test

* ensures appeals isn't nil when job is complete

* Fix the last name issue on loc 63 CSV (#22591)

Co-authored-by: Christopher Detlef <>

* empty commit to force rerun of test

* empty commit to force rerun of test

* APPEALS-45248 v2 ACD Controls Test Page Alerts for Run Seed Fils and Case Movement Section Buttons (#22449)

* APPEALS-45248 Add success banner alerts to Run seed files and case movement section buttons

* APPEALS-45248 add fail job button and refactored code

* APPEALS-45248 address ac2 of the story and set timer for banner alerts

* APPEALS-45248-v2 update button verbiage

* APPEALS-54061 added collapsible table to see the 15 latest ReturnLegacyAppealsToBoard log on test page

* APPEALS-54061 refactor code to address modified AC in the story

* fixed linting issues

* some lint fixes

---------

Co-authored-by: 631966 <amy.detwiler@va.gov>
Co-authored-by: Amy Detwiler <133032208+amybids@users.noreply.github.com>

* APPEALS-APPEALS-55680 added nil checking to the return legacy to appe… (#22607)

* APPEALS-APPEALS-55680 added nil checking to the return legacy to appeals to board job

* APPEALS-55680 finish job if no moved appeals

* APPEALS-55680 made the no record slack message into an array

* APPEALS-55680 fixed rubocop issues

---------

Co-authored-by: Matthew Roth <roth_matthew@bah.com>
Co-authored-by: Blake Manus <33578594+Blake-Manus@users.noreply.github.com>
Co-authored-by: Michael Beard <michael.beard@va.gov>
Co-authored-by: SHarshain <133917878+SHarshain@users.noreply.github.com>
Co-authored-by: SHarshain <spoosa@razortalent.com>
Co-authored-by: cdetlefva <133903625+cdetlefva@users.noreply.github.com>
Co-authored-by: Michael Beard <131783726+mbeardy@users.noreply.github.com>
Co-authored-by: kristeja <112115264+kristeja@users.noreply.github.com>
  • Loading branch information
9 people authored Aug 26, 2024
1 parent ac9c7c2 commit 801a109
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class CaseDistributionLeversTestsController < ApplicationController
def acd_lever_index_test
@acd_levers = CaseDistributionLever.all
@acd_history = CaseDistributionAuditLeverEntry.lever_history
@returned_appeal_jobs = ReturnedAppealJob.all.order(created_at: :desc).limit(15)

render "case_distribution_levers/test"
end
Expand Down
38 changes: 25 additions & 13 deletions app/jobs/return_legacy_appeals_to_board_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class ReturnLegacyAppealsToBoardJob < CaseflowJob

queue_as :low_priority
application_attr :queue
NO_RECORDS_MOVED_MESSAGE = ["Job Ran Successfully, No Records Moved"].freeze

def perform(fail_job = false)
begin
Expand All @@ -15,22 +16,24 @@ def perform(fail_job = false)

appeals, moved_appeals = eligible_and_moved_appeals

return send_job_slack_report(NO_RECORDS_MOVED_MESSAGE) if moved_appeals.nil?

complete_returned_appeal_job(returned_appeal_job, "Job completed successfully", moved_appeals)

# The rest of your code continues here
# Filter the appeals and send the filtered report
@filtered_appeals = filter_appeals(appeals, moved_appeals)
send_job_slack_report
send_job_slack_report(slack_report)
rescue StandardError => error
@start_time ||= Time.zone.now
message = "Job failed with error: #{error.message}"
errored_returned_appeal_job(returned_appeal_job, message)
start_time ||= Time.zone.now # temporary fix to get this job to succeed
duration = time_ago_in_words(start_time)
slack_msg = "<!here>\n [ERROR] after running for #{duration}: #{error.message}"
slack_service.send_notification(slack_msg, self.class.name)
duration = time_ago_in_words(@start_time)
slack_service.send_notification("<!here>\n [ERROR] after running for #{duration}: #{error.message}",
self.class.name)
log_error(error)
message
ensure
@start_time ||= Time.zone.now
metrics_service_report_runtime(metric_group_name: "return_legacy_appeals_to_board_job")
end
end
Expand Down Expand Up @@ -62,6 +65,8 @@ def eligible_and_moved_appeals
end

def grouped_by_avlj(moved_appeals)
return [] if moved_appeals.nil?

moved_appeals.group_by { |appeal| VACOLS::Staff.find_by(sattyid: appeal["vlj"])&.sattyid }.keys.compact
end

Expand Down Expand Up @@ -123,30 +128,37 @@ def non_ssc_avljs

# Method to separate appeals by priority
def separate_by_priority(appeals)
priority_appeals = appeals.select { |appeal| appeal["priority"] == 1 }
non_priority_appeals = appeals.select { |appeal| appeal["priority"] == 0 }
return [] if appeals.nil?

priority_appeals = appeals.select { |appeal| appeal["priority"] == 1 } || []
non_priority_appeals = appeals.select { |appeal| appeal["priority"] == 0 } || []

[priority_appeals, non_priority_appeals]
end

# Method to calculate remaining eligible appeals
def calculate_remaining_appeals(all_appeals, moved_priority_appeals, moved_non_priority_appeals)
return [] if all_appeals.nil?

remaining_priority_appeals = (
all_appeals.select { |appeal| appeal["priority"] == 1 } -
moved_priority_appeals
)
) || []
remaining_non_priority_appeals = (
all_appeals.select { |appeal| appeal["priority"] == 0 } -
moved_non_priority_appeals
)
) || []
[remaining_priority_appeals, remaining_non_priority_appeals]
end

# Method to fetch non-SSC AVLJs that appeals were moved to location '63'
def fetch_moved_avljs(moved_appeals)
return [] if moved_appeals.nil?

moved_appeals.map { |appeal| VACOLS::Staff.find_by(sattyid: appeal["vlj"]) }
.compact
.uniq
.map { |record| get_name_from_record(record) }
&.map { |record| get_name_from_record(record) } || []
end

def get_name_from_record(record)
Expand Down Expand Up @@ -176,8 +188,8 @@ def errored_returned_appeal_job(returned_appeal_job, message)
)
end

def send_job_slack_report
slack_service.send_notification(slack_report.join("\n"), self.class.name)
def send_job_slack_report(slack_message)
slack_service.send_notification(slack_message.join("\n"), self.class.name)
end

def slack_report
Expand Down
3 changes: 2 additions & 1 deletion app/views/case_distribution_levers/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
acd_levers: @acd_levers,
acd_history: @acd_history,
user_is_an_acd_admin: @user_is_an_acd_admin,
acd_exclude_from_affinity: @acd_exclude_from_affinity
acd_exclude_from_affinity: @acd_exclude_from_affinity,
returnedAppealJobs: @returned_appeal_jobs
}) %>
<% end %>

3 changes: 2 additions & 1 deletion app/views/case_distribution_levers/test.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
applicationUrls: application_urls,
feedbackUrl: feedback_url,
acdLevers: @acd_levers,
acdHistory: @acd_history
acdHistory: @acd_history,
returnedAppealJobs: @returned_appeal_jobs
}) %>
<% end %>
68 changes: 68 additions & 0 deletions client/app/caseDistribution/components/CollapsibleTable.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import React, { useEffect, useState } from 'react';
import PropTypes from 'prop-types';

const CollapsibleTable = (props) => {
const { returnedAppealJobs } = props;
const [expandedRows, setExpandedRows] = useState([]);
const [allExpanded, setAllExpanded] = useState(true);

useEffect(() => {
const allRowIds = returnedAppealJobs.map((row) => row.id);

setExpandedRows(allRowIds);
}, [returnedAppealJobs]);

const toggleAllRows = () => {

if (allExpanded) {
// Collapse all rows
setExpandedRows([]);
} else {
// Expand all rows
const allRowIds = returnedAppealJobs.map((row) => row.id);

setExpandedRows(allRowIds);
}
setAllExpanded(!allExpanded);
};

const renderRowDetails = (row) => {
return (
<tr key={`row-expanded-${row.id}`}>
<td>{row.created_at}</td>
<td>{row.returned_appeals.join(', ')}</td>
<td>{JSON.parse(row.stats).message}</td>
</tr>
);
};

return (
<div>
<button onClick={toggleAllRows}>
{allExpanded ? 'Collapse All' : 'Expand All'}
</button>
<table border="1" width="100%" style={{ marginTop: '10px' }}>
<thead>
<tr>
<th>Created At</th>
<th>Returned Appeals</th>
<th>Stats</th>
</tr>
</thead>
<tbody>
{returnedAppealJobs.map((row) => (
<React.Fragment key={row.id}>
{expandedRows.includes(row.id) && renderRowDetails(row)}
</React.Fragment>
))}
</tbody>
</table>
</div>
);
};

CollapsibleTable.propTypes = {
returnedAppealJobs: PropTypes.array,
};

export default CollapsibleTable;
22 changes: 22 additions & 0 deletions client/app/caseDistribution/test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import ApiUtil from '../util/ApiUtil';
import Button from '../components/Button';
import Alert from 'app/components/Alert';
import uuid from 'uuid';
import CollapsibleTable from './components/CollapsibleTable';

class CaseDistributionTest extends React.PureComponent {
constructor(props) {
Expand All @@ -31,6 +32,13 @@ class CaseDistributionTest extends React.PureComponent {
};
}

componentDidUpdate() {
// Delay of 5 seconds
setTimeout(() => {
this.setState({ showAlert: false, showLegacyAppealsAlert: false });
}, 5000);
}

reseedAod = () => {
this.setState({ isReseedingAod: true });
ApiUtil.post('/case_distribution_levers_tests/run_demo_aod_hearing_seeds').then(() => {
Expand Down Expand Up @@ -225,6 +233,16 @@ class CaseDistributionTest extends React.PureComponent {
<button className="btn btn-primary">Distribution Status</button>
</a>
</li>
<li>
<a href="#case_movement"><button className="btn btn-primary">Case Movement</button></a>
</li>
<li>
<a href="#log_of_most_recent_appeals">
<button className="btn btn-primary">
Log of 15 most recent appeals moved to location 63
</button>
</a>
</li>
</ul>
<h2 id="levers"> Case Distribution Levers </h2>
<table
Expand Down Expand Up @@ -430,8 +448,12 @@ class CaseDistributionTest extends React.PureComponent {
</li>
</ul>
<hr />
<h2 id="log_of_most_recent_appeals">Log of 15 most recent appeals moved to location 63</h2>
<CollapsibleTable returnedAppealJobs={this.props.returnedAppealJobs} />
<hr />
<a href="#top"><button className="btn btn-primary">Back to Top</button></a>
</div>

);
}}
/>
Expand Down

0 comments on commit 801a109

Please sign in to comment.