{"data":[],"nom_base_de_donnees":"c0elitcar","connexion":false,"username":"c0ETsalem","table_v1":{"projectName":"projet1.angular","decription":"Fichier de configuration de Taf","taf_base_url":"https:\/\/elitecars.sentech.online\/taf\/","les_modules":[{"module":"home","les_tables":[]},{"module":"public","les_tables":[{"table":"login","description":["login","pwd"],"les_types":["login"]}]}]},"api_service":"\n                import { HttpClient, HttpHeaders } from '@angular\/common\/http';\n                import { Injectable } from '@angular\/core';\n                import { Router } from '@angular\/router';\n                import { JwtHelperService } from '@auth0\/angular-jwt';\n                import * as moment from 'moment';\n\n\n                @Injectable({\n                providedIn: 'root'\n                })\n                export class ApiService {\n                local_storage_prefixe = \"prefix.\";\n                taf_base_url = \"https:\/\/elitecars.sentech.online\/taf\/\";\n\n\n                network: any = {\n                    token: undefined,\n                    status: true,\n                    message: \"Aucun probl\u00e9me d\u00e9tect\u00e9\",\n                }\n                token: any = {\n                    token_key: null,\n                    token_decoded: null,\n                    user_connected: null,\n                    is_expired: null,\n                    date_expiration: null\n                }\n\n                constructor(private http: HttpClient, private route: Router) { }\n                \/\/ sauvegardes\n                async get_from_local_storage(key: string): Promise<any> {\n                    let res: any = await localStorage.getItem(this.local_storage_prefixe + key);\n                    return JSON.parse(res)\n                }\n                async save_on_local_storage(key: string, value: any): Promise<void> {\n                    await localStorage.setItem(this.local_storage_prefixe + key, JSON.stringify(value));\n                }\n                async delete_from_local_storage(key: string) {\n                    await localStorage.setItem(this.local_storage_prefixe + key, 'null');\n                }\n\n                async get_token() {\n                    \/\/le token n'est pas encore charg\u00e9\n                    if (this.network.token == undefined) {\n                    this.network.token = await this.get_from_local_storage(\"token\")\n                    if (this.network.token != undefined && this.network.token != null) {\/\/ token existant\n                        this.update_data_from_token()\/\/ mise a jour du token\n                    }\n                    } else {\/\/ token d\u00e8ja charg\u00e9\n                    this.update_data_from_token()\/\/ mise a jour du token\n                    }\n                    return this.network.token\n                }\n                \/\/les requetes http\n                async taf_get(path: string, on_success: Function, on_error: Function) {\n                    let api_url = this.taf_base_url + path;\n                    const httpOptions = {\n                    headers: new HttpHeaders({\n                        Authorization: \"Bearer \" + await this.get_token(),\n                    })\n                    };\n\n                    this.http.get(api_url, httpOptions).subscribe(\n                    (reponse: any) => {\/\/ on success\n                        on_success(reponse)\n                    },\n                    (error: any) => {\/\/ on error\n                        this.on_taf_get_error(error, on_error)\n                    }\n                    )\n                }\n                on_taf_get_error(error: any, on_error: Function) {\n                    this.network.status = false;\n                    this.network.message = error\n                    alert(\"Merci de v\u00e9rifier votre connexion\")\n                    on_error(error)\n                }\n                async taf_post(path: string, data_to_send: any, on_success: Function, on_error: Function) {\n                    let api_url = this.taf_base_url + path;\n                    const httpOptions = {\n                    headers: new HttpHeaders({\n                        Authorization: \"Bearer \" + await this.get_token(),\n                    })\n                    };\n                    this.http.post(api_url, data_to_send, httpOptions).subscribe(\n                    (reponse: any) => {\/\/ on success\n                        on_success(reponse)\n                    },\n                    (error: any) => {\/\/ on error\n                        this.on_taf_post_error(error, on_error)\n                    }\n                    )\n                }\n                on_taf_post_error(error: any, on_error: any) {\n                    this.network.status = false;\n                    this.network.message = error\n                    alert(\"Merci de v\u00e9rifier votre connexion\")\n                    on_error(error)\n                }\n                async update_data_from_token() {\n                    let token_key = await this.get_from_local_storage(\"token\")\n                    const helper = new JwtHelperService();\n                    const decodedToken = helper.decodeToken(token_key);\n                    const expirationDate = helper.getTokenExpirationDate(token_key);\n                    const isExpired = helper.isTokenExpired(token_key);\n\n                    this.token = {\n                    token_key: token_key,\n                    token_decoded: decodedToken,\n                    user_connected: decodedToken.taf_data,\n                    is_expired: isExpired,\n                    date_expiration: expirationDate\n                    }\n                    if (this.token.is_expired) {\n                    this.on_token_expire()\n                    }\n                }\n                on_token_expire() {\n                    alert(\"Votre session s'est expir\u00e9! Veuillez vous connecter \u00e0 nouveau\")\n                    this.delete_from_local_storage(\"token\")\n                    this.route.navigate(['\/public\/login'])\n                }\n                format_date(date_string: string) {\n                    return {\n                    full: moment(date_string).locale(\"fr\").format(\"dddd Do MMMM YYYY\"),\/\/ 27 f\u00e9vrier 2023 \n                    jma: moment(date_string).locale(\"fr\").format(\"Do MMMM YYYY\"),\/\/ jeudi ...\n                    jma2: moment(date_string).locale(\"fr\").format(\"DD-MM-YYYY\"),\/\/ 01-11-2023\n                    jma3: moment(date_string).locale(\"fr\").format(\"YYYY-MM-DD\"),\/\/ 2023-10-21\n                    full_datetime: moment(date_string).locale(\"fr\").format(\"dddd Do MMMM YYYY \u00e0 HH:mm\"),\/\/ 27 f\u00e9vrier 2023 \n                    }\n                }\n                format_current_date() {\n                    return {\n                    full: moment().locale(\"fr\").format(\"dddd Do MMMM YYYY\"),\/\/ 27 f\u00e9vrier 2023 \n                    jma: moment().locale(\"fr\").format(\"Do MMMM YYYY\"),\/\/ jeudi ...\n                    jma2: moment().locale(\"fr\").format(\"DD-MM-YYYY\"),\/\/ 01-11-2023\n                    full_datetime: moment().locale(\"fr\").format(\"dddd Do MMMM YYYY \u00e0 HH:mm\"),\/\/ 27 f\u00e9vrier 2023 \n                    }\n                }\n                custom_menu() {\n                    let id_privilege = parseInt(this.token.token_decoded.taf_data.id_privilege) \/\/2\n                    console.log(\"id_privilege= \", id_privilege)\n\n\n                    this.menu = this.full_menu.filter((un_menu: any) => {\n                    un_menu.items = un_menu.items.filter((un_item: any) => { return un_item.privileges.indexOf(id_privilege) != -1 })\n\n                    return un_menu.items.length > 0\n                    })\n                }\n                has_acces(route: string) {\n\n                }\n                }","table_v2":{"projectName":"projet1.angular","decription":"Fichier de configuration de Taf","taf_base_url":"https:\/\/elitecars.sentech.online\/taf\/","les_modules":[{"module":"home","les_tables":[]},{"module":"public","les_tables":[{"table":"login","description":["login","pwd"],"les_types":["login"]}]}]},"tables":[],"base_url":"https:\/\/elitecars.sentech.online\/taf\/","docs":[{"langage":"angular.json","contenu":[{"action":"add","les_langages":[{"name":"HTML","disabled":false,"code":{"input":"<!-- ${une_colonne.Field} field avec un contr\u00f4le de validit\u00e9 --><div class=\"form-group col-sm-6\"><label>{{ une_colonne.Field }}<\/label><input class=\"form-control\" type=\"text\" formControlName=\"{{ une_colonne.Field }}\" placeholder=\"{{ une_colonne.Field }}\" [ngClass]=\"{ 'is-invalid': submitted && f[une_colonne.Field].errors }\"\/><div *ngIf=\"submitted && f[une_colonne.Field].errors\" class=\"invalid-feedback\"><div *ngIf=\"f[une_colonne.Field].errors.required\">{{ une_colonne.Field }} est obligatoire<\/div><\/div><\/div>","select":"<!-- ${une_colonne.Field} field avec un contr\u00f4le de validit\u00e9 --><div class=\"form-group col-sm-6\"><label>${une_colonne.Field}<\/label><select class=\"form-select\" formControlName=\"${une_colonne.Field}\" [ngClass]=\"{ 'is-invalid': submitted && f.${une_colonne.Field}.errors }\"><option *ngFor=\"let one_${une_colonne.table.TABLE_NAME} of forms_details.les_${une_colonne.table.TABLE_NAME}\" [value]=\"one_${une_colonne.table.TABLE_NAME}.${une_colonne.Field}\">{{one_${une_colonne.table.TABLE_NAME}.${une_colonne.Field}}}<\/option><\/select><div *ngIf=\"submitted && f.${une_colonne.Field}.errors\" class=\"invalid-feedback\"><div *ngIf=\"f.${une_colonne.Field}.errors.required\">${une_colonne.Field} est obligatoire<\/div><\/div><\/div>","form":"<form [formGroup]=\"reactiveForm_add_${table.table}\" (ngSubmit)=\"onSubmit_add_${table.table}()\" #form_add_${table.table}=\"ngForm\" class=\"row\">${all_colonne}<\/form><!-- vous pouvez valider votre formulaire n'importe o\u00f9 --><div class=\"text-center m-2\"><button type=\"button\" class=\"btn btn-primary m-2\" [disabled]=\"loading_add_${table.table}\" (click)=\"form_add_${table.table}.ngSubmit.emit()\">{{loading_add_${table.table} ? 'En cours ...' : 'Valider'}}<\/button><button class=\"btn btn-secondary m-2\" type=\"reset\" (click)=\"onReset_add_${table.table}()\">Vider<\/button><\/div>"}}]}]},{"langage":"ionic.json","contenu":[{"action":"add","les_langages":[{"name":"HTML","disabled":false,"code":{"input":"<!-- ${une_colonne.Field} field avec un contr\u00f4le de validit\u00e9 --><div class=\"form-group col-sm-6\"><label>{{ une_colonne.Field }}<\/label><input class=\"form-control\" type=\"text\" formControlName=\"{{ une_colonne.Field }}\" placeholder=\"{{ une_colonne.Field }}\" [ngClass]=\"{ 'is-invalid': submitted && f[une_colonne.Field].errors }\"\/><div *ngIf=\"submitted && f[une_colonne.Field].errors\" class=\"invalid-feedback\"><div *ngIf=\"f[une_colonne.Field].errors.required\">{{ une_colonne.Field }} est obligatoire<\/div><\/div><\/div>","select":"<!-- ${une_colonne.Field} field avec un contr\u00f4le de validit\u00e9 --><div class=\"form-group col-sm-6\"><label>${une_colonne.Field}<\/label><select class=\"form-select\" formControlName=\"${une_colonne.Field}\" [ngClass]=\"{ 'is-invalid': submitted && f.${une_colonne.Field}.errors }\"><option *ngFor=\"let one_${une_colonne.table.TABLE_NAME} of forms_details.les_${une_colonne.table.TABLE_NAME}\" [value]=\"one_${une_colonne.table.TABLE_NAME}.${une_colonne.Field}\">{{one_${une_colonne.table.TABLE_NAME}.${une_colonne.Field}}}<\/option><\/select><div *ngIf=\"submitted && f.${une_colonne.Field}.errors\" class=\"invalid-feedback\"><div *ngIf=\"f.${une_colonne.Field}.errors.required\">${une_colonne.Field} est obligatoire<\/div><\/div><\/div>","form":"<form [formGroup]=\"reactiveForm_add_${table.table}\" (ngSubmit)=\"onSubmit_add_${table.table}()\" #form_add_${table.table}=\"ngForm\" class=\"row\">${all_colonne}<\/form><!-- vous pouvez valider votre formulaire n'importe o\u00f9 --><div class=\"text-center m-2\"><button type=\"button\" class=\"btn btn-primary m-2\" [disabled]=\"loading_add_${table.table}\" (click)=\"form_add_${table.table}.ngSubmit.emit()\">{{loading_add_${table.table} ? 'En cours ...' : 'Valider'}}<\/button><button class=\"btn btn-secondary m-2\" type=\"reset\" (click)=\"onReset_add_${table.table}()\">Vider<\/button><\/div>"}}]}]}],"status":true}