Class: UnlockMoip::ContributionsController

Inherits:
ApplicationController
  • Object
show all
Defined in:
app/controllers/unlock_moip/contributions_controller.rb

Instance Method Summary collapse

Instance Method Details

#createObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'app/controllers/unlock_moip/contributions_controller.rb', line 5

def create

  # Getting the date from Pickadate
  if params[:pickadate_birthdate_submit]
    params[:contribution][:user_attributes][:birthdate] = params[:pickadate_birthdate_submit]
  end
  
  if create_contribution

    data = {}
    # Storing the customer_code and subscription_code
    data["customer_code"] = @contribution.customer_code
    data["subscription_code"] = @contribution.subscription_code
    # Storing user information
    data["email"] = @contribution.user.email
    data["full_name"] = @contribution.user.full_name
    data["document"] = @contribution.user.document
    data["phone_area_code"] = @contribution.user.phone_area_code
    data["phone_number"] = @contribution.user.phone_number
    data["birthdate"] = @contribution.user.birthdate
    data["address_street"] = @contribution.user.address_street
    data["address_number"] = @contribution.user.address_number
    data["address_complement"] = @contribution.user.address_complement
    data["address_district"] = @contribution.user.address_district
    data["address_city"] = @contribution.user.address_city
    data["address_state"] = @contribution.user.address_state
    data["address_zipcode"] = @contribution.user.address_zipcode
    # Saving gateway_data
    @contribution.update gateway_data: data

    # Creating the plan, if needed
    begin
      response = Moip::Assinaturas::Plan.details(@contribution.plan_code, @contribution.moip_auth)
    rescue Moip::Assinaturas::WebServerResponseError => e
      if @contribution.gateway.sandbox?
        @contribution.errors.add(:base, "Parece que este Unlock não está autorizado a utilizar o ambiente de Sandbox do Moip Assinaturas.#{ ' Você já solicitou acesso ao Moip Assinaturas? Verifique também se configurou o Token e a Chave de API.' if @initiative.user == current_user }")
      else
        @contribution.errors.add(:base, "Parece que este Unlock não está autorizado a utilizar o ambiente de produção do Moip Assinaturas.#{ ' Você já homologou sua conta para produção no Moip Assinaturas? Verifique também se configurou o Token e a Chave de API.' if @initiative.user == current_user }")
      end
      return render '/initiatives/contributions/new'
    rescue => e
      @contribution.errors.add(:base, "Ocorreu um erro de conexão ao verificar o plano de assinaturas no Moip. Por favor, tente novamente.")
      return render '/initiatives/contributions/new'
    end
    unless response[:success]
      plan = {
        code: @contribution.plan_code,
        name: @contribution.plan_name,
        amount: (@contribution.value * 100).to_i
      }
      begin
        response = Moip::Assinaturas::Plan.create(plan, @contribution.moip_auth)
      rescue
        @contribution.errors.add(:base, "Ocorreu um erro de conexão ao criar o plano de assinaturas no Moip. Por favor, tente novamente.")
        return render '/initiatives/contributions/new'
      end
      unless response[:success]
        if response[:errors] && response[:errors].kind_of?(Array)
          response[:errors].each do |error|
            @contribution.errors.add(:base, "#{response[:message]} (Moip). #{error[:description]}")
          end
        else
          @contribution.errors.add(:base, "Ocorreu um erro ao criar o plano de assinaturas no Moip. Por favor, tente novamente.")
        end
        return render '/initiatives/contributions/new'
      end
    end

    # Creating the client, if needed
    customer = {
      code: @contribution.customer_code,
      email: @contribution.user.email,
      fullname: @contribution.user.full_name,
      cpf: @contribution.user.document,
      phone_area_code: @contribution.user.phone_area_code,
      phone_number: @contribution.user.phone_number,
      birthdate_day: @contribution.user.birthdate.strftime('%d'),
      birthdate_month: @contribution.user.birthdate.strftime('%m'),
      birthdate_year: @contribution.user.birthdate.strftime('%Y'),
      address: {
        street: @contribution.user.address_street,
        number: @contribution.user.address_number,
        complement: @contribution.user.address_complement,
        district: @contribution.user.address_district,
        city: @contribution.user.address_city,
        state: @contribution.user.address_state,
        country: "BRA",
        zipcode: @contribution.user.address_zipcode
      }
    }
    begin
      response = Moip::Assinaturas::Customer.details(@contribution.customer_code, @contribution.moip_auth)
    rescue
      @contribution.errors.add(:base, "Ocorreu um erro de conexão ao verificar o cadastro de cliente no Moip. Por favor, tente novamente.")
      return render '/initiatives/contributions/new'
    end
    if response[:success]
      begin
        response = Moip::Assinaturas::Customer.update(@contribution.customer_code, customer, @contribution.moip_auth)
        unless response[:success]
          if response[:errors] && response[:errors].kind_of?(Array)
            response[:errors].each do |error|
              @contribution.errors.add(:base, "#{response[:message]} (Moip). #{error[:description]}")
            end
          else
            @contribution.errors.add(:base, "Ocorreu um erro ao atualizar o cadastro de cliente no Moip. Por favor, tente novamente.")
          end
          return render '/initiatives/contributions/new'
        end
      rescue
        @contribution.errors.add(:base, "Ocorreu um erro de conexão ao atualizar o cadastro de cliente no Moip. Por favor, tente novamente.")
        return render '/initiatives/contributions/new'
      end
    else
      begin
        response = Moip::Assinaturas::Customer.create(customer, new_vault = false, @contribution.moip_auth)
      rescue
        @contribution.errors.add(:base, "Ocorreu um erro de conexão ao realizar o cadastro de cliente no Moip. Por favor, tente novamente.")
        return render '/initiatives/contributions/new'
      end
      unless response[:success]
        if response[:errors] && response[:errors].kind_of?(Array)
          response[:errors].each do |error|
            @contribution.errors.add(:base, "#{response[:message]} (Moip). #{error[:description]}")
          end
        else
          @contribution.errors.add(:base, "Ocorreu um erro ao realizar o cadastro de cliente no Moip. Por favor, tente novamente.")
        end
        return render '/initiatives/contributions/new'
      end
    end

    flash[:success] = "Apoio iniciado com sucesso! Agora é só realizar o pagamento :D"
    return redirect_to edit_moip_contribution_path(@contribution)

  end
  
end