refactors signature sheets
This commit is contained in:
@@ -21,7 +21,6 @@ class Admin::SignatureSheetsController < Admin::BaseController
|
||||
|
||||
def show
|
||||
@signature_sheet = SignatureSheet.find(params[:id])
|
||||
@invalid_signatures = @signature_sheet.invalid_signatures
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -2,71 +2,59 @@ class Signature < ActiveRecord::Base
|
||||
belongs_to :signature_sheet
|
||||
belongs_to :user
|
||||
|
||||
validate :in_census
|
||||
validate :not_already_voted
|
||||
validates :document_number, presence: true
|
||||
validates :signature_sheet, presence: true
|
||||
|
||||
scope :valid, -> { where(status: 'verified') }
|
||||
scope :invalid, -> { where.not(status: 'verified') }
|
||||
scope :verified, -> { where(verified: true) }
|
||||
scope :unverified, -> { where(verified: false) }
|
||||
|
||||
def in_census
|
||||
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
|
||||
before_save :verify
|
||||
|
||||
def verify
|
||||
if valid?
|
||||
if verified?
|
||||
assign_vote
|
||||
update_attribute(:status, 'verified')
|
||||
else
|
||||
error = errors.messages[:document_number].first
|
||||
update_attribute(:status, error)
|
||||
verified = true
|
||||
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
|
||||
signable.register_vote(user, "yes", "signature")
|
||||
#Vote.create(votable: signable, voter: user, signature: self)
|
||||
def assign_vote
|
||||
if user_exists?
|
||||
assign_vote_to_user
|
||||
else
|
||||
create_user
|
||||
assign_vote_to_user
|
||||
end
|
||||
end
|
||||
|
||||
def user_exists?
|
||||
user = User.where(document_number: document_number).exists?
|
||||
end
|
||||
def assign_vote_to_user
|
||||
signable.register_vote(user, "yes", "signature")
|
||||
end
|
||||
|
||||
def create_user
|
||||
user = User.where(document_number: document_number, erased_at: Time.now).create
|
||||
end
|
||||
def user_exists?
|
||||
user = User.where(document_number: document_number).exists?
|
||||
end
|
||||
|
||||
def in_census?
|
||||
document_types.any? do |document_type|
|
||||
CensusApi.new.call(document_type, document_number).valid?
|
||||
end
|
||||
end
|
||||
def create_user
|
||||
user = User.where(document_number: document_number, erased_at: Time.now).create
|
||||
end
|
||||
|
||||
def already_voted?
|
||||
signable.voters.where(document_number: document_number).exists?
|
||||
def in_census?
|
||||
document_types.any? do |document_type|
|
||||
CensusApi.new.call(document_type, document_number).valid?
|
||||
end
|
||||
end
|
||||
|
||||
def signable
|
||||
signature_sheet.signable
|
||||
end
|
||||
def signable
|
||||
signature_sheet.signable
|
||||
end
|
||||
|
||||
def document_types
|
||||
%w(1 2 3 4)
|
||||
end
|
||||
def document_types
|
||||
%w(1 2 3 4)
|
||||
end
|
||||
|
||||
end
|
||||
@@ -13,7 +13,7 @@ class SignatureSheet < ActiveRecord::Base
|
||||
validate :signable_found
|
||||
|
||||
def name
|
||||
"#{signable_name} + #{signable_id}"
|
||||
"#{signable_name} #{signable_id}"
|
||||
end
|
||||
|
||||
def signable_name
|
||||
@@ -22,19 +22,13 @@ class SignatureSheet < ActiveRecord::Base
|
||||
|
||||
def verify_signatures
|
||||
parsed_document_numbers.each do |document_number|
|
||||
signature = signatures.new(document_number: document_number)
|
||||
signature.save(validate: false)
|
||||
signature.verify
|
||||
signature = signatures.create(document_number: document_number)
|
||||
end
|
||||
update(processed: true)
|
||||
end
|
||||
|
||||
def invalid_signatures
|
||||
signatures.invalid.group_by(&:status)
|
||||
end
|
||||
|
||||
def parsed_document_numbers
|
||||
document_numbers.split(",")
|
||||
document_numbers.split(/\W+/)
|
||||
end
|
||||
|
||||
def signable_found
|
||||
|
||||
@@ -6,21 +6,21 @@
|
||||
<br/>
|
||||
|
||||
<div>
|
||||
Hay <%= @signature_sheet.signatures.valid.count %> firmas válidas
|
||||
Hay <%= @signature_sheet.signatures.verified.count %> firmas válidas
|
||||
</div>
|
||||
|
||||
<div>
|
||||
Hay <%= @signature_sheet.signatures.invalid.count %> firmas inválidas
|
||||
Hay <%= @signature_sheet.signatures.unverified.count %> firmas inválidas
|
||||
</div>
|
||||
<br/>
|
||||
|
||||
<% if @signature_sheet.signatures.invalid.any? %>
|
||||
<% @invalid_signatures.each do |error, signatures| %>
|
||||
<div><%= error %></div>
|
||||
<% if @signature_sheet.signatures.verified.any? %>
|
||||
<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>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<% unless @signature_sheet.processed? %>
|
||||
|
||||
@@ -3,7 +3,7 @@ class CreateSignatureSheets < ActiveRecord::Migration
|
||||
create_table :signature_sheets do |t|
|
||||
t.references :signable, polymorphic: true
|
||||
t.text :document_numbers
|
||||
t.boolean :processed
|
||||
t.boolean :processed, default: false
|
||||
t.references :author
|
||||
t.timestamps
|
||||
end
|
||||
|
||||
@@ -4,7 +4,7 @@ class CreateSignatures < ActiveRecord::Migration
|
||||
t.references :signature_sheet
|
||||
t.references :user
|
||||
t.string :document_number
|
||||
t.string :status, default: nil
|
||||
t.boolean :verified, default: false
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user