Never done recurring invoices before so wondering if this logic makes sense: Cron job runs at 4am each night and runs some ruby like this: pseudocode: For Each Invoice.due_date == Date.today Invoice.new(:due_date => Date.today + 30) Invoice.Save End --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Yeah, running a nightly cron job to create invoices make plenty of sense. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
This sounds good. Although for clarity, you might use "generated_date"
in addition to "due_date". It seems odd to have the date the invoice
is due is the date it''s created. (actually, the created_at would be
the generated date so it''s probably redundant)
I would keep the logic of an "Invoice" separate from a
"Schedule". So
maybe you have a ScheduleInvoice object that holds a "next_run" field.
Then, to add an invoice to the system, you''d create a new
ScheduleInvoice object and set the next_run field to be when it should
be generated (or if generated when created, then the next_run would be
a month later).
I could see, then, some simple code running in a cron:
ScheduleInvoice.find_all_by_next_run(Date.today).each do |schedule|
invoice = Invoice.new(:due_date => 30.days.from_now)
if invoice.save
schedule.next_run = 1.month.from_now
else
# handle the failure
end
end
At least, that''s how I''d do it. In fact, I''ll need to
soon for a
project I''m building. Good to think through this a little.
-Danimal
On Mar 28, 9:59 am, Keaja
<jasonmw...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> Never done recurring invoices before so wondering if this logic makes
> sense:
>
> Cron job runs at 4am each night and runs some ruby like this:
>
> pseudocode:
>
> For Each Invoice.due_date == Date.today
> Invoice.new(:due_date => Date.today + 30)
> Invoice.Save
> End
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Your idea of a next_run is exactly what I needed. I built a cron job
and it is working but I was afraid of having redundant invoices made
incase, for some reason the cron job ran twice a day or something.
This is what my cron job looks like below but I think I will alter it
to include some next_run logic.
@invoices = Invoice.find(:all)
@invoices.each do |invoice|
if invoice.due_date == Date.today # and the user does not have
an invoice due in 30 days
@invoice = Invoice.new
@invoice.generated_date = Date.today
@invoice.amount = "14.95"
@invoice.due_date = 1.month.from_now
@invoice.status = "Due"
@invoice.user_id = invoice.user_id
@invoice.save
puts "Invoice #{@invoice.id} created for #
{invoice.user.first_name} #{invoice.user.last_name} due #
{@invoice.due_date}"
end
end
Thanks
Jason
On Mar 31, 2008, at 7:40 AM, Danimal wrote:
This sounds good. Although for clarity, you might use "generated_date"
in addition to "due_date". It seems odd to have the date the invoice
is due is the date it''s created. (actually, the created_at would be
the generated date so it''s probably redundant)
I would keep the logic of an "Invoice" separate from a
"Schedule". So
maybe you have a ScheduleInvoice object that holds a "next_run" field.
Then, to add an invoice to the system, you''d create a new
ScheduleInvoice object and set the next_run field to be when it should
be generated (or if generated when created, then the next_run would be
a month later).
I could see, then, some simple code running in a cron:
ScheduleInvoice.find_all_by_next_run(Date.today).each do |schedule|
invoice = Invoice.new(:due_date => 30.days.from_now)
if invoice.save
schedule.next_run = 1.month.from_now
else
# handle the failure
end
end
At least, that''s how I''d do it. In fact, I''ll need to
soon for a
project I''m building. Good to think through this a little.
-Danimal
On Mar 28, 9:59 am, Keaja
<jasonmw...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> Never done recurring invoices before so wondering if this logic makes
> sense:
>
> Cron job runs at 4am each night and runs some ruby like this:
>
> pseudocode:
>
> For Each Invoice.due_date == Date.today
> Invoice.new(:due_date => Date.today + 30)
> Invoice.Save
> End
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---