Abraham Rodriguez

Add oxxo payments

1 -class AddVarStatusTo<%=@model_name.camelize%> < ActiveRecord::Migration 1 +class AddVarStatusTo<%=@model_name.pluralize.camelize%> < ActiveRecord::Migration
2 def change 2 def change
3 add_column :<%=@model_name.pluralize.underscore%>, :var_status, :string, default: 'pending' 3 add_column :<%=@model_name.pluralize.underscore%>, :var_status, :string, default: 'pending'
4 + add_column :<%=@model_name.pluralize.underscore%>, :barcode_url, :string
4 end 5 end
5 end 6 end
......
1 require 'rails/generators' 1 require 'rails/generators'
2 2
3 -class VarStatusGenerator < Rails::Generators::NamedBase 3 +class VarModelGenerator < Rails::Generators::NamedBase
4 source_root File.expand_path('../templates', __FILE__) 4 source_root File.expand_path('../templates', __FILE__)
5 desc "This generator generates layout file with navigation." 5 desc "This generator generates layout file with navigation."
6 6
7 - def generate_status 7 + def generate_model
8 d = Time.now.strftime('%Y%m%d%H%M%S') 8 d = Time.now.strftime('%Y%m%d%H%M%S')
9 @model_name = name 9 @model_name = name
10 - template "var_status.rb", 10 + template "var_model.rb",
11 "db/migrate/#{d}_add_var_status_to_#{name.pluralize.underscore}.rb" 11 "db/migrate/#{d}_add_var_status_to_#{name.pluralize.underscore}.rb"
12 end 12 end
13 end 13 end
......
...@@ -15,7 +15,6 @@ module Var ...@@ -15,7 +15,6 @@ module Var
15 return { error_message: 'Service is not supported' } unless VALID_SERVICES.include? service 15 return { error_message: 'Service is not supported' } unless VALID_SERVICES.include? service
16 return { error_message: "#{object.class.to_s} doesn't support charges"} unless object.respond_to?(:charge_with) 16 return { error_message: "#{object.class.to_s} doesn't support charges"} unless object.respond_to?(:charge_with)
17 charge = object.charge_with(service, options) 17 charge = object.charge_with(service, options)
18 - object.update_columns(var_status: 'payed') unless charge.include? :error_message
19 return charge 18 return charge
20 end 19 end
21 end 20 end
...@@ -44,15 +43,19 @@ module ActsAsChargeable ...@@ -44,15 +43,19 @@ module ActsAsChargeable
44 end 43 end
45 44
46 def charge_with_conekta(options) 45 def charge_with_conekta(options)
47 - if(!options.include? :card_token) 46 + charge = conekta_charge(options)
48 - error_message = "Conekta needs a card token sent as a third paramater" 47 + object.update_columns(var_status: charge.status)
49 - return { error_message: error_message} 48 + charge
49 + rescue Conekta::ParameterValidationError, Conekta::ProcessingError, Conekta::Error => e
50 + self.update_columns(var_status: 'failed')
51 + { error_message: e.message }
50 end 52 end
53 +
54 + def conekta_charge(conekta_type)
51 @charge ||= Conekta::Charge.create({ 55 @charge ||= Conekta::Charge.create({
52 description: self.sync(:conekta, 'description'), 56 description: self.sync(:conekta, 'description'),
53 amount: self.sync(:conekta, 'amount'), currency: "MXN", 57 amount: self.sync(:conekta, 'amount'), currency: "MXN",
54 reference_id: self.sync(:conekta, 'reference_id'), 58 reference_id: self.sync(:conekta, 'reference_id'),
55 - card: options[:card_token],
56 details: { 59 details: {
57 name: self.sync(:conekta, 'name'), 60 name: self.sync(:conekta, 'name'),
58 email: self.sync(:conekta, 'email'), 61 email: self.sync(:conekta, 'email'),
...@@ -62,10 +65,17 @@ module ActsAsChargeable ...@@ -62,10 +65,17 @@ module ActsAsChargeable
62 unit_price: self.sync(:conekta, 'amount'), quantity: 1, 65 unit_price: self.sync(:conekta, 'amount'), quantity: 1,
63 }] 66 }]
64 } 67 }
65 - }) 68 + }.merge(conekta_type_of_charge(options)))
66 - rescue Conekta::ParameterValidationError, Conekta::ProcessingError, Conekta::Error => e 69 + end
67 - self.update_columns(var_status: 'failed') 70 +
68 - { error_message: e.message } 71 + def conekta_type_of_charge(conekta_type)
72 + if options[:conekta_type] == 'card'
73 + { card: options[:card_token] }
74 + elsif options[:conekta_type] == 'oxxo'
75 + { cash: { type: "oxxo",
76 + expires_at: (Time.zone.today + 3.days).strftime('%Y-%m-%d')}
77 + }
78 + end
69 end 79 end
70 80
71 # def charge_with_paypal(options) 81 # def charge_with_paypal(options)
......