indicativeArea/RecipientIndicativeArea.js

import validate from 'validate.js';
import {ValidationError} from '../Validation';
import {wordPad} from '../utils.js';

/**
 * RecipientIndicativeArea Class
 * For R1
 *
 * @private
 */
class RecipientIndicativeArea {
  constructor(common, recipient) {
    this.common = common;
    this.data = recipient;
  }

  export() {
    this.validation();

    return [
      ...this.common.export(),
      wordPad(this.data.establishmentCode, 9),
      wordPad(this.data.branchCode, 5),
      wordPad(this.data.accountNumber, 14),
      wordPad(this.data.key, 2),
      'R1',
      wordPad(this.data.accountNature, 1),
      wordPad(this.data.accountType, 1),
      this.data.recipientCode
    ];
  }

  validation() {
    this.common.validation();

    const recipientSchema = {
      accountNature: {
        numericality: {
          onlyInteger: true,
          greaterThanOrEqualTo: 1,
          lessThanOrEqualTo: 3
        }
      },
      accountType: {
        numericality: {
          onlyInteger: true,
          greaterThanOrEqualTo: 1,
          lessThanOrEqualTo: 6
        }
      },
      recipientCode: {
        presence: true,
        inclusion: ['B', 'T']
      }
    };

    const invalid = validate(this.data, recipientSchema);

    if (invalid) {
      throw new ValidationError(invalid);
    } else {
      return true;
    }
  }
}

export default RecipientIndicativeArea;