Untitled

mail@pastecode.io avatar
unknown
plain_text
25 days ago
6.4 kB
2
Indexable
Never
import { LocalStorageUtils } from "services-lib";
import { TextUtils } from "./textUtils";
import { LocaleUtils } from "./locale-utils";
import { DentalNotationType } from "../models/dental-notation-type.model";



export class DentalNotationTypeUtils {
    public static logged: boolean = true;
    private static LocalStorageKey = 'dental_notation_id'
    private static readonly AlphanumericNotationMAP = new Map<number, string>([
        // adult maxilla
        [18, 'UR8'],
        [17, 'UR7'],
        [16, 'UR6'],
        [15, 'URE'],
        [14, 'UR4'],
        [13, 'UR3'],
        [12, 'UR2'],
        [11, 'UR1'],

        [21, 'UL1'],
        [22, 'UL2'],
        [23, 'UL3'],
        [24, 'UL4'],
        [25, 'UL5'],
        [26, 'UL6'],
        [27, 'UL7'],
        [28, 'UL8'],

        //adult mandible
        [48, 'LR8'],
        [47, 'LR7'],
        [46, 'LR6'],
        [45, 'LR5'],
        [44, 'LR4'],
        [43, 'LR3'],
        [42, 'LR2'],
        [41, 'LR1'],

        [31, 'LL1'],
        [32, 'LL2'],
        [33, 'LL3'],
        [34, 'LL4'],
        [35, 'LL5'],
        [36, 'LL6'],
        [37, 'LL7'],
        [38, 'LL8'],


        //infant maxilla
        [55, 'URE'],
        [54, 'URD'],
        [53, 'URC'],
        [52, 'URB'],
        [51, 'URA'],

        [61, 'ULA'],
        [62, 'ULB'],
        [63, 'ULC'],
        [64, 'ULD'],
        [65, 'ULE'],

        //infant mandible
        [85, 'LRE'],
        [84, 'LRD'],
        [83, 'LRC'],
        [82, 'LRB'],
        [81, 'LRA'],

        [71, 'LLA'],
        [72, 'LLB'],
        [73, 'LLC'],
        [74, 'LLD'],
        [75, 'LLE'],
    ]);


    //usa
    private static readonly UniversalMap = new Map<number, number | string>([
        // adult maxilla
        [18, 1],
        [17, 2],
        [16, 3],
        [15, 4],
        [14, 5],
        [13, 6],
        [12, 7],
        [11, 8],

        [21, 9],
        [22, 10],
        [23, 11],
        [24, 12],
        [25, 13],
        [26, 14],
        [27, 15],
        [28, 16],

        //adult mandible
        [48, 32],
        [47, 31],
        [46, 30],
        [45, 29],
        [44, 28],
        [43, 27],
        [42, 26],
        [41, 25],

        [31, 24],
        [32, 23],
        [33, 22],
        [34, 21],
        [35, 20],
        [36, 19],
        [37, 18],
        [38, 17],


        //infant maxilla
        [55, 'A'],
        [54, 'B'],
        [53, 'C'],
        [52, 'D'],
        [51, 'E'],

        [61, 'F'],
        [62, 'G'],
        [63, 'H'],
        [64, 'I'],
        [65, 'J'],

        //infant mandible
        [85, 'T'],
        [84, 'S'],
        [83, 'R'],
        [82, 'Q'],
        [81, 'P'],

        [71, 'O'],
        [72, 'N'],
        [73, 'M'],
        [74, 'L'],
        [75, 'K'],

    ]);

    private static getAlphanumericNotationCode(fdiToothNumber: number): string {
        if (fdiToothNumber) {
            return DentalNotationTypeUtils
                .AlphanumericNotationMAP
                .get(fdiToothNumber.valueOf());
        }
        return '';
    }

    private static getUniversalCode(fdiToothNumber: number): string {
        if (!DentalNotationTypeUtils.logged) {
            console.log("2-" + fdiToothNumber.valueOf());
            console.log("3-" + DentalNotationTypeUtils
                .UniversalMap
                .get(fdiToothNumber.valueOf())
            );
        }
        DentalNotationTypeUtils.logged = true;
        if (fdiToothNumber) {
            const result = DentalNotationTypeUtils
                .UniversalMap
                .get(fdiToothNumber.valueOf());

            if (result) return result.toString();
        }
        return '';
    }

    public static getToothCode(fdiToothNumber: number | string, isShort: boolean = false): string {

        let fdiCode: number;

        if (TextUtils.isString(fdiToothNumber)) {

            if (!Number.isNaN(fdiToothNumber)) fdiCode = Number(fdiToothNumber);
            else return <string>fdiToothNumber;
        } else
            if (TextUtils.isNumber(fdiToothNumber))
                fdiCode = <number>fdiToothNumber;

        if (!DentalNotationTypeUtils.logged) {
            console.log("1-" + fdiCode);
        }

        let result: string;
        const dentalNotationType: DentalNotationType = DentalNotationTypeUtils.getActiveDentalNotationType();
        switch (dentalNotationType.id) {
            case DentalNotationType.FDI.id:
                result = fdiCode.toString();
                break;
            case DentalNotationType.UniversalNumberingSystem.id:
                result = DentalNotationTypeUtils.getUniversalCode(fdiCode);
                break;
            case DentalNotationType.AlphanumericNotation.id:
                result = DentalNotationTypeUtils.getAlphanumericNotationCode(fdiCode);
                if (isShort) {
                    result = result.substring(result.length - 1);
                }
                break;
        }

        return result;
    }

    public static setDentalNotationCodeInLocalStorage(dentalNotationType: DentalNotationType) {
        LocalStorageUtils.setLocalStorageItem<number>(DentalNotationTypeUtils.LocalStorageKey, dentalNotationType.id);
    }
    public static getActiveDentalNotationType(): DentalNotationType {
        // intenta leerlo del local storage
        const dentalNotationTypeId = LocalStorageUtils.getLocalStorageItem<number>(DentalNotationTypeUtils.LocalStorageKey);

        let dentalNotationType: DentalNotationType = null;
        if (dentalNotationTypeId !== undefined && dentalNotationTypeId !== null) {
            dentalNotationType = DentalNotationType.getById(dentalNotationTypeId);
            if (dentalNotationType === undefined || dentalNotationType === null) dentalNotationType = DentalNotationType.FDI;
        } else { // si no esta en localStorage
            // toma la región por el ip del cliente 
            const countryCode = LocaleUtils.getcountryIdByIp();
            // busca en el mapa si está esa región
            dentalNotationType = DentalNotationType.getCountryCodeMap().get(countryCode);
            // si no está definida le da valor FDI por defecto
            if (dentalNotationType === undefined || dentalNotationType === null) dentalNotationType = DentalNotationType.FDI;
        }
        return dentalNotationType;
    }


}
Leave a Comment