refactors signature sheets

This commit is contained in:
rgarcia
2016-12-20 16:46:08 +01:00
parent 7ec6a874b6
commit 4eb700e3d4
6 changed files with 48 additions and 67 deletions

View File

@@ -21,7 +21,6 @@ class Admin::SignatureSheetsController < Admin::BaseController
def show def show
@signature_sheet = SignatureSheet.find(params[:id]) @signature_sheet = SignatureSheet.find(params[:id])
@invalid_signatures = @signature_sheet.invalid_signatures
end end
private private

View File

@@ -2,71 +2,59 @@ class Signature < ActiveRecord::Base
belongs_to :signature_sheet belongs_to :signature_sheet
belongs_to :user belongs_to :user
validate :in_census validates :document_number, presence: true
validate :not_already_voted validates :signature_sheet, presence: true
scope :valid, -> { where(status: 'verified') } scope :verified, -> { where(verified: true) }
scope :invalid, -> { where.not(status: 'verified') } scope :unverified, -> { where(verified: false) }
def in_census before_save :verify
return true if user_exists?
errors.add(:document_number, :not_in_census) unless in_census?
end
def not_already_voted
errors.add(:document_number, :already_voted) if already_voted?
end
def verify def verify
if valid? if verified?
assign_vote assign_vote
update_attribute(:status, 'verified') verified = true
else
error = errors.messages[:document_number].first
update_attribute(:status, error)
end end
end end
private def verified?
user_exists? || in_census?
end
def assign_vote
if user_exists?
assign_vote_to_user
else
create_user
assign_vote_to_user
end
end
def assign_vote_to_user def assign_vote
signable.register_vote(user, "yes", "signature") if user_exists?
#Vote.create(votable: signable, voter: user, signature: self) assign_vote_to_user
else
create_user
assign_vote_to_user
end end
end
def user_exists? def assign_vote_to_user
user = User.where(document_number: document_number).exists? signable.register_vote(user, "yes", "signature")
end end
def create_user def user_exists?
user = User.where(document_number: document_number, erased_at: Time.now).create user = User.where(document_number: document_number).exists?
end end
def in_census? def create_user
document_types.any? do |document_type| user = User.where(document_number: document_number, erased_at: Time.now).create
CensusApi.new.call(document_type, document_number).valid? end
end
end
def already_voted? def in_census?
signable.voters.where(document_number: document_number).exists? document_types.any? do |document_type|
CensusApi.new.call(document_type, document_number).valid?
end end
end
def signable def signable
signature_sheet.signable signature_sheet.signable
end end
def document_types def document_types
%w(1 2 3 4) %w(1 2 3 4)
end end
end end

View File

@@ -13,7 +13,7 @@ class SignatureSheet < ActiveRecord::Base
validate :signable_found validate :signable_found
def name def name
"#{signable_name} + #{signable_id}" "#{signable_name} #{signable_id}"
end end
def signable_name def signable_name
@@ -22,19 +22,13 @@ class SignatureSheet < ActiveRecord::Base
def verify_signatures def verify_signatures
parsed_document_numbers.each do |document_number| parsed_document_numbers.each do |document_number|
signature = signatures.new(document_number: document_number) signature = signatures.create(document_number: document_number)
signature.save(validate: false)
signature.verify
end end
update(processed: true) update(processed: true)
end end
def invalid_signatures
signatures.invalid.group_by(&:status)
end
def parsed_document_numbers def parsed_document_numbers
document_numbers.split(",") document_numbers.split(/\W+/)
end end
def signable_found def signable_found

View File

@@ -6,21 +6,21 @@
<br/> <br/>
<div> <div>
Hay <%= @signature_sheet.signatures.valid.count %> firmas válidas Hay <%= @signature_sheet.signatures.verified.count %> firmas válidas
</div> </div>
<div> <div>
Hay <%= @signature_sheet.signatures.invalid.count %> firmas inválidas Hay <%= @signature_sheet.signatures.unverified.count %> firmas inválidas
</div> </div>
<br/> <br/>
<% if @signature_sheet.signatures.invalid.any? %> <% if @signature_sheet.signatures.verified.any? %>
<% @invalid_signatures.each do |error, signatures| %>
<div><%= error %></div>
<div> <div>
<%= signatures.map(&:document_number).join(",") %> EL PADRÓN NO PUDO VERIFICAR LA INFORMACIÓN
</div>
<div>
<%= @signature_sheet.signatures.unverified.map(&:document_number).join(",") %>
</div> </div>
<% end %>
<% end %> <% end %>
<% unless @signature_sheet.processed? %> <% unless @signature_sheet.processed? %>

View File

@@ -3,7 +3,7 @@ class CreateSignatureSheets < ActiveRecord::Migration
create_table :signature_sheets do |t| create_table :signature_sheets do |t|
t.references :signable, polymorphic: true t.references :signable, polymorphic: true
t.text :document_numbers t.text :document_numbers
t.boolean :processed t.boolean :processed, default: false
t.references :author t.references :author
t.timestamps t.timestamps
end end

View File

@@ -4,7 +4,7 @@ class CreateSignatures < ActiveRecord::Migration
t.references :signature_sheet t.references :signature_sheet
t.references :user t.references :user
t.string :document_number t.string :document_number
t.string :status, default: nil t.boolean :verified, default: false
t.timestamps t.timestamps
end end
end end