diff --git a/app/controllers/verification/letter_controller.rb b/app/controllers/verification/letter_controller.rb new file mode 100644 index 000000000..eb91ebe6f --- /dev/null +++ b/app/controllers/verification/letter_controller.rb @@ -0,0 +1,32 @@ +class Verification::LetterController < ApplicationController + before_action :authenticate_user! + before_action :verify_resident! + before_action :verify_phone_or_email! + skip_authorization_check + + def new + @letter = Letter.new(user: current_user) + end + + def create + @letter = Letter.new(user: current_user) + if @letter.save + redirect_to account_path, notice: t('verification.letter.create.flash.success') + else + flash.now.alert = t('verification.letter.create.alert.failure') + render :new + end + end + + private + + def letter_params + params.require(:letter).permit() + end + + def verify_phone_or_email! + unless current_user.confirmed_phone? + redirect_to verified_user_path, alert: t('verification.letter.alert.unconfirmed_personal_data') + end + end +end \ No newline at end of file diff --git a/app/models/address.rb b/app/models/address.rb new file mode 100644 index 000000000..2c0c20b88 --- /dev/null +++ b/app/models/address.rb @@ -0,0 +1,3 @@ +class Address < ActiveRecord::Base + belongs_to :user +end diff --git a/app/models/letter.rb b/app/models/letter.rb new file mode 100644 index 000000000..58e326d58 --- /dev/null +++ b/app/models/letter.rb @@ -0,0 +1,53 @@ +class Letter + include ActiveModel::Model + + attr_accessor :user, :address + + validates :user, presence: true + validates :address, presence: true + validate :correct_address + + def initialize(attrs={}) + @user = attrs[:user] + end + + def save + valid? && + letter_requested! && + update_user_address + end + + def address + @address ||= UserApi.new(user).address + end + + def letter_requested! + user.update(letter_requested_at: Time.now) + end + + def update_user_address + user.address = Address.new(parsed_address) + user.save + end + + def correct_address + errors.add(:address, "Address not found") unless address.present? + end + + def parsed_address + { postal_code: address[:codigo_postal], + street: address[:nombre_via], + street_type: address[:sigla_via], + number: address[:numero_via], + number_type: address[:nominal_via], + letter: address[:letra_via], + portal: address[:portal], + stairway: address[:escalera], + floor: address[:planta], + door: address[:puerta], + km: address[:km], + neighbourhood: address[:nombre_barrio], + district: address[:nombre_distrito] } + end + +end \ No newline at end of file diff --git a/app/models/user.rb b/app/models/user.rb index d7b77a7e0..407016ee3 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -11,6 +11,7 @@ class User < ActiveRecord::Base acts_as_voter acts_as_paranoid column: :hidden_at + has_one :address has_one :administrator has_one :moderator has_one :organization diff --git a/app/views/verification/letter/new.html.erb b/app/views/verification/letter/new.html.erb new file mode 100644 index 000000000..ab1d3070e --- /dev/null +++ b/app/views/verification/letter/new.html.erb @@ -0,0 +1,15 @@ +