Skip to content

Commit

Permalink
Add API builder and specs
Browse files Browse the repository at this point in the history
First API specs

Update Swagger

Update Swagger
  • Loading branch information
Rhian committed Mar 12, 2024
1 parent b25e15b commit 61376af
Show file tree
Hide file tree
Showing 34 changed files with 845 additions and 97 deletions.
1 change: 1 addition & 0 deletions app/components/reconsult_consultees_component.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</legend>
<div id="reconsult-hint" class="govuk-hint">
<%= t(".hint") %>
"Do you want to ask the applicant to extend the planning application expiry date?" <%= link_to "Request extension", new_planning_application_validation_validation_request_path(@planning_application, type: "time_extension"), class: "govuk-link" %>
</div>
<div class="govuk-radios" data-module="govuk-radios">
<%= form.govuk_radio_button(:email_reason, "send", label: { text: t(".send") }) %>
Expand Down
52 changes: 0 additions & 52 deletions app/controllers/api/v1/time_extension_requests_controller.rb

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module V1
class TimeExtensionValidationRequestsController < Api::V1::ApplicationController
skip_before_action :verify_authenticity_token
before_action :check_token_and_set_application
before_action :set_description_change_validation_request, only: %i[show update]
before_action :set_time_extension_validation_request, only: %i[show update]

rescue_from ValidationRequestUpdateService::UpdateError do |error|
render json: {message: error.message}, status: :bad_request
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class ValidationRequestsController < AuthenticationController
before_action :ensure_planning_application_is_not_closed_or_cancelled, only: %i[new create]

def index
validation_requests = @planning_application.validation_requests.where(post_validation: false)
validation_requests = @planning_application.validation_requests.where(type: "time_extension_request").where(post_validation: false)
@cancelled_validation_requests = validation_requests.cancelled
@active_validation_requests = validation_requests.active

Expand Down
1 change: 1 addition & 0 deletions app/helpers/audit_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ def applicant_activity_types
red_line_boundary_change_validation_request_received
other_change_validation_request_received
fee_change_validation_request_received
time_extension_validation_request_received
]
end

Expand Down
5 changes: 5 additions & 0 deletions app/helpers/description_change_validation_request_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,9 @@ def change_rejected?(description_change_validation_request)
def sequence_description(description_change_validation_request)
"description##{description_change_validation_request.sequence}"
end

def format_datetime(datetime_str)
datetime = DateTime.parse(datetime_str)
datetime.strftime("%-d %B %Y")
end
end
1 change: 1 addition & 0 deletions app/models/audit.rb
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ class Audit < ApplicationRecord
time_extension_validation_request_added: "time_extension_validation_request_added",
time_extension_validation_request_sent_post_validation:
"time_extension_validation_request_sent_post_validation",
time_extension_validation_request_received: "time_extension_validation_request_received",
constraints_checked: "constraints_checked",
neighbour_letters_sent: "neighbour_letters_sent",
neighbour_letter_copy_mail_sent: "neighbour_letter_copy_mail_sent",
Expand Down
17 changes: 14 additions & 3 deletions app/models/planning_application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -705,7 +705,7 @@ def open_post_validation_requests
end

def closed_pre_validation_requests
validation_requests.closed - validation_requests.closed.post_validation
validation_requests.where.not(type: "time_extension_validation_request").closed - validation_requests.closed.post_validation
end

def open_post_validation_requests?
Expand Down Expand Up @@ -740,6 +740,14 @@ def time_extension_request
time_extension_validation_requests.order(:created_at).last
end

def closed_time_extension_requests
time_extension_validation_requests.where(state: "closed")
end

def closed_time_extension_request
time_extension_validation_requests.where(state: "closed").order(:created_at).last
end

def latest_rejected_time_extension
time_extension_validation_requests.order(created_at: :desc).find(&:rejected?)
end
Expand Down Expand Up @@ -787,7 +795,10 @@ def environment_impact_assessment_status
end

def modify_expiry_date
if environment_impact_assessment.required?
if environment_impact_assessment.present? && environment_impact_assessment.required?
self.expiry_date = DAYS_TO_EXPIRE_EIA.days.after(validated_at || received_at)
elsif self.time_extension_validation_requests.any?
puts "yay"
self.expiry_date = DAYS_TO_EXPIRE_EIA.days.after(validated_at || received_at)
else
set_key_dates
Expand Down Expand Up @@ -873,7 +884,7 @@ def set_reference
end

def set_key_dates
return if environment_impact_assessment_required?
return if environment_impact_assessment_required? || time_extension_validation_requests.any?(:accepted)

self.expiry_date = DAYS_TO_EXPIRE.days.after(validated_at || received_at)
self.target_date = 35.days.after(validated_at || received_at)
Expand Down
13 changes: 11 additions & 2 deletions app/models/time_extension_validation_request.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# frozen_string_literal: true

class TimeExtensionValidationRequest < ValidationRequest

validates :proposed_expiry_date, presence: true
validates :reason, presence: true
validate :allows_only_one_open_time_extension, on: :create
Expand All @@ -10,7 +9,7 @@ class TimeExtensionValidationRequest < ValidationRequest
def proposed_expiry_is_later?
return if proposed_expiry_date.blank?
if proposed_expiry_date < planning_application.expiry_date
errors.add(:proposed_expiry_date, 'must be later than existing expiry date')
errors.add(:proposed_expiry_date, "must be later than existing expiry date")
end
end

Expand All @@ -28,8 +27,18 @@ def audit_comment
}.to_json
end

def audit_api_comment
{response:}.to_json
end

def email_and_timestamp
send_validation_request_email
mark_as_sent!
end

def update_planning_application!(params)
modified_target_date = proposed_expiry_date - 19.days

planning_application.update_columns(expiry_date: proposed_expiry_date, target_date: modified_target_date)
end
end
8 changes: 4 additions & 4 deletions app/models/validation_request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,10 @@ def rejected?
!approved && rejection_reason.present?
end

def time_extension_request?
type == "TimeExtensionValidationRequest"
end

def update_planning_application!(params)
# Specific types of validation request use this method, which is overwritten in those models.
#  A couple don't hence the empty method
Expand Down Expand Up @@ -337,10 +341,6 @@ def fee_change?
type == "FeeChangeValidationRequest"
end

def time_extension_request?
type == "TimeExtensionValidationRequest"
end

def reset_columns
reset_document_invalidation if replacement_document?
reset_fee_invalidation if fee_change?
Expand Down
4 changes: 4 additions & 0 deletions app/services/validation_request_update_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ def call!
validation_request.update!(validation_request_params)
validation_request.close!
validation_request.create_api_audit!
if validation_request.time_extension_request?
validation_request.update_planning_application!(params)
puts "true" if validation_request_params[:approved]
end
planning_application.send_update_notification_to_assessor

validation_request.update_planning_application!(ownership_certificate_params) if validation_request.approved?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ json.extract! description_change_validation_request,
:id,
:state,
:response_due,
:proposed_description,
:previous_description,
:proposed_expiry_date,
:rejection_reason,
:approved,
:days_until_response_due,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# frozen_string_literal: true

json.extract! time_extension_validation_request,
:id,
:state,
:response_due,
:proposed_expiry_date,
:rejection_reason,
:approved,
:days_until_response_due,
:cancel_reason,
:cancelled_at
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# frozen_string_literal: true

json.data @time_extension_validation_requests.each do |time_extension_validation_request|
json.partial! "show", time_extension_validation_request:
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# frozen_string_literal: true

json.partial! "show", time_extension_validation_request: @time_extension_validation_request
15 changes: 15 additions & 0 deletions app/views/api/v1/validation_requests/index.json.jbuilder
Original file line number Diff line number Diff line change
Expand Up @@ -158,4 +158,19 @@ json.data do
end
json.type "heads_of_terms_validation_request"
end

json.time_extension_validation_requests @planning_application
.time_extension_validation_requests do |time_extension_validation_request|
json.extract! time_extension_validation_request,
:id,
:state,
:response_due,
:proposed_expiry_date,
:rejection_reason,
:approved,
:days_until_response_due,
:cancel_reason,
:cancelled_at
json.type "time_extension_validation_request"
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,6 @@
</div>
</div>
<% end %>
<% if @planning_application.latest_rejected_time_extension.present? %>
<p class="govuk-body">
<strong>
Rejected proposed expiry date
</strong>
</p>
<p class="govuk-body">
<%= render(FormattedContentComponent.new(text: @planning_application.latest_rejected_time_extension.proposed_description)) %>
</p>
<p class="govuk-body">
<span class="govuk-caption-m">
Applicant rejected this time extension because: <%= @planning_application.latest_rejected_time_extension.rejection_reason %>
</span>
</p>
<% end %>
<%= form.hidden_field(:type, value: "TimeExtensionValidationRequest") %>

<%= form.govuk_date_field :proposed_expiry_date, legend: { text: "Enter the proposed expiry date" }, hint: { text: "The proposed date must be after the planning application's current expiry date" } %>
Expand All @@ -62,4 +47,13 @@
<% end %>
</div>
</div>
</div>
</div>

<div class="govuk-grid-row govuk-!-margin-bottom-4 govuk-!-margin-top-2">
<hr/>
</div>

<%= render(
partial: "activity_log",
locals: { validation_requests: @planning_application.time_extension_validation_requests }
) %>
Original file line number Diff line number Diff line change
@@ -1 +1,17 @@
<div>Hello</div>
<% content_for :page_title do %>
Time extension request - <%= t('page_title') %>
<% end %>

<% add_parent_breadcrumb_link "Home", root_path %>
<% add_parent_breadcrumb_link "Application", planning_application_path(@planning_application) %>
<% content_for :title, "Time extension request" %>

<%= render(
partial: "shared/proposal_header",
locals: { heading: "Time extension request" }
) %>

<%= render(
partial: "activity_log",
locals: { validation_requests: @planning_application.time_extension_validation_requests }
) %>
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<div class="activity-log govuk-!-margin-bottom-6">
<table class="govuk-table govuk-!-margin-bottom-0">
<caption class="govuk-table__caption govuk-table__caption--m">Activity log</caption>
<tbody class="govuk-table__body">
<tr class="govuk-table__row">
<th scope="row" class="govuk-table__header">Completed actions</th>
<td scope="row" class="govuk-table__header">Status</td>
<td scope="row" class="govuk-table__header">User</td>
<td scope="row" class="govuk-table__header">Date</td>
</tr>
<% if validation_requests.any? %>
<% validation_requests.sort_by(&:created_at).reverse.each do |request| %>
<% if request.cancel_reason.present? %>
<tr class="govuk-table__row">
<td scope="row" class="govuk-table__cell">Request was cancelled</td>
<td scope="row" class="govuk-table__cell">Cancelled</td>
<td scope="row" class="govuk-table__cell"><%= request.user.name %></td>
<td scope="row" class="govuk-table__cell"><%= request.cancelled_at.to_fs(:day_month_year_slashes) %></td>
</tr>
<% else %>
<% if request.approved.nil? %>
<tr class="govuk-table__row">
<td scope="row" class="govuk-table__cell">Applicant has not responded</td>
<td scope="row" class="govuk-table__cell">&nbsp</td>
<td scope="row" class="govuk-table__cell">&nbsp</td>
<td scope="row" class="govuk-table__cell">&nbsp</td>
</tr>
<% else %>
<tr class="govuk-table__row">
<td scope="row" class="govuk-table__cell"><%= request.approved? ? "Applicant accepts" : "Request rejected by applicant" %></td>
<td class="govuk-table__cell"><%= request.approved? ? "Approved" : "Rejected" %></td>
<td class="govuk-table__cell">Applicant</td>
<td class="govuk-table__cell"><%= request.created_at.to_fs(:day_month_year_slashes) %></td>
</tr>
<% end %>
<tr class="govuk-table__row">
<td scope="row" class="govuk-table__cell">Request an extension until <%= request.proposed_expiry_date.strftime("%-d %B %Y") %></td>
<td class="govuk-table__cell">Sent</td>
<td class="govuk-table__cell"><%= request.user.name %></td>
<td class="govuk-table__cell"><%= request.created_at.to_fs(:day_month_year_slashes) %></td>
</tr>
<% end %>
<% end %>
<% else %>
<tr class="govuk-table__row">
<td scope="row" class="govuk-table__cell">No time extension requests were made</td>
<td scope="row" class="govuk-table__cell">&nbsp</td>
<td scope="row" class="govuk-table__cell">&nbsp</td>
<td scope="row" class="govuk-table__cell">&nbsp</td>
</tr>
<% end %>
</tbody>
</table>
</div>
Loading

0 comments on commit 61376af

Please sign in to comment.