class Multicash::PaymentOrder

Attributes

currency[R]
date[R]
errors[RW]
ordering_bae[R]
reference[RW]
total_ammount[R]
transfers[R]
transfers_number[RW]

Public Class Methods

new() click to toggle source
# File lib/multicash/payment_order.rb, line 11
def initialize
  @currency = nil
  @date = Time.now.strftime('%y%m%d')
  @errors = ActiveModel::Errors.new(self)
  @ordering_bae = nil
  @transfers = []
  @total_ammount = 0.00
end

Public Instance Methods

<<(transfer) click to toggle source
# File lib/multicash/payment_order.rb, line 20
def << (transfer)
  @transfers << transfer
  transfer.reference_counter = @transfers.size
  @total_ammount += (transfer.ammount.to_f)
  @currency ||= transfer.currency
  @ordering_bae ||= transfer.ordering_bae
end
body() click to toggle source
# File lib/multicash/payment_order.rb, line 52
def body
  lines = []
  transfers.each do |transfer|
    lines << transfer.generate
  end

  lines.join("\x0C")
end
generate() click to toggle source
# File lib/multicash/payment_order.rb, line 61
def generate
  return false if transfers.blank?

  "#{header}#{body}"
end
header() click to toggle source
# File lib/multicash/payment_order.rb, line 28
def header
  first_line = "{1:F01"
  first_line << self.ordering_bae
  first_line << "XXXX0000000000}"
  first_line << "{2:I198"
  first_line << self.ordering_bae
  first_line << "XXXXN0000}"

  "#{first_line}#{header_body}\x0c"
end
header_body() click to toggle source
# File lib/multicash/payment_order.rb, line 39
def header_body
  payment_labels = Multicash::Labels::PaymentOrder.new(self)

  lines = []
  lines << "{4:"
  lines << payment_labels.label_20
  lines << payment_labels.label_12
  lines << payment_labels.label_77E
  lines << payment_labels.label_B1T

  lines.join("\x0D\x0A") + "\x0D\x0A-}"
end
save_to_file() click to toggle source
# File lib/multicash/payment_order.rb, line 67
def save_to_file
  return false unless self.errors.blank?

  bank_file = File.join(Dir.tmpdir, "#{Time.now.strftime('%Y-%m-%d')}.txt")
  File.open(bank_file, "w+", cr_newline: false, external_encoding: Encoding::CP1251) do |file|
    file.write generate.encode("CP1251")
  end

  bank_file
end

Private Instance Methods

valid_transfers() click to toggle source
# File lib/multicash/payment_order.rb, line 80
def valid_transfers
  transfers.each_with_index do |transfer, index|
    self.errors.add("transfer_#{index}", transfer.errors.full_messages) unless transfer.valid?
  end
end