lib/xeroizer/models/credit_note.rb in xeroizer-2.20.0 vs lib/xeroizer/models/credit_note.rb in xeroizer-3.0.0

- old
+ new

@@ -1,14 +1,14 @@ module Xeroizer module Record - + class CreditNoteModel < BaseModel - + set_permissions :read, :write, :update - + include AttachmentModel::Extensions - + public # Retrieve the PDF version of the credit matching the `id`. # @param [String] id invoice's ID. # @param [String] filename optional filename to store the PDF in instead of returning the data. @@ -19,37 +19,37 @@ nil else pdf_data end end - + end - + class CreditNote < Base - + CREDIT_NOTE_STATUS = { 'AUTHORISED' => 'Approved credit_notes awaiting payment', 'DELETED' => 'Draft credit_notes that are deleted', 'DRAFT' => 'CreditNotes saved as draft or entered via API', 'PAID' => 'CreditNotes approved and fully paid', 'SUBMITTED' => 'CreditNotes entered by an employee awaiting approval', 'VOIDED' => 'Approved credit_notes that are voided' } unless defined?(CREDIT_NOTE_STATUS) CREDIT_NOTE_STATUSES = CREDIT_NOTE_STATUS.keys.sort - + CREDIT_NOTE_TYPE = { 'ACCRECCREDIT' => 'Accounts Receivable', 'ACCPAYCREDIT' => 'Accounts Payable' } unless defined?(CREDIT_NOTE_TYPE) CREDIT_NOTE_TYPES = CREDIT_NOTE_TYPE.keys.sort include Attachment::Extensions - + set_primary_key :credit_note_id set_possible_primary_keys :credit_note_id, :credit_note_number list_contains_summary_only true - + guid :credit_note_id string :credit_note_number string :reference guid :branding_theme_id string :type @@ -70,43 +70,43 @@ boolean :has_attachments belongs_to :contact has_many :line_items has_many :allocations - + validates_inclusion_of :type, :in => CREDIT_NOTE_TYPES validates_inclusion_of :status, :in => CREDIT_NOTE_STATUSES, :allow_blanks => true validates_associated :contact validates_associated :line_items validates_associated :allocations, :allow_blanks => true - + public - + # Access the contact name without forcing a download of # an incomplete, summary credit note. def contact_name attributes[:contact] && attributes[:contact][:name] end # Access the contact ID without forcing a download of an # incomplete, summary credit note. def contact_id attributes[:contact] && attributes[:contact][:contact_id] - end - + end + # Swallow assignment of attributes that should only be calculated automatically. def sub_total=(value); raise SettingTotalDirectlyNotSupported.new(:sub_total); end def total_tax=(value); raise SettingTotalDirectlyNotSupported.new(:total_tax); end def total=(value); raise SettingTotalDirectlyNotSupported.new(:total); end - + # Calculate sub_total from line_items. def sub_total(always_summary = false) if !always_summary && (new_record? || (!new_record? && line_items && line_items.size > 0)) overall_sum = (line_items || []).inject(BigDecimal('0')) { | sum, line_item | sum + line_item.line_amount } - + # If the default amount types are inclusive of 'tax' then remove the tax amount from this sub-total. - overall_sum -= total_tax if line_amount_types == 'Inclusive' + overall_sum -= total_tax if line_amount_types == 'Inclusive' overall_sum else attributes[:sub_total] end end @@ -126,17 +126,17 @@ sub_total + total_tax else attributes[:total] end end - + # Retrieve the PDF version of this credit note. # @param [String] filename optional filename to store the PDF in instead of returning the data. def pdf(filename = nil) parent.pdf(id, filename) end - def save + def save! # Calling parse_save_response() on the credit note will wipe out # the allocations, so we have to manually preserve them. allocations_backup = self.allocations if super self.allocations = allocations_backup