#!/usr/bin/env ruby
# encoding: utf-8
# Html::State::Invoices -- ydim -- 13.01.2006 -- hwyss@ywesee.com
require 'ydim/html/state/global_predefine'
require 'ydim/html/view/invoices'
module YDIM
module Html
module State
class AjaxInvoices < SBSM::State
VOLATILE = true
VIEW = Html::View::InvoiceList
end
module AjaxInvoiceMethods
def ajax_invoices(model=@model)
keys = [:payment_received, :unique_id, :deleted]
input = user_input(keys, [:unique_id])
id = input.delete(:unique_id).to_i
if(!error? && !input.empty? && (invoice = @session.invoice(id)))
input.each { |key, val|
invoice.send("#{key}=", val)
}
invoice.odba_store
model.delete_if { |info| info.unique_id == id }
end
AjaxInvoices.new(@session, model)
end
def ajax_status
AjaxInvoices.new(@session, load_invoices)
end
def currency_convert(invoices)
currency = Html.config.currency
converter = @session.currency_converter
invoices.each { |inv|
if(icur = inv.currency)
inv.total_netto = converter.convert(inv.total_netto, icur, currency)
inv.total_brutto = converter.convert(inv.total_brutto, icur, currency)
end
inv.currency = currency
}
end
def sort_invoices(invoices)
null_date = Date.new(9999)
invoices.sort_by { |inv|
[null_date - (inv.date || null_date), inv.description.to_s]
}
end
end
class Invoices < Global
include AjaxInvoiceMethods
VIEW = Html::View::Invoices
def init
super
invs = @session.invoice_infos('is_open')
invs.concat @session.invoice_infos('is_due')
@model = sort_invoices(currency_convert(invs))
end
def ajax_collect_garbage
@session.collect_garbage
AjaxInvoices.new(@session, [])
end
private
def load_invoices
@model = sort_invoices(currency_convert(@session.invoices))
end
end
end
end
end