class AbstractResource < ActiveRecord::Base self.abstract_class=true attr_accessor :current_user def self.logit( log_type, msg ) Rails.logger.send(log_type, "[OXEN] #{Time.now} [#{log_type.to_s}] #{msg}") end def logit( log_type, msg ) Rails.logger.send(log_type, "[OXEN] #{Time.now} [#{log_type.to_s}] #{msg}") end # # this generic search needs a bit more work # but it is a ok first draft # def self.search(lot, query, fields="id") fields = fields.join(",") if fields.is_a? Array population = lot.pluck fields elements = query.split(' ') constraints = {and: [], or: [], not: []} elements.each do |element| case element.slice 0 when '+'; constraints[:and] += population.collect{ |k,v| k if v =~ /#{element[1..-1]}/i }.compact.flatten when '-'; constraints[:not] += population.collect{ |k,v| k if v =~ /#{element[1..-1]}/i }.compact.flatten when '*'; constraints[:or] += population.collect{ |k,v| k if b=="#{element[1..-1]}" }.compact.flatten else; constraints[:or] += population.collect{ |k,v| k if v =~ /#{element}/i }.compact.flatten end end population = constraints[:or].empty? ? population.collect{|r| r[0]} : constraints[:or] population = population & constraints[:and] if constraints[:and].any? population -= constraints[:not].uniq if constraints[:not].any? population = [] if constraints[:or].empty? and constraints[:and].empty? lot.where id: population end def self.arrange_array(options={}, hash=nil) hash ||= arrange(options) arr = [] hash.each do |node, children| arr << node arr += arrange_array(options, children) unless children.nil? end arr end def possible_parents prtns = self.arrange_array(:order => 'name') return new_record? ? prtns : prtns - subtree end def resource_name self.class.to_s.underscore.pluralize end # # include Exceptions include PrintEngine # # # # # list_title # def list_title # self.respond_to?( "name") ? self.name : "please define list_title on model (#{self.class.to_s})!" # end # # # implement on relevant models def default_record_template 'accounts/record.html.haml' end def self.default_list_template 'list.html.haml' end def self.default_label_template 'label.html.haml' end # # def print_label options={} # params = {} # params[:print_job] = {} # params[:print_job][:view_template_path] = options[:template] || default_label_template # params[:print_job][:print_driver] = options[:print_driver] || :cab # params[:print_job][:print_format] = options[:print_format] || 'label' # params[:print_job][:paper] = options[:paper] || "Pakkelabel" # params[:printer_name] = options[:printer_name] # params[:user] = options[:user] # self.class.print [self], params # end # def print_record(options={}) params = {} params[:context] = options[:context] options = options[:params] params[:print_job] = {} params[:print_job][:download] = options[:download] || false params[:print_job][:print_driver] = options[:print_driver] || :pdf params[:print_job][:print_format] = options[:print_format] || 'sheet' params[:print_job][:paper] = options[:paper] || "A4" params[:print_job][:view_template_path] = options[:template] || (options[:paper]!="A4" ? self.send("default_#{options[:paper]}_template") : default_record_template) params[:printer_name] = options[:printer_name] params[:user] = options[:user] pj = self.class.print [self], params end # def self.print_list(options={}) params = {} params[:print_job] = {} params[:print_job][:download] = options[:download] || false params[:print_job][:print_driver] = options[:print_driver] || :pdf params[:print_job][:print_format] = options[:print_format] || 'list' params[:print_job][:paper] = options[:paper] || "A4" params[:print_job][:view_template_path] = options[:template] || self.default_list_template params[:printer_name] = options[:printer_name] params[:user] = options[:user] self.print options[:resources], params end # # # add the child to an association of children # !! remember to implement before_save action on *able tables to meet further foreign_key conditions like account_id, etc def attach parent # the ordinary *able table parent.send( self.class.to_s.underscore.pluralize) << self # case child.class.to_s # when "Event","WageEvent" # Eventable.create( event: child, eventable: self) unless child.eventables.include?( self) # when "Printer" # Printable.create( printer: child, printable: self) unless child.printables.include?( self) # else # children = eval child.class.to_s.underscore.pluralize # children << child # end rescue false end # # # remove the child from an association of children def detach parent # the ordinary *able table parent.send( self.class.to_s.underscore.pluralize).delete self # case child.class.to_s # when "Event","WageEvent" # ev = Eventable.where( event: child, eventable: self) # ev.delete_all # when "Printer" # pr = Printable.where( printer: child, printable: self) # pr.delete_all # else # children = eval child.class.to_s.downcase.pluralize # children.delete child # end rescue false end def activate update_attributes active: true end def deactivate update_attributes active: false end end