Sha256: 51804e18603c98afc92323d0202ebdcb23ac43e9102117771ca217eb520a62a1

Contents?: true

Size: 1.57 KB

Versions: 6

Compression:

Stored size: 1.57 KB

Contents

module Comee
  module Core
    class CreditNote < ApplicationRecord
      before_validation :generate_credit_note_no, if: proc { |note| note.credit_note_no.nil? }

      belongs_to :invoice
      has_many :credit_note_items
      has_many :credit_note_additional_items

      enum :status, {draft: 0, approved: 1, issued: 2}

      validates :credit_note_no, presence: true, uniqueness: true
      validates :status, presence: true
      validates :total_price, numericality: {greater_than_or_equal_to: 0, allow_nil: true}
      validate :validate_total_price

      def calculate_total_price
        self.total_price = calculate_total
      end

      def calculate_total
        items = CreditNoteItem.where(credit_note_id: id)
        additionals = CreditNoteAdditionalItem.where(credit_note_id: id)
        (items.sum(:total_price) + additionals.sum(:total_price)).round(2)
      end

      def generate_credit_note_no
        year = Date.current.year.to_s
        self.credit_note_no = Util.generate_number("CreditNote", "credit_note_no", year, "-", 100001)
      end

      def validate_total_price
        return unless total_price && invoice

        balance = invoice.total_price - invoice.amount_paid
        errors.add(:total_price, "exceeds invoice unpaid amount") if total_price > balance
      end

      def self.ransackable_attributes(_auth_object = nil)
        %w[
          id
          invoice_id
          credit_note_no
          created_at
          status
        ]
      end

      def self.ransackable_associations(_auth_object = nil)
        ["invoice"]
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
comee_core-0.3.44 app/models/comee/core/credit_note.rb
comee_core-0.3.43 app/models/comee/core/credit_note.rb
comee_core-0.3.42 app/models/comee/core/credit_note.rb
comee_core-0.3.41 app/models/comee/core/credit_note.rb
comee_core-0.3.40 app/models/comee/core/credit_note.rb
comee_core-0.3.39 app/models/comee/core/credit_note.rb