indicativeArea/IssuerIndicativeArea.js

import validate from 'validate.js';
import {ValidationError, validationChar} from '../Validation';
import {wordPad, numberPad, fillWith} from '../utils.js';

/**
 * IssuerIndicativeArea Class
 * For D0
 *
 * @private
 */
class IssuerIndicativeArea {
  constructor(common, issuer) {
    this.common = common;
    this.data = issuer;
  }

  export() {
    this.validation();

    return [
      ...this.common.export(),
      fillWith('0', 30),
      'D0',
      wordPad(this.data.socialReason, 50),
      numberPad(this.data.issuerCodeLegalCategory, 4)
    ];
  }

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

    const issuerSchema = {
      socialReason: {
        presence: true,
        length: { maximum: 50 },
        ...validationChar
      },
      issuerCodeLegalCategory: {
        length: { is: 4 },
        ...validationChar
      }
    };

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

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

export default IssuerIndicativeArea;