Source: fedramp.models/atoLetter.factory.js

(function () {
    'use strict';

    angular
        .module('fedramp.models')
        .factory('AtoLetter', AtoLetterFactory);

    function AtoLetterFactory () {
        return AtoLetter;
    }

    /**
     * Leveraged ATO letter.
     * @constructor
     * @memberof Models
     */
    function AtoLetter (options) {
        // Scope `this` to self
        var self = this;

        var mapping = {
            'Letter_Date': 'letterDate',
            'Letter_Expiration_Date': 'letterExpirationDate',
            'Authorization_Date': 'authorizationDate',
            'Authorizing_Letter_Last_Sign_Date': 'authorizingLetterSignedDate',
            'Authorizing_Agency': 'authorizingAgency',
            'Authorizing_Subagency': 'authorizingSubagency',
            'Agency_POC': 'pocName',
            'Agency_POC_email': 'pocEmail',
            'Agency_Logo': 'logo',
            'Include_In_Marketplace': 'includeInMarketplace',
            'Independent_Assessor': 'independentAssessor',
            'Announcement_Date': 'compliantDate'
        };

        /**
         * Letter date
         * @member {date}
         * @memberof Models.AtoLetter
         */
        self.letterDate = null;

        /**
         * Letter expiration date
         * @member {date}
         * @memberof Models.AtoLetter
         */
        self.letterExpirationDate = null;

        /**
         * The authorization date
         * @member {date}
         * @memberof Models.AtoLetter
         */
        self.authorizationDate = null;

        /**
         * Authorizing letter signed date
         * @member {date}
         * @memberof Models.AtoLetter
         */
        self.authorizingLetterSignedDate = null;

        /**
         * Authorizing agency
         * @member {string}
         * @memberof Models.AtoLetter
         */
        self.authorizingAgency = '';

        /**
         * Authorizing subagency
         * @member {string}
         * @memberof Models.AtoLetter
         */
        self.authorizingSubagency = '';

        /**
         * The agency point of contact name
         * @member {string}
         * @memberof Models.AtoLetter
         */
        self.pocName = '';

        /**
         * The agency point of contact email
         * @member {string}
         * @memberof Models.AtoLetter
         */
        self.pocEmail = '';

        /**
         * The agency logo
         * @member {string}
         * @memberof Models.AtoLetter
         */
        self.logo = '';

        /**
         * A value indicating if it should be included in the market place
         * @member {date}
         * @memberof Models.AtoLetter
         */
        self.includeInMarketplace = '';

        /**
         * The independent assessor
         * @member {string}
         * @memberof Models.Provider
         */
        self.independentAssessor = '';

        /**
         * Date of announcement when compliant
         * @member {date}
         * @memberof Models.Data
         */
        self.compliantDate = null;

        /**
         * Initialize the ATO letter object.
         *
         * @param {object} options
         *  A dictionary of options to configure the ATO letter
         *
         * @returns
         *  The ATO letter
         */
        self.init = function (options) {
            if (!options) {
                return self;
            }

            for (var x in options) {
                if (!options.hasOwnProperty(x)) {
                    continue;
                }

                var key = mapping[x];
                if (key) {
                    self[key] = options[x];
                } else {
                    if (self.hasOwnProperty(x)) {
                        self[x] = options[x];
                    }
                }
            }

            return self;
        };

        return self.init(options);
    }
})();