linjunpop / riif

🏦 A DSL to generate QuickBooks IIF file.
MIT License
46 stars 30 forks source link

Getting nil variable when generating file #12

Closed marlonmantilla closed 10 years ago

marlonmantilla commented 10 years ago

Hi, for some reason I'm getting a nil variable here is my .iif.riif file:

iif.trns do
 @payments.each do |payment|
    row do
      trnsid payment.id
      trnstype 'PAYMENT'
      date payment.paid_at.strftime('%m/%d/%Y')
      name "#{ payment.client.get_initials }"
      amount payment.amount
      docnum payment.id
    end

    spl do
      row do
        splid payment.id
        trnstype 'PAYMENT'
        date payment.paid_at.strftime('%m/%d/%Y')
        amount "-#{ payment.amount }"
        name "#{ payment.client.get_initials }"
        docnum payment.id
      end
    end
 end
end

I'm setting @payments variable inside my action but could not find a way to make it work with this gem.

Will appreciate some directions here...

linjunpop commented 10 years ago

@marlonmantilla Try this:

iif.trns do |trns|
 @payments.each do |payment|
    trns.row do |row|
      row.trnsid payment.id
      row.trnstype 'PAYMENT'
      row.date payment.paid_at.strftime('%m/%d/%Y')
      row.name "#{ payment.client.get_initials }"
      row.amount payment.amount
      row.docnum payment.id
    end

    trns.spl do |spl|
      spl.row do |row|
        row.splid payment.id
        row.trnstype 'PAYMENT'
        row.date payment.paid_at.strftime('%m/%d/%Y')
        row.amount "-#{ payment.amount }"
        row.name "#{ payment.client.get_initials }"
        row.docnum payment.id
      end
    end
 end
end
marlonmantilla commented 10 years ago

@linjunpop Hi thanks for your answer I tried with your code but still getting :

Showing app/views/export_payments/create.iif.riif where line #4 raised:

undefined method `each' for nil:NilClass
Extracted source (around line #4):

1: iif.trns do |trns|
2:  @payments.each do |payment|
3:     trns.row do |row|
4:       row.trnsid payment.id
5:       row.trnstype 'PAYMENT'
6:       row.date payment.paid_at.strftime('%m/%d/%Y')
7:       row.name "#{ payment.client.get_initials }"

My controller looks like this:

respond_to do |format|
       format.iif { render iif: render_to_string, filename: 'payments' }
end

do you have any idea ? , I debug my code and when I print the @payments variable before rendering the view it shows the content but once I try to print the variable inside the block of the gem it doesn't seems to recognize the variable anymore, only outside the iif.trns do |trns| block....

linjunpop commented 10 years ago

@marlonmantilla Yes, because the instance_eval http://apidock.com/ruby/Object/instance_eval

marlonmantilla commented 10 years ago

is there a workaround to make it work ?

linjunpop commented 10 years ago

@marlonmantilla a workaround might be:

payments = @payments
iif.trns do
 payments.each do |payment|
    row do
      trnsid payment.id
      trnstype 'PAYMENT'
      date payment.paid_at.strftime('%m/%d/%Y')
      name "#{ payment.client.get_initials }"
      amount payment.amount
      docnum payment.id
    end

    spl do
      row do
        splid payment.id
        trnstype 'PAYMENT'
        date payment.paid_at.strftime('%m/%d/%Y')
        amount "-#{ payment.amount }"
        name "#{ payment.client.get_initials }"
        docnum payment.id
      end
    end
 end
end

No test, hope it works.

marlonmantilla commented 10 years ago

HI @linjunpop that's great it's working now, thanks!