Abraham Rodriguez

Add oxxo payments

class AddVarStatusTo<%=@model_name.camelize%> < ActiveRecord::Migration
class AddVarStatusTo<%=@model_name.pluralize.camelize%> < ActiveRecord::Migration
def change
add_column :<%=@model_name.pluralize.underscore%>, :var_status, :string, default: 'pending'
add_column :<%=@model_name.pluralize.underscore%>, :barcode_url, :string
end
end
......
require 'rails/generators'
class VarStatusGenerator < Rails::Generators::NamedBase
class VarModelGenerator < Rails::Generators::NamedBase
source_root File.expand_path('../templates', __FILE__)
desc "This generator generates layout file with navigation."
def generate_status
def generate_model
d = Time.now.strftime('%Y%m%d%H%M%S')
@model_name = name
template "var_status.rb",
template "var_model.rb",
"db/migrate/#{d}_add_var_status_to_#{name.pluralize.underscore}.rb"
end
end
......
......@@ -15,7 +15,6 @@ module Var
return { error_message: 'Service is not supported' } unless VALID_SERVICES.include? service
return { error_message: "#{object.class.to_s} doesn't support charges"} unless object.respond_to?(:charge_with)
charge = object.charge_with(service, options)
object.update_columns(var_status: 'payed') unless charge.include? :error_message
return charge
end
end
......@@ -44,15 +43,19 @@ module ActsAsChargeable
end
def charge_with_conekta(options)
if(!options.include? :card_token)
error_message = "Conekta needs a card token sent as a third paramater"
return { error_message: error_message}
end
charge = conekta_charge(options)
object.update_columns(var_status: charge.status)
charge
rescue Conekta::ParameterValidationError, Conekta::ProcessingError, Conekta::Error => e
self.update_columns(var_status: 'failed')
{ error_message: e.message }
end
def conekta_charge(conekta_type)
@charge ||= Conekta::Charge.create({
description: self.sync(:conekta, 'description'),
amount: self.sync(:conekta, 'amount'), currency: "MXN",
reference_id: self.sync(:conekta, 'reference_id'),
card: options[:card_token],
details: {
name: self.sync(:conekta, 'name'),
email: self.sync(:conekta, 'email'),
......@@ -62,10 +65,17 @@ module ActsAsChargeable
unit_price: self.sync(:conekta, 'amount'), quantity: 1,
}]
}
})
rescue Conekta::ParameterValidationError, Conekta::ProcessingError, Conekta::Error => e
self.update_columns(var_status: 'failed')
{ error_message: e.message }
}.merge(conekta_type_of_charge(options)))
end
def conekta_type_of_charge(conekta_type)
if options[:conekta_type] == 'card'
{ card: options[:card_token] }
elsif options[:conekta_type] == 'oxxo'
{ cash: { type: "oxxo",
expires_at: (Time.zone.today + 3.days).strftime('%Y-%m-%d')}
}
end
end
# def charge_with_paypal(options)
......