class PS2Format::Operation

Constants

AMOUNT_FIELD_SIZE
COMPANY_REFERENCE_FIELD_SIZE
OPERATION_RECORD_TYPE
TRANSFER_REFERENCE_FIELD_SIZE

Public Class Methods

new(arg = nil) click to toggle source
Calls superclass method
# File lib/PS2Format/operation.rb, line 12
def initialize(arg = nil)
  case arg
  when Hash, NilClass
    super({format:           FORMAT,
           record_type:      OPERATION_RECORD_TYPE,
           operation_type:   TRANSFER_OPCODE,
           account_status:   ACCOUNT_STATUS,
           record_status:    RECORD_STATUS,
           nib:              ''.rjust(21, '0'),
           amount:           ''.rjust(AMOUNT_FIELD_SIZE, '0'),
           company_reference: ''.rjust(COMPANY_REFERENCE_FIELD_SIZE, '0'),
           transfer_reference: ''.rjust(TRANSFER_REFERENCE_FIELD_SIZE, '0'),
           filler:           '00'})
    process_options(arg || {})
  when String
    super({format:           arg[0..2],
           record_type:      arg[3..3],
           operation_type:   arg[4..5],
           account_status:   arg[6..7],
           record_status:    arg[8..8],
           nib:              arg[9..29],
           amount:           arg[30..42],
           company_reference: arg[43..62],
           transfer_reference: arg[63..77],
           filler:           arg[78..79]})
  else
    raise ArgumentError, "String or Hash expected"
  end
end
validate_options(options) click to toggle source
# File lib/PS2Format/operation.rb, line 72
def validate_options(options)
  raise PS2Format::InvalidOperationTypeException.new I18n.t("ps2.exceptions.invalid_operation_type") if options[:operation_type].nil?
  raise InvalidAmountException.new I18n.t("ps2.exceptions.invalid_amount") if !(options[:amount].is_a? Numeric) or options[:amount].size > 11 or options[:amount] <= 0
  raise InvalidReferenceException.new I18n.t("ps2.exceptions.invalid_reference") if options[:operation_type].to_i > 50 and options[:company_reference].nil?

  begin
    Citizenship.valid_nib!(options[:nib])
  rescue Citizenship::Error => e
    raise PS2Format::InvalidOperationTypeException.new e.message
  end
end

Public Instance Methods

amount() click to toggle source
# File lib/PS2Format/operation.rb, line 46
def amount
  metadata.amount.to_i
end
amount=(value) click to toggle source
# File lib/PS2Format/operation.rb, line 42
def amount=(value)
  metadata.amount = String(value).rjust(AMOUNT_FIELD_SIZE, '0')
end
company_reference() click to toggle source
# File lib/PS2Format/operation.rb, line 62
def company_reference
  metadata.company_reference.lstrip
end
company_reference=(ref) click to toggle source
# File lib/PS2Format/operation.rb, line 58
def company_reference=(ref)
  metadata.company_reference = Record.remove_accents(String(ref)).rjust(COMPANY_REFERENCE_FIELD_SIZE, ' ')
end
nib=(nib) click to toggle source
# File lib/PS2Format/operation.rb, line 66
def nib=(nib)
  metadata.nib = Record.pre_process_nib(nib)
end
transfer_reference() click to toggle source
# File lib/PS2Format/operation.rb, line 54
def transfer_reference
  metadata.transfer_reference.lstrip
end
transfer_reference=(ref) click to toggle source
# File lib/PS2Format/operation.rb, line 50
def transfer_reference=(ref)
  metadata.transfer_reference = Record.remove_accents(String(ref)).rjust(TRANSFER_REFERENCE_FIELD_SIZE, ' ')
end
validate(include_obj = false) click to toggle source
# File lib/PS2Format/operation.rb, line 86
def validate(include_obj = false)
  add_error(:format, value: format) if format != FORMAT
  add_error(:record_type, should_be: OPERATION_RECORD_TYPE, is: record_type) if record_type != OPERATION_RECORD_TYPE
  add_error(:record_status, value: record_status) if record_status.size != 1
  add_error(:account_status, value: account_status) if account_status.size != 2
  add_error(:amount, amount: amount) if !(amount.is_a? Numeric) or amount <= 0 or amount.size > 11
  add_error(:line_size, component: 'Operation', size: data.length) if data.length != 80

  begin
    Citizenship.valid_nib!(nib)
  rescue Citizenship::Error => e
    add_error(:nib, error: e.message)
  end
end

Private Instance Methods

process_options(opts) click to toggle source
# File lib/PS2Format/operation.rb, line 103
def process_options(opts)

  nib = opts.delete(:nib)
  amount = opts.delete(:amount)
  transfer_reference = opts.delete(:transfer_reference)
  company_reference = opts.delete(:company_reference)
  operation_type = opts.delete(:operation_type)
  account_status = opts.delete(:account_status)
  record_status = opts.delete(:record_status)

  self.nib = nib if nib
  self.amount = amount if amount
  self.transfer_reference = transfer_reference if transfer_reference
  self.company_reference = company_reference if company_reference
  self.operation_type = operation_type if operation_type
  self.account_status = account_status if account_status
  self.record_status = record_status if record_status
end