lib/quickbooks/model/preferences.rb
module Quickbooks module Model class Preferences < BaseModel XML_COLLECTION_NODE = "Preferences" XML_NODE = "Preferences" REST_RESOURCE = 'preferences' xml_name XML_NODE def self.create_preference_class(*attrs, &block) ::Class.new(BaseModel) do attrs.each do |a| xml_reader(a.underscore, :from => a.gsub("?", "")) end instance_eval(&block) if block_given? end end PREFERENCE_SECTIONS = { :accounting_info => %w(TrackDepartments DepartmentTerminology ClassTrackingPerTxnLine? ClassTrackingPerTxn? CustomerTerminology), :product_and_services => %w(ForSales? ForPurchase? QuantityWithPriceAndRate? QuantityOnHand?), :vendor_and_purchases => %w(TrackingByCustomer? BillableExpenseTracking? DefaultTerms? DefaultMarkup? POCustomField), :time_tracking => %w(UseServices? BillCustomers? ShowBillRateToAll WorkWeekStartDate MarkTimeEntiresBillable?), :tax => %w(UsingSalesTax? PartnerTaxEnabled?), :currency => %w(MultiCurrencyEnabled? HomeCurrency), :report => %w(ReportBasis) } xml_reader :sales_forms, :from => "SalesFormsPrefs", :as => create_preference_class(*%w( AllowDeposit? AllowDiscount? AllowEstimates? AllowServiceDate? AllowShipping? AutoApplyCredit? CustomField? CustomTxnNumbers? DefaultCustomerMessage DefaultDiscountAccount? DefaultShippingAccount? DefaultTerms EmailCopyToCompany? EstimateMessage ETransactionAttachPDF? ETransactionEnabledStatus ETransactionPaymentEnabled? IPNSupportEnabled? SalesEmailBcc SalesEmailCc UsingPriceLevels? UsingProgressInvoicing? )) { xml_reader :custom_fields, :as => [CustomField], :from => 'CustomField', in: 'CustomField' } PREFERENCE_SECTIONS.each do |section_name, fields| xml_reader section_name, :from => "#{section_name}_prefs".camelize, :as => create_preference_class(*fields) end EmailMessage = create_preference_class("Subject", "Message") EmailMessageContainer = create_preference_class do %w(InvoiceMessage EstimateMessage SalesReceiptMessage StatementMessage).each do |msg| xml_reader msg.underscore, :from => msg, :as => EmailMessage end end xml_reader :email_messages, :from => "EmailMessagesPrefs", as: EmailMessageContainer xml_reader :other_prefs, :from => "OtherPrefs/NameValue", :as => { :key => "Name", :value => "Value" } end end end