Skip to content

Commit

Permalink
Refacto api_impot_particulier_scope_validation method
Browse files Browse the repository at this point in the history
  • Loading branch information
Isalafont committed Oct 16, 2024
1 parent e194cf7 commit e85b958
Showing 1 changed file with 42 additions and 17 deletions.
59 changes: 42 additions & 17 deletions backend/app/models/concerns/dgfip_validation_methods.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ def no_need_to_select_scopes?
end

def rgpd_general_agreement_validation
unless additional_content&.fetch("rgpd_general_agreement", false)
errors.add(:additional_content, :invalid, message: "Vous devez attester que votre organisation déclarera à la DGFiP l'accomplissement des formalités en terme de protection des données")
end
return if additional_content&.fetch("rgpd_general_agreement", false)

errors.add(:additional_content, :invalid, message: "Vous devez attester que votre organisation déclarera à la DGFiP l'accomplissement des formalités en terme de protection des données")

end

def api_impot_particulier_scope_validation
Expand All @@ -23,23 +24,16 @@ def api_impot_particulier_scope_validation
dgfip_PaDeduc_EnfMaj dgfip_PaDeduc_Autres dgfip_EpargRetrDeduc dgfip_IndLep
]

if (scopes & %w[dgfip_annee_n_moins_1 dgfip_annee_n_moins_2 dgfip_annee_n_moins_3 dgfip_annee_n_moins_2_si_indispo_n_moins_1]).empty?
errors.add(:scopes, :invalid, message: "Vous devez cocher au moins une année de revenus souhaitée avant de continuer")
end

if (scopes & %w[dgfip_annee_n_moins_2_si_indispo_n_moins_1 dgfip_annee_df_au_3112_si_deces_ctb_mp]).present? && (scopes & incompatible_scopes).present?
errors.add(:scopes, :invalid, message: "Des données incompatibles entre elles ont été cochées. Pour connaître les modalités d’appel et de réponse de l’API Impôt particulier ainsi que les données proposées, vous pouvez consulter le guide de présentation de cette API dans la rubrique « Les données nécessaires > Comment choisir les données »")
end

if (scopes & %w[dgfip_annee_n_moins_2_si_indispo_n_moins_1]).present? && (scopes & %w[dgfip_annee_n_moins_1 dgfip_annee_n_moins_2 dgfip_annee_n_moins_3]).present?
errors.add(:scopes, :invalid, message: "Vous ne pouvez pas sélectionner la donnée 'avant dernière année de revenu, si la dernière année de revenu est indisponible' avec d'autres années de revenus")
end
validate_revenue_years_selection
validate_incompatible_scopes(incompatible_scopes)
validate_exclusive_years_scope_combination
end

def api_impot_particulier_acces_validation
unless additional_content.any? { |k, v| v && %w[acces_spi acces_etat_civil].include?(k) }
errors.add(:scopes, :invalid, message: "Vous devez cocher au moins une modalité d’accès avant de continuer")
end
return if additional_content.any? { |k, v| v && %w[acces_spi acces_etat_civil].include?(k) }

errors.add(:scopes, :invalid, message: "Vous devez cocher au moins une modalité d’accès avant de continuer")

end

def production_form_validation
Expand All @@ -61,4 +55,35 @@ def production_form_validation
errors.add(:cgu_approved, :invalid, message: "Vous devez valider les modalités d’utilisation avant de continuer") unless cgu_approved?
errors.add(:dpo_is_informed, :invalid, message: "Vous devez confirmer avoir informé le DPD de votre organisation avant de continuer") unless dpo_is_informed?
end

private

def validate_revenue_years_selection
selected_years = %w[
dgfip_annee_n_moins_1 dgfip_annee_n_moins_2 dgfip_annee_n_moins_3
dgfip_annee_n_moins_2_si_indispo_n_moins_1
]

return unless (scopes & selected_years).empty?

errors.add(:scopes, :invalid, message: "Vous devez cocher au moins une année de revenus souhaitée avant de continuer")
end

def validate_incompatible_scopes(incompatible_scopes)
special_scopes = %w[
dgfip_annee_n_moins_2_si_indispo_n_moins_1 dgfip_annee_df_au_3112_si_deces_ctb_mp
]

return unless (scopes & special_scopes).present? && (scopes & incompatible_scopes).present?

errors.add(:scopes, :invalid, message: "Des données incompatibles entre elles ont été cochées. Pour connaître les modalités d’appel et de réponse de l’API Impôt particulier ainsi que les données proposées, vous pouvez consulter le guide de présentation de cette API dans la rubrique « Les données nécessaires > Comment choisir les données »")

end

def validate_exclusive_years_scope_combination
if (scopes & %w[dgfip_annee_n_moins_2_si_indispo_n_moins_1]).present? &&
(scopes & %w[dgfip_annee_n_moins_1 dgfip_annee_n_moins_2 dgfip_annee_n_moins_3]).present?
errors.add(:scopes, :invalid, message: "Vous ne pouvez pas sélectionner la donnée 'avant dernière année de revenu, si la dernière année de revenu est indisponible' avec d'autres années de revenus")
end
end
end

0 comments on commit e85b958

Please sign in to comment.