PostalPoint_Plugins/docs/TrackingBarcode.md

4.8 KiB

TrackingBarcode class

For your reference, here is the source code of the TrackingBarcode class, used to represent a prepaid drop-off. This class is provided to plugins as global.apis.barcode.TrackingBarcode.

export class TrackingBarcode {
    /**
     * Create a tracking barcode object.
     * @param {string} code Tracking number.
     * @returns {TrackingBarcode}
     */
    constructor(code) {
        // All data are optional except for the tracking number. Missing data is gracefully handled by the PostalPoint UI.
        this.cleanCode = code;
        // Destination ZIP Code, for domestic shipments. The city and state are automatically added.  If toAddress is specified, toZip is ignored in favor of it.
        this.toZip = "";
        // Two-letter destination country code.  If not "US", toZip is ignored, and the full country name is appended to the displayed address information.
        this.toCountry = "US";
        // If toAddress is set, it will be used instead of the toZip when displaying the destination.
        // If both toZip and toAddress are empty strings, no destination will be displayed.
        this.toAddress = "";
        // If message is not empty, the barcode will NOT be added and the message will be displayed to the user.
        this.message = "";
        // If warning is not empty, the barcode WILL be added and a message will be displayed to the user.
        this.warning = "";
        // Shipping carrier name.
        this.carrier = "";
        // Shipping service/mail class full name and description. Example: "Priority Mail Adult Signature Required".
        this.serviceName = "";
        // Shipping service/mail class name, without extra info such as "signature required".
        // Example: "Priority Mail"
        this.serviceShort = "";
        // If set to false, the barcode will be rejected with a suitable message when PostalPoint is running in self-serve kiosk mode.
        this.dropoff = true;
    }

    /**
     * Set the tracking number
     * @param {string} str
     * @returns {undefined}
     */
    set tracking(str) {
        this.cleanCode = str;
    }

    /**
     * Set the service/mail class description string.
     * @param {string} str
     * @returns {undefined}
     */
    set service(str) {
        this.serviceShort = str;
        this.serviceName = str;
    }

    /**
     * Get the tracking number.
     * @returns {String}
     */
    get tracking() {
        return this.cleanCode;
    }

    /**
     * Get the destination ZIP code.
     * @returns {String}
     */
    get zip() {
        return this.toZip;
    }

    /**
     * Get the service/mail class description.
     * @returns {String}
     */
    get service() {
        if (this.serviceShort != "") {
            return this.serviceShort;
        } else if (this.serviceName != "") {
            return this.serviceName;
        }
        return "";
    }

    /**
     * Get the carrier and service info.
     * @returns {String}
     */
    get serviceString() {
        var str = [];
        if (this.carrier != "") {
            str.push(this.carrier);
        }
        if (this.serviceShort != "") {
            str.push(this.serviceShort);
        } else if (this.serviceName != "") {
            str.push(this.serviceName);
        }
        return str.join(" ");
    }

    /**
     * Get the destination information as a human-presentable multiline string.
     * @returns {String}
     */
    get destString() {
        var addressLines = [];
        if (this.toAddress != "") {
            addressLines.push(...this.toAddress.split("\n"));
        }
        if (this.toCountry.toUpperCase() == "US" && this.toZip != "" && this.toAddress == "") {
            var zipdata = getZIP(this.toZip);
            if (zipdata != false) {
                addressLines.push(`${zipdata.city} ${zipdata.state} ${this.toZip}`);
            } else {
                addressLines.push(`${this.toZip}`);
            }
        } else if (this.toCountry.toUpperCase() != "US") {
            addressLines.push(getCountryNameForISO(this.toCountry));
        }
        return addressLines.join("\n");
    }

    /**
     * Get the package information in a format suitable for display on a receipt.
     * @param {boolean} includeTrackingNumber If false, the tracking number will be suppressed.
     * @returns {String}
     */
    toString(includeTrackingNumber = true) {
        var lines = [];
        if (includeTrackingNumber && this.cleanCode) {
            lines.push(this.cleanCode);
        }
        var serv = this.serviceString;
        if (serv != "") {
            lines.push(serv);
        }
        var dest = this.destString;
        if (dest != "") {
            var destlines = dest.split("\n");
            destlines[0] = "To " + destlines[0];
            lines.push(...destlines);
        }

        return lines.join("\n");
    }
}