<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://doc4-fr.openflyers.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mbouzar</id>
	<title>Documentation de la solution web de gestion OpenFlyers - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://doc4-fr.openflyers.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mbouzar"/>
	<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/Special:Contributions/Mbouzar"/>
	<updated>2026-05-12T01:14:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14453</id>
		<title>Structure de la base de données</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14453"/>
		<updated>2026-05-06T14:29:17Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Schéma de la structure de la base de données=&lt;br /&gt;
*[[Media:OpenFlyers_database_schema.png|Lien vers schéma fichier .png]]&lt;br /&gt;
&lt;br /&gt;
=Structure=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create table account&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    creation_date    date                          null,&lt;br /&gt;
    name             text                          null,&lt;br /&gt;
    export_account   varchar(255)                  null,&lt;br /&gt;
    activated        tinyint unsigned    default 1 not null,&lt;br /&gt;
    category         tinyint unsigned    default 0 null,&lt;br /&gt;
    account_type     tinyint unsigned    default 0 null,&lt;br /&gt;
    owner_id         int unsigned        default 0 not null,&lt;br /&gt;
    payment_allowed  tinyint(1)          default 0 null,&lt;br /&gt;
    budget_id        int unsigned                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    accounting_id    int unsigned                  null,&lt;br /&gt;
    deactivated_date datetime                      null,&lt;br /&gt;
    group_sales      tinyint(1)          default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of account';&lt;br /&gt;
&lt;br /&gt;
create index idx_owner_id&lt;br /&gt;
    on account (owner_id);&lt;br /&gt;
&lt;br /&gt;
create table account_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int                          null,&lt;br /&gt;
    account_date          datetime                     null,&lt;br /&gt;
    account_id            int                          null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 not null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 not null,&lt;br /&gt;
    payment_type          int unsigned                 null,&lt;br /&gt;
    payment_description   text                         null,&lt;br /&gt;
    person_delivery_id    int unsigned                 null,&lt;br /&gt;
    comments              text                         null,&lt;br /&gt;
    validated             int            default 0     null,&lt;br /&gt;
    exported              int            default 0     null,&lt;br /&gt;
    registration_date     datetime                     null,&lt;br /&gt;
    budget_id             int unsigned                 null,&lt;br /&gt;
    product_id            int unsigned                 null,&lt;br /&gt;
    signature             varchar(56)                  null,&lt;br /&gt;
    signature_date        bigint unsigned              null,&lt;br /&gt;
    lettering             int                          null,&lt;br /&gt;
    lettering_date        datetime                     null,&lt;br /&gt;
    flow_reversal_id      int unsigned                 null,&lt;br /&gt;
    transaction_id        text                         null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of account entries';&lt;br /&gt;
&lt;br /&gt;
create table account_link&lt;br /&gt;
(&lt;br /&gt;
    account_id        int unsigned default 0 not null,&lt;br /&gt;
    linked_account_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (account_id, linked_account_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                  null,&lt;br /&gt;
    category               tinyint unsigned    default 0 null,&lt;br /&gt;
    activated              tinyint(1)          default 1 null,&lt;br /&gt;
    order_num              int                           null,&lt;br /&gt;
    accounting_id          int unsigned                  null,&lt;br /&gt;
    export_account_pattern varchar(255)                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type_profile&lt;br /&gt;
(&lt;br /&gt;
    account_type_id int unsigned    not null,&lt;br /&gt;
    profile_id      bigint unsigned not null,&lt;br /&gt;
    primary key (account_type_id, profile_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'linked account type field and profile';&lt;br /&gt;
&lt;br /&gt;
create table accounting&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)           null,&lt;br /&gt;
    unit_name         varchar(255)           null,&lt;br /&gt;
    symbol            varchar(255)           null,&lt;br /&gt;
    format            tinyint unsigned       null,&lt;br /&gt;
    decimal_precision int unsigned default 2 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table accounting_profile&lt;br /&gt;
(&lt;br /&gt;
    accounting_id int unsigned    not null,&lt;br /&gt;
    profile_id    bigint unsigned not null,&lt;br /&gt;
    primary key (accounting_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table activity_type&lt;br /&gt;
(&lt;br /&gt;
    id                                 bigint unsigned not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                               varchar(255)             null,&lt;br /&gt;
    order_num                          int                      null,&lt;br /&gt;
    activated                          tinyint(1)      default 1 not null,&lt;br /&gt;
    color                              int unsigned             null,&lt;br /&gt;
    training                           tinyint(1)      default 0 not null,&lt;br /&gt;
    previous_activity_type_id          bigint unsigned          null,&lt;br /&gt;
    previous_activity_default_duration int unsigned             null,&lt;br /&gt;
    next_activity_type_id              bigint unsigned          null,&lt;br /&gt;
    next_activity_default_duration     int unsigned             null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft&lt;br /&gt;
(&lt;br /&gt;
    id                         int unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    ref_date                   datetime               null,&lt;br /&gt;
    ref_hours                  int                    null,&lt;br /&gt;
    ref_engine_hours           int                    null,&lt;br /&gt;
    inspection_date            datetime               null,&lt;br /&gt;
    inspection_time            int                    null,&lt;br /&gt;
    inspection_engine_time     int                    null,&lt;br /&gt;
    tolerance_time             int unsigned default 6000 null,&lt;br /&gt;
    last_counter               int                    null,&lt;br /&gt;
    interval_visit_calendar    varchar(255) default '50 h' null,&lt;br /&gt;
    interval_visit_time        varchar(255) default '50 h' null,&lt;br /&gt;
    interval_visit_engine_time varchar(255) default '50 h' null,&lt;br /&gt;
    time_alert1                int          default 6000 null,&lt;br /&gt;
    time_alert2                int          default 0 null,&lt;br /&gt;
    time_alert3                int          default -3000 null,&lt;br /&gt;
    engine_time_alert1         int          default 6000 null,&lt;br /&gt;
    engine_time_alert2         int          default 0 null,&lt;br /&gt;
    engine_time_alert3         int          default 0 null,&lt;br /&gt;
    day_alert1                 smallint     default 15 null,&lt;br /&gt;
    day_alert2                 smallint     default 0 null,&lt;br /&gt;
    day_alert3                 smallint     default -8 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'all aircrafts of all airclubs';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    id                      int unsigned                 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_time_formula     varchar(255) default '%duration' null,&lt;br /&gt;
    counter_state           tinyint      default -1      not null,&lt;br /&gt;
    tolerance               int          default 0       null,&lt;br /&gt;
    autonomy                int          default 5990    null,&lt;br /&gt;
    true_air_speed          int unsigned default 0       not null,&lt;br /&gt;
    digit_counter_number    tinyint unsigned default 4   not null,&lt;br /&gt;
    engine_duration_formula varchar(255)                 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'types of aircraft';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_allowed_status&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned not null,&lt;br /&gt;
    place_num        int unsigned null,&lt;br /&gt;
    status_id        int unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of allowed functions for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_mandatory_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    not null,&lt;br /&gt;
    activity_type_id bigint unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of compulsory flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    not null,&lt;br /&gt;
    activity_type_id bigint unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of uncompatible flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_validity_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned          not null,&lt;br /&gt;
    validity_type_id int unsigned          not null,&lt;br /&gt;
    check_num        int unsigned default 0 not null,&lt;br /&gt;
    primary key (aircraft_type_id, validity_type_id, check_num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'types of qualif required for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table allocation_rule&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    title      varchar(255)         not null,&lt;br /&gt;
    account_id int                  not null,&lt;br /&gt;
    keyword    varchar(255)         null,&lt;br /&gt;
    order_num  int                  not null,&lt;br /&gt;
    amount     tinyint(1)           not null,&lt;br /&gt;
    mandatory  tinyint(1) default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance&lt;br /&gt;
(&lt;br /&gt;
    account_id      int unsigned                   not null,&lt;br /&gt;
    balance_date_id int unsigned                   not null,&lt;br /&gt;
    debit           decimal(15, 5) default 0.00000 not null,&lt;br /&gt;
    credit          decimal(15, 5) default 0.00000 not null,&lt;br /&gt;
    primary key (account_id, balance_date_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance_date&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    balance_date datetime null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    booking_group_id int unsigned null,&lt;br /&gt;
    start_date       datetime     null,&lt;br /&gt;
    end_date         datetime     null&lt;br /&gt;
)&lt;br /&gt;
    comment 'records all the slots of all aircrafts of all airclubs';&lt;br /&gt;
&lt;br /&gt;
create table booking_account_entry&lt;br /&gt;
(&lt;br /&gt;
    booking_id            int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_activity_type&lt;br /&gt;
(&lt;br /&gt;
    booking_id       int unsigned    not null,&lt;br /&gt;
    activity_type_id bigint unsigned not null,&lt;br /&gt;
    primary key (booking_id, activity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_person&lt;br /&gt;
(&lt;br /&gt;
    booking_id int unsigned not null,&lt;br /&gt;
    person_id  int unsigned not null,&lt;br /&gt;
    place_num  int unsigned null,&lt;br /&gt;
    status_id  int unsigned null,&lt;br /&gt;
    primary key (booking_id, person_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_resource&lt;br /&gt;
(&lt;br /&gt;
    booking_id  int unsigned default 0 not null,&lt;br /&gt;
    resource_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_training_program&lt;br /&gt;
(&lt;br /&gt;
    booking_group_id    int unsigned not null,&lt;br /&gt;
    training_program_id int unsigned not null,&lt;br /&gt;
    primary key (booking_group_id, training_program_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    group_id    int unsigned not null,&lt;br /&gt;
    name        varchar(255) null,&lt;br /&gt;
    order_num   int          null,&lt;br /&gt;
    export_code varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name      varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table business_field&lt;br /&gt;
(&lt;br /&gt;
    id                       int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable                 varchar(255)          null,&lt;br /&gt;
    label                    varchar(255)          not null,&lt;br /&gt;
    value_type               varchar(40)           not null,&lt;br /&gt;
    category                 varchar(255)          not null,&lt;br /&gt;
    order_num                int                   not null,&lt;br /&gt;
    dsn                      varchar(20) default 'customer' null,&lt;br /&gt;
    compulsory_fill          tinyint(1)  default 0 null,&lt;br /&gt;
    linked_category          varchar(255)          null,&lt;br /&gt;
    linked_business_field_id int unsigned          null,&lt;br /&gt;
    linked_field_name        varchar(255)          null,&lt;br /&gt;
    max_display              int         default -1 null,&lt;br /&gt;
    formula                  text                  null,&lt;br /&gt;
    default_value            text                  null,&lt;br /&gt;
    placeholder              text                  null,&lt;br /&gt;
    access_level_required    tinyint     default 0 not null,&lt;br /&gt;
    user_access_mode         tinyint(1)  default 0 not null,&lt;br /&gt;
    unique (variable)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_content&lt;br /&gt;
(&lt;br /&gt;
    category_id       int unsigned           not null,&lt;br /&gt;
    business_field_id int unsigned default 0 not null,&lt;br /&gt;
    person_id         int unsigned default 0 not null,&lt;br /&gt;
    content           text                   null,&lt;br /&gt;
    placeholder       text                   null,&lt;br /&gt;
    primary key (category_id, business_field_id, person_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'content of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255)                   not null,&lt;br /&gt;
    predicate text                           not null,&lt;br /&gt;
    order_num int                            null,&lt;br /&gt;
    dsn       varchar(20) default 'customer' null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria_profile&lt;br /&gt;
(&lt;br /&gt;
    criteria_id int unsigned    not null,&lt;br /&gt;
    profile_id  bigint unsigned not null,&lt;br /&gt;
    primary key (criteria_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    customer_bill_id      int unsigned                   null,&lt;br /&gt;
    product_id            int unsigned                   null,&lt;br /&gt;
    qty                   decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    unit_price            decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    bill_date             datetime                       null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_bill_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_bill_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    payment_type_id       int unsigned                   null,&lt;br /&gt;
    customer_receipt_id   int unsigned                   null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    receipt_date          datetime                       null,&lt;br /&gt;
    owner_email           varchar(255)                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table data_retention&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    data_processing_title varchar(45)           not null,&lt;br /&gt;
    legal_basis_category  int unsigned default 0 not null,&lt;br /&gt;
    data_retention_period int unsigned          not null,&lt;br /&gt;
    controller_person_id  int unsigned          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_display&lt;br /&gt;
(&lt;br /&gt;
    person_id     int unsigned            not null,&lt;br /&gt;
    display_key   varchar(255) default '' not null,&lt;br /&gt;
    display_value text                    null,&lt;br /&gt;
    primary key (person_id, display_key)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_multi_display&lt;br /&gt;
(&lt;br /&gt;
    resource_type char(30)     not null,&lt;br /&gt;
    person_id     int unsigned not null,&lt;br /&gt;
    resource_id   varchar(100) not null,&lt;br /&gt;
    display_value text         null,&lt;br /&gt;
    primary key (resource_type, person_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent&lt;br /&gt;
(&lt;br /&gt;
    id          bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    message_id  varchar(150)     not null,&lt;br /&gt;
    sender      varchar(255)     not null,&lt;br /&gt;
    title       varchar(255)     not null,&lt;br /&gt;
    category    tinyint unsigned not null,&lt;br /&gt;
    category_id int unsigned     not null,&lt;br /&gt;
    unique (message_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent_recipient&lt;br /&gt;
(&lt;br /&gt;
    id                   bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    email_sent_id        bigint unsigned  not null,&lt;br /&gt;
    person_id            int unsigned     not null,&lt;br /&gt;
    email                varchar(255)     null,&lt;br /&gt;
    recipient_type       tinyint unsigned null,&lt;br /&gt;
    smtp_status_category varchar(30)      null,&lt;br /&gt;
    email_status         tinyint unsigned null,&lt;br /&gt;
    update_date          datetime         not null,&lt;br /&gt;
    smtp_additional_detail text             null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index email_sent_id_idx&lt;br /&gt;
    on email_sent_recipient (email_sent_id);&lt;br /&gt;
&lt;br /&gt;
create table exceptionnal_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned        not null,&lt;br /&gt;
    start_date datetime            null,&lt;br /&gt;
    end_date   datetime            null,&lt;br /&gt;
    presence   tinyint unsigned    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table extra_field_profile&lt;br /&gt;
(&lt;br /&gt;
    business_field_id                  int unsigned    not null,&lt;br /&gt;
    booking_popup_display_4_profile_id bigint unsigned not null,&lt;br /&gt;
    primary key (business_field_id, booking_popup_display_4_profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table facebook&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    category    int unsigned not null,&lt;br /&gt;
    owner_id    int unsigned not null,&lt;br /&gt;
    small       blob         null,&lt;br /&gt;
    original    mediumblob   not null,&lt;br /&gt;
    label       text         null,&lt;br /&gt;
    description text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_icao&lt;br /&gt;
(&lt;br /&gt;
    icao varchar(6) default '' not null&lt;br /&gt;
        primary key&lt;br /&gt;
)&lt;br /&gt;
    comment 'favorite airfield list';&lt;br /&gt;
&lt;br /&gt;
create table favorite_report&lt;br /&gt;
(&lt;br /&gt;
    report_id int unsigned not null&lt;br /&gt;
        primary key&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_business_field&lt;br /&gt;
(&lt;br /&gt;
    report_id         int unsigned not null,&lt;br /&gt;
    business_field_id int unsigned not null,&lt;br /&gt;
    default_value     text         null,&lt;br /&gt;
    primary key (report_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_profile&lt;br /&gt;
(&lt;br /&gt;
    report_id  int unsigned              not null,&lt;br /&gt;
    profile_id bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (report_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table fhp_aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int default 0 not null,&lt;br /&gt;
    aircraft_type_id int default 0 not null,&lt;br /&gt;
    primary key (fhp_id, aircraft_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing aircraft type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int                 default 0 not null,&lt;br /&gt;
    activity_type_id bigint unsigned     default 0 not null,&lt;br /&gt;
    excluded         tinyint unsigned    default 0 null,&lt;br /&gt;
    primary key (fhp_id, activity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing flight type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_profile&lt;br /&gt;
(&lt;br /&gt;
    fhp_id     int unsigned               not null,&lt;br /&gt;
    profile_id bigint unsigned default 0  not null,&lt;br /&gt;
    place_num  tinyint unsigned default 0 not null,&lt;br /&gt;
    primary key (fhp_id, profile_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table file&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name          varchar(255)        null,&lt;br /&gt;
    content       longblob            null,&lt;br /&gt;
    file_type     varchar(255)        null,&lt;br /&gt;
    category      tinyint unsigned    null,&lt;br /&gt;
    owner_id      int                 null,&lt;br /&gt;
    file_group_id int                 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table file_group&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_id           int unsigned               null,&lt;br /&gt;
    start_date            datetime                   null,&lt;br /&gt;
    duration              int                        null,&lt;br /&gt;
    activity_type_id      bigint unsigned            null,&lt;br /&gt;
    people_onboard        int unsigned               null,&lt;br /&gt;
    departure_location_id int unsigned               null,&lt;br /&gt;
    arrival_location_id   int unsigned               null,&lt;br /&gt;
    counter_departure     int unsigned               null,&lt;br /&gt;
    counter_arrival       int unsigned               null,&lt;br /&gt;
    landing_number        int                        null,&lt;br /&gt;
    airborne              tinyint unsigned           null,&lt;br /&gt;
    validated             tinyint unsigned default 0 null,&lt;br /&gt;
    departure_icao_id     varchar(6)                 null,&lt;br /&gt;
    arrival_icao_id       varchar(6)                 null,&lt;br /&gt;
    engine_duration       int                        null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_account_entry&lt;br /&gt;
(&lt;br /&gt;
    flight_id        int unsigned default 0 not null,&lt;br /&gt;
    account_entry_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, account_entry_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight account entry join';&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on flight_account_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table flight_hours_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name               text                          null,&lt;br /&gt;
    price_formula      text                          null,&lt;br /&gt;
    left_account_id    int unsigned                  null,&lt;br /&gt;
    right_account_id   int unsigned                  null,&lt;br /&gt;
    left_account_type  tinyint unsigned    default 0 null,&lt;br /&gt;
    right_account_type tinyint unsigned    default 0 null,&lt;br /&gt;
    credit_budget_id   int unsigned                  null,&lt;br /&gt;
    debit_budget_id    int unsigned                  null,&lt;br /&gt;
    order_num          int                           null,&lt;br /&gt;
    product_id         int unsigned                  null,&lt;br /&gt;
    sale_trigger_id    int unsigned        default 0 null,&lt;br /&gt;
    query              text                          null,&lt;br /&gt;
    variable_formula   varchar(255)                  null,&lt;br /&gt;
    business_field_id  int unsigned                  null,&lt;br /&gt;
    debit_bill_num     int unsigned                  null,&lt;br /&gt;
    credit_bill_num    int unsigned                  null,&lt;br /&gt;
    qty_formula        text                          null,&lt;br /&gt;
    unit_price_formula text                          null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight hours pricing formula';&lt;br /&gt;
&lt;br /&gt;
create table flight_pilot&lt;br /&gt;
(&lt;br /&gt;
    flight_id int unsigned           not null,&lt;br /&gt;
    pilot_id  int unsigned           not null,&lt;br /&gt;
    status_id int unsigned           null,&lt;br /&gt;
    num       int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, pilot_id, num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of crew for each flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_tank_qty&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_id    int unsigned                not null,&lt;br /&gt;
    tank_id      int unsigned                not null,&lt;br /&gt;
    quantity     varchar(255) default '0.00' not null,&lt;br /&gt;
    after_flight tinyint(1)   default 0      not null,&lt;br /&gt;
    account_id   int unsigned                null,&lt;br /&gt;
    pay_type     tinyint unsigned            null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight_track&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_id int                     not null,&lt;br /&gt;
    track     mediumblob              not null,&lt;br /&gt;
    file_type varchar(255) default 'kml' null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight_type_mandatory_validity_type&lt;br /&gt;
(&lt;br /&gt;
    activity_type_id bigint unsigned           not null,&lt;br /&gt;
    validity_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (activity_type_id, validity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of mandatory qualification for each flight type';&lt;br /&gt;
&lt;br /&gt;
create table import&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label               varchar(255)                          not null,&lt;br /&gt;
    order_num           int                                   null,&lt;br /&gt;
    import_file_type    varchar(255) default 'csv-comma-CRLF' not null,&lt;br /&gt;
    match_query         text                                  null,&lt;br /&gt;
    uptodate_test_query text                                  null,&lt;br /&gt;
    update_query        text                                  null,&lt;br /&gt;
    update_activated    tinyint(1)   default 0                not null,&lt;br /&gt;
    login               varchar(255)                          null,&lt;br /&gt;
    hash_password       varchar(255)                          null,&lt;br /&gt;
    sync_task_name      varchar(255)                          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table ip_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    ip          varchar(255)        not null,&lt;br /&gt;
    counter     tinyint unsigned    not null,&lt;br /&gt;
    expire_date datetime            not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'blacklisted ip';&lt;br /&gt;
&lt;br /&gt;
create table journal&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login     varchar(255)           null,&lt;br /&gt;
    date_log  datetime               null,&lt;br /&gt;
    rights    text                   null,&lt;br /&gt;
    rights2   text                   null,&lt;br /&gt;
    action    varchar(255)           null,&lt;br /&gt;
    person_id int unsigned default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_action&lt;br /&gt;
    on journal (action);&lt;br /&gt;
&lt;br /&gt;
create index idx_date_log&lt;br /&gt;
    on journal (date_log);&lt;br /&gt;
&lt;br /&gt;
create table key_alert&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    alert_date datetime               null,&lt;br /&gt;
    status     int unsigned default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'key alerts';&lt;br /&gt;
&lt;br /&gt;
create table key_assignment&lt;br /&gt;
(&lt;br /&gt;
    key_id      tinyint unsigned    default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    key_name    tinytext                      null,&lt;br /&gt;
    aircraft_id int unsigned        default 0 null,&lt;br /&gt;
    key_state   tinyint unsigned    default 0 null,&lt;br /&gt;
    key_word    bigint unsigned     default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'key assignment description';&lt;br /&gt;
&lt;br /&gt;
create table key_host&lt;br /&gt;
(&lt;br /&gt;
    id       tinyint auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    timeout  tinyint             default 10          not null,&lt;br /&gt;
    num_key  tinyint unsigned    default 8           not null,&lt;br /&gt;
    ipkey    varchar(50)         default '127.0.0.1' not null,&lt;br /&gt;
    httpport int                 default 4080        not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'key host configuration';&lt;br /&gt;
&lt;br /&gt;
create table key_log&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    log_date  datetime     null,&lt;br /&gt;
    action    varchar(255) null,&lt;br /&gt;
    message   varchar(255) null,&lt;br /&gt;
    key_id    int unsigned null,&lt;br /&gt;
    person_id int unsigned null,&lt;br /&gt;
    xmlrpc    int unsigned null,&lt;br /&gt;
    error     varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'key logs';&lt;br /&gt;
&lt;br /&gt;
create table location&lt;br /&gt;
(&lt;br /&gt;
    icao_name       varchar(6)       not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name            varchar(64)      not null,&lt;br /&gt;
    latitude        double           null,&lt;br /&gt;
    longitude       double           null,&lt;br /&gt;
    altitude        int              null,&lt;br /&gt;
    weather_station int unsigned     null,&lt;br /&gt;
    asked_counter   bigint default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'airfields coord';&lt;br /&gt;
&lt;br /&gt;
create table log&lt;br /&gt;
(&lt;br /&gt;
    journal_id  int unsigned not null,&lt;br /&gt;
    action      varchar(255) null,&lt;br /&gt;
    table_name  varchar(255) null,&lt;br /&gt;
    field_name  varchar(255) null,&lt;br /&gt;
    field_value varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'part of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_field_value&lt;br /&gt;
    on log (field_value);&lt;br /&gt;
&lt;br /&gt;
create index idx_journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create index journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create table logger&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    serial_number int unsigned                      null,&lt;br /&gt;
    color         varchar(20)         default 'red' not null,&lt;br /&gt;
    activated     tinyint unsigned    default 1     not null,&lt;br /&gt;
    order_num     int unsigned                      not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'logger parameters';&lt;br /&gt;
&lt;br /&gt;
create table login_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login       varchar(255)     not null,&lt;br /&gt;
    counter     tinyint unsigned not null,&lt;br /&gt;
    expire_date datetime         not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'blacklisted login';&lt;br /&gt;
&lt;br /&gt;
create table m_component&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id           int unsigned        default 0 not null,&lt;br /&gt;
    m_component_type_id int unsigned                  null,&lt;br /&gt;
    resource_id         int unsigned                  null,&lt;br /&gt;
    order_num           int                           not null,&lt;br /&gt;
    serial_number       varchar(255)                  null,&lt;br /&gt;
    brandnew_date       datetime                      null,&lt;br /&gt;
    activated           tinyint unsigned    default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id              int unsigned        default 0 not null,&lt;br /&gt;
    resource_type_id       int                           null,&lt;br /&gt;
    m_classification_id    int                           null,&lt;br /&gt;
    is_maintenance_check   tinyint unsigned    default 1 not null,&lt;br /&gt;
    order_num              int                           not null,&lt;br /&gt;
    label                  varchar(255)                  null,&lt;br /&gt;
    description            varchar(255)                  null,&lt;br /&gt;
    manufacturer           varchar(255)                  null,&lt;br /&gt;
    manufacturer_reference varchar(255)                  null,&lt;br /&gt;
    part_number            varchar(255)                  null,&lt;br /&gt;
    periodicity            int unsigned                  null,&lt;br /&gt;
    tolerance              int unsigned        default 0 not null,&lt;br /&gt;
    calendar_periodicity   int unsigned                  null,&lt;br /&gt;
    calendar_tolerance     int unsigned        default 0 not null,&lt;br /&gt;
    activated              tinyint unsigned    default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type_parentality&lt;br /&gt;
(&lt;br /&gt;
    m_component_type_id        int unsigned not null,&lt;br /&gt;
    m_component_type_parent_id int unsigned not null,&lt;br /&gt;
    primary key (m_component_type_id, m_component_type_parent_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_history&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    m_component_id         int unsigned                  not null,&lt;br /&gt;
    install_date           datetime                      null,&lt;br /&gt;
    remove_date            datetime                      null,&lt;br /&gt;
    total_hours_on_install int unsigned        default 0 not null,&lt;br /&gt;
    threshold_hours        int unsigned        default 0 not null,&lt;br /&gt;
    threshold_date         datetime                      null,&lt;br /&gt;
    threshold_date_locked  tinyint unsigned    default 0 not null,&lt;br /&gt;
    threshold_hours_locked tinyint unsigned    default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_operation&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    content             text         not null,&lt;br /&gt;
    m_component_type_id int          null,&lt;br /&gt;
    order_num           int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_history&lt;br /&gt;
(&lt;br /&gt;
    id                                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                          int unsigned                  null,&lt;br /&gt;
    maintenance_program_id               int unsigned                  null,&lt;br /&gt;
    frame_hours_at_work_start            int                           null,&lt;br /&gt;
    date_work_end                        date                          null,&lt;br /&gt;
    min_overhaul_counter                 int                           null,&lt;br /&gt;
    max_overhaul_counter                 int                           null,&lt;br /&gt;
    min_overhaul_date                    date                          null,&lt;br /&gt;
    max_overhaul_date                    date                          null,&lt;br /&gt;
    min_next_overhaul_counter            int                           null,&lt;br /&gt;
    max_next_overhaul_counter            int                           null,&lt;br /&gt;
    min_next_overhaul_date               date                          null,&lt;br /&gt;
    max_next_overhaul_date               date                          null,&lt;br /&gt;
    first_reference_visit                tinyint unsigned default 0    not null,&lt;br /&gt;
    is_visit                             tinyint unsigned default 0    not null,&lt;br /&gt;
    action_type                          tinyint unsigned              null,&lt;br /&gt;
    previous_line_linked_time_action     int                           null,&lt;br /&gt;
    previous_line_linked_calendar_action int                           null,&lt;br /&gt;
    next_line_linked_time_action         int                           null,&lt;br /&gt;
    next_line_linked_calendar_action     int                           null,&lt;br /&gt;
    time_tolerance                       int                           null,&lt;br /&gt;
    calendar_tolerance                   int                           null,&lt;br /&gt;
    time_periodicity_component           int                           null,&lt;br /&gt;
    calendar_periodicity_component       int                           null,&lt;br /&gt;
    time_periodicity                     int                           null,&lt;br /&gt;
    calendar_periodicity                 int                           null,&lt;br /&gt;
    reference_overhaul_counter           int                           null,&lt;br /&gt;
    reference_overhaul_date              date                          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_program&lt;br /&gt;
(&lt;br /&gt;
    id                                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                           int unsigned                  null,&lt;br /&gt;
    component_type_id                     int unsigned                  null,&lt;br /&gt;
    description                           varchar(255)                  null,&lt;br /&gt;
    time_periodicity                      int                           null,&lt;br /&gt;
    calendar_periodicity                  int                           null,&lt;br /&gt;
    time_first_reference                  int                           null,&lt;br /&gt;
    calendar_first_reference              date                          null,&lt;br /&gt;
    time_tolerance                        int                           null,&lt;br /&gt;
    calendar_tolerance                    int                           null,&lt;br /&gt;
    frame_hours_at_work_start             int                           null,&lt;br /&gt;
    date_work_end                         date                          null,&lt;br /&gt;
    time_elapsed                          int                           null,&lt;br /&gt;
    calendar_elapsed                      int                           null,&lt;br /&gt;
    time_remaining                        int                           null,&lt;br /&gt;
    calendar_remaining                    int                           null,&lt;br /&gt;
    min_next_overhaul_counter             int                           null,&lt;br /&gt;
    max_next_overhaul_counter             int                           null,&lt;br /&gt;
    min_next_overhaul_date                date                          null,&lt;br /&gt;
    max_next_overhaul_date                date                          null,&lt;br /&gt;
    effective_hours_at_work_start         int                           null,&lt;br /&gt;
    theoretical_overhaul_counter          int                           null,&lt;br /&gt;
    intelligent_overhaul_counter          int                           null,&lt;br /&gt;
    intelligent_min_next_overhaul_counter int                           null,&lt;br /&gt;
    intelligent_max_next_overhaul_counter int                           null,&lt;br /&gt;
    effective_date_at_work_end            date                          null,&lt;br /&gt;
    theoretical_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_min_next_overhaul_date    date                          null,&lt;br /&gt;
    intelligent_max_next_overhaul_date    date                          null,&lt;br /&gt;
    overlapping_group_id                  int unsigned                  null,&lt;br /&gt;
    is_visit_rg                           tinyint unsigned default 0    not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_view&lt;br /&gt;
(&lt;br /&gt;
    id                                                int unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    frame_total_time                                  int                    null,&lt;br /&gt;
    frame_time_since_rg                               int                    null,&lt;br /&gt;
    engine_time_since_rg                              int                    null,&lt;br /&gt;
    propeller_time_since_rg                           int                    null,&lt;br /&gt;
    potential_remaining_next_time_action              int                    null,&lt;br /&gt;
    potential_remaining_next_time_visit               int                    null,&lt;br /&gt;
    potential_remaining_next_priority_time_action     int                    null,&lt;br /&gt;
    potential_remaining_next_calendar_action          int                    null,&lt;br /&gt;
    potential_remaining_next_calendar_visit           int                    null,&lt;br /&gt;
    potential_remaining_next_priority_calendar_action int                    null,&lt;br /&gt;
    next_time_action_id                               int unsigned           null,&lt;br /&gt;
    next_time_visit_id                                int unsigned           null,&lt;br /&gt;
    next_priority_time_action_id                      int unsigned           null,&lt;br /&gt;
    next_calendar_action_id                           int unsigned           null,&lt;br /&gt;
    next_calendar_visit_id                            int unsigned           null,&lt;br /&gt;
    next_priority_calendar_action_id                  int unsigned           null,&lt;br /&gt;
    overhaul_counter_action                           int                    null,&lt;br /&gt;
    overhaul_counter_visit                            int                    null,&lt;br /&gt;
    overhaul_date_action                              date                   null,&lt;br /&gt;
    overhaul_date_visit                               date                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table map_logger_monitoring&lt;br /&gt;
(&lt;br /&gt;
    record_id  int unsigned not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    count_data int unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'link between flight and track';&lt;br /&gt;
&lt;br /&gt;
create table map_track&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned                  null,&lt;br /&gt;
    start_data    int unsigned                  null,&lt;br /&gt;
    number        int unsigned                  null,&lt;br /&gt;
    start_time    datetime                      null,&lt;br /&gt;
    latitude_max  double                        null,&lt;br /&gt;
    longitude_max double                        null,&lt;br /&gt;
    latitude_min  double                        null,&lt;br /&gt;
    longitude_min double                        null,&lt;br /&gt;
    visible       tinyint unsigned default 1    not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'tracks split from gdr';&lt;br /&gt;
&lt;br /&gt;
create table nationality&lt;br /&gt;
(&lt;br /&gt;
    code  char(2) default '' not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255)       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table oauth_access_token&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid              varchar(255)    not null,&lt;br /&gt;
    expiry_date_time datetime        not null,&lt;br /&gt;
    scopes           varchar(2048)   not null,&lt;br /&gt;
    oauth_client_id  int unsigned    not null,&lt;br /&gt;
    person_id        int unsigned    null,&lt;br /&gt;
    unique (id),&lt;br /&gt;
    unique (uid)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table oauth_auth_code&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid              varchar(255)    not null,&lt;br /&gt;
    expiry_date_time datetime        not null,&lt;br /&gt;
    redirect_uri     varchar(2048)   not null,&lt;br /&gt;
    scopes           varchar(2048)   not null,&lt;br /&gt;
    oauth_client_id  int unsigned    not null,&lt;br /&gt;
    person_id        int unsigned    not null,&lt;br /&gt;
    unique (id),&lt;br /&gt;
    unique (uid)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table oauth_client&lt;br /&gt;
(&lt;br /&gt;
    id                       int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid                      varchar(255)    not null,&lt;br /&gt;
    hashed_passphrase        varchar(255)    null,&lt;br /&gt;
    name                     text            not null,&lt;br /&gt;
    authorization_grant_type varchar(255)    not null,&lt;br /&gt;
    redirect_uri             varchar(2048)   not null,&lt;br /&gt;
    owner_person_id          int unsigned    not null,&lt;br /&gt;
    auth_cert                text            null,&lt;br /&gt;
    sign_cert                text            null,&lt;br /&gt;
    unique (id),&lt;br /&gt;
    unique (uid)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table oauth_dpop_token&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    jti             varchar(255) not null,&lt;br /&gt;
    expiration_date datetime     not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table oauth_refresh_token&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid                    varchar(255)    not null,&lt;br /&gt;
    expiry_date_time       datetime        not null,&lt;br /&gt;
    oauth_access_token_uid varchar(255)    not null,&lt;br /&gt;
    scopes                 varchar(2048)   not null,&lt;br /&gt;
    oauth_client_id        int unsigned    not null,&lt;br /&gt;
    person_id              int unsigned    not null,&lt;br /&gt;
    dpop_jkt               varchar(128)    null,&lt;br /&gt;
    unique (id),&lt;br /&gt;
    unique (uid)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table parameter&lt;br /&gt;
(&lt;br /&gt;
    code       varchar(255)                  not null,&lt;br /&gt;
    key_id     int unsigned     default 0    not null,&lt;br /&gt;
    enabled    tinyint unsigned default 0    null,&lt;br /&gt;
    int_value  bigint unsigned  default 0    not null,&lt;br /&gt;
    char_value mediumtext                    null,&lt;br /&gt;
    primary key (code, key_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'application parameters';&lt;br /&gt;
&lt;br /&gt;
create table payment_summary_file&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type       varchar(255)            null,&lt;br /&gt;
    content         longblob                null,&lt;br /&gt;
    record_date     datetime                null,&lt;br /&gt;
    total_entry     int unsigned            null,&lt;br /&gt;
    total_amount    decimal(15, 5) unsigned null,&lt;br /&gt;
    payment_type_id int unsigned            null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table payment_type&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                text                          null,&lt;br /&gt;
    text_field_label    text                          null,&lt;br /&gt;
    only_admin          tinyint unsigned default 0    not null,&lt;br /&gt;
    pos_key_id          int unsigned                  null,&lt;br /&gt;
    treasury_account_id int unsigned                  null,&lt;br /&gt;
    person_delivery     tinyint unsigned default 0    null,&lt;br /&gt;
    person_budget_id    int unsigned                  null,&lt;br /&gt;
    treasury_budget_id  int unsigned                  null,&lt;br /&gt;
    minimum_amount      decimal(10, 0)                null,&lt;br /&gt;
    maximum_amount      decimal(10, 0)                null&lt;br /&gt;
)&lt;br /&gt;
    comment 'type of payment description';&lt;br /&gt;
&lt;br /&gt;
create table person&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                                      not null,&lt;br /&gt;
    hash_password          varchar(255)                                      not null,&lt;br /&gt;
    first_name             varchar(255)                                      null,&lt;br /&gt;
    last_name              varchar(255)                                      null,&lt;br /&gt;
    profile                bigint unsigned                                   null,&lt;br /&gt;
    view_type              int unsigned                                      null,&lt;br /&gt;
    view_width             tinyint unsigned    default 12                    not null,&lt;br /&gt;
    view_height            tinyint unsigned    default 30                    not null,&lt;br /&gt;
    email                  varchar(255)                                      null,&lt;br /&gt;
    timezone               varchar(255)                                      null,&lt;br /&gt;
    address                varchar(255)                                      null,&lt;br /&gt;
    zipcode                varchar(255)                                      null,&lt;br /&gt;
    city                   varchar(255)                                      null,&lt;br /&gt;
    state                  varchar(255)                                      null,&lt;br /&gt;
    country                varchar(255)                                      null,&lt;br /&gt;
    home_phone             varchar(255)                                      null,&lt;br /&gt;
    work_phone             varchar(255)                                      null,&lt;br /&gt;
    cell_phone             varchar(255)                                      null,&lt;br /&gt;
    lang                   varchar(255)                                      null,&lt;br /&gt;
    notification           bigint unsigned                                   null,&lt;br /&gt;
    activated              tinyint unsigned    default 1                     null,&lt;br /&gt;
    birthdate              datetime            default '0000-00-00 00:00:00' null,&lt;br /&gt;
    sex                    tinyint unsigned    default 0                     not null,&lt;br /&gt;
    nationality            char(2)                                           null,&lt;br /&gt;
    total_flight_time      int unsigned        default 0                     null,&lt;br /&gt;
    date_total_flight_time datetime                                          null,&lt;br /&gt;
    guid                   varchar(255)                                      null,&lt;br /&gt;
    activity_notification  bigint unsigned                                   null,&lt;br /&gt;
    unique (name)&lt;br /&gt;
)&lt;br /&gt;
    comment 'used for authentication';&lt;br /&gt;
&lt;br /&gt;
create table person_awaiting_activation&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login           varchar(255)        not null,&lt;br /&gt;
    ip              varchar(255)        not null,&lt;br /&gt;
    code            varchar(255)        not null,&lt;br /&gt;
    category        varchar(255)        not null,&lt;br /&gt;
    expiration_date datetime            null,&lt;br /&gt;
    used            tinyint unsigned    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table product&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label               varchar(255)                  not null,&lt;br /&gt;
    unit                varchar(255)                  not null,&lt;br /&gt;
    free_sale           tinyint(1)          default 0 not null,&lt;br /&gt;
    locked              tinyint unsigned    default 0 null,&lt;br /&gt;
    variable_id         int                           null,&lt;br /&gt;
    sale_type           tinyint unsigned              null,&lt;br /&gt;
    is_external_product tinyint(1)                    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile&lt;br /&gt;
(&lt;br /&gt;
    id                bigint unsigned not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)              null,&lt;br /&gt;
    permits           int unsigned              null,&lt;br /&gt;
    permits2          int unsigned    default 0 not null,&lt;br /&gt;
    permits3          int unsigned    default 0 not null,&lt;br /&gt;
    pictogram         int unsigned              null,&lt;br /&gt;
    default_status_id int unsigned              null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_accounting_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id    bigint unsigned not null,&lt;br /&gt;
    accounting_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, accounting_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_extra_field_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned not null,&lt;br /&gt;
    business_field_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_profile_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id          bigint unsigned not null,&lt;br /&gt;
    viewable_profile_id bigint unsigned not null,&lt;br /&gt;
    primary key (profile_id, viewable_profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_required_account_type&lt;br /&gt;
(&lt;br /&gt;
    profile_id      bigint unsigned not null,&lt;br /&gt;
    account_type_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, account_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_place&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned not null,&lt;br /&gt;
    resource_type_id int unsigned    not null,&lt;br /&gt;
    place_num        int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id                bigint unsigned not null,&lt;br /&gt;
    viewable_resource_type_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, viewable_resource_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned           not null,&lt;br /&gt;
    validity_type_id  int unsigned              not null,&lt;br /&gt;
    manage4oneself    int             default 0 not null,&lt;br /&gt;
    certify           int             default 0 not null,&lt;br /&gt;
    optional_contract tinyint(1)      default 0 not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned not null,&lt;br /&gt;
    validity_type_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_return&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    psp_transaction_id int unsigned null,&lt;br /&gt;
    bank_answer        text         null,&lt;br /&gt;
    bank_misc          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    credit_account_id int unsigned           not null,&lt;br /&gt;
    debit_account_id  int unsigned           not null,&lt;br /&gt;
    transaction_date  datetime               not null,&lt;br /&gt;
    amount            float                  not null,&lt;br /&gt;
    description       varchar(255)           null,&lt;br /&gt;
    payment_type_id   int unsigned           not null,&lt;br /&gt;
    state             int unsigned default 0 not null,&lt;br /&gt;
    token             text                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction_account_entry&lt;br /&gt;
(&lt;br /&gt;
    psp_transaction_id    int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (psp_transaction_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table record_changelog&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id      int unsigned not null,&lt;br /&gt;
    record_type    varchar(255) null,&lt;br /&gt;
    person_id      int unsigned null,&lt;br /&gt;
    changelog_date datetime     not null,&lt;br /&gt;
    record_state   text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table regular_presence_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned     null,&lt;br /&gt;
    start_day  tinyint unsigned null,&lt;br /&gt;
    end_day    tinyint unsigned null,&lt;br /&gt;
    start_hour time             null,&lt;br /&gt;
    end_hour   time             null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name             varchar(255)                  null,&lt;br /&gt;
    resource_type_id int unsigned                  null,&lt;br /&gt;
    comments         varchar(255)                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    activated        tinyint unsigned    default 1 not null,&lt;br /&gt;
    bookable         int unsigned        default 1 null,&lt;br /&gt;
    physical         int unsigned        default 1 null,&lt;br /&gt;
    color            int unsigned                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_exceptional_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_date  datetime            null,&lt;br /&gt;
    end_date    datetime            null,&lt;br /&gt;
    presence    tinyint unsigned    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_maintenance_alert&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_id    int unsigned          not null,&lt;br /&gt;
    alert_category tinyint unsigned      not null,&lt;br /&gt;
    alert_level    tinyint unsigned      not null,&lt;br /&gt;
    is_enabled     tinyint unsigned default 0 not null,&lt;br /&gt;
    is_sent        tinyint unsigned default 0 not null,&lt;br /&gt;
    unique (aircraft_id, alert_category, alert_level)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_regular_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_day   tinyint unsigned    null,&lt;br /&gt;
    end_day     tinyint unsigned    null,&lt;br /&gt;
    start_hour  time                null,&lt;br /&gt;
    end_hour    time                null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_type&lt;br /&gt;
(&lt;br /&gt;
    id                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                 varchar(255)                   null,&lt;br /&gt;
    category             int unsigned                   null,&lt;br /&gt;
    seats_available      int                 default -1 null,&lt;br /&gt;
    comments             varchar(255)                   null,&lt;br /&gt;
    activated            tinyint unsigned    default 1  not null,&lt;br /&gt;
    max_booking_duration int                 default -1 null,&lt;br /&gt;
    pictogram            int unsigned                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_type_place_tag&lt;br /&gt;
(&lt;br /&gt;
    resource_type_id int unsigned        not null,&lt;br /&gt;
    place_num        tinyint unsigned    not null,&lt;br /&gt;
    place_tag        varchar(255)        null,&lt;br /&gt;
    place_quantity   int      default -1 null,&lt;br /&gt;
    primary key (resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_stock&lt;br /&gt;
(&lt;br /&gt;
    id                           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    product_id                   int unsigned    not null,&lt;br /&gt;
    stock_id                     int unsigned    not null,&lt;br /&gt;
    stock_variation_qty_per_sale float default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_validity_type&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned not null,&lt;br /&gt;
    new_formula      varchar(255) null,&lt;br /&gt;
    update_formula   varchar(255) null,&lt;br /&gt;
    product_id       int unsigned not null,&lt;br /&gt;
    unique (validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_product&lt;br /&gt;
    on sale_2_validity_type (product_id);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                      int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label                   varchar(255)                  null,&lt;br /&gt;
    price_formula           text                          null,&lt;br /&gt;
    debit_account_id        int unsigned                  null,&lt;br /&gt;
    credit_account_id       int unsigned                  null,&lt;br /&gt;
    debit_account_type      tinyint unsigned    default 0 null,&lt;br /&gt;
    credit_account_type     tinyint unsigned    default 0 null,&lt;br /&gt;
    credit_budget_id        int unsigned                  null,&lt;br /&gt;
    debit_budget_id         int unsigned                  null,&lt;br /&gt;
    order_num               int                           null,&lt;br /&gt;
    variable_formula        varchar(255)                  null,&lt;br /&gt;
    debit_bill_num          int unsigned                  null,&lt;br /&gt;
    credit_bill_num         int unsigned                  null,&lt;br /&gt;
    qty_formula             text                          null,&lt;br /&gt;
    unit_price_formula      text                          null,&lt;br /&gt;
    added_product_id        int unsigned                  null,&lt;br /&gt;
    is_for_external_product tinyint(1)          default 1 null,&lt;br /&gt;
    is_for_internal_product tinyint(1)          default 1 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_product&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned default 0 not null,&lt;br /&gt;
    product_id      int unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, product_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_profile&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned              not null,&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_trigger&lt;br /&gt;
(&lt;br /&gt;
    id             int                 default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name           varchar(255)                  null,&lt;br /&gt;
    event          varchar(255)                  null,&lt;br /&gt;
    locked         tinyint unsigned    default 0 not null,&lt;br /&gt;
    query          text                          null,&lt;br /&gt;
    validate_entry tinyint(1)          default 0 null,&lt;br /&gt;
    group_sales    tinyint(1)          default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table spreadsheet_parameter&lt;br /&gt;
(&lt;br /&gt;
    file_number       int          not null,&lt;br /&gt;
    spreadsheet_key   varchar(255) not null,&lt;br /&gt;
    spreadsheet_value varchar(255) not null,&lt;br /&gt;
    file_name         varchar(255) null,&lt;br /&gt;
    google_url        varchar(255) not null,&lt;br /&gt;
    file_type         int unsigned null,&lt;br /&gt;
    primary key (file_number, spreadsheet_key, spreadsheet_value)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table statistic&lt;br /&gt;
(&lt;br /&gt;
    name       varchar(255)                not null,&lt;br /&gt;
    of_version tinyint        default 0    not null,&lt;br /&gt;
    value      decimal(15, 2) default 0.00 null,&lt;br /&gt;
    primary key (name, of_version)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table status&lt;br /&gt;
(&lt;br /&gt;
    id                      int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    abbrev                  varchar(255) null,&lt;br /&gt;
    name                    varchar(255) null,&lt;br /&gt;
    pictogram               int unsigned null,&lt;br /&gt;
    carnet_aero_function_id int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of functions for pilot';&lt;br /&gt;
&lt;br /&gt;
create table stock&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label         varchar(255) not null,&lt;br /&gt;
    stock_type_id int unsigned not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_level&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id   int unsigned    not null,&lt;br /&gt;
    qty        float default 0 not null,&lt;br /&gt;
    stock_date datetime        null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_type&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null,&lt;br /&gt;
    unit  varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id       int unsigned               not null,&lt;br /&gt;
    qty            float             default 0 not null,&lt;br /&gt;
    variation_date datetime                   null,&lt;br /&gt;
    validated      tinyint unsigned  default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation_account_entry&lt;br /&gt;
(&lt;br /&gt;
    product_id            int unsigned default 0 not null,&lt;br /&gt;
    stock_variation_id    int unsigned           not null,&lt;br /&gt;
    account_entry_flow_id int unsigned           not null,&lt;br /&gt;
    person_id             int unsigned           not null,&lt;br /&gt;
    primary key (product_id, stock_variation_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on stock_variation_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table structure&lt;br /&gt;
(&lt;br /&gt;
    id                            int              default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                          varchar(255)               null,&lt;br /&gt;
    info_cell                     text                       null,&lt;br /&gt;
    logo                          longblob                   null,&lt;br /&gt;
    logo_name                     varchar(255)               null,&lt;br /&gt;
    logo_ext                      varchar(25)                null,&lt;br /&gt;
    logo_size                     int                        null,&lt;br /&gt;
    first_hour_displayed          time                       null,&lt;br /&gt;
    last_hour_displayed           time                       null,&lt;br /&gt;
    usual_profiles                bigint unsigned            null,&lt;br /&gt;
    icao                          varchar(6)                 null,&lt;br /&gt;
    default_slot_range            int unsigned               null,&lt;br /&gt;
    min_slot_range                tinyint unsigned           null,&lt;br /&gt;
    twilight_range                tinyint unsigned           null,&lt;br /&gt;
    mailing_list_name             varchar(255)               null,&lt;br /&gt;
    mailing_list_type             varchar(255)               null,&lt;br /&gt;
    structure_site_url            varchar(255)               null,&lt;br /&gt;
    default_timezone              varchar(255)               not null,&lt;br /&gt;
    lang                          varchar(255)               not null,&lt;br /&gt;
    admin_num                     int unsigned               not null,&lt;br /&gt;
    default_view_type             int unsigned               null,&lt;br /&gt;
    address                       varchar(255)               null,&lt;br /&gt;
    zipcode                       varchar(255)               null,&lt;br /&gt;
    city                          varchar(255)               null,&lt;br /&gt;
    state                         varchar(255)               null,&lt;br /&gt;
    country                       varchar(255)               null,&lt;br /&gt;
    phone                         varchar(255)               null,&lt;br /&gt;
    fax                           varchar(255)               null,&lt;br /&gt;
    email                         varchar(255)               null,&lt;br /&gt;
    default_notification          int unsigned               null,&lt;br /&gt;
    welcome_cell                  text                       null,&lt;br /&gt;
    business                      text                       null,&lt;br /&gt;
    default_activity_notification bigint unsigned            null,&lt;br /&gt;
    siren                         int                        null&lt;br /&gt;
)&lt;br /&gt;
    comment 'description of all airclubs';&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_bill_type_id int unsigned         not null,&lt;br /&gt;
    bill_date             datetime             null,&lt;br /&gt;
    description           varchar(255)         null,&lt;br /&gt;
    ordinal               int unsigned         not null,&lt;br /&gt;
    validated             tinyint(1) default 0 null,&lt;br /&gt;
    supplier_bill_file_id int                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_account_entry&lt;br /&gt;
(&lt;br /&gt;
    supplier_bill_id      int unsigned not null,&lt;br /&gt;
    account_entry_flow_id int unsigned not null,&lt;br /&gt;
    primary key (supplier_bill_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on supplier_bill_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_email_parsed&lt;br /&gt;
(&lt;br /&gt;
    id                    int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid                   int          null,&lt;br /&gt;
    email_address         varchar(255) null,&lt;br /&gt;
    supplier_bill_file_id int unsigned not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null,&lt;br /&gt;
    name      varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_type&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_account_id int unsigned not null,&lt;br /&gt;
    name                varchar(255) null,&lt;br /&gt;
    account_id          int unsigned not null,&lt;br /&gt;
    vat_account_id      int unsigned null,&lt;br /&gt;
    supplier_budget_id  int unsigned null,&lt;br /&gt;
    account_budget_id   int unsigned null,&lt;br /&gt;
    vat_budget_id       int unsigned null,&lt;br /&gt;
    rule                text         null,&lt;br /&gt;
    sender_email        varchar(255) null,&lt;br /&gt;
    subject             varchar(255) null,&lt;br /&gt;
    supplier_name       varchar(255) default null,&lt;br /&gt;
    search_keyword      varchar(255) default null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table table_trigger&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    monitored_table varchar(255) not null,&lt;br /&gt;
    trigger_formula varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table tank&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_type_id   int unsigned                 not null,&lt;br /&gt;
    tank_type_id       int unsigned                 not null,&lt;br /&gt;
    unit_id            int unsigned                 not null,&lt;br /&gt;
    label              varchar(255)                 not null,&lt;br /&gt;
    max_quantity       decimal(15, 2) default -1.00 not null,&lt;br /&gt;
    unlimited_quantity int unsigned   default 1     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table track_record&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    in_progress            tinyint unsigned                       null,&lt;br /&gt;
    start_date             datetime default '0000-00-00 00:00:00' null,&lt;br /&gt;
    activated              tinyint unsigned                       null,&lt;br /&gt;
    datechsys_track_id     int unsigned                           null,&lt;br /&gt;
    resource_cat           int unsigned                           not null,&lt;br /&gt;
    resource_id            int unsigned                           not null,&lt;br /&gt;
    additional_information int unsigned                           null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table track_record_data&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned        not null,&lt;br /&gt;
    record_date   datetime            null,&lt;br /&gt;
    longitude     double              null,&lt;br /&gt;
    latitude      double              null,&lt;br /&gt;
    altitude      int                 null,&lt;br /&gt;
    speed         double              null,&lt;br /&gt;
    track         int unsigned        null,&lt;br /&gt;
    acc_x         int                 null,&lt;br /&gt;
    acc_y         int                 null,&lt;br /&gt;
    acc_z         int                 null,&lt;br /&gt;
    pressure      int unsigned        null,&lt;br /&gt;
    battery_level int unsigned        null,&lt;br /&gt;
    gps_fix       tinyint unsigned    null,&lt;br /&gt;
    receive_date  datetime            null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_record_id&lt;br /&gt;
    on track_record_data (record_id);&lt;br /&gt;
&lt;br /&gt;
create table track_resource&lt;br /&gt;
(&lt;br /&gt;
    id   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training&lt;br /&gt;
(&lt;br /&gt;
    id   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_activity&lt;br /&gt;
(&lt;br /&gt;
    activity_id            int unsigned             not null,&lt;br /&gt;
    training_item_label_id int unsigned   default 0 not null,&lt;br /&gt;
    training_id            int unsigned   default 1 not null,&lt;br /&gt;
    level_reached          int unsigned             null,&lt;br /&gt;
    comment                varchar(255)             null,&lt;br /&gt;
    validated              tinyint(1)     default 0 not null,&lt;br /&gt;
    primary key (activity_id, training_item_label_id, training_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_activity_next_item&lt;br /&gt;
(&lt;br /&gt;
    student_id             int unsigned              not null,&lt;br /&gt;
    training_id            int unsigned              not null,&lt;br /&gt;
    training_item_label_id int unsigned              not null,&lt;br /&gt;
    reporting_offset       tinyint unsigned default 0 not null,&lt;br /&gt;
    item_preselected       tinyint unsigned default 0 not null,&lt;br /&gt;
    primary key (student_id, training_id, training_item_label_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_activity_person&lt;br /&gt;
(&lt;br /&gt;
    activity_id                int unsigned           not null,&lt;br /&gt;
    person_id                  int unsigned           not null,&lt;br /&gt;
    num                        int unsigned default 0 not null,&lt;br /&gt;
    training_checking_date     datetime               null,&lt;br /&gt;
    training_checking_sentence varchar(255)           null,&lt;br /&gt;
    primary key (activity_id, person_id, num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_item&lt;br /&gt;
(&lt;br /&gt;
    training_id            int unsigned not null,&lt;br /&gt;
    training_item_label_id int unsigned not null,&lt;br /&gt;
    number_of_sessions     int          not null,&lt;br /&gt;
    order_num              int          not null,&lt;br /&gt;
    custom_label           varchar(255) null,&lt;br /&gt;
    primary key (training_id, training_item_label_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_phase&lt;br /&gt;
(&lt;br /&gt;
    training_item_order_num int unsigned not null,&lt;br /&gt;
    training_id             int unsigned not null,&lt;br /&gt;
    name                    varchar(255) null,&lt;br /&gt;
    primary key (training_item_order_num, training_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_program&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    training_id int unsigned null,&lt;br /&gt;
    name        varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_program_activity&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    training_program_id int unsigned    not null,&lt;br /&gt;
    activity_type_id    bigint unsigned not null,&lt;br /&gt;
    duration            int unsigned    null,&lt;br /&gt;
    breaktime           int unsigned    null,&lt;br /&gt;
    order_num           int unsigned    not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    id1 bigint unsigned not null,&lt;br /&gt;
    id2 bigint unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of sales';&lt;br /&gt;
&lt;br /&gt;
create table user_reauth_token&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    user_id            int unsigned         not null,&lt;br /&gt;
    verification_token varchar(255)         not null,&lt;br /&gt;
    ip_address         varchar(45)          not null,&lt;br /&gt;
    expiration_date    datetime             not null,&lt;br /&gt;
    activated          tinyint(1) default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id           int unsigned         not null,&lt;br /&gt;
    validity_type_id    int unsigned         not null,&lt;br /&gt;
    registration_date   datetime(3)          null,&lt;br /&gt;
    expire_date         date                 null,&lt;br /&gt;
    no_alert            tinyint(1) default 0 not null,&lt;br /&gt;
    ident_value         varchar(255)         null,&lt;br /&gt;
    grant_date          date                 null,&lt;br /&gt;
    checker_person_id   int                  null,&lt;br /&gt;
    checking_date       date                 not null,&lt;br /&gt;
    checking_sentence   varchar(255)         not null,&lt;br /&gt;
    is_current_validity tinyint(1) default 0 not null,&lt;br /&gt;
    action_ip_address   varchar(255)         null,&lt;br /&gt;
    action_login        varchar(255)         null,&lt;br /&gt;
    unique (person_id, validity_type_id, registration_date)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_type&lt;br /&gt;
(&lt;br /&gt;
    id                       int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                     varchar(255)                   not null,&lt;br /&gt;
    time_limitation          tinyint(1)          default 0  not null,&lt;br /&gt;
    ident_value_enable       tinyint(1)          default 0  not null,&lt;br /&gt;
    grant_date_enable        tinyint(1)          default 0  not null,&lt;br /&gt;
    mandatory                tinyint(1)          default 0  not null,&lt;br /&gt;
    experience_formula       text                           null,&lt;br /&gt;
    alert_on_login           int                 default -2 null,&lt;br /&gt;
    mandatory_access_control tinyint unsigned    default 0  null,&lt;br /&gt;
    first_reminder_alert     int unsigned        default 0  null,&lt;br /&gt;
    reminder_frequency_alert int unsigned        default 0  null,&lt;br /&gt;
    associate_attachment     tinyint unsigned    default 0  not null,&lt;br /&gt;
    certification_process    tinyint(1)          default 0  not null,&lt;br /&gt;
    is_contract              tinyint(1)          default 0  not null,&lt;br /&gt;
    contract_filename        varchar(255)                   not null,&lt;br /&gt;
    contract_file            mediumblob                     not null,&lt;br /&gt;
    contract_file_extension  varchar(4)                     not null,&lt;br /&gt;
    is_OF_contract           tinyint(1)          default 0  not null,&lt;br /&gt;
    activated                tinyint unsigned    default 1  not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'qualifications list';&lt;br /&gt;
&lt;br /&gt;
create table validity_type_page&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned        not null,&lt;br /&gt;
    page_index       int unsigned        not null,&lt;br /&gt;
    label            varchar(40)         not null,&lt;br /&gt;
    is_mandatory     tinyint unsigned    not null,&lt;br /&gt;
    unique (validity_type_id, page_index)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_page&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_page_id int unsigned not null,&lt;br /&gt;
    filename              varchar(255) not null,&lt;br /&gt;
    file                  mediumblob   not null,&lt;br /&gt;
    file_extension        varchar(4)   not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_2_validity_page&lt;br /&gt;
(&lt;br /&gt;
    validity_id      int unsigned not null,&lt;br /&gt;
    validity_page_id int unsigned not null,&lt;br /&gt;
    primary key (validity_id, validity_page_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable&lt;br /&gt;
(&lt;br /&gt;
    id         int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable   varchar(255) not null,&lt;br /&gt;
    label      varchar(255) not null,&lt;br /&gt;
    category   tinyint(1)   null,&lt;br /&gt;
    value_type varchar(255) null,&lt;br /&gt;
    order_num  int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable_value&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable_id  int            not null,&lt;br /&gt;
    assign_value decimal(15, 2) not null,&lt;br /&gt;
    start_date   datetime       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    channel_id       int unsigned not null,&lt;br /&gt;
    publication_date datetime     not null,&lt;br /&gt;
    title            varchar(255) null,&lt;br /&gt;
    content          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed_channel&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_pilot_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`person`.`id` AS `person_id`&lt;br /&gt;
from `of40_aeroclublys`.`person`&lt;br /&gt;
where ((`of40_aeroclublys`.`person`.`activated` = 1) and&lt;br /&gt;
       ((`of40_aeroclublys`.`person`.`profile` &amp;amp; (select `of40_aeroclublys`.`parameter`.`int_value`&lt;br /&gt;
                                                  from `of40_aeroclublys`.`parameter`&lt;br /&gt;
                                                  where (`of40_aeroclublys`.`parameter`.`code` =&lt;br /&gt;
                                                         'EXTERNAL_BOOKING_PILOT_PROFILE'))) &amp;gt; 0) and&lt;br /&gt;
       `of40_aeroclublys`.`person`.`id` in (select `of40_aeroclublys`.`regular_presence_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`regular_presence_inst_date`&lt;br /&gt;
                                            union&lt;br /&gt;
                                            select `of40_aeroclublys`.`exceptionnal_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`exceptionnal_inst_date`&lt;br /&gt;
                                            where ((`of40_aeroclublys`.`exceptionnal_inst_date`.`end_date` &amp;gt; now()) and&lt;br /&gt;
                                                   (`of40_aeroclublys`.`exceptionnal_inst_date`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_resource_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`resource`.`id` AS `resource_id`&lt;br /&gt;
from ((`of40_aeroclublys`.`resource` join `of40_aeroclublys`.`business_field_content` on ((&lt;br /&gt;
        `of40_aeroclublys`.`business_field_content`.`category_id` = `of40_aeroclublys`.`resource`.`id`)))&lt;br /&gt;
         join `of40_aeroclublys`.`business_field` on ((`of40_aeroclublys`.`business_field`.`id` =&lt;br /&gt;
                                                       `of40_aeroclublys`.`business_field_content`.`business_field_id`)))&lt;br /&gt;
where ((`of40_aeroclublys`.`resource`.`activated` = 1) and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field`.`variable` = 'canResourcePerformFirstFlights') and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field_content`.`content` = '1') and&lt;br /&gt;
       (`of40_aeroclublys`.`resource`.`bookable` = 1) and ((select count(0)&lt;br /&gt;
                                                            from `of40_aeroclublys`.`resource_type_place_tag` `seat`&lt;br /&gt;
                                                            where (`seat`.`resource_type_id` =&lt;br /&gt;
                                                                   `of40_aeroclublys`.`resource`.`resource_type_id`)) &amp;gt;=&lt;br /&gt;
                                                           2) and&lt;br /&gt;
       `of40_aeroclublys`.`resource`.`id` in (select `of40_aeroclublys`.`resource_regular_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_regular_availability`&lt;br /&gt;
                                              union&lt;br /&gt;
                                              select `of40_aeroclublys`.`resource_exceptional_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_exceptional_availability`&lt;br /&gt;
                                              where ((`of40_aeroclublys`.`resource_exceptional_availability`.`end_date` &amp;gt;&lt;br /&gt;
                                                      now()) and&lt;br /&gt;
                                                     (`of40_aeroclublys`.`resource_exceptional_availability`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function distanceBetween2Point(latitude1 double, longitude1 double, latitude2 double,&lt;br /&gt;
                                                            longitude2 double) returns double&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE dlongitude DOUBLE;&lt;br /&gt;
    DECLARE dlatitude DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET rlongitude1 = RADIANS(longitude1);&lt;br /&gt;
    SET rlatitude1 = RADIANS(latitude1);&lt;br /&gt;
    SET rlongitude2 = RADIANS(longitude2);&lt;br /&gt;
    SET rlatitude2 = RADIANS(latitude2);&lt;br /&gt;
    SET dlongitude = (rlongitude2 - rlongitude1) / 2;&lt;br /&gt;
    SET dlatitude = (rlatitude2 - rlatitude1) / 2;&lt;br /&gt;
    SET a = SIN(dlatitude) * SIN(dlatitude) + COS(rlatitude1) * COS(rlatitude2) * SIN(dlongitude) * SIN(dlongitude);&lt;br /&gt;
    RETURN (6378137 * 2 * ATAN2(SQRT(a), SQRT(1 - a)));&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function formatDecimal(string varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE replacedString VARCHAR(255);&lt;br /&gt;
    SET replacedString = string;&lt;br /&gt;
    SET @decimalSeparator = (SELECT char_value FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(replacedString &amp;lt;&amp;gt; '0.00' AND replacedString &amp;lt;&amp;gt; '0', TRIM(TRAILING '0' FROM replacedString),&lt;br /&gt;
              replacedString)&lt;br /&gt;
    INTO replacedString;&lt;br /&gt;
    SELECT TRIM(TRAILING '.' FROM replacedString) INTO replacedString;&lt;br /&gt;
    SELECT REPLACE(replacedString, '.', IFNULL(@decimalSeparator, '.')) INTO replacedString;&lt;br /&gt;
    RETURN replacedString;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function isBalancedAccountEntryFlow(flowId int) returns int&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE isBalanced INT;&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(SUM(debit) &amp;lt;&amp;gt; SUM(credit), 0, 1)&lt;br /&gt;
    into isBalanced&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE flow_id = flowId&lt;br /&gt;
    GROUP BY flow_id;&lt;br /&gt;
&lt;br /&gt;
    RETURN isBalanced;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function nearestPoint(latRef double, longRef double, distanceMax int) returns varchar(6)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
    DECLARE icao_name VARCHAR(6);&lt;br /&gt;
    DECLARE lenght DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET a = 2 * 6378137 * pi() * distanceMax / (1852 * 60 * 360);&lt;br /&gt;
    SET rlongitude1 = longRef + a / cos(latRef);&lt;br /&gt;
    SET rlongitude2 = longRef - a / cos(latRef);&lt;br /&gt;
    SET rlatitude1 = latRef + a;&lt;br /&gt;
    SET rlatitude2 = latRef - a;&lt;br /&gt;
&lt;br /&gt;
    SELECT loc1.icao_name,&lt;br /&gt;
           distanceBetween2Point(&lt;br /&gt;
                   (SELECT loc2.latitude FROM location AS loc2 WHERE loc2.icao_name = loc1.icao_name),&lt;br /&gt;
                   (SELECT loc3.longitude FROM location AS loc3 WHERE loc3.icao_name = loc1.icao_name),&lt;br /&gt;
                   latRef,&lt;br /&gt;
                   longRef) AS distance&lt;br /&gt;
    FROM location AS loc1&lt;br /&gt;
    WHERE IF(rlongitude2 &amp;lt; rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude2 AND rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude1 AND rlongitude2)&lt;br /&gt;
      AND IF(rlatitude2 &amp;lt; rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude2 AND rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude1 AND rlatitude2)&lt;br /&gt;
    HAVING distance &amp;lt; distanceMax&lt;br /&gt;
    ORDER BY distance&lt;br /&gt;
    LIMIT 1&lt;br /&gt;
    INTO icao_name, lenght;&lt;br /&gt;
&lt;br /&gt;
    RETURN icao_name;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursHundredths(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255);&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    DECLARE decimalSeparator VARCHAR(1);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
    SET decimalSeparator =&lt;br /&gt;
            (SELECT IFNULL(char_value, '.') FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, decimalSeparator, LPAD(FLOOR(remainingTime / 6), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursMinute(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255); # We separate hours computation from roundHours in order to keep the minus sign if hours is 0 but sexacentimal negative&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, ':', LPAD(FLOOR(remainingTime / 10), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function stripChars(word varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE stripWord VARCHAR(255);&lt;br /&gt;
    SET stripWord = word;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[-]', REPLACE(stripWord, '-', ''), stripWord) INTO stripWord;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[ ]', REPLACE(stripWord, ' ', ''), stripWord) INTO stripWord;&lt;br /&gt;
    RETURN stripWord;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryCredit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalCredit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryDebit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit&lt;br /&gt;
    INTO totalDebit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalDebit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function sumValidatedAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME)&lt;br /&gt;
      AND validated = 1;&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost procedure addGapToDate(in gap int)&lt;br /&gt;
    modifies sql data&lt;br /&gt;
BEGIN&lt;br /&gt;
    &lt;br /&gt;
    DECLARE done TINYINT DEFAULT 0;&lt;br /&gt;
    DECLARE tmpTableName VARCHAR(255);&lt;br /&gt;
    DECLARE tmpColumnName VARCHAR(255);&lt;br /&gt;
    &lt;br /&gt;
    DECLARE cursor1 CURSOR FOR&lt;br /&gt;
        SELECT TABLE_NAME, COLUMN_NAME&lt;br /&gt;
        FROM information_schema.COLUMNS&lt;br /&gt;
        WHERE TABLE_SCHEMA = ( SELECT DATABASE() )&lt;br /&gt;
          AND DATA_TYPE IN ('date', 'datetime');&lt;br /&gt;
    &lt;br /&gt;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;&lt;br /&gt;
&lt;br /&gt;
    OPEN cursor1;&lt;br /&gt;
    REPEAT&lt;br /&gt;
        FETCH cursor1 INTO tmpTableName, tmpColumnName;&lt;br /&gt;
        IF NOT done THEN&lt;br /&gt;
            BEGIN&lt;br /&gt;
                SET @dynamicQuery = CONCAT('UPDATE ', tmpTableName, ' SET ', tmpColumnName, '= DATE_ADD(', tmpColumnName, ', INTERVAL ', gap, ' DAY)');&lt;br /&gt;
                PREPARE pQuery FROM @dynamicQuery;&lt;br /&gt;
                EXECUTE pQuery;&lt;br /&gt;
                DEALLOCATE PREPARE pQuery;&lt;br /&gt;
            END;&lt;br /&gt;
        END IF;&lt;br /&gt;
    UNTIL done END REPEAT;&lt;br /&gt;
    CLOSE cursor1;&lt;br /&gt;
&lt;br /&gt;
    TRUNCATE TABLE customer_bill_file;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
==Table booking==&lt;br /&gt;
&lt;br /&gt;
Le contenu du champ ''aircraft_id'' de la table ''booking'' peut être nul. Dans ce cas, c'est une ancienne réservation effectuée sur une ressource non-existante ou qui n'existe plus; aussi nommé réservation orpheline.&lt;br /&gt;
&lt;br /&gt;
==Table flight==&lt;br /&gt;
&lt;br /&gt;
*airborne :&lt;br /&gt;
**0: Pas en l'air ou fermeture de vol : Le pilote a terminé le vol.&lt;br /&gt;
**1: En l'air ou ouverture de vol : Le pilote remplit le vol avant de voler.&lt;br /&gt;
&lt;br /&gt;
==Champs cachés==&lt;br /&gt;
Les champs suivants ne peuvent être exportés et ne doivent pas être inclus dans une requête SELECT. De plus, un &amp;quot;SELECT *&amp;quot; est interdit quand une des tables contient un champ caché :&lt;br /&gt;
*Table journal : Tous les champs&lt;br /&gt;
*Table log : Tous les champs&lt;br /&gt;
*Table parameter : Tous les champs&lt;br /&gt;
*Table person :&lt;br /&gt;
**hash_password&lt;br /&gt;
*Table structure :&lt;br /&gt;
**address&lt;br /&gt;
**admin_num&lt;br /&gt;
**city&lt;br /&gt;
**country&lt;br /&gt;
**default_notification&lt;br /&gt;
**default_slot_range&lt;br /&gt;
**default_timezone&lt;br /&gt;
**default_view_type&lt;br /&gt;
**email&lt;br /&gt;
**fax&lt;br /&gt;
**first_hour_displayed&lt;br /&gt;
**info_cell&lt;br /&gt;
**lang&lt;br /&gt;
**last_hour_displayed&lt;br /&gt;
**logo&lt;br /&gt;
**logo_name&lt;br /&gt;
**logo_ext&lt;br /&gt;
**logo_size&lt;br /&gt;
**mail_from_address&lt;br /&gt;
**mailing_list_name&lt;br /&gt;
**mailing_list_type&lt;br /&gt;
**min_slot_range&lt;br /&gt;
**name&lt;br /&gt;
**phone&lt;br /&gt;
**state&lt;br /&gt;
**twilight_range&lt;br /&gt;
**usual_profiles&lt;br /&gt;
**welcome_cell&lt;br /&gt;
**zipcode&lt;br /&gt;
*Table oauth_client : Tous les champs&lt;br /&gt;
*Table oauth_access_token : Tous les champs&lt;br /&gt;
*Table oauth_auth_code : Tous les champs&lt;br /&gt;
*Table oauth_refresh_token : Tous les champs&lt;br /&gt;
&lt;br /&gt;
Exemple de requêtes non autorisées :&lt;br /&gt;
&amp;lt;sql&amp;gt;SELECT * FROM structure;&lt;br /&gt;
&lt;br /&gt;
SELECT hash_password FROM person;&lt;br /&gt;
&lt;br /&gt;
SELECT person.id, validity.*&lt;br /&gt;
FROM person&lt;br /&gt;
LEFT JOIN validity ON (person.id=validity.person_id);&amp;lt;/sql&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Envoi-des-emails&amp;diff=14452</id>
		<title>Envoi des emails</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Envoi-des-emails&amp;diff=14452"/>
		<updated>2026-05-04T10:30:55Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter l''''envoi automatique des e-mails''' dans la [[Accueil|version 4 d'OpenFlyers]].&lt;br /&gt;
&lt;br /&gt;
Le tableau ci-dessous indique pour quels types de plateformes l'envoi des e-mails est actif.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
!Type d'e-mail!![[Compte-client-OpenFlyers-et-modèle-commercial#Plateforme_de_démonstration|Plateforme de démonstration]]!![[Compte-client-OpenFlyers-et-modèle-commercial#Plateforme_en_test|Plateforme en test]]!![[Compte-client-OpenFlyers-et-modèle-commercial#Plateforme_en_production|Plateforme en production]]&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot; colspan=&amp;quot;4&amp;quot;|Activité&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-d'activités-avec-champs-non-vides|E-mail d'activités avec champs non vides]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-d'alerte-de-maintenance|E-mail d'alerte de maintenance]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot; colspan=&amp;quot;4&amp;quot;|Communication&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[Liste-de-diffusion|Accès à la création d'une liste de diffusion]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-d'actualité-OpenFlyers|Actualité OpenFlyers]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-mailing-de-la-structure|E-mailing de la structure]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot; colspan=&amp;quot;4&amp;quot;|Comptabilité&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-rappel-de-renouvellement-d'agrégation-bancaire|Rappel de renouvellement d'agrégation bancaire]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-rappel-de-solde|Alerte de solde]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-facture|Envoi de facture]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-reçu|Envoi de reçu]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot; colspan=&amp;quot;4&amp;quot;|Réservation&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-d'annulation-de-réservation|Annulation de réservation]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-modification-de-réservation|Modification de réservation]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-notification-de-réservation|Notification de réservation]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-rappel-de-réservation|Rappel de réservation]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot; colspan=&amp;quot;4&amp;quot;|Validité&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-demande-de-certification-de-validité|Demande de certification de validité]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[Paramétrage-des-validités#Paramétrer-des-rappels-par-e-mail-des-validités-à-échéance|Rappel d'échéance de validité]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-d'information-des-actions-des-utilisateurs-sur-des-validités|Information des actions des utilisateurs sur des validités]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
La fiche personnelle de l'utilisateur contient :&lt;br /&gt;
*le champ [[Fiche-personnelle#E-mail|E-mail]] qui permet de renseigner les adresses emails de l'utilisateur&lt;br /&gt;
*le chapitre [[Fiche-personnelle#Notifications|Notifications]] qui permet de paramétrer l'envoi automatique des e-mails&lt;br /&gt;
&lt;br /&gt;
Une structure peut personnaliser les e-mails automatiques en rajoutant un [[Configuration#Message-en-en-tête-des-emails-automatiques|message en en-tête]] et également un autre [[Configuration#Message-en-pied-de-page-des-emails-automatiques|message en pied de page]].&lt;br /&gt;
&lt;br /&gt;
Il est également possible de suivre les emails dans '''Gestion &amp;gt; Communications &amp;gt; [[Suivi des emails|Suivi des e-mails]]'''.&lt;br /&gt;
&lt;br /&gt;
=Activité=&lt;br /&gt;
==E-mail d'activités avec champs non vides==&lt;br /&gt;
C'est un e-mail de notification permettant au mécanicien d'être automatiquement informé dès qu'un pilote saisit une activité en ajoutant une remarque relative à la maintenance.&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
[[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
;Titre&lt;br /&gt;
Notification d'une activité sur OpenFlyers&lt;br /&gt;
&lt;br /&gt;
;Le corps est composé de&lt;br /&gt;
*Du texte &amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
*De la ligne: ''Vous recevez cet email car vos paramètres sur la plateforme openflyers.com/&amp;lt;Nom_De_La_Plateforme&amp;gt; demandent à vous envoyer un email dès lors qu'une activité est saisie avec les champs suivants non vides: &amp;lt;Liste_Des_Champs&amp;gt;''&lt;br /&gt;
*De la ligne:''Ci-après le détail du contenu de la saisie d'activité:''&lt;br /&gt;
*De la ligne: ''L'activité pour le/la &amp;lt;Nom_De_La_Resource&amp;gt; du &amp;lt;Date_De_Début&amp;gt; à &amp;lt;Heure_De_Début&amp;gt; au &amp;lt;Date_De_Fin&amp;gt; à &amp;lt;Heure_De_Fin&amp;gt;''&lt;br /&gt;
*De la ligne: ''avec &amp;lt;Nom_De_La_Personne_En_Place_Droite&amp;gt; en Place droite''&lt;br /&gt;
*De la ligne: ''avec &amp;lt;Nom_De_La_Personne_En_Place_Gauche&amp;gt; en Place gauche''&lt;br /&gt;
&lt;br /&gt;
;Exemple de corps&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bonjour,&lt;br /&gt;
Vous recevez cet email car vos paramètres sur la plateforme openflyers.com/loubna demandent à vous envoyer un email dès lors qu'une activité est saisie avec les champs suivants non vides:&lt;br /&gt;
mechanicAnswer&lt;br /&gt;
&lt;br /&gt;
Ci-après le détail du contenu de la saisie d'activité:&lt;br /&gt;
L'activité pour le/la F-ABCD du 04/04/2025 à 15:38 au 04/04/2025 à 17:08&lt;br /&gt;
avec EL HIDAM Loubna en Place droite&lt;br /&gt;
avec LARATTE Christophe en Place gauche&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail d'alerte de maintenance==&lt;br /&gt;
C'est un e-mail d'alerte envoyé aux personnes autorisées lorsqu'un seuil de maintenance est atteint pour un aéronef (Calendraire, Heures d'activité ou Heures moteur).&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
[[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
;le titre est composé de&lt;br /&gt;
*Du texte &amp;quot;Alerte de maintenance et suivi de navigabilité : &amp;lt;Nom_Aéronef&amp;gt; - &amp;lt;Seuil&amp;gt; (&amp;lt;Type&amp;gt;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;Exemple de titre&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Alerte de maintenance et suivi de navigabilité : F-ABCD - seuil alarme (Calendaire)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Le corps est composé de&lt;br /&gt;
*Du texte &amp;quot;L'aéronef &amp;lt;Nom_Aéronef&amp;gt; de la structure &amp;lt;Nom_Structure&amp;gt; à atteint le &amp;lt;Seuil&amp;gt; de type &amp;lt;Type&amp;gt;.&amp;quot;&lt;br /&gt;
*De la ligne: ''Inspection prévue le : &amp;lt;Date_Inspection&amp;gt;''&lt;br /&gt;
*De la ligne: ''Seuil configuré : &amp;lt;Seuil_Configuré&amp;gt;''&lt;br /&gt;
*De la ligne: ''Temps restant : &amp;lt;Temps_Restant&amp;gt;''&lt;br /&gt;
*De la ligne: ''Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les emails d'alerte de potentiel.''&lt;br /&gt;
&lt;br /&gt;
;Exemple de corps&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
L'aéronef F-ABCD de la structure AeroClubParis à atteint le seuil stop de type Calendaire.&lt;br /&gt;
&lt;br /&gt;
Inspection prévue le : 07/04/2026 &lt;br /&gt;
Seuil configuré : 10 Jours&lt;br /&gt;
Temps restant :  9 Heures 23 minutes&lt;br /&gt;
&lt;br /&gt;
Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les emails d'alerte de potentiel.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Communication=&lt;br /&gt;
==E-mail d'actualité OpenFlyers==&lt;br /&gt;
Voir le chapitre [[Bien-communiquer-avec-OpenFlyers#Être-informé-des-nouveautés-OpenFlyers|Être informé des nouveautés OpenFlyers]].&lt;br /&gt;
&lt;br /&gt;
Chaque utilisateur décide de s'abonner ou non aux e-mails d'actualités d'OpenFlyers depuis la page [[Fiche personnelle]] en cochant ou non [[Fiche-personnelle#Etre-informé-des-actualités-OpenFlyers-par-e-mail|Etre informé des actualités OpenFlyers par e-mail]].&lt;br /&gt;
&lt;br /&gt;
==E-mail de mailing de la structure==&lt;br /&gt;
Les gestionnaires de chaque structure peuvent envoyer des e-mails de masse à l'ensemble ou à une partie des utilisateurs enregistrés dans la structure.&lt;br /&gt;
&lt;br /&gt;
Voir la page [[Mailing]].&lt;br /&gt;
&lt;br /&gt;
=Comptabilité=&lt;br /&gt;
==E-mail de facture==&lt;br /&gt;
Un e-mail de facture est automatiquement envoyé lors de la [[Gestion-des-activités#Valider-une-activité|validation d'une activité]] ou d'une vente. L'envoi automatique de cet e-mail dépend de [[Facturation-des-clients#Envoi-automatique-de-chaque-facture-client|la configuration de la plateforme et peut aussi dépendre du choix de l'utilisateur]].&lt;br /&gt;
&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Facture&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Facture&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
*Du texte &amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
*De la ligne &amp;quot;Ci-joint la facture n°X pour votre achat du [DATE_ACHAT].&amp;quot;&lt;br /&gt;
**'''X''' correspond au numéro de reçu&lt;br /&gt;
**'''[DATE_PAIEMENT]'''correspond à la date où l'achat a été effectué, formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Ci-joint la facture n°10 pour votre achatdu 04/02/2018.&lt;br /&gt;
&lt;br /&gt;
Cordialement,&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'e-mail est accompagné d'une pièce-jointe au format PDF intitulé :&lt;br /&gt;
*&amp;quot;Facture [NOM_PLATEFORME] n°X.pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==E-mail de rappel de renouvellement d'agrégation bancaire==&lt;br /&gt;
Voir également les chapitres :&lt;br /&gt;
*[[Configuration-de-la-comptabilité#Agréger-un-compte-bancaire|Agréger des comptes bancaires]]&lt;br /&gt;
*[[Utilisation-de-la-comptabilité#Importer-par-API|Importer par API un relevé bancaire]]&lt;br /&gt;
*[[Configuration-de-la-comptabilité#Renouveler-l'agrégation-des-comptes-bancaires|Renouveler l'agrégation des comptes bancaires]]&lt;br /&gt;
&lt;br /&gt;
C'est un e-mail de notification pour maintenir active l'agrégation bancaire. Le premier email est envoyé 7 jours avant l'échéance, puis 3 jours avant l'échéance, puis tous les jours après l'échéance aux utilisateurs qui disposent du droit de gérer tous les comptes.&lt;br /&gt;
&lt;br /&gt;
Le titre est: '''Renouvellement de l'agrégation bancaire'''&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
*Du texte &amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
*De la ligne: ''Pour continuer à utiliser la fonctionnalité &amp;quot;Importer les relevés bancaires par API&amp;quot; sur la plateforme [Nom_De_La_Plateforme], il faut prolonger l'agrégation des banques suivantes :[Nom_De_La_Banque]''&lt;br /&gt;
*Du lien vers l'interface de l'agrégation : '''Admin &amp;gt; Comptes &amp;gt; Banque &amp;gt; Agréger'''&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Pour continuer à utiliser la fonctionnalité &amp;quot;Importer les relevés bancaires par API&amp;quot; sur la plateforme [Nom_De_La_Plateforme], il faut prolonger l'agrégation des banques suivants: [Nom_De_La_Banque].&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut :&lt;br /&gt;
- Aller dans Admin &amp;gt; Comptes &amp;gt; Banque &amp;gt; Agréger&lt;br /&gt;
- Cliquer sur le bouton de renouvellement de l'agrégation&lt;br /&gt;
&lt;br /&gt;
La procédure complète est décrite ici.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de rappel de solde==&lt;br /&gt;
Voir également les chapitres :&lt;br /&gt;
*[[Configuration-de-la-comptabilité#Paramétrage-général-des-comptabilités|Paramétrage général des comptabilités]]&lt;br /&gt;
*[[Formules-de-calcul#Exemples-de-patrons-d'emails-de-rappel-de-solde|Exemples de patrons d'emails de rappel de solde]]&lt;br /&gt;
&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Alerte seuil de compte : &amp;quot;&lt;br /&gt;
* Suivi du nom du type de compte utilisateur&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Alerte seuil de compte : Membre&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Cher client/adhérent&lt;br /&gt;
&lt;br /&gt;
Votre compte au sein de votre plateforme de démonstration présente un solde de 52,05 € en dessous du seuil minimum de 100 €.&lt;br /&gt;
&lt;br /&gt;
Nous vous remercions par avance pour la régularisation de votre compte.&lt;br /&gt;
&lt;br /&gt;
Le service comptable/trésorier&lt;br /&gt;
&lt;br /&gt;
----------&lt;br /&gt;
Le contrôle de votre compte et l'envoi de ce message sont effectués de façon automatique&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de reçu==&lt;br /&gt;
Un e-mail de reçu de paiement est automatiquement envoyé lors de la [[Utilisation-de-la-comptabilité#Validation-des-règlements-clients|validation d'un encaissement]] afin d'être [[Normes-et-réglementations#Inaltérabilité-des-données-et-traçabilité-des-encaissements|conforme à la réglementation]].&lt;br /&gt;
&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Reçu&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Reçu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
*Du texte &amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
*De la ligne &amp;quot;Ci-joint le reçu n°X pour votre paiement du [DATE_PAIEMENT].&amp;quot;&lt;br /&gt;
**'''X''' correspond au numéro de reçu&lt;br /&gt;
**'''[DATE_PAIEMENT]'''correspond à la date où le paiement a été effectué, formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Ci-joint le reçu n°10 pour votre paiement du 04/02/2018.&lt;br /&gt;
&lt;br /&gt;
Cordialement,&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'e-mail est accompagné d'une pièce-jointe au format PDF intitulé :&lt;br /&gt;
*&amp;quot;Reçu paiement [NOM_PLATEFORME] n°X.pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Réservation=&lt;br /&gt;
==E-mail d'annulation de réservation==&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot; : Confirmation d'une annulation de réservation sur OpenFlyers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Confirmation d'une annulation de réservation sur OpenFlyers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est le même que pour l'[[#E-mail_de_notification_de_réservation|e-mail de notification de réservation]].&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Notification d'annulation de la réservation suivante :&lt;br /&gt;
&lt;br /&gt;
La réservation pour le/la C150 AB F-ABCD du 02/04/2015 à 08:00 au 02/04/2015 à 09:00&lt;br /&gt;
avec comme commentaire : Activité de jour&lt;br /&gt;
avec DUPONT Jean en Pilote est annulée.&lt;br /&gt;
&lt;br /&gt;
Cette opération a été effectuée par DUPONT JEAN.&lt;br /&gt;
&lt;br /&gt;
Les dates et heures indiquées ci-dessus sont dans le fuseau horaire Europe/Paris.&lt;br /&gt;
&lt;br /&gt;
Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les annulations par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails d'annulation en suivant la procédure suivante :&lt;br /&gt;
&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Notification-des-réservations-annulées&lt;br /&gt;
&lt;br /&gt;
Plateforme de démonstration&lt;br /&gt;
https://openflyers.com/demo&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de modification de réservation==&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Confirmation d'une modification de réservation sur OpenFlyers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Confirmation d'une nouvelle réservation sur OpenFlyers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Notification de modification de la réservation suivante :&amp;lt;/pre&amp;gt;&lt;br /&gt;
* D'une ligne indiquant :&lt;br /&gt;
** l'ancien type de ressource et l'ancienne ressource réservés&lt;br /&gt;
** l'ancienne date de début formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
** l'ancienne date de fin formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
* D'une ligne indiquant l'ancien commentaire de la réservation si existant&lt;br /&gt;
* D'une ligne indiquant l'ancien utilisateur en première place&lt;br /&gt;
* D'une ligne indiquant l'ancien utilisateur en seconde place si existant&lt;br /&gt;
* Du texte &amp;quot;est remplacée par&amp;quot;&lt;br /&gt;
* D'une ligne indiquant :&lt;br /&gt;
** le nouveau type de ressource et la nouvelle ressource réservés&lt;br /&gt;
** la nouvelle date de début formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
** la nouvelle date de fin formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
* D'une ligne indiquant le nouveau commentaire de la réservation si existant&lt;br /&gt;
* D'une ligne indiquant le nouvel utilisateur en première place&lt;br /&gt;
* D'une ligne indiquant le nouvel utilisateur en seconde place si existant&lt;br /&gt;
* D'une ligne indiquant qui a effectué l'opération sur la réservation&lt;br /&gt;
* De la ligne où XXX est remplacé par le fuseau horaire :&lt;br /&gt;
&amp;lt;pre&amp;gt;Les dates et heures indiquées ci-dessus sont dans le fuseau horaire XXX.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les créations par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de création en suivant la procédure suivante :&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Notification-des-réservations-par-e-mail&lt;br /&gt;
&lt;br /&gt;
Veuillez ne pas répondre à cet e-mail.&lt;br /&gt;
L'adresse noreply@openflyers.com est uniquement utilisée pour envoyer des e-mails automatiques et la boîte e-mail n'est jamais consultée.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Le nom de la structure&lt;br /&gt;
* L'adresse de la structure&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Confirmation d'une modification de réservation sur OpenFlyers&lt;br /&gt;
&lt;br /&gt;
Notification de modification de la réservation suivante :&lt;br /&gt;
&lt;br /&gt;
La réservation pour le/la C150 AB F-ABCD du 26/10/2017 à 15:00 au 26/10/2017 à 16:30&lt;br /&gt;
avec DUPONT Jean en Place gauche est remplacée par&lt;br /&gt;
La réservation pour le/la C150 AB F-ABCD du 26/10/2017 à 15:00 au 26/10/2017 à 17:00&lt;br /&gt;
avec DUPONT Jean en Place gauche&lt;br /&gt;
&lt;br /&gt;
Cette opération a été effectuée par DUPONT JEAN&lt;br /&gt;
&lt;br /&gt;
Les dates et heures indiquées ci-dessus sont dans le fuseau horaire Europe/Paris.&lt;br /&gt;
&lt;br /&gt;
Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les créations par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de création en suivant la procédure suivante :&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Notification-des-réservations-par-e-mail&lt;br /&gt;
&lt;br /&gt;
Veuillez ne pas répondre à cet e-mail.&lt;br /&gt;
L'adresse noreply@openflyers.com est uniquement utilisée pour envoyer des e-mails automatiques et la boîte e-mail n'est jamais consultée. &lt;br /&gt;
&lt;br /&gt;
Plateforme de démonstration&lt;br /&gt;
https://openflyers.com/demo&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de notification de réservation==&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Confirmation d'une nouvelle réservation sur OpenFlyers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Confirmation d'une nouvelle réservation sur OpenFlyers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Notification de création de la réservation suivante :&amp;lt;/pre&amp;gt;&lt;br /&gt;
* D'une ligne indiquant :&lt;br /&gt;
** le type de ressource et la ressource réservés&lt;br /&gt;
** la date de début formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
** la date de fin formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
* D'une ligne indiquant le commentaire de la réservation si existant&lt;br /&gt;
* D'une ligne indiquant l'utilisateur en première place&lt;br /&gt;
* D'une ligne indiquant l'utilisateur en seconde place si existant&lt;br /&gt;
* D'une ligne indiquant qui a effectué l'opération sur la réservation&lt;br /&gt;
* De la ligne où XXX est remplacé par le fuseau horaire :&lt;br /&gt;
&amp;lt;pre&amp;gt;Les dates et heures indiquées ci-dessus sont dans le fuseau horaire XXX.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les créations par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de création en suivant la procédure suivante :&lt;br /&gt;
&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Notification-des-réservations-par-e-mail&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Le nom de la structure&lt;br /&gt;
* L'adresse de la structure&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Ceci est une notification de la réservation suivante :&lt;br /&gt;
&lt;br /&gt;
La réservation pour le/la C150 AB F-ABCD du 02/04/2015 à 08:00 au 02/04/2015 à 09:00&lt;br /&gt;
avec comme commentaire : Vol de jour&lt;br /&gt;
avec DUPONT Jean en Pilote est confirmée.&lt;br /&gt;
&lt;br /&gt;
Cette opération a été effectuée par DUPONT JEAN&lt;br /&gt;
&lt;br /&gt;
Les dates et heures indiquées ci-dessus sont dans le fuseau horaire Europe/Paris.&lt;br /&gt;
&lt;br /&gt;
Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les créations par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de création en suivant la procédure suivante :&lt;br /&gt;
&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Notification-des-réservations-par-e-mail&lt;br /&gt;
&lt;br /&gt;
Plateforme de démonstration&lt;br /&gt;
https://openflyers.com/demo&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de rappel de réservation==&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du [[Configuration#Email-de-rappel-des-réservations-de-la-journée|contenu à ajouter avant l'e-mail de rappel des réservations s'il s'agit d'un rappel d'une réservation de la journée]]. Voir le paramètre [[Fiche-personnelle#Rappel-des-réservations-de-la-veille-ou-de-la-journée-par-e-mail|Rappel des réservations de la veille ou de la journée par e-mail]]&lt;br /&gt;
* Suivi du texte &amp;quot;Rappel d'une réservation sur OpenFlyers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Rappel d'une réservation sur OpenFlyers sur OpenFlyers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Rappel de la réservation suivante :&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Du corps de l'[[#E-mail_de_notification_de_réservation|e-mail de notification de réservation]] où les dates sont sous le format &amp;quot;JJ/MM/AAAA/MM à HHhMM&amp;quot; et sous le fuseau horaire de l'utilisateur recevant l'e-mail&lt;br /&gt;
* De la ligne où XXX est remplacé par le fuseau horaire :&lt;br /&gt;
&amp;lt;pre&amp;gt;Les dates et heures indiquées ci-dessus sont dans le fuseau horaire XXX.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les rappels par e-mail :&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de rappel automatique en suivant la procédure suivante :&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Rappel-des-réservations-de-2-jours-d'avance-par-e-mail&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Le nom de la structure&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Rappel de la réservation suivante :&lt;br /&gt;
&lt;br /&gt;
La réservation pour le/la C150 AB F-ABCD du 2015/04/01 à 08h00 au 2015/04/01 à 09h00&lt;br /&gt;
avec comme commentaire : Vol de jour&lt;br /&gt;
avec DUPONT Jean en Pilote est confirmée.&lt;br /&gt;
&lt;br /&gt;
Les dates et heures indiquées ci-dessus sont dans le fuseau horaire Europe/Paris.&lt;br /&gt;
&lt;br /&gt;
Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les rappels par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de rappel automatique en suivant la procédure suivante :&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Rappel-des-réservations-de-2-jours-d'avance-par-e-mail&lt;br /&gt;
&lt;br /&gt;
Plateforme de démonstration&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pièce jointe de synchronisation des réservations avec un calendrier==&lt;br /&gt;
Sur les plateformes où l'option est activée, tout e-mail de réservation (création, modification et suppression) contient, en pièce jointe, un fichier de synchronisation. Ce fichier permet d'ajouter, modifier ou supprimer la réservation dans une application de gestion de calendrier selon l'opération effectuée sur OpenFlyers.&lt;br /&gt;
&lt;br /&gt;
Le fichier, envoyé au format '''ics''', peut être ouvert avec des applications comme '''Microsoft Outlook''', '''Google Calendar''' ou '''iCalendar''' par exemple. Lors de son ouverture, le calendrier sera mis à jour.&lt;br /&gt;
&lt;br /&gt;
Plusieurs informations de la réservation sont attachées à ce fichier :&lt;br /&gt;
*La date et heure de début&lt;br /&gt;
*La date et heure de fin&lt;br /&gt;
*Le lieu (le terrain de départ s'il est renseigné lors de la création de la réservation)&lt;br /&gt;
*La ressource et le nom de la personne en place gauche, constituant le '''nom du fichier'''&lt;br /&gt;
&lt;br /&gt;
Ces différentes informations permettent de définir l'événement dans le calendrier. Ainsi, les dates de début et de fin, le lieu, le nom de la personne et la ressource seront affichés dans l'application de gestion de calendrier.&lt;br /&gt;
&lt;br /&gt;
'''Remarque :''' indépendamment de cette option, chaque utilisateur peut activer dans sa fiche personnelle, la [[Fiche-personnelle#Synchroniser-les-réservations-dans-OpenFlyers-avec-un-agenda-Google|synchronisation de ses réservations avec son agenda Google]].&lt;br /&gt;
&lt;br /&gt;
=Validité=&lt;br /&gt;
==E-mail de demande de certification de validité==&lt;br /&gt;
&lt;br /&gt;
Un E-mail de certification est envoyé chaque fois qu'un utilisateur complète une validité dont la [[Paramétrage-des-validités#Certification|certification est activée]]. Il est envoyé aux utilisateurs ayant la possibilité de certifier le type de validité concerné. L'e-mail contient un  lien qui renvoi vers l'[[Validités#Validités-en-attente-de-certification|interface permettant de certifier les validités en attentes]]&lt;br /&gt;
&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
*Du nom de la plateforme entre crochet&lt;br /&gt;
*Du texte : &amp;quot;Nouvelle validité en attente de certification&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Nouvelle validité en attente de certification&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps du message suit ce format :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
L'utilisateur [NOM Prénom de l'utilisateur] a complété la validité [nom de la validité].&lt;br /&gt;
&lt;br /&gt;
Vous pouvez certifier cette validité en suivant ce lien :&lt;br /&gt;
[lien vers la page de gestion]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de rappel d'échéance de validité==&lt;br /&gt;
Voir la [[Paramétrage-des-validités#Alerte-échéance-par-email-:-1er-rappel|Gestion des validités]] pour le paramétrage du déclenchement des e-mails.&lt;br /&gt;
&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Alerte de validité à échéance :&amp;quot;&lt;br /&gt;
* Suivi du nom du type de validité&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Alerte de validité à échéance : Licence&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;La validité Licence de l'utilisateur DUPONT Jean arrive à échéance le 31/12/2017&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ou :&lt;br /&gt;
&amp;lt;pre&amp;gt;La validité Licence de l'utilisateur DUPONT Jean est arrivée à échéance le 31/12/2017&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail d'information des actions des utilisateurs sur des validités==&lt;br /&gt;
Les gestionnaires peuvent être informé des actions effectués par les utilisateurs sur leurs validités.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut que le gestionnaire dispose d'un profil dont les validités concernées soient cochées dans la colonne du droit [[Gestion-des-profils#Alerté-par-e-mail-pour-le-renouvellement-des-validités-de-tous-les-utilisateurs|Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs]].&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Suivi-des-emails&amp;diff=14451</id>
		<title>Suivi des emails</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Suivi-des-emails&amp;diff=14451"/>
		<updated>2026-05-04T10:06:04Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* L'affichage des e-mails */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
Le ''suivi des e-mails'' permet de voir l'état des e-mails ([[Mailing|mailings]] et [[Envoi-des-emails|notifications automatiques]]) envoyés par la plateforme.&lt;br /&gt;
&lt;br /&gt;
Cette fonctionnalité est accessible depuis le menu '''Gestion &amp;gt; Communications &amp;gt; Suivi des e-mails''' et il faut avoir le droit d'[[Gestion-des-profils#Envoyer-et-suivre-les-e-mails|envoyer et suivre les e-mails]].&lt;br /&gt;
&lt;br /&gt;
Chaque utilisateur peut mettre à jour ses adresses e-mails dans le champ [[Fiche-personnelle#E-mail|E-mail]] de la fiche personnelle.&lt;br /&gt;
&lt;br /&gt;
=Gestion des e-mails envoyés=&lt;br /&gt;
==L'affichage des e-mails==&lt;br /&gt;
L'interface affiche toutes les informations nécessaires afin d'identifier un e-mail et les causes d'une possible erreur qui empêche sa réception :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Statut&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Titre&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Emetteur&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Catégorie&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Date&lt;br /&gt;
! score=&amp;quot;col&amp;quot; colspan=&amp;quot;3&amp;quot;|Destinataire&lt;br /&gt;
! score=&amp;quot;col&amp;quot; colspan=&amp;quot;3&amp;quot;|Erreurs&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Détails&lt;br /&gt;
|-&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|Utilisateur&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|E-mail destinataire&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|Type de destinataire&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|Erreurs&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|Première erreur&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|Dernière erreur&lt;br /&gt;
|-&lt;br /&gt;
|Dernier état connu de l'e-mail :&lt;br /&gt;
*Aucune information disponible : ''Inconnu''&lt;br /&gt;
*Une ou plusieurs erreurs ont été rencontrées : ''Erreur''&lt;br /&gt;
*Le message a été reçu : ''Reçu''&lt;br /&gt;
|Sujet de l'e-mail&lt;br /&gt;
|Adresse émettrice&lt;br /&gt;
|Catégorie de l'e-mail :&lt;br /&gt;
*[[Envoi-des-emails#E-mail-d'activités-avec-champs-non-vides|Activités avec champs non vides]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-d'alerte-de-maintenance|Alerte de maintenance]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-d'actualité-OpenFlyers|Actualité OpenFlyers]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-mailing-de-la-structure|Mailing de la structure]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-facture|Facture]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-rappel-de-renouvellement-d'agrégation-bancaire|Rappel de renouvellement d'agrégation bancaire]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-rappel-de-solde|Alerte de solde]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-reçu|E-mail de reçu]]&lt;br /&gt;
*Clé d'accès&lt;br /&gt;
*[[Validités#Validités-en-attente-de-certification|Réservation]]&lt;br /&gt;
*Statistiques&lt;br /&gt;
*Activation d'utilisateur&lt;br /&gt;
*Création d'utilisateur&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-demande-de-certification-de-validité|E-mail de certification]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-rappel-d'échéance-de-validité|Rappel d'échéance de validité]]&lt;br /&gt;
&lt;br /&gt;
|Date '''d'envoi''' de l'e-mail, au format AAAA-MM-JJ HH:MM:SS&lt;br /&gt;
|Nom et prénom de l'utilisateur destinataire&lt;br /&gt;
|Adresse e-mail de l'utilisateur, utilisée '''lors de l'envoi'''&lt;br /&gt;
|&lt;br /&gt;
*Destinataire direct&lt;br /&gt;
*Destinataire en copie&lt;br /&gt;
*Destinataire en copie cachée&lt;br /&gt;
|&lt;br /&gt;
Nombre d'erreurs rencontrées lors de l'envoi&lt;br /&gt;
|Description de la première erreur, s'il y en a une&lt;br /&gt;
|Description de la deuxième erreur, s'il y en a plus de deux&lt;br /&gt;
|Redirection vers l'onglet comportant l'affichage de toutes les mises à jour du statut de l'e-mail&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Gérer le détail d'un e-mail=&lt;br /&gt;
Lors de la gestion d'un e-mail, l'action correspondant au pictogramme de la colonne '''Détails''' permet de rediriger vers l'onglet comportant toutes les informations de l'e-mail sélectionné.&lt;br /&gt;
&lt;br /&gt;
Un tableau s'ajoute dans un nouvel onglet :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Numéro d'identifiant!!Date!!Statut SMTP!!Description&lt;br /&gt;
|-&lt;br /&gt;
|Numéro d'identifiant de la mise à jour du statut, en base de données&lt;br /&gt;
|Date '''de traitement du statut''' de l'e-mail, au format AAAA-MM-JJ HH:MM:SS&lt;br /&gt;
|Code SMTP associé (succès ou erreur)&lt;br /&gt;
Lorsqu'un e-mail est envoyé, un statut SMTP est retourné permettant de récupérer des informations sur la réussite ou l'échec de l'envoi de l'email.&lt;br /&gt;
|Signification du code.&lt;br /&gt;
Si la définition d'un code n'est pas disponible, une plus générique sera alors utilisée. Une liste détaillée de tous les codes existants est trouvable [http://www.iana.org/assignments/smtp-enhanced-status-codes/smtp-enhanced-status-codes.xhtml ici]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
En haut à gauche du tableau se trouve un lien permettant de retourner sur l'onglet du suivi des emails. Ensuite, un autre lien apparaît en haut à droite du tableau général, permettant de retourner sur l'onglet du détail du dernier e-mail sélectionne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Attention : Dans le cas d'une erreur, le code récupéré peut parfois ne pas correspondre tout à fait à la situation réelle. Si une erreur intervient, appliquez les [[#Les bonnes pratiques pour envoyer correctement un e-mail|bonnes pratiques]]. Ces bonnes pratiques sont affichées en bas de la page de détail d'un e-mail.&lt;br /&gt;
&lt;br /&gt;
=Les bonnes pratiques pour envoyer correctement un e-mail=&lt;br /&gt;
Lorsqu'un e-mail est envoyé, plusieurs acteurs entrent en jeu :&lt;br /&gt;
*L'émetteur (la plateforme OpenFlyers)&lt;br /&gt;
*Les serveurs e-mail liés au destinataire&lt;br /&gt;
*Le destinataire&lt;br /&gt;
&lt;br /&gt;
*Les structures OpenFlyers sont correctement configurées pour permettre l'envoi d'un e-mail. Ainsi, si un problème intervient, il ne vient pas de la configuration de la plateforme.&lt;br /&gt;
*OpenFlyers tout comme le récepteur de l'e-mail ne peuvent agir sur les serveurs liés au destinataire. Si un problème apparaît de ce côté, rien ne peut être fait, il faut simplement attendre qu'il soit corrigé.&lt;br /&gt;
*Si les serveurs liés au destinataire fonctionnent bien au moment de l'envoi de l'e-mail, mais qu'un échec se produit, alors il vient du côté du destinataire qui peut ne pas être joignable pour plusieurs raisons.&lt;br /&gt;
&lt;br /&gt;
La bonne pratique consiste alors de demander aux utilisateurs concernés par un problème de réception d'e-mail de :&lt;br /&gt;
#Vérifier la syntaxe de leur adresse e-mail sur la plateforme OpenFlyers&lt;br /&gt;
#Vérifier que la boîte e-mail n'est pas saturée (pleine)&lt;br /&gt;
#Vérifier que le compte de messagerie n'est pas bloqué ou désactivé par le fournisseur de messagerie.&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Suivi-des-emails&amp;diff=14450</id>
		<title>Suivi des emails</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Suivi-des-emails&amp;diff=14450"/>
		<updated>2026-05-04T08:23:57Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* L'affichage des e-mails */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
Le ''suivi des e-mails'' permet de voir l'état des e-mails ([[Mailing|mailings]] et [[Envoi-des-emails|notifications automatiques]]) envoyés par la plateforme.&lt;br /&gt;
&lt;br /&gt;
Cette fonctionnalité est accessible depuis le menu '''Gestion &amp;gt; Communications &amp;gt; Suivi des e-mails''' et il faut avoir le droit d'[[Gestion-des-profils#Envoyer-et-suivre-les-e-mails|envoyer et suivre les e-mails]].&lt;br /&gt;
&lt;br /&gt;
Chaque utilisateur peut mettre à jour ses adresses e-mails dans le champ [[Fiche-personnelle#E-mail|E-mail]] de la fiche personnelle.&lt;br /&gt;
&lt;br /&gt;
=Gestion des e-mails envoyés=&lt;br /&gt;
==L'affichage des e-mails==&lt;br /&gt;
L'interface affiche toutes les informations nécessaires afin d'identifier un e-mail et les causes d'une possible erreur qui empêche sa réception :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Statut&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Titre&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Emetteur&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Catégorie&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Date&lt;br /&gt;
! score=&amp;quot;col&amp;quot; colspan=&amp;quot;3&amp;quot;|Destinataire&lt;br /&gt;
! score=&amp;quot;col&amp;quot; colspan=&amp;quot;3&amp;quot;|Erreurs&lt;br /&gt;
! score=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot;|Détails&lt;br /&gt;
|-&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|Utilisateur&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|E-mail destinataire&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|Type de destinataire&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|Erreurs&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|Première erreur&lt;br /&gt;
! score=&amp;quot;col&amp;quot;|Dernière erreur&lt;br /&gt;
|-&lt;br /&gt;
|Dernier état connu de l'e-mail :&lt;br /&gt;
*Aucune information disponible : ''Inconnu''&lt;br /&gt;
*Une ou plusieurs erreurs ont été rencontrées : ''Erreur''&lt;br /&gt;
*Le message a été reçu : ''Reçu''&lt;br /&gt;
|Sujet de l'e-mail&lt;br /&gt;
|Adresse émettrice&lt;br /&gt;
|Catégorie de l'e-mail :&lt;br /&gt;
*[[Envoi-des-emails#E-mail-d'alerte-de-maintenance|Alerte de maintenance]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-rappel-de-solde|Alerte de solde]]&lt;br /&gt;
*E-mail d'activation&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-demande-de-certification-de-validité|E-mail de certification]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-rappel-de-renouvellement-d'agrégation-bancaire|E-mail de rappel de renouvellement d'agrégation bancaire]]&lt;br /&gt;
*[[Envoi-des-emails#E-mail-de-rappel-d'échéance-de-validité|E-mail de validité]]&lt;br /&gt;
*[[Validités#Validités-en-attente-de-certification|Réservation]]&lt;br /&gt;
|Date '''d'envoi''' de l'e-mail, au format AAAA-MM-JJ HH:MM:SS&lt;br /&gt;
|Nom et prénom de l'utilisateur destinataire&lt;br /&gt;
|Adresse e-mail de l'utilisateur, utilisée '''lors de l'envoi'''&lt;br /&gt;
|&lt;br /&gt;
*Destinataire direct&lt;br /&gt;
*Destinataire en copie&lt;br /&gt;
*Destinataire en copie cachée&lt;br /&gt;
|&lt;br /&gt;
Nombre d'erreurs rencontrées lors de l'envoi&lt;br /&gt;
|Description de la première erreur, s'il y en a une&lt;br /&gt;
|Description de la deuxième erreur, s'il y en a plus de deux&lt;br /&gt;
|Redirection vers l'onglet comportant l'affichage de toutes les mises à jour du statut de l'e-mail&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Gérer le détail d'un e-mail=&lt;br /&gt;
Lors de la gestion d'un e-mail, l'action correspondant au pictogramme de la colonne '''Détails''' permet de rediriger vers l'onglet comportant toutes les informations de l'e-mail sélectionné.&lt;br /&gt;
&lt;br /&gt;
Un tableau s'ajoute dans un nouvel onglet :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Numéro d'identifiant!!Date!!Statut SMTP!!Description&lt;br /&gt;
|-&lt;br /&gt;
|Numéro d'identifiant de la mise à jour du statut, en base de données&lt;br /&gt;
|Date '''de traitement du statut''' de l'e-mail, au format AAAA-MM-JJ HH:MM:SS&lt;br /&gt;
|Code SMTP associé (succès ou erreur)&lt;br /&gt;
Lorsqu'un e-mail est envoyé, un statut SMTP est retourné permettant de récupérer des informations sur la réussite ou l'échec de l'envoi de l'email.&lt;br /&gt;
|Signification du code.&lt;br /&gt;
Si la définition d'un code n'est pas disponible, une plus générique sera alors utilisée. Une liste détaillée de tous les codes existants est trouvable [http://www.iana.org/assignments/smtp-enhanced-status-codes/smtp-enhanced-status-codes.xhtml ici]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
En haut à gauche du tableau se trouve un lien permettant de retourner sur l'onglet du suivi des emails. Ensuite, un autre lien apparaît en haut à droite du tableau général, permettant de retourner sur l'onglet du détail du dernier e-mail sélectionne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Attention : Dans le cas d'une erreur, le code récupéré peut parfois ne pas correspondre tout à fait à la situation réelle. Si une erreur intervient, appliquez les [[#Les bonnes pratiques pour envoyer correctement un e-mail|bonnes pratiques]]. Ces bonnes pratiques sont affichées en bas de la page de détail d'un e-mail.&lt;br /&gt;
&lt;br /&gt;
=Les bonnes pratiques pour envoyer correctement un e-mail=&lt;br /&gt;
Lorsqu'un e-mail est envoyé, plusieurs acteurs entrent en jeu :&lt;br /&gt;
*L'émetteur (la plateforme OpenFlyers)&lt;br /&gt;
*Les serveurs e-mail liés au destinataire&lt;br /&gt;
*Le destinataire&lt;br /&gt;
&lt;br /&gt;
*Les structures OpenFlyers sont correctement configurées pour permettre l'envoi d'un e-mail. Ainsi, si un problème intervient, il ne vient pas de la configuration de la plateforme.&lt;br /&gt;
*OpenFlyers tout comme le récepteur de l'e-mail ne peuvent agir sur les serveurs liés au destinataire. Si un problème apparaît de ce côté, rien ne peut être fait, il faut simplement attendre qu'il soit corrigé.&lt;br /&gt;
*Si les serveurs liés au destinataire fonctionnent bien au moment de l'envoi de l'e-mail, mais qu'un échec se produit, alors il vient du côté du destinataire qui peut ne pas être joignable pour plusieurs raisons.&lt;br /&gt;
&lt;br /&gt;
La bonne pratique consiste alors de demander aux utilisateurs concernés par un problème de réception d'e-mail de :&lt;br /&gt;
#Vérifier la syntaxe de leur adresse e-mail sur la plateforme OpenFlyers&lt;br /&gt;
#Vérifier que la boîte e-mail n'est pas saturée (pleine)&lt;br /&gt;
#Vérifier que le compte de messagerie n'est pas bloqué ou désactivé par le fournisseur de messagerie.&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Gestion-des-profils&amp;diff=14449</id>
		<title>Gestion des profils</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Gestion-des-profils&amp;diff=14449"/>
		<updated>2026-04-30T12:58:22Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Alertable par email pour toute saisie d'activité ou alerte de maintenance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter la '''gestion des profils''' sur la [[Accueil|version 4 d'OpenFlyers]].&lt;br /&gt;
&lt;br /&gt;
Les profils attribués par défaut à un utilisateur créé automatiquement sont définis dans '''Admin &amp;gt; Utilisateurs &amp;gt; Paramètres par défaut'''.&lt;br /&gt;
&lt;br /&gt;
=Définition=&lt;br /&gt;
*Un '''profil''' correspond à un ensemble de '''droits''' qui définissent les actions que peut effectuer un [[Glossaire|utilisateur]] dans l'application OpenFlyers.&lt;br /&gt;
*Un utilisateur peut disposer de '''plusieurs profils'''. L'attribution des profils aux utilisateurs se fait par l'intermédiaire du  [[Gestion des utilisateurs|tableau de gestion des utilisateurs]].&lt;br /&gt;
&lt;br /&gt;
''Exemple de profils : administrateur, pilote, formateur, technicien, mécanicien, trésorier, secrétaire.''&lt;br /&gt;
&lt;br /&gt;
=Icônes symbolisant les droits des profils=&lt;br /&gt;
Dans la page '''Admin &amp;gt; Utilisateurs &amp;gt; Profils''', il faut distinguer deux éléments pour comprendre le principe des icônes. Il y a les droits d'un côté et les profils de l'autre.&lt;br /&gt;
&lt;br /&gt;
Les droits constituent les entêtes du tableau. Chaque entête de colonne correspond à un droit.&lt;br /&gt;
L’icône [[File:Profile-management3.0.x_Userinfo_connected.gif]] a été attribuée à l'ensemble de ces droits sauf deux :&lt;br /&gt;
*[[#Profil-non-sélectionnable-par-l'utilisateur|Profil non sélectionnable par l'utilisateur]] de l'onglet '''Généralités''' à laquelle l'icône [[File:Profile-management3.0.x_ConnectedNoFilling.png]] à été attribuée&lt;br /&gt;
*[[#Voir-les-noms-sur-les-réservations%2C-les-activités-réalisées-et-la-liste-des-utilisateurs|Voir les noms sur les réservations]] de l'onglet '''Réservations''' à laquelle l'icône [[File:Profile-management3.0.x_Userinfo_kiosk.gif]] à été attribuée&lt;br /&gt;
&lt;br /&gt;
Les profils correspondent à chaque ligne du tableau. L'icône d'un profil est variable et dépend des droits qui lui sont attribués.&lt;br /&gt;
#L'icône d'un profil sera [[File:Profile-management3.0.x_ConnectedNoFilling.png]] si le droit [[#Profil-non-sélectionnable-par-l'utilisateur|Profil non sélectionnable par l'utilisateur]] ci-dessus est coché&lt;br /&gt;
#L'icône d'un profil sera [[File:Profile-management3.0.x_Userinfo_kiosk.gif]] si aucun droit n'est attribué au profil à l'exception du droit [[#Voir-les-noms-sur-les-réservations%2C-les-activités-réalisées-et-la-liste-des-utilisateurs|Voir les noms sur les réservations]] ci-dessus qui peut être coché ou non&lt;br /&gt;
#Dans tous les autres cas, l'icône d'un profil sera [[File:Profile-management3.0.x_Userinfo_connected.gif]]&lt;br /&gt;
&lt;br /&gt;
==Définition des icônes représentant des droits==&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_connected.gif]] : Droit qui définit un profil de base.&lt;br /&gt;
:[[File:Profile-management3.0.x_ConnectedNoFilling.png]] : Droit qui rend un profil non sélectionnable par un utilisateur lors de sa connexion.&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_kiosk.gif]] : Droit qui rend un profil de type &amp;quot;kiosque&amp;quot; (voir [[Kiosque PC]]) permettant de consulter le planning uniquement. Si au moins un droit de base est activé, le profil devient un profil de base.&lt;br /&gt;
&lt;br /&gt;
==Définition des icônes attribuées aux profils==&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_connected.gif]] : Profil de base&lt;br /&gt;
:[[File:Profile-management3.0.x_ConnectedNoFilling.png]] : Profil non sélectionnable par un utilisateur lors de sa connexion.&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_kiosk.gif]] : Profil de type &amp;quot;kiosque&amp;quot; (voir [[Kiosque PC]]) permettant de consulter le planning uniquement. Toute modification ou saisie par un utilisateur nécessitera une identification par le biais d'une fenêtre &amp;quot;pop-up&amp;quot; demandant à l'utilisateur son propre identifiant et mot de passe.&lt;br /&gt;
&lt;br /&gt;
=Niveau d'accréditation des droits et des profils=&lt;br /&gt;
Les niveaux d'accréditation vont de 0 à 6 :&lt;br /&gt;
*0 représente le niveau le plus bas&lt;br /&gt;
*6 représente le niveau le plus élevé&lt;br /&gt;
&lt;br /&gt;
Chaque droit dispose d'un niveau d'accréditation qui lui est propre : plus le droit permet de faire des actions pouvant avoir des conséquences sur les données, plus le niveau d'accréditation est élevé.&lt;br /&gt;
&lt;br /&gt;
Chaque profil dispose également d'un niveau d'accréditation. Le niveau d'accréditation d'un profil correspond au niveau d'accréditation le plus élevé des droits détenus par le profil.&lt;br /&gt;
&lt;br /&gt;
La page '''Admin &amp;gt; Utilisateurs &amp;gt; Profils''' indique les niveaux d'accréditation à la fois des droits et des profils :&lt;br /&gt;
*Les droits sont indiqués dans les entêtes de chaque colonne. Le niveau d'accréditation du droit est indiqué en dessous du nom du droit dans un cercle.&lt;br /&gt;
*Les profils sont indiqués à chaque ligne du tableau. le niveau d'accréditation du profil est indiqué en dessous du nom du profil dans un cercle.&lt;br /&gt;
Le niveau d'accréditation 6 est affiché en inverse vidéo par rapport aux autres niveaux pour le distinguer.&lt;br /&gt;
&lt;br /&gt;
Un gestionnaire disposant le droit de gérer des utilisateurs ne peut attribuer un profil à un utilisateur qui soit plus élevé que le profil le plus élevé qu'il détient lui-même.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'une plateforme dispose de plus de 3 utilisateurs avec le niveau 6, [[Alertes-de-configuration#La-plateforme-a-plus-de-3-utilisateurs-actifs-avec-un-profil-de-niveau-6.-Les-utilisateurs-concernés-sont-:-XXX|une alerte de configuration est affichée]].&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un droit de niveau 6 est accordé à un profil, une alerte est générée si cela entraîne plus de 3 utilisateurs de niveau 6.&lt;br /&gt;
&lt;br /&gt;
=Profils=&lt;br /&gt;
La gestion des profils s'effectue depuis le menu '''Admin &amp;gt; Utilisateurs &amp;gt; Profils'''.&lt;br /&gt;
&lt;br /&gt;
Le nombre d'onglets disponible dépend du paramétrage de la plateforme OpenFlyers. Par exemple, si la gestion des activités est activée, alors l'onglet ''Activités'' est disponible.&lt;br /&gt;
&lt;br /&gt;
==Généralités==&lt;br /&gt;
&lt;br /&gt;
===Profil non sélectionnable par l'utilisateur===&lt;br /&gt;
&lt;br /&gt;
Lors de la connexion et lorsqu'un utilisateur doit faire le choix entre un profil pour se connecter, les [[Bien-débuter-avec-OpenFlyers#Attribuer-les-profils-aux-utilisateurs|profils non sélectionnables]] ne seront pas proposés parmi la liste. Ce droit ne peut pas être attribué à un profil ayant des droits de gestion.&lt;br /&gt;
&lt;br /&gt;
===Pas de déconnexion automatique===&lt;br /&gt;
Ce droit permet d'éviter la [[Connexion#Automatique|déconnexion automatique de la session]] au bout de 10 minutes et étend la connexion à 2 heures.&lt;br /&gt;
&lt;br /&gt;
===Accès visiteur===&lt;br /&gt;
L'accès visiteur permet de [[Kiosque-PC#Créer-un-compte-utilisateur-Visiteur|créer un compte visiteur]] donnant un accès limité destiné à pouvoir être utilisé par n'importe quelle personne.&lt;br /&gt;
&lt;br /&gt;
Cet accès permet également de créer un lien vers OpenFlyers avec une connexion automatique en passant les identifiants via l'URL.&lt;br /&gt;
&lt;br /&gt;
Si un visiteur [[#Réservation|peut réserver]] - dépend du paramétrage - alors, lors de la création d'une réservation, [[Utilisation-des-réservations-internes-sur-l%27appli-mobile#Créer-automatiquement-un-utilisateur-en-créant-une-réservation|le système va générer automatiquement un compte utilisateur]] à partir des informations que le visiteur aura saisi. Le visiteur sera connecté automatiquement sur ce nouveau compte.&lt;br /&gt;
&lt;br /&gt;
===Mise à jour de sa date de naissance, de son sexe et de sa nationalité===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur de modifier [[Fiche-personnelle#Mettre-à-jour-sa-date-de-naissance,-sa-nationalité-ou-son-sexe|sa date de naissance, sa nationalité et/ou son sexe dans sa fiche personnelle]].&lt;br /&gt;
&lt;br /&gt;
===Voir ses validités===&lt;br /&gt;
&lt;br /&gt;
Permet d'[[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|accéder à ses validités depuis le planning]].&lt;br /&gt;
&lt;br /&gt;
===Ajout et gestion de ses validités===&lt;br /&gt;
&lt;br /&gt;
Permet à un [[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|utilisateur de rajouter/supprimer/mettre à jour ses validités]] qui sont dans la liste [[#Type-de-validité-que-l'utilisateur-peut-gérer-pour-lui-même|Type de validité que l'utilisateur peut gérer]] et pour la mise à jour, sous réserve que le type de validité dispose d'informations qui peuvent être mises à jour.&lt;br /&gt;
&lt;br /&gt;
===Gestion de ses validités détenues===&lt;br /&gt;
&lt;br /&gt;
Permet à un [[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|utilisateur de mettre à jour/supprimer uniquement les validités]] qui lui sont déjà attribuées et qui sont dans la liste [[#Type-de-validité-que-l'utilisateur-peut-gérer-pour-lui-même|Type de validité que l'utilisateur peut gérer]] et pour la mise à jour, sous réserve que le type de validité dispose d'informations qui peuvent être mises à jour.&lt;br /&gt;
&lt;br /&gt;
===Surpasser les restrictions sur les validités===&lt;br /&gt;
Permet à un utilisateur de surpasser les [[Connexion#Restriction-d'accès|restrictions d'accès]] dues à des validités expirées, incomplétes ou non certifiées qui sont [[Validités#Contrôle-des-validités-à-la-connexion|appliquées à la connexion]].&lt;br /&gt;
&lt;br /&gt;
Voir le chapitre [[Paramétrage-des-validités#Alerte-à-la-connexion|Alerte à la connexion]] pour le paramétrage des restrictions sur les validités.&lt;br /&gt;
&lt;br /&gt;
[[Connexion#Restriction-d'accès-pour-un-administrateur-référent|Ce droit peut être attribué de façon dynamique à la connexion]] par un [[Configuration#Administrateur-référent|administrateur référent]].&lt;br /&gt;
&lt;br /&gt;
===Editer sa photo===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur [[Fiche-personnelle#Editer-sa-photo|d'importer ou de supprimer sa photo dans sa fiche personnelle]].&lt;br /&gt;
&lt;br /&gt;
==Réservation==&lt;br /&gt;
&lt;br /&gt;
===Alertable par e-mail pour toute réservation===&lt;br /&gt;
Permet la [[Fiche-personnelle#Recevoir-un-e-mail-pour-les-réservations-ayant-pour-activité|notification par e-mail pour toute réservation]].&lt;br /&gt;
&lt;br /&gt;
===Champs additionnels visualisables dans les pop-ups de réservation===&lt;br /&gt;
Permet de visualiser le contenu des champs additionnels dans la pop-up de réservation.&lt;br /&gt;
&lt;br /&gt;
===Créer ou modifier une réservation avec une date de début dépassée===&lt;br /&gt;
Autorise à créer ou modifier une réservation dont la date de début est dépassée.&lt;br /&gt;
&lt;br /&gt;
===Etre sur une nouvelle réservation===&lt;br /&gt;
Permet lors d'une nouvelle réservation, que l'utilisateur disposant du profil concerné soit autorisé à être sur une des places. &lt;br /&gt;
&lt;br /&gt;
Permet entre autre à un utilisateur tiers, de pouvoir effectuer de nouvelles réservations pour un utilisateur disposant du profil concerné et n'ayant pas de droit [[#Réservation-en-solo|Réservation solo]], [[#Réservation-pour-des-tiers|Réservation pour des tiers]] ou [[#Réservation-avec-un-instructeur|Réservation avec un instructeur]].&lt;br /&gt;
&lt;br /&gt;
===Gestion des disponibilités des ressources===&lt;br /&gt;
Sur l'ancienne interface, permet de gérer la disponibilité des ressources et de les immobiliser (pour entretien, maintenance, réparation, arrêt d'activité, ...). &lt;br /&gt;
&lt;br /&gt;
Cela se fait comme pour une réservation, une case &amp;quot;immobiliser la ressource&amp;quot; est alors disponible. Sur la frise de réservation, il sera indiqué &amp;quot;Mise en maintenance&amp;quot; pour la période demandée.&lt;br /&gt;
&lt;br /&gt;
===Gestion des disponibilités des tiers===&lt;br /&gt;
Permet de gérer la [[Gestion-des-disponibilités#Gérer-la-disponibilité-des-intervenants|disponibilité des utilisateurs]].&lt;br /&gt;
&lt;br /&gt;
===Personnaliser ses ressources visibles===&lt;br /&gt;
Permet de personnaliser la [[Fiche-personnelle#Paramétrer-les-ressources-et-les-utilisateurs-visibles-sur-le-planning|liste des ressources et utilisateurs visibles dans le planning depuis sa fiche utilisateur]].&lt;br /&gt;
&lt;br /&gt;
===Planning individuel visible pour les autres===&lt;br /&gt;
Permet de rendre disponible son planning aux autres utilisateurs.&lt;br /&gt;
&lt;br /&gt;
===Planning personnel===&lt;br /&gt;
Permet de visualiser son propre planning.&lt;br /&gt;
&lt;br /&gt;
===Réservation de programmes===&lt;br /&gt;
Autorise [[Utilisation-des-réservations-internes-sur-l%27interface-web#Positionner-automatiquement-les-activités-d’un-programme-de-formation|le positionnement automatique des activités d’un programme de formation dans le planning]].&lt;br /&gt;
&lt;br /&gt;
===Réservation en solo===&lt;br /&gt;
Autorise un utilisateur de réserver une ressource avec lui-même en première place.&lt;br /&gt;
&lt;br /&gt;
===Réservation pour des tiers===&lt;br /&gt;
Autorise la réservation d'une ressource pour un autre utilisateur (en solo et/ou double selon les droits du profil de cet utilisateur tiers).&lt;br /&gt;
&lt;br /&gt;
===Réservation avec un instructeur===&lt;br /&gt;
Autorise la réservation d'une ressource avec une personne en seconde place.&lt;br /&gt;
&lt;br /&gt;
===Supprimer une réservation avec une date de début dépassée===&lt;br /&gt;
Autorise à supprimer une réservation dont la date de début est dépassée.&lt;br /&gt;
&lt;br /&gt;
===Surpasser l'indisponibilité des instructeurs=== &lt;br /&gt;
Autorise la réservation d'une ressource avec un instructeur même si celui-ci n'est pas enregistré comme disponible durant la plage horaire de la réservation (Un message d'alerte prévient quand même. Fonction utile pour les instructeurs et le secrétariat).&lt;br /&gt;
&lt;br /&gt;
===Surpasser l'indisponibilité des ressources===&lt;br /&gt;
Autorise la réservation d'une ressource même si celle-ci n'est pas enregistrée comme disponible durant la plage horaire de la réservation (Un message d'alerte prévient quand même).&lt;br /&gt;
&lt;br /&gt;
===Surpasser l'interdiction d'effectuer une réservation dans moins de X temps===&lt;br /&gt;
Autorise la réservation en annulant l'interdiction &amp;quot;d'effectuer une réservation débutant dans moins de&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Surpasser l'interdiction de modifier ou supprimer une réservation débutant dans moins de X temps ===&lt;br /&gt;
Permet de surpasser l'[[Utilisation-des-réservations-internes-sur-l'interface-web#Alerte-de-délai-minimum-pour-modifier%2Fsupprimer-une-réservation|alerte de délai minimum pour modifier/supprimer une réservation]] qui s'affiche lorsque est paramétrée l'[[Configuration-des-réservations-internes#Interdire-la-modification-ou-la-suppression-d'une-réservation-débutant-dans-moins-de|interdiction de modifier ou supprimer une réservation débutant dans moins de X temps]].&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de durée minimum===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur la durée minimum d'une réservation.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de durée maximum===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur la durée maximum d'une réservation.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de temps===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur la limitation dans le temps des réservations.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de nombre===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur le nombre maximum de réservation.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la réservation par type===&lt;br /&gt;
En cas de chevauchement, cela permet de déplacer la réservation sur une autre ressource de type différent.&lt;br /&gt;
&lt;br /&gt;
===Surpasser les formules de saisie===&lt;br /&gt;
Permet de surpasser les règles de saisie sur les réservations.&lt;br /&gt;
&lt;br /&gt;
===Voir les images des pilotes sur le menu contextuel===&lt;br /&gt;
Permet de [[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-images-des-pilotes-sur-le-menu-contextuel|visualiser images des pilotes associés à chaque réservation sur le menu contextuel]] lorsqu'on survole ou effectue un clic droit sur la réservation.&lt;br /&gt;
&lt;br /&gt;
===Voir les noms sur les réservations, les activités réalisées et la liste des utilisateurs===&lt;br /&gt;
Permet de visualiser les noms des utilisateurs sur la page du planning à la fois pour les réservations et les [[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-activités-réalisées|activités réalisées]].&lt;br /&gt;
&lt;br /&gt;
===Voir les noms d'activités sur les réservations et les activités réalisées===&lt;br /&gt;
Permet d'[[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-noms-d'activités-sur-les-réservations-et-les-activités-réalisées|afficher les noms d'activités sur les réservations et les activités réalisées]].&lt;br /&gt;
&lt;br /&gt;
==Activités==&lt;br /&gt;
&lt;br /&gt;
===Alertable par email pour toute saisie d'activité ou alerte de maintenance===&lt;br /&gt;
;Description&lt;br /&gt;
Ce droit permet aux gestionnaires :&lt;br /&gt;
*de [[Fiche-personnelle#Recevoir-un-e-mail-pour-les-activités-ayant-les-champs-sélectionnés-non-vide|s'abonner aux notifications par emails dès lorsqu'une activité est saisie par un utilisateur en renseignant un champ suivi par le gestionnaire]].&lt;br /&gt;
*de recevoir un email lorsqu'un aéronef dépasse l'un des seuils d'alerte de potentiel restant&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
* [[Suivi-de-maintenance#Butées-de-maintenance|Suivi de maintenance]]&lt;br /&gt;
* [[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
===Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs===&lt;br /&gt;
Ce droit permet de suivre le renouvellement des validités par les utilisateurs en étant alerté par un [[Envoi-des-emails#E-mail-d'information-des-actions-des-utilisateurs-sur-des-validités|e-mail d'information des actions des utilisateurs sur des validités]] à chaque fois qu'un utilisateur renouvelle une validité sélectionnée dans la liste de la cellule '''Alerté par e-mail pour le renouvellement des types de validités'''. Attention : la mise en place de ce droit peut provoquer la réception de nombreux e-mails.&lt;br /&gt;
&lt;br /&gt;
===Attribution de place===&lt;br /&gt;
Permet d'attribuer les places auxquelles sont autorisées les utilisateurs de ce profil. Cela impacte sur les listes des utilisateurs qui se nttrouve à la saisie d'une réservation ou d'une activité.&lt;br /&gt;
&lt;br /&gt;
Ces listes sont accessibles depuis '''Planning &amp;gt; Planning &amp;gt; Réserver''' et '''Planning &amp;gt; Activités &amp;gt; Saisir'''.&lt;br /&gt;
&lt;br /&gt;
La page '''Admin &amp;gt; Type de ressource &amp;gt; Places''' permet de gérer les places d'un type de ressource. Elle permet également de définir qui a le droit d'être sur telle place en cas de restriction de profil.&lt;br /&gt;
&lt;br /&gt;
===Etre sur une nouvelle fermeture d'activité===&lt;br /&gt;
Permet lors d'une nouvelle fermeture d'activité, que la personne disposant du profil concerné soit autorisée à être sur une des places.&lt;br /&gt;
&lt;br /&gt;
Permet entre autre à une personne tierce, de pouvoir effectuer de nouvelles fermetures d'activité pour une personne disposant du profil concerné et n'ayant pas le droit [[#Saisie-d'activité-pour-soi-même|Saisie d'activité pour soi-même]] ou [[#Saisie-d'activité-pour-un-tiers|Saisie d'activité pour un tiers]].&lt;br /&gt;
&lt;br /&gt;
===Etre sur une nouvelle ouverture d'activité===&lt;br /&gt;
Permet lors d'une nouvelle ouverture d'activité, que la personne disposant du profil concerné soit autorisée à être sur une des places.&lt;br /&gt;
&lt;br /&gt;
Permet entre autre à une personne tierce, de pouvoir effectuer de nouvelles ouvertures d'activité pour une personne disposant du profil concerné et n'ayant pas le droit [[#Saisie-d'activité-pour-soi-même|Saisie d'activité pour soi-même]] ou [[#Saisie-d'activité-pour-un-tiers|Saisie d'activité pour un tiers]].&lt;br /&gt;
&lt;br /&gt;
===Saisie d'activité pour soi-même===&lt;br /&gt;
Autorise la saisie des vols et permet aussi à l'utilisateur de voir son carnet de vols.&lt;br /&gt;
&lt;br /&gt;
Permet également de supprimer ses propres vols depuis son carnet de vol et depuis le [[Carnet-de-route#Modifier-et-supprimer|carnet de route]].&lt;br /&gt;
&lt;br /&gt;
===Saisie d'activité pour un tiers===&lt;br /&gt;
Autorise la saisie des vols pour des tiers et permet de voir les carnets de vols des utilisateurs.&lt;br /&gt;
&lt;br /&gt;
Permet également de supprimer les vols des tiers depuis le carnet de vol d'un utilisateur et depuis le [[Carnet-de-route#Modifier-et-supprimer|carnet de route]].&lt;br /&gt;
&lt;br /&gt;
===Vérifier la saisie des activités et les modifier===&lt;br /&gt;
Permet de voir les carnets de vols des utilisateurs et de pointer les vols (vérification qui entérine un vol et qui rend ainsi sa modification ou suppression impossible), permet ainsi de voir les &amp;quot;vols oubliés&amp;quot; aussi (trous dans les horamètres).&lt;br /&gt;
&lt;br /&gt;
===Voir les activités de tous===&lt;br /&gt;
Permet :&lt;br /&gt;
*d'accéder au [[Carnet-de-route|carnet de route]] de chaque ressource aéronef&lt;br /&gt;
*de [[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-activités-réalisées|voir les activités réalisées sur le planning]] si le paramètre [[Configuration-des-réservations-internes#Affichage-possible-des-activités-réalisées-dans-le-planning|Affichage possible des activités réalisées dans le planning]] est activé&lt;br /&gt;
&lt;br /&gt;
===Voir ses activités===&lt;br /&gt;
Autorise l'utilisateur à voir son carnet de vol.&lt;br /&gt;
&lt;br /&gt;
===Visualiser les traces de vol===&lt;br /&gt;
Permet de [[Interfaçage-OpenFlyers-et-Charterware#Récupération-des-traces-de-vols|visualiser les traces d'un vol]].&lt;br /&gt;
&lt;br /&gt;
==Formations==&lt;br /&gt;
===Voir les suivis de formations===&lt;br /&gt;
Autorise l'utilisateur à [[Gestion-des-activités#Consulter-le-suivi-de-formation|voir les suivis de formations]] de tous les utilisateurs.&lt;br /&gt;
&lt;br /&gt;
===Gestion des formations===&lt;br /&gt;
Ce droit permet la [[Gestion-des-formations|gestion des formations]].&lt;br /&gt;
&lt;br /&gt;
==Comptes==&lt;br /&gt;
&lt;br /&gt;
===Gestion des comptes===&lt;br /&gt;
Couplé à d'autres droits, permet de créer et modifier les intitulés des comptes (boutiques, espèces, etc.) ainsi que d'accéder à la comptabilité.&lt;br /&gt;
&lt;br /&gt;
Permet lors de la [[Gestion-de-la-comptabilité-côté-utilisateur#Extrait-de-compte|visualisation des écritures]] d'un compte :&lt;br /&gt;
*de pouvoir consulter les écritures des comptes affectés&lt;br /&gt;
*[[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-une-facture-client-ou-un-reçu-d'encaissement|de pouvoir consulter une facture client ou un reçu]]&lt;br /&gt;
*de pouvoir [[Utilisation-de-la-comptabilité#Contrepasser-une-écriture|contrepasser les écritures]]&lt;br /&gt;
*de pouvoir [[Utilisation-de-la-comptabilité#Lettrer-des-écritures-comptables|lettrer les écritures]]&lt;br /&gt;
&lt;br /&gt;
Permet [[Utilisation-de-la-comptabilité#Importer-un-relevé-bancaire|d'importer des relevés bancaires]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ce droit inclut les droits '''Paramétrage des types d'encaissements''' et '''Voir les comptes'''.&lt;br /&gt;
&lt;br /&gt;
===Voir les comptes===&lt;br /&gt;
[[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-son-compte-ou-celui-d'un-tiers|Permet de voir tous les comptes]], de [[Gestion-de-la-comptabilité-côté-utilisateur#Extrait-de-compte|visualiser la liste des mouvements]] et de [[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-une-facture-client-ou-un-reçu-d'encaissement|consulter les factures clients et les reçus]].&lt;br /&gt;
&lt;br /&gt;
Couplé au droit [[#Saisir-les-encaissements-pour-les-tiers|Saisir les encaissements pour les tiers]], il permet de saisir un encaissement sur tous comptes. Ce droit inclut les privilèges du droit [[#Voir-les-comptes-utilisateurs|Voir les comptes utilisateurs]].&lt;br /&gt;
&lt;br /&gt;
===Voir les comptes utilisateurs===&lt;br /&gt;
[[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-son-compte-ou-celui-d'un-tiers|Permet de voir tous les comptes utilisateurs]] et de [[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-une-facture-client-ou-un-reçu-d'encaissement|consulter les factures clients et les reçus]].&lt;br /&gt;
&lt;br /&gt;
Couplé au droit [[#Saisir-les-encaissements-pour-les-tiers|Saisir les encaissements pour les tiers]], il permet de saisir un encaissement sur les comptes utilisateurs.&lt;br /&gt;
&lt;br /&gt;
===Gestion des comptabilités===&lt;br /&gt;
&lt;br /&gt;
permet la gestion des comptabilités&lt;br /&gt;
&lt;br /&gt;
===Paramétrage des types d'encaissements===&lt;br /&gt;
Permet le [[Configuration-de-la-comptabilité#Types-d'encaissements|paramétrage des types d'encaissements]].&lt;br /&gt;
&lt;br /&gt;
===Encaisser ses paiements===&lt;br /&gt;
&lt;br /&gt;
Permet à l'utilisateur de [[FAQ-comptabilité#Comment-autoriser-un-profil-utilisateur-à-saisir-des-encaissements-pour-lui-même-?|saisir ses propres paiements]], de les modifier ou de les supprimer tant qu'ils n'ont pas été validés. L'utilisateur ne peut pas saisir les types d'encaissements qui sont ''Accessible uniquement aux personnes autorisées à saisir pour les tiers''.&lt;br /&gt;
&lt;br /&gt;
===Saisir les encaissements pour les tiers===&lt;br /&gt;
&lt;br /&gt;
Permet à l'utilisateur de saisir, modifier ou supprimer, tant qu'ils n'ont pas été validés, les encaissements d'autres utilisateurs ainsi que les encaissements devant être affectés sur des [[Configuration de la comptabilité#Créer_un_compte_comptable|comptes comptables clients autorisés à recevoir de l'argent]].&lt;br /&gt;
&lt;br /&gt;
===Modifier la date d'un encaissement, d'un flux ou d'un transfert===&lt;br /&gt;
&lt;br /&gt;
autorise la modification de la date d'un encaissement, d'un flux ou d'un transfert s'il peut être modifié&lt;br /&gt;
&lt;br /&gt;
===Valider les encaissements===&lt;br /&gt;
&lt;br /&gt;
pointage des paiements saisis par les pilotes par exemple (Modification ultérieure de cette saisie impossible, en cas de problème il faudra alors faire l'opération inverse). Permet également la suppression d'encaissement.&lt;br /&gt;
&lt;br /&gt;
===Recevoir de l'argent===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur d'être sur la liste des paiements remis. Voir la [[Configuration-de-la-comptabilité#Types-d'encaissements|configuration de la ventilation des types d'encaissements]].&lt;br /&gt;
&lt;br /&gt;
===Transfert de son compte===&lt;br /&gt;
Permet le transfert de compte à compte depuis la page '''Planning &amp;gt; Comptes &amp;gt; Actions &amp;gt; Transférer'''.&lt;br /&gt;
&lt;br /&gt;
Les transferts effectués avec ce seul droit (sans le droit [[#Transfert-de-son-compte-sans-validation|Transfert de son compte sans validation]]) depuis cette page sont validés automatiquement.&lt;br /&gt;
&lt;br /&gt;
===Transfert de son compte sans validation===&lt;br /&gt;
Permet lors d'un transfert de compte à compte, que les flux générés ne soient pas automatiquement validés. Ce droit n'a d'effet que si le droit [[#Transfert-de-son-compte|Transfert de son compte]] est affecté au profil.&lt;br /&gt;
&lt;br /&gt;
'''Conseil OpenFlyers :''' Ce droit a été créé à la demande de clients OpenFlyers. Néanmoins, nous en déconseillons son usage. En effet, avec ce droit, un utilisateur qui &amp;quot;donne&amp;quot; de l'argent à un autre utilisateur peut ensuite reprendre sa donation. Or comme le dit l'expression : &amp;quot;[https://fr.wiktionary.org/wiki/donner_c%E2%80%99est_donner,_reprendre_c%E2%80%99est_voler Donner c'est donner, reprendre c'est voler]&amp;quot;. L'attribution du seul droit [[#Transfert-de-son-compte|Transfert de son compte]] permet un comportement conforme aux fonctionnalités présentes sur les applications bancaires, à savoir que lorsqu'on effectue un virement ce virement est définitif. Si un utilisateur se trompe dans son virement, alors il faut qu'il demande soit à la personne à qui il a donné de lui rendre le trop-perçu, soit à un gestionnaire de la structure pour qu'elle saisisse une écriture corrective. L'intérêt de procéder ainsi est qu'on conserve visuellement et directement sur les comptes la trace des opérations effectuées.&lt;br /&gt;
&lt;br /&gt;
===Saisir tout flux===&lt;br /&gt;
Permet de :&lt;br /&gt;
*[[Utilisation-de-la-comptabilité#Saisir-un-flux|saisir des flux]] depuis '''Gestion &amp;gt; Comptes &amp;gt; Flux &amp;gt; Saisir'''&lt;br /&gt;
*de modifier/supprimer des flux non validés&lt;br /&gt;
*de consulter la liste des flux depuis '''Gestion &amp;gt; Comptes &amp;gt; Flux &amp;gt; Valider'''&lt;br /&gt;
*de [[Gestion-de-la-comptabilité-côté-utilisateur#Extrait-de-compte|visualiser la liste des mouvements]]&lt;br /&gt;
*d'[[Utilisation-de-la-comptabilité#Importer-un-relevé-bancaire|importer des relevés bancaires]]&lt;br /&gt;
&lt;br /&gt;
===Valider tout flux===&lt;br /&gt;
Permet de valider les flux de la page '''Gestion &amp;gt; Comptes &amp;gt; Flux &amp;gt; Valider'''.&lt;br /&gt;
&lt;br /&gt;
Ce droit n'a effet que si le droit [[#Saisir-tout-flux|Saisir tout flux]] est affecté au profil.&lt;br /&gt;
&lt;br /&gt;
===Paramétrage de la facturation===&lt;br /&gt;
Permet de gérer les règles de [[Facturation-des-clients#Facturation-des-activités|facturation des activités]] et de [[Facturation-des-clients#Facturation-périodique|facturation périodique]].&lt;br /&gt;
&lt;br /&gt;
===Saisie des valeurs de facturation===&lt;br /&gt;
&lt;br /&gt;
Permet de gérer les variables et leurs valeurs destinés aux règles de facturation&lt;br /&gt;
&lt;br /&gt;
===Compte sur lequel un utilisateur peut agir===&lt;br /&gt;
&lt;br /&gt;
Permet de définir sur quel compte utilisateur un encaissement ou un transfert peut être réalisé par la personne connectée. Attention : ce droit est pour l'utilisateur connecté et non pas pour l'utilisateur concerné par l'encaissement ou le transfert.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limitation du solde du compte===&lt;br /&gt;
Permet à un utilisateur disposant de ce droit dans l'un de ses profils de ne pas avoir de [[Connexion#Restriction-d'accès|restriction d'accès]], de saisie de réservation ou de saisie de vol lorsque [[Configuration de la comptabilité#Restriction_d'accès_en_cas_de_solde_insuffisant|une restriction sur les soldes]] est en place. Il aura juste une alerte à la connexion. Ce droit ne permet pas à l'utilisateur concerné X de pouvoir surpasser les restrictions d'un autre utilisateur Y en effectuant par exemple une réservation en son nom alors que Y n'a ni le droit de surpasser ni le solde suffisant.&lt;br /&gt;
&lt;br /&gt;
[[Connexion#Restriction-d'accès-pour-un-administrateur-référent|Ce droit peut être attribué de façon dynamique à la connexion]] par un [[Configuration#Administrateur-référent|administrateur référent]].&lt;br /&gt;
&lt;br /&gt;
===Surpasser le seuil de [[Gestion-de-la-comptabilité-côté-utilisateur#Transférer-de-l'argent|transfert de compte]]===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur disposant de ce droit dans l'un de ses profils de ne pas être bloqué lorsque une [[Configuration-de-la-comptabilité#Paramétrage-général-des-comptabilités|restriction sur les soldes]] est en place et qu'il ne dispose pas d'un solde suffisant.&lt;br /&gt;
&lt;br /&gt;
==Ventes==&lt;br /&gt;
&lt;br /&gt;
===Gestion globale des ventes===&lt;br /&gt;
&lt;br /&gt;
Permet de gérer les produits, la facturation des produits, les stocks et [[Paramétrage-des-validités#Validité-à-vendre|validités à vendre]]. Permet également de modifier/supprimer des achats de produit.&lt;br /&gt;
&lt;br /&gt;
===Achat ventes libres===&lt;br /&gt;
&lt;br /&gt;
Autorise à acheter tous les produits qui sont en vente libre. Permet également de modifier/supprimer des achats de produit.&lt;br /&gt;
&lt;br /&gt;
===Acheter pour les tiers===&lt;br /&gt;
Autorise à effectuer/modifier/supprimer des achats de produit pour un tiers.&lt;br /&gt;
*Couplé au droit [[#Gestion-des-utilisateurs|Gestion des utilisateurs]], il permet de gérer les [[Paramétrage-des-validités#Validité-à-vendre|validités à vendre]] d'un tiers.&lt;br /&gt;
*Couplé au droit [[Gestion-des-profils#Vente-de-produit-sans-tarif|Vente de produit sans tarif]], il permet de vendre des [[Gestion-des-produits-et-des-ventes#Configuration-d'un-produit-non-stocké-sans-tarif-défini|produits sans tarif]].&lt;br /&gt;
&lt;br /&gt;
===Vente de produit sans tarif===&lt;br /&gt;
Autorise à rendre disponible et à acheter des produits sans tarif. Nécessite le droit [[#Acheter-pour-les-tiers|Acheter pour les tiers]].&lt;br /&gt;
&lt;br /&gt;
===Débrayage des ventes de validités===&lt;br /&gt;
&lt;br /&gt;
Autorise à ajouter et modifier la date d'expiration d'une [[Validités#Validité-à-vendre|validité à vendre]] sans débiter le compte.&lt;br /&gt;
&lt;br /&gt;
==Achats==&lt;br /&gt;
&lt;br /&gt;
===Gestion des achats===&lt;br /&gt;
Permet la gestion des factures fournisseurs, à en créer, modifier et supprimer.&lt;br /&gt;
&lt;br /&gt;
==Admin==&lt;br /&gt;
===Gestion du paramétrage===&lt;br /&gt;
Ce droit est nécessaire pour accéder aux pages permettant de [[Paramétrage|paramétrer la plateforme]] et fait apparaitre le menu '''Structure''' avec les items :&lt;br /&gt;
*[[Données#Accéder-au-tableau-de-conservation-des-données|'''Admin &amp;gt; Structure &amp;gt; Données &amp;gt; Conservation des données''']]&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Canaux de communications'''&lt;br /&gt;
*[[Configuration#Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Paramétrage|'''Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Paramétrage''']]&lt;br /&gt;
*[[Configuration#Admin-&amp;gt;-Structure-&amp;gt;-Structure-&amp;gt;-Coordonnées|'''Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Coordonnées''']]&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Définition'''&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Actualisation'''&lt;br /&gt;
*[[Configuration#Structure-&amp;gt;-Champs-métiers|'''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Champs métiers''']]&lt;br /&gt;
*[[Configuration#Structure-&amp;gt;-Export-SQL|'''Admin &amp;gt; Structure &amp;gt; Export SQL &amp;gt; Complet''']]&lt;br /&gt;
*[[Utilisation-de-la-comptabilité#Importer-son-modèle-de-facture|'''Admin &amp;gt; Structure &amp;gt; Imports &amp;gt; Templates ODT''']]&lt;br /&gt;
&lt;br /&gt;
Ce droit fait également apparaitre des items utiles au paramétrage mais présents dans d'autres menus :&lt;br /&gt;
*Couplé au droit [[#Gestion-des-utilisateurs|Gestion des utilisateurs]], dans le menu '''Admin &amp;gt; Utilisateurs''' :&lt;br /&gt;
**[[Champs-métiers|'''Admin &amp;gt; Utilisateurs &amp;gt; Champs métiers''']]&lt;br /&gt;
**'''[[Gestion des statuts|Admin &amp;gt; Utilisateurs &amp;gt; Statuts]]'''&lt;br /&gt;
*[[Gestion-des-types-d'activités|'''Admin &amp;gt; Types d'activités &amp;gt; Actifs''']]&lt;br /&gt;
*[[Champs-métiers|'''Admin &amp;gt; Types d'activités &amp;gt; Champs métiers''']]&lt;br /&gt;
*[[Champs-métiers|'''Ventes &amp;gt; Champs métiers &amp;gt; Champs métiers''']]&lt;br /&gt;
&lt;br /&gt;
===Gestion des valeurs===&lt;br /&gt;
&lt;br /&gt;
===Gestion des profils===&lt;br /&gt;
permet de créer et modifier les profils. Attention, laisser cette autorisation à au moins un profil !&lt;br /&gt;
&lt;br /&gt;
===Gestion des utilisateurs===&lt;br /&gt;
&lt;br /&gt;
Permet de modifier les caractéristiques, infos et photos des utilisateurs, les désactiver et gérer leurs validités qui ne correspondent pas à des [[Paramétrage-des-validités#Validité-à-vendre|validités à vendre]]. Couplé au droit [[#Acheter-pour-les-tiers|Acheter pour les tiers]], il permet de gérer les [[Paramétrage-des-validités#Validité-à-vendre|validités qui sont à vendre]].&lt;br /&gt;
&lt;br /&gt;
===Gestion des ressources===&lt;br /&gt;
Permet la gestion complète des types de ressources et des ressources (créer/supprimer/modifier/associer des validités). Autorise également la gestion de navigabilité des ressources aéronefs et la gestion des statuts.&lt;br /&gt;
&lt;br /&gt;
Permet d'accéder à [[Gestion-des-documents|la liste des documents]] qui sont associés aux ressources et leur gestion (Ajouter, modifier, supprimer). Permet aussi de gérer la liste des catégories de ces documents.&lt;br /&gt;
&lt;br /&gt;
===Gestion des rapports===&lt;br /&gt;
Fait apparaître le menu '''[[Gestion-des-rapports|Gestion &amp;gt; Rapports]]''' avec les items :&lt;br /&gt;
* '''Gestion &amp;gt; Rapports &amp;gt; Rapports personnalisés &amp;gt; Champs métiers'''&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Gestion &amp;gt; Rapports &amp;gt; Rapports personnalisés &amp;gt; Créer/Modifier]]'''&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Gestion &amp;gt; Rapports &amp;gt; Rapports personnalisés &amp;gt; Visualiser]]'''&lt;br /&gt;
* '''Gestion &amp;gt; Rapports &amp;gt; Rapports spécifiques &amp;gt; Activités et coûts'''&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Gestion &amp;gt; Rapports &amp;gt; Bibliothèque]]'''&lt;br /&gt;
&lt;br /&gt;
Fait apparaître la [[Gestion-des-rapports#Case-à-cocher-Mémoriser-ce-choix|case à cocher '''Mémoriser ce choix''']].&lt;br /&gt;
&lt;br /&gt;
Donne également accès à '''Gestion &amp;gt; Comptes &amp;gt; Gestion &amp;gt; Compte de résultat'''.&lt;br /&gt;
&lt;br /&gt;
===Voir tous les rapports===&lt;br /&gt;
Fait apparaître le menu '''Rapports''' avec les items :&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Rapports personnalisés &amp;gt; Visualiser]]'''&lt;br /&gt;
* '''Rapports spécifiques &amp;gt; Vols et coûts'''&lt;br /&gt;
Cela permet de consulter l'intégralité des rapports, y compris les favoris.&lt;br /&gt;
&lt;br /&gt;
Fait apparaître la [[Gestion-des-rapports#Case-à-cocher-Mémoriser-ce-choix|case à cocher '''Mémoriser ce choix''']].&lt;br /&gt;
&lt;br /&gt;
Donne également accès à '''Gestion &amp;gt; Comptes &amp;gt; Gestion &amp;gt; Compte de résultat'''.&lt;br /&gt;
&lt;br /&gt;
===Gestion des logs===&lt;br /&gt;
Fait apparaître le menu '''Admin &amp;gt; Logs''' avec les items :&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Actions effectuées'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Adresses IP bloquées'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Historique d'une réservation'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Identifiants bloqués'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Requête utilisateur en attente'''&lt;br /&gt;
&lt;br /&gt;
===Envoyer et suivre les e-mails===&lt;br /&gt;
Permet d'accéder à la page [[Mailing|Mailing]] et de [[Suivi-des-emails|suivre les emails]].&lt;br /&gt;
&lt;br /&gt;
===Accès aux tableurs===&lt;br /&gt;
Permet d'accéder aux fichiers [[Tableurs|tableurs]] depuis le menu.&lt;br /&gt;
&lt;br /&gt;
===Gestion des communications===&lt;br /&gt;
Permet de gérer les flux d'informations et leurs canaux.&lt;br /&gt;
&lt;br /&gt;
==Modules désactivés==&lt;br /&gt;
*Un onglet lié à un module désactivé est affiché uniquement si au moins un droit de son groupe reste actif sur au moins un profil utilisateur.&lt;br /&gt;
*Dans ce cas:&lt;br /&gt;
**L'onglet apparaît avec l'indication '''désactivé'''.&lt;br /&gt;
**Les droits non cochés apparaissent en mode inactif (non modifiables), empêchant toute nouvelle attribution.&lt;br /&gt;
**Les droits déjà attribués (cases cochées) restent visibles.&lt;br /&gt;
*Si aucun droit du groupe n'est actif, l'onglet correspondant n'est plus affiché.&lt;br /&gt;
&lt;br /&gt;
=Profils Plus=&lt;br /&gt;
*'''Admin &amp;gt; Utilisateurs &amp;gt; Profils plus'''&lt;br /&gt;
&lt;br /&gt;
==Ajouter un profil depuis Profils plus==&lt;br /&gt;
*Cliquer sur une cellule contenant le caractère '''+'''&lt;br /&gt;
*remplissez la cellule puis appuyer sur la touche &amp;quot;Entrée&amp;quot;&lt;br /&gt;
*pour valider cliquer sur la disquette à gauche dans la colonne &amp;quot;Actions&amp;quot;&lt;br /&gt;
*le nouveau profil est placé à la fin du tableau&lt;br /&gt;
&lt;br /&gt;
==Modifier un profil depuis Profils plus==&lt;br /&gt;
*Cliquer sur une cellule du profil à modifier&lt;br /&gt;
*remplissez la cellule puis appuyer sur la touche &amp;quot;Entrée&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Colonnes du tableau Profils Plus==&lt;br /&gt;
===Nom (du profil)===&lt;br /&gt;
Nom du profil&lt;br /&gt;
&lt;br /&gt;
===Type de compte requis===&lt;br /&gt;
Permet de définir les comptes utilisateurs appartenant aux types sélectionnés qui seront créés pour les nouveaux utilisateurs ou ajoutés aux utilisateurs existants à qui on attribuera ce profil&lt;br /&gt;
&lt;br /&gt;
===Champ métier visible par le profil sur le formulaire utilisateur ou sur le planning===&lt;br /&gt;
Permet d'afficher ou de cacher les [[Champs-métiers|champs métiers]] des formulaires présents dans :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*'''Gestion &amp;gt; Utilisateurs &amp;gt; Utilisateurs &amp;gt; Actifs'''&lt;br /&gt;
*'''Planning &amp;gt; Planning &amp;gt; Réserver'''&lt;br /&gt;
&lt;br /&gt;
===Type de validité que l'utilisateur peut gérer pour lui-même===&lt;br /&gt;
Permet de sélectionner les types de validités qu'un utilisateur de ce profil peut [[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|ajouter/acheter/mettre/supprimer]] (ex: Licence fédérale, Visite Médicale, Autres licences) pour lui-même. Les validités d'un utilisateur sont accessibles depuis '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Validités'''.&lt;br /&gt;
&lt;br /&gt;
[[Paramétrage-des-validités#Profils-autorisés-à-gérer-pour-eux-mêmes|Lors de l'ajout d'un type de validité, celui-ci est automatiquement affecté aux profils]].&lt;br /&gt;
&lt;br /&gt;
===Types de validités que l'utilisateur peut gérer et certifier===&lt;br /&gt;
Permet de sélectionner les types de validités qu'un utilisateur de ce profil peut gérer et certifier.&lt;br /&gt;
&lt;br /&gt;
[[Paramétrage-des-validités#Profils-autorisés-à-gérer/certifier-pour-les-autres|Lors de l'ajout d'un type de validité, celui-ci est automatiquement affecté aux profils]].&lt;br /&gt;
&lt;br /&gt;
Tous les utilisateurs détenant un profil pouvant certifier un type de validité coché recevront un [[Envoi-des-emails#E-mail-de-demande-de-certification-de-validité|e-mail]] lorsqu'une validité d'un des types choisis sera ajoutée par un utilisateur et [[Validités#Validités-en-attente-de-certification|en attente de certification]].&lt;br /&gt;
&lt;br /&gt;
'''NB''': Pour que la notification soit effective, il faut également que l'utilisateur ait coché l'option '''[[Fiche-personnelle#Recevoir-un-e-mail-pour-chaque-validité-en-attente-de-certification|Recevoir un e-mail pour chaque validité en attente de certification]]''' dans [[Fiche-personnelle#Notifications|sa fiche personnelle (onglet ''Notifications'')]].&lt;br /&gt;
&lt;br /&gt;
===Contrats non requis===&lt;br /&gt;
Voir la définition de [[Paramétrage-des-validités#Validité-contrat|validité-contrat]].&lt;br /&gt;
&lt;br /&gt;
Permet de [[Gestion-des-profils#Modifier-un-profil-depuis-Profils-plus|définir]] les [[Paramétrage-des-validités#Validité-contrat|validités-contrats]] qui ne sont pas requises pour certains profils.&lt;br /&gt;
&lt;br /&gt;
Les utilisateurs ne disposant que de profils exemptés, ne se verront pas demandés la signature des validités-contrats à la connexion. Tous les autres utilisateurs doivent signer chacun des contrats s'ils disposent d'au moins un profil non-exempté ou si la validité-contrat est requise pour tous les profils.&lt;br /&gt;
&lt;br /&gt;
La signature des validités-contrats, se fait juste après l'identification à la connexion. Le formulaire apparait tant qu'il reste au moins un contrat non-signé. L'utilisateur ne peut passer outre ce processus.&lt;br /&gt;
&lt;br /&gt;
===Attribution de place===&lt;br /&gt;
Permet d'attribuer les places auxquelles sont autorisées les utilisateurs de ce profil. Cela impacte sur les listes des utilisateurs que l'on trouve à la saisie d'une réservation ou d'un vol.&lt;br /&gt;
&lt;br /&gt;
Ces listes sont accessibles depuis '''Planning &amp;gt; Planning &amp;gt; Réserver''' et '''Planning &amp;gt; Activités &amp;gt; Saisir une activités'''.&lt;br /&gt;
&lt;br /&gt;
La page '''Admin &amp;gt; Type de ressource &amp;gt; Places''' permet de gérer les places d'un type de ressource. Elle permet également de définir qui a le droit d'être sur telle place en cas de restriction de profil.&lt;br /&gt;
&lt;br /&gt;
===Profils visibles===&lt;br /&gt;
Dans les pages '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle''', '''Gestion &amp;gt; Utilisateurs &amp;gt; Actifs''' et '''Admin &amp;gt; Utilisateurs &amp;gt; Paramètres par défaut''', on peut sélectionner les utilisateurs auxquels on souhaite voir leur planning.&lt;br /&gt;
&lt;br /&gt;
La liste des utilisateurs affichés sont ceux possédant un profil ayant les droits [[#Planning-personnel|Planning personnel]] et [[#Planning-individuel-visible-pour-les-autres|Planning individuel visible pour les autres]]. La colonne '''Profils visibles''' permet de restreindre la liste de ces utilisateurs pour ne la limiter qu'aux utilisateurs possédant les profils sélectionnés.&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' Il faut attribuer à un profil au moins une place de 1ère rang (numéro de place 0).&lt;br /&gt;
&lt;br /&gt;
===Types de ressources visibles===&lt;br /&gt;
Dans les pages '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle''', '''Gestion &amp;gt; Utilisateurs &amp;gt; Actifs''' et '''Admin &amp;gt; Utilisateurs &amp;gt; Paramètres par défaut''', on peut sélectionner les ressources dont on souhaite voir le [[Utilisation-des-réservations-internes-sur-l%27appli-mobile|planning]] ou les rendre disponibles dans les formulaires de saisie de réservation et d'activité.&lt;br /&gt;
&lt;br /&gt;
La colonne '''Types de ressources visibles''' permet de restreindre la liste de ces ressources pour ne la limiter qu'aux ressources appartenant aux types de ressources sélectionnés.&lt;br /&gt;
&lt;br /&gt;
===Comptabilités visibles===&lt;br /&gt;
Permet de sélectionner les comptabilités qui sont visibles pour un profil. De plus, les types de compte et les comptes n'étant pas d'une comptabilité sélectionnée ne seront pas visibles.&lt;br /&gt;
&lt;br /&gt;
===Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs===&lt;br /&gt;
Ce droit permet de suivre le renouvellement des validités par les utilisateurs en étant alerté par e-mail à chaque fois qu'un utilisateur renouvelle une validité sélectionnée dans la liste de la cellule '''Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs'''. Attention : la mise en place de ce droit peut provoquer la réception de nombreux e-mails.&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==[[Connexion#Choix_du_profil|Choix du profil à la connexion]]==&lt;br /&gt;
&lt;br /&gt;
==Ajouter un profil==&lt;br /&gt;
&lt;br /&gt;
Depuis l'interface dynamique :&lt;br /&gt;
*Cliquer sur l'icône de menu correspondant à la gestion des profils&lt;br /&gt;
*Ajouter une ligne&lt;br /&gt;
*Compléter les cellules&lt;br /&gt;
*L'ajout est enregistré si les cellules suivantes sont correctement remplies :&lt;br /&gt;
**'''Nom du profil''' : la cellule doit être remplie et le nom ne pas avoir déjà été utilisé comme nom de profil.&lt;br /&gt;
&lt;br /&gt;
Depuis l'interface légère :&lt;br /&gt;
*Aller sur '''Admin &amp;gt; Utilisateurs &amp;gt; Profils'''&lt;br /&gt;
*En-dessous du tableau listant les profils, cliquer sur le bouton '''AJOUTER UN PROFIL'''&lt;br /&gt;
*Renseigner les droits pour chaque onglet&lt;br /&gt;
*Aller sur '''Admin &amp;gt; Utilisateurs &amp;gt; Profils plus'''&lt;br /&gt;
*Renseigner les colonnes pour la ligne du profil nouvellement créé&lt;br /&gt;
&lt;br /&gt;
===Ajouter un profil qui surpasse la restriction en cas de solde insuffisant===&lt;br /&gt;
*Procéder à l'ajout de ligne dans un tableau.&lt;br /&gt;
*Saisir par exemple comme nom '''Non restreignable'''.&lt;br /&gt;
*Toujours dans '''Admin &amp;gt; Utilisateurs &amp;gt; Profils''', onglet '''Généralités''', cocher pour ce profil le droit [[Gestion des profils#Généralités|Profil non sélectionnable par l'utilisateur]].&lt;br /&gt;
*Dans l'onglet '''Gestion des comptes''', sélectionner le droit [[#Surpasser-la-limitation-du-solde-du-compte|Surpasser la limitation du solde du compte]] pour le profil concerné&lt;br /&gt;
Il suffit ensuite de rajouter ce profil aux utilisateurs concernés.&lt;br /&gt;
&lt;br /&gt;
=Créer un profil empêchant tout surpassement=&lt;br /&gt;
Il peut être nécessaire d'empêcher un utilisateur de pouvoir réserver ou saisir une activité même en recourant à l'aide d'un tiers qui disposerait de droits permettant de surpasser des restrictions, que cela soit sur des comptes ou sur des validités.&lt;br /&gt;
&lt;br /&gt;
Cela peut être le cas, par exemple, pour la détention d'une validité ''Cotisation'' périmée ou lorsque le solde du compte utilisateur est insuffisant (cf. [[Configuration-de-la-comptabilité#Restriction-d'accès-en-cas-de-solde-insuffisant|Restriction d'accès en cas de solde insuffisant]]).&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place une telle restriction, il faut :&lt;br /&gt;
*[[Gestion-des-profils#Ajouter-un-profil|Ajouter un profil]] en lui attribuant l'ensemble des droits (ne pas oublier la page '''Admin &amp;gt; Utilisateurs &amp;gt; Profils plus'''&lt;br /&gt;
*[[Gestion-des-profils#Modifier-un-profil|Modifier le profil]] nouvellement créé&lt;br /&gt;
**Si l'utilisateur ne doit pas pouvoir ouvrir un vol : dans l'onglet [[Gestion-des-profils#Activités|Activités]], décocher le droit [[Gestion-des-profils#Etre-sur-une-nouvelle-ouverture-d'activité|Etre sur une nouvelle ouverture d'activité]]&lt;br /&gt;
**Si l'utilisateur ne doit pas pouvoir être sur une réservation : dans l'onglet [[Gestion-des-profils#Réservation|Réservation]], décocher les droits [[Gestion-des-profils#Etre-sur-une-nouvelle-réservation|Etre sur une nouvelle réservation]], [[Gestion-des-profils#Réservation-solo|Réservation solo]] et [[Gestion-des-profils#Réservation-avec-un-instructeur|Réservation avec un instructeur]]&lt;br /&gt;
&lt;br /&gt;
==Droits particuliers==&lt;br /&gt;
*'''GÉNÉRALITÉS / Profil non sélectionnable par l'utilisateur :''' ce droit n'est applicable que si les [[Gestion des utilisateurs|utilisateurs disposant du profil concerné]] possèdent au moins un autre [[Connexion#Sélection_du_profil|profil sélectionnable à la connexion]].&lt;br /&gt;
*'''GÉNÉRALITÉS ADMIN / Gestion des profils :''' au moins un profil doit posséder ce droit.&lt;br /&gt;
&lt;br /&gt;
==Modifier un profil==&lt;br /&gt;
La modification des profils s'effectue selon les règles d'[[Utilisation des tableaux#Édition_des_données#|édition des données d'un tableau]].&lt;br /&gt;
&lt;br /&gt;
==Supprimer un profil==&lt;br /&gt;
*La suppression d'un profil est possible uniquement si les [[Gestion des utilisateurs|utilisateurs disposant de ce profil]] possèdent aussi au moins un autre profil.&lt;br /&gt;
*Procéder à la suppression de ligne dans un tableau.&lt;br /&gt;
&lt;br /&gt;
==Valeurs par défaut lors de la création d'un profil==&lt;br /&gt;
Lors de la création d'un profil, on affecte automatiquement par défaut :&lt;br /&gt;
* Tous les '''Profils visibles'''&lt;br /&gt;
* Tous les '''Types de ressources visibles'''&lt;br /&gt;
* Toutes les '''Comptabilités visibles'''&lt;br /&gt;
* Les '''Attribution de place''' correspondants à la première place de chaque type de ressource&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Fiche-personnelle&amp;diff=14448</id>
		<title>Fiche personnelle</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Fiche-personnelle&amp;diff=14448"/>
		<updated>2026-04-30T12:55:22Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Recevoir les emails d'alerte de potentiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Fiche_personnelle.png|right|thumb|200px|Fiche personnelle]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter la '''fiche personnelle''' dans la [[Accueil|version 4 d'OpenFlyers]].&lt;br /&gt;
&lt;br /&gt;
=Accès=&lt;br /&gt;
Depuis le [[Utilisation-des-réservations-internes-sur-l%27interface-web|planning de l'interface légère]] :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
&lt;br /&gt;
=Affichage du menu contextuel=&lt;br /&gt;
Le menu contextuel et un menu déroulant qui apparait lors du survol d'une réservation ou d'un vol ouvert. Ce menu contextuel peut apparaitre :&lt;br /&gt;
*soit automatiquement&lt;br /&gt;
*soit par un clic droit de la souris&lt;br /&gt;
Ce paramétrage est personnalisable pour chaque utilisateur :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Cocher ou décocher '''N'afficher la description des réservations qu'avec le bouton droit de la souris''' selon le comportement souhaité&lt;br /&gt;
*Cliquer sur le bouton '''Sauver''' tout en bas du formulaire&lt;br /&gt;
&lt;br /&gt;
=Afficher les éphémérides=&lt;br /&gt;
Permet sur le [[Utilisation-des-réservations-internes-sur-l%27interface-web|planning de l'interface légère]] :&lt;br /&gt;
* D'afficher la boîte des éphémérides&lt;br /&gt;
* Faire une distinction de couleur sur les créneaux horaires liés aux éphémérides&lt;br /&gt;
&lt;br /&gt;
[[File:Ephemeride_ancienne_interface.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Ce paramétrage est personnalisable pour chaque utilisateur :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Cocher ou décocher '''Afficher les éphémérides''' selon le comportement souhaité&lt;br /&gt;
*Cliquer sur le bouton '''Sauver''' tout en bas du formulaire&lt;br /&gt;
&lt;br /&gt;
=Choisir l'unité de temps=&lt;br /&gt;
Chaque utilisateur peut choisir l'unité de temps qui sert à afficher les heures.&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Choisir dans le champ '''Unité de temps''' parmi :&lt;br /&gt;
**heures minutes&lt;br /&gt;
**heures centièmes&lt;br /&gt;
**heures dixièmes&lt;br /&gt;
*Appuyer sur le bouton '''Sauver'''.&lt;br /&gt;
&lt;br /&gt;
==[[Champs métiers]]==&lt;br /&gt;
En plus des champs habituels, des [[Champs-métiers|champs métiers]] spécifiques à la structure peuvent apparaître dans la fiche personnelle. &lt;br /&gt;
&lt;br /&gt;
Ils sont affichés [[Gestion-des-profils#Généralités|si les droits sont attribués par l'administrateur]] et permettent d'activer des fonctionnalités supplémentaires, par exemple, [[Interfaçage-Aérogligli|l'interfaçage avec Aérogligli]].&lt;br /&gt;
&lt;br /&gt;
=Changer sa langue=&lt;br /&gt;
*Aller dans '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Dans la colonne '''Accès et interface''', changer la '''langue'''&lt;br /&gt;
*Cliquer sur '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
=Changer son mot de passe=&lt;br /&gt;
&lt;br /&gt;
==Alertes en changeant son mot de passe==&lt;br /&gt;
&lt;br /&gt;
===Vous devez saisir l'ancien mot de passe et deux fois le nouveau===&lt;br /&gt;
&lt;br /&gt;
Lors du changement du mot de passe, cette alerte s'affiche si :&lt;br /&gt;
*L'un des champs du formulaire n'a pas été saisi.&lt;br /&gt;
&lt;br /&gt;
===Vous devez saisir deux fois le même nouveau mot de passe===&lt;br /&gt;
&lt;br /&gt;
Lors du changement du mot de passe, cette alerte s'affiche si :&lt;br /&gt;
*L'un des champs du formulaire n'a pas été saisi et que l'ancien mot de passe n'est pas demandé.&lt;br /&gt;
*Le nouveau mot de passe et sa confirmation ne sont pas identiques.&lt;br /&gt;
&lt;br /&gt;
==Niveau de sécurité du mot de passe==&lt;br /&gt;
&lt;br /&gt;
Lors du changement du mot de passe, une barre montre le niveau de sécurité du mot de passe. Cette barre a 4 niveaux : '''faible''', '''moyen''', '''fort''' et '''excellent'''. Pour évaluer le niveau de sécurité du mot de passe nous regardons son nombre de caractères, s'il y a des lettres minuscules et majuscules, s'il y a des chiffres et s'il y a des caractères de ponctuation.&lt;br /&gt;
&lt;br /&gt;
Plus précisément voici ce que requiert chaque niveau :&lt;br /&gt;
*Faible : le mot de passe doit avoir au moins 1 caractère&lt;br /&gt;
*Moyen : le mot de passe doit avoir au moins 8 caractères et doit être composé de 2 types de caractères (par exemple des lettres minuscules et des lettres majuscules)&lt;br /&gt;
*Fort : le mot de passe doit avoir au moins 8 caractères et doit être composé de 3 types de caractères (par exemple des lettres minuscules, des lettres majuscules et des chiffres)&lt;br /&gt;
*Excellent : le mot de passe doit avoir au moins 14 caractères et doit être composé de 3 types de caractères (par exemple des lettres minuscules, des lettres majuscules et des chiffres)&lt;br /&gt;
&lt;br /&gt;
=Communication=&lt;br /&gt;
== E-mail ==&lt;br /&gt;
; Saisir plusieurs adresses&lt;br /&gt;
Il est possible de renseigner plusieurs adresses e-mails dans ce champ en séparant chaque adresse e-mail par une virgule.&lt;br /&gt;
&lt;br /&gt;
Attention : Il ne faut jamais mettre d’espace : &lt;br /&gt;
* Ni dans l’adresse e-mail elle-même&lt;br /&gt;
* Ni avant ou après les virgules de séparation des adresses e-mails.&lt;br /&gt;
&lt;br /&gt;
Exemple correct :&lt;br /&gt;
&amp;lt;pre&amp;gt;exemple1@domaine.com,exemple2@domaine.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemples incorrects :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exemple1@domaine.com , exemple2@domaine.com&lt;br /&gt;
exemple1@domaine.com ,exemple2@domaine.com&lt;br /&gt;
exemple1@domaine.com, exemple2@domaine.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Règles de format&lt;br /&gt;
Les adresses e-mails doivent respecter les normes définies par la [https://www.rfc-editor.org/rfc/rfc5322#section-3.4.1 RFC 5322]. Voici les principales règles à suivre :&lt;br /&gt;
&lt;br /&gt;
Caractères autorisés dans la partie locale (avant le &amp;quot;@&amp;quot;) :&lt;br /&gt;
* Lettres majuscules et minuscules (A–Z, a–z)&lt;br /&gt;
* Chiffres (0–9)&lt;br /&gt;
* Caractères spéciaux : &amp;lt;code&amp;gt;! # $ % &amp;amp; ' * + - / = ? ^ _ ` { | } ~&amp;lt;/code&amp;gt;&lt;br /&gt;
* Le point (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;), à condition qu'il :&lt;br /&gt;
** Ne soit ni en début, ni en fin&lt;br /&gt;
** Ne se suive pas lui-même (pas de &amp;lt;code&amp;gt;..&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Caractères autorisés dans le domaine (après le &amp;quot;@&amp;quot;) :&lt;br /&gt;
* Lettres majuscules et minuscules (A–Z, a–z)&lt;br /&gt;
* Chiffres (0–9)&lt;br /&gt;
* Tirets (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;), à condition qu'ils :&lt;br /&gt;
** Ne soient ni en début, ni en fin&lt;br /&gt;
&lt;br /&gt;
Exemples d'adresses e-mails valides :&lt;br /&gt;
* &amp;lt;code&amp;gt;exemple@domaine.com&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;prenom.nom@domaine.fr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;utilisateur+tag@domaine.co.uk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemples d'adresses e-mails invalides :&lt;br /&gt;
* &amp;lt;code&amp;gt;exemple@domaine..com&amp;lt;/code&amp;gt; (double point consécutif)&lt;br /&gt;
* &amp;lt;code&amp;gt;ç@domaine.com&amp;lt;/code&amp;gt; (caractère &amp;quot;ç&amp;quot; non autorisé dans la partie locale)&lt;br /&gt;
* &amp;lt;code&amp;gt;espace @domaine.com&amp;lt;/code&amp;gt; (espace non autorisé)&lt;br /&gt;
&lt;br /&gt;
==Gérer l'abonnement à la liste de diffusion==&lt;br /&gt;
Lorsque une liste de diffusion mailman gérée par OpenFlyers est activée pour la plateforme OpenFlyers, l'utilisateur peut de lui-même gérer son abonnement à la liste de diffusion :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Formulaire '''Liste de diffusion : nomdelastructure-ml@openflyers.info'''&lt;br /&gt;
*Cocher/décocher le bouton '''Abonné(e)'''&lt;br /&gt;
*Cliquer sur le bouton '''Sauver'''&lt;br /&gt;
&lt;br /&gt;
=Editer sa photo=&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'import ou la suppression d'une photo requiert le droit [[Gestion-des-profils#Editer-sa-photo|Editer sa photo]]. Ce droit n'est pas nécessaire pour rendre sa photo visible pour tous.&lt;br /&gt;
*Lors de l'import, si la photo de profil a une taille supérieure à 600 pixels (de largeur ou de hauteur), elle est automatiquement redimensionner à cette taille. Son poids ne doit pas être supérieur à 100Ko.&lt;br /&gt;
&lt;br /&gt;
=Mettre à jour sa date de naissance, sa nationalité ou son sexe=&lt;br /&gt;
Le droit [[Gestion-des-profils#Mise-à-jour-de-sa-date-de-naissance,-de-son-sexe-et-de-sa-nationalité|Mise à jour de sa date de naissance, de son sexe et de sa nationalité]] est requis pour mettre à jour sa date de naissance, sa nationalité ou son sexe.&lt;br /&gt;
&lt;br /&gt;
=Notifications=&lt;br /&gt;
==Etre informé des actualités OpenFlyers par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin d'être prévenu ou non par e-mail des nouveautés OpenFlyers.&lt;br /&gt;
&lt;br /&gt;
==Recevoir un e-mail pour chaque facture==&lt;br /&gt;
Cette option permet d'activer ou de désactiver l'[[Envoi-des-emails#E-mail-de-facture|envoi automatique de chaque facture]] appartenant à l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Cette option apparait lorsque les paramètres [[Paramétrage-des-activités#Envoyer-un-email-pour-chaque-facture|Envoyer un-email pour chaque facture]] et [[Paramétrage-des-activités#Autoriser-les-utilisateurs-à-choisir-de-recevoir-ou-non-un-email-pour-chaque-facture|Autoriser les utilisateurs à choisir de recevoir ou non un-email pour chaque facture]] sont activés. Cf. chapitre [[Facturation-des-clients#Envoi-automatique-de-chaque-facture-client|Envoi automatique de chaque facture client]].&lt;br /&gt;
&lt;br /&gt;
==Recevoir un e-mail pour chaque validité en attente de certification==&lt;br /&gt;
Cette option permet à un utilisateur de recevoir un [[Envoi-des-emails#E-mail-de-demande-de-certification-de-validité|e-mail]] lorsqu'une validité est en attente de certification.&lt;br /&gt;
&lt;br /&gt;
Pour que cela fonctionne, l'utilisateur doit faire partie [[Gestion-des-profils#Types-de-validités-que-l'utilisateur-peut-gérer-et-certifier|d'un profil ayant le droit de certifier le type de validité concerné]].&lt;br /&gt;
&lt;br /&gt;
=Notifications des réservations=&lt;br /&gt;
==Notification des réservations par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin d'être prévenu ou non par [[Envoi-des-emails#E-mail-de-notification-de-réservation|e-mail des réservations créées ou modifiées]] le concernant.&lt;br /&gt;
&lt;br /&gt;
==Rappel des réservations de 2 jours d'avance par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin de recevoir ou non par e-mail un rappel de réservation.&lt;br /&gt;
&lt;br /&gt;
Les rappels sont envoyés entre 0h et 6h au fuseau Europe/Paris pour les réservations débutant entre 2 et 3 jours après.&lt;br /&gt;
&lt;br /&gt;
Les [[Envoi-des-emails#Présentation|rappels ne sont effectifs que sur les plateformes en production]].&lt;br /&gt;
&lt;br /&gt;
==Rappel des réservations de la veille ou de la journée par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin de recevoir ou non l'e-mail de rappel de la structure concernant une réservation passée (réservation de la veille ou de la journée). L'e-mail contient un message paramétré par la structure.&lt;br /&gt;
&lt;br /&gt;
Les rappels sont envoyés entre 0h et 6h au fuseau Europe/Paris pour les réservations de la veille.&lt;br /&gt;
&lt;br /&gt;
Les [[Envoi-des-emails#Présentation|rappels ne sont effectifs que sur les plateformes en production]].&lt;br /&gt;
&lt;br /&gt;
==Notification des réservations annulées==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin d'être prévenu ou non par [[#E-mail_d'annulation_de_réservation|e-mail des réservations annulées]] le concernant.&lt;br /&gt;
&lt;br /&gt;
==Recevoir un e-mail pour les réservations ayant pour activité==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Lorsque l'utilisateur dispose d'un profil avec le droit [[Gestion-des-profils#Alertable-par-e-mail-pour-toute-réservation|Alertable par e-mail pour toute réservation]], apparait une liste de case à cocher avec pour label '''Recevoir un e-mail pour les réservations ayant pour activité'''.&lt;br /&gt;
*L'utilisateur peut cocher ou décocher ces cases afin d'être prévenu ou non [[Envoi-des-emails|par e-mail]] lorsqu'une réservation avec l'une de ces [[Gestion-des-activités|activités]] est créée ou modifiée par n'importe quel utilisateur.&lt;br /&gt;
&lt;br /&gt;
=Notification des activités=&lt;br /&gt;
==Recevoir un e-mail pour les activités ayant les champs sélectionnés non vide==&lt;br /&gt;
;Prérequis&lt;br /&gt;
*Disposé du droit [[Gestion-des-profils#Alertable-par-email-pour-toute-saisie-d'activité-ou-alerte-de-maintenance|Alertable par email pour toute saisie d'activité ou alerte de maintenance]]&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Dans la partie '''Notification des activités''', apparait le champ ''Recevoir un e-mail pour les activités ayant les champs sélectionnés non vide'' avec en-dessous une liste de champs métiers cochables :&lt;br /&gt;
*L'utilisateur coche ou décoche ces cases afin d'être prévenu ou non [[Envoi-des-emails#E-mail-d%27activités-avec-champs-non-vides|par e-mail]] lorsqu'une activité est saisie avec l'un des champs concernés renseigné par n'importe quel utilisateur.&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
[[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
==Recevoir les emails d'alerte de potentiel==&lt;br /&gt;
;Prérequis&lt;br /&gt;
*Disposer du droit [[Gestion-des-profils#Alertable-par-email-pour-toute-saisie-d'activité-ou-alerte-de-maintenance|Alertable par email pour toute saisie d'activité ou alerte de maintenance]].&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Dans la partie '''Notification des activités''', activer l'option ''Recevoir les e-mails d'alerte de potentiel'' pour recevoir automatiquement des notifications par e-mail lorsqu'une activité déclenche un signalement de potentiel.&lt;br /&gt;
&lt;br /&gt;
*[[Suivi-de-maintenance#Butées-de-maintenance|Gérer la configuration des seuils d'alerte]].&lt;br /&gt;
&lt;br /&gt;
=Paramétrer les ressources et les utilisateurs visibles sur le planning=&lt;br /&gt;
Depuis la fiche personnelle, il est possible de choisir quelles ressources matérielles et humaines sont visibles sur le planning avec le droit [[Gestion-des-profils#Personnaliser-ses-ressources-visibles|Personnaliser ses ressources visibles]].&lt;br /&gt;
&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Dans la catégorie '''Options d'affichage''' :&lt;br /&gt;
*Cocher ou décocher les '''Ressources visibles''' ou '''Utilisateurs visibles''' à afficher.&lt;br /&gt;
&lt;br /&gt;
=Synchronisation des réservations=&lt;br /&gt;
==Mettre en place un planning partagé avec Google agenda==&lt;br /&gt;
;Présentation&lt;br /&gt;
L'objectif de cette procédure est de permettre la création d'un planning partagé contenant l'ensemble des réservations d'une plateforme OpenFlyers afin qu'elles soient visibles depuis un agenda Google lui-même partagé entre plusieurs personnes&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*Créer un compte utilisateur ayant un profil disposant du droit [[Gestion-des-profils#Alertable-par-e-mail-pour-toute-réservation|Alertable par e-mail pour toute réservation]]&lt;br /&gt;
Depuis la fiche personnelle de l'utilisateur créé :&lt;br /&gt;
*Suivre la procédure [[#Synchroniser-les-réservations-dans-OpenFlyers-avec-un-agenda-Google|Synchroniser les réservations dans OpenFlyers avec un agenda Google]] &lt;br /&gt;
*Dans '''Recevoir un e-mail pour les réservations ayant pour activité''', cocher les activités pour lesquelles la synchronisation avec le planning partagé Google agenda doit s'effectuer&lt;br /&gt;
*Cliquer sur le bouton '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
==Synchroniser les réservations dans OpenFlyers avec un agenda Google==&lt;br /&gt;
;Présentation&lt;br /&gt;
L'objectif est de synchroniser ses réservations personnelles présentes sur une plateforme OpenFlyers avec un compte Google agenda&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Sous le titre '''Synchronisation des réservations''' et le sous titre '''avec Google agenda'''&lt;br /&gt;
*Cliquer sur le bouton '''Se connecter avec Google'''&lt;br /&gt;
*Si plusieurs comptes Google sont enregistrés dans le navigateur, une page s'affiche demandant avec quel compte Google il faut se synchroniser. Sélectionner le compte concerné&lt;br /&gt;
*Une fois le compte Google sélectionné, le nom du compte en question s'affiche en dessous du sous titre '''avec Google agenda'''&lt;br /&gt;
Lorsque l'utilisateur a lié son compte Google agenda, une liste d'agendas apparaît lui permettant de choisir dans quel agenda les événements doivent être créés.&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Sous le titre '''Synchronisation des réservations''' et le sous titre '''Calendrier'''&lt;br /&gt;
*Choisir un des agendas de la liste&lt;br /&gt;
*Cliquer sur '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
=Synchroniser les activités avec Carnet.aero=&lt;br /&gt;
;Présentation&lt;br /&gt;
L'objectif est de permettre la synchronisation et l'exportation automatiques des données d'activités vers [[Interfaçage OpenFlyers et Carnet.aero|'''Carnet.aero''']].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Prérequis&lt;br /&gt;
* Il faut [[Interfaçage-OpenFlyers-et-Carnet.aero#Récupérer-les-identifiants-API-sur-Carnet.aero|disposer des identifiants]] ('''UserId''' et '''UserSecretKey''') fournis par '''Carnet.aero'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
&lt;br /&gt;
* '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sous le titre '''Synchronisation des activités''', l'écran fonctionne en 2 étapes :&lt;br /&gt;
&lt;br /&gt;
; Vérifier la connexion&lt;br /&gt;
[[File:2025-12-04-11-48-51-Affichage-et-fiche-personnelle---Brave.png|alt=Synchronisation des activités|Synchronisation des activités]]&lt;br /&gt;
&lt;br /&gt;
*Renseigner :&lt;br /&gt;
** '''Identifiant Utilisateur'''&lt;br /&gt;
** '''Clé secrète utilisateur'''&lt;br /&gt;
&lt;br /&gt;
*Puis cliquer sur '''Vérifier la connexion'''.&lt;br /&gt;
** Tant que la connexion n'est pas vérifiée, les identifiants ne sont pas enregistrés.&lt;br /&gt;
** Si la vérification réussit, OpenFlyers enregistre les identifiants et affiche la configuration de synchronisation.&lt;br /&gt;
&lt;br /&gt;
; Configurer / lancer la synchronisation&lt;br /&gt;
[[File:Carnet-aero-manual-sync-and-config.png|alt=Synchronisation des activités|Synchronisation des activités]]&lt;br /&gt;
&lt;br /&gt;
*Une fois connecté, renseigner :&lt;br /&gt;
** '''Date de début de synchronisation'''&lt;br /&gt;
&lt;br /&gt;
*Actions disponibles :&lt;br /&gt;
** Cliquer sur '''Enregistrer''' pour sauvegarder toute modification sans lancer la synchronisation.&lt;br /&gt;
** Cliquer sur '''Forcer la synchronisation''' pour enregistrer et synchroniser toutes les activités non encore synchronisées dont la date de début est postérieure à la '''Date de début de synchronisation'''.&lt;br /&gt;
** Cliquer sur '''Se déconnecter''' pour supprimer les identifiants Carnet.aero enregistrés (l'écran revient à l'étape '''Vérifier la connexion''').&lt;br /&gt;
&lt;br /&gt;
Après connexion et enregistrement, les vols futurs de l'utilisateur concerné seront automatiquement synchronisés si le statut attribué est configuré avec une [[Gestion des statuts#Fonction Carnet.aero|fonction Carnet.aero]].&lt;br /&gt;
&lt;br /&gt;
;Retours possibles&lt;br /&gt;
&lt;br /&gt;
* Champs manquants lors de la vérification :&lt;br /&gt;
**Message : &amp;quot;Veuillez renseigner l'Identifiant utilisateur et la Clé secrète utilisateur Carnet.aero correctement avant de vérifier la connexion&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Connexion vérifiée : &lt;br /&gt;
[[File:CarnetAero succesful connexion.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* Erreur de connexion Carnet.aero : &lt;br /&gt;
[[File:CarnetAero wrong userId.png|600px]] &lt;br /&gt;
&lt;br /&gt;
[[File:CarnetAero wrong userSecret.png|600px]]&lt;br /&gt;
&lt;br /&gt;
* Déconnexion : &lt;br /&gt;
[[File:CarnetAero green msg.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* Aucun vol à synchroniser : &lt;br /&gt;
[[File:CarnetAero no flight to sync .png|400px]]&lt;br /&gt;
&lt;br /&gt;
* Synchronisation manuelle réussie : &lt;br /&gt;
[[File:CarnetAero manual sync succeeded.png|600px]]&lt;br /&gt;
&lt;br /&gt;
* Erreur de configuration - Aucun statut configuré : &lt;br /&gt;
[[File:CarnetAero no status configuered.png|700px]]&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Suivi-de-maintenance&amp;diff=14447</id>
		<title>Suivi de maintenance</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Suivi-de-maintenance&amp;diff=14447"/>
		<updated>2026-04-30T12:21:10Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Butées de maintenance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter le module de suivi de [[Maintenance aéronautique|maintenance]].&lt;br /&gt;
&lt;br /&gt;
Ce module est accessible depuis le menu '''Gestion &amp;gt; Ressources &amp;gt; Maintenance''' et dispose de plusieurs interfaces :&lt;br /&gt;
*Une page '''[[#Vue-d'ensemble|Vue d'ensemble]]''' récapitulant les informations des aéronefs et les prochaines butées des actions&lt;br /&gt;
*Une page '''[[#Programme|Programme]]''' permettant de définir pour chaque ressource les caractéristiques nécessaire pour le suivi : les éléments, visites, potentiels, etc.&lt;br /&gt;
*Une page '''[[#Suivi|Suivi]]''' permettant de saisir pour chaque ressource les actions effectuées&lt;br /&gt;
&lt;br /&gt;
Cette page présente également le [[#Module-de-suivi-du-potentiel-restant|module de suivi du potentiel restant]]&lt;br /&gt;
&lt;br /&gt;
Lors de l'initialisation du module, il est recommandé de commencer par renseigner tout le programme de maintenance en commençant par les visites les plus importantes pour terminer par les visites les moins importantes.&lt;br /&gt;
&lt;br /&gt;
=Décalage du programme de maintenance=&lt;br /&gt;
Par défaut, le module de suivi de maintenance est prévu pour que '''toutes''' les interventions d'un aéronef soient renseignées dans [[#Suivi|le suivi de la ressource]] et ce, depuis sa mise en circulation.&lt;br /&gt;
&lt;br /&gt;
Si des interventions ont déjà été effectuées sur l'aéronef quand le module est paramétré pour la première fois, ou si les interventions précédentes sont inconnues, il est possible de '''décaler le programme de maintenance'''. De cette manière, on évite de devoir saisir les anciennes actions effectuées.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour décaler un programme de maintenance, un paramétrage supplémentaire est nécessaire afin d'optimiser les calculs des butées :&lt;br /&gt;
#Aller dans le [[#Programme|paramétrage du programme de la ressource]]&lt;br /&gt;
#Renseigner les bonnes valeurs dans la colonne '''Premier travaux de référence (horaire et calendaire)'''&lt;br /&gt;
&lt;br /&gt;
Si le programme de maintenance doit démarrer à un certain instant '''t''', les premiers travaux de référence de chaque action correspondent aux '''heures''' et à la '''date''' auxquels l'action a été effectuée pour la dernière fois quand l'aéronef avait '''t''' heures de vol. Pour les visites, on prend en compte le fait qu'elles [[Maintenance-aéronautique#Remarques|s'incluent]].&lt;br /&gt;
&lt;br /&gt;
Par exemple, un aéronef a déjà 2054h de vol et on veut faire démarrer le programme de maintenance à ce moment :&lt;br /&gt;
#La dernière '''Visite 50h''' a été effectuée à 2050h&lt;br /&gt;
#La dernière '''Visite 100h''' a été effectuée à 2000h (inclue dans la '''Visite 2000h''')&lt;br /&gt;
#La dernière '''Visite 500h''' a été effectuée à 2000h (inclue dans la '''Visite 2000h''')&lt;br /&gt;
#La dernière révision du '''Moteur''' était à 2000h&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
Ces valeurs de référence ne prennent pas en compte les marges de tolérance, donc le retard ou l'avance sur l'action. La valeur peut donc être approximative. En reprenant l'exemple précédent :&lt;br /&gt;
*Par exemple, la dernière '''Visite 50h''' a été effectuée à 2067h.&lt;br /&gt;
*Cette visite aurait dû être effectuée à 2050h, de plus la prochaine est prévue pour 2100h (on additionne les heures lors de la dernière visite plus sa périodicité)&lt;br /&gt;
*En mettant 2067h, la prochaine visite serait calculée à 2117h, donc la bonne valeur à renseigner est '''2050h'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Attention, pour la saisie de '''toutes''' les visites horaires et calendaires, '''les butées calculées et affichées''' démarrent '''toutes''' de la plus petite visite (habituellement la '''Visite 50h''' et la '''Visite 1 an''') :&lt;br /&gt;
*Ainsi, les prochaines butées des visites horaires sont, par exemple, calculées à partir de la '''Visite 50h''' de référence&lt;br /&gt;
*Les prochaines butées des visites calendaires sont, par exemple, souvent calculées à partir de la '''Visite 1 an''' de référence&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois ces valeurs de référence entrées, [[#Suivi|le suivi de la ressource]] peut être complété en indiquant toutes les interventions '''après''' ces valeurs de référence. Par exemple, si la valeur de référence de la '''Visite 50h''' est 2050h, le suivi ne doit pas contenir de valeur pour la '''Visite 50h''' à 2050h. Seulement les '''Visites 50h''' suivantes seront renseignées.  Le principe est le même pour les autres visites et toute autre action.&lt;br /&gt;
&lt;br /&gt;
=Programme=&lt;br /&gt;
Pour accéder au programme de chaque ressource :&lt;br /&gt;
*'''Gestion &amp;gt; Ressources &amp;gt; Maintenance'''&lt;br /&gt;
*Cliquer sur le bouton '''Programme''' de la ressource concernée&lt;br /&gt;
&lt;br /&gt;
Sur cette interface, il est possible d'accéder au programme d'une autre ressource depuis la liste déroulante '''Ressource'''.&lt;br /&gt;
&lt;br /&gt;
Lorsque le programme est vide, en-dessous du tableau, apparait une ligne '''Créer le programme par duplication à partir de''' qui permet de dupliquer le programme de maintenance d'une autre ressource pour la ressource en cours. Dans ce cas, seules les données des colonnes '''Type''', '''Description''', '''Périodicité horaire (heures)''', '''Tolérance horaire''', '''Périodicité calendaire (mois)''', '''Tolérance calendaire''' sont dupliquées.&lt;br /&gt;
&lt;br /&gt;
La page programme d'une ressource contient les caractéristiques nécessaires pour son suivi : éléments, visites, potentiels, etc et sont affichés selon un [[#Ordre-d'affichage-des-composants-du-programme|ordre de priorité]]. Ainsi, chaque ligne du tableau correspond à un élément de la ressource qui est suivi.&lt;br /&gt;
&lt;br /&gt;
Tous les éléments devant être suivis doivent être renseignés et paramétrés. Le paramétrage est nécessaire au bon fonctionnement du [[#Suivi|suivi]]. &lt;br /&gt;
&lt;br /&gt;
Une fois le paramétrage effectué, la page affiche les résultats des calculs obtenus d'après les informations contenues dans [[#Suivi|le suivi]].&lt;br /&gt;
&lt;br /&gt;
Lors du paramétrage des composants, [[#Ajouter-ou-modifier-un-composant|plusieurs champs sont à renseigner]].&lt;br /&gt;
&lt;br /&gt;
==Ajouter ou modifier un composant==&lt;br /&gt;
Pour ajouter un composant, il faut cliquer sur le bouton '''Ajouter''' présent en-dessous du tableau.&lt;br /&gt;
&lt;br /&gt;
Pour modifier un composant, il faut cliquer sur le pictogramme crayon présent dans la colonne '''Actions''' de la ligne concernée.&lt;br /&gt;
&lt;br /&gt;
Dans le formulaire il faut saisir les champs :&lt;br /&gt;
*'''[[#Types-de-composants|Type de composant]]''' : un élément de l'appareil (moteur, hélice, etc), une visite (50H, 100H, etc) ou autre (CEN, Pesée, etc)&lt;br /&gt;
*'''Description''' : le nom et les informations détaillées sur le composant. Par exemple la référence du moteur&lt;br /&gt;
*'''Périodicité horaire (heures)''' : si le composant a une périodicité horaire il faut remplir cette colonne&lt;br /&gt;
*'''Tolérance horaire''' : la tolérance d'un composant permet de calculer [[Maintenance-aéronautique#Schémas-:-calcul-d'échéances|la fenêtre de la butée optimale]]. Pour les composants avec une périodicité horaires, la tolérance doit être en heures.&lt;br /&gt;
*'''Périodicité calendaire (mois)''' : si le composant a une périodicité calendaire il faut remplir cette colonne&lt;br /&gt;
*'''Tolérance calendaire''' : la tolérance d'un composant permet de calculer [[Maintenance-aéronautique#Schémas-:-calcul-d'échéances|la fenêtre de la butée optimale]]. Pour les composants avec une périodicité calendaire, la tolérance doit être en mois.&lt;br /&gt;
*'''Premiers travaux de référence''' : il s'agit de la date ou des heures cellules des travaux de l'action à utiliser comme référence pour le calcul des valeurs dans [[#Suivi|le suivi]]. Cette colonne permet de [[#Décalage-du-programme-de-maintenance|décaler le programme de maintenance de l'aéronef]]. &lt;br /&gt;
**'''horaire''' : A remplir pour un composant avec périodicité horaire. La valeur doit correspondre aux heures cellules quand l'action a été effectuée pour la dernière fois.&lt;br /&gt;
***Si le programme de maintenance n'est pas décalé, ne rien remplir&lt;br /&gt;
**'''calendaire''' : Le principe est identique aux premier travaux de référence ayant une périodicité horaire, la date des derniers travaux doit être indiquée. &lt;br /&gt;
***&amp;lt;s&amp;gt;Si le programme de maintenance n'est pas décalé, la '''date de mise en circulation''' de l'aéronef doit être renseignée.&amp;lt;/s&amp;gt;&lt;br /&gt;
*'''Cette visite correspond à la révision générale'''&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' tout composant doit être défini avec soit une périodicité horaire soit une périodicité calendaire. Dans le cas où un composant n'a pas de périodicité, il faut créer une périodicité fictive, par exemple en indiquant une butée calendaire de 120 mois.&lt;br /&gt;
&lt;br /&gt;
==Détail du programme==&lt;br /&gt;
Les premières colonnes du programme sont définis lors de l'[[#Ajouter-ou-modifier-un-composant|ajout d'un composant]] :&lt;br /&gt;
*'''Type'''&lt;br /&gt;
*'''Description'''&lt;br /&gt;
*'''Périodicité horaire (heures)'''&lt;br /&gt;
*'''Tolérance horaire'''&lt;br /&gt;
*'''Périodicité calendaire (mois)'''&lt;br /&gt;
*'''Tolérance calendaire'''&lt;br /&gt;
*'''Premiers travaux de référence horaire'''&lt;br /&gt;
*'''Premiers travaux de référence calendaire'''&lt;br /&gt;
&lt;br /&gt;
Les colonnes suivantes et calculs intermédiaires non visibles sont déterminées à partir des premières colonnes et des informations contenues dans le [[#Suivi|suivi]] :&lt;br /&gt;
*'''Heures cellule début travaux''' : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Heures cellule début travaux'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence horaire''' du composant&lt;br /&gt;
*'''Date fin travaux''' : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Date fin travaux'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence calendaire''' du composant&lt;br /&gt;
*'''Temps réalisé (heures)''' : résultat de la différence entre la colonne '''Heures totales''' de la ressource et la colonne '''Heures cellule début travaux''' du composant&lt;br /&gt;
*'''Potentiel restant (heures)''' : résultat de la différence entre la colonne '''Butée horaire sans marge''' du composant et la colonne '''Heures totales''' de la ressource&lt;br /&gt;
*'''Butée horaire sans marge''' : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Butée horaire sans marge'''. Résultat de la valeur la plus petite entre celle que l'on vient de récupérer et la colonne '''Heures cellule début travaux''' du composant à laquelle on ajoute la valeur de la colonne '''Périodicité horaire''' du composant&lt;br /&gt;
*'''Butée horaire avec marge''' : résultat de la colonne '''Butée horaire sans marge''' du composant à laquelle on ajoute la valeur de la colonne '''Tolérance horaire''' du composant&lt;br /&gt;
*'''Temps réalisé (mois)''' : résultat de la différence entre la date du jour et de la colonne '''Date fin travaux''' du composant&lt;br /&gt;
*'''Potentiel restant (mois)''' : résultat de la différence entre la colonne '''Butée calendaire sans marge''' du composant et la date du jour&lt;br /&gt;
*'''Butée calendaire sans marge''' : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Butée calendaire sans marge'''. Résultat de la valeur la plus petite entre celle que l'on vient de récupérer et la colonne '''Date fin travaux''' du composant à laquelle on ajoute la valeur de la colonne '''Périodicité calendaire''' du composant&lt;br /&gt;
*'''Butée calendaire avec marge''' : résultat de la colonne '''Butée calendaire sans marge''' du composant à laquelle on ajoute la valeur de la colonne '''Tolérance calendaire''' du composant&lt;br /&gt;
*'''Heures début travaux effective''' (calcul intermédiaire) :&lt;br /&gt;
**Si le composant est une visite : récupère sur la dernière visite enregistrée [[Maintenance-aéronautique#Remarques|compatible avec le composant]] dans le suivi la valeur de la colonne '''Heures cellule début travaux'''. Si aucune entrée n'est compatible dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence horaire''' du composant&lt;br /&gt;
**Si le composant n'est pas une visite : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Heures cellule début travaux'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence horaire''' du composant&lt;br /&gt;
*'''Butée horaire originale théorique''' (calcul intermédiaire) :&lt;br /&gt;
**Si le composant est une visite : récupère sur la dernière visite enregistrée [[Maintenance-aéronautique#Remarques|compatible avec le composant]] dans le suivi la valeur de la colonne '''Butée horaire sans marge'''. Si aucune entrée n'est compatible dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence horaire''' du composant&lt;br /&gt;
**Si le composant n'est pas une visite : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Heures cellule début travaux'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence horaire''' du composant&lt;br /&gt;
*'''Butée horaire originale intelligente''' (calcul intermédiaire) : Si ces valeurs sont présentes, récupère la valeur la plus petite entre la colonne '''Heures début travaux effective''' du composant et la colonne '''Butée horaire originale théorique''' du composant. Sinon récupère la valeur de la colonne '''Heures cellule début travaux''' du composant&lt;br /&gt;
*'''Butée horaire intelligente sans marge''' (calcul intermédiaire) : résultat de la valeur de la colonne '''Butée horaire originale intelligente''' du composant à laquelle on ajoute la valeur de la colonne '''Périodicité horaire''' du composant&lt;br /&gt;
*'''Butée horaire intelligente avec marge''' (calcul intermédiaire) : résultat de la valeur de la colonne '''Butée horaire intelligente sans marge''' du composant à laquelle on ajoute la valeur de la colonne '''Tolérance horaire''' du composant&lt;br /&gt;
*'''Date fin travaux effective''' (calcul intermédiaire) :&lt;br /&gt;
**Si le composant est une visite : récupère sur la dernière visite enregistrée [[Maintenance-aéronautique#Remarques|compatible avec le composant]] dans le suivi la valeur de la colonne '''Date fin travaux'''. Si aucune entrée n'est compatible dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence calendaire''' du composant&lt;br /&gt;
**Si le composant n'est pas une visite : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Date fin travaux'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence calendaire''' du composant&lt;br /&gt;
*'''Butée calendaire originale théorique''' (calcul intermédiaire) :&lt;br /&gt;
**Si le composant est une visite : récupère sur la dernière visite enregistrée [[Maintenance-aéronautique#Remarques|compatible avec le composant]] dans le suivi la valeur de la colonne '''Butée calendaire sans marge'''. Si aucune entrée n'est compatible dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence calendaire''' du composant&lt;br /&gt;
**Si le composant n'est pas une visite : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Butée calendaire sans marge'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence calendaire''' du composant&lt;br /&gt;
*'''Butée calendaire originale intelligente''' (calcul intermédiaire) : Si ces valeurs sont présentes, récupère la valeur la plus petite entre la colonne '''Date fin travaux effective''' du composant et la colonne '''Butée calendaire originale théorique''' du composant. Sinon récupère la valeur de la colonne '''Date fin travaux''' du composant&lt;br /&gt;
*'''Butée calendaire intelligente sans marge''' (calcul intermédiaire) : résultat de la valeur de la colonne '''Butée calendaire originale intelligente''' du composant à laquelle on ajoute la valeur de la colonne '''Périodicité calendaire''' du composant&lt;br /&gt;
*'''Butée calendaire intelligente avec marge''' (calcul intermédiaire) : résultat de la valeur de la colonne '''Butée calendaire intelligente sans marge''' du composant à laquelle on ajoute la valeur de la colonne '''Tolérance calendaire''' du composant&lt;br /&gt;
*'''Groupe de chevauchement''' (calcul intermédiaire) : n'est calculé que si le composant est une visite.&lt;br /&gt;
*#Récupère dans le programme tous les composants qui sont de type visite et qui chevauche le composant pour lequel on détermine son groupe de chevauchement. Dans le cas d'un composant avec une périodicité horaire, pour déterminer que le composant chevauche un autre composant il doit avoir la valeur de la colonne '''Butée horaire intelligente sans marge''' qui est inférieure ou égale à la valeur de la colonne '''Butée horaire intelligente avec marge''' de l'autre composant et il doit avoir la valeur de la colonne '''Butée horaire intelligente avec marge''' qui est supérieure ou égale à la valeur de la colonne '''Butée horaire intelligente sans marge''' de l'autre composant. Il est également récupéré les visites en retard qui ont la valeur de la colonne '''Butée horaire intelligente avec marge''' qui est inférieure ou égale à la valeur de la colonne '''Butée horaire intelligente sans marge''' de l'autre composant. Dans le cas d'un composant avec une périodicité calendaire le principe est le même mais avec les colonnes '''Butée calendaire intelligente sans et avec marge'''&lt;br /&gt;
*#A partir des composant récupérés, le composant reçoit comme identifiant de groupe de chevauchement l'identifiant du composant qui a la plus petite périodicité horaire ou calendaire. Si le composant n'est chevauché par aucun autre composant ou si c'est lui qui a la plus petite périodicité dans le groupe alors c'est son identifiant qui est utilisé comme identifiant de groupe de chevauchement.&lt;br /&gt;
*'''Cette visite correspond à la révision générale''' (saisi par l'utilisateur mais non visible sur le programme)&lt;br /&gt;
&lt;br /&gt;
==Forcer le rafraichissement des calculs==&lt;br /&gt;
S'il est nécessaire de forcer le recalcule de l'ensemble des butées (calcul intermédiaire), alors il faut saisir une activitéee fictive pour la ressource concernée et ensuite supprimer cette activité.&lt;br /&gt;
&lt;br /&gt;
==Ordre d'affichage des composants du programme==&lt;br /&gt;
L'ordre d'affichage des composants du programme est le suivant :&lt;br /&gt;
#les visites&lt;br /&gt;
#les éléments&lt;br /&gt;
#les inspections&lt;br /&gt;
#les documents&lt;br /&gt;
*Les éléments et les attestations sont triés, dans chaque type, par ordre alphabétique&lt;br /&gt;
*Les visites sont triées ainsi :&lt;br /&gt;
*#Celles avec une périodicité horaire, de la plus petite à la plus grande&lt;br /&gt;
*#Celles avec une périodicité calendaire, par ordre alphabétique&lt;br /&gt;
&lt;br /&gt;
=Suivi=&lt;br /&gt;
Le suivi de chaque ressource est accessible depuis le menu '''Gestion &amp;gt; Resource &amp;gt; Maintenance'''. Dans le tableau, cliquer sur le bouton '''Suivi''' de la resource souhaitée. La page suivi d'une ressource contient toutes les actions effectuées sur l'aéronef. Suite à chaque [[#Ajouter-une-action-effectuée|saisie]], les prochaines butées des actions sont estimées et affichées. &lt;br /&gt;
&lt;br /&gt;
Les actions sont triées par ordre chronologique.&lt;br /&gt;
&lt;br /&gt;
==Ajouter une action effectuée==&lt;br /&gt;
Pour ajouter une action, il faut cliquer sur le bouton '''Ajouter''' présent en dessous du tableau. Pour modifier une action, il faut cliquer sur le pictogramme crayon présent dans la colonne ''Actions''.&lt;br /&gt;
&lt;br /&gt;
Dans le formulaire il faut saisir les champs :&lt;br /&gt;
*'''[[#Types-de-composants|Type de composant]]''' : il s'agit d'une liste déroulante contenant les composant définis dans le [[#Programme|programme]] de la ressource. Il faut sélectionner le composant concerné&lt;br /&gt;
*'''Heures cellule début travaux''' : les heures cellule de la ressource au début de l'action effectuée. Le champ est obligatoire si le composant a une périodicité horaire&lt;br /&gt;
*'''Date fin travaux''' : la date lorsque l'action a été effectuée. Le champ est obligatoire si le composant a une périodicité calendaire&lt;br /&gt;
&lt;br /&gt;
'''Attention :'''&lt;br /&gt;
*Si [[#Décalage-du-programme-de-maintenance|le programme de maintenance est décalé]], le suivi doit contenir les actions '''suivant ce décalage'''. Par exemple si les '''Travaux de référence''' du '''Moteur''' sont de '''2000h''' (le suivi du moteur démarre à 2000h), le suivi ne doit pas contenir l'entrée du '''Moteur''' avec '''2000h''', il contiendra les interventions suivantes du moteur.&lt;br /&gt;
&lt;br /&gt;
==Détail du suivi==&lt;br /&gt;
Les premiers champs du suivi sont définis lors de l'[[#Ajouter-une-action-effectuée|ajout d'une action]] :&lt;br /&gt;
*'''Action'''&lt;br /&gt;
*'''Heures cellule début travaux'''&lt;br /&gt;
*'''Date fin travaux'''&lt;br /&gt;
&lt;br /&gt;
Les champs suivants et calculs intermédiaires non visibles sont déterminées à partir des premières colonnes et des informations contenues dans le [[#Programme|programme]] :&lt;br /&gt;
*'''Est une visite''' : défini à partir du type du composant&lt;br /&gt;
*'''Type d'action''' : horaire (1), calendaire (2), les deux (0). Défini en fonction de si le composant a une périodicité horaire, calendaire ou les deux.&lt;br /&gt;
*'''Tolérance horaire''' : défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Tolérance calendaire''' : défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Périodicité horaire de l'action''' : si l'action est une visite, la valeur est défini à partir du champ correspondant dans la visite de référence sinon elle est défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Périodicité calendaire de l'action''' : si l'action est une visite, la valeur est défini à partir du champ correspondant dans la visite de référence sinon elle est défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Périodicité horaire du composant''' : défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Périodicité calendaire du composant''' : défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Butée horaire de référence''' : défini à partir du champ '''Premiers travaux de référence horaire''' dans le composant. Si l'action est une visite il lui est ajouté la valeur du champ '''Périodicité horaire'''&lt;br /&gt;
*'''Butée calendaire de référence''' : défini à partir du champ '''Premiers travaux de référence calendaire''' dans le composant. Si l'action est une visite il lui est ajouté la valeur du champ '''Périodicité calendaire'''&lt;br /&gt;
*'''Ligne précédente action horaire liée''' / '''Ligne précédente action calendaire liée''' :&lt;br /&gt;
**les lignes sont triées par ordre croissant selon le champ '''Heures cellule début travaux''' puis par ordre chronologique selon le champ '''Date fin travaux'''&lt;br /&gt;
**si c'est une visite le moteur recherche parmi les visites l'entrée précédente la plus proche, sinon il recherche parmi les entrées qui concernent le même composant&lt;br /&gt;
**si une entrée a été trouvée elle est est défini comme ligne précédente sinon c'est la visite de référence qui est utilisée&lt;br /&gt;
*'''Ligne prochaine action horaire liée''' / '''Ligne prochaine action calendaire liée''' :&lt;br /&gt;
**les lignes sont triées par ordre croissant selon le champ '''Heures cellule début travaux''' puis par ordre chronologique selon le champ '''Date fin travaux'''&lt;br /&gt;
**si c'est une visite le moteur recherche parmi les visites l'entrée suivante la plus proche, sinon il recherche parmi les entrées qui concernent le même composant&lt;br /&gt;
**si une entrée a été trouvée elle est est défini comme ligne précédente sinon aucune valeur ne lui est défini&lt;br /&gt;
*'''Butée horaire sans marge''' :&lt;br /&gt;
**s'il s'agit d'une visite ou que la ligne précédente ne correspond pas à la visite de référence&lt;br /&gt;
***si la ligne précédente correspond à la visite de référence, le champ '''Butée horaire sans marge''' de la visite de référence est utilisé&lt;br /&gt;
***sinon, le champ '''Prochaine butée horaire sans marge''' de la ligne précédente est utilisé&lt;br /&gt;
**sinon, le champ '''Butée horaire de référence''' de l'action est utilisé&lt;br /&gt;
*'''Butée horaire avec marge''' : résultat du champ '''Butée horaire sans marge''' de l'action à qui on ajoute la valeur du champ '''Tolérance horaire''' de l'action&lt;br /&gt;
*'''Prochaine butée horaire sans marge''' : résultat de la valeur la plus petite entre celle du champ '''Heures cellule début travaux''' et du champ '''Butée horaire sans marge''' à qui on ajoute la valeur du champ '''Périodicité horaire''' de l'action&lt;br /&gt;
*'''Prochaine butée horaire avec marge''' : résultat du champ '''Prochaine butée horaire sans marge''' de l'action à qui on ajoute une '''Tolérance horaire''' qu'il faut déterminer. Si l'action n'a pas de prochaine ligne alors si c'est une visite on utilise le champ '''Tolérance horaire''' de la visite de référence sinon on utilise le champ '''Tolérance horaire''' de l'action. Si l'action a une prochaine ligne de défini alors c'est le champ '''Tolérance horaire''' de celle-ci qui est utilisé&lt;br /&gt;
*'''Butée calendaire sans marge''' :&lt;br /&gt;
**s'il s'agit d'une visite ou que la ligne précédente ne correspond pas à la visite de référence&lt;br /&gt;
***si la ligne précédente correspond à la visite de référence, le champ '''Butée calendaire sans marge''' de la visite de référence est utilisé&lt;br /&gt;
***sinon, le champ '''Prochaine butée calendaire sans marge''' de la ligne précédente est utilisé&lt;br /&gt;
**sinon, le champ '''Butée calendaire de référence''' de l'action est utilisé&lt;br /&gt;
*'''Butée calendaire avec marge''' : résultat du champ '''Butée calendaire sans marge''' de l'action à qui on ajoute la valeur du champ '''Tolérance calendaire''' de l'action&lt;br /&gt;
*'''Prochaine butée calendaire sans marge''' : résultat de la valeur la plus petite entre celle du champ '''Date fin travaux''' et du champ '''Butée calendaire sans marge''' à qui on ajoute la valeur du champ '''Périodicité calendaire''' de l'action&lt;br /&gt;
*'''Prochaine butée calendaire avec marge''' : résultat du champ '''Prochaine butée calendaire sans marge''' de l'action à qui on ajoute une '''Tolérance calendaire''' qu'il faut déterminer. Si l'action n'a pas de prochaine ligne alors si c'est une visite on utilise le champ '''Tolérance calendaire''' de la visite de référence sinon on utilise le champ '''Tolérance calendaire''' de l'action. Si l'action a une prochaine ligne de défini alors c'est le champ '''Tolérance calendaire''' de celle-ci qui est utilisé&lt;br /&gt;
&lt;br /&gt;
Une première ligne '''Première visite de référence''' apparait dès lors qu'un composant est ajouté au programme de maintenance. Les cellules suivantes sont initialisées :&lt;br /&gt;
*'''Butée horaire sans marge''' : correspond au champ '''Premiers travaux de référence horaire''' du composant ajouté&lt;br /&gt;
*'''Butée horaire avec marge''' : correspond à la somme des champs ''''''Premiers travaux de référence horaire''' et '''Tolérance horaire''' du composant ajouté&lt;br /&gt;
*'''Butée calendaire sans marge''' : correspond au champ '''Premiers travaux de référence calendaire''' du composant ajouté uniquement si le champ '''Périodicité calendaire''' du composant ajouté est renseigné&lt;br /&gt;
*'''Butée calendaire avec marge''' : correspond à la somme des champs '''Premiers travaux de référence calendaire''' et '''Tolérance calendaire''' du composant ajouté. Si le champ '''Périodicité calendaire''' est laissé vide, alors la date indiquée est le 01/01/1970.&lt;br /&gt;
Si par la suite d'autres composants sont ajoutés, cette première ligne '''Première visite de référence''' se met à jour dès lors que le composant ajouté est d'une périodicité plus faible que les composants déjà présents. En effet, c'est le composant à la périodicité la plus faible qui donne le rythme des actions de maintenance. C'est donc lui qui donne la référence sur la prochaine action. Cf. le chapitre [[#Décalage-du-programme-de-maintenance|Décalage du programme de maintenance]].&lt;br /&gt;
&lt;br /&gt;
===Calcul des fenêtres d'action de maintenance : 50h bien positionnée ou trop anticipée===&lt;br /&gt;
[[File:50h bien positionnée.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:50h trop anticipée.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
===Programme sans/avec butée calendaire===&lt;br /&gt;
Programme sans visite calendaire :&lt;br /&gt;
&lt;br /&gt;
[[File:Programme sans VP calendaire.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Affichage du suivi sans butée calendaire :&lt;br /&gt;
&lt;br /&gt;
[[File:Suivi sans butée calendaire.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programme avec butée calendaire :&lt;br /&gt;
&lt;br /&gt;
[[File:Programme avec VP calendaire.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Affichage du suivi avec butée calendaire :&lt;br /&gt;
&lt;br /&gt;
[[File:Suivi avec butée calendaire.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
=Vue d'ensemble=&lt;br /&gt;
La vue d'ensemble est accessible depuis le menu '''Gestion &amp;gt; Ressources &amp;gt; Maintenance'''. Cette page synthétise les informations les plus importantes pour le suivi de maintenance des différentes ressources:&lt;br /&gt;
*'''Heures totales''' : heures totales de la ressource. Cette colonne est automatiquement mise à jour lors de la saisie ou la suppression d'une activité&lt;br /&gt;
*'''Heures depuis RG (Cellule)''' : Cette valeur correspond aux heures totales de la ressource depuis sa Révision Générale (RG). La RG est [[#Programme|paramétrée pour correspondre à une visite]] de la ressource, par exemple la visite 2000h.&lt;br /&gt;
*'''Heures depuis RG (Moteur)''' : La valeur correspond aux heures totales du moteur depuis sa révision, soit depuis ses [[#Programme|'''Heures début travaux''']].&lt;br /&gt;
*'''Heures depuis RG (Hélice)''' : Le principe est le même que pour le moteur, la valeur correspond aux heures totales depuis la révision de l'hélice.&lt;br /&gt;
*'''Potentiel''' : Le '''Potentiel''' est divisé en deux sous colonnes. Une contenant le potentiel restant en heures, une contenant le potentiel restant en mois. Les potentiels affichés sont ceux de la colonne '''Prochaine action'''. Si la prochaine action est une visite alors le potentiel restant affichée se base sur le [[Maintenance-aéronautique#Calcul-de-l'échéance-d'une-visite|calcul de l'échéance d'une visite]]. Il est possible que le potentiel restant de la visite visible dans le [[#Programme|programme]] soit inférieur au potentiel calculé. Dans ce cas on vérifie si une [[Maintenance-aéronautique#Remarques|visite compatible]] avec une périodicité supérieure a été réalisé depuis la dernière révision de la prochaine visite affichée. Si c'est le cas alors on affiche le potentiel calculé. Sinon on affiche la potentiel restant de la prochaine visite.&lt;br /&gt;
*'''Prochaine action''' : La '''Prochaine action''', divisée en deux colonnes est un complément de la colonne '''Potentiel'''. Elle contient le nom des deux prochaines actions de la ressource arrivant à échéance, une en heures et une en mois. L'affichage de la '''Prochaine action''' est optimisé quand le [[#Suivi|suivi]] de la ressource est complet. La prochaine action est le composant avec la plus petite butée horaire ou calendaire. Lorsque la prochaine action est une visite on regarde si des visites se chevauchent. Si c'est le cas alors c'est la visite avec la plus grande périodicité qui sera affichée.&lt;br /&gt;
**Le caractère '''*''' est affiché sur les prochaines actions qui incluent un chevauchement de visite&lt;br /&gt;
&lt;br /&gt;
Le potentiel affiché change de couleur selon sa valeur :&lt;br /&gt;
*Au dessus de 10 heures : &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;'''vert'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*Entre 10 heures (inclus) et 5 heures (non inclus) : &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;'''orange'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*En dessous de 5 heures (inclus) : &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''rouge'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actualisation journalière de la vue d'ensemble==&lt;br /&gt;
&lt;br /&gt;
Chaque nuit à 06h00 UTC la [[#Vue-d'ensemble|vue d'ensemble]] est actualisée afin de mettre à jour les [[#Détail-de-la-vue-d'ensemble|calculs intermédiaires]] se basant sur la date du jour.&lt;br /&gt;
&lt;br /&gt;
==Détail de la vue d'ensemble==&lt;br /&gt;
&lt;br /&gt;
Les champs suivants et calculs intermédiaires non visibles sont déterminés à partir des informations contenues dans le [[#Programme|programme]] et dans le [[#Suivi|suivi]] :&lt;br /&gt;
*'''Cellule - Heures totales''' : heures totales de l'aéronef mises à jour à chaque modification du temps de vol - création, édition ou suppression d'un vol&lt;br /&gt;
*'''Cellule - Heures depuis RG''' : résultat de la différence entre le champ '''Cellule - Heures totales''' et le champ '''Heures cellule début travaux''' de la visite qui correspond à la révision générale&lt;br /&gt;
*'''Moteur - Heures depuis RG''' : résultat de la différence entre le champ '''Cellule - Heures totales''' et le champ '''Temps réalisé (heures) ''' de l'élément moteur.&lt;br /&gt;
Pour que cette case contienne une valeur, il faut qu'un composant de type ''72 - Moteur'' soit renseigné dans le programme de l'aéronef et qu'une entrée soit saisie dans le suivi de l'aéronef lié à ce composant&lt;br /&gt;
*'''Hélice - Heures depuis RG''' : résultat de la différence entre le champ '''Cellule - Heures totales''' et le champ '''Temps réalisé (heures) ''' de l'élément hélice.&lt;br /&gt;
Pour que cette case contienne une valeur, il faut qu'un composant de type ''61 - Hélice'' soit renseigné dans le programme de l'aéronef et qu'une entrée soit saisie dans le suivi de l'aéronef lié à ce composant&lt;br /&gt;
&lt;br /&gt;
*'''Prochaine visite horaire''' : recherche la visite avec la plus petite périodicité horaire. A partir du champ '''Groupe de chevauchement''', recherche parmi les visites qui sont dans ce groupe la visite avec la plus grande périodicité horaire. Cette visite sera la '''prochaine visite horaire'''.&lt;br /&gt;
*'''Butée horaire visite''' : recherche parmi le suivi de la ressource, la visite avec la valeur la plus grande pour le champ '''Prochaine butée horaire sans marge'''. Si une visite est trouvée, récupère la valeur de ce champ. Sinon récupère la valeur de ce champ dans le programme sur la visite défini comme étant la '''prochaine visite horaire'''.&lt;br /&gt;
*'''Potentiel prochaine visite horaire''' :&lt;br /&gt;
*#Calcule la différence entre le champ '''Butée horaire visite''' et le champ '''Cellule - Heures totales''' et la compare avec le potentiel restant de la prochaine visite horaire&lt;br /&gt;
*#Si ce dernier est plus petit, vérifie si une visite compatible avec une périodicité supérieure a été réalisé depuis la dernière révision de la prochaine visite horaire&lt;br /&gt;
*#Si c'est le cas alors on affiche le résultat de la différence entre le champ '''Butée horaire visite''' et le champ '''Cellule - Heures totales'''. Sinon on affiche la potentiel restant de la prochaine visite horaire&lt;br /&gt;
*'''Prochaine action horaire''' : recherche le composant qui a la '''Butée horaire sans marge''' la plus petite&lt;br /&gt;
*'''Butée horaire action''' : récupère sur le composant correspond à la '''Prochaine action horaire''', le champ '''Butée horaire sans marge'''&lt;br /&gt;
*'''Potentiel prochaine action horaire''' : résultat de la différence entre le champ '''Butée horaire action''' et le champ '''Cellule - Heures totales'''&lt;br /&gt;
&lt;br /&gt;
*'''Potentiel - Heures''' qui correspond au champ '''Potentiel prochaine action horaire prioritaire''' :&lt;br /&gt;
**si les champs '''Potentiel prochaine visite horaire''' et '''Potentiel prochaine action horaire''' sont définis, le champ avec la plus petite valeur sera celui utilisé pour définir le champ '''Potentiel prochaine action horaire prioritaire'''&lt;br /&gt;
**si un seul des deux champs est défini ce sera celui utilisé pour définir le champ '''Potentiel prochaine action horaire prioritaire'''&lt;br /&gt;
*'''Prochaine action horaire prioritaire''' : si c'est le champ '''Potentiel prochaine visite horaire''' qui a été retenu, la prochaine action sera donc celle correspondant au champ '''Prochaine visite horaire''' sinon ce sera celle du champ '''Prochaine action horaire'''&lt;br /&gt;
&lt;br /&gt;
*'''Prochaine visite calendaire''' : recherche la visite avec la plus petite périodicité calendaire. A partir du champ '''Groupe de chevauchement''', recherche parmi les visites qui sont dans ce groupe la visite avec la plus grande périodicité calendaire. Cette visite sera la '''prochaine visite calendaire'''.&lt;br /&gt;
*'''Butée calendaire visite''' : recherche parmi le suivi de la ressource, la visite avec la valeur la plus grande pour le champ '''Prochaine butée calendaire sans marge'''. Si une visite est trouvée, récupère la valeur de ce champ. Sinon récupère la valeur de ce champ dans le programme sur la visite défini comme étant la '''prochaine visite horaire'''.&lt;br /&gt;
*'''Potentiel prochaine visite calendaire ''' : résultat en mois de la différence entre le champ '''Butée calendaire visite''' et la date du jour&lt;br /&gt;
&lt;br /&gt;
*'''Prochaine action calendaire''' : recherche le composant qui a la '''Butée calendaire sans marge''' la plus petite&lt;br /&gt;
*'''Butée calendaire action''' : récupère sur le composant correspond à la '''Prochaine action calendaire''', le champ '''Butée calendaire sans marge'''&lt;br /&gt;
*'''Potentiel prochaine action calendaire ''' : résultat en mois de la différence entre le champ '''Butée calendaire action''' et la date du jour&lt;br /&gt;
&lt;br /&gt;
*'''Potentiel - Mois''' qui correspond au champ '''Potentiel prochaine action calendaire prioritaire''' :&lt;br /&gt;
**si les champs '''Potentiel prochaine visite calendaire''' et '''Potentiel prochaine action calendaire''' sont définis, le champ avec la plus petite valeur sera celui utilisé pour définir le champ '''Potentiel prochaine action calendaire prioritaire'''&lt;br /&gt;
**si un seul des deux champs est défini ce sera celui utilisé pour définir le champ '''Potentiel prochaine action calendaire prioritaire'''&lt;br /&gt;
*'''Prochaine action calendaire prioritaire''' : si c'est le champ '''Potentiel prochaine visite calendaire''' qui a été retenu, la prochaine action sera donc celle correspondant au champ '''Prochaine visite calendaire''' sinon ce sera celle du champ '''Prochaine action calendaire'''&lt;br /&gt;
&lt;br /&gt;
=Module de suivi du potentiel restant=&lt;br /&gt;
==Unité de mesure des heures==&lt;br /&gt;
L'unité de mesure des compteurs d'un aéronef correspond au [[Gestion des ressources#Ajouter_un_type_de_ressource|paramétrage du type de ressource]] correspondant.&lt;br /&gt;
&lt;br /&gt;
Par contre, l'unité de mesure des totaux d'heures correspond au [[Configuration#Gestion-des-vols|paramétrage de l'unité de temps de la plateforme]]. Cela permet d'avoir la tenue des carnets de route des aéronefs dans une seule unité quelque soit l'aéronef. De même pour les calculs des butées pour le suivi de navigabilité cela permet d'avoir une seule unité.&lt;br /&gt;
&lt;br /&gt;
==Activer le module de gestion des potentiels==&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Paramétrage &amp;gt; Activités'''&lt;br /&gt;
*Activer l'interrupteur '''[[Paramétrage-des-activités#Gestion-des-potentiels|Gestion des potentiels]]'''&lt;br /&gt;
*Cliquer sur le bouton '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
===Initialisation de la gestion des potentiels===&lt;br /&gt;
*Aller dans '''Gestion &amp;gt; Ressources &amp;gt; Actives'''&lt;br /&gt;
*Cliquer sur l'icône Édition (le crayon)	&lt;br /&gt;
**Dans la partie inférieure '''Données pour la gestion des vols''' on initialise les valeurs :&lt;br /&gt;
**'''Date de début de comptabilisation des heures'''&lt;br /&gt;
**'''Total des heures à la date de début'''&lt;br /&gt;
Il faut indiquer dans ces 2 champs le nombre d'heures de la ressource et à quelle date il y avait ce nombre d'heures. Ainsi, OpenFlyers calculera le nombre d'heures de vols effectuées par l'aéronef à compter de cette date de début et en partant du total renseigné pour cette date. Seules les heures de vols dont la date sera postérieure à cette date de début seront prises en compte pour ce calcul.&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' pour un calcul exact du potentiel restant, tous les vols postérieurs à la '''date de début de comptabilisation des heures''' doivent être saisis dans OpenFlyers.&lt;br /&gt;
&lt;br /&gt;
===Affichage du potentiel estimé restant dans les créneaux de réservation===&lt;br /&gt;
Cela se fait en activant le champ additionnel spécifique [[Champs-métiers#bookingEstimatedFlightTime|bookingEstimatedFlightTime]].&lt;br /&gt;
&lt;br /&gt;
===Initialisation de la gestion des alertes===&lt;br /&gt;
*Aller sur '''Gestion &amp;gt; Ressources &amp;gt; Navigabilité'''&lt;br /&gt;
*Cliquer sur l'icône Édition (le crayon) :&lt;br /&gt;
**Régler les 3 seuils d'alerte pour les potentiels (exemple 10 h, 0 h et -5 h)&lt;br /&gt;
**Régler les 3 seuils d'alerte pour les dates calendaire (exemple 15 jours, 8 jours et 0 jours)&lt;br /&gt;
&lt;br /&gt;
==Butées de maintenance==&lt;br /&gt;
*Aller sur '''Gestion &amp;gt; Ressources &amp;gt; Navigabilité'''&lt;br /&gt;
:La colonne '''Moteur''' s'affiche uniquement si au moins une ressource appartient à un type de ressource configuré pour utiliser un calcul de temps moteur différent du temps de vol.&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:Maintenance_table_fr.jpg|1200px|Tableau de bord maintenance]]&amp;lt;/center&amp;gt;&lt;br /&gt;
*Cliquer sur l'icône Modifier (le crayon) :&lt;br /&gt;
:La colonne '''Heure moteur''' s'affiche uniquement si la ressource appartient à un type de ressource configuré pour utiliser un calcul de temps moteur différent du temps de vol.&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:Maintenance_detail_fr.jpg|1200px|Maintenance]]&amp;lt;/center&amp;gt;&lt;br /&gt;
'''Prochaine butée calendaire''' : c'est la date qui sert de référence pour les alertes calendaires (ex : renouvèlement CDN).&lt;br /&gt;
&lt;br /&gt;
'''Prochaine butée horaire d'activité ''': c'est la butée de temps d'activité à ne pas dépasser avant la prochaine action de maintenance associée. Le programme soustrait de cette valeur le temps de référence indiqué dans la page ressource et la somme des temps d'activités effectués par la ressource pour déterminer le potentiel restant d'activité.&lt;br /&gt;
&lt;br /&gt;
'''Prochaine butée horaire moteur''': c'est la butée de temps moteur à ne pas dépasser avant la prochaine action de maintenance associée. Le programme soustrait de cette valeur le temps de référence indiqué dans la page ressource et la somme des temps moteur effectués par la ressource pour déterminer le potentiel restant moteur.&lt;br /&gt;
&lt;br /&gt;
'''Seuil des alertes''' : Il y a 3 niveaux d'alerte horaire et calendaire à paramétrer selon les souhaits du mécanicien (Seuil avertissement, Seuil alarme et Seuil stop). L'alerte visualisée sur le cahier de réservation sera la première des échéances atteintes.&lt;br /&gt;
&lt;br /&gt;
'''Alertes de potentiel''' : pour chaque seuil d'alerte calendaire, d'heures d'activité ou d'heures moteur, il est possible d'activer l'envoi d'un email aux utilisateurs abonnés. Lorsqu'un seuil d'alerte est atteint et que l'envoi d'email est activé, le traitement quotidien envoie l'alerte une seule fois par seuil atteint. Pour recevoir ces notifications, les utilisateurs doivent disposer du droit [[Gestion-des-profils#Alertable-par-email-pour-toute-saisie-d'activité-ou-alerte-de-maintenance|Alertable par email pour toute saisie d'activité ou alerte de maintenance]] et avoir activé l'option [[Fiche-personnelle#Recevoir-les-emails-d'alerte-de-potentiel|Recevoir les e-mails d'alerte de potentiel]] dans leur fiche personnelle.&lt;br /&gt;
* Si un seuil d'alerte est modifié, les utilisateurs abonnés reçoivent à nouveau un email d'alerte de potentiel pour ce seuil atteint.&lt;br /&gt;
* Si la prochaine butée calendaire est modifiée, les utilisateurs abonnés reçoivent à nouveau un email d'alerte de potentiel pour chaque seuil d'alerte calendaire atteint.&lt;br /&gt;
* Si la prochaine butée en heures d'activité est modifiée, les utilisateurs abonnés reçoivent à nouveau un email d'alerte de potentiel pour chaque seuil d'alerte heures d'activité atteint.&lt;br /&gt;
* Si la prochaine butée en heures moteur est modifiée, les utilisateurs abonnés reçoivent à nouveau un email d'alerte de potentiel pour chaque seuil d'alerte heures moteur atteint.&lt;br /&gt;
&lt;br /&gt;
'''Potentiel''' :&lt;br /&gt;
Le programme calcule à chaque vol le total des heures depuis la date d'initialisation (HdV) et le potentiel restant estimé :&lt;br /&gt;
&amp;lt;pre&amp;gt;Potentiel restant d'activité = Prochaine butée horaire d'activité - (Total des heures d'activité à la date de début + HdV)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le programme calcule à chaque vol le total des heures moteurs depuis la date d'initialisation (HdV) et le potentiel restant estimé :&lt;br /&gt;
&amp;lt;pre&amp;gt;Potentiel restant moteur = Prochaine butée horaire moteur - (Total des heures moteur à la date de début + HdV)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le programme affiche le potentiel restant (Pot) à gauche du cahier journalier et affiche sous chaque réservation le potentiel estimé (durée indiquée par l'utilisateur lors de la réservation ou 50% de la durée de la réservation en absence d'information)&lt;br /&gt;
&amp;lt;pre&amp;gt;Potentiel = min(Potentiel restant d'activité, Potentiel restant moteur)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le programme surveille ces 2 butées :&lt;br /&gt;
** Alerte visuelle si la date du jour approche les seuils de date calendaire.&lt;br /&gt;
** Alerte visuelle si on approche les seuils de fin de potentiel.&lt;br /&gt;
* Il est conseillé de mettre à jour les valeurs d'initialisation une fois par an&lt;br /&gt;
&lt;br /&gt;
==Gestion des points fixes==&lt;br /&gt;
On appelle un point fixe le fait de faire tourner le moteur d'un aéronef pour en contrôler les paramètres sans que cela soit suivi d'un vol. Il s'agit d'une action prévue pour certaines opérations de maintenance.&lt;br /&gt;
&lt;br /&gt;
Pour les aéronefs équipés d'horamètres, le point fixe &amp;quot;fait tourner l'horamètre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
OpenFlyers préconise de ne pas saisir les points fixes en tant que vol car il n'y a pas de vol réalisé. Cela évite de d'impacter inutilement le potentiel de l'aéronef qui est normalement déterminé uniquement par les heures de vols.&lt;br /&gt;
 &lt;br /&gt;
Aussi, à l'issu d'un point fixe, la seule action à effectuer dans OpenFlyers consiste à mettre à jour le compteur :&lt;br /&gt;
*'''Gestion &amp;gt; Ressources &amp;gt; Actives'''&lt;br /&gt;
*Cliquer sur l’icône &amp;quot;Crayon&amp;quot; dans la colonne '''Actions''' de la ligne de l'aéronef concerné&lt;br /&gt;
*Mettre à jour le champ '''Dernier compteur enregistré'''&lt;br /&gt;
*Valider&lt;br /&gt;
&lt;br /&gt;
Ainsi, lors de la prochaine saisie d'heure de vol, le compteur départ correspondra au compteur mis à jour. Cela n'empêchera pas l'utilisateur de voir s'afficher ensuite une alerte mais il pourra vérifier sur le carnet de route ou sur tout autre document mis en place par la structure que cet écart est justifié. De la même façon, lors de la [[#Valider-une-activité|validation des activités]], l'écart de compteur ressortira et sera justifiable.&lt;br /&gt;
&lt;br /&gt;
==Modification des butées suite à un vol validé mal saisi==&lt;br /&gt;
Si un vol a été validé et que l'on se rencontre à posteriori qu'il a été mal saisi, il faut alors intervenir pour corriger les erreurs de calcul de potentiel restant qui en résultent. Pour cela, il y a plusieurs possibilités :&lt;br /&gt;
*Si le vol saisi initialement a une durée inférieure au vol réellement effectué : il faut saisir un vol complémentaire dont la durée correspond au temps de vol manquant.&lt;br /&gt;
*Si le vol saisi initialement a une durée supérieure au vol réellement effectué : il faut reprendre la procédure d'[[#Initialisation-de-la-gestion-des-potentiels|initialisation de la gestion des potentiels]] pour enlever au temps cellule initial le temps de vol décompté en trop de sorte à avoir un potentiel restant qui soit juste.&lt;br /&gt;
&lt;br /&gt;
Du fait de l'[[Comptabilité#Inaltérabilité-des-données|inaltérabilité des données]], il n'est pas possible de modifier une écriture validée.&lt;br /&gt;
&lt;br /&gt;
Il ne faut pas oublier de [[Utilisation-de-la-comptabilité#Annuler-l'effet-d'une-écriture-comptable|corriger comptablement l'effet des écritures]].&lt;br /&gt;
&lt;br /&gt;
=Types de composants=&lt;br /&gt;
Les types de composants sont répertoriés dans un catalogue tenu à jour par OpenFlyers. Chaque type de composant est caractérisé par son étiquette et sa catégorie. Il existe 4 catégories définies ci-dessous :&lt;br /&gt;
&lt;br /&gt;
==Documents==&lt;br /&gt;
Il s'agit des documents nécessaires pour la gestion et la traçabilité des activités de maintenance. Ils incluent les manuels de maintenance, les bulletins de service, les certificats de conformité, les rapports d'inspection, etc.&lt;br /&gt;
&lt;br /&gt;
'''Exemples''' : Manuels de maintenance de l'aéronef (AMM), Certificat d'Examens de Navigation (CEN), Assurance, Fiche de pesée, etc.&lt;br /&gt;
&lt;br /&gt;
==Éléments==&lt;br /&gt;
Il s'agit des composants physiques individuels ou des parties spécifiques de l'aéronef, comme les pièces de rechange, les sous-ensembles, ou les équipements spécifiques.&lt;br /&gt;
&lt;br /&gt;
'''Exemples''' : Un moteur, un hélice, un train d'atterrissage, des instruments de cockpit, etc.&lt;br /&gt;
&lt;br /&gt;
==Inspections==&lt;br /&gt;
Il s'agit des activités spécifiques de vérification et de contrôle des composants ou des systèmes de l'aéronef pour s'assurer qu'ils sont en bon état de fonctionnement et conformes aux normes de sécurité.&lt;br /&gt;
&lt;br /&gt;
'''Exemples''' : Inspection de pré-vol, inspection de corrosion, contrôle non destructif (CND), etc.&lt;br /&gt;
&lt;br /&gt;
==Visites==&lt;br /&gt;
Il s'agit des visites planifiées pour la maintenance, qui peuvent inclure des vérifications générales, des réparations ou des remplacements de composants.&lt;br /&gt;
&lt;br /&gt;
'''Exemples''' : (50H, 100H, 600 H / 2 ANS, etc)&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Suivi-de-maintenance&amp;diff=14446</id>
		<title>Suivi de maintenance</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Suivi-de-maintenance&amp;diff=14446"/>
		<updated>2026-04-30T10:58:57Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Butées de maintenance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter le module de suivi de [[Maintenance aéronautique|maintenance]].&lt;br /&gt;
&lt;br /&gt;
Ce module est accessible depuis le menu '''Gestion &amp;gt; Ressources &amp;gt; Maintenance''' et dispose de plusieurs interfaces :&lt;br /&gt;
*Une page '''[[#Vue-d'ensemble|Vue d'ensemble]]''' récapitulant les informations des aéronefs et les prochaines butées des actions&lt;br /&gt;
*Une page '''[[#Programme|Programme]]''' permettant de définir pour chaque ressource les caractéristiques nécessaire pour le suivi : les éléments, visites, potentiels, etc.&lt;br /&gt;
*Une page '''[[#Suivi|Suivi]]''' permettant de saisir pour chaque ressource les actions effectuées&lt;br /&gt;
&lt;br /&gt;
Cette page présente également le [[#Module-de-suivi-du-potentiel-restant|module de suivi du potentiel restant]]&lt;br /&gt;
&lt;br /&gt;
Lors de l'initialisation du module, il est recommandé de commencer par renseigner tout le programme de maintenance en commençant par les visites les plus importantes pour terminer par les visites les moins importantes.&lt;br /&gt;
&lt;br /&gt;
=Décalage du programme de maintenance=&lt;br /&gt;
Par défaut, le module de suivi de maintenance est prévu pour que '''toutes''' les interventions d'un aéronef soient renseignées dans [[#Suivi|le suivi de la ressource]] et ce, depuis sa mise en circulation.&lt;br /&gt;
&lt;br /&gt;
Si des interventions ont déjà été effectuées sur l'aéronef quand le module est paramétré pour la première fois, ou si les interventions précédentes sont inconnues, il est possible de '''décaler le programme de maintenance'''. De cette manière, on évite de devoir saisir les anciennes actions effectuées.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour décaler un programme de maintenance, un paramétrage supplémentaire est nécessaire afin d'optimiser les calculs des butées :&lt;br /&gt;
#Aller dans le [[#Programme|paramétrage du programme de la ressource]]&lt;br /&gt;
#Renseigner les bonnes valeurs dans la colonne '''Premier travaux de référence (horaire et calendaire)'''&lt;br /&gt;
&lt;br /&gt;
Si le programme de maintenance doit démarrer à un certain instant '''t''', les premiers travaux de référence de chaque action correspondent aux '''heures''' et à la '''date''' auxquels l'action a été effectuée pour la dernière fois quand l'aéronef avait '''t''' heures de vol. Pour les visites, on prend en compte le fait qu'elles [[Maintenance-aéronautique#Remarques|s'incluent]].&lt;br /&gt;
&lt;br /&gt;
Par exemple, un aéronef a déjà 2054h de vol et on veut faire démarrer le programme de maintenance à ce moment :&lt;br /&gt;
#La dernière '''Visite 50h''' a été effectuée à 2050h&lt;br /&gt;
#La dernière '''Visite 100h''' a été effectuée à 2000h (inclue dans la '''Visite 2000h''')&lt;br /&gt;
#La dernière '''Visite 500h''' a été effectuée à 2000h (inclue dans la '''Visite 2000h''')&lt;br /&gt;
#La dernière révision du '''Moteur''' était à 2000h&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
Ces valeurs de référence ne prennent pas en compte les marges de tolérance, donc le retard ou l'avance sur l'action. La valeur peut donc être approximative. En reprenant l'exemple précédent :&lt;br /&gt;
*Par exemple, la dernière '''Visite 50h''' a été effectuée à 2067h.&lt;br /&gt;
*Cette visite aurait dû être effectuée à 2050h, de plus la prochaine est prévue pour 2100h (on additionne les heures lors de la dernière visite plus sa périodicité)&lt;br /&gt;
*En mettant 2067h, la prochaine visite serait calculée à 2117h, donc la bonne valeur à renseigner est '''2050h'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Attention, pour la saisie de '''toutes''' les visites horaires et calendaires, '''les butées calculées et affichées''' démarrent '''toutes''' de la plus petite visite (habituellement la '''Visite 50h''' et la '''Visite 1 an''') :&lt;br /&gt;
*Ainsi, les prochaines butées des visites horaires sont, par exemple, calculées à partir de la '''Visite 50h''' de référence&lt;br /&gt;
*Les prochaines butées des visites calendaires sont, par exemple, souvent calculées à partir de la '''Visite 1 an''' de référence&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois ces valeurs de référence entrées, [[#Suivi|le suivi de la ressource]] peut être complété en indiquant toutes les interventions '''après''' ces valeurs de référence. Par exemple, si la valeur de référence de la '''Visite 50h''' est 2050h, le suivi ne doit pas contenir de valeur pour la '''Visite 50h''' à 2050h. Seulement les '''Visites 50h''' suivantes seront renseignées.  Le principe est le même pour les autres visites et toute autre action.&lt;br /&gt;
&lt;br /&gt;
=Programme=&lt;br /&gt;
Pour accéder au programme de chaque ressource :&lt;br /&gt;
*'''Gestion &amp;gt; Ressources &amp;gt; Maintenance'''&lt;br /&gt;
*Cliquer sur le bouton '''Programme''' de la ressource concernée&lt;br /&gt;
&lt;br /&gt;
Sur cette interface, il est possible d'accéder au programme d'une autre ressource depuis la liste déroulante '''Ressource'''.&lt;br /&gt;
&lt;br /&gt;
Lorsque le programme est vide, en-dessous du tableau, apparait une ligne '''Créer le programme par duplication à partir de''' qui permet de dupliquer le programme de maintenance d'une autre ressource pour la ressource en cours. Dans ce cas, seules les données des colonnes '''Type''', '''Description''', '''Périodicité horaire (heures)''', '''Tolérance horaire''', '''Périodicité calendaire (mois)''', '''Tolérance calendaire''' sont dupliquées.&lt;br /&gt;
&lt;br /&gt;
La page programme d'une ressource contient les caractéristiques nécessaires pour son suivi : éléments, visites, potentiels, etc et sont affichés selon un [[#Ordre-d'affichage-des-composants-du-programme|ordre de priorité]]. Ainsi, chaque ligne du tableau correspond à un élément de la ressource qui est suivi.&lt;br /&gt;
&lt;br /&gt;
Tous les éléments devant être suivis doivent être renseignés et paramétrés. Le paramétrage est nécessaire au bon fonctionnement du [[#Suivi|suivi]]. &lt;br /&gt;
&lt;br /&gt;
Une fois le paramétrage effectué, la page affiche les résultats des calculs obtenus d'après les informations contenues dans [[#Suivi|le suivi]].&lt;br /&gt;
&lt;br /&gt;
Lors du paramétrage des composants, [[#Ajouter-ou-modifier-un-composant|plusieurs champs sont à renseigner]].&lt;br /&gt;
&lt;br /&gt;
==Ajouter ou modifier un composant==&lt;br /&gt;
Pour ajouter un composant, il faut cliquer sur le bouton '''Ajouter''' présent en-dessous du tableau.&lt;br /&gt;
&lt;br /&gt;
Pour modifier un composant, il faut cliquer sur le pictogramme crayon présent dans la colonne '''Actions''' de la ligne concernée.&lt;br /&gt;
&lt;br /&gt;
Dans le formulaire il faut saisir les champs :&lt;br /&gt;
*'''[[#Types-de-composants|Type de composant]]''' : un élément de l'appareil (moteur, hélice, etc), une visite (50H, 100H, etc) ou autre (CEN, Pesée, etc)&lt;br /&gt;
*'''Description''' : le nom et les informations détaillées sur le composant. Par exemple la référence du moteur&lt;br /&gt;
*'''Périodicité horaire (heures)''' : si le composant a une périodicité horaire il faut remplir cette colonne&lt;br /&gt;
*'''Tolérance horaire''' : la tolérance d'un composant permet de calculer [[Maintenance-aéronautique#Schémas-:-calcul-d'échéances|la fenêtre de la butée optimale]]. Pour les composants avec une périodicité horaires, la tolérance doit être en heures.&lt;br /&gt;
*'''Périodicité calendaire (mois)''' : si le composant a une périodicité calendaire il faut remplir cette colonne&lt;br /&gt;
*'''Tolérance calendaire''' : la tolérance d'un composant permet de calculer [[Maintenance-aéronautique#Schémas-:-calcul-d'échéances|la fenêtre de la butée optimale]]. Pour les composants avec une périodicité calendaire, la tolérance doit être en mois.&lt;br /&gt;
*'''Premiers travaux de référence''' : il s'agit de la date ou des heures cellules des travaux de l'action à utiliser comme référence pour le calcul des valeurs dans [[#Suivi|le suivi]]. Cette colonne permet de [[#Décalage-du-programme-de-maintenance|décaler le programme de maintenance de l'aéronef]]. &lt;br /&gt;
**'''horaire''' : A remplir pour un composant avec périodicité horaire. La valeur doit correspondre aux heures cellules quand l'action a été effectuée pour la dernière fois.&lt;br /&gt;
***Si le programme de maintenance n'est pas décalé, ne rien remplir&lt;br /&gt;
**'''calendaire''' : Le principe est identique aux premier travaux de référence ayant une périodicité horaire, la date des derniers travaux doit être indiquée. &lt;br /&gt;
***&amp;lt;s&amp;gt;Si le programme de maintenance n'est pas décalé, la '''date de mise en circulation''' de l'aéronef doit être renseignée.&amp;lt;/s&amp;gt;&lt;br /&gt;
*'''Cette visite correspond à la révision générale'''&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' tout composant doit être défini avec soit une périodicité horaire soit une périodicité calendaire. Dans le cas où un composant n'a pas de périodicité, il faut créer une périodicité fictive, par exemple en indiquant une butée calendaire de 120 mois.&lt;br /&gt;
&lt;br /&gt;
==Détail du programme==&lt;br /&gt;
Les premières colonnes du programme sont définis lors de l'[[#Ajouter-ou-modifier-un-composant|ajout d'un composant]] :&lt;br /&gt;
*'''Type'''&lt;br /&gt;
*'''Description'''&lt;br /&gt;
*'''Périodicité horaire (heures)'''&lt;br /&gt;
*'''Tolérance horaire'''&lt;br /&gt;
*'''Périodicité calendaire (mois)'''&lt;br /&gt;
*'''Tolérance calendaire'''&lt;br /&gt;
*'''Premiers travaux de référence horaire'''&lt;br /&gt;
*'''Premiers travaux de référence calendaire'''&lt;br /&gt;
&lt;br /&gt;
Les colonnes suivantes et calculs intermédiaires non visibles sont déterminées à partir des premières colonnes et des informations contenues dans le [[#Suivi|suivi]] :&lt;br /&gt;
*'''Heures cellule début travaux''' : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Heures cellule début travaux'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence horaire''' du composant&lt;br /&gt;
*'''Date fin travaux''' : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Date fin travaux'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence calendaire''' du composant&lt;br /&gt;
*'''Temps réalisé (heures)''' : résultat de la différence entre la colonne '''Heures totales''' de la ressource et la colonne '''Heures cellule début travaux''' du composant&lt;br /&gt;
*'''Potentiel restant (heures)''' : résultat de la différence entre la colonne '''Butée horaire sans marge''' du composant et la colonne '''Heures totales''' de la ressource&lt;br /&gt;
*'''Butée horaire sans marge''' : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Butée horaire sans marge'''. Résultat de la valeur la plus petite entre celle que l'on vient de récupérer et la colonne '''Heures cellule début travaux''' du composant à laquelle on ajoute la valeur de la colonne '''Périodicité horaire''' du composant&lt;br /&gt;
*'''Butée horaire avec marge''' : résultat de la colonne '''Butée horaire sans marge''' du composant à laquelle on ajoute la valeur de la colonne '''Tolérance horaire''' du composant&lt;br /&gt;
*'''Temps réalisé (mois)''' : résultat de la différence entre la date du jour et de la colonne '''Date fin travaux''' du composant&lt;br /&gt;
*'''Potentiel restant (mois)''' : résultat de la différence entre la colonne '''Butée calendaire sans marge''' du composant et la date du jour&lt;br /&gt;
*'''Butée calendaire sans marge''' : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Butée calendaire sans marge'''. Résultat de la valeur la plus petite entre celle que l'on vient de récupérer et la colonne '''Date fin travaux''' du composant à laquelle on ajoute la valeur de la colonne '''Périodicité calendaire''' du composant&lt;br /&gt;
*'''Butée calendaire avec marge''' : résultat de la colonne '''Butée calendaire sans marge''' du composant à laquelle on ajoute la valeur de la colonne '''Tolérance calendaire''' du composant&lt;br /&gt;
*'''Heures début travaux effective''' (calcul intermédiaire) :&lt;br /&gt;
**Si le composant est une visite : récupère sur la dernière visite enregistrée [[Maintenance-aéronautique#Remarques|compatible avec le composant]] dans le suivi la valeur de la colonne '''Heures cellule début travaux'''. Si aucune entrée n'est compatible dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence horaire''' du composant&lt;br /&gt;
**Si le composant n'est pas une visite : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Heures cellule début travaux'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence horaire''' du composant&lt;br /&gt;
*'''Butée horaire originale théorique''' (calcul intermédiaire) :&lt;br /&gt;
**Si le composant est une visite : récupère sur la dernière visite enregistrée [[Maintenance-aéronautique#Remarques|compatible avec le composant]] dans le suivi la valeur de la colonne '''Butée horaire sans marge'''. Si aucune entrée n'est compatible dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence horaire''' du composant&lt;br /&gt;
**Si le composant n'est pas une visite : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Heures cellule début travaux'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence horaire''' du composant&lt;br /&gt;
*'''Butée horaire originale intelligente''' (calcul intermédiaire) : Si ces valeurs sont présentes, récupère la valeur la plus petite entre la colonne '''Heures début travaux effective''' du composant et la colonne '''Butée horaire originale théorique''' du composant. Sinon récupère la valeur de la colonne '''Heures cellule début travaux''' du composant&lt;br /&gt;
*'''Butée horaire intelligente sans marge''' (calcul intermédiaire) : résultat de la valeur de la colonne '''Butée horaire originale intelligente''' du composant à laquelle on ajoute la valeur de la colonne '''Périodicité horaire''' du composant&lt;br /&gt;
*'''Butée horaire intelligente avec marge''' (calcul intermédiaire) : résultat de la valeur de la colonne '''Butée horaire intelligente sans marge''' du composant à laquelle on ajoute la valeur de la colonne '''Tolérance horaire''' du composant&lt;br /&gt;
*'''Date fin travaux effective''' (calcul intermédiaire) :&lt;br /&gt;
**Si le composant est une visite : récupère sur la dernière visite enregistrée [[Maintenance-aéronautique#Remarques|compatible avec le composant]] dans le suivi la valeur de la colonne '''Date fin travaux'''. Si aucune entrée n'est compatible dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence calendaire''' du composant&lt;br /&gt;
**Si le composant n'est pas une visite : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Date fin travaux'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence calendaire''' du composant&lt;br /&gt;
*'''Butée calendaire originale théorique''' (calcul intermédiaire) :&lt;br /&gt;
**Si le composant est une visite : récupère sur la dernière visite enregistrée [[Maintenance-aéronautique#Remarques|compatible avec le composant]] dans le suivi la valeur de la colonne '''Butée calendaire sans marge'''. Si aucune entrée n'est compatible dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence calendaire''' du composant&lt;br /&gt;
**Si le composant n'est pas une visite : récupère sur la dernière entrée du composant dans le suivi la valeur de la colonne '''Butée calendaire sans marge'''. Si le composant n'a pas d'entrée dans le suivi, récupère la valeur de la colonne '''Premiers travaux de référence calendaire''' du composant&lt;br /&gt;
*'''Butée calendaire originale intelligente''' (calcul intermédiaire) : Si ces valeurs sont présentes, récupère la valeur la plus petite entre la colonne '''Date fin travaux effective''' du composant et la colonne '''Butée calendaire originale théorique''' du composant. Sinon récupère la valeur de la colonne '''Date fin travaux''' du composant&lt;br /&gt;
*'''Butée calendaire intelligente sans marge''' (calcul intermédiaire) : résultat de la valeur de la colonne '''Butée calendaire originale intelligente''' du composant à laquelle on ajoute la valeur de la colonne '''Périodicité calendaire''' du composant&lt;br /&gt;
*'''Butée calendaire intelligente avec marge''' (calcul intermédiaire) : résultat de la valeur de la colonne '''Butée calendaire intelligente sans marge''' du composant à laquelle on ajoute la valeur de la colonne '''Tolérance calendaire''' du composant&lt;br /&gt;
*'''Groupe de chevauchement''' (calcul intermédiaire) : n'est calculé que si le composant est une visite.&lt;br /&gt;
*#Récupère dans le programme tous les composants qui sont de type visite et qui chevauche le composant pour lequel on détermine son groupe de chevauchement. Dans le cas d'un composant avec une périodicité horaire, pour déterminer que le composant chevauche un autre composant il doit avoir la valeur de la colonne '''Butée horaire intelligente sans marge''' qui est inférieure ou égale à la valeur de la colonne '''Butée horaire intelligente avec marge''' de l'autre composant et il doit avoir la valeur de la colonne '''Butée horaire intelligente avec marge''' qui est supérieure ou égale à la valeur de la colonne '''Butée horaire intelligente sans marge''' de l'autre composant. Il est également récupéré les visites en retard qui ont la valeur de la colonne '''Butée horaire intelligente avec marge''' qui est inférieure ou égale à la valeur de la colonne '''Butée horaire intelligente sans marge''' de l'autre composant. Dans le cas d'un composant avec une périodicité calendaire le principe est le même mais avec les colonnes '''Butée calendaire intelligente sans et avec marge'''&lt;br /&gt;
*#A partir des composant récupérés, le composant reçoit comme identifiant de groupe de chevauchement l'identifiant du composant qui a la plus petite périodicité horaire ou calendaire. Si le composant n'est chevauché par aucun autre composant ou si c'est lui qui a la plus petite périodicité dans le groupe alors c'est son identifiant qui est utilisé comme identifiant de groupe de chevauchement.&lt;br /&gt;
*'''Cette visite correspond à la révision générale''' (saisi par l'utilisateur mais non visible sur le programme)&lt;br /&gt;
&lt;br /&gt;
==Forcer le rafraichissement des calculs==&lt;br /&gt;
S'il est nécessaire de forcer le recalcule de l'ensemble des butées (calcul intermédiaire), alors il faut saisir une activitéee fictive pour la ressource concernée et ensuite supprimer cette activité.&lt;br /&gt;
&lt;br /&gt;
==Ordre d'affichage des composants du programme==&lt;br /&gt;
L'ordre d'affichage des composants du programme est le suivant :&lt;br /&gt;
#les visites&lt;br /&gt;
#les éléments&lt;br /&gt;
#les inspections&lt;br /&gt;
#les documents&lt;br /&gt;
*Les éléments et les attestations sont triés, dans chaque type, par ordre alphabétique&lt;br /&gt;
*Les visites sont triées ainsi :&lt;br /&gt;
*#Celles avec une périodicité horaire, de la plus petite à la plus grande&lt;br /&gt;
*#Celles avec une périodicité calendaire, par ordre alphabétique&lt;br /&gt;
&lt;br /&gt;
=Suivi=&lt;br /&gt;
Le suivi de chaque ressource est accessible depuis le menu '''Gestion &amp;gt; Resource &amp;gt; Maintenance'''. Dans le tableau, cliquer sur le bouton '''Suivi''' de la resource souhaitée. La page suivi d'une ressource contient toutes les actions effectuées sur l'aéronef. Suite à chaque [[#Ajouter-une-action-effectuée|saisie]], les prochaines butées des actions sont estimées et affichées. &lt;br /&gt;
&lt;br /&gt;
Les actions sont triées par ordre chronologique.&lt;br /&gt;
&lt;br /&gt;
==Ajouter une action effectuée==&lt;br /&gt;
Pour ajouter une action, il faut cliquer sur le bouton '''Ajouter''' présent en dessous du tableau. Pour modifier une action, il faut cliquer sur le pictogramme crayon présent dans la colonne ''Actions''.&lt;br /&gt;
&lt;br /&gt;
Dans le formulaire il faut saisir les champs :&lt;br /&gt;
*'''[[#Types-de-composants|Type de composant]]''' : il s'agit d'une liste déroulante contenant les composant définis dans le [[#Programme|programme]] de la ressource. Il faut sélectionner le composant concerné&lt;br /&gt;
*'''Heures cellule début travaux''' : les heures cellule de la ressource au début de l'action effectuée. Le champ est obligatoire si le composant a une périodicité horaire&lt;br /&gt;
*'''Date fin travaux''' : la date lorsque l'action a été effectuée. Le champ est obligatoire si le composant a une périodicité calendaire&lt;br /&gt;
&lt;br /&gt;
'''Attention :'''&lt;br /&gt;
*Si [[#Décalage-du-programme-de-maintenance|le programme de maintenance est décalé]], le suivi doit contenir les actions '''suivant ce décalage'''. Par exemple si les '''Travaux de référence''' du '''Moteur''' sont de '''2000h''' (le suivi du moteur démarre à 2000h), le suivi ne doit pas contenir l'entrée du '''Moteur''' avec '''2000h''', il contiendra les interventions suivantes du moteur.&lt;br /&gt;
&lt;br /&gt;
==Détail du suivi==&lt;br /&gt;
Les premiers champs du suivi sont définis lors de l'[[#Ajouter-une-action-effectuée|ajout d'une action]] :&lt;br /&gt;
*'''Action'''&lt;br /&gt;
*'''Heures cellule début travaux'''&lt;br /&gt;
*'''Date fin travaux'''&lt;br /&gt;
&lt;br /&gt;
Les champs suivants et calculs intermédiaires non visibles sont déterminées à partir des premières colonnes et des informations contenues dans le [[#Programme|programme]] :&lt;br /&gt;
*'''Est une visite''' : défini à partir du type du composant&lt;br /&gt;
*'''Type d'action''' : horaire (1), calendaire (2), les deux (0). Défini en fonction de si le composant a une périodicité horaire, calendaire ou les deux.&lt;br /&gt;
*'''Tolérance horaire''' : défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Tolérance calendaire''' : défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Périodicité horaire de l'action''' : si l'action est une visite, la valeur est défini à partir du champ correspondant dans la visite de référence sinon elle est défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Périodicité calendaire de l'action''' : si l'action est une visite, la valeur est défini à partir du champ correspondant dans la visite de référence sinon elle est défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Périodicité horaire du composant''' : défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Périodicité calendaire du composant''' : défini à partir du champ correspondant dans le composant&lt;br /&gt;
*'''Butée horaire de référence''' : défini à partir du champ '''Premiers travaux de référence horaire''' dans le composant. Si l'action est une visite il lui est ajouté la valeur du champ '''Périodicité horaire'''&lt;br /&gt;
*'''Butée calendaire de référence''' : défini à partir du champ '''Premiers travaux de référence calendaire''' dans le composant. Si l'action est une visite il lui est ajouté la valeur du champ '''Périodicité calendaire'''&lt;br /&gt;
*'''Ligne précédente action horaire liée''' / '''Ligne précédente action calendaire liée''' :&lt;br /&gt;
**les lignes sont triées par ordre croissant selon le champ '''Heures cellule début travaux''' puis par ordre chronologique selon le champ '''Date fin travaux'''&lt;br /&gt;
**si c'est une visite le moteur recherche parmi les visites l'entrée précédente la plus proche, sinon il recherche parmi les entrées qui concernent le même composant&lt;br /&gt;
**si une entrée a été trouvée elle est est défini comme ligne précédente sinon c'est la visite de référence qui est utilisée&lt;br /&gt;
*'''Ligne prochaine action horaire liée''' / '''Ligne prochaine action calendaire liée''' :&lt;br /&gt;
**les lignes sont triées par ordre croissant selon le champ '''Heures cellule début travaux''' puis par ordre chronologique selon le champ '''Date fin travaux'''&lt;br /&gt;
**si c'est une visite le moteur recherche parmi les visites l'entrée suivante la plus proche, sinon il recherche parmi les entrées qui concernent le même composant&lt;br /&gt;
**si une entrée a été trouvée elle est est défini comme ligne précédente sinon aucune valeur ne lui est défini&lt;br /&gt;
*'''Butée horaire sans marge''' :&lt;br /&gt;
**s'il s'agit d'une visite ou que la ligne précédente ne correspond pas à la visite de référence&lt;br /&gt;
***si la ligne précédente correspond à la visite de référence, le champ '''Butée horaire sans marge''' de la visite de référence est utilisé&lt;br /&gt;
***sinon, le champ '''Prochaine butée horaire sans marge''' de la ligne précédente est utilisé&lt;br /&gt;
**sinon, le champ '''Butée horaire de référence''' de l'action est utilisé&lt;br /&gt;
*'''Butée horaire avec marge''' : résultat du champ '''Butée horaire sans marge''' de l'action à qui on ajoute la valeur du champ '''Tolérance horaire''' de l'action&lt;br /&gt;
*'''Prochaine butée horaire sans marge''' : résultat de la valeur la plus petite entre celle du champ '''Heures cellule début travaux''' et du champ '''Butée horaire sans marge''' à qui on ajoute la valeur du champ '''Périodicité horaire''' de l'action&lt;br /&gt;
*'''Prochaine butée horaire avec marge''' : résultat du champ '''Prochaine butée horaire sans marge''' de l'action à qui on ajoute une '''Tolérance horaire''' qu'il faut déterminer. Si l'action n'a pas de prochaine ligne alors si c'est une visite on utilise le champ '''Tolérance horaire''' de la visite de référence sinon on utilise le champ '''Tolérance horaire''' de l'action. Si l'action a une prochaine ligne de défini alors c'est le champ '''Tolérance horaire''' de celle-ci qui est utilisé&lt;br /&gt;
*'''Butée calendaire sans marge''' :&lt;br /&gt;
**s'il s'agit d'une visite ou que la ligne précédente ne correspond pas à la visite de référence&lt;br /&gt;
***si la ligne précédente correspond à la visite de référence, le champ '''Butée calendaire sans marge''' de la visite de référence est utilisé&lt;br /&gt;
***sinon, le champ '''Prochaine butée calendaire sans marge''' de la ligne précédente est utilisé&lt;br /&gt;
**sinon, le champ '''Butée calendaire de référence''' de l'action est utilisé&lt;br /&gt;
*'''Butée calendaire avec marge''' : résultat du champ '''Butée calendaire sans marge''' de l'action à qui on ajoute la valeur du champ '''Tolérance calendaire''' de l'action&lt;br /&gt;
*'''Prochaine butée calendaire sans marge''' : résultat de la valeur la plus petite entre celle du champ '''Date fin travaux''' et du champ '''Butée calendaire sans marge''' à qui on ajoute la valeur du champ '''Périodicité calendaire''' de l'action&lt;br /&gt;
*'''Prochaine butée calendaire avec marge''' : résultat du champ '''Prochaine butée calendaire sans marge''' de l'action à qui on ajoute une '''Tolérance calendaire''' qu'il faut déterminer. Si l'action n'a pas de prochaine ligne alors si c'est une visite on utilise le champ '''Tolérance calendaire''' de la visite de référence sinon on utilise le champ '''Tolérance calendaire''' de l'action. Si l'action a une prochaine ligne de défini alors c'est le champ '''Tolérance calendaire''' de celle-ci qui est utilisé&lt;br /&gt;
&lt;br /&gt;
Une première ligne '''Première visite de référence''' apparait dès lors qu'un composant est ajouté au programme de maintenance. Les cellules suivantes sont initialisées :&lt;br /&gt;
*'''Butée horaire sans marge''' : correspond au champ '''Premiers travaux de référence horaire''' du composant ajouté&lt;br /&gt;
*'''Butée horaire avec marge''' : correspond à la somme des champs ''''''Premiers travaux de référence horaire''' et '''Tolérance horaire''' du composant ajouté&lt;br /&gt;
*'''Butée calendaire sans marge''' : correspond au champ '''Premiers travaux de référence calendaire''' du composant ajouté uniquement si le champ '''Périodicité calendaire''' du composant ajouté est renseigné&lt;br /&gt;
*'''Butée calendaire avec marge''' : correspond à la somme des champs '''Premiers travaux de référence calendaire''' et '''Tolérance calendaire''' du composant ajouté. Si le champ '''Périodicité calendaire''' est laissé vide, alors la date indiquée est le 01/01/1970.&lt;br /&gt;
Si par la suite d'autres composants sont ajoutés, cette première ligne '''Première visite de référence''' se met à jour dès lors que le composant ajouté est d'une périodicité plus faible que les composants déjà présents. En effet, c'est le composant à la périodicité la plus faible qui donne le rythme des actions de maintenance. C'est donc lui qui donne la référence sur la prochaine action. Cf. le chapitre [[#Décalage-du-programme-de-maintenance|Décalage du programme de maintenance]].&lt;br /&gt;
&lt;br /&gt;
===Calcul des fenêtres d'action de maintenance : 50h bien positionnée ou trop anticipée===&lt;br /&gt;
[[File:50h bien positionnée.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:50h trop anticipée.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
===Programme sans/avec butée calendaire===&lt;br /&gt;
Programme sans visite calendaire :&lt;br /&gt;
&lt;br /&gt;
[[File:Programme sans VP calendaire.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Affichage du suivi sans butée calendaire :&lt;br /&gt;
&lt;br /&gt;
[[File:Suivi sans butée calendaire.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programme avec butée calendaire :&lt;br /&gt;
&lt;br /&gt;
[[File:Programme avec VP calendaire.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
Affichage du suivi avec butée calendaire :&lt;br /&gt;
&lt;br /&gt;
[[File:Suivi avec butée calendaire.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
=Vue d'ensemble=&lt;br /&gt;
La vue d'ensemble est accessible depuis le menu '''Gestion &amp;gt; Ressources &amp;gt; Maintenance'''. Cette page synthétise les informations les plus importantes pour le suivi de maintenance des différentes ressources:&lt;br /&gt;
*'''Heures totales''' : heures totales de la ressource. Cette colonne est automatiquement mise à jour lors de la saisie ou la suppression d'une activité&lt;br /&gt;
*'''Heures depuis RG (Cellule)''' : Cette valeur correspond aux heures totales de la ressource depuis sa Révision Générale (RG). La RG est [[#Programme|paramétrée pour correspondre à une visite]] de la ressource, par exemple la visite 2000h.&lt;br /&gt;
*'''Heures depuis RG (Moteur)''' : La valeur correspond aux heures totales du moteur depuis sa révision, soit depuis ses [[#Programme|'''Heures début travaux''']].&lt;br /&gt;
*'''Heures depuis RG (Hélice)''' : Le principe est le même que pour le moteur, la valeur correspond aux heures totales depuis la révision de l'hélice.&lt;br /&gt;
*'''Potentiel''' : Le '''Potentiel''' est divisé en deux sous colonnes. Une contenant le potentiel restant en heures, une contenant le potentiel restant en mois. Les potentiels affichés sont ceux de la colonne '''Prochaine action'''. Si la prochaine action est une visite alors le potentiel restant affichée se base sur le [[Maintenance-aéronautique#Calcul-de-l'échéance-d'une-visite|calcul de l'échéance d'une visite]]. Il est possible que le potentiel restant de la visite visible dans le [[#Programme|programme]] soit inférieur au potentiel calculé. Dans ce cas on vérifie si une [[Maintenance-aéronautique#Remarques|visite compatible]] avec une périodicité supérieure a été réalisé depuis la dernière révision de la prochaine visite affichée. Si c'est le cas alors on affiche le potentiel calculé. Sinon on affiche la potentiel restant de la prochaine visite.&lt;br /&gt;
*'''Prochaine action''' : La '''Prochaine action''', divisée en deux colonnes est un complément de la colonne '''Potentiel'''. Elle contient le nom des deux prochaines actions de la ressource arrivant à échéance, une en heures et une en mois. L'affichage de la '''Prochaine action''' est optimisé quand le [[#Suivi|suivi]] de la ressource est complet. La prochaine action est le composant avec la plus petite butée horaire ou calendaire. Lorsque la prochaine action est une visite on regarde si des visites se chevauchent. Si c'est le cas alors c'est la visite avec la plus grande périodicité qui sera affichée.&lt;br /&gt;
**Le caractère '''*''' est affiché sur les prochaines actions qui incluent un chevauchement de visite&lt;br /&gt;
&lt;br /&gt;
Le potentiel affiché change de couleur selon sa valeur :&lt;br /&gt;
*Au dessus de 10 heures : &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;'''vert'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*Entre 10 heures (inclus) et 5 heures (non inclus) : &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;'''orange'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*En dessous de 5 heures (inclus) : &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''rouge'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Actualisation journalière de la vue d'ensemble==&lt;br /&gt;
&lt;br /&gt;
Chaque nuit à 06h00 UTC la [[#Vue-d'ensemble|vue d'ensemble]] est actualisée afin de mettre à jour les [[#Détail-de-la-vue-d'ensemble|calculs intermédiaires]] se basant sur la date du jour.&lt;br /&gt;
&lt;br /&gt;
==Détail de la vue d'ensemble==&lt;br /&gt;
&lt;br /&gt;
Les champs suivants et calculs intermédiaires non visibles sont déterminés à partir des informations contenues dans le [[#Programme|programme]] et dans le [[#Suivi|suivi]] :&lt;br /&gt;
*'''Cellule - Heures totales''' : heures totales de l'aéronef mises à jour à chaque modification du temps de vol - création, édition ou suppression d'un vol&lt;br /&gt;
*'''Cellule - Heures depuis RG''' : résultat de la différence entre le champ '''Cellule - Heures totales''' et le champ '''Heures cellule début travaux''' de la visite qui correspond à la révision générale&lt;br /&gt;
*'''Moteur - Heures depuis RG''' : résultat de la différence entre le champ '''Cellule - Heures totales''' et le champ '''Temps réalisé (heures) ''' de l'élément moteur.&lt;br /&gt;
Pour que cette case contienne une valeur, il faut qu'un composant de type ''72 - Moteur'' soit renseigné dans le programme de l'aéronef et qu'une entrée soit saisie dans le suivi de l'aéronef lié à ce composant&lt;br /&gt;
*'''Hélice - Heures depuis RG''' : résultat de la différence entre le champ '''Cellule - Heures totales''' et le champ '''Temps réalisé (heures) ''' de l'élément hélice.&lt;br /&gt;
Pour que cette case contienne une valeur, il faut qu'un composant de type ''61 - Hélice'' soit renseigné dans le programme de l'aéronef et qu'une entrée soit saisie dans le suivi de l'aéronef lié à ce composant&lt;br /&gt;
&lt;br /&gt;
*'''Prochaine visite horaire''' : recherche la visite avec la plus petite périodicité horaire. A partir du champ '''Groupe de chevauchement''', recherche parmi les visites qui sont dans ce groupe la visite avec la plus grande périodicité horaire. Cette visite sera la '''prochaine visite horaire'''.&lt;br /&gt;
*'''Butée horaire visite''' : recherche parmi le suivi de la ressource, la visite avec la valeur la plus grande pour le champ '''Prochaine butée horaire sans marge'''. Si une visite est trouvée, récupère la valeur de ce champ. Sinon récupère la valeur de ce champ dans le programme sur la visite défini comme étant la '''prochaine visite horaire'''.&lt;br /&gt;
*'''Potentiel prochaine visite horaire''' :&lt;br /&gt;
*#Calcule la différence entre le champ '''Butée horaire visite''' et le champ '''Cellule - Heures totales''' et la compare avec le potentiel restant de la prochaine visite horaire&lt;br /&gt;
*#Si ce dernier est plus petit, vérifie si une visite compatible avec une périodicité supérieure a été réalisé depuis la dernière révision de la prochaine visite horaire&lt;br /&gt;
*#Si c'est le cas alors on affiche le résultat de la différence entre le champ '''Butée horaire visite''' et le champ '''Cellule - Heures totales'''. Sinon on affiche la potentiel restant de la prochaine visite horaire&lt;br /&gt;
*'''Prochaine action horaire''' : recherche le composant qui a la '''Butée horaire sans marge''' la plus petite&lt;br /&gt;
*'''Butée horaire action''' : récupère sur le composant correspond à la '''Prochaine action horaire''', le champ '''Butée horaire sans marge'''&lt;br /&gt;
*'''Potentiel prochaine action horaire''' : résultat de la différence entre le champ '''Butée horaire action''' et le champ '''Cellule - Heures totales'''&lt;br /&gt;
&lt;br /&gt;
*'''Potentiel - Heures''' qui correspond au champ '''Potentiel prochaine action horaire prioritaire''' :&lt;br /&gt;
**si les champs '''Potentiel prochaine visite horaire''' et '''Potentiel prochaine action horaire''' sont définis, le champ avec la plus petite valeur sera celui utilisé pour définir le champ '''Potentiel prochaine action horaire prioritaire'''&lt;br /&gt;
**si un seul des deux champs est défini ce sera celui utilisé pour définir le champ '''Potentiel prochaine action horaire prioritaire'''&lt;br /&gt;
*'''Prochaine action horaire prioritaire''' : si c'est le champ '''Potentiel prochaine visite horaire''' qui a été retenu, la prochaine action sera donc celle correspondant au champ '''Prochaine visite horaire''' sinon ce sera celle du champ '''Prochaine action horaire'''&lt;br /&gt;
&lt;br /&gt;
*'''Prochaine visite calendaire''' : recherche la visite avec la plus petite périodicité calendaire. A partir du champ '''Groupe de chevauchement''', recherche parmi les visites qui sont dans ce groupe la visite avec la plus grande périodicité calendaire. Cette visite sera la '''prochaine visite calendaire'''.&lt;br /&gt;
*'''Butée calendaire visite''' : recherche parmi le suivi de la ressource, la visite avec la valeur la plus grande pour le champ '''Prochaine butée calendaire sans marge'''. Si une visite est trouvée, récupère la valeur de ce champ. Sinon récupère la valeur de ce champ dans le programme sur la visite défini comme étant la '''prochaine visite horaire'''.&lt;br /&gt;
*'''Potentiel prochaine visite calendaire ''' : résultat en mois de la différence entre le champ '''Butée calendaire visite''' et la date du jour&lt;br /&gt;
&lt;br /&gt;
*'''Prochaine action calendaire''' : recherche le composant qui a la '''Butée calendaire sans marge''' la plus petite&lt;br /&gt;
*'''Butée calendaire action''' : récupère sur le composant correspond à la '''Prochaine action calendaire''', le champ '''Butée calendaire sans marge'''&lt;br /&gt;
*'''Potentiel prochaine action calendaire ''' : résultat en mois de la différence entre le champ '''Butée calendaire action''' et la date du jour&lt;br /&gt;
&lt;br /&gt;
*'''Potentiel - Mois''' qui correspond au champ '''Potentiel prochaine action calendaire prioritaire''' :&lt;br /&gt;
**si les champs '''Potentiel prochaine visite calendaire''' et '''Potentiel prochaine action calendaire''' sont définis, le champ avec la plus petite valeur sera celui utilisé pour définir le champ '''Potentiel prochaine action calendaire prioritaire'''&lt;br /&gt;
**si un seul des deux champs est défini ce sera celui utilisé pour définir le champ '''Potentiel prochaine action calendaire prioritaire'''&lt;br /&gt;
*'''Prochaine action calendaire prioritaire''' : si c'est le champ '''Potentiel prochaine visite calendaire''' qui a été retenu, la prochaine action sera donc celle correspondant au champ '''Prochaine visite calendaire''' sinon ce sera celle du champ '''Prochaine action calendaire'''&lt;br /&gt;
&lt;br /&gt;
=Module de suivi du potentiel restant=&lt;br /&gt;
==Unité de mesure des heures==&lt;br /&gt;
L'unité de mesure des compteurs d'un aéronef correspond au [[Gestion des ressources#Ajouter_un_type_de_ressource|paramétrage du type de ressource]] correspondant.&lt;br /&gt;
&lt;br /&gt;
Par contre, l'unité de mesure des totaux d'heures correspond au [[Configuration#Gestion-des-vols|paramétrage de l'unité de temps de la plateforme]]. Cela permet d'avoir la tenue des carnets de route des aéronefs dans une seule unité quelque soit l'aéronef. De même pour les calculs des butées pour le suivi de navigabilité cela permet d'avoir une seule unité.&lt;br /&gt;
&lt;br /&gt;
==Activer le module de gestion des potentiels==&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Paramétrage &amp;gt; Activités'''&lt;br /&gt;
*Activer l'interrupteur '''[[Paramétrage-des-activités#Gestion-des-potentiels|Gestion des potentiels]]'''&lt;br /&gt;
*Cliquer sur le bouton '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
===Initialisation de la gestion des potentiels===&lt;br /&gt;
*Aller dans '''Gestion &amp;gt; Ressources &amp;gt; Actives'''&lt;br /&gt;
*Cliquer sur l'icône Édition (le crayon)	&lt;br /&gt;
**Dans la partie inférieure '''Données pour la gestion des vols''' on initialise les valeurs :&lt;br /&gt;
**'''Date de début de comptabilisation des heures'''&lt;br /&gt;
**'''Total des heures à la date de début'''&lt;br /&gt;
Il faut indiquer dans ces 2 champs le nombre d'heures de la ressource et à quelle date il y avait ce nombre d'heures. Ainsi, OpenFlyers calculera le nombre d'heures de vols effectuées par l'aéronef à compter de cette date de début et en partant du total renseigné pour cette date. Seules les heures de vols dont la date sera postérieure à cette date de début seront prises en compte pour ce calcul.&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' pour un calcul exact du potentiel restant, tous les vols postérieurs à la '''date de début de comptabilisation des heures''' doivent être saisis dans OpenFlyers.&lt;br /&gt;
&lt;br /&gt;
===Affichage du potentiel estimé restant dans les créneaux de réservation===&lt;br /&gt;
Cela se fait en activant le champ additionnel spécifique [[Champs-métiers#bookingEstimatedFlightTime|bookingEstimatedFlightTime]].&lt;br /&gt;
&lt;br /&gt;
===Initialisation de la gestion des alertes===&lt;br /&gt;
*Aller sur '''Gestion &amp;gt; Ressources &amp;gt; Navigabilité'''&lt;br /&gt;
*Cliquer sur l'icône Édition (le crayon) :&lt;br /&gt;
**Régler les 3 seuils d'alerte pour les potentiels (exemple 10 h, 0 h et -5 h)&lt;br /&gt;
**Régler les 3 seuils d'alerte pour les dates calendaire (exemple 15 jours, 8 jours et 0 jours)&lt;br /&gt;
&lt;br /&gt;
==Butées de maintenance==&lt;br /&gt;
*Aller sur '''Gestion &amp;gt; Ressources &amp;gt; Navigabilité'''&lt;br /&gt;
:La colonne '''Moteur''' s'affiche uniquement si au moins une ressource appartient à un type de ressource configuré pour utiliser un calcul de temps moteur différent du temps de vol.&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:Maintenance_table_fr.jpg|1200px|Tableau de bord maintenance]]&amp;lt;/center&amp;gt;&lt;br /&gt;
*Cliquer sur l'icône Modifier (le crayon) :&lt;br /&gt;
:La colonne '''Heure moteur''' s'affiche uniquement si la ressource appartient à un type de ressource configuré pour utiliser un calcul de temps moteur différent du temps de vol.&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:Maintenance_detail_fr.jpg|1200px|Maintenance]]&amp;lt;/center&amp;gt;&lt;br /&gt;
'''Prochaine butée calendaire''' : c'est la date qui sert de référence pour les alertes calendaires (ex : renouvèlement CDN).&lt;br /&gt;
&lt;br /&gt;
'''Prochaine butée horaire d'activité ''': c'est la butée de temps d'activité à ne pas dépasser avant la prochaine action de maintenance associée. Le programme soustrait de cette valeur le temps de référence indiqué dans la page ressource et la somme des temps d'activités effectués par la ressource pour déterminer le potentiel restant d'activité.&lt;br /&gt;
&lt;br /&gt;
'''Prochaine butée horaire moteur''': c'est la butée de temps moteur à ne pas dépasser avant la prochaine action de maintenance associée. Le programme soustrait de cette valeur le temps de référence indiqué dans la page ressource et la somme des temps moteur effectués par la ressource pour déterminer le potentiel restant moteur.&lt;br /&gt;
&lt;br /&gt;
'''Seuil des alertes''' : Il y a 3 niveaux d'alerte horaire et calendaire à paramétrer selon les souhaits du mécanicien (Seuil avertissement, Seuil alarme et Seuil stop). L'alerte visualisée sur le cahier de réservation sera la première des échéances atteintes.&lt;br /&gt;
&lt;br /&gt;
'''Alertes de potentiel''' : pour chaque seuil d'alerte calendaire, d'heures d'activité ou d'heures moteur, il est possible d'activer l'envoi d'un email aux utilisateurs abonnés. Lorsqu'un seuil d'alerte est atteint et que l'envoi d'email est activé, le traitement quotidien envoie l'alerte une seule fois par seuil atteint.&lt;br /&gt;
* Si un seuil d'alerte est modifié, les utilisateurs abonnés reçoivent à nouveau un email d'alerte de potentiel pour ce seuil atteint.&lt;br /&gt;
* Si la prochaine butée calendaire est modifiée, les utilisateurs abonnés reçoivent à nouveau un email d'alerte de potentiel pour chaque seuil d'alerte calendaire atteint.&lt;br /&gt;
* Si la prochaine butée en heures d'activité est modifiée, les utilisateurs abonnés reçoivent à nouveau un email d'alerte de potentiel pour chaque seuil d'alerte heures d'activité atteint.&lt;br /&gt;
* Si la prochaine butée en heures moteur est modifiée, les utilisateurs abonnés reçoivent à nouveau un email d'alerte de potentiel pour chaque seuil d'alerte heures moteur atteint.&lt;br /&gt;
&lt;br /&gt;
'''Potentiel''' :&lt;br /&gt;
Le programme calcule à chaque vol le total des heures depuis la date d'initialisation (HdV) et le potentiel restant estimé :&lt;br /&gt;
&amp;lt;pre&amp;gt;Potentiel restant d'activité = Prochaine butée horaire d'activité - (Total des heures d'activité à la date de début + HdV)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le programme calcule à chaque vol le total des heures moteurs depuis la date d'initialisation (HdV) et le potentiel restant estimé :&lt;br /&gt;
&amp;lt;pre&amp;gt;Potentiel restant moteur = Prochaine butée horaire moteur - (Total des heures moteur à la date de début + HdV)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le programme affiche le potentiel restant (Pot) à gauche du cahier journalier et affiche sous chaque réservation le potentiel estimé (durée indiquée par l'utilisateur lors de la réservation ou 50% de la durée de la réservation en absence d'information)&lt;br /&gt;
&amp;lt;pre&amp;gt;Potentiel = min(Potentiel restant d'activité, Potentiel restant moteur)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Le programme surveille ces 2 butées :&lt;br /&gt;
** Alerte visuelle si la date du jour approche les seuils de date calendaire.&lt;br /&gt;
** Alerte visuelle si on approche les seuils de fin de potentiel.&lt;br /&gt;
* Il est conseillé de mettre à jour les valeurs d'initialisation une fois par an&lt;br /&gt;
&lt;br /&gt;
==Gestion des points fixes==&lt;br /&gt;
On appelle un point fixe le fait de faire tourner le moteur d'un aéronef pour en contrôler les paramètres sans que cela soit suivi d'un vol. Il s'agit d'une action prévue pour certaines opérations de maintenance.&lt;br /&gt;
&lt;br /&gt;
Pour les aéronefs équipés d'horamètres, le point fixe &amp;quot;fait tourner l'horamètre&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
OpenFlyers préconise de ne pas saisir les points fixes en tant que vol car il n'y a pas de vol réalisé. Cela évite de d'impacter inutilement le potentiel de l'aéronef qui est normalement déterminé uniquement par les heures de vols.&lt;br /&gt;
 &lt;br /&gt;
Aussi, à l'issu d'un point fixe, la seule action à effectuer dans OpenFlyers consiste à mettre à jour le compteur :&lt;br /&gt;
*'''Gestion &amp;gt; Ressources &amp;gt; Actives'''&lt;br /&gt;
*Cliquer sur l’icône &amp;quot;Crayon&amp;quot; dans la colonne '''Actions''' de la ligne de l'aéronef concerné&lt;br /&gt;
*Mettre à jour le champ '''Dernier compteur enregistré'''&lt;br /&gt;
*Valider&lt;br /&gt;
&lt;br /&gt;
Ainsi, lors de la prochaine saisie d'heure de vol, le compteur départ correspondra au compteur mis à jour. Cela n'empêchera pas l'utilisateur de voir s'afficher ensuite une alerte mais il pourra vérifier sur le carnet de route ou sur tout autre document mis en place par la structure que cet écart est justifié. De la même façon, lors de la [[#Valider-une-activité|validation des activités]], l'écart de compteur ressortira et sera justifiable.&lt;br /&gt;
&lt;br /&gt;
==Modification des butées suite à un vol validé mal saisi==&lt;br /&gt;
Si un vol a été validé et que l'on se rencontre à posteriori qu'il a été mal saisi, il faut alors intervenir pour corriger les erreurs de calcul de potentiel restant qui en résultent. Pour cela, il y a plusieurs possibilités :&lt;br /&gt;
*Si le vol saisi initialement a une durée inférieure au vol réellement effectué : il faut saisir un vol complémentaire dont la durée correspond au temps de vol manquant.&lt;br /&gt;
*Si le vol saisi initialement a une durée supérieure au vol réellement effectué : il faut reprendre la procédure d'[[#Initialisation-de-la-gestion-des-potentiels|initialisation de la gestion des potentiels]] pour enlever au temps cellule initial le temps de vol décompté en trop de sorte à avoir un potentiel restant qui soit juste.&lt;br /&gt;
&lt;br /&gt;
Du fait de l'[[Comptabilité#Inaltérabilité-des-données|inaltérabilité des données]], il n'est pas possible de modifier une écriture validée.&lt;br /&gt;
&lt;br /&gt;
Il ne faut pas oublier de [[Utilisation-de-la-comptabilité#Annuler-l'effet-d'une-écriture-comptable|corriger comptablement l'effet des écritures]].&lt;br /&gt;
&lt;br /&gt;
=Types de composants=&lt;br /&gt;
Les types de composants sont répertoriés dans un catalogue tenu à jour par OpenFlyers. Chaque type de composant est caractérisé par son étiquette et sa catégorie. Il existe 4 catégories définies ci-dessous :&lt;br /&gt;
&lt;br /&gt;
==Documents==&lt;br /&gt;
Il s'agit des documents nécessaires pour la gestion et la traçabilité des activités de maintenance. Ils incluent les manuels de maintenance, les bulletins de service, les certificats de conformité, les rapports d'inspection, etc.&lt;br /&gt;
&lt;br /&gt;
'''Exemples''' : Manuels de maintenance de l'aéronef (AMM), Certificat d'Examens de Navigation (CEN), Assurance, Fiche de pesée, etc.&lt;br /&gt;
&lt;br /&gt;
==Éléments==&lt;br /&gt;
Il s'agit des composants physiques individuels ou des parties spécifiques de l'aéronef, comme les pièces de rechange, les sous-ensembles, ou les équipements spécifiques.&lt;br /&gt;
&lt;br /&gt;
'''Exemples''' : Un moteur, un hélice, un train d'atterrissage, des instruments de cockpit, etc.&lt;br /&gt;
&lt;br /&gt;
==Inspections==&lt;br /&gt;
Il s'agit des activités spécifiques de vérification et de contrôle des composants ou des systèmes de l'aéronef pour s'assurer qu'ils sont en bon état de fonctionnement et conformes aux normes de sécurité.&lt;br /&gt;
&lt;br /&gt;
'''Exemples''' : Inspection de pré-vol, inspection de corrosion, contrôle non destructif (CND), etc.&lt;br /&gt;
&lt;br /&gt;
==Visites==&lt;br /&gt;
Il s'agit des visites planifiées pour la maintenance, qui peuvent inclure des vérifications générales, des réparations ou des remplacements de composants.&lt;br /&gt;
&lt;br /&gt;
'''Exemples''' : (50H, 100H, 600 H / 2 ANS, etc)&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=File:Maintenance_detail_fr.jpg&amp;diff=14445</id>
		<title>File:Maintenance_detail_fr.jpg</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=File:Maintenance_detail_fr.jpg&amp;diff=14445"/>
		<updated>2026-04-29T13:25:11Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: Mbouzar uploaded a new version of File:Maintenance_detail_fr.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Importing file&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=File:014_parametrage_gestion_reservation.png&amp;diff=14440</id>
		<title>File:014_parametrage_gestion_reservation.png</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=File:014_parametrage_gestion_reservation.png&amp;diff=14440"/>
		<updated>2026-04-28T10:29:11Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: Mbouzar uploaded a new version of File:014_parametrage_gestion_reservation.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14427</id>
		<title>Structure de la base de données</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14427"/>
		<updated>2026-04-27T13:59:21Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Schéma de la structure de la base de données=&lt;br /&gt;
*[[Media:OpenFlyers_database_schema.png|Lien vers schéma fichier .png]]&lt;br /&gt;
&lt;br /&gt;
=Structure=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create table account&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    creation_date    date                          null,&lt;br /&gt;
    name             text                          null,&lt;br /&gt;
    export_account   varchar(255)                  null,&lt;br /&gt;
    activated        tinyint unsigned    default 1 not null,&lt;br /&gt;
    category         tinyint unsigned    default 0 null,&lt;br /&gt;
    account_type     tinyint unsigned    default 0 null,&lt;br /&gt;
    owner_id         int unsigned        default 0 not null,&lt;br /&gt;
    payment_allowed  tinyint(1)          default 0 null,&lt;br /&gt;
    budget_id        int unsigned                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    accounting_id    int unsigned                  null,&lt;br /&gt;
    deactivated_date datetime                      null,&lt;br /&gt;
    group_sales      tinyint(1)          default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of account';&lt;br /&gt;
&lt;br /&gt;
create index idx_owner_id&lt;br /&gt;
    on account (owner_id);&lt;br /&gt;
&lt;br /&gt;
create table account_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int                          null,&lt;br /&gt;
    account_date          datetime                     null,&lt;br /&gt;
    account_id            int                          null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 not null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 not null,&lt;br /&gt;
    payment_type          int unsigned                 null,&lt;br /&gt;
    payment_description   text                         null,&lt;br /&gt;
    person_delivery_id    int unsigned                 null,&lt;br /&gt;
    comments              text                         null,&lt;br /&gt;
    validated             int            default 0     null,&lt;br /&gt;
    exported              int            default 0     null,&lt;br /&gt;
    registration_date     datetime                     null,&lt;br /&gt;
    budget_id             int unsigned                 null,&lt;br /&gt;
    product_id            int unsigned                 null,&lt;br /&gt;
    signature             varchar(56)                  null,&lt;br /&gt;
    signature_date        bigint unsigned              null,&lt;br /&gt;
    lettering             int                          null,&lt;br /&gt;
    lettering_date        datetime                     null,&lt;br /&gt;
    flow_reversal_id      int unsigned                 null,&lt;br /&gt;
    transaction_id        text                         null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of account entries';&lt;br /&gt;
&lt;br /&gt;
create table account_link&lt;br /&gt;
(&lt;br /&gt;
    account_id        int unsigned default 0 not null,&lt;br /&gt;
    linked_account_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (account_id, linked_account_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                  null,&lt;br /&gt;
    category               tinyint unsigned    default 0 null,&lt;br /&gt;
    activated              tinyint(1)          default 1 null,&lt;br /&gt;
    order_num              int                           null,&lt;br /&gt;
    accounting_id          int unsigned                  null,&lt;br /&gt;
    export_account_pattern varchar(255)                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type_profile&lt;br /&gt;
(&lt;br /&gt;
    account_type_id int unsigned    not null,&lt;br /&gt;
    profile_id      bigint unsigned not null,&lt;br /&gt;
    primary key (account_type_id, profile_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'linked account type field and profile';&lt;br /&gt;
&lt;br /&gt;
create table accounting&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)           null,&lt;br /&gt;
    unit_name         varchar(255)           null,&lt;br /&gt;
    symbol            varchar(255)           null,&lt;br /&gt;
    format            tinyint unsigned       null,&lt;br /&gt;
    decimal_precision int unsigned default 2 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table accounting_profile&lt;br /&gt;
(&lt;br /&gt;
    accounting_id int unsigned    not null,&lt;br /&gt;
    profile_id    bigint unsigned not null,&lt;br /&gt;
    primary key (accounting_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table activity_type&lt;br /&gt;
(&lt;br /&gt;
    id                                 bigint unsigned not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                               varchar(255)             null,&lt;br /&gt;
    order_num                          int                      null,&lt;br /&gt;
    activated                          tinyint(1)      default 1 not null,&lt;br /&gt;
    color                              int unsigned             null,&lt;br /&gt;
    training                           tinyint(1)      default 0 not null,&lt;br /&gt;
    previous_activity_type_id          bigint unsigned          null,&lt;br /&gt;
    previous_activity_default_duration int unsigned             null,&lt;br /&gt;
    next_activity_type_id              bigint unsigned          null,&lt;br /&gt;
    next_activity_default_duration     int unsigned             null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft&lt;br /&gt;
(&lt;br /&gt;
    id                         int unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    ref_date                   datetime               null,&lt;br /&gt;
    ref_hours                  int                    null,&lt;br /&gt;
    ref_engine_hours           int                    null,&lt;br /&gt;
    inspection_date            datetime               null,&lt;br /&gt;
    inspection_time            int                    null,&lt;br /&gt;
    inspection_engine_time     int                    null,&lt;br /&gt;
    tolerance_time             int unsigned default 6000 null,&lt;br /&gt;
    last_counter               int                    null,&lt;br /&gt;
    interval_visit_calendar    varchar(255) default '50 h' null,&lt;br /&gt;
    interval_visit_time        varchar(255) default '50 h' null,&lt;br /&gt;
    interval_visit_engine_time varchar(255) default '50 h' null,&lt;br /&gt;
    time_alert1                int          default 6000 null,&lt;br /&gt;
    time_alert2                int          default 0 null,&lt;br /&gt;
    time_alert3                int          default -3000 null,&lt;br /&gt;
    engine_time_alert1         int          default 6000 null,&lt;br /&gt;
    engine_time_alert2         int          default 0 null,&lt;br /&gt;
    engine_time_alert3         int          default 0 null,&lt;br /&gt;
    day_alert1                 smallint     default 15 null,&lt;br /&gt;
    day_alert2                 smallint     default 0 null,&lt;br /&gt;
    day_alert3                 smallint     default -8 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'all aircrafts of all airclubs';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_maintenance_alert&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_id    int unsigned          not null,&lt;br /&gt;
    alert_category tinyint unsigned      not null,&lt;br /&gt;
    alert_level    tinyint unsigned      not null,&lt;br /&gt;
    is_enabled     tinyint unsigned default 0 not null,&lt;br /&gt;
    is_sent        tinyint unsigned default 0 not null,&lt;br /&gt;
    unique (aircraft_id, alert_category, alert_level)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    id                      int unsigned                 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_time_formula     varchar(255) default '%duration' null,&lt;br /&gt;
    counter_state           tinyint      default -1      not null,&lt;br /&gt;
    tolerance               int          default 0       null,&lt;br /&gt;
    autonomy                int          default 5990    null,&lt;br /&gt;
    true_air_speed          int unsigned default 0       not null,&lt;br /&gt;
    digit_counter_number    tinyint unsigned default 4   not null,&lt;br /&gt;
    engine_duration_formula varchar(255)                 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'types of aircraft';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_allowed_status&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned not null,&lt;br /&gt;
    place_num        int unsigned null,&lt;br /&gt;
    status_id        int unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of allowed functions for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_mandatory_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    not null,&lt;br /&gt;
    activity_type_id bigint unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of compulsory flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    not null,&lt;br /&gt;
    activity_type_id bigint unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of uncompatible flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_validity_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned          not null,&lt;br /&gt;
    validity_type_id int unsigned          not null,&lt;br /&gt;
    check_num        int unsigned default 0 not null,&lt;br /&gt;
    primary key (aircraft_type_id, validity_type_id, check_num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'types of qualif required for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table allocation_rule&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    title      varchar(255)         not null,&lt;br /&gt;
    account_id int                  not null,&lt;br /&gt;
    keyword    varchar(255)         null,&lt;br /&gt;
    order_num  int                  not null,&lt;br /&gt;
    amount     tinyint(1)           not null,&lt;br /&gt;
    mandatory  tinyint(1) default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance&lt;br /&gt;
(&lt;br /&gt;
    account_id      int unsigned                   not null,&lt;br /&gt;
    balance_date_id int unsigned                   not null,&lt;br /&gt;
    debit           decimal(15, 5) default 0.00000 not null,&lt;br /&gt;
    credit          decimal(15, 5) default 0.00000 not null,&lt;br /&gt;
    primary key (account_id, balance_date_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance_date&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    balance_date datetime null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    booking_group_id int unsigned null,&lt;br /&gt;
    start_date       datetime     null,&lt;br /&gt;
    end_date         datetime     null&lt;br /&gt;
)&lt;br /&gt;
    comment 'records all the slots of all aircrafts of all airclubs';&lt;br /&gt;
&lt;br /&gt;
create table booking_account_entry&lt;br /&gt;
(&lt;br /&gt;
    booking_id            int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_activity_type&lt;br /&gt;
(&lt;br /&gt;
    booking_id       int unsigned    not null,&lt;br /&gt;
    activity_type_id bigint unsigned not null,&lt;br /&gt;
    primary key (booking_id, activity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_person&lt;br /&gt;
(&lt;br /&gt;
    booking_id int unsigned not null,&lt;br /&gt;
    person_id  int unsigned not null,&lt;br /&gt;
    place_num  int unsigned null,&lt;br /&gt;
    status_id  int unsigned null,&lt;br /&gt;
    primary key (booking_id, person_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_resource&lt;br /&gt;
(&lt;br /&gt;
    booking_id  int unsigned default 0 not null,&lt;br /&gt;
    resource_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_training_program&lt;br /&gt;
(&lt;br /&gt;
    booking_group_id    int unsigned not null,&lt;br /&gt;
    training_program_id int unsigned not null,&lt;br /&gt;
    primary key (booking_group_id, training_program_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    group_id    int unsigned not null,&lt;br /&gt;
    name        varchar(255) null,&lt;br /&gt;
    order_num   int          null,&lt;br /&gt;
    export_code varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name      varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table business_field&lt;br /&gt;
(&lt;br /&gt;
    id                       int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable                 varchar(255)          null,&lt;br /&gt;
    label                    varchar(255)          not null,&lt;br /&gt;
    value_type               varchar(40)           not null,&lt;br /&gt;
    category                 varchar(255)          not null,&lt;br /&gt;
    order_num                int                   not null,&lt;br /&gt;
    dsn                      varchar(20) default 'customer' null,&lt;br /&gt;
    compulsory_fill          tinyint(1)  default 0 null,&lt;br /&gt;
    linked_category          varchar(255)          null,&lt;br /&gt;
    linked_business_field_id int unsigned          null,&lt;br /&gt;
    linked_field_name        varchar(255)          null,&lt;br /&gt;
    max_display              int         default -1 null,&lt;br /&gt;
    formula                  text                  null,&lt;br /&gt;
    default_value            text                  null,&lt;br /&gt;
    placeholder              text                  null,&lt;br /&gt;
    access_level_required    tinyint     default 0 not null,&lt;br /&gt;
    user_access_mode         tinyint(1)  default 0 not null,&lt;br /&gt;
    unique (variable)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_content&lt;br /&gt;
(&lt;br /&gt;
    category_id       int unsigned           not null,&lt;br /&gt;
    business_field_id int unsigned default 0 not null,&lt;br /&gt;
    person_id         int unsigned default 0 not null,&lt;br /&gt;
    content           text                   null,&lt;br /&gt;
    placeholder       text                   null,&lt;br /&gt;
    primary key (category_id, business_field_id, person_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'content of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255)                   not null,&lt;br /&gt;
    predicate text                           not null,&lt;br /&gt;
    order_num int                            null,&lt;br /&gt;
    dsn       varchar(20) default 'customer' null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria_profile&lt;br /&gt;
(&lt;br /&gt;
    criteria_id int unsigned    not null,&lt;br /&gt;
    profile_id  bigint unsigned not null,&lt;br /&gt;
    primary key (criteria_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    customer_bill_id      int unsigned                   null,&lt;br /&gt;
    product_id            int unsigned                   null,&lt;br /&gt;
    qty                   decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    unit_price            decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    bill_date             datetime                       null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_bill_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_bill_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    payment_type_id       int unsigned                   null,&lt;br /&gt;
    customer_receipt_id   int unsigned                   null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    receipt_date          datetime                       null,&lt;br /&gt;
    owner_email           varchar(255)                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table data_retention&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    data_processing_title varchar(45)           not null,&lt;br /&gt;
    legal_basis_category  int unsigned default 0 not null,&lt;br /&gt;
    data_retention_period int unsigned          not null,&lt;br /&gt;
    controller_person_id  int unsigned          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_display&lt;br /&gt;
(&lt;br /&gt;
    person_id     int unsigned            not null,&lt;br /&gt;
    display_key   varchar(255) default '' not null,&lt;br /&gt;
    display_value text                    null,&lt;br /&gt;
    primary key (person_id, display_key)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_multi_display&lt;br /&gt;
(&lt;br /&gt;
    resource_type char(30)     not null,&lt;br /&gt;
    person_id     int unsigned not null,&lt;br /&gt;
    resource_id   varchar(100) not null,&lt;br /&gt;
    display_value text         null,&lt;br /&gt;
    primary key (resource_type, person_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent&lt;br /&gt;
(&lt;br /&gt;
    id          bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    message_id  varchar(150)     not null,&lt;br /&gt;
    sender      varchar(255)     not null,&lt;br /&gt;
    title       varchar(255)     not null,&lt;br /&gt;
    category    tinyint unsigned not null,&lt;br /&gt;
    category_id int unsigned     not null,&lt;br /&gt;
    unique (message_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent_recipient&lt;br /&gt;
(&lt;br /&gt;
    id                   bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    email_sent_id        bigint unsigned  not null,&lt;br /&gt;
    person_id            int unsigned     not null,&lt;br /&gt;
    email                varchar(255)     null,&lt;br /&gt;
    recipient_type       tinyint unsigned null,&lt;br /&gt;
    smtp_status_category varchar(30)      null,&lt;br /&gt;
    email_status         tinyint unsigned null,&lt;br /&gt;
    update_date          datetime         not null,&lt;br /&gt;
    smtp_additional_detail text             null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index email_sent_id_idx&lt;br /&gt;
    on email_sent_recipient (email_sent_id);&lt;br /&gt;
&lt;br /&gt;
create table exceptionnal_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned        not null,&lt;br /&gt;
    start_date datetime            null,&lt;br /&gt;
    end_date   datetime            null,&lt;br /&gt;
    presence   tinyint unsigned    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table extra_field_profile&lt;br /&gt;
(&lt;br /&gt;
    business_field_id                  int unsigned    not null,&lt;br /&gt;
    booking_popup_display_4_profile_id bigint unsigned not null,&lt;br /&gt;
    primary key (business_field_id, booking_popup_display_4_profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table facebook&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    category    int unsigned not null,&lt;br /&gt;
    owner_id    int unsigned not null,&lt;br /&gt;
    small       blob         null,&lt;br /&gt;
    original    mediumblob   not null,&lt;br /&gt;
    label       text         null,&lt;br /&gt;
    description text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_icao&lt;br /&gt;
(&lt;br /&gt;
    icao varchar(6) default '' not null&lt;br /&gt;
        primary key&lt;br /&gt;
)&lt;br /&gt;
    comment 'favorite airfield list';&lt;br /&gt;
&lt;br /&gt;
create table favorite_report&lt;br /&gt;
(&lt;br /&gt;
    report_id int unsigned not null&lt;br /&gt;
        primary key&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_business_field&lt;br /&gt;
(&lt;br /&gt;
    report_id         int unsigned not null,&lt;br /&gt;
    business_field_id int unsigned not null,&lt;br /&gt;
    default_value     text         null,&lt;br /&gt;
    primary key (report_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_profile&lt;br /&gt;
(&lt;br /&gt;
    report_id  int unsigned              not null,&lt;br /&gt;
    profile_id bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (report_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table fhp_aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int default 0 not null,&lt;br /&gt;
    aircraft_type_id int default 0 not null,&lt;br /&gt;
    primary key (fhp_id, aircraft_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing aircraft type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int                 default 0 not null,&lt;br /&gt;
    activity_type_id bigint unsigned     default 0 not null,&lt;br /&gt;
    excluded         tinyint unsigned    default 0 null,&lt;br /&gt;
    primary key (fhp_id, activity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing flight type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_profile&lt;br /&gt;
(&lt;br /&gt;
    fhp_id     int unsigned               not null,&lt;br /&gt;
    profile_id bigint unsigned default 0  not null,&lt;br /&gt;
    place_num  tinyint unsigned default 0 not null,&lt;br /&gt;
    primary key (fhp_id, profile_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table file&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name          varchar(255)        null,&lt;br /&gt;
    content       longblob            null,&lt;br /&gt;
    file_type     varchar(255)        null,&lt;br /&gt;
    category      tinyint unsigned    null,&lt;br /&gt;
    owner_id      int                 null,&lt;br /&gt;
    file_group_id int                 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table file_group&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_id           int unsigned               null,&lt;br /&gt;
    start_date            datetime                   null,&lt;br /&gt;
    duration              int                        null,&lt;br /&gt;
    activity_type_id      bigint unsigned            null,&lt;br /&gt;
    people_onboard        int unsigned               null,&lt;br /&gt;
    departure_location_id int unsigned               null,&lt;br /&gt;
    arrival_location_id   int unsigned               null,&lt;br /&gt;
    counter_departure     int unsigned               null,&lt;br /&gt;
    counter_arrival       int unsigned               null,&lt;br /&gt;
    landing_number        int                        null,&lt;br /&gt;
    airborne              tinyint unsigned           null,&lt;br /&gt;
    validated             tinyint unsigned default 0 null,&lt;br /&gt;
    departure_icao_id     varchar(6)                 null,&lt;br /&gt;
    arrival_icao_id       varchar(6)                 null,&lt;br /&gt;
    engine_duration       int                        null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_account_entry&lt;br /&gt;
(&lt;br /&gt;
    flight_id        int unsigned default 0 not null,&lt;br /&gt;
    account_entry_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, account_entry_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight account entry join';&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on flight_account_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table flight_hours_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name               text                          null,&lt;br /&gt;
    price_formula      text                          null,&lt;br /&gt;
    left_account_id    int unsigned                  null,&lt;br /&gt;
    right_account_id   int unsigned                  null,&lt;br /&gt;
    left_account_type  tinyint unsigned    default 0 null,&lt;br /&gt;
    right_account_type tinyint unsigned    default 0 null,&lt;br /&gt;
    credit_budget_id   int unsigned                  null,&lt;br /&gt;
    debit_budget_id    int unsigned                  null,&lt;br /&gt;
    order_num          int                           null,&lt;br /&gt;
    product_id         int unsigned                  null,&lt;br /&gt;
    sale_trigger_id    int unsigned        default 0 null,&lt;br /&gt;
    query              text                          null,&lt;br /&gt;
    variable_formula   varchar(255)                  null,&lt;br /&gt;
    business_field_id  int unsigned                  null,&lt;br /&gt;
    debit_bill_num     int unsigned                  null,&lt;br /&gt;
    credit_bill_num    int unsigned                  null,&lt;br /&gt;
    qty_formula        text                          null,&lt;br /&gt;
    unit_price_formula text                          null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight hours pricing formula';&lt;br /&gt;
&lt;br /&gt;
create table flight_pilot&lt;br /&gt;
(&lt;br /&gt;
    flight_id int unsigned           not null,&lt;br /&gt;
    pilot_id  int unsigned           not null,&lt;br /&gt;
    status_id int unsigned           null,&lt;br /&gt;
    num       int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, pilot_id, num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of crew for each flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_tank_qty&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_id    int unsigned                not null,&lt;br /&gt;
    tank_id      int unsigned                not null,&lt;br /&gt;
    quantity     varchar(255) default '0.00' not null,&lt;br /&gt;
    after_flight tinyint(1)   default 0      not null,&lt;br /&gt;
    account_id   int unsigned                null,&lt;br /&gt;
    pay_type     tinyint unsigned            null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight_track&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_id int                     not null,&lt;br /&gt;
    track     mediumblob              not null,&lt;br /&gt;
    file_type varchar(255) default 'kml' null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight_type_mandatory_validity_type&lt;br /&gt;
(&lt;br /&gt;
    activity_type_id bigint unsigned           not null,&lt;br /&gt;
    validity_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (activity_type_id, validity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of mandatory qualification for each flight type';&lt;br /&gt;
&lt;br /&gt;
create table import&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label               varchar(255)                          not null,&lt;br /&gt;
    order_num           int                                   null,&lt;br /&gt;
    import_file_type    varchar(255) default 'csv-comma-CRLF' not null,&lt;br /&gt;
    match_query         text                                  null,&lt;br /&gt;
    uptodate_test_query text                                  null,&lt;br /&gt;
    update_query        text                                  null,&lt;br /&gt;
    update_activated    tinyint(1)   default 0                not null,&lt;br /&gt;
    login               varchar(255)                          null,&lt;br /&gt;
    hash_password       varchar(255)                          null,&lt;br /&gt;
    sync_task_name      varchar(255)                          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table ip_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    ip          varchar(255)        not null,&lt;br /&gt;
    counter     tinyint unsigned    not null,&lt;br /&gt;
    expire_date datetime            not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'blacklisted ip';&lt;br /&gt;
&lt;br /&gt;
create table journal&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login     varchar(255)           null,&lt;br /&gt;
    date_log  datetime               null,&lt;br /&gt;
    rights    text                   null,&lt;br /&gt;
    rights2   text                   null,&lt;br /&gt;
    action    varchar(255)           null,&lt;br /&gt;
    person_id int unsigned default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_action&lt;br /&gt;
    on journal (action);&lt;br /&gt;
&lt;br /&gt;
create index idx_date_log&lt;br /&gt;
    on journal (date_log);&lt;br /&gt;
&lt;br /&gt;
create table key_alert&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    alert_date datetime               null,&lt;br /&gt;
    status     int unsigned default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'key alerts';&lt;br /&gt;
&lt;br /&gt;
create table key_assignment&lt;br /&gt;
(&lt;br /&gt;
    key_id      tinyint unsigned    default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    key_name    tinytext                      null,&lt;br /&gt;
    aircraft_id int unsigned        default 0 null,&lt;br /&gt;
    key_state   tinyint unsigned    default 0 null,&lt;br /&gt;
    key_word    bigint unsigned     default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'key assignment description';&lt;br /&gt;
&lt;br /&gt;
create table key_host&lt;br /&gt;
(&lt;br /&gt;
    id       tinyint auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    timeout  tinyint             default 10          not null,&lt;br /&gt;
    num_key  tinyint unsigned    default 8           not null,&lt;br /&gt;
    ipkey    varchar(50)         default '127.0.0.1' not null,&lt;br /&gt;
    httpport int                 default 4080        not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'key host configuration';&lt;br /&gt;
&lt;br /&gt;
create table key_log&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    log_date  datetime     null,&lt;br /&gt;
    action    varchar(255) null,&lt;br /&gt;
    message   varchar(255) null,&lt;br /&gt;
    key_id    int unsigned null,&lt;br /&gt;
    person_id int unsigned null,&lt;br /&gt;
    xmlrpc    int unsigned null,&lt;br /&gt;
    error     varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'key logs';&lt;br /&gt;
&lt;br /&gt;
create table location&lt;br /&gt;
(&lt;br /&gt;
    icao_name       varchar(6)       not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name            varchar(64)      not null,&lt;br /&gt;
    latitude        double           null,&lt;br /&gt;
    longitude       double           null,&lt;br /&gt;
    altitude        int              null,&lt;br /&gt;
    weather_station int unsigned     null,&lt;br /&gt;
    asked_counter   bigint default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'airfields coord';&lt;br /&gt;
&lt;br /&gt;
create table log&lt;br /&gt;
(&lt;br /&gt;
    journal_id  int unsigned not null,&lt;br /&gt;
    action      varchar(255) null,&lt;br /&gt;
    table_name  varchar(255) null,&lt;br /&gt;
    field_name  varchar(255) null,&lt;br /&gt;
    field_value varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'part of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_field_value&lt;br /&gt;
    on log (field_value);&lt;br /&gt;
&lt;br /&gt;
create index idx_journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create index journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create table logger&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    serial_number int unsigned                      null,&lt;br /&gt;
    color         varchar(20)         default 'red' not null,&lt;br /&gt;
    activated     tinyint unsigned    default 1     not null,&lt;br /&gt;
    order_num     int unsigned                      not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'logger parameters';&lt;br /&gt;
&lt;br /&gt;
create table login_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login       varchar(255)     not null,&lt;br /&gt;
    counter     tinyint unsigned not null,&lt;br /&gt;
    expire_date datetime         not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'blacklisted login';&lt;br /&gt;
&lt;br /&gt;
create table m_component&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id           int unsigned        default 0 not null,&lt;br /&gt;
    m_component_type_id int unsigned                  null,&lt;br /&gt;
    resource_id         int unsigned                  null,&lt;br /&gt;
    order_num           int                           not null,&lt;br /&gt;
    serial_number       varchar(255)                  null,&lt;br /&gt;
    brandnew_date       datetime                      null,&lt;br /&gt;
    activated           tinyint unsigned    default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id              int unsigned        default 0 not null,&lt;br /&gt;
    resource_type_id       int                           null,&lt;br /&gt;
    m_classification_id    int                           null,&lt;br /&gt;
    is_maintenance_check   tinyint unsigned    default 1 not null,&lt;br /&gt;
    order_num              int                           not null,&lt;br /&gt;
    label                  varchar(255)                  null,&lt;br /&gt;
    description            varchar(255)                  null,&lt;br /&gt;
    manufacturer           varchar(255)                  null,&lt;br /&gt;
    manufacturer_reference varchar(255)                  null,&lt;br /&gt;
    part_number            varchar(255)                  null,&lt;br /&gt;
    periodicity            int unsigned                  null,&lt;br /&gt;
    tolerance              int unsigned        default 0 not null,&lt;br /&gt;
    calendar_periodicity   int unsigned                  null,&lt;br /&gt;
    calendar_tolerance     int unsigned        default 0 not null,&lt;br /&gt;
    activated              tinyint unsigned    default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type_parentality&lt;br /&gt;
(&lt;br /&gt;
    m_component_type_id        int unsigned not null,&lt;br /&gt;
    m_component_type_parent_id int unsigned not null,&lt;br /&gt;
    primary key (m_component_type_id, m_component_type_parent_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_history&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    m_component_id         int unsigned                  not null,&lt;br /&gt;
    install_date           datetime                      null,&lt;br /&gt;
    remove_date            datetime                      null,&lt;br /&gt;
    total_hours_on_install int unsigned        default 0 not null,&lt;br /&gt;
    threshold_hours        int unsigned        default 0 not null,&lt;br /&gt;
    threshold_date         datetime                      null,&lt;br /&gt;
    threshold_date_locked  tinyint unsigned    default 0 not null,&lt;br /&gt;
    threshold_hours_locked tinyint unsigned    default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_operation&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    content             text         not null,&lt;br /&gt;
    m_component_type_id int          null,&lt;br /&gt;
    order_num           int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_history&lt;br /&gt;
(&lt;br /&gt;
    id                                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                          int unsigned                  null,&lt;br /&gt;
    maintenance_program_id               int unsigned                  null,&lt;br /&gt;
    frame_hours_at_work_start            int                           null,&lt;br /&gt;
    date_work_end                        date                          null,&lt;br /&gt;
    min_overhaul_counter                 int                           null,&lt;br /&gt;
    max_overhaul_counter                 int                           null,&lt;br /&gt;
    min_overhaul_date                    date                          null,&lt;br /&gt;
    max_overhaul_date                    date                          null,&lt;br /&gt;
    min_next_overhaul_counter            int                           null,&lt;br /&gt;
    max_next_overhaul_counter            int                           null,&lt;br /&gt;
    min_next_overhaul_date               date                          null,&lt;br /&gt;
    max_next_overhaul_date               date                          null,&lt;br /&gt;
    first_reference_visit                tinyint unsigned default 0    not null,&lt;br /&gt;
    is_visit                             tinyint unsigned default 0    not null,&lt;br /&gt;
    action_type                          tinyint unsigned              null,&lt;br /&gt;
    previous_line_linked_time_action     int                           null,&lt;br /&gt;
    previous_line_linked_calendar_action int                           null,&lt;br /&gt;
    next_line_linked_time_action         int                           null,&lt;br /&gt;
    next_line_linked_calendar_action     int                           null,&lt;br /&gt;
    time_tolerance                       int                           null,&lt;br /&gt;
    calendar_tolerance                   int                           null,&lt;br /&gt;
    time_periodicity_component           int                           null,&lt;br /&gt;
    calendar_periodicity_component       int                           null,&lt;br /&gt;
    time_periodicity                     int                           null,&lt;br /&gt;
    calendar_periodicity                 int                           null,&lt;br /&gt;
    reference_overhaul_counter           int                           null,&lt;br /&gt;
    reference_overhaul_date              date                          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_program&lt;br /&gt;
(&lt;br /&gt;
    id                                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                           int unsigned                  null,&lt;br /&gt;
    component_type_id                     int unsigned                  null,&lt;br /&gt;
    description                           varchar(255)                  null,&lt;br /&gt;
    time_periodicity                      int                           null,&lt;br /&gt;
    calendar_periodicity                  int                           null,&lt;br /&gt;
    time_first_reference                  int                           null,&lt;br /&gt;
    calendar_first_reference              date                          null,&lt;br /&gt;
    time_tolerance                        int                           null,&lt;br /&gt;
    calendar_tolerance                    int                           null,&lt;br /&gt;
    frame_hours_at_work_start             int                           null,&lt;br /&gt;
    date_work_end                         date                          null,&lt;br /&gt;
    time_elapsed                          int                           null,&lt;br /&gt;
    calendar_elapsed                      int                           null,&lt;br /&gt;
    time_remaining                        int                           null,&lt;br /&gt;
    calendar_remaining                    int                           null,&lt;br /&gt;
    min_next_overhaul_counter             int                           null,&lt;br /&gt;
    max_next_overhaul_counter             int                           null,&lt;br /&gt;
    min_next_overhaul_date                date                          null,&lt;br /&gt;
    max_next_overhaul_date                date                          null,&lt;br /&gt;
    effective_hours_at_work_start         int                           null,&lt;br /&gt;
    theoretical_overhaul_counter          int                           null,&lt;br /&gt;
    intelligent_overhaul_counter          int                           null,&lt;br /&gt;
    intelligent_min_next_overhaul_counter int                           null,&lt;br /&gt;
    intelligent_max_next_overhaul_counter int                           null,&lt;br /&gt;
    effective_date_at_work_end            date                          null,&lt;br /&gt;
    theoretical_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_min_next_overhaul_date    date                          null,&lt;br /&gt;
    intelligent_max_next_overhaul_date    date                          null,&lt;br /&gt;
    overlapping_group_id                  int unsigned                  null,&lt;br /&gt;
    is_visit_rg                           tinyint unsigned default 0    not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_view&lt;br /&gt;
(&lt;br /&gt;
    id                                                int unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    frame_total_time                                  int                    null,&lt;br /&gt;
    frame_time_since_rg                               int                    null,&lt;br /&gt;
    engine_time_since_rg                              int                    null,&lt;br /&gt;
    propeller_time_since_rg                           int                    null,&lt;br /&gt;
    potential_remaining_next_time_action              int                    null,&lt;br /&gt;
    potential_remaining_next_time_visit               int                    null,&lt;br /&gt;
    potential_remaining_next_priority_time_action     int                    null,&lt;br /&gt;
    potential_remaining_next_calendar_action          int                    null,&lt;br /&gt;
    potential_remaining_next_calendar_visit           int                    null,&lt;br /&gt;
    potential_remaining_next_priority_calendar_action int                    null,&lt;br /&gt;
    next_time_action_id                               int unsigned           null,&lt;br /&gt;
    next_time_visit_id                                int unsigned           null,&lt;br /&gt;
    next_priority_time_action_id                      int unsigned           null,&lt;br /&gt;
    next_calendar_action_id                           int unsigned           null,&lt;br /&gt;
    next_calendar_visit_id                            int unsigned           null,&lt;br /&gt;
    next_priority_calendar_action_id                  int unsigned           null,&lt;br /&gt;
    overhaul_counter_action                           int                    null,&lt;br /&gt;
    overhaul_counter_visit                            int                    null,&lt;br /&gt;
    overhaul_date_action                              date                   null,&lt;br /&gt;
    overhaul_date_visit                               date                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table map_logger_monitoring&lt;br /&gt;
(&lt;br /&gt;
    record_id  int unsigned not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    count_data int unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'link between flight and track';&lt;br /&gt;
&lt;br /&gt;
create table map_track&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned                  null,&lt;br /&gt;
    start_data    int unsigned                  null,&lt;br /&gt;
    number        int unsigned                  null,&lt;br /&gt;
    start_time    datetime                      null,&lt;br /&gt;
    latitude_max  double                        null,&lt;br /&gt;
    longitude_max double                        null,&lt;br /&gt;
    latitude_min  double                        null,&lt;br /&gt;
    longitude_min double                        null,&lt;br /&gt;
    visible       tinyint unsigned default 1    not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'tracks split from gdr';&lt;br /&gt;
&lt;br /&gt;
create table nationality&lt;br /&gt;
(&lt;br /&gt;
    code  char(2) default '' not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255)       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table oauth_access_token&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid              varchar(255)    not null,&lt;br /&gt;
    expiry_date_time datetime        not null,&lt;br /&gt;
    scopes           varchar(2048)   not null,&lt;br /&gt;
    oauth_client_id  int unsigned    not null,&lt;br /&gt;
    person_id        int unsigned    null,&lt;br /&gt;
    unique (id),&lt;br /&gt;
    unique (uid)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table oauth_auth_code&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid              varchar(255)    not null,&lt;br /&gt;
    expiry_date_time datetime        not null,&lt;br /&gt;
    redirect_uri     varchar(2048)   not null,&lt;br /&gt;
    scopes           varchar(2048)   not null,&lt;br /&gt;
    oauth_client_id  int unsigned    not null,&lt;br /&gt;
    person_id        int unsigned    not null,&lt;br /&gt;
    unique (id),&lt;br /&gt;
    unique (uid)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table oauth_client&lt;br /&gt;
(&lt;br /&gt;
    id                       int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid                      varchar(255)    not null,&lt;br /&gt;
    hashed_passphrase        varchar(255)    null,&lt;br /&gt;
    name                     text            not null,&lt;br /&gt;
    authorization_grant_type varchar(255)    not null,&lt;br /&gt;
    redirect_uri             varchar(2048)   not null,&lt;br /&gt;
    owner_person_id          int unsigned    not null,&lt;br /&gt;
    auth_cert                text            null,&lt;br /&gt;
    sign_cert                text            null,&lt;br /&gt;
    unique (id),&lt;br /&gt;
    unique (uid)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table oauth_dpop_token&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    jti             varchar(255) not null,&lt;br /&gt;
    expiration_date datetime     not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table oauth_refresh_token&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid                    varchar(255)    not null,&lt;br /&gt;
    expiry_date_time       datetime        not null,&lt;br /&gt;
    oauth_access_token_uid varchar(255)    not null,&lt;br /&gt;
    scopes                 varchar(2048)   not null,&lt;br /&gt;
    oauth_client_id        int unsigned    not null,&lt;br /&gt;
    person_id              int unsigned    not null,&lt;br /&gt;
    dpop_jkt               varchar(128)    null,&lt;br /&gt;
    unique (id),&lt;br /&gt;
    unique (uid)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table parameter&lt;br /&gt;
(&lt;br /&gt;
    code       varchar(255)                  not null,&lt;br /&gt;
    key_id     int unsigned     default 0    not null,&lt;br /&gt;
    enabled    tinyint unsigned default 0    null,&lt;br /&gt;
    int_value  bigint unsigned  default 0    not null,&lt;br /&gt;
    char_value mediumtext                    null,&lt;br /&gt;
    primary key (code, key_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'application parameters';&lt;br /&gt;
&lt;br /&gt;
create table payment_summary_file&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type       varchar(255)            null,&lt;br /&gt;
    content         longblob                null,&lt;br /&gt;
    record_date     datetime                null,&lt;br /&gt;
    total_entry     int unsigned            null,&lt;br /&gt;
    total_amount    decimal(15, 5) unsigned null,&lt;br /&gt;
    payment_type_id int unsigned            null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table payment_type&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                text                          null,&lt;br /&gt;
    text_field_label    text                          null,&lt;br /&gt;
    only_admin          tinyint unsigned default 0    not null,&lt;br /&gt;
    pos_key_id          int unsigned                  null,&lt;br /&gt;
    treasury_account_id int unsigned                  null,&lt;br /&gt;
    person_delivery     tinyint unsigned default 0    null,&lt;br /&gt;
    person_budget_id    int unsigned                  null,&lt;br /&gt;
    treasury_budget_id  int unsigned                  null,&lt;br /&gt;
    minimum_amount      decimal(10, 0)                null,&lt;br /&gt;
    maximum_amount      decimal(10, 0)                null&lt;br /&gt;
)&lt;br /&gt;
    comment 'type of payment description';&lt;br /&gt;
&lt;br /&gt;
create table person&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                                      not null,&lt;br /&gt;
    hash_password          varchar(255)                                      not null,&lt;br /&gt;
    first_name             varchar(255)                                      null,&lt;br /&gt;
    last_name              varchar(255)                                      null,&lt;br /&gt;
    profile                bigint unsigned                                   null,&lt;br /&gt;
    view_type              int unsigned                                      null,&lt;br /&gt;
    view_width             tinyint unsigned    default 12                    not null,&lt;br /&gt;
    view_height            tinyint unsigned    default 30                    not null,&lt;br /&gt;
    email                  varchar(255)                                      null,&lt;br /&gt;
    timezone               varchar(255)                                      null,&lt;br /&gt;
    address                varchar(255)                                      null,&lt;br /&gt;
    zipcode                varchar(255)                                      null,&lt;br /&gt;
    city                   varchar(255)                                      null,&lt;br /&gt;
    state                  varchar(255)                                      null,&lt;br /&gt;
    country                varchar(255)                                      null,&lt;br /&gt;
    home_phone             varchar(255)                                      null,&lt;br /&gt;
    work_phone             varchar(255)                                      null,&lt;br /&gt;
    cell_phone             varchar(255)                                      null,&lt;br /&gt;
    lang                   varchar(255)                                      null,&lt;br /&gt;
    notification           bigint unsigned                                   null,&lt;br /&gt;
    activated              tinyint unsigned    default 1                     null,&lt;br /&gt;
    birthdate              datetime            default '0000-00-00 00:00:00' null,&lt;br /&gt;
    sex                    tinyint unsigned    default 0                     not null,&lt;br /&gt;
    nationality            char(2)                                           null,&lt;br /&gt;
    total_flight_time      int unsigned        default 0                     null,&lt;br /&gt;
    date_total_flight_time datetime                                          null,&lt;br /&gt;
    guid                   varchar(255)                                      null,&lt;br /&gt;
    activity_notification  bigint unsigned                                   null,&lt;br /&gt;
    unique (name)&lt;br /&gt;
)&lt;br /&gt;
    comment 'used for authentication';&lt;br /&gt;
&lt;br /&gt;
create table person_awaiting_activation&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login           varchar(255)        not null,&lt;br /&gt;
    ip              varchar(255)        not null,&lt;br /&gt;
    code            varchar(255)        not null,&lt;br /&gt;
    category        varchar(255)        not null,&lt;br /&gt;
    expiration_date datetime            null,&lt;br /&gt;
    used            tinyint unsigned    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table product&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label               varchar(255)                  not null,&lt;br /&gt;
    unit                varchar(255)                  not null,&lt;br /&gt;
    free_sale           tinyint(1)          default 0 not null,&lt;br /&gt;
    locked              tinyint unsigned    default 0 null,&lt;br /&gt;
    variable_id         int                           null,&lt;br /&gt;
    sale_type           tinyint unsigned              null,&lt;br /&gt;
    is_external_product tinyint(1)                    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile&lt;br /&gt;
(&lt;br /&gt;
    id                bigint unsigned not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)              null,&lt;br /&gt;
    permits           int unsigned              null,&lt;br /&gt;
    permits2          int unsigned    default 0 not null,&lt;br /&gt;
    permits3          int unsigned    default 0 not null,&lt;br /&gt;
    pictogram         int unsigned              null,&lt;br /&gt;
    default_status_id int unsigned              null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_accounting_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id    bigint unsigned not null,&lt;br /&gt;
    accounting_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, accounting_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_extra_field_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned not null,&lt;br /&gt;
    business_field_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_profile_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id          bigint unsigned not null,&lt;br /&gt;
    viewable_profile_id bigint unsigned not null,&lt;br /&gt;
    primary key (profile_id, viewable_profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_required_account_type&lt;br /&gt;
(&lt;br /&gt;
    profile_id      bigint unsigned not null,&lt;br /&gt;
    account_type_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, account_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_place&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned not null,&lt;br /&gt;
    resource_type_id int unsigned    not null,&lt;br /&gt;
    place_num        int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id                bigint unsigned not null,&lt;br /&gt;
    viewable_resource_type_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, viewable_resource_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned           not null,&lt;br /&gt;
    validity_type_id  int unsigned              not null,&lt;br /&gt;
    manage4oneself    int             default 0 not null,&lt;br /&gt;
    certify           int             default 0 not null,&lt;br /&gt;
    optional_contract tinyint(1)      default 0 not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned not null,&lt;br /&gt;
    validity_type_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_return&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    psp_transaction_id int unsigned null,&lt;br /&gt;
    bank_answer        text         null,&lt;br /&gt;
    bank_misc          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    credit_account_id int unsigned           not null,&lt;br /&gt;
    debit_account_id  int unsigned           not null,&lt;br /&gt;
    transaction_date  datetime               not null,&lt;br /&gt;
    amount            float                  not null,&lt;br /&gt;
    description       varchar(255)           null,&lt;br /&gt;
    payment_type_id   int unsigned           not null,&lt;br /&gt;
    state             int unsigned default 0 not null,&lt;br /&gt;
    token             text                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction_account_entry&lt;br /&gt;
(&lt;br /&gt;
    psp_transaction_id    int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (psp_transaction_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table record_changelog&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id      int unsigned not null,&lt;br /&gt;
    record_type    varchar(255) null,&lt;br /&gt;
    person_id      int unsigned null,&lt;br /&gt;
    changelog_date datetime     not null,&lt;br /&gt;
    record_state   text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table regular_presence_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned     null,&lt;br /&gt;
    start_day  tinyint unsigned null,&lt;br /&gt;
    end_day    tinyint unsigned null,&lt;br /&gt;
    start_hour time             null,&lt;br /&gt;
    end_hour   time             null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name             varchar(255)                  null,&lt;br /&gt;
    resource_type_id int unsigned                  null,&lt;br /&gt;
    comments         varchar(255)                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    activated        tinyint unsigned    default 1 not null,&lt;br /&gt;
    bookable         int unsigned        default 1 null,&lt;br /&gt;
    physical         int unsigned        default 1 null,&lt;br /&gt;
    color            int unsigned                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_exceptional_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_date  datetime            null,&lt;br /&gt;
    end_date    datetime            null,&lt;br /&gt;
    presence    tinyint unsigned    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_regular_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_day   tinyint unsigned    null,&lt;br /&gt;
    end_day     tinyint unsigned    null,&lt;br /&gt;
    start_hour  time                null,&lt;br /&gt;
    end_hour    time                null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_type&lt;br /&gt;
(&lt;br /&gt;
    id                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                 varchar(255)                   null,&lt;br /&gt;
    category             int unsigned                   null,&lt;br /&gt;
    seats_available      int                 default -1 null,&lt;br /&gt;
    comments             varchar(255)                   null,&lt;br /&gt;
    activated            tinyint unsigned    default 1  not null,&lt;br /&gt;
    max_booking_duration int                 default -1 null,&lt;br /&gt;
    pictogram            int unsigned                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_type_place_tag&lt;br /&gt;
(&lt;br /&gt;
    resource_type_id int unsigned        not null,&lt;br /&gt;
    place_num        tinyint unsigned    not null,&lt;br /&gt;
    place_tag        varchar(255)        null,&lt;br /&gt;
    place_quantity   int      default -1 null,&lt;br /&gt;
    primary key (resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_stock&lt;br /&gt;
(&lt;br /&gt;
    id                           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    product_id                   int unsigned    not null,&lt;br /&gt;
    stock_id                     int unsigned    not null,&lt;br /&gt;
    stock_variation_qty_per_sale float default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_validity_type&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned not null,&lt;br /&gt;
    new_formula      varchar(255) null,&lt;br /&gt;
    update_formula   varchar(255) null,&lt;br /&gt;
    product_id       int unsigned not null,&lt;br /&gt;
    unique (validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_product&lt;br /&gt;
    on sale_2_validity_type (product_id);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                      int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label                   varchar(255)                  null,&lt;br /&gt;
    price_formula           text                          null,&lt;br /&gt;
    debit_account_id        int unsigned                  null,&lt;br /&gt;
    credit_account_id       int unsigned                  null,&lt;br /&gt;
    debit_account_type      tinyint unsigned    default 0 null,&lt;br /&gt;
    credit_account_type     tinyint unsigned    default 0 null,&lt;br /&gt;
    credit_budget_id        int unsigned                  null,&lt;br /&gt;
    debit_budget_id         int unsigned                  null,&lt;br /&gt;
    order_num               int                           null,&lt;br /&gt;
    variable_formula        varchar(255)                  null,&lt;br /&gt;
    debit_bill_num          int unsigned                  null,&lt;br /&gt;
    credit_bill_num         int unsigned                  null,&lt;br /&gt;
    qty_formula             text                          null,&lt;br /&gt;
    unit_price_formula      text                          null,&lt;br /&gt;
    added_product_id        int unsigned                  null,&lt;br /&gt;
    is_for_external_product tinyint(1)          default 1 null,&lt;br /&gt;
    is_for_internal_product tinyint(1)          default 1 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_product&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned default 0 not null,&lt;br /&gt;
    product_id      int unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, product_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_profile&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned              not null,&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_trigger&lt;br /&gt;
(&lt;br /&gt;
    id             int                 default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name           varchar(255)                  null,&lt;br /&gt;
    event          varchar(255)                  null,&lt;br /&gt;
    locked         tinyint unsigned    default 0 not null,&lt;br /&gt;
    query          text                          null,&lt;br /&gt;
    validate_entry tinyint(1)          default 0 null,&lt;br /&gt;
    group_sales    tinyint(1)          default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table spreadsheet_parameter&lt;br /&gt;
(&lt;br /&gt;
    file_number       int          not null,&lt;br /&gt;
    spreadsheet_key   varchar(255) not null,&lt;br /&gt;
    spreadsheet_value varchar(255) not null,&lt;br /&gt;
    file_name         varchar(255) null,&lt;br /&gt;
    google_url        varchar(255) not null,&lt;br /&gt;
    file_type         int unsigned null,&lt;br /&gt;
    primary key (file_number, spreadsheet_key, spreadsheet_value)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table statistic&lt;br /&gt;
(&lt;br /&gt;
    name       varchar(255)                not null,&lt;br /&gt;
    of_version tinyint        default 0    not null,&lt;br /&gt;
    value      decimal(15, 2) default 0.00 null,&lt;br /&gt;
    primary key (name, of_version)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table status&lt;br /&gt;
(&lt;br /&gt;
    id                      int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    abbrev                  varchar(255) null,&lt;br /&gt;
    name                    varchar(255) null,&lt;br /&gt;
    pictogram               int unsigned null,&lt;br /&gt;
    carnet_aero_function_id int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of functions for pilot';&lt;br /&gt;
&lt;br /&gt;
create table stock&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label         varchar(255) not null,&lt;br /&gt;
    stock_type_id int unsigned not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_level&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id   int unsigned    not null,&lt;br /&gt;
    qty        float default 0 not null,&lt;br /&gt;
    stock_date datetime        null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_type&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null,&lt;br /&gt;
    unit  varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id       int unsigned               not null,&lt;br /&gt;
    qty            float             default 0 not null,&lt;br /&gt;
    variation_date datetime                   null,&lt;br /&gt;
    validated      tinyint unsigned  default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation_account_entry&lt;br /&gt;
(&lt;br /&gt;
    product_id            int unsigned default 0 not null,&lt;br /&gt;
    stock_variation_id    int unsigned           not null,&lt;br /&gt;
    account_entry_flow_id int unsigned           not null,&lt;br /&gt;
    person_id             int unsigned           not null,&lt;br /&gt;
    primary key (product_id, stock_variation_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on stock_variation_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table structure&lt;br /&gt;
(&lt;br /&gt;
    id                            int              default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                          varchar(255)               null,&lt;br /&gt;
    info_cell                     text                       null,&lt;br /&gt;
    logo                          longblob                   null,&lt;br /&gt;
    logo_name                     varchar(255)               null,&lt;br /&gt;
    logo_ext                      varchar(25)                null,&lt;br /&gt;
    logo_size                     int                        null,&lt;br /&gt;
    first_hour_displayed          time                       null,&lt;br /&gt;
    last_hour_displayed           time                       null,&lt;br /&gt;
    usual_profiles                bigint unsigned            null,&lt;br /&gt;
    icao                          varchar(6)                 null,&lt;br /&gt;
    default_slot_range            int unsigned               null,&lt;br /&gt;
    min_slot_range                tinyint unsigned           null,&lt;br /&gt;
    twilight_range                tinyint unsigned           null,&lt;br /&gt;
    mailing_list_name             varchar(255)               null,&lt;br /&gt;
    mailing_list_type             varchar(255)               null,&lt;br /&gt;
    structure_site_url            varchar(255)               null,&lt;br /&gt;
    default_timezone              varchar(255)               not null,&lt;br /&gt;
    lang                          varchar(255)               not null,&lt;br /&gt;
    admin_num                     int unsigned               not null,&lt;br /&gt;
    default_view_type             int unsigned               null,&lt;br /&gt;
    address                       varchar(255)               null,&lt;br /&gt;
    zipcode                       varchar(255)               null,&lt;br /&gt;
    city                          varchar(255)               null,&lt;br /&gt;
    state                         varchar(255)               null,&lt;br /&gt;
    country                       varchar(255)               null,&lt;br /&gt;
    phone                         varchar(255)               null,&lt;br /&gt;
    fax                           varchar(255)               null,&lt;br /&gt;
    email                         varchar(255)               null,&lt;br /&gt;
    default_notification          int unsigned               null,&lt;br /&gt;
    welcome_cell                  text                       null,&lt;br /&gt;
    business                      text                       null,&lt;br /&gt;
    default_activity_notification bigint unsigned            null,&lt;br /&gt;
    siren                         int                        null&lt;br /&gt;
)&lt;br /&gt;
    comment 'description of all airclubs';&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_bill_type_id int unsigned         not null,&lt;br /&gt;
    bill_date             datetime             null,&lt;br /&gt;
    description           varchar(255)         null,&lt;br /&gt;
    ordinal               int unsigned         not null,&lt;br /&gt;
    validated             tinyint(1) default 0 null,&lt;br /&gt;
    supplier_bill_file_id int                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_account_entry&lt;br /&gt;
(&lt;br /&gt;
    supplier_bill_id      int unsigned not null,&lt;br /&gt;
    account_entry_flow_id int unsigned not null,&lt;br /&gt;
    primary key (supplier_bill_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on supplier_bill_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_email_parsed&lt;br /&gt;
(&lt;br /&gt;
    id                    int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid                   int          null,&lt;br /&gt;
    email_address         varchar(255) null,&lt;br /&gt;
    supplier_bill_file_id int unsigned not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null,&lt;br /&gt;
    name      varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_type&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_account_id int unsigned not null,&lt;br /&gt;
    name                varchar(255) null,&lt;br /&gt;
    account_id          int unsigned not null,&lt;br /&gt;
    vat_account_id      int unsigned null,&lt;br /&gt;
    supplier_budget_id  int unsigned null,&lt;br /&gt;
    account_budget_id   int unsigned null,&lt;br /&gt;
    vat_budget_id       int unsigned null,&lt;br /&gt;
    rule                text         null,&lt;br /&gt;
    sender_email        varchar(255) null,&lt;br /&gt;
    subject             varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table table_trigger&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    monitored_table varchar(255) not null,&lt;br /&gt;
    trigger_formula varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table tank&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_type_id   int unsigned                 not null,&lt;br /&gt;
    tank_type_id       int unsigned                 not null,&lt;br /&gt;
    unit_id            int unsigned                 not null,&lt;br /&gt;
    label              varchar(255)                 not null,&lt;br /&gt;
    max_quantity       decimal(15, 2) default -1.00 not null,&lt;br /&gt;
    unlimited_quantity int unsigned   default 1     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table track_record&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    in_progress            tinyint unsigned                       null,&lt;br /&gt;
    start_date             datetime default '0000-00-00 00:00:00' null,&lt;br /&gt;
    activated              tinyint unsigned                       null,&lt;br /&gt;
    datechsys_track_id     int unsigned                           null,&lt;br /&gt;
    resource_cat           int unsigned                           not null,&lt;br /&gt;
    resource_id            int unsigned                           not null,&lt;br /&gt;
    additional_information int unsigned                           null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table track_record_data&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned        not null,&lt;br /&gt;
    record_date   datetime            null,&lt;br /&gt;
    longitude     double              null,&lt;br /&gt;
    latitude      double              null,&lt;br /&gt;
    altitude      int                 null,&lt;br /&gt;
    speed         double              null,&lt;br /&gt;
    track         int unsigned        null,&lt;br /&gt;
    acc_x         int                 null,&lt;br /&gt;
    acc_y         int                 null,&lt;br /&gt;
    acc_z         int                 null,&lt;br /&gt;
    pressure      int unsigned        null,&lt;br /&gt;
    battery_level int unsigned        null,&lt;br /&gt;
    gps_fix       tinyint unsigned    null,&lt;br /&gt;
    receive_date  datetime            null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_record_id&lt;br /&gt;
    on track_record_data (record_id);&lt;br /&gt;
&lt;br /&gt;
create table track_resource&lt;br /&gt;
(&lt;br /&gt;
    id   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training&lt;br /&gt;
(&lt;br /&gt;
    id   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_activity&lt;br /&gt;
(&lt;br /&gt;
    activity_id            int unsigned             not null,&lt;br /&gt;
    training_item_label_id int unsigned   default 0 not null,&lt;br /&gt;
    training_id            int unsigned   default 1 not null,&lt;br /&gt;
    level_reached          int unsigned             null,&lt;br /&gt;
    comment                varchar(255)             null,&lt;br /&gt;
    validated              tinyint(1)     default 0 not null,&lt;br /&gt;
    primary key (activity_id, training_item_label_id, training_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_activity_next_item&lt;br /&gt;
(&lt;br /&gt;
    student_id             int unsigned              not null,&lt;br /&gt;
    training_id            int unsigned              not null,&lt;br /&gt;
    training_item_label_id int unsigned              not null,&lt;br /&gt;
    reporting_offset       tinyint unsigned default 0 not null,&lt;br /&gt;
    item_preselected       tinyint unsigned default 0 not null,&lt;br /&gt;
    primary key (student_id, training_id, training_item_label_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_activity_person&lt;br /&gt;
(&lt;br /&gt;
    activity_id                int unsigned           not null,&lt;br /&gt;
    person_id                  int unsigned           not null,&lt;br /&gt;
    num                        int unsigned default 0 not null,&lt;br /&gt;
    training_checking_date     datetime               null,&lt;br /&gt;
    training_checking_sentence varchar(255)           null,&lt;br /&gt;
    primary key (activity_id, person_id, num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_item&lt;br /&gt;
(&lt;br /&gt;
    training_id            int unsigned not null,&lt;br /&gt;
    training_item_label_id int unsigned not null,&lt;br /&gt;
    number_of_sessions     int          not null,&lt;br /&gt;
    order_num              int          not null,&lt;br /&gt;
    custom_label           varchar(255) null,&lt;br /&gt;
    primary key (training_id, training_item_label_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_phase&lt;br /&gt;
(&lt;br /&gt;
    training_item_order_num int unsigned not null,&lt;br /&gt;
    training_id             int unsigned not null,&lt;br /&gt;
    name                    varchar(255) null,&lt;br /&gt;
    primary key (training_item_order_num, training_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_program&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    training_id int unsigned null,&lt;br /&gt;
    name        varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table training_program_activity&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    training_program_id int unsigned    not null,&lt;br /&gt;
    activity_type_id    bigint unsigned not null,&lt;br /&gt;
    duration            int unsigned    null,&lt;br /&gt;
    breaktime           int unsigned    null,&lt;br /&gt;
    order_num           int unsigned    not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    id1 bigint unsigned not null,&lt;br /&gt;
    id2 bigint unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of sales';&lt;br /&gt;
&lt;br /&gt;
create table user_reauth_token&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    user_id            int unsigned         not null,&lt;br /&gt;
    verification_token varchar(255)         not null,&lt;br /&gt;
    ip_address         varchar(45)          not null,&lt;br /&gt;
    expiration_date    datetime             not null,&lt;br /&gt;
    activated          tinyint(1) default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id           int unsigned         not null,&lt;br /&gt;
    validity_type_id    int unsigned         not null,&lt;br /&gt;
    registration_date   datetime(3)          null,&lt;br /&gt;
    expire_date         date                 null,&lt;br /&gt;
    no_alert            tinyint(1) default 0 not null,&lt;br /&gt;
    ident_value         varchar(255)         null,&lt;br /&gt;
    grant_date          date                 null,&lt;br /&gt;
    checker_person_id   int                  null,&lt;br /&gt;
    checking_date       date                 not null,&lt;br /&gt;
    checking_sentence   varchar(255)         not null,&lt;br /&gt;
    is_current_validity tinyint(1) default 0 not null,&lt;br /&gt;
    action_ip_address   varchar(255)         null,&lt;br /&gt;
    action_login        varchar(255)         null,&lt;br /&gt;
    unique (person_id, validity_type_id, registration_date)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_type&lt;br /&gt;
(&lt;br /&gt;
    id                       int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                     varchar(255)                   not null,&lt;br /&gt;
    time_limitation          tinyint(1)          default 0  not null,&lt;br /&gt;
    ident_value_enable       tinyint(1)          default 0  not null,&lt;br /&gt;
    grant_date_enable        tinyint(1)          default 0  not null,&lt;br /&gt;
    mandatory                tinyint(1)          default 0  not null,&lt;br /&gt;
    experience_formula       text                           null,&lt;br /&gt;
    alert_on_login           int                 default -2 null,&lt;br /&gt;
    mandatory_access_control tinyint unsigned    default 0  null,&lt;br /&gt;
    first_reminder_alert     int unsigned        default 0  null,&lt;br /&gt;
    reminder_frequency_alert int unsigned        default 0  null,&lt;br /&gt;
    associate_attachment     tinyint unsigned    default 0  not null,&lt;br /&gt;
    certification_process    tinyint(1)          default 0  not null,&lt;br /&gt;
    is_contract              tinyint(1)          default 0  not null,&lt;br /&gt;
    contract_filename        varchar(255)                   not null,&lt;br /&gt;
    contract_file            mediumblob                     not null,&lt;br /&gt;
    contract_file_extension  varchar(4)                     not null,&lt;br /&gt;
    is_OF_contract           tinyint(1)          default 0  not null,&lt;br /&gt;
    activated                tinyint unsigned    default 1  not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'qualifications list';&lt;br /&gt;
&lt;br /&gt;
create table validity_type_page&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned        not null,&lt;br /&gt;
    page_index       int unsigned        not null,&lt;br /&gt;
    label            varchar(40)         not null,&lt;br /&gt;
    is_mandatory     tinyint unsigned    not null,&lt;br /&gt;
    unique (validity_type_id, page_index)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_page&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_page_id int unsigned not null,&lt;br /&gt;
    filename              varchar(255) not null,&lt;br /&gt;
    file                  mediumblob   not null,&lt;br /&gt;
    file_extension        varchar(4)   not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_2_validity_page&lt;br /&gt;
(&lt;br /&gt;
    validity_id      int unsigned not null,&lt;br /&gt;
    validity_page_id int unsigned not null,&lt;br /&gt;
    primary key (validity_id, validity_page_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable&lt;br /&gt;
(&lt;br /&gt;
    id         int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable   varchar(255) not null,&lt;br /&gt;
    label      varchar(255) not null,&lt;br /&gt;
    category   tinyint(1)   null,&lt;br /&gt;
    value_type varchar(255) null,&lt;br /&gt;
    order_num  int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable_value&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable_id  int            not null,&lt;br /&gt;
    assign_value decimal(15, 2) not null,&lt;br /&gt;
    start_date   datetime       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    channel_id       int unsigned not null,&lt;br /&gt;
    publication_date datetime     not null,&lt;br /&gt;
    title            varchar(255) null,&lt;br /&gt;
    content          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed_channel&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_pilot_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`person`.`id` AS `person_id`&lt;br /&gt;
from `of40_aeroclublys`.`person`&lt;br /&gt;
where ((`of40_aeroclublys`.`person`.`activated` = 1) and&lt;br /&gt;
       ((`of40_aeroclublys`.`person`.`profile` &amp;amp; (select `of40_aeroclublys`.`parameter`.`int_value`&lt;br /&gt;
                                                  from `of40_aeroclublys`.`parameter`&lt;br /&gt;
                                                  where (`of40_aeroclublys`.`parameter`.`code` =&lt;br /&gt;
                                                         'EXTERNAL_BOOKING_PILOT_PROFILE'))) &amp;gt; 0) and&lt;br /&gt;
       `of40_aeroclublys`.`person`.`id` in (select `of40_aeroclublys`.`regular_presence_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`regular_presence_inst_date`&lt;br /&gt;
                                            union&lt;br /&gt;
                                            select `of40_aeroclublys`.`exceptionnal_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`exceptionnal_inst_date`&lt;br /&gt;
                                            where ((`of40_aeroclublys`.`exceptionnal_inst_date`.`end_date` &amp;gt; now()) and&lt;br /&gt;
                                                   (`of40_aeroclublys`.`exceptionnal_inst_date`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_resource_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`resource`.`id` AS `resource_id`&lt;br /&gt;
from ((`of40_aeroclublys`.`resource` join `of40_aeroclublys`.`business_field_content` on ((&lt;br /&gt;
        `of40_aeroclublys`.`business_field_content`.`category_id` = `of40_aeroclublys`.`resource`.`id`)))&lt;br /&gt;
         join `of40_aeroclublys`.`business_field` on ((`of40_aeroclublys`.`business_field`.`id` =&lt;br /&gt;
                                                       `of40_aeroclublys`.`business_field_content`.`business_field_id`)))&lt;br /&gt;
where ((`of40_aeroclublys`.`resource`.`activated` = 1) and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field`.`variable` = 'canResourcePerformFirstFlights') and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field_content`.`content` = '1') and&lt;br /&gt;
       (`of40_aeroclublys`.`resource`.`bookable` = 1) and ((select count(0)&lt;br /&gt;
                                                            from `of40_aeroclublys`.`resource_type_place_tag` `seat`&lt;br /&gt;
                                                            where (`seat`.`resource_type_id` =&lt;br /&gt;
                                                                   `of40_aeroclublys`.`resource`.`resource_type_id`)) &amp;gt;=&lt;br /&gt;
                                                           2) and&lt;br /&gt;
       `of40_aeroclublys`.`resource`.`id` in (select `of40_aeroclublys`.`resource_regular_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_regular_availability`&lt;br /&gt;
                                              union&lt;br /&gt;
                                              select `of40_aeroclublys`.`resource_exceptional_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_exceptional_availability`&lt;br /&gt;
                                              where ((`of40_aeroclublys`.`resource_exceptional_availability`.`end_date` &amp;gt;&lt;br /&gt;
                                                      now()) and&lt;br /&gt;
                                                     (`of40_aeroclublys`.`resource_exceptional_availability`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function distanceBetween2Point(latitude1 double, longitude1 double, latitude2 double,&lt;br /&gt;
                                                            longitude2 double) returns double&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE dlongitude DOUBLE;&lt;br /&gt;
    DECLARE dlatitude DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET rlongitude1 = RADIANS(longitude1);&lt;br /&gt;
    SET rlatitude1 = RADIANS(latitude1);&lt;br /&gt;
    SET rlongitude2 = RADIANS(longitude2);&lt;br /&gt;
    SET rlatitude2 = RADIANS(latitude2);&lt;br /&gt;
    SET dlongitude = (rlongitude2 - rlongitude1) / 2;&lt;br /&gt;
    SET dlatitude = (rlatitude2 - rlatitude1) / 2;&lt;br /&gt;
    SET a = SIN(dlatitude) * SIN(dlatitude) + COS(rlatitude1) * COS(rlatitude2) * SIN(dlongitude) * SIN(dlongitude);&lt;br /&gt;
    RETURN (6378137 * 2 * ATAN2(SQRT(a), SQRT(1 - a)));&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function formatDecimal(string varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE replacedString VARCHAR(255);&lt;br /&gt;
    SET replacedString = string;&lt;br /&gt;
    SET @decimalSeparator = (SELECT char_value FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(replacedString &amp;lt;&amp;gt; '0.00' AND replacedString &amp;lt;&amp;gt; '0', TRIM(TRAILING '0' FROM replacedString),&lt;br /&gt;
              replacedString)&lt;br /&gt;
    INTO replacedString;&lt;br /&gt;
    SELECT TRIM(TRAILING '.' FROM replacedString) INTO replacedString;&lt;br /&gt;
    SELECT REPLACE(replacedString, '.', IFNULL(@decimalSeparator, '.')) INTO replacedString;&lt;br /&gt;
    RETURN replacedString;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function isBalancedAccountEntryFlow(flowId int) returns int&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE isBalanced INT;&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(SUM(debit) &amp;lt;&amp;gt; SUM(credit), 0, 1)&lt;br /&gt;
    into isBalanced&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE flow_id = flowId&lt;br /&gt;
    GROUP BY flow_id;&lt;br /&gt;
&lt;br /&gt;
    RETURN isBalanced;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function nearestPoint(latRef double, longRef double, distanceMax int) returns varchar(6)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
    DECLARE icao_name VARCHAR(6);&lt;br /&gt;
    DECLARE lenght DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET a = 2 * 6378137 * pi() * distanceMax / (1852 * 60 * 360);&lt;br /&gt;
    SET rlongitude1 = longRef + a / cos(latRef);&lt;br /&gt;
    SET rlongitude2 = longRef - a / cos(latRef);&lt;br /&gt;
    SET rlatitude1 = latRef + a;&lt;br /&gt;
    SET rlatitude2 = latRef - a;&lt;br /&gt;
&lt;br /&gt;
    SELECT loc1.icao_name,&lt;br /&gt;
           distanceBetween2Point(&lt;br /&gt;
                   (SELECT loc2.latitude FROM location AS loc2 WHERE loc2.icao_name = loc1.icao_name),&lt;br /&gt;
                   (SELECT loc3.longitude FROM location AS loc3 WHERE loc3.icao_name = loc1.icao_name),&lt;br /&gt;
                   latRef,&lt;br /&gt;
                   longRef) AS distance&lt;br /&gt;
    FROM location AS loc1&lt;br /&gt;
    WHERE IF(rlongitude2 &amp;lt; rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude2 AND rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude1 AND rlongitude2)&lt;br /&gt;
      AND IF(rlatitude2 &amp;lt; rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude2 AND rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude1 AND rlatitude2)&lt;br /&gt;
    HAVING distance &amp;lt; distanceMax&lt;br /&gt;
    ORDER BY distance&lt;br /&gt;
    LIMIT 1&lt;br /&gt;
    INTO icao_name, lenght;&lt;br /&gt;
&lt;br /&gt;
    RETURN icao_name;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursHundredths(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255);&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    DECLARE decimalSeparator VARCHAR(1);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
    SET decimalSeparator =&lt;br /&gt;
            (SELECT IFNULL(char_value, '.') FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, decimalSeparator, LPAD(FLOOR(remainingTime / 6), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursMinute(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255); # We separate hours computation from roundHours in order to keep the minus sign if hours is 0 but sexacentimal negative&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, ':', LPAD(FLOOR(remainingTime / 10), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function stripChars(word varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE stripWord VARCHAR(255);&lt;br /&gt;
    SET stripWord = word;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[-]', REPLACE(stripWord, '-', ''), stripWord) INTO stripWord;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[ ]', REPLACE(stripWord, ' ', ''), stripWord) INTO stripWord;&lt;br /&gt;
    RETURN stripWord;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryCredit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalCredit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryDebit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit&lt;br /&gt;
    INTO totalDebit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalDebit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function sumValidatedAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME)&lt;br /&gt;
      AND validated = 1;&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost procedure addGapToDate(in gap int)&lt;br /&gt;
    modifies sql data&lt;br /&gt;
BEGIN&lt;br /&gt;
    &lt;br /&gt;
    DECLARE done TINYINT DEFAULT 0;&lt;br /&gt;
    DECLARE tmpTableName VARCHAR(255);&lt;br /&gt;
    DECLARE tmpColumnName VARCHAR(255);&lt;br /&gt;
    &lt;br /&gt;
    DECLARE cursor1 CURSOR FOR&lt;br /&gt;
        SELECT TABLE_NAME, COLUMN_NAME&lt;br /&gt;
        FROM information_schema.COLUMNS&lt;br /&gt;
        WHERE TABLE_SCHEMA = ( SELECT DATABASE() )&lt;br /&gt;
          AND DATA_TYPE IN ('date', 'datetime');&lt;br /&gt;
    &lt;br /&gt;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;&lt;br /&gt;
&lt;br /&gt;
    OPEN cursor1;&lt;br /&gt;
    REPEAT&lt;br /&gt;
        FETCH cursor1 INTO tmpTableName, tmpColumnName;&lt;br /&gt;
        IF NOT done THEN&lt;br /&gt;
            BEGIN&lt;br /&gt;
                SET @dynamicQuery = CONCAT('UPDATE ', tmpTableName, ' SET ', tmpColumnName, '= DATE_ADD(', tmpColumnName, ', INTERVAL ', gap, ' DAY)');&lt;br /&gt;
                PREPARE pQuery FROM @dynamicQuery;&lt;br /&gt;
                EXECUTE pQuery;&lt;br /&gt;
                DEALLOCATE PREPARE pQuery;&lt;br /&gt;
            END;&lt;br /&gt;
        END IF;&lt;br /&gt;
    UNTIL done END REPEAT;&lt;br /&gt;
    CLOSE cursor1;&lt;br /&gt;
&lt;br /&gt;
    TRUNCATE TABLE customer_bill_file;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
==Table booking==&lt;br /&gt;
&lt;br /&gt;
Le contenu du champ ''aircraft_id'' de la table ''booking'' peut être nul. Dans ce cas, c'est une ancienne réservation effectuée sur une ressource non-existante ou qui n'existe plus; aussi nommé réservation orpheline.&lt;br /&gt;
&lt;br /&gt;
==Table flight==&lt;br /&gt;
&lt;br /&gt;
*airborne :&lt;br /&gt;
**0: Pas en l'air ou fermeture de vol : Le pilote a terminé le vol.&lt;br /&gt;
**1: En l'air ou ouverture de vol : Le pilote remplit le vol avant de voler.&lt;br /&gt;
&lt;br /&gt;
==Champs cachés==&lt;br /&gt;
Les champs suivants ne peuvent être exportés et ne doivent pas être inclus dans une requête SELECT. De plus, un &amp;quot;SELECT *&amp;quot; est interdit quand une des tables contient un champ caché :&lt;br /&gt;
*Table journal : Tous les champs&lt;br /&gt;
*Table log : Tous les champs&lt;br /&gt;
*Table parameter : Tous les champs&lt;br /&gt;
*Table person :&lt;br /&gt;
**hash_password&lt;br /&gt;
*Table structure :&lt;br /&gt;
**address&lt;br /&gt;
**admin_num&lt;br /&gt;
**city&lt;br /&gt;
**country&lt;br /&gt;
**default_notification&lt;br /&gt;
**default_slot_range&lt;br /&gt;
**default_timezone&lt;br /&gt;
**default_view_type&lt;br /&gt;
**email&lt;br /&gt;
**fax&lt;br /&gt;
**first_hour_displayed&lt;br /&gt;
**info_cell&lt;br /&gt;
**lang&lt;br /&gt;
**last_hour_displayed&lt;br /&gt;
**logo&lt;br /&gt;
**logo_name&lt;br /&gt;
**logo_ext&lt;br /&gt;
**logo_size&lt;br /&gt;
**mail_from_address&lt;br /&gt;
**mailing_list_name&lt;br /&gt;
**mailing_list_type&lt;br /&gt;
**min_slot_range&lt;br /&gt;
**name&lt;br /&gt;
**phone&lt;br /&gt;
**state&lt;br /&gt;
**twilight_range&lt;br /&gt;
**usual_profiles&lt;br /&gt;
**welcome_cell&lt;br /&gt;
**zipcode&lt;br /&gt;
*Table oauth_client : Tous les champs&lt;br /&gt;
*Table oauth_access_token : Tous les champs&lt;br /&gt;
*Table oauth_auth_code : Tous les champs&lt;br /&gt;
*Table oauth_refresh_token : Tous les champs&lt;br /&gt;
&lt;br /&gt;
Exemple de requêtes non autorisées :&lt;br /&gt;
&amp;lt;sql&amp;gt;SELECT * FROM structure;&lt;br /&gt;
&lt;br /&gt;
SELECT hash_password FROM person;&lt;br /&gt;
&lt;br /&gt;
SELECT person.id, validity.*&lt;br /&gt;
FROM person&lt;br /&gt;
LEFT JOIN validity ON (person.id=validity.person_id);&amp;lt;/sql&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14402</id>
		<title>Structure de la base de données</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14402"/>
		<updated>2026-04-15T13:33:40Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Schéma de la structure de la base de données=&lt;br /&gt;
*[[Media:OpenFlyers_database_schema.png|Lien vers schéma fichier .png]]&lt;br /&gt;
&lt;br /&gt;
=Structure=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create table account&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    creation_date    date                          null,&lt;br /&gt;
    name             text                          null,&lt;br /&gt;
    export_account   varchar(255)                  null,&lt;br /&gt;
    activated        tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    category         tinyint(1) unsigned default 0 null,&lt;br /&gt;
    account_type     tinyint(1) unsigned default 0 null,&lt;br /&gt;
    owner_id         int unsigned        default 0 not null,&lt;br /&gt;
    payment_allowed  tinyint(1)          default 0 null,&lt;br /&gt;
    budget_id        int unsigned                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    accounting_id    int unsigned                  null,&lt;br /&gt;
    deactivated_date datetime                      null,&lt;br /&gt;
    group_sales      tinyint(1)          default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of account';&lt;br /&gt;
&lt;br /&gt;
create index idx_owner_id&lt;br /&gt;
    on account (owner_id);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `account_entry` (&lt;br /&gt;
  `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `flow_id` int(11) DEFAULT NULL,&lt;br /&gt;
  `account_date` datetime DEFAULT NULL,&lt;br /&gt;
  `account_id` int(11) DEFAULT NULL,&lt;br /&gt;
  `credit` decimal(15,5) DEFAULT '0.00000',&lt;br /&gt;
  `debit` decimal(15,5) DEFAULT '0.00000',&lt;br /&gt;
  `payment_type` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `payment_description` text,&lt;br /&gt;
  `person_delivery_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `comments` text,&lt;br /&gt;
  `validated` int(1) DEFAULT '0',&lt;br /&gt;
  `exported` int(1) DEFAULT '0',&lt;br /&gt;
  `registration_date` datetime DEFAULT NULL,&lt;br /&gt;
  `budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `product_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `signature` varchar(56) DEFAULT NULL,&lt;br /&gt;
  `signature_date` bigint(13) unsigned DEFAULT NULL,&lt;br /&gt;
  `lettering` int(11) DEFAULT NULL,&lt;br /&gt;
  `lettering_date` datetime DEFAULT NULL,&lt;br /&gt;
  `flow_reversal_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `transaction_id` text,&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  KEY `idx_flow_id` (`flow_id`),&lt;br /&gt;
  KEY `idx_account_date` (`account_date`),&lt;br /&gt;
  KEY `idx_signature_date` (`signature_date`),&lt;br /&gt;
  KEY `flow_reversal_id_idx` (`flow_reversal_id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_link&lt;br /&gt;
(&lt;br /&gt;
    account_id        int unsigned default 0 not null,&lt;br /&gt;
    linked_account_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (account_id, linked_account_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                  null,&lt;br /&gt;
    category               tinyint(1) unsigned default 0 null,&lt;br /&gt;
    activated              tinyint(1)          default 1 null,&lt;br /&gt;
    order_num              int                           null,&lt;br /&gt;
    accounting_id          int unsigned                  null,&lt;br /&gt;
    export_account_pattern varchar(255)                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type_profile&lt;br /&gt;
(&lt;br /&gt;
    account_type_id int unsigned    default 0 not null,&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (account_type_id, profile_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Linked account type and profile';&lt;br /&gt;
&lt;br /&gt;
create table accounting&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)           null,&lt;br /&gt;
    unit_name         varchar(255)           null,&lt;br /&gt;
    symbol            varchar(255)           null,&lt;br /&gt;
    format            tinyint(1)             null,&lt;br /&gt;
    decimal_precision int unsigned default 2 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table accounting_profile&lt;br /&gt;
(&lt;br /&gt;
    accounting_id int unsigned    default 0 not null,&lt;br /&gt;
    profile_id    bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (accounting_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table activity_type&lt;br /&gt;
(&lt;br /&gt;
    id        bigint unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name      varchar(255)              null,&lt;br /&gt;
    order_num int                       null,&lt;br /&gt;
    activated tinyint(1)      default 1 not null,&lt;br /&gt;
    color     int unsigned              null,&lt;br /&gt;
    training  tinyint(1)      default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned     default 0     not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    ref_date        datetime                       null,&lt;br /&gt;
    ref_hours       int                            null,&lt;br /&gt;
    inspection_date datetime                       null,&lt;br /&gt;
    inspection_time int                            null,&lt;br /&gt;
    tolerance_time  int(11) unsigned default 6000  null,&lt;br /&gt;
    last_counter    int                            null,&lt;br /&gt;
    interval_visit  int(11) unsigned default 30000 null,&lt;br /&gt;
    time_alert1     int              default 6000  null,&lt;br /&gt;
    time_alert2     int              default 0     null,&lt;br /&gt;
    time_alert3     int              default -3000 null,&lt;br /&gt;
    day_alert1      smallint(3)      default 15    null,&lt;br /&gt;
    day_alert2      smallint(3)      default 0     null,&lt;br /&gt;
    day_alert3      smallint(3)      default -8    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table aircraft_maintenance_alert&lt;br /&gt;
(&lt;br /&gt;
    id             int(10)    unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_id    int(10)    unsigned           not null,&lt;br /&gt;
    alert_category tinyint(1) unsigned           not null,&lt;br /&gt;
    alert_level    tinyint(1) unsigned           not null,&lt;br /&gt;
    is_enabled     tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    is_sent        tinyint(1) unsigned default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    id                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_time_formula  varchar(255)        default '%DURATION' null,&lt;br /&gt;
    counter_state        tinyint(2)          default -1          not null,&lt;br /&gt;
    tolerance            int                 default 0           null,&lt;br /&gt;
    autonomy             int                 default 5990        null,&lt;br /&gt;
    true_air_speed       int unsigned        default 0           not null,&lt;br /&gt;
    digit_counter_number tinyint(1) unsigned default 4           not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Types of aircraft';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_allowed_status&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned null,&lt;br /&gt;
    place_num        int unsigned null,&lt;br /&gt;
    status_id        int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of allowed functions for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_mandatory_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    null,&lt;br /&gt;
    activity_type_id bigint unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of compulsory flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    null,&lt;br /&gt;
    activity_type_id bigint unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of uncompatible flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_validity_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned default 0 not null,&lt;br /&gt;
    check_num        int unsigned default 0 not null,&lt;br /&gt;
    primary key (aircraft_type_id, validity_type_id, check_num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Types of qualif required for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table allocation_rule&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    title      varchar(255)         not null,&lt;br /&gt;
    account_id int(10)              not null,&lt;br /&gt;
    keyword    varchar(255)         null,&lt;br /&gt;
    order_num  int(10)              not null,&lt;br /&gt;
    amount     tinyint(1)           not null,&lt;br /&gt;
    mandatory  tinyint(1) default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance&lt;br /&gt;
(&lt;br /&gt;
    account_id      int unsigned                   not null,&lt;br /&gt;
    balance_date_id int unsigned                   not null,&lt;br /&gt;
    debit           decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit          decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    primary key (account_id, balance_date_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance_date&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    balance_date datetime null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    booking_group_id int unsigned null,&lt;br /&gt;
    start_date       datetime     null,&lt;br /&gt;
    end_date         datetime     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_account_entry&lt;br /&gt;
(&lt;br /&gt;
    booking_id            int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_activity_type&lt;br /&gt;
(&lt;br /&gt;
    booking_id       int unsigned default 0 not null,&lt;br /&gt;
    activity_type_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, activity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_changelog&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    booking_id     int unsigned not null,&lt;br /&gt;
    person_id      int unsigned not null,&lt;br /&gt;
    changelog_date datetime     not null,&lt;br /&gt;
    booking_state  text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_person&lt;br /&gt;
(&lt;br /&gt;
    booking_id int unsigned default 0 not null,&lt;br /&gt;
    person_id  int unsigned default 0 not null,&lt;br /&gt;
    place_num  int unsigned           null,&lt;br /&gt;
    status_id  int unsigned           null,&lt;br /&gt;
    primary key (booking_id, person_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_resource&lt;br /&gt;
(&lt;br /&gt;
    booking_id  int unsigned default 0 not null,&lt;br /&gt;
    resource_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `booking_training_program` (&lt;br /&gt;
  `booking_group_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`booking_group_id`,`training_program_id`),&lt;br /&gt;
  CONSTRAINT `booking_training_program_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    group_id    int unsigned default 0 not null,&lt;br /&gt;
    name        varchar(255)           null,&lt;br /&gt;
    order_num   int                    null,&lt;br /&gt;
    export_code varchar(255)           null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name      varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `business_field` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `variable` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `label` varchar(255) NOT NULL,&lt;br /&gt;
  `value_type` varchar(40) NOT NULL,&lt;br /&gt;
  `category` varchar(255) NOT NULL,&lt;br /&gt;
  `order_num` int(11) NOT NULL,&lt;br /&gt;
  `dsn` varchar(20) DEFAULT 'customer',&lt;br /&gt;
  `compulsory_fill` tinyint(1) DEFAULT '0',&lt;br /&gt;
  `linked_category` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `linked_business_field_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `linked_field_name` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `max_display` int(10) DEFAULT '-1',&lt;br /&gt;
  `formula` text,&lt;br /&gt;
  `default_value` text,&lt;br /&gt;
  `placeholder` text,&lt;br /&gt;
  `access_level_required` tinyint(4) NOT NULL DEFAULT '0',&lt;br /&gt;
  `user_access_mode` tinyint(1) NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  UNIQUE KEY `variable` (`variable`),&lt;br /&gt;
  KEY `business_field_linked_business_field_id_fk` (`linked_business_field_id`),&lt;br /&gt;
  CONSTRAINT `business_field_linked_business_field_id_fk` FOREIGN KEY (`linked_business_field_id`) REFERENCES `business_field` (`id`)&lt;br /&gt;
) COMMENT='List of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_activity_type&lt;br /&gt;
(&lt;br /&gt;
    business_field_id       int unsigned    default 0 not null,&lt;br /&gt;
    activity_type_id        bigint unsigned default 0 not null,&lt;br /&gt;
    business_field_group_id int unsigned    default 0 not null,&lt;br /&gt;
    visibility_type         tinyint(1) unsigned       null,&lt;br /&gt;
    primary key (business_field_id, activity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table business_field_content&lt;br /&gt;
(&lt;br /&gt;
    category_id       int unsigned           not null,&lt;br /&gt;
    business_field_id int unsigned default 0 not null,&lt;br /&gt;
    person_id         int unsigned default 0 not null,&lt;br /&gt;
    content           text                   null,&lt;br /&gt;
    placeholder       text                   null,&lt;br /&gt;
    primary key (category_id, business_field_id, person_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Content of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria&lt;br /&gt;
(&lt;br /&gt;
    id        int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255)                   not null,&lt;br /&gt;
    predicate text                           not null,&lt;br /&gt;
    order_num int                            null,&lt;br /&gt;
    dsn       varchar(20) default 'customer' null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria_profile&lt;br /&gt;
(&lt;br /&gt;
    criteria_id int unsigned    not null,&lt;br /&gt;
    profile_id  bigint unsigned not null,&lt;br /&gt;
    primary key (criteria_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    customer_bill_id      int unsigned                   null,&lt;br /&gt;
    product_id            int unsigned                   null,&lt;br /&gt;
    qty                   decimal(15, 2) default 0.00    null,&lt;br /&gt;
    unit_price            decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    bill_date             datetime                       null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_bill_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_bill_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of customer bill stored file';&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    payment_type_id       int unsigned                   null,&lt;br /&gt;
    customer_receipt_id   int unsigned                   null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    receipt_date          datetime                       null,&lt;br /&gt;
    owner_email           varchar(255)                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_display&lt;br /&gt;
(&lt;br /&gt;
    person_id     int unsigned            not null,&lt;br /&gt;
    display_key   varchar(255) default '' not null,&lt;br /&gt;
    display_value text                    null,&lt;br /&gt;
    primary key (person_id, display_key)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_multi_display&lt;br /&gt;
(&lt;br /&gt;
    resource_type char(30)     not null,&lt;br /&gt;
    person_id     int unsigned not null,&lt;br /&gt;
    resource_id   varchar(100) not null,&lt;br /&gt;
    display_value text         null,&lt;br /&gt;
    primary key (resource_type, person_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent&lt;br /&gt;
(&lt;br /&gt;
    id          bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    message_id  varchar(150)     not null,&lt;br /&gt;
    sender      varchar(255)     not null,&lt;br /&gt;
    title       varchar(255)     not null,&lt;br /&gt;
    category    tinyint unsigned not null,&lt;br /&gt;
    category_id int unsigned     not null,&lt;br /&gt;
    constraint message_id_UNIQUE&lt;br /&gt;
        unique (message_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent_recipient&lt;br /&gt;
(&lt;br /&gt;
    id                   bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    email_sent_id        bigint unsigned  not null,&lt;br /&gt;
    person_id            int unsigned     not null,&lt;br /&gt;
    email                varchar(255)     null,&lt;br /&gt;
    recipient_type       tinyint unsigned null,&lt;br /&gt;
    smtp_status_category varchar(30)      null,&lt;br /&gt;
    email_status         tinyint unsigned null,&lt;br /&gt;
    update_date          datetime         not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index email_sent_id_idx&lt;br /&gt;
    on email_sent_recipient (email_sent_id);&lt;br /&gt;
&lt;br /&gt;
create table exceptionnal_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned        null,&lt;br /&gt;
    start_date datetime            null,&lt;br /&gt;
    end_date   datetime            null,&lt;br /&gt;
    presence   tinyint(1) unsigned null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table extra_field_profile&lt;br /&gt;
(&lt;br /&gt;
    business_field_id                  int unsigned    default 0 not null,&lt;br /&gt;
    booking_popup_display_4_profile_id bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (business_field_id, booking_popup_display_4_profile_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Linked extra field and profile';&lt;br /&gt;
&lt;br /&gt;
create table facebook&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    category    int unsigned not null,&lt;br /&gt;
    owner_id    int unsigned not null,&lt;br /&gt;
    small       blob         null,&lt;br /&gt;
    original    mediumblob   not null,&lt;br /&gt;
    label       text         null,&lt;br /&gt;
    description text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_icao&lt;br /&gt;
(&lt;br /&gt;
    icao varchar(6) default '' not null&lt;br /&gt;
        primary key&lt;br /&gt;
)&lt;br /&gt;
    comment 'favorite airfield list';&lt;br /&gt;
&lt;br /&gt;
create table favorite_report&lt;br /&gt;
(&lt;br /&gt;
    report_id int unsigned not null&lt;br /&gt;
        primary key&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_business_field&lt;br /&gt;
(&lt;br /&gt;
    report_id         int unsigned not null,&lt;br /&gt;
    business_field_id int unsigned not null,&lt;br /&gt;
    default_value     text         null,&lt;br /&gt;
    primary key (report_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_profile&lt;br /&gt;
(&lt;br /&gt;
    report_id  int unsigned              not null,&lt;br /&gt;
    profile_id bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (report_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table fhp_aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int(10) default 0 not null,&lt;br /&gt;
    aircraft_type_id int(10) default 0 not null,&lt;br /&gt;
    primary key (fhp_id, aircraft_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing aircraft type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int(10)             default 0 not null,&lt;br /&gt;
    activity_type_id bigint unsigned     default 0 not null,&lt;br /&gt;
    excluded         tinyint(1) unsigned default 0 null,&lt;br /&gt;
    primary key (fhp_id, activity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing flight type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_profile&lt;br /&gt;
(&lt;br /&gt;
    fhp_id     int unsigned                  not null,&lt;br /&gt;
    profile_id bigint unsigned               not null,&lt;br /&gt;
    place_num  tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    primary key (fhp_id, profile_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table file&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name          varchar(255)        null,&lt;br /&gt;
    content       longblob            null,&lt;br /&gt;
    file_type     varchar(255)        null,&lt;br /&gt;
    category      tinyint(1) unsigned null,&lt;br /&gt;
    owner_id      int(10)             null,&lt;br /&gt;
    file_group_id int(10)             null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of stored file';&lt;br /&gt;
&lt;br /&gt;
create table file_group&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_id           int unsigned               null,&lt;br /&gt;
    start_date            datetime                   null,&lt;br /&gt;
    duration              int                        null,&lt;br /&gt;
    activity_type_id      bigint unsigned            null,&lt;br /&gt;
    people_onboard        int unsigned               null,&lt;br /&gt;
    departure_location_id int unsigned               null,&lt;br /&gt;
    arrival_location_id   int unsigned               null,&lt;br /&gt;
    counter_departure     int unsigned               null,&lt;br /&gt;
    counter_arrival       int unsigned               null,&lt;br /&gt;
    landing_number        int(10)                    null,&lt;br /&gt;
    airborne              tinyint(1) unsigned        null,&lt;br /&gt;
    validated             tinyint unsigned default 0 null,&lt;br /&gt;
    departure_icao_id     varchar(6)                 null,&lt;br /&gt;
    arrival_icao_id       varchar(6)                 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_account_entry&lt;br /&gt;
(&lt;br /&gt;
    flight_id        int unsigned default 0 not null,&lt;br /&gt;
    account_entry_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, account_entry_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight account entry join';&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on flight_account_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table flight_hours_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name               text                          null,&lt;br /&gt;
    price_formula      text                          null,&lt;br /&gt;
    left_account_id    int unsigned                  null,&lt;br /&gt;
    right_account_id   int unsigned                  null,&lt;br /&gt;
    left_account_type  tinyint(1) unsigned default 0 null,&lt;br /&gt;
    right_account_type tinyint(1) unsigned default 0 null,&lt;br /&gt;
    order_num          int                           null,&lt;br /&gt;
    credit_budget_id   int unsigned                  null,&lt;br /&gt;
    debit_budget_id    int unsigned                  null,&lt;br /&gt;
    product_id         int unsigned                  null,&lt;br /&gt;
    sale_trigger_id    int unsigned        default 0 null,&lt;br /&gt;
    query              text                          null,&lt;br /&gt;
    variable_formula   text                          null,&lt;br /&gt;
    business_field_id  int unsigned                  null,&lt;br /&gt;
    debit_bill_num     int unsigned                  null,&lt;br /&gt;
    credit_bill_num    int unsigned                  null,&lt;br /&gt;
    qty_formula        text                          null,&lt;br /&gt;
    unit_price_formula text                          null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight hours pricing formula';&lt;br /&gt;
&lt;br /&gt;
create table flight_pilot&lt;br /&gt;
(&lt;br /&gt;
    flight_id int unsigned           not null,&lt;br /&gt;
    pilot_id  int unsigned           not null,&lt;br /&gt;
    status_id int unsigned           null,&lt;br /&gt;
    num       int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, pilot_id, num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of crew for each flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_tank_qty&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_id    int unsigned                not null,&lt;br /&gt;
    tank_id      int unsigned                not null,&lt;br /&gt;
    quantity     varchar(255) default '0.00' not null,&lt;br /&gt;
    after_flight tinyint(1)   default 0      not null,&lt;br /&gt;
    account_id   int unsigned                null,&lt;br /&gt;
    pay_type     tinyint(1) unsigned         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `flight_track` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `flight_id` int(10) NOT NULL,&lt;br /&gt;
  `track` mediumblob NOT NULL,&lt;br /&gt;
  `file_type` varchar(255) DEFAULT 'kml',&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight_type_mandatory_validity_type&lt;br /&gt;
(&lt;br /&gt;
    activity_type_id bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (activity_type_id, validity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of mandatory qualification for each flight type';&lt;br /&gt;
&lt;br /&gt;
create table import&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label               varchar(255)                          not null,&lt;br /&gt;
    order_num           int                                   null,&lt;br /&gt;
    import_file_type    varchar(255) default 'csv-comma-CRLF' not null,&lt;br /&gt;
    match_query         text                                  null,&lt;br /&gt;
    uptodate_test_query text                                  null,&lt;br /&gt;
    update_query        text                                  null,&lt;br /&gt;
    update_activated    tinyint(1)   default 0                not null,&lt;br /&gt;
    login               varchar(255)                          null,&lt;br /&gt;
    hash_password       varchar(255)                          null,&lt;br /&gt;
    sync_task_name      varchar(255)                          null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of import';&lt;br /&gt;
&lt;br /&gt;
create table ip_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    ip          varchar(255)        not null,&lt;br /&gt;
    counter     tinyint(1) unsigned not null,&lt;br /&gt;
    expire_date datetime            not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'BLACKLISTED IP';&lt;br /&gt;
&lt;br /&gt;
create table journal&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login     varchar(255)           null,&lt;br /&gt;
    date_log  datetime               null,&lt;br /&gt;
    rights    text                   null,&lt;br /&gt;
    rights2   text                   null,&lt;br /&gt;
    action    varchar(255)           null,&lt;br /&gt;
    person_id int unsigned default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_action&lt;br /&gt;
    on journal (action);&lt;br /&gt;
&lt;br /&gt;
create index idx_date_log&lt;br /&gt;
    on journal (date_log);&lt;br /&gt;
&lt;br /&gt;
create table key_alert&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    alert_date datetime               null,&lt;br /&gt;
    status     int unsigned default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Key alerts';&lt;br /&gt;
&lt;br /&gt;
create table key_assignment&lt;br /&gt;
(&lt;br /&gt;
    key_id      tinyint(2) unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    key_name    tinytext                      null,&lt;br /&gt;
    aircraft_id int unsigned        default 0 null,&lt;br /&gt;
    key_state   tinyint(1) unsigned default 0 null,&lt;br /&gt;
    key_word    bigint unsigned     default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table key_host&lt;br /&gt;
(&lt;br /&gt;
    id       tinyint(2) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    timeout  tinyint(2)          default 10          not null,&lt;br /&gt;
    num_key  tinyint(2) unsigned default 10          not null,&lt;br /&gt;
    ipkey    varchar(50)         default '127.0.0.1' not null,&lt;br /&gt;
    httpport int                 default 4080        not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table key_log&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    log_date  datetime     null,&lt;br /&gt;
    action    varchar(255) null,&lt;br /&gt;
    message   varchar(255) null,&lt;br /&gt;
    key_id    int unsigned null,&lt;br /&gt;
    person_id int unsigned null,&lt;br /&gt;
    xmlrpc    int unsigned not null,&lt;br /&gt;
    error     varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Key logs';&lt;br /&gt;
&lt;br /&gt;
create table location&lt;br /&gt;
(&lt;br /&gt;
    icao_name       varchar(6)       not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name            varchar(64)      not null,&lt;br /&gt;
    latitude        double           null,&lt;br /&gt;
    longitude       double           null,&lt;br /&gt;
    altitude        int(7)           null,&lt;br /&gt;
    weather_station int(1) unsigned  null,&lt;br /&gt;
    asked_counter   bigint default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'airfields coord';&lt;br /&gt;
&lt;br /&gt;
create table log&lt;br /&gt;
(&lt;br /&gt;
    journal_id  int unsigned not null,&lt;br /&gt;
    action      varchar(255) null,&lt;br /&gt;
    table_name  varchar(255) null,&lt;br /&gt;
    field_name  varchar(255) null,&lt;br /&gt;
    field_value varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'part of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_field_value&lt;br /&gt;
    on log (field_value);&lt;br /&gt;
&lt;br /&gt;
create index idx_journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create index journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create table logger&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    serial_number int unsigned                      null,&lt;br /&gt;
    color         varchar(20)         default 'red' not null,&lt;br /&gt;
    activated     tinyint(1) unsigned default 1     not null,&lt;br /&gt;
    order_num     int unsigned                      not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Logger parameters';&lt;br /&gt;
&lt;br /&gt;
create table login_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login       varchar(255)     not null,&lt;br /&gt;
    counter     tinyint unsigned not null,&lt;br /&gt;
    expire_date datetime         not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'BLACKLISTED LOGIN';&lt;br /&gt;
&lt;br /&gt;
create table m_component&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id           int unsigned        default 0 not null,&lt;br /&gt;
    m_component_type_id int unsigned                  null,&lt;br /&gt;
    resource_id         int unsigned                  null,&lt;br /&gt;
    order_num           int                           not null,&lt;br /&gt;
    serial_number       varchar(255)                  null,&lt;br /&gt;
    brandnew_date       datetime                      null,&lt;br /&gt;
    activated           tinyint(1) unsigned default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id              int unsigned        default 0 not null,&lt;br /&gt;
    resource_type_id       int                           null,&lt;br /&gt;
    m_classification_id    int                           null,&lt;br /&gt;
    is_maintenance_check   tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    order_num              int                           not null,&lt;br /&gt;
    label                  varchar(255)                  null,&lt;br /&gt;
    description            varchar(255)                  null,&lt;br /&gt;
    manufacturer           varchar(255)                  null,&lt;br /&gt;
    manufacturer_reference varchar(255)                  null,&lt;br /&gt;
    part_number            varchar(255)                  null,&lt;br /&gt;
    periodicity            int unsigned                  null,&lt;br /&gt;
    tolerance              int unsigned        default 0 not null,&lt;br /&gt;
    calendar_periodicity   int unsigned                  null,&lt;br /&gt;
    calendar_tolerance     int unsigned        default 0 not null,&lt;br /&gt;
    activated              tinyint(1) unsigned default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type_parentality&lt;br /&gt;
(&lt;br /&gt;
    m_component_type_id        int unsigned not null,&lt;br /&gt;
    m_component_type_parent_id int unsigned not null,&lt;br /&gt;
    primary key (m_component_type_id, m_component_type_parent_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_history&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    m_component_id         int unsigned                  not null,&lt;br /&gt;
    install_date           datetime                      null,&lt;br /&gt;
    remove_date            datetime                      null,&lt;br /&gt;
    total_hours_on_install int unsigned        default 0 not null,&lt;br /&gt;
    threshold_hours        int unsigned        default 0 not null,&lt;br /&gt;
    threshold_date         datetime                      null,&lt;br /&gt;
    threshold_date_locked  tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    threshold_hours_locked tinyint(1) unsigned default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_operation&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    content             text         null,&lt;br /&gt;
    m_component_type_id int unsigned not null,&lt;br /&gt;
    order_num           int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_history&lt;br /&gt;
(&lt;br /&gt;
    id                                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                          int unsigned                  null,&lt;br /&gt;
    maintenance_program_id               int unsigned                  null,&lt;br /&gt;
    frame_hours_at_work_start            int(10)                       null,&lt;br /&gt;
    date_work_end                        date                          null,&lt;br /&gt;
    min_overhaul_counter                 int(10)                       null,&lt;br /&gt;
    max_overhaul_counter                 int(10)                       null,&lt;br /&gt;
    min_overhaul_date                    date                          null,&lt;br /&gt;
    max_overhaul_date                    date                          null,&lt;br /&gt;
    min_next_overhaul_counter            int(10)                       null,&lt;br /&gt;
    max_next_overhaul_counter            int(10)                       null,&lt;br /&gt;
    min_next_overhaul_date               date                          null,&lt;br /&gt;
    max_next_overhaul_date               date                          null,&lt;br /&gt;
    first_reference_visit                tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    is_visit                             tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    action_type                          tinyint(1) unsigned           null,&lt;br /&gt;
    previous_line_linked_time_action     int(10)                       null,&lt;br /&gt;
    previous_line_linked_calendar_action int(10)                       null,&lt;br /&gt;
    next_line_linked_time_action         int(10)                       null,&lt;br /&gt;
    next_line_linked_calendar_action     int(10)                       null,&lt;br /&gt;
    time_tolerance                       int(10)                       null,&lt;br /&gt;
    calendar_tolerance                   int(10)                       null,&lt;br /&gt;
    time_periodicity_component           int(10)                       null,&lt;br /&gt;
    calendar_periodicity_component       int(10)                       null,&lt;br /&gt;
    time_periodicity                     int(10)                       null,&lt;br /&gt;
    calendar_periodicity                 int(10)                       null,&lt;br /&gt;
    reference_overhaul_counter           int(10)                       null,&lt;br /&gt;
    reference_overhaul_date              date                          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_program&lt;br /&gt;
(&lt;br /&gt;
    id                                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                           int unsigned                  null,&lt;br /&gt;
    component_type_id                     int unsigned                  null,&lt;br /&gt;
    description                           varchar(255)                  null,&lt;br /&gt;
    time_periodicity                      int(10)                       null,&lt;br /&gt;
    calendar_periodicity                  int(10)                       null,&lt;br /&gt;
    time_first_reference                  int(10)                       null,&lt;br /&gt;
    calendar_first_reference              date                          null,&lt;br /&gt;
    time_tolerance                        int(10)                       null,&lt;br /&gt;
    calendar_tolerance                    int(10)                       null,&lt;br /&gt;
    frame_hours_at_work_start             int(10)                       null,&lt;br /&gt;
    date_work_end                         date                          null,&lt;br /&gt;
    time_elapsed                          int(10)                       null,&lt;br /&gt;
    calendar_elapsed                      int(10)                       null,&lt;br /&gt;
    time_remaining                        int(10)                       null,&lt;br /&gt;
    calendar_remaining                    int(10)                       null,&lt;br /&gt;
    min_next_overhaul_counter             int(10)                       null,&lt;br /&gt;
    max_next_overhaul_counter             int(10)                       null,&lt;br /&gt;
    min_next_overhaul_date                date                          null,&lt;br /&gt;
    max_next_overhaul_date                date                          null,&lt;br /&gt;
    effective_hours_at_work_start         int(10)                       null,&lt;br /&gt;
    theoretical_overhaul_counter          int(10)                       null,&lt;br /&gt;
    intelligent_overhaul_counter          int(10)                       null,&lt;br /&gt;
    intelligent_min_next_overhaul_counter int(10)                       null,&lt;br /&gt;
    intelligent_max_next_overhaul_counter int(10)                       null,&lt;br /&gt;
    effective_date_at_work_end            date                          null,&lt;br /&gt;
    theoretical_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_min_next_overhaul_date    date                          null,&lt;br /&gt;
    intelligent_max_next_overhaul_date    date                          null,&lt;br /&gt;
    overlapping_group_id                  int unsigned                  null,&lt;br /&gt;
    is_visit_rg                           tinyint(1) unsigned default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_view&lt;br /&gt;
(&lt;br /&gt;
    id                                                int unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    frame_total_time                                  int(10)                null,&lt;br /&gt;
    frame_time_since_rg                               int(10)                null,&lt;br /&gt;
    engine_time_since_rg                              int(10)                null,&lt;br /&gt;
    propeller_time_since_rg                           int(10)                null,&lt;br /&gt;
    potential_remaining_next_time_action              int(10)                null,&lt;br /&gt;
    potential_remaining_next_time_visit               int(10)                null,&lt;br /&gt;
    potential_remaining_next_priority_time_action     int(10)                null,&lt;br /&gt;
    potential_remaining_next_calendar_action          int(10)                null,&lt;br /&gt;
    potential_remaining_next_calendar_visit           int(10)                null,&lt;br /&gt;
    potential_remaining_next_priority_calendar_action int(10)                null,&lt;br /&gt;
    next_time_action_id                               int unsigned           null,&lt;br /&gt;
    next_time_visit_id                                int unsigned           null,&lt;br /&gt;
    next_priority_time_action_id                      int unsigned           null,&lt;br /&gt;
    next_calendar_action_id                           int unsigned           null,&lt;br /&gt;
    next_calendar_visit_id                            int unsigned           null,&lt;br /&gt;
    next_priority_calendar_action_id                  int unsigned           null,&lt;br /&gt;
    overhaul_counter_action                           int(10)                null,&lt;br /&gt;
    overhaul_counter_visit                            int(10)                null,&lt;br /&gt;
    overhaul_date_action                              date                   null,&lt;br /&gt;
    overhaul_date_visit                               date                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table map_logger_monitoring&lt;br /&gt;
(&lt;br /&gt;
    record_id  int unsigned not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    count_data int unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'link between flight and track';&lt;br /&gt;
&lt;br /&gt;
create table map_track&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned                  null,&lt;br /&gt;
    start_data    int unsigned                  null,&lt;br /&gt;
    number        int unsigned                  null,&lt;br /&gt;
    start_time    datetime                      null,&lt;br /&gt;
    latitude_max  double                        null,&lt;br /&gt;
    longitude_max double                        null,&lt;br /&gt;
    latitude_min  double                        null,&lt;br /&gt;
    longitude_min double                        null,&lt;br /&gt;
    visible       tinyint(1) unsigned default 1 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Tracks split from GDR';&lt;br /&gt;
&lt;br /&gt;
create table nationality&lt;br /&gt;
(&lt;br /&gt;
    code  char(2) default '' not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255)       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table parameter&lt;br /&gt;
(&lt;br /&gt;
    code       varchar(255)                  not null,&lt;br /&gt;
    key_id     int unsigned        default 0 not null,&lt;br /&gt;
    enabled    tinyint(1) unsigned default 0 null,&lt;br /&gt;
    int_value  int unsigned        default 0 null,&lt;br /&gt;
    char_value text                          null,&lt;br /&gt;
    primary key (code, key_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table payment_summary_file&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type       varchar(255)            null,&lt;br /&gt;
    content         longblob                null,&lt;br /&gt;
    record_date     datetime                null,&lt;br /&gt;
    total_entry     int unsigned            null,&lt;br /&gt;
    total_amount    decimal(15, 5) unsigned null,&lt;br /&gt;
    payment_type_id int unsigned            null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `payment_type` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `name` text,&lt;br /&gt;
  `text_field_label` text,&lt;br /&gt;
  `only_admin` tinyint(1) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `pos_key_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `treasury_account_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `person_delivery` tinyint(1) unsigned DEFAULT '0',&lt;br /&gt;
  `person_budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `treasury_budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `minimum_amount` decimal(10,0) DEFAULT NULL,&lt;br /&gt;
  `maximum_amount` decimal(10,0) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
) COMMENT='type of payment description';&lt;br /&gt;
&lt;br /&gt;
create table person&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                                      not null,&lt;br /&gt;
    hash_password          varchar(255)                                      not null,&lt;br /&gt;
    first_name             varchar(255)                                      null,&lt;br /&gt;
    last_name              varchar(255)                                      null,&lt;br /&gt;
    profile                bigint unsigned     default 0                     not null,&lt;br /&gt;
    view_type              int unsigned                                      null,&lt;br /&gt;
    view_width             tinyint unsigned    default 12                    not null,&lt;br /&gt;
    view_height            tinyint(4) unsigned default 30                    not null,&lt;br /&gt;
    aircrafts_viewed       varchar(255)                                      null,&lt;br /&gt;
    inst_viewed            varchar(255)                                      null,&lt;br /&gt;
    email                  varchar(255)                                      null,&lt;br /&gt;
    timezone               varchar(255)                                      null,&lt;br /&gt;
    address                varchar(255)                                      null,&lt;br /&gt;
    zipcode                varchar(255)                                      null,&lt;br /&gt;
    city                   varchar(255)                                      null,&lt;br /&gt;
    state                  varchar(255)                                      null,&lt;br /&gt;
    country                varchar(255)                                      null,&lt;br /&gt;
    home_phone             varchar(255)                                      null,&lt;br /&gt;
    work_phone             varchar(255)                                      null,&lt;br /&gt;
    cell_phone             varchar(255)                                      null,&lt;br /&gt;
    lang                   varchar(255)                                      null,&lt;br /&gt;
    notification           bigint(20) unsigned                               null,&lt;br /&gt;
    activated              tinyint(1) unsigned default 1                     null,&lt;br /&gt;
    birthdate              datetime            default '0000-00-00 00:00:00' null,&lt;br /&gt;
    sex                    tinyint(1) unsigned default 0                     not null,&lt;br /&gt;
    nationality            char(2)                                           null,&lt;br /&gt;
    total_flight_time      int unsigned        default 0                     null,&lt;br /&gt;
    date_total_flight_time datetime                                          null,&lt;br /&gt;
    guid                   varchar(255)                                      null,&lt;br /&gt;
    activity_notification  bigint unsigned                                   null,&lt;br /&gt;
    constraint idx_name&lt;br /&gt;
        unique (name),&lt;br /&gt;
    constraint name_3&lt;br /&gt;
        unique (name)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table person_awaiting_activation&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login           varchar(255)        not null,&lt;br /&gt;
    ip              varchar(255)        not null,&lt;br /&gt;
    code            varchar(255)        not null,&lt;br /&gt;
    category        varchar(255)        not null,&lt;br /&gt;
    expiration_date datetime            null,&lt;br /&gt;
    used            tinyint(1) unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'member_awaiting_activation';&lt;br /&gt;
&lt;br /&gt;
create table product&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label       varchar(255)                  not null,&lt;br /&gt;
    unit        varchar(255)                  not null,&lt;br /&gt;
    free_sale   tinyint(1)          default 0 not null,&lt;br /&gt;
    locked      tinyint(1) unsigned default 0 null,&lt;br /&gt;
    variable_id int unsigned                  null,&lt;br /&gt;
    sale_type   tinyint(1) unsigned           null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile&lt;br /&gt;
(&lt;br /&gt;
    id                bigint unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)              null,&lt;br /&gt;
    permits           int unsigned              null,&lt;br /&gt;
    permits2          int unsigned    default 0 not null,&lt;br /&gt;
    permits3          int unsigned    default 0 not null,&lt;br /&gt;
    pictogram         int unsigned              null,&lt;br /&gt;
    default_status_id int unsigned              null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_accounting_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id    bigint unsigned default 0 not null,&lt;br /&gt;
    accounting_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, accounting_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_extra_field_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned default 0 not null,&lt;br /&gt;
    business_field_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_profile_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id          bigint unsigned not null,&lt;br /&gt;
    viewable_profile_id bigint unsigned not null,&lt;br /&gt;
    primary key (profile_id, viewable_profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_required_account_type&lt;br /&gt;
(&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    account_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, account_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_place&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned default 0 not null,&lt;br /&gt;
    resource_type_id int unsigned    default 0 not null,&lt;br /&gt;
    place_num        int unsigned              not null,&lt;br /&gt;
    primary key (profile_id, resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id                bigint unsigned not null,&lt;br /&gt;
    viewable_resource_type_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, viewable_resource_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id  int unsigned    default 0 not null,&lt;br /&gt;
    manage4oneself    int(1)          default 0 not null,&lt;br /&gt;
    certify           int(1)          default 0 not null,&lt;br /&gt;
    optional_contract tinyint(1)      default 0 not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_return&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    psp_transaction_id int unsigned null,&lt;br /&gt;
    bank_answer        text         null,&lt;br /&gt;
    bank_misc          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    credit_account_id int unsigned           not null,&lt;br /&gt;
    debit_account_id  int unsigned           not null,&lt;br /&gt;
    transaction_date  datetime               not null,&lt;br /&gt;
    amount            float                  not null,&lt;br /&gt;
    description       varchar(255)           null,&lt;br /&gt;
    payment_type_id   int unsigned           not null,&lt;br /&gt;
    state             int unsigned default 0 not null,&lt;br /&gt;
    token             text                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction_account_entry&lt;br /&gt;
(&lt;br /&gt;
    psp_transaction_id    int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (psp_transaction_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table regular_presence_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned     null,&lt;br /&gt;
    start_day  tinyint unsigned null,&lt;br /&gt;
    end_day    tinyint unsigned null,&lt;br /&gt;
    start_hour time             null,&lt;br /&gt;
    end_hour   time             null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name             varchar(255)                  null,&lt;br /&gt;
    resource_type_id int unsigned                  null,&lt;br /&gt;
    comments         varchar(255)                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    activated        tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    bookable         int unsigned        default 1 null,&lt;br /&gt;
    physical         int unsigned        default 1 null,&lt;br /&gt;
    color            int unsigned                  null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of resource';&lt;br /&gt;
&lt;br /&gt;
create table resource_exceptional_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_date  datetime            null,&lt;br /&gt;
    end_date    datetime            null,&lt;br /&gt;
    presence    tinyint(1) unsigned null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_regular_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_day   tinyint(1) unsigned null,&lt;br /&gt;
    end_day     tinyint(1) unsigned null,&lt;br /&gt;
    start_hour  time                null,&lt;br /&gt;
    end_hour    time                null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_type&lt;br /&gt;
(&lt;br /&gt;
    id                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                 varchar(255)                   null,&lt;br /&gt;
    category             int unsigned                   null,&lt;br /&gt;
    seats_available      int                 default -1 null,&lt;br /&gt;
    comments             varchar(255)                   null,&lt;br /&gt;
    order_num            int                            null,&lt;br /&gt;
    activated            tinyint(1) unsigned default 1  not null,&lt;br /&gt;
    max_booking_duration int(10)             default -1 null,&lt;br /&gt;
    pictogram            int unsigned                   null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of resource type';&lt;br /&gt;
&lt;br /&gt;
create table resource_type_place_tag&lt;br /&gt;
(&lt;br /&gt;
    resource_type_id int unsigned default 0  not null,&lt;br /&gt;
    place_num        tinyint(1) unsigned     not null,&lt;br /&gt;
    place_tag        varchar(255)            null,&lt;br /&gt;
    place_quantity   int(10)      default -1 null,&lt;br /&gt;
    primary key (resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_stock&lt;br /&gt;
(&lt;br /&gt;
    id                           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    product_id                   int unsigned    null,&lt;br /&gt;
    stock_id                     int unsigned    not null,&lt;br /&gt;
    stock_variation_qty_per_sale float default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_validity_type&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned not null,&lt;br /&gt;
    new_formula      varchar(255) null,&lt;br /&gt;
    update_formula   varchar(255) null,&lt;br /&gt;
    product_id       int unsigned null,&lt;br /&gt;
    constraint validity_type_id&lt;br /&gt;
        unique (validity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of validity type into sale';&lt;br /&gt;
&lt;br /&gt;
create index idx_product&lt;br /&gt;
    on sale_2_validity_type (product_id);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    price_formula       text                          null,&lt;br /&gt;
    debit_account_id    int unsigned                  null,&lt;br /&gt;
    credit_account_id   int unsigned                  null,&lt;br /&gt;
    debit_account_type  tinyint(1) unsigned default 0 null,&lt;br /&gt;
    credit_account_type tinyint(1) unsigned default 0 null,&lt;br /&gt;
    credit_budget_id    int unsigned                  null,&lt;br /&gt;
    debit_budget_id     int unsigned                  null,&lt;br /&gt;
    order_num           int                           null,&lt;br /&gt;
    label               varchar(255)                  null,&lt;br /&gt;
    variable_formula    varchar(255)                  null,&lt;br /&gt;
    debit_bill_num      int unsigned                  null,&lt;br /&gt;
    credit_bill_num     int unsigned                  null,&lt;br /&gt;
    qty_formula         text                          null,&lt;br /&gt;
    unit_price_formula  text                          null,&lt;br /&gt;
    added_product_id    int unsigned                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_product&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned default 0 not null,&lt;br /&gt;
    product_id      int unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, product_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_profile&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned              not null,&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_trigger&lt;br /&gt;
(&lt;br /&gt;
    id             int(10) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name           varchar(255)                  null,&lt;br /&gt;
    event          varchar(255)                  null,&lt;br /&gt;
    locked         tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    query          text                          null,&lt;br /&gt;
    validate_entry tinyint(1)          default 0 null,&lt;br /&gt;
    group_sales    tinyint(1)          default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of sale trigger';&lt;br /&gt;
&lt;br /&gt;
create table spreadsheet_parameter&lt;br /&gt;
(&lt;br /&gt;
    file_number       int(10)      not null,&lt;br /&gt;
    spreadsheet_key   varchar(255) not null,&lt;br /&gt;
    spreadsheet_value varchar(255) not null,&lt;br /&gt;
    file_name         varchar(255) null,&lt;br /&gt;
    google_url        varchar(255) not null,&lt;br /&gt;
    file_type         int unsigned null,&lt;br /&gt;
    primary key (file_number, spreadsheet_key, spreadsheet_value)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table statistic&lt;br /&gt;
(&lt;br /&gt;
    name       varchar(255)                not null,&lt;br /&gt;
    of_version tinyint(3)     default 0    not null,&lt;br /&gt;
    value      decimal(15, 2) default 0.00 not null,&lt;br /&gt;
    primary key (name, of_version)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table status&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    abbrev    varchar(255) null,&lt;br /&gt;
    name      varchar(255) null,&lt;br /&gt;
    pictogram int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of functions for pilot';&lt;br /&gt;
&lt;br /&gt;
create table stock&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label         varchar(255) not null,&lt;br /&gt;
    stock_type_id int unsigned not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_level&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id   int unsigned    not null,&lt;br /&gt;
    qty        float default 0 not null,&lt;br /&gt;
    stock_date datetime        null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_type&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null,&lt;br /&gt;
    unit  varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id       int unsigned                  not null,&lt;br /&gt;
    qty            float               default 0 not null,&lt;br /&gt;
    variation_date datetime                      null,&lt;br /&gt;
    validated      tinyint(1) unsigned default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation_account_entry&lt;br /&gt;
(&lt;br /&gt;
    product_id            int unsigned default 0 not null,&lt;br /&gt;
    stock_variation_id    int unsigned           not null,&lt;br /&gt;
    account_entry_flow_id int unsigned           not null,&lt;br /&gt;
    person_id             int unsigned           not null,&lt;br /&gt;
    primary key (product_id, stock_variation_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on stock_variation_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table structure&lt;br /&gt;
(&lt;br /&gt;
    id                            int(10)         default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                          varchar(255)              null,&lt;br /&gt;
    info_cell                     text                      null,&lt;br /&gt;
    logo                          longblob                  null,&lt;br /&gt;
    logo_name                     varchar(255)              null,&lt;br /&gt;
    logo_ext                      varchar(25)               null,&lt;br /&gt;
    logo_size                     int                       null,&lt;br /&gt;
    first_hour_displayed          time                      null,&lt;br /&gt;
    last_hour_displayed           time                      null,&lt;br /&gt;
    usual_profiles                bigint unsigned default 0 not null,&lt;br /&gt;
    icao                          varchar(6)                null,&lt;br /&gt;
    default_slot_range            int unsigned              null,&lt;br /&gt;
    min_slot_range                tinyint unsigned          null,&lt;br /&gt;
    twilight_range                tinyint unsigned          null,&lt;br /&gt;
    mailing_list_name             varchar(255)              null,&lt;br /&gt;
    mailing_list_type             varchar(255)              null,&lt;br /&gt;
    structure_site_url            varchar(255)              null,&lt;br /&gt;
    default_timezone              varchar(255)              not null,&lt;br /&gt;
    lang                          varchar(255)              not null,&lt;br /&gt;
    admin_num                     int unsigned              not null,&lt;br /&gt;
    default_view_type             int unsigned              null,&lt;br /&gt;
    address                       varchar(255)              null,&lt;br /&gt;
    zipcode                       varchar(255)              null,&lt;br /&gt;
    city                          varchar(255)              null,&lt;br /&gt;
    state                         varchar(255)              null,&lt;br /&gt;
    country                       varchar(255)              null,&lt;br /&gt;
    phone                         varchar(255)              null,&lt;br /&gt;
    fax                           varchar(255)              null,&lt;br /&gt;
    email                         varchar(255)              null,&lt;br /&gt;
    default_notification          int(3) unsigned           null,&lt;br /&gt;
    welcome_cell                  text                      null,&lt;br /&gt;
    business                      text                      null,&lt;br /&gt;
    default_activity_notification bigint unsigned           null,&lt;br /&gt;
    siren                         int(10)                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_bill_type_id int unsigned         not null,&lt;br /&gt;
    bill_date             datetime             null,&lt;br /&gt;
    description           varchar(255)         null,&lt;br /&gt;
    ordinal               int unsigned         not null,&lt;br /&gt;
    validated             tinyint(1) default 0 null,&lt;br /&gt;
    supplier_bill_file_id int(10)              null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_account_entry&lt;br /&gt;
(&lt;br /&gt;
    supplier_bill_id      int unsigned not null,&lt;br /&gt;
    account_entry_flow_id int unsigned not null,&lt;br /&gt;
    primary key (supplier_bill_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on supplier_bill_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_email_parsed&lt;br /&gt;
(&lt;br /&gt;
    id                    int(10) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid                   int(10)      null,&lt;br /&gt;
    email_address         varchar(255) null,&lt;br /&gt;
    supplier_bill_file_id int(10)      null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null,&lt;br /&gt;
    name      varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_type&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_account_id int unsigned not null,&lt;br /&gt;
    name                varchar(255) null,&lt;br /&gt;
    account_id          int unsigned not null,&lt;br /&gt;
    vat_account_id      int unsigned null,&lt;br /&gt;
    supplier_budget_id  int unsigned null,&lt;br /&gt;
    account_budget_id   int unsigned null,&lt;br /&gt;
    vat_budget_id       int unsigned null,&lt;br /&gt;
    rule                text         null,&lt;br /&gt;
    sender_email        varchar(255) null,&lt;br /&gt;
    subject             varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table table_trigger&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    monitored_table varchar(255) not null,&lt;br /&gt;
    trigger_formula varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table tank&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_type_id   int unsigned                 not null,&lt;br /&gt;
    tank_type_id       int unsigned                 not null,&lt;br /&gt;
    unit_id            int unsigned                 not null,&lt;br /&gt;
    label              varchar(255)                 not null,&lt;br /&gt;
    max_quantity       decimal(15, 2) default -1.00 not null,&lt;br /&gt;
    unlimited_quantity int unsigned   default 1     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table track_record&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    in_progress            tinyint(1) unsigned                    null,&lt;br /&gt;
    start_date             datetime default '0000-00-00 00:00:00' null,&lt;br /&gt;
    activated              tinyint(1) unsigned                    null,&lt;br /&gt;
    datechsys_track_id     int unsigned                           null,&lt;br /&gt;
    resource_cat           int unsigned                           not null,&lt;br /&gt;
    resource_id            int unsigned                           not null,&lt;br /&gt;
    additional_information int unsigned                           null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of flight record';&lt;br /&gt;
&lt;br /&gt;
create table track_record_data&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned        not null,&lt;br /&gt;
    record_date   datetime            null,&lt;br /&gt;
    longitude     double              null,&lt;br /&gt;
    latitude      double              null,&lt;br /&gt;
    altitude      int(7)              null,&lt;br /&gt;
    speed         double              null,&lt;br /&gt;
    track         int(3) unsigned     null,&lt;br /&gt;
    acc_x         int(6)              null,&lt;br /&gt;
    acc_y         int(6)              null,&lt;br /&gt;
    acc_z         int(6)              null,&lt;br /&gt;
    pressure      int(5) unsigned     null,&lt;br /&gt;
    battery_level int(4) unsigned     null,&lt;br /&gt;
    gps_fix       tinyint(1) unsigned null,&lt;br /&gt;
    receive_date  datetime            null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of flight record data';&lt;br /&gt;
&lt;br /&gt;
create index idx_record_id&lt;br /&gt;
    on track_record_data (record_id);&lt;br /&gt;
&lt;br /&gt;
create table track_resource&lt;br /&gt;
(&lt;br /&gt;
    id   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `name` varchar(255) NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity` (&lt;br /&gt;
  `activity_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_id` int(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL DEFAULT '1',&lt;br /&gt;
  `level_reached` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `comment` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `validated` tinyint(1) NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`activity_id`,`training_item_id`,`training_program_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `training_program_item_id_idx` (`training_program_id`,`training_item_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_training_program_item_id_fk` FOREIGN KEY (`training_program_id`, `training_item_id`) REFERENCES `training_program_item` (`training_program_id`, `training_item_id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity_next_item` (&lt;br /&gt;
  `student_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `reporting_offset` tinyint(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `item_preselected` tinyint(1) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`student_id`,`training_program_id`,`training_item_id`),&lt;br /&gt;
  KEY `training_item_id_idx` (`training_item_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `training_activity_next_item_training_program_item_id_fk` (`training_program_id`,`training_item_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_student_id_fk` FOREIGN KEY (`student_id`) REFERENCES `person` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_training_program_item_id_fk` FOREIGN KEY (`training_program_id`, `training_item_id`) REFERENCES `training_program_item` (`training_program_id`, `training_item_id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity_person` (&lt;br /&gt;
  `activity_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `person_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `num` int(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `training_checking_date` datetime DEFAULT NULL,&lt;br /&gt;
  `training_checking_sentence` varchar(255) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`activity_id`,`person_id`,`num`),&lt;br /&gt;
  KEY `person_id_idx` (`person_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_person_activity_id_fk` FOREIGN KEY (`activity_id`) REFERENCES `flight` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_person_person_id_fk` FOREIGN KEY (`person_id`) REFERENCES `person` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_phase` (&lt;br /&gt;
  `training_program_item_order_num` int(11) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `name` varchar(255) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`training_program_item_order_num`,`training_program_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  CONSTRAINT `training_phase_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_program` (&lt;br /&gt;
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
`training_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
`name` varchar(255) NOT NULL,&lt;br /&gt;
PRIMARY KEY (`id`),&lt;br /&gt;
KEY `training_id_idx` (`training_id`),&lt;br /&gt;
CONSTRAINT `training_program_training_id_fk` FOREIGN KEY (`training_id`) REFERENCES `training` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_program_activity` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `activity_type_id` bigint(20) unsigned NOT NULL,&lt;br /&gt;
  `duration` int(11) unsigned DEFAULT NULL,&lt;br /&gt;
  `breaktime` int(11) unsigned DEFAULT NULL,&lt;br /&gt;
  `order_num` int(11) unsigned NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `activity_type_id_idx` (`activity_type_id`),&lt;br /&gt;
  CONSTRAINT `training_program_activity_activity_type_id_fk` FOREIGN KEY (`activity_type_id`) REFERENCES `activity_type` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_program_activity_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_item` (&lt;br /&gt;
  `training_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_label_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `number_of_sessions` int(11) NOT NULL,&lt;br /&gt;
  `order_num` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `custom_label` varchar(255),&lt;br /&gt;
  PRIMARY KEY (`training_id`,`training_item_label_id`),&lt;br /&gt;
  KEY `order_num_idx` (`order_num` ASC),&lt;br /&gt;
  CONSTRAINT `training_item_training_id_fk` FOREIGN KEY (`training_id`) REFERENCES `training` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    id1 int unsigned null,&lt;br /&gt;
    id2 int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of sales';&lt;br /&gt;
&lt;br /&gt;
create table validity_type&lt;br /&gt;
(&lt;br /&gt;
    id                       int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                     varchar(255)                   not null,&lt;br /&gt;
    time_limitation          tinyint(1)          default 0  not null,&lt;br /&gt;
    ident_value_enable       tinyint(1)          default 0  not null,&lt;br /&gt;
    grant_date_enable        tinyint(1)          default 0  not null,&lt;br /&gt;
    mandatory                tinyint(1)          default 0  not null,&lt;br /&gt;
    experience_formula       text                           null,&lt;br /&gt;
    mandatory_access_control tinyint(1) unsigned default 0  null,&lt;br /&gt;
    alert_on_login           int(10)             default -2 null,&lt;br /&gt;
    first_reminder_alert     int unsigned        default 0  null,&lt;br /&gt;
    reminder_frequency_alert int unsigned        default 0  null,&lt;br /&gt;
    associate_attachment     tinyint(1) unsigned default 0  not null,&lt;br /&gt;
    certification_process    tinyint(1)          default 0  not null,&lt;br /&gt;
    is_contract              tinyint(1)          default 0  not null,&lt;br /&gt;
    contract_filename        varchar(255)                   not null,&lt;br /&gt;
    contract_file            mediumblob                     not null,&lt;br /&gt;
    contract_file_extension  varchar(4)                     not null,&lt;br /&gt;
    is_OF_contract           tinyint(1)          default 0  not null,&lt;br /&gt;
    activated                tinyint(1) unsigned default 1  not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id           int unsigned         not null,&lt;br /&gt;
    validity_type_id    int unsigned         not null,&lt;br /&gt;
    registration_date   datetime             not null,&lt;br /&gt;
    expire_date         date                 null,&lt;br /&gt;
    no_alert            tinyint(1) default 0 not null,&lt;br /&gt;
    ident_value         varchar(255)         null,&lt;br /&gt;
    grant_date          date                 null,&lt;br /&gt;
    checker_person_id   int unsigned         not null,&lt;br /&gt;
    checking_date       date                 not null,&lt;br /&gt;
    checking_sentence   varchar(255)         not null,&lt;br /&gt;
    is_current_validity tinyint(1) default 0 not null,&lt;br /&gt;
    constraint validity_person_id_validity_type_id_registration_date_uindex&lt;br /&gt;
        unique (person_id, validity_type_id, registration_date),&lt;br /&gt;
    constraint validity_person_id_fk&lt;br /&gt;
        foreign key (person_id) references person (id),&lt;br /&gt;
    constraint validity_validity_type_id_fk&lt;br /&gt;
        foreign key (validity_type_id) references validity_type (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_type_page&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned        not null,&lt;br /&gt;
    page_index       int unsigned        not null,&lt;br /&gt;
    label            varchar(40)         not null,&lt;br /&gt;
    is_mandatory     tinyint(1) unsigned not null,&lt;br /&gt;
    constraint validity_type_page_validity_type_id_page_index_uindex&lt;br /&gt;
        unique (validity_type_id, page_index),&lt;br /&gt;
    constraint validity_type_page_validity_type_id_fk&lt;br /&gt;
        foreign key (validity_type_id) references validity_type (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_page&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_page_id int unsigned not null,&lt;br /&gt;
    filename              varchar(255) not null,&lt;br /&gt;
    file                  mediumblob   not null,&lt;br /&gt;
    file_extension        varchar(4)   not null,&lt;br /&gt;
    constraint validity_page_validity_type_page_id_fk&lt;br /&gt;
        foreign key (validity_type_page_id) references validity_type_page (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_2_validity_page&lt;br /&gt;
(&lt;br /&gt;
    validity_id      int unsigned not null,&lt;br /&gt;
    validity_page_id int unsigned not null,&lt;br /&gt;
    primary key (validity_id, validity_page_id),&lt;br /&gt;
    constraint validity_2_validity_page_validity_id_fk&lt;br /&gt;
        foreign key (validity_id) references validity (id),&lt;br /&gt;
    constraint validity_2_validity_page_validity_page_id_fk&lt;br /&gt;
        foreign key (validity_page_id) references validity_page (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable&lt;br /&gt;
(&lt;br /&gt;
    id         int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable   varchar(255) not null,&lt;br /&gt;
    label      varchar(255) not null,&lt;br /&gt;
    category   tinyint(1)   null,&lt;br /&gt;
    value_type varchar(255) null,&lt;br /&gt;
    order_num  int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable_value&lt;br /&gt;
(&lt;br /&gt;
    id           int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable_id  int            not null,&lt;br /&gt;
    assign_value decimal(15, 2) not null,&lt;br /&gt;
    start_date   datetime       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    channel_id       int unsigned not null,&lt;br /&gt;
    publication_date datetime     not null,&lt;br /&gt;
    title            varchar(255) null,&lt;br /&gt;
    content          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed_channel&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_pilot_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`person`.`id` AS `person_id`&lt;br /&gt;
from `of40_aeroclublys`.`person`&lt;br /&gt;
where ((`of40_aeroclublys`.`person`.`activated` = 1) and&lt;br /&gt;
       ((`of40_aeroclublys`.`person`.`profile` &amp;amp; (select `of40_aeroclublys`.`parameter`.`int_value`&lt;br /&gt;
                                                  from `of40_aeroclublys`.`parameter`&lt;br /&gt;
                                                  where (`of40_aeroclublys`.`parameter`.`code` =&lt;br /&gt;
                                                         'EXTERNAL_BOOKING_PILOT_PROFILE'))) &amp;gt; 0) and&lt;br /&gt;
       `of40_aeroclublys`.`person`.`id` in (select `of40_aeroclublys`.`regular_presence_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`regular_presence_inst_date`&lt;br /&gt;
                                            union&lt;br /&gt;
                                            select `of40_aeroclublys`.`exceptionnal_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`exceptionnal_inst_date`&lt;br /&gt;
                                            where ((`of40_aeroclublys`.`exceptionnal_inst_date`.`end_date` &amp;gt; now()) and&lt;br /&gt;
                                                   (`of40_aeroclublys`.`exceptionnal_inst_date`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_resource_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`resource`.`id` AS `resource_id`&lt;br /&gt;
from ((`of40_aeroclublys`.`resource` join `of40_aeroclublys`.`business_field_content` on ((&lt;br /&gt;
        `of40_aeroclublys`.`business_field_content`.`category_id` = `of40_aeroclublys`.`resource`.`id`)))&lt;br /&gt;
         join `of40_aeroclublys`.`business_field` on ((`of40_aeroclublys`.`business_field`.`id` =&lt;br /&gt;
                                                       `of40_aeroclublys`.`business_field_content`.`business_field_id`)))&lt;br /&gt;
where ((`of40_aeroclublys`.`resource`.`activated` = 1) and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field`.`variable` = 'canResourcePerformFirstFlights') and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field_content`.`content` = '1') and&lt;br /&gt;
       (`of40_aeroclublys`.`resource`.`bookable` = 1) and ((select count(0)&lt;br /&gt;
                                                            from `of40_aeroclublys`.`resource_type_place_tag` `seat`&lt;br /&gt;
                                                            where (`seat`.`resource_type_id` =&lt;br /&gt;
                                                                   `of40_aeroclublys`.`resource`.`resource_type_id`)) &amp;gt;=&lt;br /&gt;
                                                           2) and&lt;br /&gt;
       `of40_aeroclublys`.`resource`.`id` in (select `of40_aeroclublys`.`resource_regular_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_regular_availability`&lt;br /&gt;
                                              union&lt;br /&gt;
                                              select `of40_aeroclublys`.`resource_exceptional_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_exceptional_availability`&lt;br /&gt;
                                              where ((`of40_aeroclublys`.`resource_exceptional_availability`.`end_date` &amp;gt;&lt;br /&gt;
                                                      now()) and&lt;br /&gt;
                                                     (`of40_aeroclublys`.`resource_exceptional_availability`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function distanceBetween2Point(latitude1 double, longitude1 double, latitude2 double,&lt;br /&gt;
                                                            longitude2 double) returns double&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE dlongitude DOUBLE;&lt;br /&gt;
    DECLARE dlatitude DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET rlongitude1 = RADIANS(longitude1);&lt;br /&gt;
    SET rlatitude1 = RADIANS(latitude1);&lt;br /&gt;
    SET rlongitude2 = RADIANS(longitude2);&lt;br /&gt;
    SET rlatitude2 = RADIANS(latitude2);&lt;br /&gt;
    SET dlongitude = (rlongitude2 - rlongitude1) / 2;&lt;br /&gt;
    SET dlatitude = (rlatitude2 - rlatitude1) / 2;&lt;br /&gt;
    SET a = SIN(dlatitude) * SIN(dlatitude) + COS(rlatitude1) * COS(rlatitude2) * SIN(dlongitude) * SIN(dlongitude);&lt;br /&gt;
    RETURN (6378137 * 2 * ATAN2(SQRT(a), SQRT(1 - a)));&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function formatDecimal(string varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE replacedString VARCHAR(255);&lt;br /&gt;
    SET replacedString = string;&lt;br /&gt;
    SET @decimalSeparator = (SELECT char_value FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(replacedString &amp;lt;&amp;gt; '0.00' AND replacedString &amp;lt;&amp;gt; '0', TRIM(TRAILING '0' FROM replacedString),&lt;br /&gt;
              replacedString)&lt;br /&gt;
    INTO replacedString;&lt;br /&gt;
    SELECT TRIM(TRAILING '.' FROM replacedString) INTO replacedString;&lt;br /&gt;
    SELECT REPLACE(replacedString, '.', IFNULL(@decimalSeparator, '.')) INTO replacedString;&lt;br /&gt;
    RETURN replacedString;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function isBalancedAccountEntryFlow(flowId int) returns int&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE isBalanced INT;&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(SUM(debit) &amp;lt;&amp;gt; SUM(credit), 0, 1)&lt;br /&gt;
    into isBalanced&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE flow_id = flowId&lt;br /&gt;
    GROUP BY flow_id;&lt;br /&gt;
&lt;br /&gt;
    RETURN isBalanced;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function nearestPoint(latRef double, longRef double, distanceMax int) returns varchar(6)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
    DECLARE icao_name VARCHAR(6);&lt;br /&gt;
    DECLARE lenght DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET a = 2 * 6378137 * pi() * distanceMax / (1852 * 60 * 360);&lt;br /&gt;
    SET rlongitude1 = longRef + a / cos(latRef);&lt;br /&gt;
    SET rlongitude2 = longRef - a / cos(latRef);&lt;br /&gt;
    SET rlatitude1 = latRef + a;&lt;br /&gt;
    SET rlatitude2 = latRef - a;&lt;br /&gt;
&lt;br /&gt;
    SELECT loc1.icao_name,&lt;br /&gt;
           distanceBetween2Point(&lt;br /&gt;
                   (SELECT loc2.latitude FROM location AS loc2 WHERE loc2.icao_name = loc1.icao_name),&lt;br /&gt;
                   (SELECT loc3.longitude FROM location AS loc3 WHERE loc3.icao_name = loc1.icao_name),&lt;br /&gt;
                   latRef,&lt;br /&gt;
                   longRef) AS distance&lt;br /&gt;
    FROM location AS loc1&lt;br /&gt;
    WHERE IF(rlongitude2 &amp;lt; rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude2 AND rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude1 AND rlongitude2)&lt;br /&gt;
      AND IF(rlatitude2 &amp;lt; rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude2 AND rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude1 AND rlatitude2)&lt;br /&gt;
    HAVING distance &amp;lt; distanceMax&lt;br /&gt;
    ORDER BY distance&lt;br /&gt;
    LIMIT 1&lt;br /&gt;
    INTO icao_name, lenght;&lt;br /&gt;
&lt;br /&gt;
    RETURN icao_name;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursHundredths(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255);&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    DECLARE decimalSeparator VARCHAR(1);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
    SET decimalSeparator =&lt;br /&gt;
            (SELECT IFNULL(char_value, '.') FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, decimalSeparator, LPAD(FLOOR(remainingTime / 6), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursMinute(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255); # We separate hours computation from roundHours in order to keep the minus sign if hours is 0 but sexacentimal negative&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, ':', LPAD(FLOOR(remainingTime / 10), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function stripChars(word varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE stripWord VARCHAR(255);&lt;br /&gt;
    SET stripWord = word;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[-]', REPLACE(stripWord, '-', ''), stripWord) INTO stripWord;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[ ]', REPLACE(stripWord, ' ', ''), stripWord) INTO stripWord;&lt;br /&gt;
    RETURN stripWord;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryCredit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalCredit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryDebit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit&lt;br /&gt;
    INTO totalDebit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalDebit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function sumValidatedAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME)&lt;br /&gt;
      AND validated = 1;&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
==Table booking==&lt;br /&gt;
&lt;br /&gt;
Le contenu du champ ''aircraft_id'' de la table ''booking'' peut être nul. Dans ce cas, c'est une ancienne réservation effectuée sur une ressource non-existante ou qui n'existe plus; aussi nommé réservation orpheline.&lt;br /&gt;
&lt;br /&gt;
==Table flight==&lt;br /&gt;
&lt;br /&gt;
*airborne :&lt;br /&gt;
**0: Pas en l'air ou fermeture de vol : Le pilote a terminé le vol.&lt;br /&gt;
**1: En l'air ou ouverture de vol : Le pilote remplit le vol avant de voler.&lt;br /&gt;
&lt;br /&gt;
==Champs cachés==&lt;br /&gt;
Les champs suivants ne peuvent être exportés et ne doivent pas être inclus dans une requête SELECT. De plus, un &amp;quot;SELECT *&amp;quot; est interdit quand une des tables contient un champ caché :&lt;br /&gt;
*Table journal : Tous les champs&lt;br /&gt;
*Table log : Tous les champs&lt;br /&gt;
*Table parameter : Tous les champs&lt;br /&gt;
*Table person :&lt;br /&gt;
**hash_password&lt;br /&gt;
*Table structure :&lt;br /&gt;
**address&lt;br /&gt;
**admin_num&lt;br /&gt;
**city&lt;br /&gt;
**country&lt;br /&gt;
**default_notification&lt;br /&gt;
**default_slot_range&lt;br /&gt;
**default_timezone&lt;br /&gt;
**default_view_type&lt;br /&gt;
**email&lt;br /&gt;
**fax&lt;br /&gt;
**first_hour_displayed&lt;br /&gt;
**info_cell&lt;br /&gt;
**lang&lt;br /&gt;
**last_hour_displayed&lt;br /&gt;
**logo&lt;br /&gt;
**logo_name&lt;br /&gt;
**logo_ext&lt;br /&gt;
**logo_size&lt;br /&gt;
**mail_from_address&lt;br /&gt;
**mailing_list_name&lt;br /&gt;
**mailing_list_type&lt;br /&gt;
**min_slot_range&lt;br /&gt;
**name&lt;br /&gt;
**phone&lt;br /&gt;
**state&lt;br /&gt;
**twilight_range&lt;br /&gt;
**usual_profiles&lt;br /&gt;
**welcome_cell&lt;br /&gt;
**zipcode&lt;br /&gt;
*Table oauth_client : Tous les champs&lt;br /&gt;
*Table oauth_access_token : Tous les champs&lt;br /&gt;
*Table oauth_auth_code : Tous les champs&lt;br /&gt;
*Table oauth_refresh_token : Tous les champs&lt;br /&gt;
&lt;br /&gt;
Exemple de requêtes non autorisées :&lt;br /&gt;
&amp;lt;sql&amp;gt;SELECT * FROM structure;&lt;br /&gt;
&lt;br /&gt;
SELECT hash_password FROM person;&lt;br /&gt;
&lt;br /&gt;
SELECT person.id, validity.*&lt;br /&gt;
FROM person&lt;br /&gt;
LEFT JOIN validity ON (person.id=validity.person_id);&amp;lt;/sql&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14400</id>
		<title>Structure de la base de données</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14400"/>
		<updated>2026-04-08T16:42:52Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: Undo revision 14398 by Mbouzar (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Schéma de la structure de la base de données=&lt;br /&gt;
*[[Media:OpenFlyers_database_schema.png|Lien vers schéma fichier .png]]&lt;br /&gt;
&lt;br /&gt;
=Structure=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create table account&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    creation_date    date                          null,&lt;br /&gt;
    name             text                          null,&lt;br /&gt;
    export_account   varchar(255)                  null,&lt;br /&gt;
    activated        tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    category         tinyint(1) unsigned default 0 null,&lt;br /&gt;
    account_type     tinyint(1) unsigned default 0 null,&lt;br /&gt;
    owner_id         int unsigned        default 0 not null,&lt;br /&gt;
    payment_allowed  tinyint(1)          default 0 null,&lt;br /&gt;
    budget_id        int unsigned                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    accounting_id    int unsigned                  null,&lt;br /&gt;
    deactivated_date datetime                      null,&lt;br /&gt;
    group_sales      tinyint(1)          default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of account';&lt;br /&gt;
&lt;br /&gt;
create index idx_owner_id&lt;br /&gt;
    on account (owner_id);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `account_entry` (&lt;br /&gt;
  `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `flow_id` int(11) DEFAULT NULL,&lt;br /&gt;
  `account_date` datetime DEFAULT NULL,&lt;br /&gt;
  `account_id` int(11) DEFAULT NULL,&lt;br /&gt;
  `credit` decimal(15,5) DEFAULT '0.00000',&lt;br /&gt;
  `debit` decimal(15,5) DEFAULT '0.00000',&lt;br /&gt;
  `payment_type` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `payment_description` text,&lt;br /&gt;
  `person_delivery_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `comments` text,&lt;br /&gt;
  `validated` int(1) DEFAULT '0',&lt;br /&gt;
  `exported` int(1) DEFAULT '0',&lt;br /&gt;
  `registration_date` datetime DEFAULT NULL,&lt;br /&gt;
  `budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `product_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `signature` varchar(56) DEFAULT NULL,&lt;br /&gt;
  `signature_date` bigint(13) unsigned DEFAULT NULL,&lt;br /&gt;
  `lettering` int(11) DEFAULT NULL,&lt;br /&gt;
  `lettering_date` datetime DEFAULT NULL,&lt;br /&gt;
  `flow_reversal_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `transaction_id` text,&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  KEY `idx_flow_id` (`flow_id`),&lt;br /&gt;
  KEY `idx_account_date` (`account_date`),&lt;br /&gt;
  KEY `idx_signature_date` (`signature_date`),&lt;br /&gt;
  KEY `flow_reversal_id_idx` (`flow_reversal_id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_link&lt;br /&gt;
(&lt;br /&gt;
    account_id        int unsigned default 0 not null,&lt;br /&gt;
    linked_account_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (account_id, linked_account_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                  null,&lt;br /&gt;
    category               tinyint(1) unsigned default 0 null,&lt;br /&gt;
    activated              tinyint(1)          default 1 null,&lt;br /&gt;
    order_num              int                           null,&lt;br /&gt;
    accounting_id          int unsigned                  null,&lt;br /&gt;
    export_account_pattern varchar(255)                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type_profile&lt;br /&gt;
(&lt;br /&gt;
    account_type_id int unsigned    default 0 not null,&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (account_type_id, profile_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Linked account type and profile';&lt;br /&gt;
&lt;br /&gt;
create table accounting&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)           null,&lt;br /&gt;
    unit_name         varchar(255)           null,&lt;br /&gt;
    symbol            varchar(255)           null,&lt;br /&gt;
    format            tinyint(1)             null,&lt;br /&gt;
    decimal_precision int unsigned default 2 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table accounting_profile&lt;br /&gt;
(&lt;br /&gt;
    accounting_id int unsigned    default 0 not null,&lt;br /&gt;
    profile_id    bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (accounting_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table activity_type&lt;br /&gt;
(&lt;br /&gt;
    id        bigint unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name      varchar(255)              null,&lt;br /&gt;
    order_num int                       null,&lt;br /&gt;
    activated tinyint(1)      default 1 not null,&lt;br /&gt;
    color     int unsigned              null,&lt;br /&gt;
    training  tinyint(1)      default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned     default 0     not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    ref_date        datetime                       null,&lt;br /&gt;
    ref_hours       int                            null,&lt;br /&gt;
    inspection_date datetime                       null,&lt;br /&gt;
    inspection_time int                            null,&lt;br /&gt;
    tolerance_time  int(11) unsigned default 6000  null,&lt;br /&gt;
    last_counter    int                            null,&lt;br /&gt;
    interval_visit  int(11) unsigned default 30000 null,&lt;br /&gt;
    time_alert1     int              default 6000  null,&lt;br /&gt;
    time_alert2     int              default 0     null,&lt;br /&gt;
    time_alert3     int              default -3000 null,&lt;br /&gt;
    day_alert1      smallint(3)      default 15    null,&lt;br /&gt;
    day_alert2      smallint(3)      default 0     null,&lt;br /&gt;
    day_alert3      smallint(3)      default -8    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    id                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_time_formula  varchar(255)        default '%DURATION' null,&lt;br /&gt;
    counter_state        tinyint(2)          default -1          not null,&lt;br /&gt;
    tolerance            int                 default 0           null,&lt;br /&gt;
    autonomy             int                 default 5990        null,&lt;br /&gt;
    true_air_speed       int unsigned        default 0           not null,&lt;br /&gt;
    digit_counter_number tinyint(1) unsigned default 4           not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Types of aircraft';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_allowed_status&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned null,&lt;br /&gt;
    place_num        int unsigned null,&lt;br /&gt;
    status_id        int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of allowed functions for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_mandatory_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    null,&lt;br /&gt;
    activity_type_id bigint unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of compulsory flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    null,&lt;br /&gt;
    activity_type_id bigint unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of uncompatible flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_validity_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned default 0 not null,&lt;br /&gt;
    check_num        int unsigned default 0 not null,&lt;br /&gt;
    primary key (aircraft_type_id, validity_type_id, check_num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Types of qualif required for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table allocation_rule&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    title      varchar(255)         not null,&lt;br /&gt;
    account_id int(10)              not null,&lt;br /&gt;
    keyword    varchar(255)         null,&lt;br /&gt;
    order_num  int(10)              not null,&lt;br /&gt;
    amount     tinyint(1)           not null,&lt;br /&gt;
    mandatory  tinyint(1) default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance&lt;br /&gt;
(&lt;br /&gt;
    account_id      int unsigned                   not null,&lt;br /&gt;
    balance_date_id int unsigned                   not null,&lt;br /&gt;
    debit           decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit          decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    primary key (account_id, balance_date_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance_date&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    balance_date datetime null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    booking_group_id int unsigned null,&lt;br /&gt;
    start_date       datetime     null,&lt;br /&gt;
    end_date         datetime     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_account_entry&lt;br /&gt;
(&lt;br /&gt;
    booking_id            int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_activity_type&lt;br /&gt;
(&lt;br /&gt;
    booking_id       int unsigned default 0 not null,&lt;br /&gt;
    activity_type_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, activity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_changelog&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    booking_id     int unsigned not null,&lt;br /&gt;
    person_id      int unsigned not null,&lt;br /&gt;
    changelog_date datetime     not null,&lt;br /&gt;
    booking_state  text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_person&lt;br /&gt;
(&lt;br /&gt;
    booking_id int unsigned default 0 not null,&lt;br /&gt;
    person_id  int unsigned default 0 not null,&lt;br /&gt;
    place_num  int unsigned           null,&lt;br /&gt;
    status_id  int unsigned           null,&lt;br /&gt;
    primary key (booking_id, person_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_resource&lt;br /&gt;
(&lt;br /&gt;
    booking_id  int unsigned default 0 not null,&lt;br /&gt;
    resource_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `booking_training_program` (&lt;br /&gt;
  `booking_group_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`booking_group_id`,`training_program_id`),&lt;br /&gt;
  CONSTRAINT `booking_training_program_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    group_id    int unsigned default 0 not null,&lt;br /&gt;
    name        varchar(255)           null,&lt;br /&gt;
    order_num   int                    null,&lt;br /&gt;
    export_code varchar(255)           null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name      varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `business_field` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `variable` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `label` varchar(255) NOT NULL,&lt;br /&gt;
  `value_type` varchar(40) NOT NULL,&lt;br /&gt;
  `category` varchar(255) NOT NULL,&lt;br /&gt;
  `order_num` int(11) NOT NULL,&lt;br /&gt;
  `dsn` varchar(20) DEFAULT 'customer',&lt;br /&gt;
  `compulsory_fill` tinyint(1) DEFAULT '0',&lt;br /&gt;
  `linked_category` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `linked_business_field_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `linked_field_name` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `max_display` int(10) DEFAULT '-1',&lt;br /&gt;
  `formula` text,&lt;br /&gt;
  `default_value` text,&lt;br /&gt;
  `placeholder` text,&lt;br /&gt;
  `access_level_required` tinyint(4) NOT NULL DEFAULT '0',&lt;br /&gt;
  `user_access_mode` tinyint(1) NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  UNIQUE KEY `variable` (`variable`),&lt;br /&gt;
  KEY `business_field_linked_business_field_id_fk` (`linked_business_field_id`),&lt;br /&gt;
  CONSTRAINT `business_field_linked_business_field_id_fk` FOREIGN KEY (`linked_business_field_id`) REFERENCES `business_field` (`id`)&lt;br /&gt;
) COMMENT='List of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_activity_type&lt;br /&gt;
(&lt;br /&gt;
    business_field_id       int unsigned    default 0 not null,&lt;br /&gt;
    activity_type_id        bigint unsigned default 0 not null,&lt;br /&gt;
    business_field_group_id int unsigned    default 0 not null,&lt;br /&gt;
    visibility_type         tinyint(1) unsigned       null,&lt;br /&gt;
    primary key (business_field_id, activity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table business_field_content&lt;br /&gt;
(&lt;br /&gt;
    category_id       int unsigned           not null,&lt;br /&gt;
    business_field_id int unsigned default 0 not null,&lt;br /&gt;
    person_id         int unsigned default 0 not null,&lt;br /&gt;
    content           text                   null,&lt;br /&gt;
    placeholder       text                   null,&lt;br /&gt;
    primary key (category_id, business_field_id, person_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Content of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria&lt;br /&gt;
(&lt;br /&gt;
    id        int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255)                   not null,&lt;br /&gt;
    predicate text                           not null,&lt;br /&gt;
    order_num int                            null,&lt;br /&gt;
    dsn       varchar(20) default 'customer' null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria_profile&lt;br /&gt;
(&lt;br /&gt;
    criteria_id int unsigned    not null,&lt;br /&gt;
    profile_id  bigint unsigned not null,&lt;br /&gt;
    primary key (criteria_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    customer_bill_id      int unsigned                   null,&lt;br /&gt;
    product_id            int unsigned                   null,&lt;br /&gt;
    qty                   decimal(15, 2) default 0.00    null,&lt;br /&gt;
    unit_price            decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    bill_date             datetime                       null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_bill_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_bill_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of customer bill stored file';&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    payment_type_id       int unsigned                   null,&lt;br /&gt;
    customer_receipt_id   int unsigned                   null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    receipt_date          datetime                       null,&lt;br /&gt;
    owner_email           varchar(255)                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_display&lt;br /&gt;
(&lt;br /&gt;
    person_id     int unsigned            not null,&lt;br /&gt;
    display_key   varchar(255) default '' not null,&lt;br /&gt;
    display_value text                    null,&lt;br /&gt;
    primary key (person_id, display_key)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_multi_display&lt;br /&gt;
(&lt;br /&gt;
    resource_type char(30)     not null,&lt;br /&gt;
    person_id     int unsigned not null,&lt;br /&gt;
    resource_id   varchar(100) not null,&lt;br /&gt;
    display_value text         null,&lt;br /&gt;
    primary key (resource_type, person_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent&lt;br /&gt;
(&lt;br /&gt;
    id          bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    message_id  varchar(150)     not null,&lt;br /&gt;
    sender      varchar(255)     not null,&lt;br /&gt;
    title       varchar(255)     not null,&lt;br /&gt;
    category    tinyint unsigned not null,&lt;br /&gt;
    category_id int unsigned     not null,&lt;br /&gt;
    constraint message_id_UNIQUE&lt;br /&gt;
        unique (message_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent_recipient&lt;br /&gt;
(&lt;br /&gt;
    id                   bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    email_sent_id        bigint unsigned  not null,&lt;br /&gt;
    person_id            int unsigned     not null,&lt;br /&gt;
    email                varchar(255)     null,&lt;br /&gt;
    recipient_type       tinyint unsigned null,&lt;br /&gt;
    smtp_status_category varchar(30)      null,&lt;br /&gt;
    email_status         tinyint unsigned null,&lt;br /&gt;
    update_date          datetime         not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index email_sent_id_idx&lt;br /&gt;
    on email_sent_recipient (email_sent_id);&lt;br /&gt;
&lt;br /&gt;
create table exceptionnal_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned        null,&lt;br /&gt;
    start_date datetime            null,&lt;br /&gt;
    end_date   datetime            null,&lt;br /&gt;
    presence   tinyint(1) unsigned null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table extra_field_profile&lt;br /&gt;
(&lt;br /&gt;
    business_field_id                  int unsigned    default 0 not null,&lt;br /&gt;
    booking_popup_display_4_profile_id bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (business_field_id, booking_popup_display_4_profile_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Linked extra field and profile';&lt;br /&gt;
&lt;br /&gt;
create table facebook&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    category    int unsigned not null,&lt;br /&gt;
    owner_id    int unsigned not null,&lt;br /&gt;
    small       blob         null,&lt;br /&gt;
    original    mediumblob   not null,&lt;br /&gt;
    label       text         null,&lt;br /&gt;
    description text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_icao&lt;br /&gt;
(&lt;br /&gt;
    icao varchar(6) default '' not null&lt;br /&gt;
        primary key&lt;br /&gt;
)&lt;br /&gt;
    comment 'favorite airfield list';&lt;br /&gt;
&lt;br /&gt;
create table favorite_report&lt;br /&gt;
(&lt;br /&gt;
    report_id int unsigned not null&lt;br /&gt;
        primary key&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_business_field&lt;br /&gt;
(&lt;br /&gt;
    report_id         int unsigned not null,&lt;br /&gt;
    business_field_id int unsigned not null,&lt;br /&gt;
    default_value     text         null,&lt;br /&gt;
    primary key (report_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_profile&lt;br /&gt;
(&lt;br /&gt;
    report_id  int unsigned              not null,&lt;br /&gt;
    profile_id bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (report_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table fhp_aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int(10) default 0 not null,&lt;br /&gt;
    aircraft_type_id int(10) default 0 not null,&lt;br /&gt;
    primary key (fhp_id, aircraft_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing aircraft type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int(10)             default 0 not null,&lt;br /&gt;
    activity_type_id bigint unsigned     default 0 not null,&lt;br /&gt;
    excluded         tinyint(1) unsigned default 0 null,&lt;br /&gt;
    primary key (fhp_id, activity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing flight type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_profile&lt;br /&gt;
(&lt;br /&gt;
    fhp_id     int unsigned                  not null,&lt;br /&gt;
    profile_id bigint unsigned               not null,&lt;br /&gt;
    place_num  tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    primary key (fhp_id, profile_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table file&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name          varchar(255)        null,&lt;br /&gt;
    content       longblob            null,&lt;br /&gt;
    file_type     varchar(255)        null,&lt;br /&gt;
    category      tinyint(1) unsigned null,&lt;br /&gt;
    owner_id      int(10)             null,&lt;br /&gt;
    file_group_id int(10)             null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of stored file';&lt;br /&gt;
&lt;br /&gt;
create table file_group&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_id           int unsigned               null,&lt;br /&gt;
    start_date            datetime                   null,&lt;br /&gt;
    duration              int                        null,&lt;br /&gt;
    activity_type_id      bigint unsigned            null,&lt;br /&gt;
    people_onboard        int unsigned               null,&lt;br /&gt;
    departure_location_id int unsigned               null,&lt;br /&gt;
    arrival_location_id   int unsigned               null,&lt;br /&gt;
    counter_departure     int unsigned               null,&lt;br /&gt;
    counter_arrival       int unsigned               null,&lt;br /&gt;
    landing_number        int(10)                    null,&lt;br /&gt;
    airborne              tinyint(1) unsigned        null,&lt;br /&gt;
    validated             tinyint unsigned default 0 null,&lt;br /&gt;
    departure_icao_id     varchar(6)                 null,&lt;br /&gt;
    arrival_icao_id       varchar(6)                 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_account_entry&lt;br /&gt;
(&lt;br /&gt;
    flight_id        int unsigned default 0 not null,&lt;br /&gt;
    account_entry_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, account_entry_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight account entry join';&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on flight_account_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table flight_hours_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name               text                          null,&lt;br /&gt;
    price_formula      text                          null,&lt;br /&gt;
    left_account_id    int unsigned                  null,&lt;br /&gt;
    right_account_id   int unsigned                  null,&lt;br /&gt;
    left_account_type  tinyint(1) unsigned default 0 null,&lt;br /&gt;
    right_account_type tinyint(1) unsigned default 0 null,&lt;br /&gt;
    order_num          int                           null,&lt;br /&gt;
    credit_budget_id   int unsigned                  null,&lt;br /&gt;
    debit_budget_id    int unsigned                  null,&lt;br /&gt;
    product_id         int unsigned                  null,&lt;br /&gt;
    sale_trigger_id    int unsigned        default 0 null,&lt;br /&gt;
    query              text                          null,&lt;br /&gt;
    variable_formula   text                          null,&lt;br /&gt;
    business_field_id  int unsigned                  null,&lt;br /&gt;
    debit_bill_num     int unsigned                  null,&lt;br /&gt;
    credit_bill_num    int unsigned                  null,&lt;br /&gt;
    qty_formula        text                          null,&lt;br /&gt;
    unit_price_formula text                          null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight hours pricing formula';&lt;br /&gt;
&lt;br /&gt;
create table flight_pilot&lt;br /&gt;
(&lt;br /&gt;
    flight_id int unsigned           not null,&lt;br /&gt;
    pilot_id  int unsigned           not null,&lt;br /&gt;
    status_id int unsigned           null,&lt;br /&gt;
    num       int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, pilot_id, num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of crew for each flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_tank_qty&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_id    int unsigned                not null,&lt;br /&gt;
    tank_id      int unsigned                not null,&lt;br /&gt;
    quantity     varchar(255) default '0.00' not null,&lt;br /&gt;
    after_flight tinyint(1)   default 0      not null,&lt;br /&gt;
    account_id   int unsigned                null,&lt;br /&gt;
    pay_type     tinyint(1) unsigned         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `flight_track` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `flight_id` int(10) NOT NULL,&lt;br /&gt;
  `track` mediumblob NOT NULL,&lt;br /&gt;
  `file_type` varchar(255) DEFAULT 'kml',&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight_type_mandatory_validity_type&lt;br /&gt;
(&lt;br /&gt;
    activity_type_id bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (activity_type_id, validity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of mandatory qualification for each flight type';&lt;br /&gt;
&lt;br /&gt;
create table import&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label               varchar(255)                          not null,&lt;br /&gt;
    order_num           int                                   null,&lt;br /&gt;
    import_file_type    varchar(255) default 'csv-comma-CRLF' not null,&lt;br /&gt;
    match_query         text                                  null,&lt;br /&gt;
    uptodate_test_query text                                  null,&lt;br /&gt;
    update_query        text                                  null,&lt;br /&gt;
    update_activated    tinyint(1)   default 0                not null,&lt;br /&gt;
    login               varchar(255)                          null,&lt;br /&gt;
    hash_password       varchar(255)                          null,&lt;br /&gt;
    sync_task_name      varchar(255)                          null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of import';&lt;br /&gt;
&lt;br /&gt;
create table ip_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    ip          varchar(255)        not null,&lt;br /&gt;
    counter     tinyint(1) unsigned not null,&lt;br /&gt;
    expire_date datetime            not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'BLACKLISTED IP';&lt;br /&gt;
&lt;br /&gt;
create table journal&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login     varchar(255)           null,&lt;br /&gt;
    date_log  datetime               null,&lt;br /&gt;
    rights    text                   null,&lt;br /&gt;
    rights2   text                   null,&lt;br /&gt;
    action    varchar(255)           null,&lt;br /&gt;
    person_id int unsigned default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_action&lt;br /&gt;
    on journal (action);&lt;br /&gt;
&lt;br /&gt;
create index idx_date_log&lt;br /&gt;
    on journal (date_log);&lt;br /&gt;
&lt;br /&gt;
create table key_alert&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    alert_date datetime               null,&lt;br /&gt;
    status     int unsigned default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Key alerts';&lt;br /&gt;
&lt;br /&gt;
create table key_assignment&lt;br /&gt;
(&lt;br /&gt;
    key_id      tinyint(2) unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    key_name    tinytext                      null,&lt;br /&gt;
    aircraft_id int unsigned        default 0 null,&lt;br /&gt;
    key_state   tinyint(1) unsigned default 0 null,&lt;br /&gt;
    key_word    bigint unsigned     default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table key_host&lt;br /&gt;
(&lt;br /&gt;
    id       tinyint(2) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    timeout  tinyint(2)          default 10          not null,&lt;br /&gt;
    num_key  tinyint(2) unsigned default 10          not null,&lt;br /&gt;
    ipkey    varchar(50)         default '127.0.0.1' not null,&lt;br /&gt;
    httpport int                 default 4080        not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table key_log&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    log_date  datetime     null,&lt;br /&gt;
    action    varchar(255) null,&lt;br /&gt;
    message   varchar(255) null,&lt;br /&gt;
    key_id    int unsigned null,&lt;br /&gt;
    person_id int unsigned null,&lt;br /&gt;
    xmlrpc    int unsigned not null,&lt;br /&gt;
    error     varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Key logs';&lt;br /&gt;
&lt;br /&gt;
create table location&lt;br /&gt;
(&lt;br /&gt;
    icao_name       varchar(6)       not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name            varchar(64)      not null,&lt;br /&gt;
    latitude        double           null,&lt;br /&gt;
    longitude       double           null,&lt;br /&gt;
    altitude        int(7)           null,&lt;br /&gt;
    weather_station int(1) unsigned  null,&lt;br /&gt;
    asked_counter   bigint default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'airfields coord';&lt;br /&gt;
&lt;br /&gt;
create table log&lt;br /&gt;
(&lt;br /&gt;
    journal_id  int unsigned not null,&lt;br /&gt;
    action      varchar(255) null,&lt;br /&gt;
    table_name  varchar(255) null,&lt;br /&gt;
    field_name  varchar(255) null,&lt;br /&gt;
    field_value varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'part of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_field_value&lt;br /&gt;
    on log (field_value);&lt;br /&gt;
&lt;br /&gt;
create index idx_journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create index journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create table logger&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    serial_number int unsigned                      null,&lt;br /&gt;
    color         varchar(20)         default 'red' not null,&lt;br /&gt;
    activated     tinyint(1) unsigned default 1     not null,&lt;br /&gt;
    order_num     int unsigned                      not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Logger parameters';&lt;br /&gt;
&lt;br /&gt;
create table login_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login       varchar(255)     not null,&lt;br /&gt;
    counter     tinyint unsigned not null,&lt;br /&gt;
    expire_date datetime         not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'BLACKLISTED LOGIN';&lt;br /&gt;
&lt;br /&gt;
create table m_component&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id           int unsigned        default 0 not null,&lt;br /&gt;
    m_component_type_id int unsigned                  null,&lt;br /&gt;
    resource_id         int unsigned                  null,&lt;br /&gt;
    order_num           int                           not null,&lt;br /&gt;
    serial_number       varchar(255)                  null,&lt;br /&gt;
    brandnew_date       datetime                      null,&lt;br /&gt;
    activated           tinyint(1) unsigned default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id              int unsigned        default 0 not null,&lt;br /&gt;
    resource_type_id       int                           null,&lt;br /&gt;
    m_classification_id    int                           null,&lt;br /&gt;
    is_maintenance_check   tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    order_num              int                           not null,&lt;br /&gt;
    label                  varchar(255)                  null,&lt;br /&gt;
    description            varchar(255)                  null,&lt;br /&gt;
    manufacturer           varchar(255)                  null,&lt;br /&gt;
    manufacturer_reference varchar(255)                  null,&lt;br /&gt;
    part_number            varchar(255)                  null,&lt;br /&gt;
    periodicity            int unsigned                  null,&lt;br /&gt;
    tolerance              int unsigned        default 0 not null,&lt;br /&gt;
    calendar_periodicity   int unsigned                  null,&lt;br /&gt;
    calendar_tolerance     int unsigned        default 0 not null,&lt;br /&gt;
    activated              tinyint(1) unsigned default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type_parentality&lt;br /&gt;
(&lt;br /&gt;
    m_component_type_id        int unsigned not null,&lt;br /&gt;
    m_component_type_parent_id int unsigned not null,&lt;br /&gt;
    primary key (m_component_type_id, m_component_type_parent_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_history&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    m_component_id         int unsigned                  not null,&lt;br /&gt;
    install_date           datetime                      null,&lt;br /&gt;
    remove_date            datetime                      null,&lt;br /&gt;
    total_hours_on_install int unsigned        default 0 not null,&lt;br /&gt;
    threshold_hours        int unsigned        default 0 not null,&lt;br /&gt;
    threshold_date         datetime                      null,&lt;br /&gt;
    threshold_date_locked  tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    threshold_hours_locked tinyint(1) unsigned default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_operation&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    content             text         null,&lt;br /&gt;
    m_component_type_id int unsigned not null,&lt;br /&gt;
    order_num           int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_history&lt;br /&gt;
(&lt;br /&gt;
    id                                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                          int unsigned                  null,&lt;br /&gt;
    maintenance_program_id               int unsigned                  null,&lt;br /&gt;
    frame_hours_at_work_start            int(10)                       null,&lt;br /&gt;
    date_work_end                        date                          null,&lt;br /&gt;
    min_overhaul_counter                 int(10)                       null,&lt;br /&gt;
    max_overhaul_counter                 int(10)                       null,&lt;br /&gt;
    min_overhaul_date                    date                          null,&lt;br /&gt;
    max_overhaul_date                    date                          null,&lt;br /&gt;
    min_next_overhaul_counter            int(10)                       null,&lt;br /&gt;
    max_next_overhaul_counter            int(10)                       null,&lt;br /&gt;
    min_next_overhaul_date               date                          null,&lt;br /&gt;
    max_next_overhaul_date               date                          null,&lt;br /&gt;
    first_reference_visit                tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    is_visit                             tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    action_type                          tinyint(1) unsigned           null,&lt;br /&gt;
    previous_line_linked_time_action     int(10)                       null,&lt;br /&gt;
    previous_line_linked_calendar_action int(10)                       null,&lt;br /&gt;
    next_line_linked_time_action         int(10)                       null,&lt;br /&gt;
    next_line_linked_calendar_action     int(10)                       null,&lt;br /&gt;
    time_tolerance                       int(10)                       null,&lt;br /&gt;
    calendar_tolerance                   int(10)                       null,&lt;br /&gt;
    time_periodicity_component           int(10)                       null,&lt;br /&gt;
    calendar_periodicity_component       int(10)                       null,&lt;br /&gt;
    time_periodicity                     int(10)                       null,&lt;br /&gt;
    calendar_periodicity                 int(10)                       null,&lt;br /&gt;
    reference_overhaul_counter           int(10)                       null,&lt;br /&gt;
    reference_overhaul_date              date                          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_program&lt;br /&gt;
(&lt;br /&gt;
    id                                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                           int unsigned                  null,&lt;br /&gt;
    component_type_id                     int unsigned                  null,&lt;br /&gt;
    description                           varchar(255)                  null,&lt;br /&gt;
    time_periodicity                      int(10)                       null,&lt;br /&gt;
    calendar_periodicity                  int(10)                       null,&lt;br /&gt;
    time_first_reference                  int(10)                       null,&lt;br /&gt;
    calendar_first_reference              date                          null,&lt;br /&gt;
    time_tolerance                        int(10)                       null,&lt;br /&gt;
    calendar_tolerance                    int(10)                       null,&lt;br /&gt;
    frame_hours_at_work_start             int(10)                       null,&lt;br /&gt;
    date_work_end                         date                          null,&lt;br /&gt;
    time_elapsed                          int(10)                       null,&lt;br /&gt;
    calendar_elapsed                      int(10)                       null,&lt;br /&gt;
    time_remaining                        int(10)                       null,&lt;br /&gt;
    calendar_remaining                    int(10)                       null,&lt;br /&gt;
    min_next_overhaul_counter             int(10)                       null,&lt;br /&gt;
    max_next_overhaul_counter             int(10)                       null,&lt;br /&gt;
    min_next_overhaul_date                date                          null,&lt;br /&gt;
    max_next_overhaul_date                date                          null,&lt;br /&gt;
    effective_hours_at_work_start         int(10)                       null,&lt;br /&gt;
    theoretical_overhaul_counter          int(10)                       null,&lt;br /&gt;
    intelligent_overhaul_counter          int(10)                       null,&lt;br /&gt;
    intelligent_min_next_overhaul_counter int(10)                       null,&lt;br /&gt;
    intelligent_max_next_overhaul_counter int(10)                       null,&lt;br /&gt;
    effective_date_at_work_end            date                          null,&lt;br /&gt;
    theoretical_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_min_next_overhaul_date    date                          null,&lt;br /&gt;
    intelligent_max_next_overhaul_date    date                          null,&lt;br /&gt;
    overlapping_group_id                  int unsigned                  null,&lt;br /&gt;
    is_visit_rg                           tinyint(1) unsigned default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_view&lt;br /&gt;
(&lt;br /&gt;
    id                                                int unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    frame_total_time                                  int(10)                null,&lt;br /&gt;
    frame_time_since_rg                               int(10)                null,&lt;br /&gt;
    engine_time_since_rg                              int(10)                null,&lt;br /&gt;
    propeller_time_since_rg                           int(10)                null,&lt;br /&gt;
    potential_remaining_next_time_action              int(10)                null,&lt;br /&gt;
    potential_remaining_next_time_visit               int(10)                null,&lt;br /&gt;
    potential_remaining_next_priority_time_action     int(10)                null,&lt;br /&gt;
    potential_remaining_next_calendar_action          int(10)                null,&lt;br /&gt;
    potential_remaining_next_calendar_visit           int(10)                null,&lt;br /&gt;
    potential_remaining_next_priority_calendar_action int(10)                null,&lt;br /&gt;
    next_time_action_id                               int unsigned           null,&lt;br /&gt;
    next_time_visit_id                                int unsigned           null,&lt;br /&gt;
    next_priority_time_action_id                      int unsigned           null,&lt;br /&gt;
    next_calendar_action_id                           int unsigned           null,&lt;br /&gt;
    next_calendar_visit_id                            int unsigned           null,&lt;br /&gt;
    next_priority_calendar_action_id                  int unsigned           null,&lt;br /&gt;
    overhaul_counter_action                           int(10)                null,&lt;br /&gt;
    overhaul_counter_visit                            int(10)                null,&lt;br /&gt;
    overhaul_date_action                              date                   null,&lt;br /&gt;
    overhaul_date_visit                               date                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table map_logger_monitoring&lt;br /&gt;
(&lt;br /&gt;
    record_id  int unsigned not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    count_data int unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'link between flight and track';&lt;br /&gt;
&lt;br /&gt;
create table map_track&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned                  null,&lt;br /&gt;
    start_data    int unsigned                  null,&lt;br /&gt;
    number        int unsigned                  null,&lt;br /&gt;
    start_time    datetime                      null,&lt;br /&gt;
    latitude_max  double                        null,&lt;br /&gt;
    longitude_max double                        null,&lt;br /&gt;
    latitude_min  double                        null,&lt;br /&gt;
    longitude_min double                        null,&lt;br /&gt;
    visible       tinyint(1) unsigned default 1 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Tracks split from GDR';&lt;br /&gt;
&lt;br /&gt;
create table nationality&lt;br /&gt;
(&lt;br /&gt;
    code  char(2) default '' not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255)       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table parameter&lt;br /&gt;
(&lt;br /&gt;
    code       varchar(255)                  not null,&lt;br /&gt;
    key_id     int unsigned        default 0 not null,&lt;br /&gt;
    enabled    tinyint(1) unsigned default 0 null,&lt;br /&gt;
    int_value  int unsigned        default 0 null,&lt;br /&gt;
    char_value text                          null,&lt;br /&gt;
    primary key (code, key_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table payment_summary_file&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type       varchar(255)            null,&lt;br /&gt;
    content         longblob                null,&lt;br /&gt;
    record_date     datetime                null,&lt;br /&gt;
    total_entry     int unsigned            null,&lt;br /&gt;
    total_amount    decimal(15, 5) unsigned null,&lt;br /&gt;
    payment_type_id int unsigned            null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `payment_type` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `name` text,&lt;br /&gt;
  `text_field_label` text,&lt;br /&gt;
  `only_admin` tinyint(1) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `pos_key_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `treasury_account_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `person_delivery` tinyint(1) unsigned DEFAULT '0',&lt;br /&gt;
  `person_budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `treasury_budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `minimum_amount` decimal(10,0) DEFAULT NULL,&lt;br /&gt;
  `maximum_amount` decimal(10,0) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
) COMMENT='type of payment description';&lt;br /&gt;
&lt;br /&gt;
create table person&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                                      not null,&lt;br /&gt;
    hash_password          varchar(255)                                      not null,&lt;br /&gt;
    first_name             varchar(255)                                      null,&lt;br /&gt;
    last_name              varchar(255)                                      null,&lt;br /&gt;
    profile                bigint unsigned     default 0                     not null,&lt;br /&gt;
    view_type              int unsigned                                      null,&lt;br /&gt;
    view_width             tinyint unsigned    default 12                    not null,&lt;br /&gt;
    view_height            tinyint(4) unsigned default 30                    not null,&lt;br /&gt;
    aircrafts_viewed       varchar(255)                                      null,&lt;br /&gt;
    inst_viewed            varchar(255)                                      null,&lt;br /&gt;
    email                  varchar(255)                                      null,&lt;br /&gt;
    timezone               varchar(255)                                      null,&lt;br /&gt;
    address                varchar(255)                                      null,&lt;br /&gt;
    zipcode                varchar(255)                                      null,&lt;br /&gt;
    city                   varchar(255)                                      null,&lt;br /&gt;
    state                  varchar(255)                                      null,&lt;br /&gt;
    country                varchar(255)                                      null,&lt;br /&gt;
    home_phone             varchar(255)                                      null,&lt;br /&gt;
    work_phone             varchar(255)                                      null,&lt;br /&gt;
    cell_phone             varchar(255)                                      null,&lt;br /&gt;
    lang                   varchar(255)                                      null,&lt;br /&gt;
    notification           smallint unsigned                                 null,&lt;br /&gt;
    activated              tinyint(1) unsigned default 1                     null,&lt;br /&gt;
    birthdate              datetime            default '0000-00-00 00:00:00' null,&lt;br /&gt;
    sex                    tinyint(1) unsigned default 0                     not null,&lt;br /&gt;
    nationality            char(2)                                           null,&lt;br /&gt;
    total_flight_time      int unsigned        default 0                     null,&lt;br /&gt;
    date_total_flight_time datetime                                          null,&lt;br /&gt;
    guid                   varchar(255)                                      null,&lt;br /&gt;
    activity_notification  bigint unsigned                                   null,&lt;br /&gt;
    constraint idx_name&lt;br /&gt;
        unique (name),&lt;br /&gt;
    constraint name_3&lt;br /&gt;
        unique (name)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table person_awaiting_activation&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login           varchar(255)        not null,&lt;br /&gt;
    ip              varchar(255)        not null,&lt;br /&gt;
    code            varchar(255)        not null,&lt;br /&gt;
    category        varchar(255)        not null,&lt;br /&gt;
    expiration_date datetime            null,&lt;br /&gt;
    used            tinyint(1) unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'member_awaiting_activation';&lt;br /&gt;
&lt;br /&gt;
create table product&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label       varchar(255)                  not null,&lt;br /&gt;
    unit        varchar(255)                  not null,&lt;br /&gt;
    free_sale   tinyint(1)          default 0 not null,&lt;br /&gt;
    locked      tinyint(1) unsigned default 0 null,&lt;br /&gt;
    variable_id int unsigned                  null,&lt;br /&gt;
    sale_type   tinyint(1) unsigned           null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile&lt;br /&gt;
(&lt;br /&gt;
    id                bigint unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)              null,&lt;br /&gt;
    permits           int unsigned              null,&lt;br /&gt;
    permits2          int unsigned    default 0 not null,&lt;br /&gt;
    permits3          int unsigned    default 0 not null,&lt;br /&gt;
    pictogram         int unsigned              null,&lt;br /&gt;
    default_status_id int unsigned              null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_accounting_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id    bigint unsigned default 0 not null,&lt;br /&gt;
    accounting_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, accounting_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_extra_field_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned default 0 not null,&lt;br /&gt;
    business_field_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_profile_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id          bigint unsigned not null,&lt;br /&gt;
    viewable_profile_id bigint unsigned not null,&lt;br /&gt;
    primary key (profile_id, viewable_profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_required_account_type&lt;br /&gt;
(&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    account_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, account_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_place&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned default 0 not null,&lt;br /&gt;
    resource_type_id int unsigned    default 0 not null,&lt;br /&gt;
    place_num        int unsigned              not null,&lt;br /&gt;
    primary key (profile_id, resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id                bigint unsigned not null,&lt;br /&gt;
    viewable_resource_type_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, viewable_resource_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id  int unsigned    default 0 not null,&lt;br /&gt;
    manage4oneself    int(1)          default 0 not null,&lt;br /&gt;
    certify           int(1)          default 0 not null,&lt;br /&gt;
    optional_contract tinyint(1)      default 0 not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_return&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    psp_transaction_id int unsigned null,&lt;br /&gt;
    bank_answer        text         null,&lt;br /&gt;
    bank_misc          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    credit_account_id int unsigned           not null,&lt;br /&gt;
    debit_account_id  int unsigned           not null,&lt;br /&gt;
    transaction_date  datetime               not null,&lt;br /&gt;
    amount            float                  not null,&lt;br /&gt;
    description       varchar(255)           null,&lt;br /&gt;
    payment_type_id   int unsigned           not null,&lt;br /&gt;
    state             int unsigned default 0 not null,&lt;br /&gt;
    token             text                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction_account_entry&lt;br /&gt;
(&lt;br /&gt;
    psp_transaction_id    int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (psp_transaction_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table regular_presence_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned     null,&lt;br /&gt;
    start_day  tinyint unsigned null,&lt;br /&gt;
    end_day    tinyint unsigned null,&lt;br /&gt;
    start_hour time             null,&lt;br /&gt;
    end_hour   time             null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name             varchar(255)                  null,&lt;br /&gt;
    resource_type_id int unsigned                  null,&lt;br /&gt;
    comments         varchar(255)                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    activated        tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    bookable         int unsigned        default 1 null,&lt;br /&gt;
    physical         int unsigned        default 1 null,&lt;br /&gt;
    color            int unsigned                  null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of resource';&lt;br /&gt;
&lt;br /&gt;
create table resource_exceptional_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_date  datetime            null,&lt;br /&gt;
    end_date    datetime            null,&lt;br /&gt;
    presence    tinyint(1) unsigned null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_regular_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_day   tinyint(1) unsigned null,&lt;br /&gt;
    end_day     tinyint(1) unsigned null,&lt;br /&gt;
    start_hour  time                null,&lt;br /&gt;
    end_hour    time                null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_type&lt;br /&gt;
(&lt;br /&gt;
    id                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                 varchar(255)                   null,&lt;br /&gt;
    category             int unsigned                   null,&lt;br /&gt;
    seats_available      int                 default -1 null,&lt;br /&gt;
    comments             varchar(255)                   null,&lt;br /&gt;
    order_num            int                            null,&lt;br /&gt;
    activated            tinyint(1) unsigned default 1  not null,&lt;br /&gt;
    max_booking_duration int(10)             default -1 null,&lt;br /&gt;
    pictogram            int unsigned                   null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of resource type';&lt;br /&gt;
&lt;br /&gt;
create table resource_type_place_tag&lt;br /&gt;
(&lt;br /&gt;
    resource_type_id int unsigned default 0  not null,&lt;br /&gt;
    place_num        tinyint(1) unsigned     not null,&lt;br /&gt;
    place_tag        varchar(255)            null,&lt;br /&gt;
    place_quantity   int(10)      default -1 null,&lt;br /&gt;
    primary key (resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_stock&lt;br /&gt;
(&lt;br /&gt;
    id                           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    product_id                   int unsigned    null,&lt;br /&gt;
    stock_id                     int unsigned    not null,&lt;br /&gt;
    stock_variation_qty_per_sale float default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_validity_type&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned not null,&lt;br /&gt;
    new_formula      varchar(255) null,&lt;br /&gt;
    update_formula   varchar(255) null,&lt;br /&gt;
    product_id       int unsigned null,&lt;br /&gt;
    constraint validity_type_id&lt;br /&gt;
        unique (validity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of validity type into sale';&lt;br /&gt;
&lt;br /&gt;
create index idx_product&lt;br /&gt;
    on sale_2_validity_type (product_id);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    price_formula       text                          null,&lt;br /&gt;
    debit_account_id    int unsigned                  null,&lt;br /&gt;
    credit_account_id   int unsigned                  null,&lt;br /&gt;
    debit_account_type  tinyint(1) unsigned default 0 null,&lt;br /&gt;
    credit_account_type tinyint(1) unsigned default 0 null,&lt;br /&gt;
    credit_budget_id    int unsigned                  null,&lt;br /&gt;
    debit_budget_id     int unsigned                  null,&lt;br /&gt;
    order_num           int                           null,&lt;br /&gt;
    label               varchar(255)                  null,&lt;br /&gt;
    variable_formula    varchar(255)                  null,&lt;br /&gt;
    debit_bill_num      int unsigned                  null,&lt;br /&gt;
    credit_bill_num     int unsigned                  null,&lt;br /&gt;
    qty_formula         text                          null,&lt;br /&gt;
    unit_price_formula  text                          null,&lt;br /&gt;
    added_product_id    int unsigned                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_product&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned default 0 not null,&lt;br /&gt;
    product_id      int unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, product_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_profile&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned              not null,&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_trigger&lt;br /&gt;
(&lt;br /&gt;
    id             int(10) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name           varchar(255)                  null,&lt;br /&gt;
    event          varchar(255)                  null,&lt;br /&gt;
    locked         tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    query          text                          null,&lt;br /&gt;
    validate_entry tinyint(1)          default 0 null,&lt;br /&gt;
    group_sales    tinyint(1)          default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of sale trigger';&lt;br /&gt;
&lt;br /&gt;
create table spreadsheet_parameter&lt;br /&gt;
(&lt;br /&gt;
    file_number       int(10)      not null,&lt;br /&gt;
    spreadsheet_key   varchar(255) not null,&lt;br /&gt;
    spreadsheet_value varchar(255) not null,&lt;br /&gt;
    file_name         varchar(255) null,&lt;br /&gt;
    google_url        varchar(255) not null,&lt;br /&gt;
    file_type         int unsigned null,&lt;br /&gt;
    primary key (file_number, spreadsheet_key, spreadsheet_value)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table statistic&lt;br /&gt;
(&lt;br /&gt;
    name       varchar(255)                not null,&lt;br /&gt;
    of_version tinyint(3)     default 0    not null,&lt;br /&gt;
    value      decimal(15, 2) default 0.00 not null,&lt;br /&gt;
    primary key (name, of_version)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table status&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    abbrev    varchar(255) null,&lt;br /&gt;
    name      varchar(255) null,&lt;br /&gt;
    pictogram int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of functions for pilot';&lt;br /&gt;
&lt;br /&gt;
create table stock&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label         varchar(255) not null,&lt;br /&gt;
    stock_type_id int unsigned not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_level&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id   int unsigned    not null,&lt;br /&gt;
    qty        float default 0 not null,&lt;br /&gt;
    stock_date datetime        null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_type&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null,&lt;br /&gt;
    unit  varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id       int unsigned                  not null,&lt;br /&gt;
    qty            float               default 0 not null,&lt;br /&gt;
    variation_date datetime                      null,&lt;br /&gt;
    validated      tinyint(1) unsigned default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation_account_entry&lt;br /&gt;
(&lt;br /&gt;
    product_id            int unsigned default 0 not null,&lt;br /&gt;
    stock_variation_id    int unsigned           not null,&lt;br /&gt;
    account_entry_flow_id int unsigned           not null,&lt;br /&gt;
    person_id             int unsigned           not null,&lt;br /&gt;
    primary key (product_id, stock_variation_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on stock_variation_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table structure&lt;br /&gt;
(&lt;br /&gt;
    id                            int(10)         default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                          varchar(255)              null,&lt;br /&gt;
    info_cell                     text                      null,&lt;br /&gt;
    logo                          longblob                  null,&lt;br /&gt;
    logo_name                     varchar(255)              null,&lt;br /&gt;
    logo_ext                      varchar(25)               null,&lt;br /&gt;
    logo_size                     int                       null,&lt;br /&gt;
    first_hour_displayed          time                      null,&lt;br /&gt;
    last_hour_displayed           time                      null,&lt;br /&gt;
    usual_profiles                bigint unsigned default 0 not null,&lt;br /&gt;
    icao                          varchar(6)                null,&lt;br /&gt;
    default_slot_range            int unsigned              null,&lt;br /&gt;
    min_slot_range                tinyint unsigned          null,&lt;br /&gt;
    twilight_range                tinyint unsigned          null,&lt;br /&gt;
    mailing_list_name             varchar(255)              null,&lt;br /&gt;
    mailing_list_type             varchar(255)              null,&lt;br /&gt;
    structure_site_url            varchar(255)              null,&lt;br /&gt;
    default_timezone              varchar(255)              not null,&lt;br /&gt;
    lang                          varchar(255)              not null,&lt;br /&gt;
    admin_num                     int unsigned              not null,&lt;br /&gt;
    default_view_type             int unsigned              null,&lt;br /&gt;
    address                       varchar(255)              null,&lt;br /&gt;
    zipcode                       varchar(255)              null,&lt;br /&gt;
    city                          varchar(255)              null,&lt;br /&gt;
    state                         varchar(255)              null,&lt;br /&gt;
    country                       varchar(255)              null,&lt;br /&gt;
    phone                         varchar(255)              null,&lt;br /&gt;
    fax                           varchar(255)              null,&lt;br /&gt;
    email                         varchar(255)              null,&lt;br /&gt;
    default_notification          int(3) unsigned           null,&lt;br /&gt;
    welcome_cell                  text                      null,&lt;br /&gt;
    business                      text                      null,&lt;br /&gt;
    default_activity_notification bigint unsigned           null,&lt;br /&gt;
    siren                         int(10)                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_bill_type_id int unsigned         not null,&lt;br /&gt;
    bill_date             datetime             null,&lt;br /&gt;
    description           varchar(255)         null,&lt;br /&gt;
    ordinal               int unsigned         not null,&lt;br /&gt;
    validated             tinyint(1) default 0 null,&lt;br /&gt;
    supplier_bill_file_id int(10)              null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_account_entry&lt;br /&gt;
(&lt;br /&gt;
    supplier_bill_id      int unsigned not null,&lt;br /&gt;
    account_entry_flow_id int unsigned not null,&lt;br /&gt;
    primary key (supplier_bill_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on supplier_bill_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_email_parsed&lt;br /&gt;
(&lt;br /&gt;
    id                    int(10) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid                   int(10)      null,&lt;br /&gt;
    email_address         varchar(255) null,&lt;br /&gt;
    supplier_bill_file_id int(10)      null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null,&lt;br /&gt;
    name      varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_type&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_account_id int unsigned not null,&lt;br /&gt;
    name                varchar(255) null,&lt;br /&gt;
    account_id          int unsigned not null,&lt;br /&gt;
    vat_account_id      int unsigned null,&lt;br /&gt;
    supplier_budget_id  int unsigned null,&lt;br /&gt;
    account_budget_id   int unsigned null,&lt;br /&gt;
    vat_budget_id       int unsigned null,&lt;br /&gt;
    rule                text         null,&lt;br /&gt;
    sender_email        varchar(255) null,&lt;br /&gt;
    subject             varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table table_trigger&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    monitored_table varchar(255) not null,&lt;br /&gt;
    trigger_formula varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table tank&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_type_id   int unsigned                 not null,&lt;br /&gt;
    tank_type_id       int unsigned                 not null,&lt;br /&gt;
    unit_id            int unsigned                 not null,&lt;br /&gt;
    label              varchar(255)                 not null,&lt;br /&gt;
    max_quantity       decimal(15, 2) default -1.00 not null,&lt;br /&gt;
    unlimited_quantity int unsigned   default 1     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table track_record&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    in_progress            tinyint(1) unsigned                    null,&lt;br /&gt;
    start_date             datetime default '0000-00-00 00:00:00' null,&lt;br /&gt;
    activated              tinyint(1) unsigned                    null,&lt;br /&gt;
    datechsys_track_id     int unsigned                           null,&lt;br /&gt;
    resource_cat           int unsigned                           not null,&lt;br /&gt;
    resource_id            int unsigned                           not null,&lt;br /&gt;
    additional_information int unsigned                           null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of flight record';&lt;br /&gt;
&lt;br /&gt;
create table track_record_data&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned        not null,&lt;br /&gt;
    record_date   datetime            null,&lt;br /&gt;
    longitude     double              null,&lt;br /&gt;
    latitude      double              null,&lt;br /&gt;
    altitude      int(7)              null,&lt;br /&gt;
    speed         double              null,&lt;br /&gt;
    track         int(3) unsigned     null,&lt;br /&gt;
    acc_x         int(6)              null,&lt;br /&gt;
    acc_y         int(6)              null,&lt;br /&gt;
    acc_z         int(6)              null,&lt;br /&gt;
    pressure      int(5) unsigned     null,&lt;br /&gt;
    battery_level int(4) unsigned     null,&lt;br /&gt;
    gps_fix       tinyint(1) unsigned null,&lt;br /&gt;
    receive_date  datetime            null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of flight record data';&lt;br /&gt;
&lt;br /&gt;
create index idx_record_id&lt;br /&gt;
    on track_record_data (record_id);&lt;br /&gt;
&lt;br /&gt;
create table track_resource&lt;br /&gt;
(&lt;br /&gt;
    id   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `name` varchar(255) NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity` (&lt;br /&gt;
  `activity_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_id` int(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL DEFAULT '1',&lt;br /&gt;
  `level_reached` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `comment` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `validated` tinyint(1) NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`activity_id`,`training_item_id`,`training_program_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `training_program_item_id_idx` (`training_program_id`,`training_item_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_training_program_item_id_fk` FOREIGN KEY (`training_program_id`, `training_item_id`) REFERENCES `training_program_item` (`training_program_id`, `training_item_id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity_next_item` (&lt;br /&gt;
  `student_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `reporting_offset` tinyint(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `item_preselected` tinyint(1) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`student_id`,`training_program_id`,`training_item_id`),&lt;br /&gt;
  KEY `training_item_id_idx` (`training_item_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `training_activity_next_item_training_program_item_id_fk` (`training_program_id`,`training_item_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_student_id_fk` FOREIGN KEY (`student_id`) REFERENCES `person` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_training_program_item_id_fk` FOREIGN KEY (`training_program_id`, `training_item_id`) REFERENCES `training_program_item` (`training_program_id`, `training_item_id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity_person` (&lt;br /&gt;
  `activity_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `person_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `num` int(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `training_checking_date` datetime DEFAULT NULL,&lt;br /&gt;
  `training_checking_sentence` varchar(255) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`activity_id`,`person_id`,`num`),&lt;br /&gt;
  KEY `person_id_idx` (`person_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_person_activity_id_fk` FOREIGN KEY (`activity_id`) REFERENCES `flight` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_person_person_id_fk` FOREIGN KEY (`person_id`) REFERENCES `person` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_phase` (&lt;br /&gt;
  `training_program_item_order_num` int(11) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `name` varchar(255) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`training_program_item_order_num`,`training_program_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  CONSTRAINT `training_phase_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_program` (&lt;br /&gt;
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
`training_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
`name` varchar(255) NOT NULL,&lt;br /&gt;
PRIMARY KEY (`id`),&lt;br /&gt;
KEY `training_id_idx` (`training_id`),&lt;br /&gt;
CONSTRAINT `training_program_training_id_fk` FOREIGN KEY (`training_id`) REFERENCES `training` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_program_activity` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `activity_type_id` bigint(20) unsigned NOT NULL,&lt;br /&gt;
  `duration` int(11) unsigned DEFAULT NULL,&lt;br /&gt;
  `breaktime` int(11) unsigned DEFAULT NULL,&lt;br /&gt;
  `order_num` int(11) unsigned NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `activity_type_id_idx` (`activity_type_id`),&lt;br /&gt;
  CONSTRAINT `training_program_activity_activity_type_id_fk` FOREIGN KEY (`activity_type_id`) REFERENCES `activity_type` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_program_activity_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_item` (&lt;br /&gt;
  `training_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_label_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `number_of_sessions` int(11) NOT NULL,&lt;br /&gt;
  `order_num` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `custom_label` varchar(255),&lt;br /&gt;
  PRIMARY KEY (`training_id`,`training_item_label_id`),&lt;br /&gt;
  KEY `order_num_idx` (`order_num` ASC),&lt;br /&gt;
  CONSTRAINT `training_item_training_id_fk` FOREIGN KEY (`training_id`) REFERENCES `training` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    id1 int unsigned null,&lt;br /&gt;
    id2 int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of sales';&lt;br /&gt;
&lt;br /&gt;
create table validity_type&lt;br /&gt;
(&lt;br /&gt;
    id                       int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                     varchar(255)                   not null,&lt;br /&gt;
    time_limitation          tinyint(1)          default 0  not null,&lt;br /&gt;
    ident_value_enable       tinyint(1)          default 0  not null,&lt;br /&gt;
    grant_date_enable        tinyint(1)          default 0  not null,&lt;br /&gt;
    mandatory                tinyint(1)          default 0  not null,&lt;br /&gt;
    experience_formula       text                           null,&lt;br /&gt;
    mandatory_access_control tinyint(1) unsigned default 0  null,&lt;br /&gt;
    alert_on_login           int(10)             default -2 null,&lt;br /&gt;
    first_reminder_alert     int unsigned        default 0  null,&lt;br /&gt;
    reminder_frequency_alert int unsigned        default 0  null,&lt;br /&gt;
    associate_attachment     tinyint(1) unsigned default 0  not null,&lt;br /&gt;
    certification_process    tinyint(1)          default 0  not null,&lt;br /&gt;
    is_contract              tinyint(1)          default 0  not null,&lt;br /&gt;
    contract_filename        varchar(255)                   not null,&lt;br /&gt;
    contract_file            mediumblob                     not null,&lt;br /&gt;
    contract_file_extension  varchar(4)                     not null,&lt;br /&gt;
    is_OF_contract           tinyint(1)          default 0  not null,&lt;br /&gt;
    activated                tinyint(1) unsigned default 1  not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id           int unsigned         not null,&lt;br /&gt;
    validity_type_id    int unsigned         not null,&lt;br /&gt;
    registration_date   datetime             not null,&lt;br /&gt;
    expire_date         date                 null,&lt;br /&gt;
    no_alert            tinyint(1) default 0 not null,&lt;br /&gt;
    ident_value         varchar(255)         null,&lt;br /&gt;
    grant_date          date                 null,&lt;br /&gt;
    checker_person_id   int unsigned         not null,&lt;br /&gt;
    checking_date       date                 not null,&lt;br /&gt;
    checking_sentence   varchar(255)         not null,&lt;br /&gt;
    is_current_validity tinyint(1) default 0 not null,&lt;br /&gt;
    constraint validity_person_id_validity_type_id_registration_date_uindex&lt;br /&gt;
        unique (person_id, validity_type_id, registration_date),&lt;br /&gt;
    constraint validity_person_id_fk&lt;br /&gt;
        foreign key (person_id) references person (id),&lt;br /&gt;
    constraint validity_validity_type_id_fk&lt;br /&gt;
        foreign key (validity_type_id) references validity_type (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_type_page&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned        not null,&lt;br /&gt;
    page_index       int unsigned        not null,&lt;br /&gt;
    label            varchar(40)         not null,&lt;br /&gt;
    is_mandatory     tinyint(1) unsigned not null,&lt;br /&gt;
    constraint validity_type_page_validity_type_id_page_index_uindex&lt;br /&gt;
        unique (validity_type_id, page_index),&lt;br /&gt;
    constraint validity_type_page_validity_type_id_fk&lt;br /&gt;
        foreign key (validity_type_id) references validity_type (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_page&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_page_id int unsigned not null,&lt;br /&gt;
    filename              varchar(255) not null,&lt;br /&gt;
    file                  mediumblob   not null,&lt;br /&gt;
    file_extension        varchar(4)   not null,&lt;br /&gt;
    constraint validity_page_validity_type_page_id_fk&lt;br /&gt;
        foreign key (validity_type_page_id) references validity_type_page (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_2_validity_page&lt;br /&gt;
(&lt;br /&gt;
    validity_id      int unsigned not null,&lt;br /&gt;
    validity_page_id int unsigned not null,&lt;br /&gt;
    primary key (validity_id, validity_page_id),&lt;br /&gt;
    constraint validity_2_validity_page_validity_id_fk&lt;br /&gt;
        foreign key (validity_id) references validity (id),&lt;br /&gt;
    constraint validity_2_validity_page_validity_page_id_fk&lt;br /&gt;
        foreign key (validity_page_id) references validity_page (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable&lt;br /&gt;
(&lt;br /&gt;
    id         int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable   varchar(255) not null,&lt;br /&gt;
    label      varchar(255) not null,&lt;br /&gt;
    category   tinyint(1)   null,&lt;br /&gt;
    value_type varchar(255) null,&lt;br /&gt;
    order_num  int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable_value&lt;br /&gt;
(&lt;br /&gt;
    id           int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable_id  int            not null,&lt;br /&gt;
    assign_value decimal(15, 2) not null,&lt;br /&gt;
    start_date   datetime       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    channel_id       int unsigned not null,&lt;br /&gt;
    publication_date datetime     not null,&lt;br /&gt;
    title            varchar(255) null,&lt;br /&gt;
    content          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed_channel&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_pilot_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`person`.`id` AS `person_id`&lt;br /&gt;
from `of40_aeroclublys`.`person`&lt;br /&gt;
where ((`of40_aeroclublys`.`person`.`activated` = 1) and&lt;br /&gt;
       ((`of40_aeroclublys`.`person`.`profile` &amp;amp; (select `of40_aeroclublys`.`parameter`.`int_value`&lt;br /&gt;
                                                  from `of40_aeroclublys`.`parameter`&lt;br /&gt;
                                                  where (`of40_aeroclublys`.`parameter`.`code` =&lt;br /&gt;
                                                         'EXTERNAL_BOOKING_PILOT_PROFILE'))) &amp;gt; 0) and&lt;br /&gt;
       `of40_aeroclublys`.`person`.`id` in (select `of40_aeroclublys`.`regular_presence_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`regular_presence_inst_date`&lt;br /&gt;
                                            union&lt;br /&gt;
                                            select `of40_aeroclublys`.`exceptionnal_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`exceptionnal_inst_date`&lt;br /&gt;
                                            where ((`of40_aeroclublys`.`exceptionnal_inst_date`.`end_date` &amp;gt; now()) and&lt;br /&gt;
                                                   (`of40_aeroclublys`.`exceptionnal_inst_date`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_resource_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`resource`.`id` AS `resource_id`&lt;br /&gt;
from ((`of40_aeroclublys`.`resource` join `of40_aeroclublys`.`business_field_content` on ((&lt;br /&gt;
        `of40_aeroclublys`.`business_field_content`.`category_id` = `of40_aeroclublys`.`resource`.`id`)))&lt;br /&gt;
         join `of40_aeroclublys`.`business_field` on ((`of40_aeroclublys`.`business_field`.`id` =&lt;br /&gt;
                                                       `of40_aeroclublys`.`business_field_content`.`business_field_id`)))&lt;br /&gt;
where ((`of40_aeroclublys`.`resource`.`activated` = 1) and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field`.`variable` = 'canResourcePerformFirstFlights') and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field_content`.`content` = '1') and&lt;br /&gt;
       (`of40_aeroclublys`.`resource`.`bookable` = 1) and ((select count(0)&lt;br /&gt;
                                                            from `of40_aeroclublys`.`resource_type_place_tag` `seat`&lt;br /&gt;
                                                            where (`seat`.`resource_type_id` =&lt;br /&gt;
                                                                   `of40_aeroclublys`.`resource`.`resource_type_id`)) &amp;gt;=&lt;br /&gt;
                                                           2) and&lt;br /&gt;
       `of40_aeroclublys`.`resource`.`id` in (select `of40_aeroclublys`.`resource_regular_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_regular_availability`&lt;br /&gt;
                                              union&lt;br /&gt;
                                              select `of40_aeroclublys`.`resource_exceptional_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_exceptional_availability`&lt;br /&gt;
                                              where ((`of40_aeroclublys`.`resource_exceptional_availability`.`end_date` &amp;gt;&lt;br /&gt;
                                                      now()) and&lt;br /&gt;
                                                     (`of40_aeroclublys`.`resource_exceptional_availability`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function distanceBetween2Point(latitude1 double, longitude1 double, latitude2 double,&lt;br /&gt;
                                                            longitude2 double) returns double&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE dlongitude DOUBLE;&lt;br /&gt;
    DECLARE dlatitude DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET rlongitude1 = RADIANS(longitude1);&lt;br /&gt;
    SET rlatitude1 = RADIANS(latitude1);&lt;br /&gt;
    SET rlongitude2 = RADIANS(longitude2);&lt;br /&gt;
    SET rlatitude2 = RADIANS(latitude2);&lt;br /&gt;
    SET dlongitude = (rlongitude2 - rlongitude1) / 2;&lt;br /&gt;
    SET dlatitude = (rlatitude2 - rlatitude1) / 2;&lt;br /&gt;
    SET a = SIN(dlatitude) * SIN(dlatitude) + COS(rlatitude1) * COS(rlatitude2) * SIN(dlongitude) * SIN(dlongitude);&lt;br /&gt;
    RETURN (6378137 * 2 * ATAN2(SQRT(a), SQRT(1 - a)));&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function formatDecimal(string varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE replacedString VARCHAR(255);&lt;br /&gt;
    SET replacedString = string;&lt;br /&gt;
    SET @decimalSeparator = (SELECT char_value FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(replacedString &amp;lt;&amp;gt; '0.00' AND replacedString &amp;lt;&amp;gt; '0', TRIM(TRAILING '0' FROM replacedString),&lt;br /&gt;
              replacedString)&lt;br /&gt;
    INTO replacedString;&lt;br /&gt;
    SELECT TRIM(TRAILING '.' FROM replacedString) INTO replacedString;&lt;br /&gt;
    SELECT REPLACE(replacedString, '.', IFNULL(@decimalSeparator, '.')) INTO replacedString;&lt;br /&gt;
    RETURN replacedString;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function isBalancedAccountEntryFlow(flowId int) returns int&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE isBalanced INT;&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(SUM(debit) &amp;lt;&amp;gt; SUM(credit), 0, 1)&lt;br /&gt;
    into isBalanced&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE flow_id = flowId&lt;br /&gt;
    GROUP BY flow_id;&lt;br /&gt;
&lt;br /&gt;
    RETURN isBalanced;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function nearestPoint(latRef double, longRef double, distanceMax int) returns varchar(6)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
    DECLARE icao_name VARCHAR(6);&lt;br /&gt;
    DECLARE lenght DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET a = 2 * 6378137 * pi() * distanceMax / (1852 * 60 * 360);&lt;br /&gt;
    SET rlongitude1 = longRef + a / cos(latRef);&lt;br /&gt;
    SET rlongitude2 = longRef - a / cos(latRef);&lt;br /&gt;
    SET rlatitude1 = latRef + a;&lt;br /&gt;
    SET rlatitude2 = latRef - a;&lt;br /&gt;
&lt;br /&gt;
    SELECT loc1.icao_name,&lt;br /&gt;
           distanceBetween2Point(&lt;br /&gt;
                   (SELECT loc2.latitude FROM location AS loc2 WHERE loc2.icao_name = loc1.icao_name),&lt;br /&gt;
                   (SELECT loc3.longitude FROM location AS loc3 WHERE loc3.icao_name = loc1.icao_name),&lt;br /&gt;
                   latRef,&lt;br /&gt;
                   longRef) AS distance&lt;br /&gt;
    FROM location AS loc1&lt;br /&gt;
    WHERE IF(rlongitude2 &amp;lt; rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude2 AND rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude1 AND rlongitude2)&lt;br /&gt;
      AND IF(rlatitude2 &amp;lt; rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude2 AND rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude1 AND rlatitude2)&lt;br /&gt;
    HAVING distance &amp;lt; distanceMax&lt;br /&gt;
    ORDER BY distance&lt;br /&gt;
    LIMIT 1&lt;br /&gt;
    INTO icao_name, lenght;&lt;br /&gt;
&lt;br /&gt;
    RETURN icao_name;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursHundredths(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255);&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    DECLARE decimalSeparator VARCHAR(1);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
    SET decimalSeparator =&lt;br /&gt;
            (SELECT IFNULL(char_value, '.') FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, decimalSeparator, LPAD(FLOOR(remainingTime / 6), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursMinute(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255); # We separate hours computation from roundHours in order to keep the minus sign if hours is 0 but sexacentimal negative&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, ':', LPAD(FLOOR(remainingTime / 10), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function stripChars(word varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE stripWord VARCHAR(255);&lt;br /&gt;
    SET stripWord = word;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[-]', REPLACE(stripWord, '-', ''), stripWord) INTO stripWord;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[ ]', REPLACE(stripWord, ' ', ''), stripWord) INTO stripWord;&lt;br /&gt;
    RETURN stripWord;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryCredit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalCredit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryDebit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit&lt;br /&gt;
    INTO totalDebit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalDebit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function sumValidatedAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME)&lt;br /&gt;
      AND validated = 1;&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
==Table booking==&lt;br /&gt;
&lt;br /&gt;
Le contenu du champ ''aircraft_id'' de la table ''booking'' peut être nul. Dans ce cas, c'est une ancienne réservation effectuée sur une ressource non-existante ou qui n'existe plus; aussi nommé réservation orpheline.&lt;br /&gt;
&lt;br /&gt;
==Table flight==&lt;br /&gt;
&lt;br /&gt;
*airborne :&lt;br /&gt;
**0: Pas en l'air ou fermeture de vol : Le pilote a terminé le vol.&lt;br /&gt;
**1: En l'air ou ouverture de vol : Le pilote remplit le vol avant de voler.&lt;br /&gt;
&lt;br /&gt;
==Champs cachés==&lt;br /&gt;
Les champs suivants ne peuvent être exportés et ne doivent pas être inclus dans une requête SELECT. De plus, un &amp;quot;SELECT *&amp;quot; est interdit quand une des tables contient un champ caché :&lt;br /&gt;
*Table journal : Tous les champs&lt;br /&gt;
*Table log : Tous les champs&lt;br /&gt;
*Table parameter : Tous les champs&lt;br /&gt;
*Table person :&lt;br /&gt;
**hash_password&lt;br /&gt;
*Table structure :&lt;br /&gt;
**address&lt;br /&gt;
**admin_num&lt;br /&gt;
**city&lt;br /&gt;
**country&lt;br /&gt;
**default_notification&lt;br /&gt;
**default_slot_range&lt;br /&gt;
**default_timezone&lt;br /&gt;
**default_view_type&lt;br /&gt;
**email&lt;br /&gt;
**fax&lt;br /&gt;
**first_hour_displayed&lt;br /&gt;
**info_cell&lt;br /&gt;
**lang&lt;br /&gt;
**last_hour_displayed&lt;br /&gt;
**logo&lt;br /&gt;
**logo_name&lt;br /&gt;
**logo_ext&lt;br /&gt;
**logo_size&lt;br /&gt;
**mail_from_address&lt;br /&gt;
**mailing_list_name&lt;br /&gt;
**mailing_list_type&lt;br /&gt;
**min_slot_range&lt;br /&gt;
**name&lt;br /&gt;
**phone&lt;br /&gt;
**state&lt;br /&gt;
**twilight_range&lt;br /&gt;
**usual_profiles&lt;br /&gt;
**welcome_cell&lt;br /&gt;
**zipcode&lt;br /&gt;
*Table oauth_client : Tous les champs&lt;br /&gt;
*Table oauth_access_token : Tous les champs&lt;br /&gt;
*Table oauth_auth_code : Tous les champs&lt;br /&gt;
*Table oauth_refresh_token : Tous les champs&lt;br /&gt;
&lt;br /&gt;
Exemple de requêtes non autorisées :&lt;br /&gt;
&amp;lt;sql&amp;gt;SELECT * FROM structure;&lt;br /&gt;
&lt;br /&gt;
SELECT hash_password FROM person;&lt;br /&gt;
&lt;br /&gt;
SELECT person.id, validity.*&lt;br /&gt;
FROM person&lt;br /&gt;
LEFT JOIN validity ON (person.id=validity.person_id);&amp;lt;/sql&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14399</id>
		<title>Structure de la base de données</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14399"/>
		<updated>2026-04-08T12:09:58Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Schéma de la structure de la base de données=&lt;br /&gt;
*[[Media:OpenFlyers_database_schema.png|Lien vers schéma fichier .png]]&lt;br /&gt;
&lt;br /&gt;
=Structure=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create table account&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    creation_date    date                          null,&lt;br /&gt;
    name             text                          null,&lt;br /&gt;
    export_account   varchar(255)                  null,&lt;br /&gt;
    activated        tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    category         tinyint(1) unsigned default 0 null,&lt;br /&gt;
    account_type     tinyint(1) unsigned default 0 null,&lt;br /&gt;
    owner_id         int unsigned        default 0 not null,&lt;br /&gt;
    payment_allowed  tinyint(1)          default 0 null,&lt;br /&gt;
    budget_id        int unsigned                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    accounting_id    int unsigned                  null,&lt;br /&gt;
    deactivated_date datetime                      null,&lt;br /&gt;
    group_sales      tinyint(1)          default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of account';&lt;br /&gt;
&lt;br /&gt;
create index idx_owner_id&lt;br /&gt;
    on account (owner_id);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `account_entry` (&lt;br /&gt;
  `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `flow_id` int(11) DEFAULT NULL,&lt;br /&gt;
  `account_date` datetime DEFAULT NULL,&lt;br /&gt;
  `account_id` int(11) DEFAULT NULL,&lt;br /&gt;
  `credit` decimal(15,5) DEFAULT '0.00000',&lt;br /&gt;
  `debit` decimal(15,5) DEFAULT '0.00000',&lt;br /&gt;
  `payment_type` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `payment_description` text,&lt;br /&gt;
  `person_delivery_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `comments` text,&lt;br /&gt;
  `validated` int(1) DEFAULT '0',&lt;br /&gt;
  `exported` int(1) DEFAULT '0',&lt;br /&gt;
  `registration_date` datetime DEFAULT NULL,&lt;br /&gt;
  `budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `product_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `signature` varchar(56) DEFAULT NULL,&lt;br /&gt;
  `signature_date` bigint(13) unsigned DEFAULT NULL,&lt;br /&gt;
  `lettering` int(11) DEFAULT NULL,&lt;br /&gt;
  `lettering_date` datetime DEFAULT NULL,&lt;br /&gt;
  `flow_reversal_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `transaction_id` text,&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  KEY `idx_flow_id` (`flow_id`),&lt;br /&gt;
  KEY `idx_account_date` (`account_date`),&lt;br /&gt;
  KEY `idx_signature_date` (`signature_date`),&lt;br /&gt;
  KEY `flow_reversal_id_idx` (`flow_reversal_id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_link&lt;br /&gt;
(&lt;br /&gt;
    account_id        int unsigned default 0 not null,&lt;br /&gt;
    linked_account_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (account_id, linked_account_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                  null,&lt;br /&gt;
    category               tinyint(1) unsigned default 0 null,&lt;br /&gt;
    activated              tinyint(1)          default 1 null,&lt;br /&gt;
    order_num              int                           null,&lt;br /&gt;
    accounting_id          int unsigned                  null,&lt;br /&gt;
    export_account_pattern varchar(255)                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type_profile&lt;br /&gt;
(&lt;br /&gt;
    account_type_id int unsigned    default 0 not null,&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (account_type_id, profile_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Linked account type and profile';&lt;br /&gt;
&lt;br /&gt;
create table accounting&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)           null,&lt;br /&gt;
    unit_name         varchar(255)           null,&lt;br /&gt;
    symbol            varchar(255)           null,&lt;br /&gt;
    format            tinyint(1)             null,&lt;br /&gt;
    decimal_precision int unsigned default 2 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table accounting_profile&lt;br /&gt;
(&lt;br /&gt;
    accounting_id int unsigned    default 0 not null,&lt;br /&gt;
    profile_id    bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (accounting_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table activity_type&lt;br /&gt;
(&lt;br /&gt;
    id        bigint unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name      varchar(255)              null,&lt;br /&gt;
    order_num int                       null,&lt;br /&gt;
    activated tinyint(1)      default 1 not null,&lt;br /&gt;
    color     int unsigned              null,&lt;br /&gt;
    training  tinyint(1)      default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft&lt;br /&gt;
(&lt;br /&gt;
    id                            int unsigned     default 0     not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    ref_date                      datetime                       null,&lt;br /&gt;
    ref_hours                     int                            null,&lt;br /&gt;
    inspection_date               datetime                       null,&lt;br /&gt;
    inspection_time               int                            null,&lt;br /&gt;
    tolerance_time                int(11) unsigned default 6000  null,&lt;br /&gt;
    last_counter                  int                            null,&lt;br /&gt;
    interval_visit                int(11) unsigned default 30000 null,&lt;br /&gt;
    time_alert1                   int              default 6000  null,&lt;br /&gt;
    time_alert2                   int              default 0     null,&lt;br /&gt;
    time_alert3                   int              default -3000 null,&lt;br /&gt;
    day_alert1                    smallint(3)      default 15    null,&lt;br /&gt;
    day_alert2                    smallint(3)      default 0     null,&lt;br /&gt;
    day_alert3                    smallint(3)      default -8    null,&lt;br /&gt;
    day_alert1_send_email         tinyint(1)       default 0     null,&lt;br /&gt;
    day_alert2_send_email         tinyint(1)       default 0     null,&lt;br /&gt;
    day_alert3_send_email         tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert1_send_email        tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert2_send_email        tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert3_send_email        tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert1_send_email tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert2_send_email tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert3_send_email tinyint(1)       default 0     null,&lt;br /&gt;
    day_alert1_email_sent         tinyint(1)       default 0     null,&lt;br /&gt;
    day_alert2_email_sent         tinyint(1)       default 0     null,&lt;br /&gt;
    day_alert3_email_sent         tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert1_email_sent        tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert2_email_sent        tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert3_email_sent        tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert1_email_sent tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert2_email_sent tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert3_email_sent tinyint(1)       default 0     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    id                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_time_formula  varchar(255)        default '%DURATION' null,&lt;br /&gt;
    counter_state        tinyint(2)          default -1          not null,&lt;br /&gt;
    tolerance            int                 default 0           null,&lt;br /&gt;
    autonomy             int                 default 5990        null,&lt;br /&gt;
    true_air_speed       int unsigned        default 0           not null,&lt;br /&gt;
    digit_counter_number tinyint(1) unsigned default 4           not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Types of aircraft';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_allowed_status&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned null,&lt;br /&gt;
    place_num        int unsigned null,&lt;br /&gt;
    status_id        int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of allowed functions for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_mandatory_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    null,&lt;br /&gt;
    activity_type_id bigint unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of compulsory flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    null,&lt;br /&gt;
    activity_type_id bigint unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of uncompatible flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_validity_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned default 0 not null,&lt;br /&gt;
    check_num        int unsigned default 0 not null,&lt;br /&gt;
    primary key (aircraft_type_id, validity_type_id, check_num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Types of qualif required for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table allocation_rule&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    title      varchar(255)         not null,&lt;br /&gt;
    account_id int(10)              not null,&lt;br /&gt;
    keyword    varchar(255)         null,&lt;br /&gt;
    order_num  int(10)              not null,&lt;br /&gt;
    amount     tinyint(1)           not null,&lt;br /&gt;
    mandatory  tinyint(1) default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance&lt;br /&gt;
(&lt;br /&gt;
    account_id      int unsigned                   not null,&lt;br /&gt;
    balance_date_id int unsigned                   not null,&lt;br /&gt;
    debit           decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit          decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    primary key (account_id, balance_date_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance_date&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    balance_date datetime null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    booking_group_id int unsigned null,&lt;br /&gt;
    start_date       datetime     null,&lt;br /&gt;
    end_date         datetime     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_account_entry&lt;br /&gt;
(&lt;br /&gt;
    booking_id            int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_activity_type&lt;br /&gt;
(&lt;br /&gt;
    booking_id       int unsigned default 0 not null,&lt;br /&gt;
    activity_type_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, activity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_changelog&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    booking_id     int unsigned not null,&lt;br /&gt;
    person_id      int unsigned not null,&lt;br /&gt;
    changelog_date datetime     not null,&lt;br /&gt;
    booking_state  text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_person&lt;br /&gt;
(&lt;br /&gt;
    booking_id int unsigned default 0 not null,&lt;br /&gt;
    person_id  int unsigned default 0 not null,&lt;br /&gt;
    place_num  int unsigned           null,&lt;br /&gt;
    status_id  int unsigned           null,&lt;br /&gt;
    primary key (booking_id, person_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_resource&lt;br /&gt;
(&lt;br /&gt;
    booking_id  int unsigned default 0 not null,&lt;br /&gt;
    resource_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `booking_training_program` (&lt;br /&gt;
  `booking_group_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`booking_group_id`,`training_program_id`),&lt;br /&gt;
  CONSTRAINT `booking_training_program_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    group_id    int unsigned default 0 not null,&lt;br /&gt;
    name        varchar(255)           null,&lt;br /&gt;
    order_num   int                    null,&lt;br /&gt;
    export_code varchar(255)           null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name      varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `business_field` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `variable` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `label` varchar(255) NOT NULL,&lt;br /&gt;
  `value_type` varchar(40) NOT NULL,&lt;br /&gt;
  `category` varchar(255) NOT NULL,&lt;br /&gt;
  `order_num` int(11) NOT NULL,&lt;br /&gt;
  `dsn` varchar(20) DEFAULT 'customer',&lt;br /&gt;
  `compulsory_fill` tinyint(1) DEFAULT '0',&lt;br /&gt;
  `linked_category` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `linked_business_field_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `linked_field_name` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `max_display` int(10) DEFAULT '-1',&lt;br /&gt;
  `formula` text,&lt;br /&gt;
  `default_value` text,&lt;br /&gt;
  `placeholder` text,&lt;br /&gt;
  `access_level_required` tinyint(4) NOT NULL DEFAULT '0',&lt;br /&gt;
  `user_access_mode` tinyint(1) NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  UNIQUE KEY `variable` (`variable`),&lt;br /&gt;
  KEY `business_field_linked_business_field_id_fk` (`linked_business_field_id`),&lt;br /&gt;
  CONSTRAINT `business_field_linked_business_field_id_fk` FOREIGN KEY (`linked_business_field_id`) REFERENCES `business_field` (`id`)&lt;br /&gt;
) COMMENT='List of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_activity_type&lt;br /&gt;
(&lt;br /&gt;
    business_field_id       int unsigned    default 0 not null,&lt;br /&gt;
    activity_type_id        bigint unsigned default 0 not null,&lt;br /&gt;
    business_field_group_id int unsigned    default 0 not null,&lt;br /&gt;
    visibility_type         tinyint(1) unsigned       null,&lt;br /&gt;
    primary key (business_field_id, activity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table business_field_content&lt;br /&gt;
(&lt;br /&gt;
    category_id       int unsigned           not null,&lt;br /&gt;
    business_field_id int unsigned default 0 not null,&lt;br /&gt;
    person_id         int unsigned default 0 not null,&lt;br /&gt;
    content           text                   null,&lt;br /&gt;
    placeholder       text                   null,&lt;br /&gt;
    primary key (category_id, business_field_id, person_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Content of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria&lt;br /&gt;
(&lt;br /&gt;
    id        int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255)                   not null,&lt;br /&gt;
    predicate text                           not null,&lt;br /&gt;
    order_num int                            null,&lt;br /&gt;
    dsn       varchar(20) default 'customer' null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria_profile&lt;br /&gt;
(&lt;br /&gt;
    criteria_id int unsigned    not null,&lt;br /&gt;
    profile_id  bigint unsigned not null,&lt;br /&gt;
    primary key (criteria_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    customer_bill_id      int unsigned                   null,&lt;br /&gt;
    product_id            int unsigned                   null,&lt;br /&gt;
    qty                   decimal(15, 2) default 0.00    null,&lt;br /&gt;
    unit_price            decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    bill_date             datetime                       null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_bill_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_bill_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of customer bill stored file';&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    payment_type_id       int unsigned                   null,&lt;br /&gt;
    customer_receipt_id   int unsigned                   null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    receipt_date          datetime                       null,&lt;br /&gt;
    owner_email           varchar(255)                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_display&lt;br /&gt;
(&lt;br /&gt;
    person_id     int unsigned            not null,&lt;br /&gt;
    display_key   varchar(255) default '' not null,&lt;br /&gt;
    display_value text                    null,&lt;br /&gt;
    primary key (person_id, display_key)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_multi_display&lt;br /&gt;
(&lt;br /&gt;
    resource_type char(30)     not null,&lt;br /&gt;
    person_id     int unsigned not null,&lt;br /&gt;
    resource_id   varchar(100) not null,&lt;br /&gt;
    display_value text         null,&lt;br /&gt;
    primary key (resource_type, person_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent&lt;br /&gt;
(&lt;br /&gt;
    id          bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    message_id  varchar(150)     not null,&lt;br /&gt;
    sender      varchar(255)     not null,&lt;br /&gt;
    title       varchar(255)     not null,&lt;br /&gt;
    category    tinyint unsigned not null,&lt;br /&gt;
    category_id int unsigned     not null,&lt;br /&gt;
    constraint message_id_UNIQUE&lt;br /&gt;
        unique (message_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent_recipient&lt;br /&gt;
(&lt;br /&gt;
    id                   bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    email_sent_id        bigint unsigned  not null,&lt;br /&gt;
    person_id            int unsigned     not null,&lt;br /&gt;
    email                varchar(255)     null,&lt;br /&gt;
    recipient_type       tinyint unsigned null,&lt;br /&gt;
    smtp_status_category varchar(30)      null,&lt;br /&gt;
    email_status         tinyint unsigned null,&lt;br /&gt;
    update_date          datetime         not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index email_sent_id_idx&lt;br /&gt;
    on email_sent_recipient (email_sent_id);&lt;br /&gt;
&lt;br /&gt;
create table exceptionnal_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned        null,&lt;br /&gt;
    start_date datetime            null,&lt;br /&gt;
    end_date   datetime            null,&lt;br /&gt;
    presence   tinyint(1) unsigned null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table extra_field_profile&lt;br /&gt;
(&lt;br /&gt;
    business_field_id                  int unsigned    default 0 not null,&lt;br /&gt;
    booking_popup_display_4_profile_id bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (business_field_id, booking_popup_display_4_profile_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Linked extra field and profile';&lt;br /&gt;
&lt;br /&gt;
create table facebook&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    category    int unsigned not null,&lt;br /&gt;
    owner_id    int unsigned not null,&lt;br /&gt;
    small       blob         null,&lt;br /&gt;
    original    mediumblob   not null,&lt;br /&gt;
    label       text         null,&lt;br /&gt;
    description text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_icao&lt;br /&gt;
(&lt;br /&gt;
    icao varchar(6) default '' not null&lt;br /&gt;
        primary key&lt;br /&gt;
)&lt;br /&gt;
    comment 'favorite airfield list';&lt;br /&gt;
&lt;br /&gt;
create table favorite_report&lt;br /&gt;
(&lt;br /&gt;
    report_id int unsigned not null&lt;br /&gt;
        primary key&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_business_field&lt;br /&gt;
(&lt;br /&gt;
    report_id         int unsigned not null,&lt;br /&gt;
    business_field_id int unsigned not null,&lt;br /&gt;
    default_value     text         null,&lt;br /&gt;
    primary key (report_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_profile&lt;br /&gt;
(&lt;br /&gt;
    report_id  int unsigned              not null,&lt;br /&gt;
    profile_id bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (report_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table fhp_aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int(10) default 0 not null,&lt;br /&gt;
    aircraft_type_id int(10) default 0 not null,&lt;br /&gt;
    primary key (fhp_id, aircraft_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing aircraft type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int(10)             default 0 not null,&lt;br /&gt;
    activity_type_id bigint unsigned     default 0 not null,&lt;br /&gt;
    excluded         tinyint(1) unsigned default 0 null,&lt;br /&gt;
    primary key (fhp_id, activity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing flight type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_profile&lt;br /&gt;
(&lt;br /&gt;
    fhp_id     int unsigned                  not null,&lt;br /&gt;
    profile_id bigint unsigned               not null,&lt;br /&gt;
    place_num  tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    primary key (fhp_id, profile_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table file&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name          varchar(255)        null,&lt;br /&gt;
    content       longblob            null,&lt;br /&gt;
    file_type     varchar(255)        null,&lt;br /&gt;
    category      tinyint(1) unsigned null,&lt;br /&gt;
    owner_id      int(10)             null,&lt;br /&gt;
    file_group_id int(10)             null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of stored file';&lt;br /&gt;
&lt;br /&gt;
create table file_group&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_id           int unsigned               null,&lt;br /&gt;
    start_date            datetime                   null,&lt;br /&gt;
    duration              int                        null,&lt;br /&gt;
    activity_type_id      bigint unsigned            null,&lt;br /&gt;
    people_onboard        int unsigned               null,&lt;br /&gt;
    departure_location_id int unsigned               null,&lt;br /&gt;
    arrival_location_id   int unsigned               null,&lt;br /&gt;
    counter_departure     int unsigned               null,&lt;br /&gt;
    counter_arrival       int unsigned               null,&lt;br /&gt;
    landing_number        int(10)                    null,&lt;br /&gt;
    airborne              tinyint(1) unsigned        null,&lt;br /&gt;
    validated             tinyint unsigned default 0 null,&lt;br /&gt;
    departure_icao_id     varchar(6)                 null,&lt;br /&gt;
    arrival_icao_id       varchar(6)                 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_account_entry&lt;br /&gt;
(&lt;br /&gt;
    flight_id        int unsigned default 0 not null,&lt;br /&gt;
    account_entry_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, account_entry_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight account entry join';&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on flight_account_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table flight_hours_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name               text                          null,&lt;br /&gt;
    price_formula      text                          null,&lt;br /&gt;
    left_account_id    int unsigned                  null,&lt;br /&gt;
    right_account_id   int unsigned                  null,&lt;br /&gt;
    left_account_type  tinyint(1) unsigned default 0 null,&lt;br /&gt;
    right_account_type tinyint(1) unsigned default 0 null,&lt;br /&gt;
    order_num          int                           null,&lt;br /&gt;
    credit_budget_id   int unsigned                  null,&lt;br /&gt;
    debit_budget_id    int unsigned                  null,&lt;br /&gt;
    product_id         int unsigned                  null,&lt;br /&gt;
    sale_trigger_id    int unsigned        default 0 null,&lt;br /&gt;
    query              text                          null,&lt;br /&gt;
    variable_formula   text                          null,&lt;br /&gt;
    business_field_id  int unsigned                  null,&lt;br /&gt;
    debit_bill_num     int unsigned                  null,&lt;br /&gt;
    credit_bill_num    int unsigned                  null,&lt;br /&gt;
    qty_formula        text                          null,&lt;br /&gt;
    unit_price_formula text                          null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight hours pricing formula';&lt;br /&gt;
&lt;br /&gt;
create table flight_pilot&lt;br /&gt;
(&lt;br /&gt;
    flight_id int unsigned           not null,&lt;br /&gt;
    pilot_id  int unsigned           not null,&lt;br /&gt;
    status_id int unsigned           null,&lt;br /&gt;
    num       int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, pilot_id, num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of crew for each flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_tank_qty&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_id    int unsigned                not null,&lt;br /&gt;
    tank_id      int unsigned                not null,&lt;br /&gt;
    quantity     varchar(255) default '0.00' not null,&lt;br /&gt;
    after_flight tinyint(1)   default 0      not null,&lt;br /&gt;
    account_id   int unsigned                null,&lt;br /&gt;
    pay_type     tinyint(1) unsigned         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `flight_track` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `flight_id` int(10) NOT NULL,&lt;br /&gt;
  `track` mediumblob NOT NULL,&lt;br /&gt;
  `file_type` varchar(255) DEFAULT 'kml',&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight_type_mandatory_validity_type&lt;br /&gt;
(&lt;br /&gt;
    activity_type_id bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (activity_type_id, validity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of mandatory qualification for each flight type';&lt;br /&gt;
&lt;br /&gt;
create table import&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label               varchar(255)                          not null,&lt;br /&gt;
    order_num           int                                   null,&lt;br /&gt;
    import_file_type    varchar(255) default 'csv-comma-CRLF' not null,&lt;br /&gt;
    match_query         text                                  null,&lt;br /&gt;
    uptodate_test_query text                                  null,&lt;br /&gt;
    update_query        text                                  null,&lt;br /&gt;
    update_activated    tinyint(1)   default 0                not null,&lt;br /&gt;
    login               varchar(255)                          null,&lt;br /&gt;
    hash_password       varchar(255)                          null,&lt;br /&gt;
    sync_task_name      varchar(255)                          null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of import';&lt;br /&gt;
&lt;br /&gt;
create table ip_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    ip          varchar(255)        not null,&lt;br /&gt;
    counter     tinyint(1) unsigned not null,&lt;br /&gt;
    expire_date datetime            not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'BLACKLISTED IP';&lt;br /&gt;
&lt;br /&gt;
create table journal&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login     varchar(255)           null,&lt;br /&gt;
    date_log  datetime               null,&lt;br /&gt;
    rights    text                   null,&lt;br /&gt;
    rights2   text                   null,&lt;br /&gt;
    action    varchar(255)           null,&lt;br /&gt;
    person_id int unsigned default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_action&lt;br /&gt;
    on journal (action);&lt;br /&gt;
&lt;br /&gt;
create index idx_date_log&lt;br /&gt;
    on journal (date_log);&lt;br /&gt;
&lt;br /&gt;
create table key_alert&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    alert_date datetime               null,&lt;br /&gt;
    status     int unsigned default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Key alerts';&lt;br /&gt;
&lt;br /&gt;
create table key_assignment&lt;br /&gt;
(&lt;br /&gt;
    key_id      tinyint(2) unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    key_name    tinytext                      null,&lt;br /&gt;
    aircraft_id int unsigned        default 0 null,&lt;br /&gt;
    key_state   tinyint(1) unsigned default 0 null,&lt;br /&gt;
    key_word    bigint unsigned     default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table key_host&lt;br /&gt;
(&lt;br /&gt;
    id       tinyint(2) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    timeout  tinyint(2)          default 10          not null,&lt;br /&gt;
    num_key  tinyint(2) unsigned default 10          not null,&lt;br /&gt;
    ipkey    varchar(50)         default '127.0.0.1' not null,&lt;br /&gt;
    httpport int                 default 4080        not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table key_log&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    log_date  datetime     null,&lt;br /&gt;
    action    varchar(255) null,&lt;br /&gt;
    message   varchar(255) null,&lt;br /&gt;
    key_id    int unsigned null,&lt;br /&gt;
    person_id int unsigned null,&lt;br /&gt;
    xmlrpc    int unsigned not null,&lt;br /&gt;
    error     varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Key logs';&lt;br /&gt;
&lt;br /&gt;
create table location&lt;br /&gt;
(&lt;br /&gt;
    icao_name       varchar(6)       not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name            varchar(64)      not null,&lt;br /&gt;
    latitude        double           null,&lt;br /&gt;
    longitude       double           null,&lt;br /&gt;
    altitude        int(7)           null,&lt;br /&gt;
    weather_station int(1) unsigned  null,&lt;br /&gt;
    asked_counter   bigint default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'airfields coord';&lt;br /&gt;
&lt;br /&gt;
create table log&lt;br /&gt;
(&lt;br /&gt;
    journal_id  int unsigned not null,&lt;br /&gt;
    action      varchar(255) null,&lt;br /&gt;
    table_name  varchar(255) null,&lt;br /&gt;
    field_name  varchar(255) null,&lt;br /&gt;
    field_value varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'part of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_field_value&lt;br /&gt;
    on log (field_value);&lt;br /&gt;
&lt;br /&gt;
create index idx_journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create index journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create table logger&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    serial_number int unsigned                      null,&lt;br /&gt;
    color         varchar(20)         default 'red' not null,&lt;br /&gt;
    activated     tinyint(1) unsigned default 1     not null,&lt;br /&gt;
    order_num     int unsigned                      not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Logger parameters';&lt;br /&gt;
&lt;br /&gt;
create table login_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login       varchar(255)     not null,&lt;br /&gt;
    counter     tinyint unsigned not null,&lt;br /&gt;
    expire_date datetime         not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'BLACKLISTED LOGIN';&lt;br /&gt;
&lt;br /&gt;
create table m_component&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id           int unsigned        default 0 not null,&lt;br /&gt;
    m_component_type_id int unsigned                  null,&lt;br /&gt;
    resource_id         int unsigned                  null,&lt;br /&gt;
    order_num           int                           not null,&lt;br /&gt;
    serial_number       varchar(255)                  null,&lt;br /&gt;
    brandnew_date       datetime                      null,&lt;br /&gt;
    activated           tinyint(1) unsigned default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id              int unsigned        default 0 not null,&lt;br /&gt;
    resource_type_id       int                           null,&lt;br /&gt;
    m_classification_id    int                           null,&lt;br /&gt;
    is_maintenance_check   tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    order_num              int                           not null,&lt;br /&gt;
    label                  varchar(255)                  null,&lt;br /&gt;
    description            varchar(255)                  null,&lt;br /&gt;
    manufacturer           varchar(255)                  null,&lt;br /&gt;
    manufacturer_reference varchar(255)                  null,&lt;br /&gt;
    part_number            varchar(255)                  null,&lt;br /&gt;
    periodicity            int unsigned                  null,&lt;br /&gt;
    tolerance              int unsigned        default 0 not null,&lt;br /&gt;
    calendar_periodicity   int unsigned                  null,&lt;br /&gt;
    calendar_tolerance     int unsigned        default 0 not null,&lt;br /&gt;
    activated              tinyint(1) unsigned default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type_parentality&lt;br /&gt;
(&lt;br /&gt;
    m_component_type_id        int unsigned not null,&lt;br /&gt;
    m_component_type_parent_id int unsigned not null,&lt;br /&gt;
    primary key (m_component_type_id, m_component_type_parent_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_history&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    m_component_id         int unsigned                  not null,&lt;br /&gt;
    install_date           datetime                      null,&lt;br /&gt;
    remove_date            datetime                      null,&lt;br /&gt;
    total_hours_on_install int unsigned        default 0 not null,&lt;br /&gt;
    threshold_hours        int unsigned        default 0 not null,&lt;br /&gt;
    threshold_date         datetime                      null,&lt;br /&gt;
    threshold_date_locked  tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    threshold_hours_locked tinyint(1) unsigned default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_operation&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    content             text         null,&lt;br /&gt;
    m_component_type_id int unsigned not null,&lt;br /&gt;
    order_num           int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_history&lt;br /&gt;
(&lt;br /&gt;
    id                                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                          int unsigned                  null,&lt;br /&gt;
    maintenance_program_id               int unsigned                  null,&lt;br /&gt;
    frame_hours_at_work_start            int(10)                       null,&lt;br /&gt;
    date_work_end                        date                          null,&lt;br /&gt;
    min_overhaul_counter                 int(10)                       null,&lt;br /&gt;
    max_overhaul_counter                 int(10)                       null,&lt;br /&gt;
    min_overhaul_date                    date                          null,&lt;br /&gt;
    max_overhaul_date                    date                          null,&lt;br /&gt;
    min_next_overhaul_counter            int(10)                       null,&lt;br /&gt;
    max_next_overhaul_counter            int(10)                       null,&lt;br /&gt;
    min_next_overhaul_date               date                          null,&lt;br /&gt;
    max_next_overhaul_date               date                          null,&lt;br /&gt;
    first_reference_visit                tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    is_visit                             tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    action_type                          tinyint(1) unsigned           null,&lt;br /&gt;
    previous_line_linked_time_action     int(10)                       null,&lt;br /&gt;
    previous_line_linked_calendar_action int(10)                       null,&lt;br /&gt;
    next_line_linked_time_action         int(10)                       null,&lt;br /&gt;
    next_line_linked_calendar_action     int(10)                       null,&lt;br /&gt;
    time_tolerance                       int(10)                       null,&lt;br /&gt;
    calendar_tolerance                   int(10)                       null,&lt;br /&gt;
    time_periodicity_component           int(10)                       null,&lt;br /&gt;
    calendar_periodicity_component       int(10)                       null,&lt;br /&gt;
    time_periodicity                     int(10)                       null,&lt;br /&gt;
    calendar_periodicity                 int(10)                       null,&lt;br /&gt;
    reference_overhaul_counter           int(10)                       null,&lt;br /&gt;
    reference_overhaul_date              date                          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_program&lt;br /&gt;
(&lt;br /&gt;
    id                                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                           int unsigned                  null,&lt;br /&gt;
    component_type_id                     int unsigned                  null,&lt;br /&gt;
    description                           varchar(255)                  null,&lt;br /&gt;
    time_periodicity                      int(10)                       null,&lt;br /&gt;
    calendar_periodicity                  int(10)                       null,&lt;br /&gt;
    time_first_reference                  int(10)                       null,&lt;br /&gt;
    calendar_first_reference              date                          null,&lt;br /&gt;
    time_tolerance                        int(10)                       null,&lt;br /&gt;
    calendar_tolerance                    int(10)                       null,&lt;br /&gt;
    frame_hours_at_work_start             int(10)                       null,&lt;br /&gt;
    date_work_end                         date                          null,&lt;br /&gt;
    time_elapsed                          int(10)                       null,&lt;br /&gt;
    calendar_elapsed                      int(10)                       null,&lt;br /&gt;
    time_remaining                        int(10)                       null,&lt;br /&gt;
    calendar_remaining                    int(10)                       null,&lt;br /&gt;
    min_next_overhaul_counter             int(10)                       null,&lt;br /&gt;
    max_next_overhaul_counter             int(10)                       null,&lt;br /&gt;
    min_next_overhaul_date                date                          null,&lt;br /&gt;
    max_next_overhaul_date                date                          null,&lt;br /&gt;
    effective_hours_at_work_start         int(10)                       null,&lt;br /&gt;
    theoretical_overhaul_counter          int(10)                       null,&lt;br /&gt;
    intelligent_overhaul_counter          int(10)                       null,&lt;br /&gt;
    intelligent_min_next_overhaul_counter int(10)                       null,&lt;br /&gt;
    intelligent_max_next_overhaul_counter int(10)                       null,&lt;br /&gt;
    effective_date_at_work_end            date                          null,&lt;br /&gt;
    theoretical_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_min_next_overhaul_date    date                          null,&lt;br /&gt;
    intelligent_max_next_overhaul_date    date                          null,&lt;br /&gt;
    overlapping_group_id                  int unsigned                  null,&lt;br /&gt;
    is_visit_rg                           tinyint(1) unsigned default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_view&lt;br /&gt;
(&lt;br /&gt;
    id                                                int unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    frame_total_time                                  int(10)                null,&lt;br /&gt;
    frame_time_since_rg                               int(10)                null,&lt;br /&gt;
    engine_time_since_rg                              int(10)                null,&lt;br /&gt;
    propeller_time_since_rg                           int(10)                null,&lt;br /&gt;
    potential_remaining_next_time_action              int(10)                null,&lt;br /&gt;
    potential_remaining_next_time_visit               int(10)                null,&lt;br /&gt;
    potential_remaining_next_priority_time_action     int(10)                null,&lt;br /&gt;
    potential_remaining_next_calendar_action          int(10)                null,&lt;br /&gt;
    potential_remaining_next_calendar_visit           int(10)                null,&lt;br /&gt;
    potential_remaining_next_priority_calendar_action int(10)                null,&lt;br /&gt;
    next_time_action_id                               int unsigned           null,&lt;br /&gt;
    next_time_visit_id                                int unsigned           null,&lt;br /&gt;
    next_priority_time_action_id                      int unsigned           null,&lt;br /&gt;
    next_calendar_action_id                           int unsigned           null,&lt;br /&gt;
    next_calendar_visit_id                            int unsigned           null,&lt;br /&gt;
    next_priority_calendar_action_id                  int unsigned           null,&lt;br /&gt;
    overhaul_counter_action                           int(10)                null,&lt;br /&gt;
    overhaul_counter_visit                            int(10)                null,&lt;br /&gt;
    overhaul_date_action                              date                   null,&lt;br /&gt;
    overhaul_date_visit                               date                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table map_logger_monitoring&lt;br /&gt;
(&lt;br /&gt;
    record_id  int unsigned not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    count_data int unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'link between flight and track';&lt;br /&gt;
&lt;br /&gt;
create table map_track&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned                  null,&lt;br /&gt;
    start_data    int unsigned                  null,&lt;br /&gt;
    number        int unsigned                  null,&lt;br /&gt;
    start_time    datetime                      null,&lt;br /&gt;
    latitude_max  double                        null,&lt;br /&gt;
    longitude_max double                        null,&lt;br /&gt;
    latitude_min  double                        null,&lt;br /&gt;
    longitude_min double                        null,&lt;br /&gt;
    visible       tinyint(1) unsigned default 1 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Tracks split from GDR';&lt;br /&gt;
&lt;br /&gt;
create table nationality&lt;br /&gt;
(&lt;br /&gt;
    code  char(2) default '' not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255)       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table parameter&lt;br /&gt;
(&lt;br /&gt;
    code       varchar(255)                  not null,&lt;br /&gt;
    key_id     int unsigned        default 0 not null,&lt;br /&gt;
    enabled    tinyint(1) unsigned default 0 null,&lt;br /&gt;
    int_value  int unsigned        default 0 null,&lt;br /&gt;
    char_value text                          null,&lt;br /&gt;
    primary key (code, key_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table payment_summary_file&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type       varchar(255)            null,&lt;br /&gt;
    content         longblob                null,&lt;br /&gt;
    record_date     datetime                null,&lt;br /&gt;
    total_entry     int unsigned            null,&lt;br /&gt;
    total_amount    decimal(15, 5) unsigned null,&lt;br /&gt;
    payment_type_id int unsigned            null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `payment_type` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `name` text,&lt;br /&gt;
  `text_field_label` text,&lt;br /&gt;
  `only_admin` tinyint(1) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `pos_key_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `treasury_account_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `person_delivery` tinyint(1) unsigned DEFAULT '0',&lt;br /&gt;
  `person_budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `treasury_budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `minimum_amount` decimal(10,0) DEFAULT NULL,&lt;br /&gt;
  `maximum_amount` decimal(10,0) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
) COMMENT='type of payment description';&lt;br /&gt;
&lt;br /&gt;
create table person&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                                      not null,&lt;br /&gt;
    hash_password          varchar(255)                                      not null,&lt;br /&gt;
    first_name             varchar(255)                                      null,&lt;br /&gt;
    last_name              varchar(255)                                      null,&lt;br /&gt;
    profile                bigint unsigned     default 0                     not null,&lt;br /&gt;
    view_type              int unsigned                                      null,&lt;br /&gt;
    view_width             tinyint unsigned    default 12                    not null,&lt;br /&gt;
    view_height            tinyint(4) unsigned default 30                    not null,&lt;br /&gt;
    aircrafts_viewed       varchar(255)                                      null,&lt;br /&gt;
    inst_viewed            varchar(255)                                      null,&lt;br /&gt;
    email                  varchar(255)                                      null,&lt;br /&gt;
    timezone               varchar(255)                                      null,&lt;br /&gt;
    address                varchar(255)                                      null,&lt;br /&gt;
    zipcode                varchar(255)                                      null,&lt;br /&gt;
    city                   varchar(255)                                      null,&lt;br /&gt;
    state                  varchar(255)                                      null,&lt;br /&gt;
    country                varchar(255)                                      null,&lt;br /&gt;
    home_phone             varchar(255)                                      null,&lt;br /&gt;
    work_phone             varchar(255)                                      null,&lt;br /&gt;
    cell_phone             varchar(255)                                      null,&lt;br /&gt;
    lang                   varchar(255)                                      null,&lt;br /&gt;
    notification           smallint unsigned                                 null,&lt;br /&gt;
    activated              tinyint(1) unsigned default 1                     null,&lt;br /&gt;
    birthdate              datetime            default '0000-00-00 00:00:00' null,&lt;br /&gt;
    sex                    tinyint(1) unsigned default 0                     not null,&lt;br /&gt;
    nationality            char(2)                                           null,&lt;br /&gt;
    total_flight_time      int unsigned        default 0                     null,&lt;br /&gt;
    date_total_flight_time datetime                                          null,&lt;br /&gt;
    guid                   varchar(255)                                      null,&lt;br /&gt;
    activity_notification  bigint unsigned                                   null,&lt;br /&gt;
    constraint idx_name&lt;br /&gt;
        unique (name),&lt;br /&gt;
    constraint name_3&lt;br /&gt;
        unique (name)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table person_awaiting_activation&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login           varchar(255)        not null,&lt;br /&gt;
    ip              varchar(255)        not null,&lt;br /&gt;
    code            varchar(255)        not null,&lt;br /&gt;
    category        varchar(255)        not null,&lt;br /&gt;
    expiration_date datetime            null,&lt;br /&gt;
    used            tinyint(1) unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'member_awaiting_activation';&lt;br /&gt;
&lt;br /&gt;
create table product&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label       varchar(255)                  not null,&lt;br /&gt;
    unit        varchar(255)                  not null,&lt;br /&gt;
    free_sale   tinyint(1)          default 0 not null,&lt;br /&gt;
    locked      tinyint(1) unsigned default 0 null,&lt;br /&gt;
    variable_id int unsigned                  null,&lt;br /&gt;
    sale_type   tinyint(1) unsigned           null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile&lt;br /&gt;
(&lt;br /&gt;
    id                bigint unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)              null,&lt;br /&gt;
    permits           int unsigned              null,&lt;br /&gt;
    permits2          int unsigned    default 0 not null,&lt;br /&gt;
    permits3          int unsigned    default 0 not null,&lt;br /&gt;
    pictogram         int unsigned              null,&lt;br /&gt;
    default_status_id int unsigned              null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_accounting_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id    bigint unsigned default 0 not null,&lt;br /&gt;
    accounting_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, accounting_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_extra_field_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned default 0 not null,&lt;br /&gt;
    business_field_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_profile_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id          bigint unsigned not null,&lt;br /&gt;
    viewable_profile_id bigint unsigned not null,&lt;br /&gt;
    primary key (profile_id, viewable_profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_required_account_type&lt;br /&gt;
(&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    account_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, account_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_place&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned default 0 not null,&lt;br /&gt;
    resource_type_id int unsigned    default 0 not null,&lt;br /&gt;
    place_num        int unsigned              not null,&lt;br /&gt;
    primary key (profile_id, resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id                bigint unsigned not null,&lt;br /&gt;
    viewable_resource_type_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, viewable_resource_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id  int unsigned    default 0 not null,&lt;br /&gt;
    manage4oneself    int(1)          default 0 not null,&lt;br /&gt;
    certify           int(1)          default 0 not null,&lt;br /&gt;
    optional_contract tinyint(1)      default 0 not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_return&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    psp_transaction_id int unsigned null,&lt;br /&gt;
    bank_answer        text         null,&lt;br /&gt;
    bank_misc          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    credit_account_id int unsigned           not null,&lt;br /&gt;
    debit_account_id  int unsigned           not null,&lt;br /&gt;
    transaction_date  datetime               not null,&lt;br /&gt;
    amount            float                  not null,&lt;br /&gt;
    description       varchar(255)           null,&lt;br /&gt;
    payment_type_id   int unsigned           not null,&lt;br /&gt;
    state             int unsigned default 0 not null,&lt;br /&gt;
    token             text                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction_account_entry&lt;br /&gt;
(&lt;br /&gt;
    psp_transaction_id    int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (psp_transaction_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table regular_presence_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned     null,&lt;br /&gt;
    start_day  tinyint unsigned null,&lt;br /&gt;
    end_day    tinyint unsigned null,&lt;br /&gt;
    start_hour time             null,&lt;br /&gt;
    end_hour   time             null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name             varchar(255)                  null,&lt;br /&gt;
    resource_type_id int unsigned                  null,&lt;br /&gt;
    comments         varchar(255)                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    activated        tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    bookable         int unsigned        default 1 null,&lt;br /&gt;
    physical         int unsigned        default 1 null,&lt;br /&gt;
    color            int unsigned                  null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of resource';&lt;br /&gt;
&lt;br /&gt;
create table resource_exceptional_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_date  datetime            null,&lt;br /&gt;
    end_date    datetime            null,&lt;br /&gt;
    presence    tinyint(1) unsigned null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_regular_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_day   tinyint(1) unsigned null,&lt;br /&gt;
    end_day     tinyint(1) unsigned null,&lt;br /&gt;
    start_hour  time                null,&lt;br /&gt;
    end_hour    time                null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_type&lt;br /&gt;
(&lt;br /&gt;
    id                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                 varchar(255)                   null,&lt;br /&gt;
    category             int unsigned                   null,&lt;br /&gt;
    seats_available      int                 default -1 null,&lt;br /&gt;
    comments             varchar(255)                   null,&lt;br /&gt;
    order_num            int                            null,&lt;br /&gt;
    activated            tinyint(1) unsigned default 1  not null,&lt;br /&gt;
    max_booking_duration int(10)             default -1 null,&lt;br /&gt;
    pictogram            int unsigned                   null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of resource type';&lt;br /&gt;
&lt;br /&gt;
create table resource_type_place_tag&lt;br /&gt;
(&lt;br /&gt;
    resource_type_id int unsigned default 0  not null,&lt;br /&gt;
    place_num        tinyint(1) unsigned     not null,&lt;br /&gt;
    place_tag        varchar(255)            null,&lt;br /&gt;
    place_quantity   int(10)      default -1 null,&lt;br /&gt;
    primary key (resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_stock&lt;br /&gt;
(&lt;br /&gt;
    id                           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    product_id                   int unsigned    null,&lt;br /&gt;
    stock_id                     int unsigned    not null,&lt;br /&gt;
    stock_variation_qty_per_sale float default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_validity_type&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned not null,&lt;br /&gt;
    new_formula      varchar(255) null,&lt;br /&gt;
    update_formula   varchar(255) null,&lt;br /&gt;
    product_id       int unsigned null,&lt;br /&gt;
    constraint validity_type_id&lt;br /&gt;
        unique (validity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of validity type into sale';&lt;br /&gt;
&lt;br /&gt;
create index idx_product&lt;br /&gt;
    on sale_2_validity_type (product_id);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    price_formula       text                          null,&lt;br /&gt;
    debit_account_id    int unsigned                  null,&lt;br /&gt;
    credit_account_id   int unsigned                  null,&lt;br /&gt;
    debit_account_type  tinyint(1) unsigned default 0 null,&lt;br /&gt;
    credit_account_type tinyint(1) unsigned default 0 null,&lt;br /&gt;
    credit_budget_id    int unsigned                  null,&lt;br /&gt;
    debit_budget_id     int unsigned                  null,&lt;br /&gt;
    order_num           int                           null,&lt;br /&gt;
    label               varchar(255)                  null,&lt;br /&gt;
    variable_formula    varchar(255)                  null,&lt;br /&gt;
    debit_bill_num      int unsigned                  null,&lt;br /&gt;
    credit_bill_num     int unsigned                  null,&lt;br /&gt;
    qty_formula         text                          null,&lt;br /&gt;
    unit_price_formula  text                          null,&lt;br /&gt;
    added_product_id    int unsigned                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_product&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned default 0 not null,&lt;br /&gt;
    product_id      int unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, product_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_profile&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned              not null,&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_trigger&lt;br /&gt;
(&lt;br /&gt;
    id             int(10) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name           varchar(255)                  null,&lt;br /&gt;
    event          varchar(255)                  null,&lt;br /&gt;
    locked         tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    query          text                          null,&lt;br /&gt;
    validate_entry tinyint(1)          default 0 null,&lt;br /&gt;
    group_sales    tinyint(1)          default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of sale trigger';&lt;br /&gt;
&lt;br /&gt;
create table spreadsheet_parameter&lt;br /&gt;
(&lt;br /&gt;
    file_number       int(10)      not null,&lt;br /&gt;
    spreadsheet_key   varchar(255) not null,&lt;br /&gt;
    spreadsheet_value varchar(255) not null,&lt;br /&gt;
    file_name         varchar(255) null,&lt;br /&gt;
    google_url        varchar(255) not null,&lt;br /&gt;
    file_type         int unsigned null,&lt;br /&gt;
    primary key (file_number, spreadsheet_key, spreadsheet_value)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table statistic&lt;br /&gt;
(&lt;br /&gt;
    name       varchar(255)                not null,&lt;br /&gt;
    of_version tinyint(3)     default 0    not null,&lt;br /&gt;
    value      decimal(15, 2) default 0.00 not null,&lt;br /&gt;
    primary key (name, of_version)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table status&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    abbrev    varchar(255) null,&lt;br /&gt;
    name      varchar(255) null,&lt;br /&gt;
    pictogram int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of functions for pilot';&lt;br /&gt;
&lt;br /&gt;
create table stock&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label         varchar(255) not null,&lt;br /&gt;
    stock_type_id int unsigned not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_level&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id   int unsigned    not null,&lt;br /&gt;
    qty        float default 0 not null,&lt;br /&gt;
    stock_date datetime        null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_type&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null,&lt;br /&gt;
    unit  varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id       int unsigned                  not null,&lt;br /&gt;
    qty            float               default 0 not null,&lt;br /&gt;
    variation_date datetime                      null,&lt;br /&gt;
    validated      tinyint(1) unsigned default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation_account_entry&lt;br /&gt;
(&lt;br /&gt;
    product_id            int unsigned default 0 not null,&lt;br /&gt;
    stock_variation_id    int unsigned           not null,&lt;br /&gt;
    account_entry_flow_id int unsigned           not null,&lt;br /&gt;
    person_id             int unsigned           not null,&lt;br /&gt;
    primary key (product_id, stock_variation_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on stock_variation_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table structure&lt;br /&gt;
(&lt;br /&gt;
    id                            int(10)         default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                          varchar(255)              null,&lt;br /&gt;
    info_cell                     text                      null,&lt;br /&gt;
    logo                          longblob                  null,&lt;br /&gt;
    logo_name                     varchar(255)              null,&lt;br /&gt;
    logo_ext                      varchar(25)               null,&lt;br /&gt;
    logo_size                     int                       null,&lt;br /&gt;
    first_hour_displayed          time                      null,&lt;br /&gt;
    last_hour_displayed           time                      null,&lt;br /&gt;
    usual_profiles                bigint unsigned default 0 not null,&lt;br /&gt;
    icao                          varchar(6)                null,&lt;br /&gt;
    default_slot_range            int unsigned              null,&lt;br /&gt;
    min_slot_range                tinyint unsigned          null,&lt;br /&gt;
    twilight_range                tinyint unsigned          null,&lt;br /&gt;
    mailing_list_name             varchar(255)              null,&lt;br /&gt;
    mailing_list_type             varchar(255)              null,&lt;br /&gt;
    structure_site_url            varchar(255)              null,&lt;br /&gt;
    default_timezone              varchar(255)              not null,&lt;br /&gt;
    lang                          varchar(255)              not null,&lt;br /&gt;
    admin_num                     int unsigned              not null,&lt;br /&gt;
    default_view_type             int unsigned              null,&lt;br /&gt;
    address                       varchar(255)              null,&lt;br /&gt;
    zipcode                       varchar(255)              null,&lt;br /&gt;
    city                          varchar(255)              null,&lt;br /&gt;
    state                         varchar(255)              null,&lt;br /&gt;
    country                       varchar(255)              null,&lt;br /&gt;
    phone                         varchar(255)              null,&lt;br /&gt;
    fax                           varchar(255)              null,&lt;br /&gt;
    email                         varchar(255)              null,&lt;br /&gt;
    default_notification          int(3) unsigned           null,&lt;br /&gt;
    welcome_cell                  text                      null,&lt;br /&gt;
    business                      text                      null,&lt;br /&gt;
    default_activity_notification bigint unsigned           null,&lt;br /&gt;
    siren                         int(10)                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_bill_type_id int unsigned         not null,&lt;br /&gt;
    bill_date             datetime             null,&lt;br /&gt;
    description           varchar(255)         null,&lt;br /&gt;
    ordinal               int unsigned         not null,&lt;br /&gt;
    validated             tinyint(1) default 0 null,&lt;br /&gt;
    supplier_bill_file_id int(10)              null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_account_entry&lt;br /&gt;
(&lt;br /&gt;
    supplier_bill_id      int unsigned not null,&lt;br /&gt;
    account_entry_flow_id int unsigned not null,&lt;br /&gt;
    primary key (supplier_bill_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on supplier_bill_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_email_parsed&lt;br /&gt;
(&lt;br /&gt;
    id                    int(10) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid                   int(10)      null,&lt;br /&gt;
    email_address         varchar(255) null,&lt;br /&gt;
    supplier_bill_file_id int(10)      null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null,&lt;br /&gt;
    name      varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_type&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_account_id int unsigned not null,&lt;br /&gt;
    name                varchar(255) null,&lt;br /&gt;
    account_id          int unsigned not null,&lt;br /&gt;
    vat_account_id      int unsigned null,&lt;br /&gt;
    supplier_budget_id  int unsigned null,&lt;br /&gt;
    account_budget_id   int unsigned null,&lt;br /&gt;
    vat_budget_id       int unsigned null,&lt;br /&gt;
    rule                text         null,&lt;br /&gt;
    sender_email        varchar(255) null,&lt;br /&gt;
    subject             varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table table_trigger&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    monitored_table varchar(255) not null,&lt;br /&gt;
    trigger_formula varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table tank&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_type_id   int unsigned                 not null,&lt;br /&gt;
    tank_type_id       int unsigned                 not null,&lt;br /&gt;
    unit_id            int unsigned                 not null,&lt;br /&gt;
    label              varchar(255)                 not null,&lt;br /&gt;
    max_quantity       decimal(15, 2) default -1.00 not null,&lt;br /&gt;
    unlimited_quantity int unsigned   default 1     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table track_record&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    in_progress            tinyint(1) unsigned                    null,&lt;br /&gt;
    start_date             datetime default '0000-00-00 00:00:00' null,&lt;br /&gt;
    activated              tinyint(1) unsigned                    null,&lt;br /&gt;
    datechsys_track_id     int unsigned                           null,&lt;br /&gt;
    resource_cat           int unsigned                           not null,&lt;br /&gt;
    resource_id            int unsigned                           not null,&lt;br /&gt;
    additional_information int unsigned                           null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of flight record';&lt;br /&gt;
&lt;br /&gt;
create table track_record_data&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned        not null,&lt;br /&gt;
    record_date   datetime            null,&lt;br /&gt;
    longitude     double              null,&lt;br /&gt;
    latitude      double              null,&lt;br /&gt;
    altitude      int(7)              null,&lt;br /&gt;
    speed         double              null,&lt;br /&gt;
    track         int(3) unsigned     null,&lt;br /&gt;
    acc_x         int(6)              null,&lt;br /&gt;
    acc_y         int(6)              null,&lt;br /&gt;
    acc_z         int(6)              null,&lt;br /&gt;
    pressure      int(5) unsigned     null,&lt;br /&gt;
    battery_level int(4) unsigned     null,&lt;br /&gt;
    gps_fix       tinyint(1) unsigned null,&lt;br /&gt;
    receive_date  datetime            null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of flight record data';&lt;br /&gt;
&lt;br /&gt;
create index idx_record_id&lt;br /&gt;
    on track_record_data (record_id);&lt;br /&gt;
&lt;br /&gt;
create table track_resource&lt;br /&gt;
(&lt;br /&gt;
    id   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `name` varchar(255) NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity` (&lt;br /&gt;
  `activity_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_id` int(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL DEFAULT '1',&lt;br /&gt;
  `level_reached` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `comment` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `validated` tinyint(1) NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`activity_id`,`training_item_id`,`training_program_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `training_program_item_id_idx` (`training_program_id`,`training_item_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_training_program_item_id_fk` FOREIGN KEY (`training_program_id`, `training_item_id`) REFERENCES `training_program_item` (`training_program_id`, `training_item_id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity_next_item` (&lt;br /&gt;
  `student_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `reporting_offset` tinyint(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `item_preselected` tinyint(1) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`student_id`,`training_program_id`,`training_item_id`),&lt;br /&gt;
  KEY `training_item_id_idx` (`training_item_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `training_activity_next_item_training_program_item_id_fk` (`training_program_id`,`training_item_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_student_id_fk` FOREIGN KEY (`student_id`) REFERENCES `person` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_training_program_item_id_fk` FOREIGN KEY (`training_program_id`, `training_item_id`) REFERENCES `training_program_item` (`training_program_id`, `training_item_id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity_person` (&lt;br /&gt;
  `activity_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `person_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `num` int(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `training_checking_date` datetime DEFAULT NULL,&lt;br /&gt;
  `training_checking_sentence` varchar(255) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`activity_id`,`person_id`,`num`),&lt;br /&gt;
  KEY `person_id_idx` (`person_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_person_activity_id_fk` FOREIGN KEY (`activity_id`) REFERENCES `flight` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_person_person_id_fk` FOREIGN KEY (`person_id`) REFERENCES `person` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_phase` (&lt;br /&gt;
  `training_program_item_order_num` int(11) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `name` varchar(255) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`training_program_item_order_num`,`training_program_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  CONSTRAINT `training_phase_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_program` (&lt;br /&gt;
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
`training_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
`name` varchar(255) NOT NULL,&lt;br /&gt;
PRIMARY KEY (`id`),&lt;br /&gt;
KEY `training_id_idx` (`training_id`),&lt;br /&gt;
CONSTRAINT `training_program_training_id_fk` FOREIGN KEY (`training_id`) REFERENCES `training` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_program_activity` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `activity_type_id` bigint(20) unsigned NOT NULL,&lt;br /&gt;
  `duration` int(11) unsigned DEFAULT NULL,&lt;br /&gt;
  `breaktime` int(11) unsigned DEFAULT NULL,&lt;br /&gt;
  `order_num` int(11) unsigned NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `activity_type_id_idx` (`activity_type_id`),&lt;br /&gt;
  CONSTRAINT `training_program_activity_activity_type_id_fk` FOREIGN KEY (`activity_type_id`) REFERENCES `activity_type` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_program_activity_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_item` (&lt;br /&gt;
  `training_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_label_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `number_of_sessions` int(11) NOT NULL,&lt;br /&gt;
  `order_num` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `custom_label` varchar(255),&lt;br /&gt;
  PRIMARY KEY (`training_id`,`training_item_label_id`),&lt;br /&gt;
  KEY `order_num_idx` (`order_num` ASC),&lt;br /&gt;
  CONSTRAINT `training_item_training_id_fk` FOREIGN KEY (`training_id`) REFERENCES `training` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    id1 int unsigned null,&lt;br /&gt;
    id2 int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of sales';&lt;br /&gt;
&lt;br /&gt;
create table validity_type&lt;br /&gt;
(&lt;br /&gt;
    id                       int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                     varchar(255)                   not null,&lt;br /&gt;
    time_limitation          tinyint(1)          default 0  not null,&lt;br /&gt;
    ident_value_enable       tinyint(1)          default 0  not null,&lt;br /&gt;
    grant_date_enable        tinyint(1)          default 0  not null,&lt;br /&gt;
    mandatory                tinyint(1)          default 0  not null,&lt;br /&gt;
    experience_formula       text                           null,&lt;br /&gt;
    mandatory_access_control tinyint(1) unsigned default 0  null,&lt;br /&gt;
    alert_on_login           int(10)             default -2 null,&lt;br /&gt;
    first_reminder_alert     int unsigned        default 0  null,&lt;br /&gt;
    reminder_frequency_alert int unsigned        default 0  null,&lt;br /&gt;
    associate_attachment     tinyint(1) unsigned default 0  not null,&lt;br /&gt;
    certification_process    tinyint(1)          default 0  not null,&lt;br /&gt;
    is_contract              tinyint(1)          default 0  not null,&lt;br /&gt;
    contract_filename        varchar(255)                   not null,&lt;br /&gt;
    contract_file            mediumblob                     not null,&lt;br /&gt;
    contract_file_extension  varchar(4)                     not null,&lt;br /&gt;
    is_OF_contract           tinyint(1)          default 0  not null,&lt;br /&gt;
    activated                tinyint(1) unsigned default 1  not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id           int unsigned         not null,&lt;br /&gt;
    validity_type_id    int unsigned         not null,&lt;br /&gt;
    registration_date   datetime             not null,&lt;br /&gt;
    expire_date         date                 null,&lt;br /&gt;
    no_alert            tinyint(1) default 0 not null,&lt;br /&gt;
    ident_value         varchar(255)         null,&lt;br /&gt;
    grant_date          date                 null,&lt;br /&gt;
    checker_person_id   int unsigned         not null,&lt;br /&gt;
    checking_date       date                 not null,&lt;br /&gt;
    checking_sentence   varchar(255)         not null,&lt;br /&gt;
    is_current_validity tinyint(1) default 0 not null,&lt;br /&gt;
    constraint validity_person_id_validity_type_id_registration_date_uindex&lt;br /&gt;
        unique (person_id, validity_type_id, registration_date),&lt;br /&gt;
    constraint validity_person_id_fk&lt;br /&gt;
        foreign key (person_id) references person (id),&lt;br /&gt;
    constraint validity_validity_type_id_fk&lt;br /&gt;
        foreign key (validity_type_id) references validity_type (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_type_page&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned        not null,&lt;br /&gt;
    page_index       int unsigned        not null,&lt;br /&gt;
    label            varchar(40)         not null,&lt;br /&gt;
    is_mandatory     tinyint(1) unsigned not null,&lt;br /&gt;
    constraint validity_type_page_validity_type_id_page_index_uindex&lt;br /&gt;
        unique (validity_type_id, page_index),&lt;br /&gt;
    constraint validity_type_page_validity_type_id_fk&lt;br /&gt;
        foreign key (validity_type_id) references validity_type (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_page&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_page_id int unsigned not null,&lt;br /&gt;
    filename              varchar(255) not null,&lt;br /&gt;
    file                  mediumblob   not null,&lt;br /&gt;
    file_extension        varchar(4)   not null,&lt;br /&gt;
    constraint validity_page_validity_type_page_id_fk&lt;br /&gt;
        foreign key (validity_type_page_id) references validity_type_page (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_2_validity_page&lt;br /&gt;
(&lt;br /&gt;
    validity_id      int unsigned not null,&lt;br /&gt;
    validity_page_id int unsigned not null,&lt;br /&gt;
    primary key (validity_id, validity_page_id),&lt;br /&gt;
    constraint validity_2_validity_page_validity_id_fk&lt;br /&gt;
        foreign key (validity_id) references validity (id),&lt;br /&gt;
    constraint validity_2_validity_page_validity_page_id_fk&lt;br /&gt;
        foreign key (validity_page_id) references validity_page (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable&lt;br /&gt;
(&lt;br /&gt;
    id         int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable   varchar(255) not null,&lt;br /&gt;
    label      varchar(255) not null,&lt;br /&gt;
    category   tinyint(1)   null,&lt;br /&gt;
    value_type varchar(255) null,&lt;br /&gt;
    order_num  int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable_value&lt;br /&gt;
(&lt;br /&gt;
    id           int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable_id  int            not null,&lt;br /&gt;
    assign_value decimal(15, 2) not null,&lt;br /&gt;
    start_date   datetime       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    channel_id       int unsigned not null,&lt;br /&gt;
    publication_date datetime     not null,&lt;br /&gt;
    title            varchar(255) null,&lt;br /&gt;
    content          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed_channel&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_pilot_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`person`.`id` AS `person_id`&lt;br /&gt;
from `of40_aeroclublys`.`person`&lt;br /&gt;
where ((`of40_aeroclublys`.`person`.`activated` = 1) and&lt;br /&gt;
       ((`of40_aeroclublys`.`person`.`profile` &amp;amp; (select `of40_aeroclublys`.`parameter`.`int_value`&lt;br /&gt;
                                                  from `of40_aeroclublys`.`parameter`&lt;br /&gt;
                                                  where (`of40_aeroclublys`.`parameter`.`code` =&lt;br /&gt;
                                                         'EXTERNAL_BOOKING_PILOT_PROFILE'))) &amp;gt; 0) and&lt;br /&gt;
       `of40_aeroclublys`.`person`.`id` in (select `of40_aeroclublys`.`regular_presence_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`regular_presence_inst_date`&lt;br /&gt;
                                            union&lt;br /&gt;
                                            select `of40_aeroclublys`.`exceptionnal_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`exceptionnal_inst_date`&lt;br /&gt;
                                            where ((`of40_aeroclublys`.`exceptionnal_inst_date`.`end_date` &amp;gt; now()) and&lt;br /&gt;
                                                   (`of40_aeroclublys`.`exceptionnal_inst_date`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_resource_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`resource`.`id` AS `resource_id`&lt;br /&gt;
from ((`of40_aeroclublys`.`resource` join `of40_aeroclublys`.`business_field_content` on ((&lt;br /&gt;
        `of40_aeroclublys`.`business_field_content`.`category_id` = `of40_aeroclublys`.`resource`.`id`)))&lt;br /&gt;
         join `of40_aeroclublys`.`business_field` on ((`of40_aeroclublys`.`business_field`.`id` =&lt;br /&gt;
                                                       `of40_aeroclublys`.`business_field_content`.`business_field_id`)))&lt;br /&gt;
where ((`of40_aeroclublys`.`resource`.`activated` = 1) and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field`.`variable` = 'canResourcePerformFirstFlights') and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field_content`.`content` = '1') and&lt;br /&gt;
       (`of40_aeroclublys`.`resource`.`bookable` = 1) and ((select count(0)&lt;br /&gt;
                                                            from `of40_aeroclublys`.`resource_type_place_tag` `seat`&lt;br /&gt;
                                                            where (`seat`.`resource_type_id` =&lt;br /&gt;
                                                                   `of40_aeroclublys`.`resource`.`resource_type_id`)) &amp;gt;=&lt;br /&gt;
                                                           2) and&lt;br /&gt;
       `of40_aeroclublys`.`resource`.`id` in (select `of40_aeroclublys`.`resource_regular_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_regular_availability`&lt;br /&gt;
                                              union&lt;br /&gt;
                                              select `of40_aeroclublys`.`resource_exceptional_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_exceptional_availability`&lt;br /&gt;
                                              where ((`of40_aeroclublys`.`resource_exceptional_availability`.`end_date` &amp;gt;&lt;br /&gt;
                                                      now()) and&lt;br /&gt;
                                                     (`of40_aeroclublys`.`resource_exceptional_availability`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function distanceBetween2Point(latitude1 double, longitude1 double, latitude2 double,&lt;br /&gt;
                                                            longitude2 double) returns double&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE dlongitude DOUBLE;&lt;br /&gt;
    DECLARE dlatitude DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET rlongitude1 = RADIANS(longitude1);&lt;br /&gt;
    SET rlatitude1 = RADIANS(latitude1);&lt;br /&gt;
    SET rlongitude2 = RADIANS(longitude2);&lt;br /&gt;
    SET rlatitude2 = RADIANS(latitude2);&lt;br /&gt;
    SET dlongitude = (rlongitude2 - rlongitude1) / 2;&lt;br /&gt;
    SET dlatitude = (rlatitude2 - rlatitude1) / 2;&lt;br /&gt;
    SET a = SIN(dlatitude) * SIN(dlatitude) + COS(rlatitude1) * COS(rlatitude2) * SIN(dlongitude) * SIN(dlongitude);&lt;br /&gt;
    RETURN (6378137 * 2 * ATAN2(SQRT(a), SQRT(1 - a)));&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function formatDecimal(string varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE replacedString VARCHAR(255);&lt;br /&gt;
    SET replacedString = string;&lt;br /&gt;
    SET @decimalSeparator = (SELECT char_value FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(replacedString &amp;lt;&amp;gt; '0.00' AND replacedString &amp;lt;&amp;gt; '0', TRIM(TRAILING '0' FROM replacedString),&lt;br /&gt;
              replacedString)&lt;br /&gt;
    INTO replacedString;&lt;br /&gt;
    SELECT TRIM(TRAILING '.' FROM replacedString) INTO replacedString;&lt;br /&gt;
    SELECT REPLACE(replacedString, '.', IFNULL(@decimalSeparator, '.')) INTO replacedString;&lt;br /&gt;
    RETURN replacedString;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function isBalancedAccountEntryFlow(flowId int) returns int&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE isBalanced INT;&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(SUM(debit) &amp;lt;&amp;gt; SUM(credit), 0, 1)&lt;br /&gt;
    into isBalanced&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE flow_id = flowId&lt;br /&gt;
    GROUP BY flow_id;&lt;br /&gt;
&lt;br /&gt;
    RETURN isBalanced;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function nearestPoint(latRef double, longRef double, distanceMax int) returns varchar(6)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
    DECLARE icao_name VARCHAR(6);&lt;br /&gt;
    DECLARE lenght DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET a = 2 * 6378137 * pi() * distanceMax / (1852 * 60 * 360);&lt;br /&gt;
    SET rlongitude1 = longRef + a / cos(latRef);&lt;br /&gt;
    SET rlongitude2 = longRef - a / cos(latRef);&lt;br /&gt;
    SET rlatitude1 = latRef + a;&lt;br /&gt;
    SET rlatitude2 = latRef - a;&lt;br /&gt;
&lt;br /&gt;
    SELECT loc1.icao_name,&lt;br /&gt;
           distanceBetween2Point(&lt;br /&gt;
                   (SELECT loc2.latitude FROM location AS loc2 WHERE loc2.icao_name = loc1.icao_name),&lt;br /&gt;
                   (SELECT loc3.longitude FROM location AS loc3 WHERE loc3.icao_name = loc1.icao_name),&lt;br /&gt;
                   latRef,&lt;br /&gt;
                   longRef) AS distance&lt;br /&gt;
    FROM location AS loc1&lt;br /&gt;
    WHERE IF(rlongitude2 &amp;lt; rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude2 AND rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude1 AND rlongitude2)&lt;br /&gt;
      AND IF(rlatitude2 &amp;lt; rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude2 AND rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude1 AND rlatitude2)&lt;br /&gt;
    HAVING distance &amp;lt; distanceMax&lt;br /&gt;
    ORDER BY distance&lt;br /&gt;
    LIMIT 1&lt;br /&gt;
    INTO icao_name, lenght;&lt;br /&gt;
&lt;br /&gt;
    RETURN icao_name;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursHundredths(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255);&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    DECLARE decimalSeparator VARCHAR(1);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
    SET decimalSeparator =&lt;br /&gt;
            (SELECT IFNULL(char_value, '.') FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, decimalSeparator, LPAD(FLOOR(remainingTime / 6), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursMinute(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255); # We separate hours computation from roundHours in order to keep the minus sign if hours is 0 but sexacentimal negative&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, ':', LPAD(FLOOR(remainingTime / 10), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function stripChars(word varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE stripWord VARCHAR(255);&lt;br /&gt;
    SET stripWord = word;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[-]', REPLACE(stripWord, '-', ''), stripWord) INTO stripWord;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[ ]', REPLACE(stripWord, ' ', ''), stripWord) INTO stripWord;&lt;br /&gt;
    RETURN stripWord;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryCredit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalCredit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryDebit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit&lt;br /&gt;
    INTO totalDebit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalDebit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function sumValidatedAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME)&lt;br /&gt;
      AND validated = 1;&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
==Table booking==&lt;br /&gt;
&lt;br /&gt;
Le contenu du champ ''aircraft_id'' de la table ''booking'' peut être nul. Dans ce cas, c'est une ancienne réservation effectuée sur une ressource non-existante ou qui n'existe plus; aussi nommé réservation orpheline.&lt;br /&gt;
&lt;br /&gt;
==Table flight==&lt;br /&gt;
&lt;br /&gt;
*airborne :&lt;br /&gt;
**0: Pas en l'air ou fermeture de vol : Le pilote a terminé le vol.&lt;br /&gt;
**1: En l'air ou ouverture de vol : Le pilote remplit le vol avant de voler.&lt;br /&gt;
&lt;br /&gt;
==Champs cachés==&lt;br /&gt;
Les champs suivants ne peuvent être exportés et ne doivent pas être inclus dans une requête SELECT. De plus, un &amp;quot;SELECT *&amp;quot; est interdit quand une des tables contient un champ caché :&lt;br /&gt;
*Table journal : Tous les champs&lt;br /&gt;
*Table log : Tous les champs&lt;br /&gt;
*Table parameter : Tous les champs&lt;br /&gt;
*Table person :&lt;br /&gt;
**hash_password&lt;br /&gt;
*Table structure :&lt;br /&gt;
**address&lt;br /&gt;
**admin_num&lt;br /&gt;
**city&lt;br /&gt;
**country&lt;br /&gt;
**default_notification&lt;br /&gt;
**default_slot_range&lt;br /&gt;
**default_timezone&lt;br /&gt;
**default_view_type&lt;br /&gt;
**email&lt;br /&gt;
**fax&lt;br /&gt;
**first_hour_displayed&lt;br /&gt;
**info_cell&lt;br /&gt;
**lang&lt;br /&gt;
**last_hour_displayed&lt;br /&gt;
**logo&lt;br /&gt;
**logo_name&lt;br /&gt;
**logo_ext&lt;br /&gt;
**logo_size&lt;br /&gt;
**mail_from_address&lt;br /&gt;
**mailing_list_name&lt;br /&gt;
**mailing_list_type&lt;br /&gt;
**min_slot_range&lt;br /&gt;
**name&lt;br /&gt;
**phone&lt;br /&gt;
**state&lt;br /&gt;
**twilight_range&lt;br /&gt;
**usual_profiles&lt;br /&gt;
**welcome_cell&lt;br /&gt;
**zipcode&lt;br /&gt;
*Table oauth_client : Tous les champs&lt;br /&gt;
*Table oauth_access_token : Tous les champs&lt;br /&gt;
*Table oauth_auth_code : Tous les champs&lt;br /&gt;
*Table oauth_refresh_token : Tous les champs&lt;br /&gt;
&lt;br /&gt;
Exemple de requêtes non autorisées :&lt;br /&gt;
&amp;lt;sql&amp;gt;SELECT * FROM structure;&lt;br /&gt;
&lt;br /&gt;
SELECT hash_password FROM person;&lt;br /&gt;
&lt;br /&gt;
SELECT person.id, validity.*&lt;br /&gt;
FROM person&lt;br /&gt;
LEFT JOIN validity ON (person.id=validity.person_id);&amp;lt;/sql&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14398</id>
		<title>Structure de la base de données</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Structure-de-la-base-de-donn%C3%A9es&amp;diff=14398"/>
		<updated>2026-04-08T12:08:09Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Schéma de la structure de la base de données=&lt;br /&gt;
*[[Media:OpenFlyers_database_schema.png|Lien vers schéma fichier .png]]&lt;br /&gt;
&lt;br /&gt;
=Structure=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create table account&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    creation_date    date                          null,&lt;br /&gt;
    name             text                          null,&lt;br /&gt;
    export_account   varchar(255)                  null,&lt;br /&gt;
    activated        tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    category         tinyint(1) unsigned default 0 null,&lt;br /&gt;
    account_type     tinyint(1) unsigned default 0 null,&lt;br /&gt;
    owner_id         int unsigned        default 0 not null,&lt;br /&gt;
    payment_allowed  tinyint(1)          default 0 null,&lt;br /&gt;
    budget_id        int unsigned                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    accounting_id    int unsigned                  null,&lt;br /&gt;
    deactivated_date datetime                      null,&lt;br /&gt;
    group_sales      tinyint(1)          default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of account';&lt;br /&gt;
&lt;br /&gt;
create index idx_owner_id&lt;br /&gt;
    on account (owner_id);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `account_entry` (&lt;br /&gt;
  `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `flow_id` int(11) DEFAULT NULL,&lt;br /&gt;
  `account_date` datetime DEFAULT NULL,&lt;br /&gt;
  `account_id` int(11) DEFAULT NULL,&lt;br /&gt;
  `credit` decimal(15,5) DEFAULT '0.00000',&lt;br /&gt;
  `debit` decimal(15,5) DEFAULT '0.00000',&lt;br /&gt;
  `payment_type` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `payment_description` text,&lt;br /&gt;
  `person_delivery_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `comments` text,&lt;br /&gt;
  `validated` int(1) DEFAULT '0',&lt;br /&gt;
  `exported` int(1) DEFAULT '0',&lt;br /&gt;
  `registration_date` datetime DEFAULT NULL,&lt;br /&gt;
  `budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `product_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `signature` varchar(56) DEFAULT NULL,&lt;br /&gt;
  `signature_date` bigint(13) unsigned DEFAULT NULL,&lt;br /&gt;
  `lettering` int(11) DEFAULT NULL,&lt;br /&gt;
  `lettering_date` datetime DEFAULT NULL,&lt;br /&gt;
  `flow_reversal_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `transaction_id` text,&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  KEY `idx_flow_id` (`flow_id`),&lt;br /&gt;
  KEY `idx_account_date` (`account_date`),&lt;br /&gt;
  KEY `idx_signature_date` (`signature_date`),&lt;br /&gt;
  KEY `flow_reversal_id_idx` (`flow_reversal_id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_link&lt;br /&gt;
(&lt;br /&gt;
    account_id        int unsigned default 0 not null,&lt;br /&gt;
    linked_account_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (account_id, linked_account_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                  null,&lt;br /&gt;
    category               tinyint(1) unsigned default 0 null,&lt;br /&gt;
    activated              tinyint(1)          default 1 null,&lt;br /&gt;
    order_num              int                           null,&lt;br /&gt;
    accounting_id          int unsigned                  null,&lt;br /&gt;
    export_account_pattern varchar(255)                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table account_type_profile&lt;br /&gt;
(&lt;br /&gt;
    account_type_id int unsigned    default 0 not null,&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (account_type_id, profile_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Linked account type and profile';&lt;br /&gt;
&lt;br /&gt;
create table accounting&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)           null,&lt;br /&gt;
    unit_name         varchar(255)           null,&lt;br /&gt;
    symbol            varchar(255)           null,&lt;br /&gt;
    format            tinyint(1)             null,&lt;br /&gt;
    decimal_precision int unsigned default 2 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table accounting_profile&lt;br /&gt;
(&lt;br /&gt;
    accounting_id int unsigned    default 0 not null,&lt;br /&gt;
    profile_id    bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (accounting_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table activity_type&lt;br /&gt;
(&lt;br /&gt;
    id        bigint unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name      varchar(255)              null,&lt;br /&gt;
    order_num int                       null,&lt;br /&gt;
    activated tinyint(1)      default 1 not null,&lt;br /&gt;
    color     int unsigned              null,&lt;br /&gt;
    training  tinyint(1)      default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft&lt;br /&gt;
(&lt;br /&gt;
    id                            int unsigned     default 0     not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    ref_date                      datetime                       null,&lt;br /&gt;
    ref_hours                     int                            null,&lt;br /&gt;
    inspection_date               datetime                       null,&lt;br /&gt;
    inspection_time               int                            null,&lt;br /&gt;
    tolerance_time                int(11) unsigned default 6000  null,&lt;br /&gt;
    last_counter                  int                            null,&lt;br /&gt;
    interval_visit                int(11) unsigned default 30000 null,&lt;br /&gt;
    time_alert1                   int              default 6000  null,&lt;br /&gt;
    time_alert2                   int              default 0     null,&lt;br /&gt;
    time_alert3                   int              default -3000 null,&lt;br /&gt;
    day_alert1                    smallint(3)      default 15    null,&lt;br /&gt;
    day_alert2                    smallint(3)      default 0     null,&lt;br /&gt;
    day_alert3                    smallint(3)      default -8    null,&lt;br /&gt;
    day_alert1_send_email         tinyint(1)       default 0     null,&lt;br /&gt;
    day_alert2_send_email         tinyint(1)       default 0     null,&lt;br /&gt;
    day_alert3_send_email         tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert1_send_email        tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert2_send_email        tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert3_send_email        tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert1_send_email tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert2_send_email tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert3_send_email tinyint(1)       default 0     null,&lt;br /&gt;
    day_alert1_email_sent         tinyint(1)       default 0     null,&lt;br /&gt;
    day_alert2_email_sent         tinyint(1)       default 0     null,&lt;br /&gt;
    day_alert3_email_sent         tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert1_email_sent        tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert2_email_sent        tinyint(1)       default 0     null,&lt;br /&gt;
    time_alert3_email_sent        tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert1_email_sent tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert2_email_sent tinyint(1)       default 0     null,&lt;br /&gt;
    engine_time_alert3_email_sent tinyint(1)       default 0     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    id                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_time_formula  varchar(255)        default '%DURATION' null,&lt;br /&gt;
    counter_state        tinyint(2)          default -1          not null,&lt;br /&gt;
    tolerance            int                 default 0           null,&lt;br /&gt;
    autonomy             int                 default 5990        null,&lt;br /&gt;
    true_air_speed       int unsigned        default 0           not null,&lt;br /&gt;
    digit_counter_number tinyint(1) unsigned default 4           not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Types of aircraft';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_allowed_status&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned null,&lt;br /&gt;
    place_num        int unsigned null,&lt;br /&gt;
    status_id        int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of allowed functions for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_mandatory_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    null,&lt;br /&gt;
    activity_type_id bigint unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of compulsory flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned    null,&lt;br /&gt;
    activity_type_id bigint unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of uncompatible flight type for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table aircraft_type_validity_type&lt;br /&gt;
(&lt;br /&gt;
    aircraft_type_id int unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned default 0 not null,&lt;br /&gt;
    check_num        int unsigned default 0 not null,&lt;br /&gt;
    primary key (aircraft_type_id, validity_type_id, check_num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Types of qualif required for each aircraft type';&lt;br /&gt;
&lt;br /&gt;
create table allocation_rule&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    title      varchar(255)         not null,&lt;br /&gt;
    account_id int(10)              not null,&lt;br /&gt;
    keyword    varchar(255)         null,&lt;br /&gt;
    order_num  int(10)              not null,&lt;br /&gt;
    amount     tinyint(1)           not null,&lt;br /&gt;
    mandatory  tinyint(1) default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance&lt;br /&gt;
(&lt;br /&gt;
    account_id      int unsigned                   not null,&lt;br /&gt;
    balance_date_id int unsigned                   not null,&lt;br /&gt;
    debit           decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit          decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    primary key (account_id, balance_date_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table balance_date&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    balance_date datetime null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    booking_group_id int unsigned null,&lt;br /&gt;
    start_date       datetime     null,&lt;br /&gt;
    end_date         datetime     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_account_entry&lt;br /&gt;
(&lt;br /&gt;
    booking_id            int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_activity_type&lt;br /&gt;
(&lt;br /&gt;
    booking_id       int unsigned default 0 not null,&lt;br /&gt;
    activity_type_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, activity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_changelog&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    booking_id     int unsigned not null,&lt;br /&gt;
    person_id      int unsigned not null,&lt;br /&gt;
    changelog_date datetime     not null,&lt;br /&gt;
    booking_state  text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_person&lt;br /&gt;
(&lt;br /&gt;
    booking_id int unsigned default 0 not null,&lt;br /&gt;
    person_id  int unsigned default 0 not null,&lt;br /&gt;
    place_num  int unsigned           null,&lt;br /&gt;
    status_id  int unsigned           null,&lt;br /&gt;
    primary key (booking_id, person_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table booking_resource&lt;br /&gt;
(&lt;br /&gt;
    booking_id  int unsigned default 0 not null,&lt;br /&gt;
    resource_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (booking_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `booking_training_program` (&lt;br /&gt;
  `booking_group_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`booking_group_id`,`training_program_id`),&lt;br /&gt;
  CONSTRAINT `booking_training_program_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    group_id    int unsigned default 0 not null,&lt;br /&gt;
    name        varchar(255)           null,&lt;br /&gt;
    order_num   int                    null,&lt;br /&gt;
    export_code varchar(255)           null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table budget_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name      varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `business_field` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `variable` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `label` varchar(255) NOT NULL,&lt;br /&gt;
  `value_type` varchar(40) NOT NULL,&lt;br /&gt;
  `category` varchar(255) NOT NULL,&lt;br /&gt;
  `order_num` int(11) NOT NULL,&lt;br /&gt;
  `dsn` varchar(20) DEFAULT 'customer',&lt;br /&gt;
  `compulsory_fill` tinyint(1) DEFAULT '0',&lt;br /&gt;
  `linked_category` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `linked_business_field_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `linked_field_name` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `max_display` int(10) DEFAULT '-1',&lt;br /&gt;
  `formula` text,&lt;br /&gt;
  `default_value` text,&lt;br /&gt;
  `placeholder` text,&lt;br /&gt;
  `access_level_required` tinyint(4) NOT NULL DEFAULT '0',&lt;br /&gt;
  `user_access_mode` tinyint(1) NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  UNIQUE KEY `variable` (`variable`),&lt;br /&gt;
  KEY `business_field_linked_business_field_id_fk` (`linked_business_field_id`),&lt;br /&gt;
  CONSTRAINT `business_field_linked_business_field_id_fk` FOREIGN KEY (`linked_business_field_id`) REFERENCES `business_field` (`id`)&lt;br /&gt;
) COMMENT='List of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_activity_type&lt;br /&gt;
(&lt;br /&gt;
    business_field_id       int unsigned    default 0 not null,&lt;br /&gt;
    activity_type_id        bigint unsigned default 0 not null,&lt;br /&gt;
    business_field_group_id int unsigned    default 0 not null,&lt;br /&gt;
    visibility_type         tinyint(1) unsigned       null,&lt;br /&gt;
    primary key (business_field_id, activity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table business_field_content&lt;br /&gt;
(&lt;br /&gt;
    category_id       int unsigned           not null,&lt;br /&gt;
    business_field_id int unsigned default 0 not null,&lt;br /&gt;
    person_id         int unsigned default 0 not null,&lt;br /&gt;
    content           text                   null,&lt;br /&gt;
    placeholder       text                   null,&lt;br /&gt;
    primary key (category_id, business_field_id, person_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Content of extra form field';&lt;br /&gt;
&lt;br /&gt;
create table business_field_group&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255) null,&lt;br /&gt;
    order_num int          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria&lt;br /&gt;
(&lt;br /&gt;
    id        int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label     varchar(255)                   not null,&lt;br /&gt;
    predicate text                           not null,&lt;br /&gt;
    order_num int                            null,&lt;br /&gt;
    dsn       varchar(20) default 'customer' null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table criteria_profile&lt;br /&gt;
(&lt;br /&gt;
    criteria_id int unsigned    not null,&lt;br /&gt;
    profile_id  bigint unsigned not null,&lt;br /&gt;
    primary key (criteria_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    customer_bill_id      int unsigned                   null,&lt;br /&gt;
    product_id            int unsigned                   null,&lt;br /&gt;
    qty                   decimal(15, 2) default 0.00    null,&lt;br /&gt;
    unit_price            decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    bill_date             datetime                       null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_bill_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_bill_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of customer bill stored file';&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_entry&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flow_id               int unsigned                   null,&lt;br /&gt;
    account_entry_id      int unsigned                   null,&lt;br /&gt;
    account_entry_flow_id int unsigned                   null,&lt;br /&gt;
    owner_category        int unsigned                   null,&lt;br /&gt;
    owner_id              int unsigned                   null,&lt;br /&gt;
    payment_type_id       int unsigned                   null,&lt;br /&gt;
    customer_receipt_id   int unsigned                   null,&lt;br /&gt;
    debit                 decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    credit                decimal(15, 5) default 0.00000 null,&lt;br /&gt;
    receipt_date          datetime                       null,&lt;br /&gt;
    owner_email           varchar(255)                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on customer_receipt_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table customer_receipt_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_display&lt;br /&gt;
(&lt;br /&gt;
    person_id     int unsigned            not null,&lt;br /&gt;
    display_key   varchar(255) default '' not null,&lt;br /&gt;
    display_value text                    null,&lt;br /&gt;
    primary key (person_id, display_key)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table default_multi_display&lt;br /&gt;
(&lt;br /&gt;
    resource_type char(30)     not null,&lt;br /&gt;
    person_id     int unsigned not null,&lt;br /&gt;
    resource_id   varchar(100) not null,&lt;br /&gt;
    display_value text         null,&lt;br /&gt;
    primary key (resource_type, person_id, resource_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent&lt;br /&gt;
(&lt;br /&gt;
    id          bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    message_id  varchar(150)     not null,&lt;br /&gt;
    sender      varchar(255)     not null,&lt;br /&gt;
    title       varchar(255)     not null,&lt;br /&gt;
    category    tinyint unsigned not null,&lt;br /&gt;
    category_id int unsigned     not null,&lt;br /&gt;
    constraint message_id_UNIQUE&lt;br /&gt;
        unique (message_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table email_sent_recipient&lt;br /&gt;
(&lt;br /&gt;
    id                   bigint unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    email_sent_id        bigint unsigned  not null,&lt;br /&gt;
    person_id            int unsigned     not null,&lt;br /&gt;
    email                varchar(255)     null,&lt;br /&gt;
    recipient_type       tinyint unsigned null,&lt;br /&gt;
    smtp_status_category varchar(30)      null,&lt;br /&gt;
    email_status         tinyint unsigned null,&lt;br /&gt;
    update_date          datetime         not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index email_sent_id_idx&lt;br /&gt;
    on email_sent_recipient (email_sent_id);&lt;br /&gt;
&lt;br /&gt;
create table exceptionnal_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned        null,&lt;br /&gt;
    start_date datetime            null,&lt;br /&gt;
    end_date   datetime            null,&lt;br /&gt;
    presence   tinyint(1) unsigned null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table extra_field_profile&lt;br /&gt;
(&lt;br /&gt;
    business_field_id                  int unsigned    default 0 not null,&lt;br /&gt;
    booking_popup_display_4_profile_id bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (business_field_id, booking_popup_display_4_profile_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'Linked extra field and profile';&lt;br /&gt;
&lt;br /&gt;
create table facebook&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    category    int unsigned not null,&lt;br /&gt;
    owner_id    int unsigned not null,&lt;br /&gt;
    small       blob         null,&lt;br /&gt;
    original    mediumblob   not null,&lt;br /&gt;
    label       text         null,&lt;br /&gt;
    description text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_icao&lt;br /&gt;
(&lt;br /&gt;
    icao varchar(6) default '' not null&lt;br /&gt;
        primary key&lt;br /&gt;
)&lt;br /&gt;
    comment 'favorite airfield list';&lt;br /&gt;
&lt;br /&gt;
create table favorite_report&lt;br /&gt;
(&lt;br /&gt;
    report_id int unsigned not null&lt;br /&gt;
        primary key&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_business_field&lt;br /&gt;
(&lt;br /&gt;
    report_id         int unsigned not null,&lt;br /&gt;
    business_field_id int unsigned not null,&lt;br /&gt;
    default_value     text         null,&lt;br /&gt;
    primary key (report_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table favorite_report_profile&lt;br /&gt;
(&lt;br /&gt;
    report_id  int unsigned              not null,&lt;br /&gt;
    profile_id bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (report_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table fhp_aircraft_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int(10) default 0 not null,&lt;br /&gt;
    aircraft_type_id int(10) default 0 not null,&lt;br /&gt;
    primary key (fhp_id, aircraft_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing aircraft type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    fhp_id           int(10)             default 0 not null,&lt;br /&gt;
    activity_type_id bigint unsigned     default 0 not null,&lt;br /&gt;
    excluded         tinyint(1) unsigned default 0 null,&lt;br /&gt;
    primary key (fhp_id, activity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight hour pricing flight type list';&lt;br /&gt;
&lt;br /&gt;
create table fhp_profile&lt;br /&gt;
(&lt;br /&gt;
    fhp_id     int unsigned                  not null,&lt;br /&gt;
    profile_id bigint unsigned               not null,&lt;br /&gt;
    place_num  tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    primary key (fhp_id, profile_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table file&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name          varchar(255)        null,&lt;br /&gt;
    content       longblob            null,&lt;br /&gt;
    file_type     varchar(255)        null,&lt;br /&gt;
    category      tinyint(1) unsigned null,&lt;br /&gt;
    owner_id      int(10)             null,&lt;br /&gt;
    file_group_id int(10)             null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of stored file';&lt;br /&gt;
&lt;br /&gt;
create table file_group&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_id           int unsigned               null,&lt;br /&gt;
    start_date            datetime                   null,&lt;br /&gt;
    duration              int                        null,&lt;br /&gt;
    activity_type_id      bigint unsigned            null,&lt;br /&gt;
    people_onboard        int unsigned               null,&lt;br /&gt;
    departure_location_id int unsigned               null,&lt;br /&gt;
    arrival_location_id   int unsigned               null,&lt;br /&gt;
    counter_departure     int unsigned               null,&lt;br /&gt;
    counter_arrival       int unsigned               null,&lt;br /&gt;
    landing_number        int(10)                    null,&lt;br /&gt;
    airborne              tinyint(1) unsigned        null,&lt;br /&gt;
    validated             tinyint unsigned default 0 null,&lt;br /&gt;
    departure_icao_id     varchar(6)                 null,&lt;br /&gt;
    arrival_icao_id       varchar(6)                 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_account_entry&lt;br /&gt;
(&lt;br /&gt;
    flight_id        int unsigned default 0 not null,&lt;br /&gt;
    account_entry_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, account_entry_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'flight account entry join';&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_id&lt;br /&gt;
    on flight_account_entry (account_entry_id);&lt;br /&gt;
&lt;br /&gt;
create table flight_hours_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name               text                          null,&lt;br /&gt;
    price_formula      text                          null,&lt;br /&gt;
    left_account_id    int unsigned                  null,&lt;br /&gt;
    right_account_id   int unsigned                  null,&lt;br /&gt;
    left_account_type  tinyint(1) unsigned default 0 null,&lt;br /&gt;
    right_account_type tinyint(1) unsigned default 0 null,&lt;br /&gt;
    order_num          int                           null,&lt;br /&gt;
    credit_budget_id   int unsigned                  null,&lt;br /&gt;
    debit_budget_id    int unsigned                  null,&lt;br /&gt;
    product_id         int unsigned                  null,&lt;br /&gt;
    sale_trigger_id    int unsigned        default 0 null,&lt;br /&gt;
    query              text                          null,&lt;br /&gt;
    variable_formula   text                          null,&lt;br /&gt;
    business_field_id  int unsigned                  null,&lt;br /&gt;
    debit_bill_num     int unsigned                  null,&lt;br /&gt;
    credit_bill_num    int unsigned                  null,&lt;br /&gt;
    qty_formula        text                          null,&lt;br /&gt;
    unit_price_formula text                          null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of flight hours pricing formula';&lt;br /&gt;
&lt;br /&gt;
create table flight_pilot&lt;br /&gt;
(&lt;br /&gt;
    flight_id int unsigned           not null,&lt;br /&gt;
    pilot_id  int unsigned           not null,&lt;br /&gt;
    status_id int unsigned           null,&lt;br /&gt;
    num       int unsigned default 0 not null,&lt;br /&gt;
    primary key (flight_id, pilot_id, num)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of crew for each flight';&lt;br /&gt;
&lt;br /&gt;
create table flight_tank_qty&lt;br /&gt;
(&lt;br /&gt;
    id           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    flight_id    int unsigned                not null,&lt;br /&gt;
    tank_id      int unsigned                not null,&lt;br /&gt;
    quantity     varchar(255) default '0.00' not null,&lt;br /&gt;
    after_flight tinyint(1)   default 0      not null,&lt;br /&gt;
    account_id   int unsigned                null,&lt;br /&gt;
    pay_type     tinyint(1) unsigned         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `flight_track` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `flight_id` int(10) NOT NULL,&lt;br /&gt;
  `track` mediumblob NOT NULL,&lt;br /&gt;
  `file_type` varchar(255) DEFAULT 'kml',&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table flight_type_mandatory_validity_type&lt;br /&gt;
(&lt;br /&gt;
    activity_type_id bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (activity_type_id, validity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of mandatory qualification for each flight type';&lt;br /&gt;
&lt;br /&gt;
create table import&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label               varchar(255)                          not null,&lt;br /&gt;
    order_num           int                                   null,&lt;br /&gt;
    import_file_type    varchar(255) default 'csv-comma-CRLF' not null,&lt;br /&gt;
    match_query         text                                  null,&lt;br /&gt;
    uptodate_test_query text                                  null,&lt;br /&gt;
    update_query        text                                  null,&lt;br /&gt;
    update_activated    tinyint(1)   default 0                not null,&lt;br /&gt;
    login               varchar(255)                          null,&lt;br /&gt;
    hash_password       varchar(255)                          null,&lt;br /&gt;
    sync_task_name      varchar(255)                          null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of import';&lt;br /&gt;
&lt;br /&gt;
create table ip_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    ip          varchar(255)        not null,&lt;br /&gt;
    counter     tinyint(1) unsigned not null,&lt;br /&gt;
    expire_date datetime            not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'BLACKLISTED IP';&lt;br /&gt;
&lt;br /&gt;
create table journal&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login     varchar(255)           null,&lt;br /&gt;
    date_log  datetime               null,&lt;br /&gt;
    rights    text                   null,&lt;br /&gt;
    rights2   text                   null,&lt;br /&gt;
    action    varchar(255)           null,&lt;br /&gt;
    person_id int unsigned default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'list of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_action&lt;br /&gt;
    on journal (action);&lt;br /&gt;
&lt;br /&gt;
create index idx_date_log&lt;br /&gt;
    on journal (date_log);&lt;br /&gt;
&lt;br /&gt;
create table key_alert&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    alert_date datetime               null,&lt;br /&gt;
    status     int unsigned default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Key alerts';&lt;br /&gt;
&lt;br /&gt;
create table key_assignment&lt;br /&gt;
(&lt;br /&gt;
    key_id      tinyint(2) unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    key_name    tinytext                      null,&lt;br /&gt;
    aircraft_id int unsigned        default 0 null,&lt;br /&gt;
    key_state   tinyint(1) unsigned default 0 null,&lt;br /&gt;
    key_word    bigint unsigned     default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table key_host&lt;br /&gt;
(&lt;br /&gt;
    id       tinyint(2) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    timeout  tinyint(2)          default 10          not null,&lt;br /&gt;
    num_key  tinyint(2) unsigned default 10          not null,&lt;br /&gt;
    ipkey    varchar(50)         default '127.0.0.1' not null,&lt;br /&gt;
    httpport int                 default 4080        not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table key_log&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    log_date  datetime     null,&lt;br /&gt;
    action    varchar(255) null,&lt;br /&gt;
    message   varchar(255) null,&lt;br /&gt;
    key_id    int unsigned null,&lt;br /&gt;
    person_id int unsigned null,&lt;br /&gt;
    xmlrpc    int unsigned not null,&lt;br /&gt;
    error     varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Key logs';&lt;br /&gt;
&lt;br /&gt;
create table location&lt;br /&gt;
(&lt;br /&gt;
    icao_name       varchar(6)       not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name            varchar(64)      not null,&lt;br /&gt;
    latitude        double           null,&lt;br /&gt;
    longitude       double           null,&lt;br /&gt;
    altitude        int(7)           null,&lt;br /&gt;
    weather_station int(1) unsigned  null,&lt;br /&gt;
    asked_counter   bigint default 0 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'airfields coord';&lt;br /&gt;
&lt;br /&gt;
create table log&lt;br /&gt;
(&lt;br /&gt;
    journal_id  int unsigned not null,&lt;br /&gt;
    action      varchar(255) null,&lt;br /&gt;
    table_name  varchar(255) null,&lt;br /&gt;
    field_name  varchar(255) null,&lt;br /&gt;
    field_value varchar(255) null&lt;br /&gt;
)&lt;br /&gt;
    comment 'part of logs';&lt;br /&gt;
&lt;br /&gt;
create index idx_field_value&lt;br /&gt;
    on log (field_value);&lt;br /&gt;
&lt;br /&gt;
create index idx_journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create index journal_id&lt;br /&gt;
    on log (journal_id);&lt;br /&gt;
&lt;br /&gt;
create table logger&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    serial_number int unsigned                      null,&lt;br /&gt;
    color         varchar(20)         default 'red' not null,&lt;br /&gt;
    activated     tinyint(1) unsigned default 1     not null,&lt;br /&gt;
    order_num     int unsigned                      not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Logger parameters';&lt;br /&gt;
&lt;br /&gt;
create table login_stopped&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login       varchar(255)     not null,&lt;br /&gt;
    counter     tinyint unsigned not null,&lt;br /&gt;
    expire_date datetime         not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'BLACKLISTED LOGIN';&lt;br /&gt;
&lt;br /&gt;
create table m_component&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id           int unsigned        default 0 not null,&lt;br /&gt;
    m_component_type_id int unsigned                  null,&lt;br /&gt;
    resource_id         int unsigned                  null,&lt;br /&gt;
    order_num           int                           not null,&lt;br /&gt;
    serial_number       varchar(255)                  null,&lt;br /&gt;
    brandnew_date       datetime                      null,&lt;br /&gt;
    activated           tinyint(1) unsigned default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    parent_id              int unsigned        default 0 not null,&lt;br /&gt;
    resource_type_id       int                           null,&lt;br /&gt;
    m_classification_id    int                           null,&lt;br /&gt;
    is_maintenance_check   tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    order_num              int                           not null,&lt;br /&gt;
    label                  varchar(255)                  null,&lt;br /&gt;
    description            varchar(255)                  null,&lt;br /&gt;
    manufacturer           varchar(255)                  null,&lt;br /&gt;
    manufacturer_reference varchar(255)                  null,&lt;br /&gt;
    part_number            varchar(255)                  null,&lt;br /&gt;
    periodicity            int unsigned                  null,&lt;br /&gt;
    tolerance              int unsigned        default 0 not null,&lt;br /&gt;
    calendar_periodicity   int unsigned                  null,&lt;br /&gt;
    calendar_tolerance     int unsigned        default 0 not null,&lt;br /&gt;
    activated              tinyint(1) unsigned default 1 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_component_type_parentality&lt;br /&gt;
(&lt;br /&gt;
    m_component_type_id        int unsigned not null,&lt;br /&gt;
    m_component_type_parent_id int unsigned not null,&lt;br /&gt;
    primary key (m_component_type_id, m_component_type_parent_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_history&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    m_component_id         int unsigned                  not null,&lt;br /&gt;
    install_date           datetime                      null,&lt;br /&gt;
    remove_date            datetime                      null,&lt;br /&gt;
    total_hours_on_install int unsigned        default 0 not null,&lt;br /&gt;
    threshold_hours        int unsigned        default 0 not null,&lt;br /&gt;
    threshold_date         datetime                      null,&lt;br /&gt;
    threshold_date_locked  tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    threshold_hours_locked tinyint(1) unsigned default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table m_operation&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    content             text         null,&lt;br /&gt;
    m_component_type_id int unsigned not null,&lt;br /&gt;
    order_num           int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_history&lt;br /&gt;
(&lt;br /&gt;
    id                                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                          int unsigned                  null,&lt;br /&gt;
    maintenance_program_id               int unsigned                  null,&lt;br /&gt;
    frame_hours_at_work_start            int(10)                       null,&lt;br /&gt;
    date_work_end                        date                          null,&lt;br /&gt;
    min_overhaul_counter                 int(10)                       null,&lt;br /&gt;
    max_overhaul_counter                 int(10)                       null,&lt;br /&gt;
    min_overhaul_date                    date                          null,&lt;br /&gt;
    max_overhaul_date                    date                          null,&lt;br /&gt;
    min_next_overhaul_counter            int(10)                       null,&lt;br /&gt;
    max_next_overhaul_counter            int(10)                       null,&lt;br /&gt;
    min_next_overhaul_date               date                          null,&lt;br /&gt;
    max_next_overhaul_date               date                          null,&lt;br /&gt;
    first_reference_visit                tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    is_visit                             tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    action_type                          tinyint(1) unsigned           null,&lt;br /&gt;
    previous_line_linked_time_action     int(10)                       null,&lt;br /&gt;
    previous_line_linked_calendar_action int(10)                       null,&lt;br /&gt;
    next_line_linked_time_action         int(10)                       null,&lt;br /&gt;
    next_line_linked_calendar_action     int(10)                       null,&lt;br /&gt;
    time_tolerance                       int(10)                       null,&lt;br /&gt;
    calendar_tolerance                   int(10)                       null,&lt;br /&gt;
    time_periodicity_component           int(10)                       null,&lt;br /&gt;
    calendar_periodicity_component       int(10)                       null,&lt;br /&gt;
    time_periodicity                     int(10)                       null,&lt;br /&gt;
    calendar_periodicity                 int(10)                       null,&lt;br /&gt;
    reference_overhaul_counter           int(10)                       null,&lt;br /&gt;
    reference_overhaul_date              date                          null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_program&lt;br /&gt;
(&lt;br /&gt;
    id                                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id                           int unsigned                  null,&lt;br /&gt;
    component_type_id                     int unsigned                  null,&lt;br /&gt;
    description                           varchar(255)                  null,&lt;br /&gt;
    time_periodicity                      int(10)                       null,&lt;br /&gt;
    calendar_periodicity                  int(10)                       null,&lt;br /&gt;
    time_first_reference                  int(10)                       null,&lt;br /&gt;
    calendar_first_reference              date                          null,&lt;br /&gt;
    time_tolerance                        int(10)                       null,&lt;br /&gt;
    calendar_tolerance                    int(10)                       null,&lt;br /&gt;
    frame_hours_at_work_start             int(10)                       null,&lt;br /&gt;
    date_work_end                         date                          null,&lt;br /&gt;
    time_elapsed                          int(10)                       null,&lt;br /&gt;
    calendar_elapsed                      int(10)                       null,&lt;br /&gt;
    time_remaining                        int(10)                       null,&lt;br /&gt;
    calendar_remaining                    int(10)                       null,&lt;br /&gt;
    min_next_overhaul_counter             int(10)                       null,&lt;br /&gt;
    max_next_overhaul_counter             int(10)                       null,&lt;br /&gt;
    min_next_overhaul_date                date                          null,&lt;br /&gt;
    max_next_overhaul_date                date                          null,&lt;br /&gt;
    effective_hours_at_work_start         int(10)                       null,&lt;br /&gt;
    theoretical_overhaul_counter          int(10)                       null,&lt;br /&gt;
    intelligent_overhaul_counter          int(10)                       null,&lt;br /&gt;
    intelligent_min_next_overhaul_counter int(10)                       null,&lt;br /&gt;
    intelligent_max_next_overhaul_counter int(10)                       null,&lt;br /&gt;
    effective_date_at_work_end            date                          null,&lt;br /&gt;
    theoretical_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_overhaul_date             date                          null,&lt;br /&gt;
    intelligent_min_next_overhaul_date    date                          null,&lt;br /&gt;
    intelligent_max_next_overhaul_date    date                          null,&lt;br /&gt;
    overlapping_group_id                  int unsigned                  null,&lt;br /&gt;
    is_visit_rg                           tinyint(1) unsigned default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table maintenance_view&lt;br /&gt;
(&lt;br /&gt;
    id                                                int unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    frame_total_time                                  int(10)                null,&lt;br /&gt;
    frame_time_since_rg                               int(10)                null,&lt;br /&gt;
    engine_time_since_rg                              int(10)                null,&lt;br /&gt;
    propeller_time_since_rg                           int(10)                null,&lt;br /&gt;
    potential_remaining_next_time_action              int(10)                null,&lt;br /&gt;
    potential_remaining_next_time_visit               int(10)                null,&lt;br /&gt;
    potential_remaining_next_priority_time_action     int(10)                null,&lt;br /&gt;
    potential_remaining_next_calendar_action          int(10)                null,&lt;br /&gt;
    potential_remaining_next_calendar_visit           int(10)                null,&lt;br /&gt;
    potential_remaining_next_priority_calendar_action int(10)                null,&lt;br /&gt;
    next_time_action_id                               int unsigned           null,&lt;br /&gt;
    next_time_visit_id                                int unsigned           null,&lt;br /&gt;
    next_priority_time_action_id                      int unsigned           null,&lt;br /&gt;
    next_calendar_action_id                           int unsigned           null,&lt;br /&gt;
    next_calendar_visit_id                            int unsigned           null,&lt;br /&gt;
    next_priority_calendar_action_id                  int unsigned           null,&lt;br /&gt;
    overhaul_counter_action                           int(10)                null,&lt;br /&gt;
    overhaul_counter_visit                            int(10)                null,&lt;br /&gt;
    overhaul_date_action                              date                   null,&lt;br /&gt;
    overhaul_date_visit                               date                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table map_logger_monitoring&lt;br /&gt;
(&lt;br /&gt;
    record_id  int unsigned not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    count_data int unsigned not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'link between flight and track';&lt;br /&gt;
&lt;br /&gt;
create table map_track&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned                  null,&lt;br /&gt;
    start_data    int unsigned                  null,&lt;br /&gt;
    number        int unsigned                  null,&lt;br /&gt;
    start_time    datetime                      null,&lt;br /&gt;
    latitude_max  double                        null,&lt;br /&gt;
    longitude_max double                        null,&lt;br /&gt;
    latitude_min  double                        null,&lt;br /&gt;
    longitude_min double                        null,&lt;br /&gt;
    visible       tinyint(1) unsigned default 1 not null&lt;br /&gt;
)&lt;br /&gt;
    comment 'Tracks split from GDR';&lt;br /&gt;
&lt;br /&gt;
create table nationality&lt;br /&gt;
(&lt;br /&gt;
    code  char(2) default '' not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255)       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table parameter&lt;br /&gt;
(&lt;br /&gt;
    code       varchar(255)                  not null,&lt;br /&gt;
    key_id     int unsigned        default 0 not null,&lt;br /&gt;
    enabled    tinyint(1) unsigned default 0 null,&lt;br /&gt;
    int_value  int unsigned        default 0 null,&lt;br /&gt;
    char_value text                          null,&lt;br /&gt;
    primary key (code, key_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table payment_summary_file&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type       varchar(255)            null,&lt;br /&gt;
    content         longblob                null,&lt;br /&gt;
    record_date     datetime                null,&lt;br /&gt;
    total_entry     int unsigned            null,&lt;br /&gt;
    total_amount    decimal(15, 5) unsigned null,&lt;br /&gt;
    payment_type_id int unsigned            null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `payment_type` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `name` text,&lt;br /&gt;
  `text_field_label` text,&lt;br /&gt;
  `only_admin` tinyint(1) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `pos_key_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `treasury_account_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `person_delivery` tinyint(1) unsigned DEFAULT '0',&lt;br /&gt;
  `person_budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `treasury_budget_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `minimum_amount` decimal(10,0) DEFAULT NULL,&lt;br /&gt;
  `maximum_amount` decimal(10,0) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
) COMMENT='type of payment description';&lt;br /&gt;
&lt;br /&gt;
create table person&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                   varchar(255)                                      not null,&lt;br /&gt;
    hash_password          varchar(255)                                      not null,&lt;br /&gt;
    first_name             varchar(255)                                      null,&lt;br /&gt;
    last_name              varchar(255)                                      null,&lt;br /&gt;
    profile                bigint unsigned     default 0                     not null,&lt;br /&gt;
    view_type              int unsigned                                      null,&lt;br /&gt;
    view_width             tinyint unsigned    default 12                    not null,&lt;br /&gt;
    view_height            tinyint(4) unsigned default 30                    not null,&lt;br /&gt;
    aircrafts_viewed       varchar(255)                                      null,&lt;br /&gt;
    inst_viewed            varchar(255)                                      null,&lt;br /&gt;
    email                  varchar(255)                                      null,&lt;br /&gt;
    timezone               varchar(255)                                      null,&lt;br /&gt;
    address                varchar(255)                                      null,&lt;br /&gt;
    zipcode                varchar(255)                                      null,&lt;br /&gt;
    city                   varchar(255)                                      null,&lt;br /&gt;
    state                  varchar(255)                                      null,&lt;br /&gt;
    country                varchar(255)                                      null,&lt;br /&gt;
    home_phone             varchar(255)                                      null,&lt;br /&gt;
    work_phone             varchar(255)                                      null,&lt;br /&gt;
    cell_phone             varchar(255)                                      null,&lt;br /&gt;
    lang                   varchar(255)                                      null,&lt;br /&gt;
    notification           tinyint unsigned                                  null,&lt;br /&gt;
    activated              tinyint(1) unsigned default 1                     null,&lt;br /&gt;
    birthdate              datetime            default '0000-00-00 00:00:00' null,&lt;br /&gt;
    sex                    tinyint(1) unsigned default 0                     not null,&lt;br /&gt;
    nationality            char(2)                                           null,&lt;br /&gt;
    total_flight_time      int unsigned        default 0                     null,&lt;br /&gt;
    date_total_flight_time datetime                                          null,&lt;br /&gt;
    guid                   varchar(255)                                      null,&lt;br /&gt;
    activity_notification  bigint unsigned                                   null,&lt;br /&gt;
    constraint idx_name&lt;br /&gt;
        unique (name),&lt;br /&gt;
    constraint name_3&lt;br /&gt;
        unique (name)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table person_awaiting_activation&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    login           varchar(255)        not null,&lt;br /&gt;
    ip              varchar(255)        not null,&lt;br /&gt;
    code            varchar(255)        not null,&lt;br /&gt;
    category        varchar(255)        not null,&lt;br /&gt;
    expiration_date datetime            null,&lt;br /&gt;
    used            tinyint(1) unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'member_awaiting_activation';&lt;br /&gt;
&lt;br /&gt;
create table product&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label       varchar(255)                  not null,&lt;br /&gt;
    unit        varchar(255)                  not null,&lt;br /&gt;
    free_sale   tinyint(1)          default 0 not null,&lt;br /&gt;
    locked      tinyint(1) unsigned default 0 null,&lt;br /&gt;
    variable_id int unsigned                  null,&lt;br /&gt;
    sale_type   tinyint(1) unsigned           null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile&lt;br /&gt;
(&lt;br /&gt;
    id                bigint unsigned default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name              varchar(255)              null,&lt;br /&gt;
    permits           int unsigned              null,&lt;br /&gt;
    permits2          int unsigned    default 0 not null,&lt;br /&gt;
    permits3          int unsigned    default 0 not null,&lt;br /&gt;
    pictogram         int unsigned              null,&lt;br /&gt;
    default_status_id int unsigned              null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_accounting_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id    bigint unsigned default 0 not null,&lt;br /&gt;
    accounting_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, accounting_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_extra_field_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned default 0 not null,&lt;br /&gt;
    business_field_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, business_field_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_profile_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id          bigint unsigned not null,&lt;br /&gt;
    viewable_profile_id bigint unsigned not null,&lt;br /&gt;
    primary key (profile_id, viewable_profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_required_account_type&lt;br /&gt;
(&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    account_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, account_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_place&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned default 0 not null,&lt;br /&gt;
    resource_type_id int unsigned    default 0 not null,&lt;br /&gt;
    place_num        int unsigned              not null,&lt;br /&gt;
    primary key (profile_id, resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_resource_type_view&lt;br /&gt;
(&lt;br /&gt;
    profile_id                bigint unsigned not null,&lt;br /&gt;
    viewable_resource_type_id int unsigned    not null,&lt;br /&gt;
    primary key (profile_id, viewable_resource_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_join&lt;br /&gt;
(&lt;br /&gt;
    profile_id        bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id  int unsigned    default 0 not null,&lt;br /&gt;
    manage4oneself    int(1)          default 0 not null,&lt;br /&gt;
    certify           int(1)          default 0 not null,&lt;br /&gt;
    optional_contract tinyint(1)      default 0 not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table profile_validity_type_notification&lt;br /&gt;
(&lt;br /&gt;
    profile_id       bigint unsigned default 0 not null,&lt;br /&gt;
    validity_type_id int unsigned    default 0 not null,&lt;br /&gt;
    primary key (profile_id, validity_type_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_return&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    psp_transaction_id int unsigned null,&lt;br /&gt;
    bank_answer        text         null,&lt;br /&gt;
    bank_misc          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction&lt;br /&gt;
(&lt;br /&gt;
    id                int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    credit_account_id int unsigned           not null,&lt;br /&gt;
    debit_account_id  int unsigned           not null,&lt;br /&gt;
    transaction_date  datetime               not null,&lt;br /&gt;
    amount            float                  not null,&lt;br /&gt;
    description       varchar(255)           null,&lt;br /&gt;
    payment_type_id   int unsigned           not null,&lt;br /&gt;
    state             int unsigned default 0 not null,&lt;br /&gt;
    token             text                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table psp_transaction_account_entry&lt;br /&gt;
(&lt;br /&gt;
    psp_transaction_id    int unsigned default 0 not null,&lt;br /&gt;
    account_entry_flow_id int unsigned default 0 not null,&lt;br /&gt;
    primary key (psp_transaction_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table regular_presence_inst_date&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id  int unsigned     null,&lt;br /&gt;
    start_day  tinyint unsigned null,&lt;br /&gt;
    end_day    tinyint unsigned null,&lt;br /&gt;
    start_hour time             null,&lt;br /&gt;
    end_hour   time             null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name             varchar(255)                  null,&lt;br /&gt;
    resource_type_id int unsigned                  null,&lt;br /&gt;
    comments         varchar(255)                  null,&lt;br /&gt;
    order_num        int                           null,&lt;br /&gt;
    activated        tinyint(1) unsigned default 1 not null,&lt;br /&gt;
    bookable         int unsigned        default 1 null,&lt;br /&gt;
    physical         int unsigned        default 1 null,&lt;br /&gt;
    color            int unsigned                  null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of resource';&lt;br /&gt;
&lt;br /&gt;
create table resource_exceptional_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_date  datetime            null,&lt;br /&gt;
    end_date    datetime            null,&lt;br /&gt;
    presence    tinyint(1) unsigned null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_regular_availability&lt;br /&gt;
(&lt;br /&gt;
    id          int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    resource_id int unsigned        null,&lt;br /&gt;
    start_day   tinyint(1) unsigned null,&lt;br /&gt;
    end_day     tinyint(1) unsigned null,&lt;br /&gt;
    start_hour  time                null,&lt;br /&gt;
    end_hour    time                null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table resource_type&lt;br /&gt;
(&lt;br /&gt;
    id                   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                 varchar(255)                   null,&lt;br /&gt;
    category             int unsigned                   null,&lt;br /&gt;
    seats_available      int                 default -1 null,&lt;br /&gt;
    comments             varchar(255)                   null,&lt;br /&gt;
    order_num            int                            null,&lt;br /&gt;
    activated            tinyint(1) unsigned default 1  not null,&lt;br /&gt;
    max_booking_duration int(10)             default -1 null,&lt;br /&gt;
    pictogram            int unsigned                   null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of resource type';&lt;br /&gt;
&lt;br /&gt;
create table resource_type_place_tag&lt;br /&gt;
(&lt;br /&gt;
    resource_type_id int unsigned default 0  not null,&lt;br /&gt;
    place_num        tinyint(1) unsigned     not null,&lt;br /&gt;
    place_tag        varchar(255)            null,&lt;br /&gt;
    place_quantity   int(10)      default -1 null,&lt;br /&gt;
    primary key (resource_type_id, place_num)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_stock&lt;br /&gt;
(&lt;br /&gt;
    id                           int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    product_id                   int unsigned    null,&lt;br /&gt;
    stock_id                     int unsigned    not null,&lt;br /&gt;
    stock_variation_qty_per_sale float default 0 not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_2_validity_type&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned not null,&lt;br /&gt;
    new_formula      varchar(255) null,&lt;br /&gt;
    update_formula   varchar(255) null,&lt;br /&gt;
    product_id       int unsigned null,&lt;br /&gt;
    constraint validity_type_id&lt;br /&gt;
        unique (validity_type_id)&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of validity type into sale';&lt;br /&gt;
&lt;br /&gt;
create index idx_product&lt;br /&gt;
    on sale_2_validity_type (product_id);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    price_formula       text                          null,&lt;br /&gt;
    debit_account_id    int unsigned                  null,&lt;br /&gt;
    credit_account_id   int unsigned                  null,&lt;br /&gt;
    debit_account_type  tinyint(1) unsigned default 0 null,&lt;br /&gt;
    credit_account_type tinyint(1) unsigned default 0 null,&lt;br /&gt;
    credit_budget_id    int unsigned                  null,&lt;br /&gt;
    debit_budget_id     int unsigned                  null,&lt;br /&gt;
    order_num           int                           null,&lt;br /&gt;
    label               varchar(255)                  null,&lt;br /&gt;
    variable_formula    varchar(255)                  null,&lt;br /&gt;
    debit_bill_num      int unsigned                  null,&lt;br /&gt;
    credit_bill_num     int unsigned                  null,&lt;br /&gt;
    qty_formula         text                          null,&lt;br /&gt;
    unit_price_formula  text                          null,&lt;br /&gt;
    added_product_id    int unsigned                  null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_product&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned default 0 not null,&lt;br /&gt;
    product_id      int unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, product_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_pricing_profile&lt;br /&gt;
(&lt;br /&gt;
    sale_pricing_id int unsigned              not null,&lt;br /&gt;
    profile_id      bigint unsigned default 0 not null,&lt;br /&gt;
    primary key (sale_pricing_id, profile_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table sale_trigger&lt;br /&gt;
(&lt;br /&gt;
    id             int(10) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name           varchar(255)                  null,&lt;br /&gt;
    event          varchar(255)                  null,&lt;br /&gt;
    locked         tinyint(1) unsigned default 0 not null,&lt;br /&gt;
    query          text                          null,&lt;br /&gt;
    validate_entry tinyint(1)          default 0 null,&lt;br /&gt;
    group_sales    tinyint(1)          default 0 null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of sale trigger';&lt;br /&gt;
&lt;br /&gt;
create table spreadsheet_parameter&lt;br /&gt;
(&lt;br /&gt;
    file_number       int(10)      not null,&lt;br /&gt;
    spreadsheet_key   varchar(255) not null,&lt;br /&gt;
    spreadsheet_value varchar(255) not null,&lt;br /&gt;
    file_name         varchar(255) null,&lt;br /&gt;
    google_url        varchar(255) not null,&lt;br /&gt;
    file_type         int unsigned null,&lt;br /&gt;
    primary key (file_number, spreadsheet_key, spreadsheet_value)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table statistic&lt;br /&gt;
(&lt;br /&gt;
    name       varchar(255)                not null,&lt;br /&gt;
    of_version tinyint(3)     default 0    not null,&lt;br /&gt;
    value      decimal(15, 2) default 0.00 not null,&lt;br /&gt;
    primary key (name, of_version)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table status&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    abbrev    varchar(255) null,&lt;br /&gt;
    name      varchar(255) null,&lt;br /&gt;
    pictogram int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of functions for pilot';&lt;br /&gt;
&lt;br /&gt;
create table stock&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label         varchar(255) not null,&lt;br /&gt;
    stock_type_id int unsigned not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_level&lt;br /&gt;
(&lt;br /&gt;
    id         int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id   int unsigned    not null,&lt;br /&gt;
    qty        float default 0 not null,&lt;br /&gt;
    stock_date datetime        null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_type&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null,&lt;br /&gt;
    unit  varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation&lt;br /&gt;
(&lt;br /&gt;
    id             int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    stock_id       int unsigned                  not null,&lt;br /&gt;
    qty            float               default 0 not null,&lt;br /&gt;
    variation_date datetime                      null,&lt;br /&gt;
    validated      tinyint(1) unsigned default 0 null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table stock_variation_account_entry&lt;br /&gt;
(&lt;br /&gt;
    product_id            int unsigned default 0 not null,&lt;br /&gt;
    stock_variation_id    int unsigned           not null,&lt;br /&gt;
    account_entry_flow_id int unsigned           not null,&lt;br /&gt;
    person_id             int unsigned           not null,&lt;br /&gt;
    primary key (product_id, stock_variation_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on stock_variation_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table structure&lt;br /&gt;
(&lt;br /&gt;
    id                            int(10)         default 0 not null&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                          varchar(255)              null,&lt;br /&gt;
    info_cell                     text                      null,&lt;br /&gt;
    logo                          longblob                  null,&lt;br /&gt;
    logo_name                     varchar(255)              null,&lt;br /&gt;
    logo_ext                      varchar(25)               null,&lt;br /&gt;
    logo_size                     int                       null,&lt;br /&gt;
    first_hour_displayed          time                      null,&lt;br /&gt;
    last_hour_displayed           time                      null,&lt;br /&gt;
    usual_profiles                bigint unsigned default 0 not null,&lt;br /&gt;
    icao                          varchar(6)                null,&lt;br /&gt;
    default_slot_range            int unsigned              null,&lt;br /&gt;
    min_slot_range                tinyint unsigned          null,&lt;br /&gt;
    twilight_range                tinyint unsigned          null,&lt;br /&gt;
    mailing_list_name             varchar(255)              null,&lt;br /&gt;
    mailing_list_type             varchar(255)              null,&lt;br /&gt;
    structure_site_url            varchar(255)              null,&lt;br /&gt;
    default_timezone              varchar(255)              not null,&lt;br /&gt;
    lang                          varchar(255)              not null,&lt;br /&gt;
    admin_num                     int unsigned              not null,&lt;br /&gt;
    default_view_type             int unsigned              null,&lt;br /&gt;
    address                       varchar(255)              null,&lt;br /&gt;
    zipcode                       varchar(255)              null,&lt;br /&gt;
    city                          varchar(255)              null,&lt;br /&gt;
    state                         varchar(255)              null,&lt;br /&gt;
    country                       varchar(255)              null,&lt;br /&gt;
    phone                         varchar(255)              null,&lt;br /&gt;
    fax                           varchar(255)              null,&lt;br /&gt;
    email                         varchar(255)              null,&lt;br /&gt;
    default_notification          int(3) unsigned           null,&lt;br /&gt;
    welcome_cell                  text                      null,&lt;br /&gt;
    business                      text                      null,&lt;br /&gt;
    default_activity_notification bigint unsigned           null,&lt;br /&gt;
    siren                         int(10)                   null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_bill_type_id int unsigned         not null,&lt;br /&gt;
    bill_date             datetime             null,&lt;br /&gt;
    description           varchar(255)         null,&lt;br /&gt;
    ordinal               int unsigned         not null,&lt;br /&gt;
    validated             tinyint(1) default 0 null,&lt;br /&gt;
    supplier_bill_file_id int(10)              null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_account_entry&lt;br /&gt;
(&lt;br /&gt;
    supplier_bill_id      int unsigned not null,&lt;br /&gt;
    account_entry_flow_id int unsigned not null,&lt;br /&gt;
    primary key (supplier_bill_id, account_entry_flow_id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create index idx_account_entry_flow_id&lt;br /&gt;
    on supplier_bill_account_entry (account_entry_flow_id);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_email_parsed&lt;br /&gt;
(&lt;br /&gt;
    id                    int(10) auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    uid                   int(10)      null,&lt;br /&gt;
    email_address         varchar(255) null,&lt;br /&gt;
    supplier_bill_file_id int(10)      null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_file&lt;br /&gt;
(&lt;br /&gt;
    id        int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    file_type varchar(255) null,&lt;br /&gt;
    content   longblob     null,&lt;br /&gt;
    name      varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table supplier_bill_type&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    supplier_account_id int unsigned not null,&lt;br /&gt;
    name                varchar(255) null,&lt;br /&gt;
    account_id          int unsigned not null,&lt;br /&gt;
    vat_account_id      int unsigned null,&lt;br /&gt;
    supplier_budget_id  int unsigned null,&lt;br /&gt;
    account_budget_id   int unsigned null,&lt;br /&gt;
    vat_budget_id       int unsigned null,&lt;br /&gt;
    rule                text         null,&lt;br /&gt;
    sender_email        varchar(255) null,&lt;br /&gt;
    subject             varchar(255) null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table table_trigger&lt;br /&gt;
(&lt;br /&gt;
    id              int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    monitored_table varchar(255) not null,&lt;br /&gt;
    trigger_formula varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table tank&lt;br /&gt;
(&lt;br /&gt;
    id                 int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    aircraft_type_id   int unsigned                 not null,&lt;br /&gt;
    tank_type_id       int unsigned                 not null,&lt;br /&gt;
    unit_id            int unsigned                 not null,&lt;br /&gt;
    label              varchar(255)                 not null,&lt;br /&gt;
    max_quantity       decimal(15, 2) default -1.00 not null,&lt;br /&gt;
    unlimited_quantity int unsigned   default 1     null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table track_record&lt;br /&gt;
(&lt;br /&gt;
    id                     int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    in_progress            tinyint(1) unsigned                    null,&lt;br /&gt;
    start_date             datetime default '0000-00-00 00:00:00' null,&lt;br /&gt;
    activated              tinyint(1) unsigned                    null,&lt;br /&gt;
    datechsys_track_id     int unsigned                           null,&lt;br /&gt;
    resource_cat           int unsigned                           not null,&lt;br /&gt;
    resource_id            int unsigned                           not null,&lt;br /&gt;
    additional_information int unsigned                           null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of flight record';&lt;br /&gt;
&lt;br /&gt;
create table track_record_data&lt;br /&gt;
(&lt;br /&gt;
    id            int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    record_id     int unsigned        not null,&lt;br /&gt;
    record_date   datetime            null,&lt;br /&gt;
    longitude     double              null,&lt;br /&gt;
    latitude      double              null,&lt;br /&gt;
    altitude      int(7)              null,&lt;br /&gt;
    speed         double              null,&lt;br /&gt;
    track         int(3) unsigned     null,&lt;br /&gt;
    acc_x         int(6)              null,&lt;br /&gt;
    acc_y         int(6)              null,&lt;br /&gt;
    acc_z         int(6)              null,&lt;br /&gt;
    pressure      int(5) unsigned     null,&lt;br /&gt;
    battery_level int(4) unsigned     null,&lt;br /&gt;
    gps_fix       tinyint(1) unsigned null,&lt;br /&gt;
    receive_date  datetime            null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of flight record data';&lt;br /&gt;
&lt;br /&gt;
create index idx_record_id&lt;br /&gt;
    on track_record_data (record_id);&lt;br /&gt;
&lt;br /&gt;
create table track_resource&lt;br /&gt;
(&lt;br /&gt;
    id   int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `name` varchar(255) NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity` (&lt;br /&gt;
  `activity_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_id` int(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL DEFAULT '1',&lt;br /&gt;
  `level_reached` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
  `comment` varchar(255) DEFAULT NULL,&lt;br /&gt;
  `validated` tinyint(1) NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`activity_id`,`training_item_id`,`training_program_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `training_program_item_id_idx` (`training_program_id`,`training_item_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_training_program_item_id_fk` FOREIGN KEY (`training_program_id`, `training_item_id`) REFERENCES `training_program_item` (`training_program_id`, `training_item_id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity_next_item` (&lt;br /&gt;
  `student_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `reporting_offset` tinyint(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `item_preselected` tinyint(1) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  PRIMARY KEY (`student_id`,`training_program_id`,`training_item_id`),&lt;br /&gt;
  KEY `training_item_id_idx` (`training_item_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `training_activity_next_item_training_program_item_id_fk` (`training_program_id`,`training_item_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_student_id_fk` FOREIGN KEY (`student_id`) REFERENCES `person` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_next_item_training_program_item_id_fk` FOREIGN KEY (`training_program_id`, `training_item_id`) REFERENCES `training_program_item` (`training_program_id`, `training_item_id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_activity_person` (&lt;br /&gt;
  `activity_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `person_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `num` int(10) unsigned NOT NULL DEFAULT '0',&lt;br /&gt;
  `training_checking_date` datetime DEFAULT NULL,&lt;br /&gt;
  `training_checking_sentence` varchar(255) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`activity_id`,`person_id`,`num`),&lt;br /&gt;
  KEY `person_id_idx` (`person_id`),&lt;br /&gt;
  CONSTRAINT `training_activity_person_activity_id_fk` FOREIGN KEY (`activity_id`) REFERENCES `flight` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_activity_person_person_id_fk` FOREIGN KEY (`person_id`) REFERENCES `person` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_phase` (&lt;br /&gt;
  `training_program_item_order_num` int(11) unsigned NOT NULL,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `name` varchar(255) DEFAULT NULL,&lt;br /&gt;
  PRIMARY KEY (`training_program_item_order_num`,`training_program_id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  CONSTRAINT `training_phase_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_program` (&lt;br /&gt;
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
`training_id` int(10) unsigned DEFAULT NULL,&lt;br /&gt;
`name` varchar(255) NOT NULL,&lt;br /&gt;
PRIMARY KEY (`id`),&lt;br /&gt;
KEY `training_id_idx` (`training_id`),&lt;br /&gt;
CONSTRAINT `training_program_training_id_fk` FOREIGN KEY (`training_id`) REFERENCES `training` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_program_activity` (&lt;br /&gt;
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `training_program_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `activity_type_id` bigint(20) unsigned NOT NULL,&lt;br /&gt;
  `duration` int(11) unsigned DEFAULT NULL,&lt;br /&gt;
  `breaktime` int(11) unsigned DEFAULT NULL,&lt;br /&gt;
  `order_num` int(11) unsigned NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`id`),&lt;br /&gt;
  KEY `training_program_id_idx` (`training_program_id`),&lt;br /&gt;
  KEY `activity_type_id_idx` (`activity_type_id`),&lt;br /&gt;
  CONSTRAINT `training_program_activity_activity_type_id_fk` FOREIGN KEY (`activity_type_id`) REFERENCES `activity_type` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;
  CONSTRAINT `training_program_activity_training_program_id_fk` FOREIGN KEY (`training_program_id`) REFERENCES `training_program` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `training_item` (&lt;br /&gt;
  `training_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `training_item_label_id` int(10) unsigned NOT NULL,&lt;br /&gt;
  `number_of_sessions` int(11) NOT NULL,&lt;br /&gt;
  `order_num` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `custom_label` varchar(255),&lt;br /&gt;
  PRIMARY KEY (`training_id`,`training_item_label_id`),&lt;br /&gt;
  KEY `order_num_idx` (`order_num` ASC),&lt;br /&gt;
  CONSTRAINT `training_item_training_id_fk` FOREIGN KEY (`training_id`) REFERENCES `training` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table uncomp_flight_type&lt;br /&gt;
(&lt;br /&gt;
    id1 int unsigned null,&lt;br /&gt;
    id2 int unsigned null&lt;br /&gt;
)&lt;br /&gt;
    comment 'List of sales';&lt;br /&gt;
&lt;br /&gt;
create table validity_type&lt;br /&gt;
(&lt;br /&gt;
    id                       int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    name                     varchar(255)                   not null,&lt;br /&gt;
    time_limitation          tinyint(1)          default 0  not null,&lt;br /&gt;
    ident_value_enable       tinyint(1)          default 0  not null,&lt;br /&gt;
    grant_date_enable        tinyint(1)          default 0  not null,&lt;br /&gt;
    mandatory                tinyint(1)          default 0  not null,&lt;br /&gt;
    experience_formula       text                           null,&lt;br /&gt;
    mandatory_access_control tinyint(1) unsigned default 0  null,&lt;br /&gt;
    alert_on_login           int(10)             default -2 null,&lt;br /&gt;
    first_reminder_alert     int unsigned        default 0  null,&lt;br /&gt;
    reminder_frequency_alert int unsigned        default 0  null,&lt;br /&gt;
    associate_attachment     tinyint(1) unsigned default 0  not null,&lt;br /&gt;
    certification_process    tinyint(1)          default 0  not null,&lt;br /&gt;
    is_contract              tinyint(1)          default 0  not null,&lt;br /&gt;
    contract_filename        varchar(255)                   not null,&lt;br /&gt;
    contract_file            mediumblob                     not null,&lt;br /&gt;
    contract_file_extension  varchar(4)                     not null,&lt;br /&gt;
    is_OF_contract           tinyint(1)          default 0  not null,&lt;br /&gt;
    activated                tinyint(1) unsigned default 1  not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity&lt;br /&gt;
(&lt;br /&gt;
    id                  int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    person_id           int unsigned         not null,&lt;br /&gt;
    validity_type_id    int unsigned         not null,&lt;br /&gt;
    registration_date   datetime             not null,&lt;br /&gt;
    expire_date         date                 null,&lt;br /&gt;
    no_alert            tinyint(1) default 0 not null,&lt;br /&gt;
    ident_value         varchar(255)         null,&lt;br /&gt;
    grant_date          date                 null,&lt;br /&gt;
    checker_person_id   int unsigned         not null,&lt;br /&gt;
    checking_date       date                 not null,&lt;br /&gt;
    checking_sentence   varchar(255)         not null,&lt;br /&gt;
    is_current_validity tinyint(1) default 0 not null,&lt;br /&gt;
    constraint validity_person_id_validity_type_id_registration_date_uindex&lt;br /&gt;
        unique (person_id, validity_type_id, registration_date),&lt;br /&gt;
    constraint validity_person_id_fk&lt;br /&gt;
        foreign key (person_id) references person (id),&lt;br /&gt;
    constraint validity_validity_type_id_fk&lt;br /&gt;
        foreign key (validity_type_id) references validity_type (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_type_page&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_id int unsigned        not null,&lt;br /&gt;
    page_index       int unsigned        not null,&lt;br /&gt;
    label            varchar(40)         not null,&lt;br /&gt;
    is_mandatory     tinyint(1) unsigned not null,&lt;br /&gt;
    constraint validity_type_page_validity_type_id_page_index_uindex&lt;br /&gt;
        unique (validity_type_id, page_index),&lt;br /&gt;
    constraint validity_type_page_validity_type_id_fk&lt;br /&gt;
        foreign key (validity_type_id) references validity_type (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_page&lt;br /&gt;
(&lt;br /&gt;
    id                    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    validity_type_page_id int unsigned not null,&lt;br /&gt;
    filename              varchar(255) not null,&lt;br /&gt;
    file                  mediumblob   not null,&lt;br /&gt;
    file_extension        varchar(4)   not null,&lt;br /&gt;
    constraint validity_page_validity_type_page_id_fk&lt;br /&gt;
        foreign key (validity_type_page_id) references validity_type_page (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table validity_2_validity_page&lt;br /&gt;
(&lt;br /&gt;
    validity_id      int unsigned not null,&lt;br /&gt;
    validity_page_id int unsigned not null,&lt;br /&gt;
    primary key (validity_id, validity_page_id),&lt;br /&gt;
    constraint validity_2_validity_page_validity_id_fk&lt;br /&gt;
        foreign key (validity_id) references validity (id),&lt;br /&gt;
    constraint validity_2_validity_page_validity_page_id_fk&lt;br /&gt;
        foreign key (validity_page_id) references validity_page (id)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable&lt;br /&gt;
(&lt;br /&gt;
    id         int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable   varchar(255) not null,&lt;br /&gt;
    label      varchar(255) not null,&lt;br /&gt;
    category   tinyint(1)   null,&lt;br /&gt;
    value_type varchar(255) null,&lt;br /&gt;
    order_num  int          not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table variable_value&lt;br /&gt;
(&lt;br /&gt;
    id           int auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    variable_id  int            not null,&lt;br /&gt;
    assign_value decimal(15, 2) not null,&lt;br /&gt;
    start_date   datetime       not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed&lt;br /&gt;
(&lt;br /&gt;
    id               int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    channel_id       int unsigned not null,&lt;br /&gt;
    publication_date datetime     not null,&lt;br /&gt;
    title            varchar(255) null,&lt;br /&gt;
    content          text         null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create table web_feed_channel&lt;br /&gt;
(&lt;br /&gt;
    id    int unsigned auto_increment&lt;br /&gt;
        primary key,&lt;br /&gt;
    label varchar(255) not null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_pilot_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`person`.`id` AS `person_id`&lt;br /&gt;
from `of40_aeroclublys`.`person`&lt;br /&gt;
where ((`of40_aeroclublys`.`person`.`activated` = 1) and&lt;br /&gt;
       ((`of40_aeroclublys`.`person`.`profile` &amp;amp; (select `of40_aeroclublys`.`parameter`.`int_value`&lt;br /&gt;
                                                  from `of40_aeroclublys`.`parameter`&lt;br /&gt;
                                                  where (`of40_aeroclublys`.`parameter`.`code` =&lt;br /&gt;
                                                         'EXTERNAL_BOOKING_PILOT_PROFILE'))) &amp;gt; 0) and&lt;br /&gt;
       `of40_aeroclublys`.`person`.`id` in (select `of40_aeroclublys`.`regular_presence_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`regular_presence_inst_date`&lt;br /&gt;
                                            union&lt;br /&gt;
                                            select `of40_aeroclublys`.`exceptionnal_inst_date`.`person_id`&lt;br /&gt;
                                            from `of40_aeroclublys`.`exceptionnal_inst_date`&lt;br /&gt;
                                            where ((`of40_aeroclublys`.`exceptionnal_inst_date`.`end_date` &amp;gt; now()) and&lt;br /&gt;
                                                   (`of40_aeroclublys`.`exceptionnal_inst_date`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create definer = overallCustomer@localhost view eligible_resource_for_first_flight as&lt;br /&gt;
select `of40_aeroclublys`.`resource`.`id` AS `resource_id`&lt;br /&gt;
from ((`of40_aeroclublys`.`resource` join `of40_aeroclublys`.`business_field_content` on ((&lt;br /&gt;
        `of40_aeroclublys`.`business_field_content`.`category_id` = `of40_aeroclublys`.`resource`.`id`)))&lt;br /&gt;
         join `of40_aeroclublys`.`business_field` on ((`of40_aeroclublys`.`business_field`.`id` =&lt;br /&gt;
                                                       `of40_aeroclublys`.`business_field_content`.`business_field_id`)))&lt;br /&gt;
where ((`of40_aeroclublys`.`resource`.`activated` = 1) and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field`.`variable` = 'canResourcePerformFirstFlights') and&lt;br /&gt;
       (`of40_aeroclublys`.`business_field_content`.`content` = '1') and&lt;br /&gt;
       (`of40_aeroclublys`.`resource`.`bookable` = 1) and ((select count(0)&lt;br /&gt;
                                                            from `of40_aeroclublys`.`resource_type_place_tag` `seat`&lt;br /&gt;
                                                            where (`seat`.`resource_type_id` =&lt;br /&gt;
                                                                   `of40_aeroclublys`.`resource`.`resource_type_id`)) &amp;gt;=&lt;br /&gt;
                                                           2) and&lt;br /&gt;
       `of40_aeroclublys`.`resource`.`id` in (select `of40_aeroclublys`.`resource_regular_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_regular_availability`&lt;br /&gt;
                                              union&lt;br /&gt;
                                              select `of40_aeroclublys`.`resource_exceptional_availability`.`resource_id`&lt;br /&gt;
                                              from `of40_aeroclublys`.`resource_exceptional_availability`&lt;br /&gt;
                                              where ((`of40_aeroclublys`.`resource_exceptional_availability`.`end_date` &amp;gt;&lt;br /&gt;
                                                      now()) and&lt;br /&gt;
                                                     (`of40_aeroclublys`.`resource_exceptional_availability`.`presence` = 1))));&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function distanceBetween2Point(latitude1 double, longitude1 double, latitude2 double,&lt;br /&gt;
                                                            longitude2 double) returns double&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE dlongitude DOUBLE;&lt;br /&gt;
    DECLARE dlatitude DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET rlongitude1 = RADIANS(longitude1);&lt;br /&gt;
    SET rlatitude1 = RADIANS(latitude1);&lt;br /&gt;
    SET rlongitude2 = RADIANS(longitude2);&lt;br /&gt;
    SET rlatitude2 = RADIANS(latitude2);&lt;br /&gt;
    SET dlongitude = (rlongitude2 - rlongitude1) / 2;&lt;br /&gt;
    SET dlatitude = (rlatitude2 - rlatitude1) / 2;&lt;br /&gt;
    SET a = SIN(dlatitude) * SIN(dlatitude) + COS(rlatitude1) * COS(rlatitude2) * SIN(dlongitude) * SIN(dlongitude);&lt;br /&gt;
    RETURN (6378137 * 2 * ATAN2(SQRT(a), SQRT(1 - a)));&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function formatDecimal(string varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE replacedString VARCHAR(255);&lt;br /&gt;
    SET replacedString = string;&lt;br /&gt;
    SET @decimalSeparator = (SELECT char_value FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(replacedString &amp;lt;&amp;gt; '0.00' AND replacedString &amp;lt;&amp;gt; '0', TRIM(TRAILING '0' FROM replacedString),&lt;br /&gt;
              replacedString)&lt;br /&gt;
    INTO replacedString;&lt;br /&gt;
    SELECT TRIM(TRAILING '.' FROM replacedString) INTO replacedString;&lt;br /&gt;
    SELECT REPLACE(replacedString, '.', IFNULL(@decimalSeparator, '.')) INTO replacedString;&lt;br /&gt;
    RETURN replacedString;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function isBalancedAccountEntryFlow(flowId int) returns int&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE isBalanced INT;&lt;br /&gt;
&lt;br /&gt;
    SELECT IF(SUM(debit) &amp;lt;&amp;gt; SUM(credit), 0, 1)&lt;br /&gt;
    into isBalanced&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE flow_id = flowId&lt;br /&gt;
    GROUP BY flow_id;&lt;br /&gt;
&lt;br /&gt;
    RETURN isBalanced;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function nearestPoint(latRef double, longRef double, distanceMax int) returns varchar(6)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE rlongitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude1 DOUBLE;&lt;br /&gt;
    DECLARE rlongitude2 DOUBLE;&lt;br /&gt;
    DECLARE rlatitude2 DOUBLE;&lt;br /&gt;
    DECLARE a DOUBLE;&lt;br /&gt;
    DECLARE icao_name VARCHAR(6);&lt;br /&gt;
    DECLARE lenght DOUBLE;&lt;br /&gt;
&lt;br /&gt;
    SET a = 2 * 6378137 * pi() * distanceMax / (1852 * 60 * 360);&lt;br /&gt;
    SET rlongitude1 = longRef + a / cos(latRef);&lt;br /&gt;
    SET rlongitude2 = longRef - a / cos(latRef);&lt;br /&gt;
    SET rlatitude1 = latRef + a;&lt;br /&gt;
    SET rlatitude2 = latRef - a;&lt;br /&gt;
&lt;br /&gt;
    SELECT loc1.icao_name,&lt;br /&gt;
           distanceBetween2Point(&lt;br /&gt;
                   (SELECT loc2.latitude FROM location AS loc2 WHERE loc2.icao_name = loc1.icao_name),&lt;br /&gt;
                   (SELECT loc3.longitude FROM location AS loc3 WHERE loc3.icao_name = loc1.icao_name),&lt;br /&gt;
                   latRef,&lt;br /&gt;
                   longRef) AS distance&lt;br /&gt;
    FROM location AS loc1&lt;br /&gt;
    WHERE IF(rlongitude2 &amp;lt; rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude2 AND rlongitude1,&lt;br /&gt;
             loc1.longitude BETWEEN rlongitude1 AND rlongitude2)&lt;br /&gt;
      AND IF(rlatitude2 &amp;lt; rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude2 AND rlatitude1,&lt;br /&gt;
             loc1.latitude BETWEEN rlatitude1 AND rlatitude2)&lt;br /&gt;
    HAVING distance &amp;lt; distanceMax&lt;br /&gt;
    ORDER BY distance&lt;br /&gt;
    LIMIT 1&lt;br /&gt;
    INTO icao_name, lenght;&lt;br /&gt;
&lt;br /&gt;
    RETURN icao_name;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursHundredths(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255);&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    DECLARE decimalSeparator VARCHAR(1);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
    SET decimalSeparator =&lt;br /&gt;
            (SELECT IFNULL(char_value, '.') FROM parameter WHERE code = 'DECIMAL_SEPARATOR' AND key_id = 0 LIMIT 1);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, decimalSeparator, LPAD(FLOOR(remainingTime / 6), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sexa2HoursMinute(sexacentimal int) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE convertedValue VARCHAR(255);&lt;br /&gt;
    DECLARE hours VARCHAR(255); # We separate hours computation from roundHours in order to keep the minus sign if hours is 0 but sexacentimal negative&lt;br /&gt;
    DECLARE roundedHours VARCHAR(255);&lt;br /&gt;
    DECLARE remainingTime VARCHAR(255);&lt;br /&gt;
    SET hours = sexacentimal / 600;&lt;br /&gt;
    SET roundedHours = IF(sexacentimal &amp;gt; 0, FLOOR(hours), CEIL(hours));&lt;br /&gt;
    SET remainingTime = ABS(sexacentimal - roundedHours * 600);&lt;br /&gt;
&lt;br /&gt;
    SELECT CONCAT(&lt;br /&gt;
                   roundedHours, ':', LPAD(FLOOR(remainingTime / 10), 2, '0')&lt;br /&gt;
               )&lt;br /&gt;
    INTO convertedValue;&lt;br /&gt;
&lt;br /&gt;
    RETURN convertedValue;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function stripChars(word varchar(255)) returns varchar(255)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE stripWord VARCHAR(255);&lt;br /&gt;
    SET stripWord = word;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[-]', REPLACE(stripWord, '-', ''), stripWord) INTO stripWord;&lt;br /&gt;
    SELECT IF(stripWord REGEXP '[ ]', REPLACE(stripWord, ' ', ''), stripWord) INTO stripWord;&lt;br /&gt;
    RETURN stripWord;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryCredit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalCredit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = overallCustomer@localhost function sumAccountEntryDebit(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit&lt;br /&gt;
    INTO totalDebit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME);&lt;br /&gt;
&lt;br /&gt;
    RETURN totalDebit;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
    definer = root@localhost function sumValidatedAccountEntry(accountId int, endDate datetime) returns decimal(15, 2)&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE balanceDate DATETIME;&lt;br /&gt;
    DECLARE balanceDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE balanceCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalDebit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalCredit DECIMAL(15, 2);&lt;br /&gt;
    DECLARE totalBalance DECIMAL(15, 2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    SELECT balance_date, IFNULL(debit, 0.00), IFNULL(credit, 0.00)&lt;br /&gt;
    INTO balanceDate, balanceDebit, balanceCredit&lt;br /&gt;
    FROM balance_date&lt;br /&gt;
             LEFT JOIN balance ON (balance_date.id = balance.balance_date_id AND balance.account_id = accountId)&lt;br /&gt;
    WHERE balance_date.balance_date &amp;lt; endDate&lt;br /&gt;
    ORDER BY balance_date DESC&lt;br /&gt;
    LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    IF (SELECT FOUND_ROWS()) = 0 THEN&lt;br /&gt;
        SELECT '0000-00-00 00:00:00', 0.00, 0.00 INTO balanceDate, balanceDebit, balanceCredit;&lt;br /&gt;
    END IF;&lt;br /&gt;
&lt;br /&gt;
    SELECT IFNULL(SUM(debit), 0.00) + balanceDebit, IFNULL(SUM(credit), 0.00) + balanceCredit&lt;br /&gt;
    INTO totalDebit, totalCredit&lt;br /&gt;
    FROM account_entry&lt;br /&gt;
    WHERE account_id = accountId&lt;br /&gt;
      AND account_date &amp;gt;= CAST(balanceDate AS DATETIME)&lt;br /&gt;
      AND account_date &amp;lt; CAST(endDate AS DATETIME)&lt;br /&gt;
      AND validated = 1;&lt;br /&gt;
&lt;br /&gt;
    SELECT (totalCredit - totalDebit) INTO totalBalance;&lt;br /&gt;
&lt;br /&gt;
    RETURN totalBalance;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
==Table booking==&lt;br /&gt;
&lt;br /&gt;
Le contenu du champ ''aircraft_id'' de la table ''booking'' peut être nul. Dans ce cas, c'est une ancienne réservation effectuée sur une ressource non-existante ou qui n'existe plus; aussi nommé réservation orpheline.&lt;br /&gt;
&lt;br /&gt;
==Table flight==&lt;br /&gt;
&lt;br /&gt;
*airborne :&lt;br /&gt;
**0: Pas en l'air ou fermeture de vol : Le pilote a terminé le vol.&lt;br /&gt;
**1: En l'air ou ouverture de vol : Le pilote remplit le vol avant de voler.&lt;br /&gt;
&lt;br /&gt;
==Champs cachés==&lt;br /&gt;
Les champs suivants ne peuvent être exportés et ne doivent pas être inclus dans une requête SELECT. De plus, un &amp;quot;SELECT *&amp;quot; est interdit quand une des tables contient un champ caché :&lt;br /&gt;
*Table journal : Tous les champs&lt;br /&gt;
*Table log : Tous les champs&lt;br /&gt;
*Table parameter : Tous les champs&lt;br /&gt;
*Table person :&lt;br /&gt;
**hash_password&lt;br /&gt;
*Table structure :&lt;br /&gt;
**address&lt;br /&gt;
**admin_num&lt;br /&gt;
**city&lt;br /&gt;
**country&lt;br /&gt;
**default_notification&lt;br /&gt;
**default_slot_range&lt;br /&gt;
**default_timezone&lt;br /&gt;
**default_view_type&lt;br /&gt;
**email&lt;br /&gt;
**fax&lt;br /&gt;
**first_hour_displayed&lt;br /&gt;
**info_cell&lt;br /&gt;
**lang&lt;br /&gt;
**last_hour_displayed&lt;br /&gt;
**logo&lt;br /&gt;
**logo_name&lt;br /&gt;
**logo_ext&lt;br /&gt;
**logo_size&lt;br /&gt;
**mail_from_address&lt;br /&gt;
**mailing_list_name&lt;br /&gt;
**mailing_list_type&lt;br /&gt;
**min_slot_range&lt;br /&gt;
**name&lt;br /&gt;
**phone&lt;br /&gt;
**state&lt;br /&gt;
**twilight_range&lt;br /&gt;
**usual_profiles&lt;br /&gt;
**welcome_cell&lt;br /&gt;
**zipcode&lt;br /&gt;
*Table oauth_client : Tous les champs&lt;br /&gt;
*Table oauth_access_token : Tous les champs&lt;br /&gt;
*Table oauth_auth_code : Tous les champs&lt;br /&gt;
*Table oauth_refresh_token : Tous les champs&lt;br /&gt;
&lt;br /&gt;
Exemple de requêtes non autorisées :&lt;br /&gt;
&amp;lt;sql&amp;gt;SELECT * FROM structure;&lt;br /&gt;
&lt;br /&gt;
SELECT hash_password FROM person;&lt;br /&gt;
&lt;br /&gt;
SELECT person.id, validity.*&lt;br /&gt;
FROM person&lt;br /&gt;
LEFT JOIN validity ON (person.id=validity.person_id);&amp;lt;/sql&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Gestion-des-utilisateurs&amp;diff=14397</id>
		<title>Gestion des utilisateurs</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Gestion-des-utilisateurs&amp;diff=14397"/>
		<updated>2026-04-08T11:51:51Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Notifications des activités */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:of4-UserManagement4.png|right|thumb|200px|Gestion des utilisateurs]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter la '''gestion des utilisateurs''' sur la [[Accueil|version 4 d'OpenFlyers]].&lt;br /&gt;
[[File:of4-UserManagement4.png]]&lt;br /&gt;
&lt;br /&gt;
=[[Gestion des profils|Gestion des profils]]=&lt;br /&gt;
=Onglets=&lt;br /&gt;
La liste des utilisateurs contient '''tous''' les utilisateurs OpenFlyers au sens large, par exemple : les clients, les membres, les gérants, le secrétaire, le trésorier, le comptable, le mécanicien, l'utilisateur &amp;quot;invité&amp;quot; affiché constamment en poste libre, etc. C'est à dire aussi bien des personnes qui physiquement se connectent pour utiliser la plateforme OpenFlyers que des personnes qui ne se connecteront jamais comme des personnes morales mais qui doivent être facturées en tant que client.&lt;br /&gt;
&lt;br /&gt;
==Identité==&lt;br /&gt;
*'''Changer le portrait'''&lt;br /&gt;
*'''Couleur de l'utilisateur'''&lt;br /&gt;
*'''Identifiant'''&lt;br /&gt;
*'''Mot de passe'''&lt;br /&gt;
*'''Nom de l'utilisateur'''&lt;br /&gt;
*'''Prénom de l'utilisateur'''&lt;br /&gt;
*'''Profil'''&lt;br /&gt;
*'''Date de naissance '''&lt;br /&gt;
*'''Nationalité'''&lt;br /&gt;
&lt;br /&gt;
===Contact===&lt;br /&gt;
*'''E-mail'''&lt;br /&gt;
*'''Téléphone personnel'''&lt;br /&gt;
*'''Téléphone professionnel'''&lt;br /&gt;
*'''Téléphone portable'''&lt;br /&gt;
*'''Adresse'''&lt;br /&gt;
*'''Code postal'''&lt;br /&gt;
*'''Ville'''&lt;br /&gt;
*'''Etat'''&lt;br /&gt;
*'''Pays'''&lt;br /&gt;
&lt;br /&gt;
===Visibilité===&lt;br /&gt;
*'''Photo visible de tous'''&lt;br /&gt;
*'''E-mail visible de tous'''&lt;br /&gt;
*'''Téléphone personnel visible de tous'''&lt;br /&gt;
*'''Téléphone professionnel visible de tous'''&lt;br /&gt;
*'''Téléphone portable visible de tous'''&lt;br /&gt;
&lt;br /&gt;
==Notifications==&lt;br /&gt;
*'''Etre informé des actualités OpenFlyers par e-mail'''&lt;br /&gt;
*'''Notification des réservations par e-mail'''&lt;br /&gt;
*'''Rappel des réservations de 2 jours d'avance par e-mail'''&lt;br /&gt;
*'''Rappel des réservations de la journée par email'''&lt;br /&gt;
*'''Notification des réservations annulées'''&lt;br /&gt;
*'''Notification de la maintenance par e-mail'''&lt;br /&gt;
*'''Recevoir un email pour toute réservation'''&lt;br /&gt;
*'''Délai de prévenance en semaines avant chaque échéance'''&lt;br /&gt;
&lt;br /&gt;
===Accès et interface===&lt;br /&gt;
*'''Langue'''&lt;br /&gt;
*'''Fuseau horaire à utiliser'''&lt;br /&gt;
*'''Visualisation des ressources sur le cahier de réservations'''&lt;br /&gt;
*'''Visualisation des utilisateurs sur le cahier de réservation'''&lt;br /&gt;
*'''Afficher les éphémérides'''&lt;br /&gt;
*'''Afficher la légende des couleurs'''&lt;br /&gt;
*'''Hauteur des lignes réduite'''&lt;br /&gt;
&lt;br /&gt;
===Statistiques===&lt;br /&gt;
*'''Total des heures de vols'''&lt;br /&gt;
*'''Date du total des heures de vols'''&lt;br /&gt;
&lt;br /&gt;
===Champs métier===&lt;br /&gt;
Liste les champs métiers du catégorie utilisateur&lt;br /&gt;
&lt;br /&gt;
===Notifications des activités===&lt;br /&gt;
*'''Recevoir un e-mail pour les activités ayant les champs sélectionnés non vide'''&lt;br /&gt;
*'''Recevoir les emails d'alerte de potentiel'''&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==Accéder à l'interface de gestion des utilisateurs==&lt;br /&gt;
*'''Gestion &amp;gt; Utilisateurs &amp;gt; Utilisateurs &amp;gt; Actifs'''&lt;br /&gt;
&lt;br /&gt;
Les utilisateurs sur fond rouge sont les utilisateurs pour lesquels le sexe, la nationalité ou la date de naissance ne sont pas renseignés.&lt;br /&gt;
&lt;br /&gt;
==Accéder aux utilisateurs selon leur profil==&lt;br /&gt;
* Sélectionner une valeur de profil dans la liste déroulante '''Profil'''&lt;br /&gt;
* Le tableau '''Liste des utilisateurs''' ainsi obtenu contient uniquement les utilisateurs ayant le profil précédemment sélectionné.&lt;br /&gt;
&lt;br /&gt;
==Ajouter un utilisateur==&lt;br /&gt;
*[[#Accéder_à_l'interface_de_gestion_des_utilisateurs|Accéder à l'interface de gestion des utilisateurs]]&lt;br /&gt;
*Cliquer sur le bouton '''Ajouter un utilisateur'''&lt;br /&gt;
&lt;br /&gt;
L'option [[Fiche-personnelle#Etre-informé-des-actualités-OpenFlyers-par-e-mail|Etre informé des actualités OpenFlyers par e-mail]] sera automatiquement activé si l'utilisateur possède au moins un profil ayant des droits de gestion.&lt;br /&gt;
&lt;br /&gt;
==Ajouter un intervenant (instructeur, formateur, etc.)==&lt;br /&gt;
Pour ajouter un intervenant il faut d'abord le [[#Ajouter_un_utilisateur|créer en tant qu'utilisateur]]. Ensuite, pour qu'il soit visible sur le planning, il faut lui [[Gestion des disponibilités|rajouter des disponibilités]].&lt;br /&gt;
&lt;br /&gt;
==Bloquer l'accès à un utilisateur==&lt;br /&gt;
Si on souhaite bloquer l'accès à un utilisateur il existe plusieurs méthodes. La plus simple consiste à [[#Supprimer/Désactiver_un_utilisateur|supprimer/désactiver l'utilisateur]].&lt;br /&gt;
&lt;br /&gt;
Parfois, cette solution n'est pas possible immédiatement car le compte comptable associé à l'utilisateur ne remplit pas tous les critères. Dans ce cas, il est possible de bloquer l'accès à l'utilisateur concerné en effectuant les 2 opérations suivantes :&lt;br /&gt;
*Supprimer l'adresse e-mail de l'utilisateur&lt;br /&gt;
*Changer son mot de passe&lt;br /&gt;
Ainsi, l'utilisateur ne pourra plus se connecter et ne pourra pas réinitialiser son mot de passe.&lt;br /&gt;
&lt;br /&gt;
Il existe d'autres solutions :&lt;br /&gt;
*Attribuer une validité périmée et dont la péremption entraine le blocage de l'accès&lt;br /&gt;
*Attribuer un profil sans droit qui permettra donc de se connecter mais sa possibilité de réserver.&lt;br /&gt;
&lt;br /&gt;
==Changer la couleur d'affichage des réservations d'un utilisateur==&lt;br /&gt;
;Prérequis&lt;br /&gt;
*La plateforme doit être paramétrée en [[Configuration#Code-couleur|code couleur]] ''Par utilisateur''.&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*[[#Accéder_à_l'interface_de_gestion_des_utilisateurs|Accéder à l'interface de gestion des utilisateurs]]&lt;br /&gt;
*Cliquer sur le bouton '''Ajouter un utilisateur''' ou '''Modifier un utilisateur'''&lt;br /&gt;
*Sélectionner une paire de couleurs dans le champ &amp;quot;Couleur de l'utilisateur&amp;quot; sous la colonne &amp;quot;Identité&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==[[Utilisation-des-réservations-internes-sur-l%27appli-mobile#Créer-automatiquement-un-utilisateur-en-créant-une-réservation|Créer automatiquement un utilisateur depuis le planning]]==&lt;br /&gt;
&lt;br /&gt;
==Rechercher des utilisateurs==&lt;br /&gt;
Depuis l'interface de gestion des utilisateurs de l'[[Présentation-d'OpenFlyers-4#Interface-légère|interface légère]], Une barre de recherche permet de rechercher des utilisateurs en fonction de leur nom, prénom, identifiant ou adresse email.&lt;br /&gt;
&lt;br /&gt;
==Restreindre les droits d'un utilisateur==&lt;br /&gt;
===[[Configuration de la comptabilité#Restriction_d'accès_en_cas_de_solde_insuffisant|Restreindre les droits d'un utilisateur dont le solde est insuffisant]]===&lt;br /&gt;
&lt;br /&gt;
===[[Paramétrage-des-validités#Alerte-à-la-connexion|Restreindre les droits d'un utilisateur dont une validité est périmée]]===&lt;br /&gt;
&lt;br /&gt;
==[[Gestion-des-disponibilités#Gérer-la-disponibilité-des-intervenants|Gestion des disponibilités]]==&lt;br /&gt;
&lt;br /&gt;
===Génération automatique des disponibilités===&lt;br /&gt;
&lt;br /&gt;
[[#Ajouter-un-intervenant-(instructeur,-formateur,-etc.)|Ajouter un intervenant]] ou [[#Modifier-un-utilisateur|modifier les profils d'un utilisateur]] provoque la génération de disponibilités permanentes lorsque toutes ces conditions sont rencontrées :&lt;br /&gt;
* L'utilisateur n'avait de base aucun profil avec les droits [[Gestion-des-profils#Planning-personnel|&amp;quot;Planning personnel&amp;quot;]] et [[Gestion-des-profils#Planning-individuel-visible-pour-les-autres|&amp;quot;Planning individuel visible pour les autres&amp;quot;]]&lt;br /&gt;
* Un profil avec les droits [[Gestion-des-profils#Planning-personnel|&amp;quot;Planning personnel&amp;quot;]] et [[Gestion-des-profils#Planning-individuel-visible-pour-les-autres|&amp;quot;Planning individuel visible pour les autres&amp;quot;]] vient d'être affecté à l'utilisateur&lt;br /&gt;
* L'utilisateur n'avait de base, aucune (in)disponibilités exceptionnelles/régulières&lt;br /&gt;
&lt;br /&gt;
===Réserver un intervenant seul===&lt;br /&gt;
Pour réserver un intervenant seul sans réserver de ressource réelle, il faut en fait réserver l'intervenant avec une ressource factice. Pour cela il faut intervenir au niveau du paramétrage :&lt;br /&gt;
*Créer un type de ressource &amp;quot;Salle&amp;quot; de catégorie &amp;quot;Salle de classe&amp;quot;&lt;br /&gt;
*Créer une ou plusieurs ressources de type &amp;quot;Salle&amp;quot;.&lt;br /&gt;
*Cocher pour les ressources ainsi créées '''Réservable''' et ne pas cocher '''Saisie d'activité'''.&lt;br /&gt;
&lt;br /&gt;
==Modifier le profil d'un utilisateur==&lt;br /&gt;
Pour modifier le profil d'un utilisateur, il faut :&lt;br /&gt;
*[[#Accéder-à-l'interface-de-gestion-des-utilisateurs|Accéder à l'interface de gestion des utilisateurs]]&lt;br /&gt;
*Dans la ligne de l'utilisateur concerné, cliquer sur le pictogramme symbolisant un crayon afin de modifier&lt;br /&gt;
*Dans la fenêtre affichée, sélectionner le(s) profil(s) affecté(s) à la personne&lt;br /&gt;
&lt;br /&gt;
Si [[Alertes-de-configuration#La-plateforme-a-plus-de-3-utilisateurs-actifs-avec-un-profil-de-niveau-6.-Les-utilisateurs-concernés-sont-:-XXX|la plateforme compte déjà au moins trois utilisateurs actifs ayant un profil de niveau 6]], ces profils seront automatiquement désactivés (grisés) afin de ne pas les attribuer à d'autres utilisateurs, un point d'interrogation devant le profil désactivé affichera des informations sur la raison de son indisponibilité.&lt;br /&gt;
&lt;br /&gt;
*Cliquer sur '''OK''' pour valider le changement&lt;br /&gt;
&lt;br /&gt;
==Modifier un utilisateur==&lt;br /&gt;
Pour modifier un utilisateur, il faut :&lt;br /&gt;
*[[#Accéder-à-l'interface-de-gestion-des-utilisateurs|Accéder à l'interface de gestion des utilisateurs]]&lt;br /&gt;
*Dans la ligne de l'utilisateur concerné, cliquer sur le pictogramme symbolisant un crayon afin de modifier&lt;br /&gt;
&lt;br /&gt;
==Réactiver un utilisateur==&lt;br /&gt;
Pour réactiver un [[#Supprimer/Désactiver-un-utilisateur|utilisateur désactivé]] :&lt;br /&gt;
*'''Gestion &amp;gt; Utilisateurs &amp;gt; Utilisateurs &amp;gt; Désactivés'''&lt;br /&gt;
*Sur la ligne de l'utilisateur concerné, cliquer sur l'icône représentant une flèche verte dans la colonne '''Réactiver'''&lt;br /&gt;
&lt;br /&gt;
Quand un utilisateur est ré-activé :&lt;br /&gt;
*Lorsque celui-ci possède un [[Gestion des profils|profil]] ayant un [[Gestion-des-profils#Niveau-d'accréditation-des-droits-et-des-profils|niveau d'accréditation]] égale à 6 et que [[Alertes-de-configuration#La-plateforme-a-plus-de-3-utilisateurs-actifs-avec-un-profil-de-niveau-6.-Les-utilisateurs-concernés-sont-:-XXX|la plateforme compte déjà au moins 3 utilisateurs actifs avec un profil de niveau 6]], le ou les profils de niveau 6 sont enlevés lors de la réactivation.&lt;br /&gt;
*Lorsque celui-ci ne possède plus de [[Gestion des profils|profil]] existant alors cet utilisateur va prendre automatiquement les profils par défaut à attribuer lors de la création d'un utilisateur. Ces profils par défaut se trouvent dans la page '''Admin &amp;gt; Utilisateurs &amp;gt; Paramètres par défaut'''.  &lt;br /&gt;
*Lorsque la [[Configuration de la comptabilité|gestion des comptes]] est activée, ses comptes sont réactivés. Egalement, les comptes définis dans '''Admin &amp;gt; Utilisateurs &amp;gt; [[Gestion-des-profils#Type-de-compte-requis|Profils plus, puis la colonne Type de compte requis]]''' sont créés pour cet utilisateur si manquant.&lt;br /&gt;
&lt;br /&gt;
Si lors de la désactivation de l'utilisateur, une écriture comptable avait été générée pour solder le compte de l'utilisateur, il est possible de réaffecter le solde du compte de l'utilisateur à son niveau antérieur :&lt;br /&gt;
*Soit la comptabilité n'a pas été clôturée à une date postérieure à cette écriture de mise à 0 du compte, et il suffit de cliquer sur le bouton de [[Utilisation-de-la-comptabilité#Contrepasser-une-écriture|contrepassation]] pour l'écriture concernée.&lt;br /&gt;
*Soit la comptabilité a été clôturée, et il faut générer un flux qui va créditer/débiter le compte de l'utilisateur du montant souhaité et dont la contrepartie doit correspondre à celle apparaissant pour l'écriture de mise à 0 du compte.&lt;br /&gt;
&lt;br /&gt;
Dans ce 2ème cas, si la plateforme est paramétrée selon les préconisations d'OpenFlyers, il faut :&lt;br /&gt;
*Si le compte de l'utilisateur doit être crédité, il faut générer un flux qui va créditer le compte de l'utilisateur et en contre-partie débiter le compte ''Produits divers de gestion courante'';&lt;br /&gt;
*Si le compte de l'utilisateur doit être débité, il faut générer un flux qui va débiter le compte de l'utilisateur et en contre-partie créditer le compte ''Pertes sur créances irrécouvrables''.&lt;br /&gt;
&lt;br /&gt;
==Saisir le numéro d'utilisateur [[Interfaçage-OpenFlyers-et-Charterware|Charterware]]==&lt;br /&gt;
*[[#Accéder-à-l'interface-de-gestion-des-utilisateurs|Accéder à l'interface de gestion des utilisateurs]]&lt;br /&gt;
*Cliquer sur le pictogramme &amp;quot;crayon&amp;quot; pour modifier l'utilisateur souhaité&lt;br /&gt;
*Dans la section '''Champs métier''' modifier le champ '''Numéro d'utilisateur Charterware'''&lt;br /&gt;
*Cliquer sur le bouton '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
==Supprimer/Désactiver un utilisateur==&lt;br /&gt;
;Présentation&lt;br /&gt;
Lorsqu'un utilisateur n'est plus présent, on peut le supprimer sans pour autant perdre l'historique de ses actions, de ses comptes ou de ses validités. Ainsi, l'utilisateur n'est pas complètement supprimé mais juste désactivé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Prérequis&lt;br /&gt;
Pour pouvoir désactiver un utilisateur, il faut au préalable :&lt;br /&gt;
*que celui-ci n'ait pas de réservation future afin que la réservation ne se retrouve pas orpheline&lt;br /&gt;
*que les écritures associées à ses comptes soient toutes validées afin qu'il n'y ait pas de déséquilibre dans la balance comptable&lt;br /&gt;
*Il peut être nécessaire d'appliquer également la procédure [[Conseils-spécifiques-pour-la-comptabilité#Solder-le-compte-positif-d'un-utilisateur-en-le-remboursant|Solder le compte positif d'un utilisateur en le remboursant]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*'''Gestion &amp;gt; Utilisateurs &amp;gt; Actifs'''&lt;br /&gt;
*Cliquer sur l'icône symbolisant une poubelle dans la colonne '''Actions''' sur la ligne de l'utilisateur concerné&lt;br /&gt;
&lt;br /&gt;
Si lors de la tentative de désactivation un message d'alerte bloquant apparait indiquant '''cet utilisateur possède des écritures non validées''', il faut alors identifier les écritures non validées en regardant le relevé du compte du pilote. En général, il s'agit :&lt;br /&gt;
*soit des activités : cela se valide dans '''Gestion &amp;gt; Activités &amp;gt; Liste''' puis '''Valider les activités sélectionnées'''&lt;br /&gt;
*soit des encaissements : cela se valide dans '''Gestion &amp;gt; Comptes &amp;gt; Pointer &amp;gt; X''' où X correspond au type d'encaissement concerné&lt;br /&gt;
Une fois les écritures validées, il doit être alors possible de désactiver l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Si le solde de l'un des comptes n'est pas à 0, un message d'alerte apparait qui propose de générer automatiquement un flux comptable pour solder le ou les comptes de l'utilisateur en débitant ou créditant, pour chacun des comptes utilisateurs concerné, des comptes de contre-partie désignés dans le [[Configuration-de-la-comptabilité#Paramétrage-général-des-comptabilités|paramétrage des comptabilités]]. Ce flux comptable sera automatiquement validé pour permettre de respecter le fait qu'un compte désactivé ne doit pas avoir d'écriture non validée.&lt;br /&gt;
&lt;br /&gt;
Lors de la désactivation de l'utilisateur, ses comptes associés sont également automatiquement [[Utilisation-de-la-comptabilité#Désactiver-un-compte|désactivés]].&lt;br /&gt;
&lt;br /&gt;
OpenFlyers recommande :&lt;br /&gt;
*De désactiver un utilisateur dès lors qu'il indique explicitement qu'il ne reviendra pas dans l'année. Cela permet d'éviter de lui polluer sa messagerie en lui envoyant automatiquement des e-mails d'alerte indiquant que certaines validités sont passées ou vont expirer.&lt;br /&gt;
*Si la structure doit produire des statistiques annuelles, de désactiver les utilisateurs qui ne se sont pas réinscrits ou qui n'ont pas eu d'activité au cours de l'année avant l'établissement des statistiques de l'année concernée par les statistiques.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter que l'opération de désactivation est totalement réversible et que réactiver un utilisateur, voir même, lui réaffecter son solde est extrêmement simple, voir la procédure [[#Réactiver-un-utilisateur|Réactiver un utilisateur]].&lt;br /&gt;
&lt;br /&gt;
Si le gestionnaire ne souhaite pas désactiver un utilisateur, mais qu'il souhaite néanmoins lui empêcher l'accès à la plateforme OpenFlyers, il suffit de lui attribuer une validité dépassée et obligatoire pour la connexion comme par exemple une validité &amp;quot;Cotisation&amp;quot;. Cette validité doit être paramétrée à &amp;quot;Pas d'accès&amp;quot; dans le champ [[Paramétrage-des-validités#Alerte-à-la-connexion|Alerte à la connexion]].&lt;br /&gt;
&lt;br /&gt;
De la même façon, si le gestionnaire ne souhaite pas désactiver un utilisateur, mais qu'il souhaite néanmoins que l'utilisateur ne soit pas pollué par les emails d'alertes sur les échéances des validités, il suffit d'effacer l'adresse e-mail de l'utilisateur concerné.&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Envoi-des-emails&amp;diff=14396</id>
		<title>Envoi des emails</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Envoi-des-emails&amp;diff=14396"/>
		<updated>2026-04-07T15:40:27Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Activité */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter l''''envoi automatique des e-mails''' dans la [[Accueil|version 4 d'OpenFlyers]].&lt;br /&gt;
&lt;br /&gt;
Le tableau ci-dessous indique pour quels types de plateformes l'envoi des e-mails est actif.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
!Type d'e-mail!![[Compte-client-OpenFlyers-et-modèle-commercial#Plateforme_de_démonstration|Plateforme de démonstration]]!![[Compte-client-OpenFlyers-et-modèle-commercial#Plateforme_en_test|Plateforme en test]]!![[Compte-client-OpenFlyers-et-modèle-commercial#Plateforme_en_production|Plateforme en production]]&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot; colspan=&amp;quot;4&amp;quot;|Communication&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[Liste-de-diffusion|Accès à la création d'une liste de diffusion]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-d'actualité-OpenFlyers|Actualité OpenFlyers]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-mailing-de-la-structure|E-mailing de la structure]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot; colspan=&amp;quot;4&amp;quot;|Comptabilité&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-rappel-de-solde|Alerte de solde]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-facture|Envoi de facture]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-reçu|Envoi de reçu]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot; colspan=&amp;quot;4&amp;quot;|Réservation&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-d'annulation-de-réservation|Annulation de réservation]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-modification-de-réservation|Modification de réservation]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-notification-de-réservation|Notification de réservation]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-rappel-de-réservation|Rappel de réservation]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;text-align:left;&amp;quot; colspan=&amp;quot;4&amp;quot;|Validité&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[#E-mail-de-demande-de-certification-de-validité|Demande de certification de validité]]||-||&amp;amp;#10004;||&amp;amp;#10004;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:left;&amp;quot;|[[Paramétrage-des-validités#Paramétrer-des-rappels-par-e-mail-des-validités-à-échéance|Rappel d'échéance de validité]]||-||-||&amp;amp;#10004;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
La fiche personnelle de l'utilisateur contient :&lt;br /&gt;
*le champ [[Fiche-personnelle#E-mail|E-mail]] qui permet de renseigner les adresses emails de l'utilisateur&lt;br /&gt;
*le chapitre [[Fiche-personnelle#Notifications|Notifications]] qui permet de paramétrer l'envoi automatique des e-mails&lt;br /&gt;
&lt;br /&gt;
Une structure peut personnaliser les e-mails automatiques en rajoutant un [[Configuration#Message-en-en-tête-des-emails-automatiques|message en en-tête]] et également un autre [[Configuration#Message-en-pied-de-page-des-emails-automatiques|message en pied de page]].&lt;br /&gt;
&lt;br /&gt;
Il est également possible de suivre les emails dans '''Gestion &amp;gt; Communications &amp;gt; [[Suivi des emails|Suivi des e-mails]]'''.&lt;br /&gt;
&lt;br /&gt;
=Activité=&lt;br /&gt;
==E-mail d'activités avec champs non vides==&lt;br /&gt;
C'est un e-mail de notification permettant au mécanicien d'être automatiquement informé dès qu'un pilote saisit une activité en ajoutant une remarque relative à la maintenance.&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
[[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
;Titre&lt;br /&gt;
Notification d'une activité sur OpenFlyers&lt;br /&gt;
&lt;br /&gt;
;Le corps est composé de&lt;br /&gt;
*Du texte &amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
*De la ligne: ''Vous recevez cet email car vos paramètres sur la plateforme openflyers.com/&amp;lt;Nom_De_La_Plateforme&amp;gt; demandent à vous envoyer un email dès lors qu'une activité est saisie avec les champs suivants non vides: &amp;lt;Liste_Des_Champs&amp;gt;''&lt;br /&gt;
*De la ligne:''Ci-après le détail du contenu de la saisie d'activité:''&lt;br /&gt;
*De la ligne: ''L'activité pour le/la &amp;lt;Nom_De_La_Resource&amp;gt; du &amp;lt;Date_De_Début&amp;gt; à &amp;lt;Heure_De_Début&amp;gt; au &amp;lt;Date_De_Fin&amp;gt; à &amp;lt;Heure_De_Fin&amp;gt;''&lt;br /&gt;
*De la ligne: ''avec &amp;lt;Nom_De_La_Personne_En_Place_Droite&amp;gt; en Place droite''&lt;br /&gt;
*De la ligne: ''avec &amp;lt;Nom_De_La_Personne_En_Place_Gauche&amp;gt; en Place gauche''&lt;br /&gt;
&lt;br /&gt;
;Exemple de corps&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bonjour,&lt;br /&gt;
Vous recevez cet email car vos paramètres sur la plateforme openflyers.com/loubna demandent à vous envoyer un email dès lors qu'une activité est saisie avec les champs suivants non vides:&lt;br /&gt;
mechanicAnswer&lt;br /&gt;
&lt;br /&gt;
Ci-après le détail du contenu de la saisie d'activité:&lt;br /&gt;
L'activité pour le/la F-ABCD du 04/04/2025 à 15:38 au 04/04/2025 à 17:08&lt;br /&gt;
avec EL HIDAM Loubna en Place droite&lt;br /&gt;
avec LARATTE Christophe en Place gauche&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail d'alerte de maintenance==&lt;br /&gt;
C'est un e-mail d'alerte envoyé aux personnes autorisées lorsqu'un seuil de maintenance est atteint pour un aéronef (Calendraire, Heures d'activité ou Heures moteur).&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
[[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
;le titre est composé de&lt;br /&gt;
*Du texte &amp;quot;Alerte de maintenance et suivi de navigabilité : &amp;lt;Nom_Aéronef&amp;gt; - &amp;lt;Seuil&amp;gt; (&amp;lt;Type&amp;gt;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;Exemple de titre&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Alerte de maintenance et suivi de navigabilité : F-ABCD - seuil alarme (Calendaire)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Le corps est composé de&lt;br /&gt;
*Du texte &amp;quot;L'aéronef &amp;lt;Nom_Aéronef&amp;gt; de la structure &amp;lt;Nom_Structure&amp;gt; à atteint le &amp;lt;Seuil&amp;gt; de type &amp;lt;Type&amp;gt;.&amp;quot;&lt;br /&gt;
*De la ligne: ''Inspection prévue le : &amp;lt;Date_Inspection&amp;gt;''&lt;br /&gt;
*De la ligne: ''Seuil configuré : &amp;lt;Seuil_Configuré&amp;gt;''&lt;br /&gt;
*De la ligne: ''Temps restant : &amp;lt;Temps_Restant&amp;gt;''&lt;br /&gt;
*De la ligne: ''Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les emails d'alerte de potentiel.''&lt;br /&gt;
&lt;br /&gt;
;Exemple de corps&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
L'aéronef F-ABCD de la structure AeroClubParis à atteint le seuil stop de type Calendaire.&lt;br /&gt;
&lt;br /&gt;
Inspection prévue le : 07/04/2026 &lt;br /&gt;
Seuil configuré : 10 Jours&lt;br /&gt;
Temps restant :  9 Heures 23 minutes&lt;br /&gt;
&lt;br /&gt;
Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les emails d'alerte de potentiel.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Communication=&lt;br /&gt;
==E-mail d'actualité OpenFlyers==&lt;br /&gt;
Voir le chapitre [[Bien-communiquer-avec-OpenFlyers#Être-informé-des-nouveautés-OpenFlyers|Être informé des nouveautés OpenFlyers]].&lt;br /&gt;
&lt;br /&gt;
Chaque utilisateur décide de s'abonner ou non aux e-mails d'actualités d'OpenFlyers depuis la page [[Fiche personnelle]] en cochant ou non [[Fiche-personnelle#Etre-informé-des-actualités-OpenFlyers-par-e-mail|Etre informé des actualités OpenFlyers par e-mail]].&lt;br /&gt;
&lt;br /&gt;
==E-mail de mailing de la structure==&lt;br /&gt;
Les gestionnaires de chaque structure peuvent envoyer des e-mails de masse à l'ensemble ou à une partie des utilisateurs enregistrés dans la structure.&lt;br /&gt;
&lt;br /&gt;
Voir la page [[Mailing]].&lt;br /&gt;
&lt;br /&gt;
=Comptabilité=&lt;br /&gt;
==E-mail de facture==&lt;br /&gt;
Un e-mail de facture est automatiquement envoyé lors de la [[Gestion-des-activités#Valider-une-activité|validation d'une activité]] ou d'une vente. L'envoi automatique de cet e-mail dépend de [[Facturation-des-clients#Envoi-automatique-de-chaque-facture-client|la configuration de la plateforme et peut aussi dépendre du choix de l'utilisateur]].&lt;br /&gt;
&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Facture&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Facture&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
*Du texte &amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
*De la ligne &amp;quot;Ci-joint la facture n°X pour votre achat du [DATE_ACHAT].&amp;quot;&lt;br /&gt;
**'''X''' correspond au numéro de reçu&lt;br /&gt;
**'''[DATE_PAIEMENT]'''correspond à la date où l'achat a été effectué, formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Ci-joint la facture n°10 pour votre achatdu 04/02/2018.&lt;br /&gt;
&lt;br /&gt;
Cordialement,&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'e-mail est accompagné d'une pièce-jointe au format PDF intitulé :&lt;br /&gt;
*&amp;quot;Facture [NOM_PLATEFORME] n°X.pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==E-mail de rappel de renouvellement d'agrégation bancaire==&lt;br /&gt;
Voir également les chapitres :&lt;br /&gt;
*[[Configuration-de-la-comptabilité#Agréger-un-compte-bancaire|Agréger des comptes bancaires]]&lt;br /&gt;
*[[Utilisation-de-la-comptabilité#Importer-par-API|Importer par API un relevé bancaire]]&lt;br /&gt;
*[[Configuration-de-la-comptabilité#Renouveler-l'agrégation-des-comptes-bancaires|Renouveler l'agrégation des comptes bancaires]]&lt;br /&gt;
&lt;br /&gt;
C'est un e-mail de notification pour maintenir active l'agrégation bancaire. Le premier email est envoyé 7 jours avant l'échéance, puis 3 jours avant l'échéance, puis tous les jours après l'échéance aux utilisateurs qui disposent du droit de gérer tous les comptes.&lt;br /&gt;
&lt;br /&gt;
Le titre est: '''Renouvellement de l'agrégation bancaire'''&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
*Du texte &amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
*De la ligne: ''Pour continuer à utiliser la fonctionnalité &amp;quot;Importer les relevés bancaires par API&amp;quot; sur la plateforme [Nom_De_La_Plateforme], il faut prolonger l'agrégation des banques suivantes :[Nom_De_La_Banque]''&lt;br /&gt;
*Du lien vers l'interface de l'agrégation : '''Admin &amp;gt; Comptes &amp;gt; Banque &amp;gt; Agréger'''&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Pour continuer à utiliser la fonctionnalité &amp;quot;Importer les relevés bancaires par API&amp;quot; sur la plateforme [Nom_De_La_Plateforme], il faut prolonger l'agrégation des banques suivants: [Nom_De_La_Banque].&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut :&lt;br /&gt;
- Aller dans Admin &amp;gt; Comptes &amp;gt; Banque &amp;gt; Agréger&lt;br /&gt;
- Cliquer sur le bouton de renouvellement de l'agrégation&lt;br /&gt;
&lt;br /&gt;
La procédure complète est décrite ici.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de rappel de solde==&lt;br /&gt;
Voir également les chapitres :&lt;br /&gt;
*[[Configuration-de-la-comptabilité#Paramétrage-général-des-comptabilités|Paramétrage général des comptabilités]]&lt;br /&gt;
*[[Formules-de-calcul#Exemples-de-patrons-d'emails-de-rappel-de-solde|Exemples de patrons d'emails de rappel de solde]]&lt;br /&gt;
&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Alerte seuil de compte : &amp;quot;&lt;br /&gt;
* Suivi du nom du type de compte utilisateur&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Alerte seuil de compte : Membre&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Cher client/adhérent&lt;br /&gt;
&lt;br /&gt;
Votre compte au sein de votre plateforme de démonstration présente un solde de 52,05 € en dessous du seuil minimum de 100 €.&lt;br /&gt;
&lt;br /&gt;
Nous vous remercions par avance pour la régularisation de votre compte.&lt;br /&gt;
&lt;br /&gt;
Le service comptable/trésorier&lt;br /&gt;
&lt;br /&gt;
----------&lt;br /&gt;
Le contrôle de votre compte et l'envoi de ce message sont effectués de façon automatique&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de reçu==&lt;br /&gt;
Un e-mail de reçu de paiement est automatiquement envoyé lors de la [[Utilisation-de-la-comptabilité#Validation-des-règlements-clients|validation d'un encaissement]] afin d'être [[Normes-et-réglementations#Inaltérabilité-des-données-et-traçabilité-des-encaissements|conforme à la réglementation]].&lt;br /&gt;
&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Reçu&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Reçu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
*Du texte &amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
*De la ligne &amp;quot;Ci-joint le reçu n°X pour votre paiement du [DATE_PAIEMENT].&amp;quot;&lt;br /&gt;
**'''X''' correspond au numéro de reçu&lt;br /&gt;
**'''[DATE_PAIEMENT]'''correspond à la date où le paiement a été effectué, formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Ci-joint le reçu n°10 pour votre paiement du 04/02/2018.&lt;br /&gt;
&lt;br /&gt;
Cordialement,&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'e-mail est accompagné d'une pièce-jointe au format PDF intitulé :&lt;br /&gt;
*&amp;quot;Reçu paiement [NOM_PLATEFORME] n°X.pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Réservation=&lt;br /&gt;
==E-mail d'annulation de réservation==&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot; : Confirmation d'une annulation de réservation sur OpenFlyers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Confirmation d'une annulation de réservation sur OpenFlyers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est le même que pour l'[[#E-mail_de_notification_de_réservation|e-mail de notification de réservation]].&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Notification d'annulation de la réservation suivante :&lt;br /&gt;
&lt;br /&gt;
La réservation pour le/la C150 AB F-ABCD du 02/04/2015 à 08:00 au 02/04/2015 à 09:00&lt;br /&gt;
avec comme commentaire : Activité de jour&lt;br /&gt;
avec DUPONT Jean en Pilote est annulée.&lt;br /&gt;
&lt;br /&gt;
Cette opération a été effectuée par DUPONT JEAN.&lt;br /&gt;
&lt;br /&gt;
Les dates et heures indiquées ci-dessus sont dans le fuseau horaire Europe/Paris.&lt;br /&gt;
&lt;br /&gt;
Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les annulations par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails d'annulation en suivant la procédure suivante :&lt;br /&gt;
&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Notification-des-réservations-annulées&lt;br /&gt;
&lt;br /&gt;
Plateforme de démonstration&lt;br /&gt;
https://openflyers.com/demo&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de modification de réservation==&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Confirmation d'une modification de réservation sur OpenFlyers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Confirmation d'une nouvelle réservation sur OpenFlyers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Notification de modification de la réservation suivante :&amp;lt;/pre&amp;gt;&lt;br /&gt;
* D'une ligne indiquant :&lt;br /&gt;
** l'ancien type de ressource et l'ancienne ressource réservés&lt;br /&gt;
** l'ancienne date de début formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
** l'ancienne date de fin formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
* D'une ligne indiquant l'ancien commentaire de la réservation si existant&lt;br /&gt;
* D'une ligne indiquant l'ancien utilisateur en première place&lt;br /&gt;
* D'une ligne indiquant l'ancien utilisateur en seconde place si existant&lt;br /&gt;
* Du texte &amp;quot;est remplacée par&amp;quot;&lt;br /&gt;
* D'une ligne indiquant :&lt;br /&gt;
** le nouveau type de ressource et la nouvelle ressource réservés&lt;br /&gt;
** la nouvelle date de début formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
** la nouvelle date de fin formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
* D'une ligne indiquant le nouveau commentaire de la réservation si existant&lt;br /&gt;
* D'une ligne indiquant le nouvel utilisateur en première place&lt;br /&gt;
* D'une ligne indiquant le nouvel utilisateur en seconde place si existant&lt;br /&gt;
* D'une ligne indiquant qui a effectué l'opération sur la réservation&lt;br /&gt;
* De la ligne où XXX est remplacé par le fuseau horaire :&lt;br /&gt;
&amp;lt;pre&amp;gt;Les dates et heures indiquées ci-dessus sont dans le fuseau horaire XXX.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les créations par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de création en suivant la procédure suivante :&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Notification-des-réservations-par-e-mail&lt;br /&gt;
&lt;br /&gt;
Veuillez ne pas répondre à cet e-mail.&lt;br /&gt;
L'adresse noreply@openflyers.com est uniquement utilisée pour envoyer des e-mails automatiques et la boîte e-mail n'est jamais consultée.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Le nom de la structure&lt;br /&gt;
* L'adresse de la structure&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Confirmation d'une modification de réservation sur OpenFlyers&lt;br /&gt;
&lt;br /&gt;
Notification de modification de la réservation suivante :&lt;br /&gt;
&lt;br /&gt;
La réservation pour le/la C150 AB F-ABCD du 26/10/2017 à 15:00 au 26/10/2017 à 16:30&lt;br /&gt;
avec DUPONT Jean en Place gauche est remplacée par&lt;br /&gt;
La réservation pour le/la C150 AB F-ABCD du 26/10/2017 à 15:00 au 26/10/2017 à 17:00&lt;br /&gt;
avec DUPONT Jean en Place gauche&lt;br /&gt;
&lt;br /&gt;
Cette opération a été effectuée par DUPONT JEAN&lt;br /&gt;
&lt;br /&gt;
Les dates et heures indiquées ci-dessus sont dans le fuseau horaire Europe/Paris.&lt;br /&gt;
&lt;br /&gt;
Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les créations par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de création en suivant la procédure suivante :&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Notification-des-réservations-par-e-mail&lt;br /&gt;
&lt;br /&gt;
Veuillez ne pas répondre à cet e-mail.&lt;br /&gt;
L'adresse noreply@openflyers.com est uniquement utilisée pour envoyer des e-mails automatiques et la boîte e-mail n'est jamais consultée. &lt;br /&gt;
&lt;br /&gt;
Plateforme de démonstration&lt;br /&gt;
https://openflyers.com/demo&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de notification de réservation==&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Confirmation d'une nouvelle réservation sur OpenFlyers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Confirmation d'une nouvelle réservation sur OpenFlyers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Bonjour,&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Notification de création de la réservation suivante :&amp;lt;/pre&amp;gt;&lt;br /&gt;
* D'une ligne indiquant :&lt;br /&gt;
** le type de ressource et la ressource réservés&lt;br /&gt;
** la date de début formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
** la date de fin formatée selon le &amp;quot;Patron de format de date&amp;quot; de la structure et selon le fuseau horaire de l'utilisateur effectuant la réservation&lt;br /&gt;
* D'une ligne indiquant le commentaire de la réservation si existant&lt;br /&gt;
* D'une ligne indiquant l'utilisateur en première place&lt;br /&gt;
* D'une ligne indiquant l'utilisateur en seconde place si existant&lt;br /&gt;
* D'une ligne indiquant qui a effectué l'opération sur la réservation&lt;br /&gt;
* De la ligne où XXX est remplacé par le fuseau horaire :&lt;br /&gt;
&amp;lt;pre&amp;gt;Les dates et heures indiquées ci-dessus sont dans le fuseau horaire XXX.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les créations par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de création en suivant la procédure suivante :&lt;br /&gt;
&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Notification-des-réservations-par-e-mail&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Le nom de la structure&lt;br /&gt;
* L'adresse de la structure&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Ceci est une notification de la réservation suivante :&lt;br /&gt;
&lt;br /&gt;
La réservation pour le/la C150 AB F-ABCD du 02/04/2015 à 08:00 au 02/04/2015 à 09:00&lt;br /&gt;
avec comme commentaire : Vol de jour&lt;br /&gt;
avec DUPONT Jean en Pilote est confirmée.&lt;br /&gt;
&lt;br /&gt;
Cette opération a été effectuée par DUPONT JEAN&lt;br /&gt;
&lt;br /&gt;
Les dates et heures indiquées ci-dessus sont dans le fuseau horaire Europe/Paris.&lt;br /&gt;
&lt;br /&gt;
Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les créations par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de création en suivant la procédure suivante :&lt;br /&gt;
&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Notification-des-réservations-par-e-mail&lt;br /&gt;
&lt;br /&gt;
Plateforme de démonstration&lt;br /&gt;
https://openflyers.com/demo&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de rappel de réservation==&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du [[Configuration#Email-de-rappel-des-réservations-de-la-journée|contenu à ajouter avant l'e-mail de rappel des réservations s'il s'agit d'un rappel d'une réservation de la journée]]. Voir le paramètre [[Fiche-personnelle#Rappel-des-réservations-de-la-veille-ou-de-la-journée-par-e-mail|Rappel des réservations de la veille ou de la journée par e-mail]]&lt;br /&gt;
* Suivi du texte &amp;quot;Rappel d'une réservation sur OpenFlyers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Rappel d'une réservation sur OpenFlyers sur OpenFlyers&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps est composé :&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Rappel de la réservation suivante :&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Du corps de l'[[#E-mail_de_notification_de_réservation|e-mail de notification de réservation]] où les dates sont sous le format &amp;quot;JJ/MM/AAAA/MM à HHhMM&amp;quot; et sous le fuseau horaire de l'utilisateur recevant l'e-mail&lt;br /&gt;
* De la ligne où XXX est remplacé par le fuseau horaire :&lt;br /&gt;
&amp;lt;pre&amp;gt;Les dates et heures indiquées ci-dessus sont dans le fuseau horaire XXX.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Du texte :&lt;br /&gt;
&amp;lt;pre&amp;gt;Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les rappels par e-mail :&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de rappel automatique en suivant la procédure suivante :&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Rappel-des-réservations-de-2-jours-d'avance-par-e-mail&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Le nom de la structure&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
Rappel de la réservation suivante :&lt;br /&gt;
&lt;br /&gt;
La réservation pour le/la C150 AB F-ABCD du 2015/04/01 à 08h00 au 2015/04/01 à 09h00&lt;br /&gt;
avec comme commentaire : Vol de jour&lt;br /&gt;
avec DUPONT Jean en Pilote est confirmée.&lt;br /&gt;
&lt;br /&gt;
Les dates et heures indiquées ci-dessus sont dans le fuseau horaire Europe/Paris.&lt;br /&gt;
&lt;br /&gt;
Vous recevez cet e-mail automatique car votre fiche utilisateur OpenFlyers est paramétrée pour recevoir les rappels par e-mail.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez activer/désactiver les e-mails de rappel automatique en suivant la procédure suivante :&lt;br /&gt;
https://openflyers.com/fr/doc/of4/Fiche-personnelle#Rappel-des-réservations-de-2-jours-d'avance-par-e-mail&lt;br /&gt;
&lt;br /&gt;
Plateforme de démonstration&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pièce jointe de synchronisation des réservations avec un calendrier==&lt;br /&gt;
Sur les plateformes où l'option est activée, tout e-mail de réservation (création, modification et suppression) contient, en pièce jointe, un fichier de synchronisation. Ce fichier permet d'ajouter, modifier ou supprimer la réservation dans une application de gestion de calendrier selon l'opération effectuée sur OpenFlyers.&lt;br /&gt;
&lt;br /&gt;
Le fichier, envoyé au format '''ics''', peut être ouvert avec des applications comme '''Microsoft Outlook''', '''Google Calendar''' ou '''iCalendar''' par exemple. Lors de son ouverture, le calendrier sera mis à jour.&lt;br /&gt;
&lt;br /&gt;
Plusieurs informations de la réservation sont attachées à ce fichier :&lt;br /&gt;
*La date et heure de début&lt;br /&gt;
*La date et heure de fin&lt;br /&gt;
*Le lieu (le terrain de départ s'il est renseigné lors de la création de la réservation)&lt;br /&gt;
*La ressource et le nom de la personne en place gauche, constituant le '''nom du fichier'''&lt;br /&gt;
&lt;br /&gt;
Ces différentes informations permettent de définir l'événement dans le calendrier. Ainsi, les dates de début et de fin, le lieu, le nom de la personne et la ressource seront affichés dans l'application de gestion de calendrier.&lt;br /&gt;
&lt;br /&gt;
'''Remarque :''' indépendamment de cette option, chaque utilisateur peut activer dans sa fiche personnelle, la [[Fiche-personnelle#Synchroniser-les-réservations-dans-OpenFlyers-avec-un-agenda-Google|synchronisation de ses réservations avec son agenda Google]].&lt;br /&gt;
&lt;br /&gt;
=Validité=&lt;br /&gt;
==E-mail de demande de certification de validité==&lt;br /&gt;
&lt;br /&gt;
Un E-mail de certification est envoyé chaque fois qu'un utilisateur complète une validité dont la [[Paramétrage-des-validités#Certification|certification est activée]]. Il est envoyé aux utilisateurs ayant la possibilité de certifier le type de validité concerné. L'e-mail contient un  lien qui renvoi vers l'[[Validités#Validités-en-attente-de-certification|interface permettant de certifier les validités en attentes]]&lt;br /&gt;
&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
*Du nom de la plateforme entre crochet&lt;br /&gt;
*Du texte : &amp;quot;Nouvelle validité en attente de certification&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Nouvelle validité en attente de certification&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le corps du message suit ce format :&lt;br /&gt;
&amp;lt;pre&amp;gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
L'utilisateur [NOM Prénom de l'utilisateur] a complété la validité [nom de la validité].&lt;br /&gt;
&lt;br /&gt;
Vous pouvez certifier cette validité en suivant ce lien :&lt;br /&gt;
[lien vers la page de gestion]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail de rappel d'échéance de validité==&lt;br /&gt;
Voir la [[Paramétrage-des-validités#Alerte-échéance-par-email-:-1er-rappel|Gestion des validités]] pour le paramétrage du déclenchement des e-mails.&lt;br /&gt;
&lt;br /&gt;
Le titre est composé :&lt;br /&gt;
* Du nom de la plateforme entre crochets&lt;br /&gt;
* Suivi du texte &amp;quot;Alerte de validité à échéance :&amp;quot;&lt;br /&gt;
* Suivi du nom du type de validité&lt;br /&gt;
&lt;br /&gt;
Exemple de titre :&lt;br /&gt;
&amp;lt;pre&amp;gt;[Plateforme de démonstration] Alerte de validité à échéance : Licence&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple de corps :&lt;br /&gt;
&amp;lt;pre&amp;gt;La validité Licence de l'utilisateur DUPONT Jean arrive à échéance le 31/12/2017&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ou :&lt;br /&gt;
&amp;lt;pre&amp;gt;La validité Licence de l'utilisateur DUPONT Jean est arrivée à échéance le 31/12/2017&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==E-mail d'information des actions des utilisateurs sur des validités==&lt;br /&gt;
Les gestionnaires peuvent être informé des actions effectués par les utilisateurs sur leurs validités.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut que le gestionnaire dispose d'un profil dont les validités concernées soient cochées dans la colonne du droit [[Gestion-des-profils#Alerté-par-e-mail-pour-le-renouvellement-des-validités-de-tous-les-utilisateurs|Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs]].&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Suivi-des-remarques-de-maintenance&amp;diff=14395</id>
		<title>Suivi des remarques de maintenance</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Suivi-des-remarques-de-maintenance&amp;diff=14395"/>
		<updated>2026-04-07T15:14:43Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Paramétrage par chaque gestionnaire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
=Présentation=&lt;br /&gt;
L'objet de cette page est de décrire la mise en place d'un outil de '''suivi des remarques maintenance''' lors de la saisie d'une activité. Cet outil est basé sur les éléments suivants :&lt;br /&gt;
*Présence dans le formulaire de saisie des activités (pour les vols) de 2 champs supplémentaires intitulés :&lt;br /&gt;
**''Remarque pilote maintenance''&lt;br /&gt;
**''Réponse mécanicien''&lt;br /&gt;
*Possibilité pour les gestionnaires de recevoir des notifications automatiques par email&lt;br /&gt;
*Présence d'un rapport accessible depuis '''Planning &amp;gt; Données &amp;gt; Rapports utilisateurs &amp;gt; Rapport personnalisés''' qui liste pour une ressource donnée les activités ayant une entrée dans le champ ''Remarques maintenance'' ou dans le champ ''Réponse mécanicien''.&lt;br /&gt;
&lt;br /&gt;
=Paramétrage de la plateforme=&lt;br /&gt;
;Créer des champs métiers spécifiques pour les remarques maintenance&lt;br /&gt;
*Aller dans '''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Champs métiers''' :&lt;br /&gt;
*En bas du tableau remplir la dernière ligne vide avec les éléments suivants :&lt;br /&gt;
**Colonne '''Nom de variable''' : ''maintenanceUserComment''&lt;br /&gt;
**Colonne '''Intitulé''' : ''Remarque pilote maintenance''&lt;br /&gt;
**Colonne '''Catégorie''' : ''Activité''&lt;br /&gt;
**Colonne '''Type de valeur''' : ''Chaîne textuelle multi-ligne''&lt;br /&gt;
*Cliquer sur le bouton '''Ajouter''' à la fin de la ligne&lt;br /&gt;
*Répéter l'opration en bas du tableau remplir la dernière ligne vide avec les éléments suivants :&lt;br /&gt;
**Colonne '''Nom de variable''' : ''mechanicAnswer''&lt;br /&gt;
**Colonne '''Intitulé''' : ''Réponse mécanicien''&lt;br /&gt;
**Colonne '''Catégorie''' : ''Activité''&lt;br /&gt;
**Colonne '''Type de valeur''' : ''Chaîne textuelle multi-ligne''&lt;br /&gt;
*Cliquer sur le bouton '''Ajouter''' à la fin de la ligne&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Permettre aux gestionnaires de s'abonner aux alertes par emails&lt;br /&gt;
*Aller dans '''Admin &amp;gt; Utilisateurs &amp;gt; Profils'''&lt;br /&gt;
*Cliquer sur l'onglet '''Activités'''&lt;br /&gt;
*Cocher le droit [[Gestion-des-profils#Alertable-par-email-pour-toute-saisie-d'activité-ou-alerte-de-maintenance|Alertable par email pour toute saisie d'activité ou alerte de maintenance]] pour les profils souhaités&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Activer la visibilité du rapport de suivi des remarques maintenance&lt;br /&gt;
Le rapport [[OF-doc-en:Export-generator-4#Flights-with-mechanic-remark|Vols avec une remarque maintenance]] permet de faire ressortir pour lesquels une remarque est renseignée dans les champs définis avec comme nom de variable '''maintenanceUserComment''' et '''mechanicAnswer'''.&lt;br /&gt;
&lt;br /&gt;
Ce rapport est accessible depuis la bibliothèque des rapports : '''Gestion &amp;gt; Rapports &amp;gt; Bibliothèques &amp;gt; Accès'''.&lt;br /&gt;
&lt;br /&gt;
Il est possible de faciliter l'accès à ce rapport en le paramétrant, dans la bibliothèque, en tant que favori. Dans ce cas là, il est accessible directement depuis '''Gestion &amp;gt; Activités &amp;gt; Rapports'''.&lt;br /&gt;
&lt;br /&gt;
=Paramétrage par chaque gestionnaire=&lt;br /&gt;
Suivre la procédure [[Fiche-personnelle#Recevoir-un-e-mail-pour-les-activités-ayant-les-champs-sélectionnés-non-vide|Recevoir un e-mail pour les activités ayant les champs sélectionnés non vide]] en cochant le champ métier ''Remarque pilote maintenance'' et/ou le champ métier ''Réponse mécanicien''.&lt;br /&gt;
&lt;br /&gt;
Suivre la procédure [[Fiche-personnelle#Recevoir-les-emails-d'alerte-de-potentiel|Recevoir les e-mails d'alerte de potentiel]] en cochant le champ métier ''Recevoir les e-mails d'alerte de potentiel''.&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Fiche-personnelle&amp;diff=14394</id>
		<title>Fiche personnelle</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Fiche-personnelle&amp;diff=14394"/>
		<updated>2026-04-07T15:10:48Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Notification des activités */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Fiche_personnelle.png|right|thumb|200px|Fiche personnelle]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter la '''fiche personnelle''' dans la [[Accueil|version 4 d'OpenFlyers]].&lt;br /&gt;
&lt;br /&gt;
=Accès=&lt;br /&gt;
Depuis le [[Utilisation-des-réservations-internes-sur-l%27interface-web|planning de l'interface légère]] :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
&lt;br /&gt;
=Affichage du menu contextuel=&lt;br /&gt;
Le menu contextuel et un menu déroulant qui apparait lors du survol d'une réservation ou d'un vol ouvert. Ce menu contextuel peut apparaitre :&lt;br /&gt;
*soit automatiquement&lt;br /&gt;
*soit par un clic droit de la souris&lt;br /&gt;
Ce paramétrage est personnalisable pour chaque utilisateur :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Cocher ou décocher '''N'afficher la description des réservations qu'avec le bouton droit de la souris''' selon le comportement souhaité&lt;br /&gt;
*Cliquer sur le bouton '''Sauver''' tout en bas du formulaire&lt;br /&gt;
&lt;br /&gt;
=Afficher les éphémérides=&lt;br /&gt;
Permet sur le [[Utilisation-des-réservations-internes-sur-l%27interface-web|planning de l'interface légère]] :&lt;br /&gt;
* D'afficher la boîte des éphémérides&lt;br /&gt;
* Faire une distinction de couleur sur les créneaux horaires liés aux éphémérides&lt;br /&gt;
&lt;br /&gt;
[[File:Ephemeride_ancienne_interface.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Ce paramétrage est personnalisable pour chaque utilisateur :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Cocher ou décocher '''Afficher les éphémérides''' selon le comportement souhaité&lt;br /&gt;
*Cliquer sur le bouton '''Sauver''' tout en bas du formulaire&lt;br /&gt;
&lt;br /&gt;
=Choisir l'unité de temps=&lt;br /&gt;
Chaque utilisateur peut choisir l'unité de temps qui sert à afficher les heures.&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Choisir dans le champ '''Unité de temps''' parmi :&lt;br /&gt;
**heures minutes&lt;br /&gt;
**heures centièmes&lt;br /&gt;
**heures dixièmes&lt;br /&gt;
*Appuyer sur le bouton '''Sauver'''.&lt;br /&gt;
&lt;br /&gt;
==[[Champs métiers]]==&lt;br /&gt;
En plus des champs habituels, des [[Champs-métiers|champs métiers]] spécifiques à la structure peuvent apparaître dans la fiche personnelle. &lt;br /&gt;
&lt;br /&gt;
Ils sont affichés [[Gestion-des-profils#Généralités|si les droits sont attribués par l'administrateur]] et permettent d'activer des fonctionnalités supplémentaires, par exemple, [[Interfaçage-Aérogligli|l'interfaçage avec Aérogligli]].&lt;br /&gt;
&lt;br /&gt;
=Changer sa langue=&lt;br /&gt;
*Aller dans '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Dans la colonne '''Accès et interface''', changer la '''langue'''&lt;br /&gt;
*Cliquer sur '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
=Changer son mot de passe=&lt;br /&gt;
&lt;br /&gt;
==Alertes en changeant son mot de passe==&lt;br /&gt;
&lt;br /&gt;
===Vous devez saisir l'ancien mot de passe et deux fois le nouveau===&lt;br /&gt;
&lt;br /&gt;
Lors du changement du mot de passe, cette alerte s'affiche si :&lt;br /&gt;
*L'un des champs du formulaire n'a pas été saisi.&lt;br /&gt;
&lt;br /&gt;
===Vous devez saisir deux fois le même nouveau mot de passe===&lt;br /&gt;
&lt;br /&gt;
Lors du changement du mot de passe, cette alerte s'affiche si :&lt;br /&gt;
*L'un des champs du formulaire n'a pas été saisi et que l'ancien mot de passe n'est pas demandé.&lt;br /&gt;
*Le nouveau mot de passe et sa confirmation ne sont pas identiques.&lt;br /&gt;
&lt;br /&gt;
==Niveau de sécurité du mot de passe==&lt;br /&gt;
&lt;br /&gt;
Lors du changement du mot de passe, une barre montre le niveau de sécurité du mot de passe. Cette barre a 4 niveaux : '''faible''', '''moyen''', '''fort''' et '''excellent'''. Pour évaluer le niveau de sécurité du mot de passe nous regardons son nombre de caractères, s'il y a des lettres minuscules et majuscules, s'il y a des chiffres et s'il y a des caractères de ponctuation.&lt;br /&gt;
&lt;br /&gt;
Plus précisément voici ce que requiert chaque niveau :&lt;br /&gt;
*Faible : le mot de passe doit avoir au moins 1 caractère&lt;br /&gt;
*Moyen : le mot de passe doit avoir au moins 8 caractères et doit être composé de 2 types de caractères (par exemple des lettres minuscules et des lettres majuscules)&lt;br /&gt;
*Fort : le mot de passe doit avoir au moins 8 caractères et doit être composé de 3 types de caractères (par exemple des lettres minuscules, des lettres majuscules et des chiffres)&lt;br /&gt;
*Excellent : le mot de passe doit avoir au moins 14 caractères et doit être composé de 3 types de caractères (par exemple des lettres minuscules, des lettres majuscules et des chiffres)&lt;br /&gt;
&lt;br /&gt;
=Communication=&lt;br /&gt;
== E-mail ==&lt;br /&gt;
; Saisir plusieurs adresses&lt;br /&gt;
Il est possible de renseigner plusieurs adresses e-mails dans ce champ en séparant chaque adresse e-mail par une virgule.&lt;br /&gt;
&lt;br /&gt;
Attention : Il ne faut jamais mettre d’espace : &lt;br /&gt;
* Ni dans l’adresse e-mail elle-même&lt;br /&gt;
* Ni avant ou après les virgules de séparation des adresses e-mails.&lt;br /&gt;
&lt;br /&gt;
Exemple correct :&lt;br /&gt;
&amp;lt;pre&amp;gt;exemple1@domaine.com,exemple2@domaine.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemples incorrects :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exemple1@domaine.com , exemple2@domaine.com&lt;br /&gt;
exemple1@domaine.com ,exemple2@domaine.com&lt;br /&gt;
exemple1@domaine.com, exemple2@domaine.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Règles de format&lt;br /&gt;
Les adresses e-mails doivent respecter les normes définies par la [https://www.rfc-editor.org/rfc/rfc5322#section-3.4.1 RFC 5322]. Voici les principales règles à suivre :&lt;br /&gt;
&lt;br /&gt;
Caractères autorisés dans la partie locale (avant le &amp;quot;@&amp;quot;) :&lt;br /&gt;
* Lettres majuscules et minuscules (A–Z, a–z)&lt;br /&gt;
* Chiffres (0–9)&lt;br /&gt;
* Caractères spéciaux : &amp;lt;code&amp;gt;! # $ % &amp;amp; ' * + - / = ? ^ _ ` { | } ~&amp;lt;/code&amp;gt;&lt;br /&gt;
* Le point (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;), à condition qu'il :&lt;br /&gt;
** Ne soit ni en début, ni en fin&lt;br /&gt;
** Ne se suive pas lui-même (pas de &amp;lt;code&amp;gt;..&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Caractères autorisés dans le domaine (après le &amp;quot;@&amp;quot;) :&lt;br /&gt;
* Lettres majuscules et minuscules (A–Z, a–z)&lt;br /&gt;
* Chiffres (0–9)&lt;br /&gt;
* Tirets (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;), à condition qu'ils :&lt;br /&gt;
** Ne soient ni en début, ni en fin&lt;br /&gt;
&lt;br /&gt;
Exemples d'adresses e-mails valides :&lt;br /&gt;
* &amp;lt;code&amp;gt;exemple@domaine.com&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;prenom.nom@domaine.fr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;utilisateur+tag@domaine.co.uk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemples d'adresses e-mails invalides :&lt;br /&gt;
* &amp;lt;code&amp;gt;exemple@domaine..com&amp;lt;/code&amp;gt; (double point consécutif)&lt;br /&gt;
* &amp;lt;code&amp;gt;ç@domaine.com&amp;lt;/code&amp;gt; (caractère &amp;quot;ç&amp;quot; non autorisé dans la partie locale)&lt;br /&gt;
* &amp;lt;code&amp;gt;espace @domaine.com&amp;lt;/code&amp;gt; (espace non autorisé)&lt;br /&gt;
&lt;br /&gt;
==Gérer l'abonnement à la liste de diffusion==&lt;br /&gt;
Lorsque une liste de diffusion mailman gérée par OpenFlyers est activée pour la plateforme OpenFlyers, l'utilisateur peut de lui-même gérer son abonnement à la liste de diffusion :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Formulaire '''Liste de diffusion : nomdelastructure-ml@openflyers.info'''&lt;br /&gt;
*Cocher/décocher le bouton '''Abonné(e)'''&lt;br /&gt;
*Cliquer sur le bouton '''Sauver'''&lt;br /&gt;
&lt;br /&gt;
=Editer sa photo=&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'import ou la suppression d'une photo requiert le droit [[Gestion-des-profils#Editer-sa-photo|Editer sa photo]]. Ce droit n'est pas nécessaire pour rendre sa photo visible pour tous.&lt;br /&gt;
*Lors de l'import, si la photo de profil a une taille supérieure à 600 pixels (de largeur ou de hauteur), elle est automatiquement redimensionner à cette taille. Son poids ne doit pas être supérieur à 100Ko.&lt;br /&gt;
&lt;br /&gt;
=Mettre à jour sa date de naissance, sa nationalité ou son sexe=&lt;br /&gt;
Le droit [[Gestion-des-profils#Mise-à-jour-de-sa-date-de-naissance,-de-son-sexe-et-de-sa-nationalité|Mise à jour de sa date de naissance, de son sexe et de sa nationalité]] est requis pour mettre à jour sa date de naissance, sa nationalité ou son sexe.&lt;br /&gt;
&lt;br /&gt;
=Notifications=&lt;br /&gt;
==Etre informé des actualités OpenFlyers par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin d'être prévenu ou non par e-mail des nouveautés OpenFlyers.&lt;br /&gt;
&lt;br /&gt;
==Recevoir un e-mail pour chaque facture==&lt;br /&gt;
Cette option permet d'activer ou de désactiver l'[[Envoi-des-emails#E-mail-de-facture|envoi automatique de chaque facture]] appartenant à l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Cette option apparait lorsque les paramètres [[Paramétrage-des-activités#Envoyer-un-email-pour-chaque-facture|Envoyer un-email pour chaque facture]] et [[Paramétrage-des-activités#Autoriser-les-utilisateurs-à-choisir-de-recevoir-ou-non-un-email-pour-chaque-facture|Autoriser les utilisateurs à choisir de recevoir ou non un-email pour chaque facture]] sont activés. Cf. chapitre [[Facturation-des-clients#Envoi-automatique-de-chaque-facture-client|Envoi automatique de chaque facture client]].&lt;br /&gt;
&lt;br /&gt;
==Recevoir un e-mail pour chaque validité en attente de certification==&lt;br /&gt;
Cette option permet à un utilisateur de recevoir un [[Envoi-des-emails#E-mail-de-demande-de-certification-de-validité|e-mail]] lorsqu'une validité est en attente de certification.&lt;br /&gt;
&lt;br /&gt;
Pour que cela fonctionne, l'utilisateur doit faire partie [[Gestion-des-profils#Types-de-validités-que-l'utilisateur-peut-gérer-et-certifier|d'un profil ayant le droit de certifier le type de validité concerné]].&lt;br /&gt;
&lt;br /&gt;
=Notifications des réservations=&lt;br /&gt;
==Notification des réservations par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin d'être prévenu ou non par [[Envoi-des-emails#E-mail-de-notification-de-réservation|e-mail des réservations créées ou modifiées]] le concernant.&lt;br /&gt;
&lt;br /&gt;
==Rappel des réservations de 2 jours d'avance par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin de recevoir ou non par e-mail un rappel de réservation.&lt;br /&gt;
&lt;br /&gt;
Les rappels sont envoyés entre 0h et 6h au fuseau Europe/Paris pour les réservations débutant entre 2 et 3 jours après.&lt;br /&gt;
&lt;br /&gt;
Les [[Envoi-des-emails#Présentation|rappels ne sont effectifs que sur les plateformes en production]].&lt;br /&gt;
&lt;br /&gt;
==Rappel des réservations de la veille ou de la journée par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin de recevoir ou non l'e-mail de rappel de la structure concernant une réservation passée (réservation de la veille ou de la journée). L'e-mail contient un message paramétré par la structure.&lt;br /&gt;
&lt;br /&gt;
Les rappels sont envoyés entre 0h et 6h au fuseau Europe/Paris pour les réservations de la veille.&lt;br /&gt;
&lt;br /&gt;
Les [[Envoi-des-emails#Présentation|rappels ne sont effectifs que sur les plateformes en production]].&lt;br /&gt;
&lt;br /&gt;
==Notification des réservations annulées==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin d'être prévenu ou non par [[#E-mail_d'annulation_de_réservation|e-mail des réservations annulées]] le concernant.&lt;br /&gt;
&lt;br /&gt;
==Recevoir un e-mail pour les réservations ayant pour activité==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Lorsque l'utilisateur dispose d'un profil avec le droit [[Gestion-des-profils#Alertable-par-e-mail-pour-toute-réservation|Alertable par e-mail pour toute réservation]], apparait une liste de case à cocher avec pour label '''Recevoir un e-mail pour les réservations ayant pour activité'''.&lt;br /&gt;
*L'utilisateur peut cocher ou décocher ces cases afin d'être prévenu ou non [[Envoi-des-emails|par e-mail]] lorsqu'une réservation avec l'une de ces [[Gestion-des-activités|activités]] est créée ou modifiée par n'importe quel utilisateur.&lt;br /&gt;
&lt;br /&gt;
=Notification des activités=&lt;br /&gt;
==Recevoir un e-mail pour les activités ayant les champs sélectionnés non vide==&lt;br /&gt;
;Prérequis&lt;br /&gt;
*Disposé du droit [[Gestion-des-profils#Alertable-par-email-pour-toute-saisie-d'activité-ou-alerte-de-maintenance|Alertable par email pour toute saisie d'activité ou alerte de maintenance]]&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Dans la partie '''Notification des activités''', apparait le champ ''Recevoir un e-mail pour les activités ayant les champs sélectionnés non vide'' avec en-dessous une liste de champs métiers cochables :&lt;br /&gt;
*L'utilisateur coche ou décoche ces cases afin d'être prévenu ou non [[Envoi-des-emails#E-mail-d%27activités-avec-champs-non-vides|par e-mail]] lorsqu'une activité est saisie avec l'un des champs concernés renseigné par n'importe quel utilisateur.&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
[[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
==Recevoir les emails d'alerte de potentiel==&lt;br /&gt;
;Prérequis&lt;br /&gt;
*Disposer du droit [[Gestion-des-profils#Alertable-par-email-pour-toute-saisie-d'activité-ou-alerte-de-maintenance|Alertable par email pour toute saisie d'activité ou alerte de maintenance]].&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Dans la partie '''Notification des activités''', activer l'option ''Recevoir les e-mails d'alerte de potentiel'' pour recevoir automatiquement des notifications par e-mail lorsqu'une activité déclenche un signalement de potentiel.&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
[[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
=Paramétrer les ressources et les utilisateurs visibles sur le planning=&lt;br /&gt;
Depuis la fiche personnelle, il est possible de choisir quelles ressources matérielles et humaines sont visibles sur le planning avec le droit [[Gestion-des-profils#Personnaliser-ses-ressources-visibles|Personnaliser ses ressources visibles]].&lt;br /&gt;
&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Dans la catégorie '''Options d'affichage''' :&lt;br /&gt;
*Cocher ou décocher les '''Ressources visibles''' ou '''Utilisateurs visibles''' à afficher.&lt;br /&gt;
&lt;br /&gt;
=Synchronisation des réservations=&lt;br /&gt;
==Mettre en place un planning partagé avec Google agenda==&lt;br /&gt;
;Présentation&lt;br /&gt;
L'objectif de cette procédure est de permettre la création d'un planning partagé contenant l'ensemble des réservations d'une plateforme OpenFlyers afin qu'elles soient visibles depuis un agenda Google lui-même partagé entre plusieurs personnes&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*Créer un compte utilisateur ayant un profil disposant du droit [[Gestion-des-profils#Alertable-par-e-mail-pour-toute-réservation|Alertable par e-mail pour toute réservation]]&lt;br /&gt;
Depuis la fiche personnelle de l'utilisateur créé :&lt;br /&gt;
*Suivre la procédure [[#Synchroniser-les-réservations-dans-OpenFlyers-avec-un-agenda-Google|Synchroniser les réservations dans OpenFlyers avec un agenda Google]] &lt;br /&gt;
*Dans '''Recevoir un e-mail pour les réservations ayant pour activité''', cocher les activités pour lesquelles la synchronisation avec le planning partagé Google agenda doit s'effectuer&lt;br /&gt;
*Cliquer sur le bouton '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
==Synchroniser les réservations dans OpenFlyers avec un agenda Google==&lt;br /&gt;
;Présentation&lt;br /&gt;
L'objectif est de synchroniser ses réservations personnelles présentes sur une plateforme OpenFlyers avec un compte Google agenda&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Sous le titre '''Synchronisation des réservations''' et le sous titre '''avec Google agenda'''&lt;br /&gt;
*Cliquer sur le bouton '''Se connecter avec Google'''&lt;br /&gt;
*Si plusieurs comptes Google sont enregistrés dans le navigateur, une page s'affiche demandant avec quel compte Google il faut se synchroniser. Sélectionner le compte concerné&lt;br /&gt;
*Une fois le compte Google sélectionné, le nom du compte en question s'affiche en dessous du sous titre '''avec Google agenda'''&lt;br /&gt;
Lorsque l'utilisateur a lié son compte Google agenda, une liste d'agendas apparaît lui permettant de choisir dans quel agenda les événements doivent être créés.&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Sous le titre '''Synchronisation des réservations''' et le sous titre '''Calendrier'''&lt;br /&gt;
*Choisir un des agendas de la liste&lt;br /&gt;
*Cliquer sur '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
=Synchroniser les activités avec Carnet.aero=&lt;br /&gt;
;Présentation&lt;br /&gt;
L'objectif est de permettre la synchronisation et l'exportation automatiques des données d'activités vers [[Interfaçage OpenFlyers et Carnet.aero|'''Carnet.aero''']].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Prérequis&lt;br /&gt;
* Il faut [[Interfaçage-OpenFlyers-et-Carnet.aero#Récupérer-les-identifiants-API-sur-Carnet.aero|disposer des identifiants]] ('''UserId''' et '''UserSecretKey''') fournis par '''Carnet.aero'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
&lt;br /&gt;
* '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sous le titre '''Synchronisation des activités''', l'écran fonctionne en 2 étapes :&lt;br /&gt;
&lt;br /&gt;
; Vérifier la connexion&lt;br /&gt;
[[File:2025-12-04-11-48-51-Affichage-et-fiche-personnelle---Brave.png|alt=Synchronisation des activités|Synchronisation des activités]]&lt;br /&gt;
&lt;br /&gt;
*Renseigner :&lt;br /&gt;
** '''Identifiant Utilisateur'''&lt;br /&gt;
** '''Clé secrète utilisateur'''&lt;br /&gt;
&lt;br /&gt;
*Puis cliquer sur '''Vérifier la connexion'''.&lt;br /&gt;
** Tant que la connexion n'est pas vérifiée, les identifiants ne sont pas enregistrés.&lt;br /&gt;
** Si la vérification réussit, OpenFlyers enregistre les identifiants et affiche la configuration de synchronisation.&lt;br /&gt;
&lt;br /&gt;
; Configurer / lancer la synchronisation&lt;br /&gt;
[[File:Carnet-aero-manual-sync-and-config.png|alt=Synchronisation des activités|Synchronisation des activités]]&lt;br /&gt;
&lt;br /&gt;
*Une fois connecté, renseigner :&lt;br /&gt;
** '''Date de début de synchronisation'''&lt;br /&gt;
&lt;br /&gt;
*Actions disponibles :&lt;br /&gt;
** Cliquer sur '''Enregistrer''' pour sauvegarder toute modification sans lancer la synchronisation.&lt;br /&gt;
** Cliquer sur '''Forcer la synchronisation''' pour enregistrer et synchroniser toutes les activités non encore synchronisées dont la date de début est postérieure à la '''Date de début de synchronisation'''.&lt;br /&gt;
** Cliquer sur '''Se déconnecter''' pour supprimer les identifiants Carnet.aero enregistrés (l'écran revient à l'étape '''Vérifier la connexion''').&lt;br /&gt;
&lt;br /&gt;
Après connexion et enregistrement, les vols futurs de l'utilisateur concerné seront automatiquement synchronisés si le statut attribué est configuré avec une [[Gestion des statuts#Fonction Carnet.aero|fonction Carnet.aero]].&lt;br /&gt;
&lt;br /&gt;
;Retours possibles&lt;br /&gt;
&lt;br /&gt;
* Champs manquants lors de la vérification :&lt;br /&gt;
**Message : &amp;quot;Veuillez renseigner l'Identifiant utilisateur et la Clé secrète utilisateur Carnet.aero correctement avant de vérifier la connexion&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Connexion vérifiée : &lt;br /&gt;
[[File:CarnetAero succesful connexion.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* Erreur de connexion Carnet.aero : &lt;br /&gt;
[[File:CarnetAero wrong userId.png|600px]] &lt;br /&gt;
&lt;br /&gt;
[[File:CarnetAero wrong userSecret.png|600px]]&lt;br /&gt;
&lt;br /&gt;
* Déconnexion : &lt;br /&gt;
[[File:CarnetAero green msg.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* Aucun vol à synchroniser : &lt;br /&gt;
[[File:CarnetAero no flight to sync .png|400px]]&lt;br /&gt;
&lt;br /&gt;
* Synchronisation manuelle réussie : &lt;br /&gt;
[[File:CarnetAero manual sync succeeded.png|600px]]&lt;br /&gt;
&lt;br /&gt;
* Erreur de configuration - Aucun statut configuré : &lt;br /&gt;
[[File:CarnetAero no status configuered.png|700px]]&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Suivi-des-remarques-de-maintenance&amp;diff=14393</id>
		<title>Suivi des remarques de maintenance</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Suivi-des-remarques-de-maintenance&amp;diff=14393"/>
		<updated>2026-04-07T15:06:36Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Paramétrage de la plateforme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
=Présentation=&lt;br /&gt;
L'objet de cette page est de décrire la mise en place d'un outil de '''suivi des remarques maintenance''' lors de la saisie d'une activité. Cet outil est basé sur les éléments suivants :&lt;br /&gt;
*Présence dans le formulaire de saisie des activités (pour les vols) de 2 champs supplémentaires intitulés :&lt;br /&gt;
**''Remarque pilote maintenance''&lt;br /&gt;
**''Réponse mécanicien''&lt;br /&gt;
*Possibilité pour les gestionnaires de recevoir des notifications automatiques par email&lt;br /&gt;
*Présence d'un rapport accessible depuis '''Planning &amp;gt; Données &amp;gt; Rapports utilisateurs &amp;gt; Rapport personnalisés''' qui liste pour une ressource donnée les activités ayant une entrée dans le champ ''Remarques maintenance'' ou dans le champ ''Réponse mécanicien''.&lt;br /&gt;
&lt;br /&gt;
=Paramétrage de la plateforme=&lt;br /&gt;
;Créer des champs métiers spécifiques pour les remarques maintenance&lt;br /&gt;
*Aller dans '''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Champs métiers''' :&lt;br /&gt;
*En bas du tableau remplir la dernière ligne vide avec les éléments suivants :&lt;br /&gt;
**Colonne '''Nom de variable''' : ''maintenanceUserComment''&lt;br /&gt;
**Colonne '''Intitulé''' : ''Remarque pilote maintenance''&lt;br /&gt;
**Colonne '''Catégorie''' : ''Activité''&lt;br /&gt;
**Colonne '''Type de valeur''' : ''Chaîne textuelle multi-ligne''&lt;br /&gt;
*Cliquer sur le bouton '''Ajouter''' à la fin de la ligne&lt;br /&gt;
*Répéter l'opration en bas du tableau remplir la dernière ligne vide avec les éléments suivants :&lt;br /&gt;
**Colonne '''Nom de variable''' : ''mechanicAnswer''&lt;br /&gt;
**Colonne '''Intitulé''' : ''Réponse mécanicien''&lt;br /&gt;
**Colonne '''Catégorie''' : ''Activité''&lt;br /&gt;
**Colonne '''Type de valeur''' : ''Chaîne textuelle multi-ligne''&lt;br /&gt;
*Cliquer sur le bouton '''Ajouter''' à la fin de la ligne&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Permettre aux gestionnaires de s'abonner aux alertes par emails&lt;br /&gt;
*Aller dans '''Admin &amp;gt; Utilisateurs &amp;gt; Profils'''&lt;br /&gt;
*Cliquer sur l'onglet '''Activités'''&lt;br /&gt;
*Cocher le droit [[Gestion-des-profils#Alertable-par-email-pour-toute-saisie-d'activité-ou-alerte-de-maintenance|Alertable par email pour toute saisie d'activité ou alerte de maintenance]] pour les profils souhaités&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Activer la visibilité du rapport de suivi des remarques maintenance&lt;br /&gt;
Le rapport [[OF-doc-en:Export-generator-4#Flights-with-mechanic-remark|Vols avec une remarque maintenance]] permet de faire ressortir pour lesquels une remarque est renseignée dans les champs définis avec comme nom de variable '''maintenanceUserComment''' et '''mechanicAnswer'''.&lt;br /&gt;
&lt;br /&gt;
Ce rapport est accessible depuis la bibliothèque des rapports : '''Gestion &amp;gt; Rapports &amp;gt; Bibliothèques &amp;gt; Accès'''.&lt;br /&gt;
&lt;br /&gt;
Il est possible de faciliter l'accès à ce rapport en le paramétrant, dans la bibliothèque, en tant que favori. Dans ce cas là, il est accessible directement depuis '''Gestion &amp;gt; Activités &amp;gt; Rapports'''.&lt;br /&gt;
&lt;br /&gt;
=Paramétrage par chaque gestionnaire=&lt;br /&gt;
Suivre la procédure [[Fiche-personnelle#Recevoir-un-e-mail-pour-les-activités-ayant-les-champs-sélectionnés-non-vide|Recevoir un e-mail pour les activités ayant les champs sélectionnés non vide]] en cochant le champ métier ''Remarque pilote maintenance'' et/ou le champ métier ''Réponse mécanicien''.&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Fiche-personnelle&amp;diff=14392</id>
		<title>Fiche personnelle</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Fiche-personnelle&amp;diff=14392"/>
		<updated>2026-04-07T12:45:26Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Recevoir un e-mail pour les activités ayant les champs sélectionnés non vide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Fiche_personnelle.png|right|thumb|200px|Fiche personnelle]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter la '''fiche personnelle''' dans la [[Accueil|version 4 d'OpenFlyers]].&lt;br /&gt;
&lt;br /&gt;
=Accès=&lt;br /&gt;
Depuis le [[Utilisation-des-réservations-internes-sur-l%27interface-web|planning de l'interface légère]] :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
&lt;br /&gt;
=Affichage du menu contextuel=&lt;br /&gt;
Le menu contextuel et un menu déroulant qui apparait lors du survol d'une réservation ou d'un vol ouvert. Ce menu contextuel peut apparaitre :&lt;br /&gt;
*soit automatiquement&lt;br /&gt;
*soit par un clic droit de la souris&lt;br /&gt;
Ce paramétrage est personnalisable pour chaque utilisateur :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Cocher ou décocher '''N'afficher la description des réservations qu'avec le bouton droit de la souris''' selon le comportement souhaité&lt;br /&gt;
*Cliquer sur le bouton '''Sauver''' tout en bas du formulaire&lt;br /&gt;
&lt;br /&gt;
=Afficher les éphémérides=&lt;br /&gt;
Permet sur le [[Utilisation-des-réservations-internes-sur-l%27interface-web|planning de l'interface légère]] :&lt;br /&gt;
* D'afficher la boîte des éphémérides&lt;br /&gt;
* Faire une distinction de couleur sur les créneaux horaires liés aux éphémérides&lt;br /&gt;
&lt;br /&gt;
[[File:Ephemeride_ancienne_interface.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Ce paramétrage est personnalisable pour chaque utilisateur :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Cocher ou décocher '''Afficher les éphémérides''' selon le comportement souhaité&lt;br /&gt;
*Cliquer sur le bouton '''Sauver''' tout en bas du formulaire&lt;br /&gt;
&lt;br /&gt;
=Choisir l'unité de temps=&lt;br /&gt;
Chaque utilisateur peut choisir l'unité de temps qui sert à afficher les heures.&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Choisir dans le champ '''Unité de temps''' parmi :&lt;br /&gt;
**heures minutes&lt;br /&gt;
**heures centièmes&lt;br /&gt;
**heures dixièmes&lt;br /&gt;
*Appuyer sur le bouton '''Sauver'''.&lt;br /&gt;
&lt;br /&gt;
==[[Champs métiers]]==&lt;br /&gt;
En plus des champs habituels, des [[Champs-métiers|champs métiers]] spécifiques à la structure peuvent apparaître dans la fiche personnelle. &lt;br /&gt;
&lt;br /&gt;
Ils sont affichés [[Gestion-des-profils#Généralités|si les droits sont attribués par l'administrateur]] et permettent d'activer des fonctionnalités supplémentaires, par exemple, [[Interfaçage-Aérogligli|l'interfaçage avec Aérogligli]].&lt;br /&gt;
&lt;br /&gt;
=Changer sa langue=&lt;br /&gt;
*Aller dans '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Dans la colonne '''Accès et interface''', changer la '''langue'''&lt;br /&gt;
*Cliquer sur '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
=Changer son mot de passe=&lt;br /&gt;
&lt;br /&gt;
==Alertes en changeant son mot de passe==&lt;br /&gt;
&lt;br /&gt;
===Vous devez saisir l'ancien mot de passe et deux fois le nouveau===&lt;br /&gt;
&lt;br /&gt;
Lors du changement du mot de passe, cette alerte s'affiche si :&lt;br /&gt;
*L'un des champs du formulaire n'a pas été saisi.&lt;br /&gt;
&lt;br /&gt;
===Vous devez saisir deux fois le même nouveau mot de passe===&lt;br /&gt;
&lt;br /&gt;
Lors du changement du mot de passe, cette alerte s'affiche si :&lt;br /&gt;
*L'un des champs du formulaire n'a pas été saisi et que l'ancien mot de passe n'est pas demandé.&lt;br /&gt;
*Le nouveau mot de passe et sa confirmation ne sont pas identiques.&lt;br /&gt;
&lt;br /&gt;
==Niveau de sécurité du mot de passe==&lt;br /&gt;
&lt;br /&gt;
Lors du changement du mot de passe, une barre montre le niveau de sécurité du mot de passe. Cette barre a 4 niveaux : '''faible''', '''moyen''', '''fort''' et '''excellent'''. Pour évaluer le niveau de sécurité du mot de passe nous regardons son nombre de caractères, s'il y a des lettres minuscules et majuscules, s'il y a des chiffres et s'il y a des caractères de ponctuation.&lt;br /&gt;
&lt;br /&gt;
Plus précisément voici ce que requiert chaque niveau :&lt;br /&gt;
*Faible : le mot de passe doit avoir au moins 1 caractère&lt;br /&gt;
*Moyen : le mot de passe doit avoir au moins 8 caractères et doit être composé de 2 types de caractères (par exemple des lettres minuscules et des lettres majuscules)&lt;br /&gt;
*Fort : le mot de passe doit avoir au moins 8 caractères et doit être composé de 3 types de caractères (par exemple des lettres minuscules, des lettres majuscules et des chiffres)&lt;br /&gt;
*Excellent : le mot de passe doit avoir au moins 14 caractères et doit être composé de 3 types de caractères (par exemple des lettres minuscules, des lettres majuscules et des chiffres)&lt;br /&gt;
&lt;br /&gt;
=Communication=&lt;br /&gt;
== E-mail ==&lt;br /&gt;
; Saisir plusieurs adresses&lt;br /&gt;
Il est possible de renseigner plusieurs adresses e-mails dans ce champ en séparant chaque adresse e-mail par une virgule.&lt;br /&gt;
&lt;br /&gt;
Attention : Il ne faut jamais mettre d’espace : &lt;br /&gt;
* Ni dans l’adresse e-mail elle-même&lt;br /&gt;
* Ni avant ou après les virgules de séparation des adresses e-mails.&lt;br /&gt;
&lt;br /&gt;
Exemple correct :&lt;br /&gt;
&amp;lt;pre&amp;gt;exemple1@domaine.com,exemple2@domaine.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemples incorrects :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exemple1@domaine.com , exemple2@domaine.com&lt;br /&gt;
exemple1@domaine.com ,exemple2@domaine.com&lt;br /&gt;
exemple1@domaine.com, exemple2@domaine.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Règles de format&lt;br /&gt;
Les adresses e-mails doivent respecter les normes définies par la [https://www.rfc-editor.org/rfc/rfc5322#section-3.4.1 RFC 5322]. Voici les principales règles à suivre :&lt;br /&gt;
&lt;br /&gt;
Caractères autorisés dans la partie locale (avant le &amp;quot;@&amp;quot;) :&lt;br /&gt;
* Lettres majuscules et minuscules (A–Z, a–z)&lt;br /&gt;
* Chiffres (0–9)&lt;br /&gt;
* Caractères spéciaux : &amp;lt;code&amp;gt;! # $ % &amp;amp; ' * + - / = ? ^ _ ` { | } ~&amp;lt;/code&amp;gt;&lt;br /&gt;
* Le point (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;), à condition qu'il :&lt;br /&gt;
** Ne soit ni en début, ni en fin&lt;br /&gt;
** Ne se suive pas lui-même (pas de &amp;lt;code&amp;gt;..&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Caractères autorisés dans le domaine (après le &amp;quot;@&amp;quot;) :&lt;br /&gt;
* Lettres majuscules et minuscules (A–Z, a–z)&lt;br /&gt;
* Chiffres (0–9)&lt;br /&gt;
* Tirets (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;), à condition qu'ils :&lt;br /&gt;
** Ne soient ni en début, ni en fin&lt;br /&gt;
&lt;br /&gt;
Exemples d'adresses e-mails valides :&lt;br /&gt;
* &amp;lt;code&amp;gt;exemple@domaine.com&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;prenom.nom@domaine.fr&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;utilisateur+tag@domaine.co.uk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemples d'adresses e-mails invalides :&lt;br /&gt;
* &amp;lt;code&amp;gt;exemple@domaine..com&amp;lt;/code&amp;gt; (double point consécutif)&lt;br /&gt;
* &amp;lt;code&amp;gt;ç@domaine.com&amp;lt;/code&amp;gt; (caractère &amp;quot;ç&amp;quot; non autorisé dans la partie locale)&lt;br /&gt;
* &amp;lt;code&amp;gt;espace @domaine.com&amp;lt;/code&amp;gt; (espace non autorisé)&lt;br /&gt;
&lt;br /&gt;
==Gérer l'abonnement à la liste de diffusion==&lt;br /&gt;
Lorsque une liste de diffusion mailman gérée par OpenFlyers est activée pour la plateforme OpenFlyers, l'utilisateur peut de lui-même gérer son abonnement à la liste de diffusion :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Formulaire '''Liste de diffusion : nomdelastructure-ml@openflyers.info'''&lt;br /&gt;
*Cocher/décocher le bouton '''Abonné(e)'''&lt;br /&gt;
*Cliquer sur le bouton '''Sauver'''&lt;br /&gt;
&lt;br /&gt;
=Editer sa photo=&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'import ou la suppression d'une photo requiert le droit [[Gestion-des-profils#Editer-sa-photo|Editer sa photo]]. Ce droit n'est pas nécessaire pour rendre sa photo visible pour tous.&lt;br /&gt;
*Lors de l'import, si la photo de profil a une taille supérieure à 600 pixels (de largeur ou de hauteur), elle est automatiquement redimensionner à cette taille. Son poids ne doit pas être supérieur à 100Ko.&lt;br /&gt;
&lt;br /&gt;
=Mettre à jour sa date de naissance, sa nationalité ou son sexe=&lt;br /&gt;
Le droit [[Gestion-des-profils#Mise-à-jour-de-sa-date-de-naissance,-de-son-sexe-et-de-sa-nationalité|Mise à jour de sa date de naissance, de son sexe et de sa nationalité]] est requis pour mettre à jour sa date de naissance, sa nationalité ou son sexe.&lt;br /&gt;
&lt;br /&gt;
=Notifications=&lt;br /&gt;
==Etre informé des actualités OpenFlyers par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin d'être prévenu ou non par e-mail des nouveautés OpenFlyers.&lt;br /&gt;
&lt;br /&gt;
==Recevoir un e-mail pour chaque facture==&lt;br /&gt;
Cette option permet d'activer ou de désactiver l'[[Envoi-des-emails#E-mail-de-facture|envoi automatique de chaque facture]] appartenant à l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
Cette option apparait lorsque les paramètres [[Paramétrage-des-activités#Envoyer-un-email-pour-chaque-facture|Envoyer un-email pour chaque facture]] et [[Paramétrage-des-activités#Autoriser-les-utilisateurs-à-choisir-de-recevoir-ou-non-un-email-pour-chaque-facture|Autoriser les utilisateurs à choisir de recevoir ou non un-email pour chaque facture]] sont activés. Cf. chapitre [[Facturation-des-clients#Envoi-automatique-de-chaque-facture-client|Envoi automatique de chaque facture client]].&lt;br /&gt;
&lt;br /&gt;
==Recevoir un e-mail pour chaque validité en attente de certification==&lt;br /&gt;
Cette option permet à un utilisateur de recevoir un [[Envoi-des-emails#E-mail-de-demande-de-certification-de-validité|e-mail]] lorsqu'une validité est en attente de certification.&lt;br /&gt;
&lt;br /&gt;
Pour que cela fonctionne, l'utilisateur doit faire partie [[Gestion-des-profils#Types-de-validités-que-l'utilisateur-peut-gérer-et-certifier|d'un profil ayant le droit de certifier le type de validité concerné]].&lt;br /&gt;
&lt;br /&gt;
=Notifications des réservations=&lt;br /&gt;
==Notification des réservations par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin d'être prévenu ou non par [[Envoi-des-emails#E-mail-de-notification-de-réservation|e-mail des réservations créées ou modifiées]] le concernant.&lt;br /&gt;
&lt;br /&gt;
==Rappel des réservations de 2 jours d'avance par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin de recevoir ou non par e-mail un rappel de réservation.&lt;br /&gt;
&lt;br /&gt;
Les rappels sont envoyés entre 0h et 6h au fuseau Europe/Paris pour les réservations débutant entre 2 et 3 jours après.&lt;br /&gt;
&lt;br /&gt;
Les [[Envoi-des-emails#Présentation|rappels ne sont effectifs que sur les plateformes en production]].&lt;br /&gt;
&lt;br /&gt;
==Rappel des réservations de la veille ou de la journée par e-mail==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin de recevoir ou non l'e-mail de rappel de la structure concernant une réservation passée (réservation de la veille ou de la journée). L'e-mail contient un message paramétré par la structure.&lt;br /&gt;
&lt;br /&gt;
Les rappels sont envoyés entre 0h et 6h au fuseau Europe/Paris pour les réservations de la veille.&lt;br /&gt;
&lt;br /&gt;
Les [[Envoi-des-emails#Présentation|rappels ne sont effectifs que sur les plateformes en production]].&lt;br /&gt;
&lt;br /&gt;
==Notification des réservations annulées==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*L'utilisateur peut cocher ou décocher cette case afin d'être prévenu ou non par [[#E-mail_d'annulation_de_réservation|e-mail des réservations annulées]] le concernant.&lt;br /&gt;
&lt;br /&gt;
==Recevoir un e-mail pour les réservations ayant pour activité==&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Lorsque l'utilisateur dispose d'un profil avec le droit [[Gestion-des-profils#Alertable-par-e-mail-pour-toute-réservation|Alertable par e-mail pour toute réservation]], apparait une liste de case à cocher avec pour label '''Recevoir un e-mail pour les réservations ayant pour activité'''.&lt;br /&gt;
*L'utilisateur peut cocher ou décocher ces cases afin d'être prévenu ou non [[Envoi-des-emails|par e-mail]] lorsqu'une réservation avec l'une de ces [[Gestion-des-activités|activités]] est créée ou modifiée par n'importe quel utilisateur.&lt;br /&gt;
&lt;br /&gt;
=Notification des activités=&lt;br /&gt;
==Recevoir un e-mail pour les activités ayant les champs sélectionnés non vide==&lt;br /&gt;
;Prérequis&lt;br /&gt;
*Disposé du droit [[Gestion-des-profils#Alertable-par-email-pour-toute-saisie-d'activité-ou-alerte-de-maintenance|Alertable par email pour toute saisie d'activité ou alerte de maintenance]]&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Dans la partie '''Notification des activités''', apparait le champ ''Recevoir un e-mail pour les activités ayant les champs sélectionnés non vide'' avec en-dessous une liste de champs métiers cochables :&lt;br /&gt;
*L'utilisateur coche ou décoche ces cases afin d'être prévenu ou non [[Envoi-des-emails#E-mail-d%27activités-avec-champs-non-vides|par e-mail]] lorsqu'une activité est saisie avec l'un des champs concernés renseigné par n'importe quel utilisateur.&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
[[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
=Paramétrer les ressources et les utilisateurs visibles sur le planning=&lt;br /&gt;
Depuis la fiche personnelle, il est possible de choisir quelles ressources matérielles et humaines sont visibles sur le planning avec le droit [[Gestion-des-profils#Personnaliser-ses-ressources-visibles|Personnaliser ses ressources visibles]].&lt;br /&gt;
&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*Dans la catégorie '''Options d'affichage''' :&lt;br /&gt;
*Cocher ou décocher les '''Ressources visibles''' ou '''Utilisateurs visibles''' à afficher.&lt;br /&gt;
&lt;br /&gt;
=Synchronisation des réservations=&lt;br /&gt;
==Mettre en place un planning partagé avec Google agenda==&lt;br /&gt;
;Présentation&lt;br /&gt;
L'objectif de cette procédure est de permettre la création d'un planning partagé contenant l'ensemble des réservations d'une plateforme OpenFlyers afin qu'elles soient visibles depuis un agenda Google lui-même partagé entre plusieurs personnes&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*Créer un compte utilisateur ayant un profil disposant du droit [[Gestion-des-profils#Alertable-par-e-mail-pour-toute-réservation|Alertable par e-mail pour toute réservation]]&lt;br /&gt;
Depuis la fiche personnelle de l'utilisateur créé :&lt;br /&gt;
*Suivre la procédure [[#Synchroniser-les-réservations-dans-OpenFlyers-avec-un-agenda-Google|Synchroniser les réservations dans OpenFlyers avec un agenda Google]] &lt;br /&gt;
*Dans '''Recevoir un e-mail pour les réservations ayant pour activité''', cocher les activités pour lesquelles la synchronisation avec le planning partagé Google agenda doit s'effectuer&lt;br /&gt;
*Cliquer sur le bouton '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
==Synchroniser les réservations dans OpenFlyers avec un agenda Google==&lt;br /&gt;
;Présentation&lt;br /&gt;
L'objectif est de synchroniser ses réservations personnelles présentes sur une plateforme OpenFlyers avec un compte Google agenda&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Sous le titre '''Synchronisation des réservations''' et le sous titre '''avec Google agenda'''&lt;br /&gt;
*Cliquer sur le bouton '''Se connecter avec Google'''&lt;br /&gt;
*Si plusieurs comptes Google sont enregistrés dans le navigateur, une page s'affiche demandant avec quel compte Google il faut se synchroniser. Sélectionner le compte concerné&lt;br /&gt;
*Une fois le compte Google sélectionné, le nom du compte en question s'affiche en dessous du sous titre '''avec Google agenda'''&lt;br /&gt;
Lorsque l'utilisateur a lié son compte Google agenda, une liste d'agendas apparaît lui permettant de choisir dans quel agenda les événements doivent être créés.&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
Sous le titre '''Synchronisation des réservations''' et le sous titre '''Calendrier'''&lt;br /&gt;
*Choisir un des agendas de la liste&lt;br /&gt;
*Cliquer sur '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
=Synchroniser les activités avec Carnet.aero=&lt;br /&gt;
;Présentation&lt;br /&gt;
L'objectif est de permettre la synchronisation et l'exportation automatiques des données d'activités vers [[Interfaçage OpenFlyers et Carnet.aero|'''Carnet.aero''']].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Prérequis&lt;br /&gt;
* Il faut [[Interfaçage-OpenFlyers-et-Carnet.aero#Récupérer-les-identifiants-API-sur-Carnet.aero|disposer des identifiants]] ('''UserId''' et '''UserSecretKey''') fournis par '''Carnet.aero'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Procédure&lt;br /&gt;
&lt;br /&gt;
* '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sous le titre '''Synchronisation des activités''', l'écran fonctionne en 2 étapes :&lt;br /&gt;
&lt;br /&gt;
; Vérifier la connexion&lt;br /&gt;
[[File:2025-12-04-11-48-51-Affichage-et-fiche-personnelle---Brave.png|alt=Synchronisation des activités|Synchronisation des activités]]&lt;br /&gt;
&lt;br /&gt;
*Renseigner :&lt;br /&gt;
** '''Identifiant Utilisateur'''&lt;br /&gt;
** '''Clé secrète utilisateur'''&lt;br /&gt;
&lt;br /&gt;
*Puis cliquer sur '''Vérifier la connexion'''.&lt;br /&gt;
** Tant que la connexion n'est pas vérifiée, les identifiants ne sont pas enregistrés.&lt;br /&gt;
** Si la vérification réussit, OpenFlyers enregistre les identifiants et affiche la configuration de synchronisation.&lt;br /&gt;
&lt;br /&gt;
; Configurer / lancer la synchronisation&lt;br /&gt;
[[File:Carnet-aero-manual-sync-and-config.png|alt=Synchronisation des activités|Synchronisation des activités]]&lt;br /&gt;
&lt;br /&gt;
*Une fois connecté, renseigner :&lt;br /&gt;
** '''Date de début de synchronisation'''&lt;br /&gt;
&lt;br /&gt;
*Actions disponibles :&lt;br /&gt;
** Cliquer sur '''Enregistrer''' pour sauvegarder toute modification sans lancer la synchronisation.&lt;br /&gt;
** Cliquer sur '''Forcer la synchronisation''' pour enregistrer et synchroniser toutes les activités non encore synchronisées dont la date de début est postérieure à la '''Date de début de synchronisation'''.&lt;br /&gt;
** Cliquer sur '''Se déconnecter''' pour supprimer les identifiants Carnet.aero enregistrés (l'écran revient à l'étape '''Vérifier la connexion''').&lt;br /&gt;
&lt;br /&gt;
Après connexion et enregistrement, les vols futurs de l'utilisateur concerné seront automatiquement synchronisés si le statut attribué est configuré avec une [[Gestion des statuts#Fonction Carnet.aero|fonction Carnet.aero]].&lt;br /&gt;
&lt;br /&gt;
;Retours possibles&lt;br /&gt;
&lt;br /&gt;
* Champs manquants lors de la vérification :&lt;br /&gt;
**Message : &amp;quot;Veuillez renseigner l'Identifiant utilisateur et la Clé secrète utilisateur Carnet.aero correctement avant de vérifier la connexion&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Connexion vérifiée : &lt;br /&gt;
[[File:CarnetAero succesful connexion.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* Erreur de connexion Carnet.aero : &lt;br /&gt;
[[File:CarnetAero wrong userId.png|600px]] &lt;br /&gt;
&lt;br /&gt;
[[File:CarnetAero wrong userSecret.png|600px]]&lt;br /&gt;
&lt;br /&gt;
* Déconnexion : &lt;br /&gt;
[[File:CarnetAero green msg.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* Aucun vol à synchroniser : &lt;br /&gt;
[[File:CarnetAero no flight to sync .png|400px]]&lt;br /&gt;
&lt;br /&gt;
* Synchronisation manuelle réussie : &lt;br /&gt;
[[File:CarnetAero manual sync succeeded.png|600px]]&lt;br /&gt;
&lt;br /&gt;
* Erreur de configuration - Aucun statut configuré : &lt;br /&gt;
[[File:CarnetAero no status configuered.png|700px]]&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=File:014_parametrage_gestion_reservation.png&amp;diff=14388</id>
		<title>File:014_parametrage_gestion_reservation.png</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=File:014_parametrage_gestion_reservation.png&amp;diff=14388"/>
		<updated>2026-04-03T16:08:56Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: Mbouzar uploaded a new version of File:014_parametrage_gestion_reservation.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Configuration-des-r%C3%A9servations-internes&amp;diff=14387</id>
		<title>Configuration des réservations internes</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Configuration-des-r%C3%A9servations-internes&amp;diff=14387"/>
		<updated>2026-04-03T15:34:23Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Général */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
Cette page présente le paramétrage du module de réservations interne.&lt;br /&gt;
&lt;br /&gt;
=Général=&lt;br /&gt;
La gestion du planning se fait en allant dans '''Admin &amp;gt; Structure &amp;gt; Paramétrage &amp;gt; Réservations internes''' :&lt;br /&gt;
[[Image:014_parametrage_gestion_reservation.png|1500px|center|gestion des réservations]]&lt;br /&gt;
&lt;br /&gt;
==Mode de réservation==&lt;br /&gt;
===Réservations standards===&lt;br /&gt;
Cette option permet de faire des réservations classiques, c'est-à-dire que l'on réserve directement une ressource en fonction de son nom (exemple : son immatriculation), cela ne diffère en rien des réservations &amp;quot;papier&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'une ressource réservée en mode standard est immobilisée, les réservations existantes sur cette ressource sont supprimées.&lt;br /&gt;
&lt;br /&gt;
L'utilisateur est averti avant la confirmation de l'opération.&lt;br /&gt;
&lt;br /&gt;
===Réservation par type de ressource===&lt;br /&gt;
La réservation par type permet non pas de choisir une ressource particulière mais un type de ressource. Dans les structures aéronautiques possédant plusieurs aéronefs d'une même famille (plusieurs DR400/120 par exemple) on choisit alors de réserver un DR400/120 parmi ceux de la flotte. Le programme choisira l'immatriculation en fonction de la disponibilité des appareils (entretien mécanique par exemple).&lt;br /&gt;
&lt;br /&gt;
La réservation par type comporte un double intérêt :&lt;br /&gt;
*pouvoir donner la priorité à une ressource par rapport à une autre et ainsi pousser telle ou telle ressource à être plus utilisée en fonction des souhaits de programmation (pour les opérations de maintenance par exemple) ;&lt;br /&gt;
*créer une ressource fictive supplémentaire pour mettre en place le surbooking.&lt;br /&gt;
&lt;br /&gt;
Si des ressources de même type sont indisponibles, que ce soit parce qu'elles sont réservées ou immobilisées, alors c'est la 1ère ressource disponible qui est choisie par OpenFlyers.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'une ressource réservée par type est immobilisée, les réservations ne sont pas supprimées. Elles sont automatiquement déplacées vers la prochaine ressource disponible du même type, selon l'ordre de priorité défini.&lt;br /&gt;
Si aucune autre ressource du même type n'est disponible, la réservation concernée est supprimée.&lt;br /&gt;
&lt;br /&gt;
Il est possible de modifier l'ordre de tri des ressources à n'importe quel moment.&lt;br /&gt;
&lt;br /&gt;
De même, pour les utilisateurs disposant du droit [[Gestion-des-profils#Surpasser-la-réservation-par-type|Surpasser la réservation par type]], il est possible de forcer une réservation sur une ressource donnée en cochant la case '''Ne pas changer de ressource'''.&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' dans le cas où la structure exploite plusieurs ressources d'un même type mais qu'elle souhaite séparer la gestion des réservations pour chaque ressource, il faut créer autant de type de ressource que de ressources. Exemple : une structure aéronautique dispose de 2 avions de type DR420. Si les 2 avions sont identifiés avec un même type &amp;quot;DR420&amp;quot; alors les réservations seront faite toujours en priorité sur le DR420 du plus forte priorité. Si ce comportement n'est pas souhaité, il faut créer 2 types (DR420-1 et DR420-2 par exemple) et associer un avion au type DR420-1 et l'autre avion au type DR420-2.&lt;br /&gt;
&lt;br /&gt;
==Code couleur==&lt;br /&gt;
Permet de définir quelle code couleur doit être utilisée pour l'affichage des réservations :&lt;br /&gt;
*Par utilisateur&lt;br /&gt;
:deux champs de sélection s'affichent :&lt;br /&gt;
:*'''Couleur par défaut pour les réservations qui ne concernent pas l'utilisateur'''&lt;br /&gt;
::Il s'agit d'une paire de couleurs [Couleur claire (réservation en solo) / couleur foncée (réservation en instruction)] utilisé pour afficher les réservations qui ne concernent pas l'utilisateur connecté.&lt;br /&gt;
:*'''Couleur par défaut pour les réservations qui concernent l'utilisateur'''&lt;br /&gt;
::Il s'agit d'une paire de couleurs [Couleur claire (réservation en solo) / couleur foncée (réservation en instruction)] utilisé pour afficher les réservations qui concernent l'utilisateur connecté.&lt;br /&gt;
:Il est possible de configurer [[Gestion-des-utilisateurs#Changer-la-couleur-d'affichage-des-réservations-d'un-utilisateur|une paire de couleurs par utilisateur]].&lt;br /&gt;
*[[Gestion-des-types-d'activités#Affecter-une-couleur-à-un-type-d'activité|Par type d'activité]]&lt;br /&gt;
&lt;br /&gt;
==Affichage possible des activités réalisées dans le planning==&lt;br /&gt;
Permet aux utilisateurs disposant du droit [[Gestion-des-profils#Voir-les-activités-de-tous|Voir les activités de tous]] d'activer le module d'[[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-activités-réalisées|Affichage des activités réalisées]] sur la page de réservation.&lt;br /&gt;
&lt;br /&gt;
==Réservation multi-ressources==&lt;br /&gt;
Cette fonctionnalité permet d'autoriser à un utilisateur de réserver plusieurs ressources sur des créneaux horaires qui se chevauchent.&lt;br /&gt;
&lt;br /&gt;
==Affichage du nom des ressources dans le planning==&lt;br /&gt;
Ce paramétrage permet d'afficher ou cacher le nom des ressources dans le planning. Cela permet de diminuer la taille verticale des lignes du planning et de cacher ces noms lorsqu'ils ne sont pas nécessaires.&lt;br /&gt;
&lt;br /&gt;
==Afficher les alertes non bloquantes lors des glisser-déposer==&lt;br /&gt;
Ce paramétrage permet d'afficher les alertes non bloquantes lors des [[Utilisation-des-réservations-internes-sur-l%27interface-web#Glisser-déposer-des-réservations|glisser-déposer des réservations]] sur le planning.&lt;br /&gt;
&lt;br /&gt;
==Autoriser la suppression partielle d'éléments de réservations== &lt;br /&gt;
Ce paramétrage permet d'afficher l'action '''Annuler cet élément du groupe de réservations''' lorsqu'un groupe de réservations est lié. Il autorise ainsi la suppression individuelle d'un élément au sein d'un groupe de réservations, sans devoir annuler l'ensemble du groupe.&lt;br /&gt;
&lt;br /&gt;
==Amplitude du planning==&lt;br /&gt;
===Heure de début et fin (fuseau X)===&lt;br /&gt;
Permet de définir la plage horaire du planning de réservation dans le fuseau horaire de la structure.&lt;br /&gt;
&lt;br /&gt;
'''Remarque :''' les minutes proposées doivent être des multiples de 15 (00, 15, 30, 45).&lt;br /&gt;
&lt;br /&gt;
=Limitations=&lt;br /&gt;
&lt;br /&gt;
==Durée minimale d'une réservation==&lt;br /&gt;
Permet de définir la durée minimale d'une réservation.&lt;br /&gt;
&lt;br /&gt;
La durée maximale d'une réservation peut se définir pour chaque type de ressource.&lt;br /&gt;
&lt;br /&gt;
==Durée par défaut d'une réservation==&lt;br /&gt;
Permet de définir la durée par défaut.&lt;br /&gt;
&lt;br /&gt;
==Interdire d'effectuer une réservation débutant dans moins de==&lt;br /&gt;
Permet d'empêcher d'effectuer une réservation débutant dans moins de X temps. Cette fonctionnalité est notamment utile en réservation par type lorsque la distribution des ressources réelles par ligne de planning est faite le matin pour la journée. Elle est également utile lorsque la facturation se fait la veille au vu des réservations du lendemain.&lt;br /&gt;
&lt;br /&gt;
== Interdire la modification ou la suppression d'une réservation débutant dans moins de ==&lt;br /&gt;
Permet d'empêcher la modification ou la suppression d'une réservation lorsque son heure de début débute dans moins de X temps.&lt;br /&gt;
&lt;br /&gt;
Il génère l'[[Utilisation-des-réservations-internes-sur-l'interface-web#Alerte-de-délai-minimum-pour-modifier/supprimer-une-réservation|alerte de délai minimum pour modifier/supprimer une réservation]].&lt;br /&gt;
&lt;br /&gt;
Lorsque ce paramètre est activé, il est surpassable avec le droit [[Gestion-des-profils#Surpasser-l'interdiction-de-modifier-ou-supprimer-une-réservation-débutant-dans-moins-de-X-temps|Surpasser l'interdiction de modifier ou supprimer une réservation débutant dans moins de X temps]].&lt;br /&gt;
&lt;br /&gt;
==Limitation dans le temps des réservations==&lt;br /&gt;
Permet de limiter dans le temps les réservations.&lt;br /&gt;
&lt;br /&gt;
==Limitation du nombre de réservations==&lt;br /&gt;
Permet de limiter le nombre de réservations par utilisateur.&lt;br /&gt;
&lt;br /&gt;
=Champs visibles=&lt;br /&gt;
Permet de définir les champs visibles dans le formulaire de réservation :&lt;br /&gt;
*Même jour&lt;br /&gt;
*Places à disposition&lt;br /&gt;
*Lieu de départ&lt;br /&gt;
*Lieu d'arrivée&lt;br /&gt;
&lt;br /&gt;
Les lieux cochés sont ainsi définis avec une valeur par défaut lorsqu'un vol est entré à partir d'une réservation.&lt;br /&gt;
&lt;br /&gt;
;Saisie de la destination&lt;br /&gt;
Ce champ n'est disponible que si le champ '''Lieu d'arrivée''' est activé.&lt;br /&gt;
&lt;br /&gt;
Permet de demander à l'utilisateur d'indiquer sa destination et ce en fonction de la durée de sa réservation.&lt;br /&gt;
&lt;br /&gt;
Lorsque le champ '''Lieu d'arrivée''' est désactivé, la valeur enregistrée pour '''Saisie de la destination''' est vidée.&lt;br /&gt;
&lt;br /&gt;
=Alerte sur le potentiel=&lt;br /&gt;
&lt;br /&gt;
Cette section ne s'affiche que lorsque la [[Paramétrage-des-activités#Gestion-des-potentiels|gestion des potentiels]] est activée.&lt;br /&gt;
&lt;br /&gt;
;Alerter sur le potentiel estimé restant&lt;br /&gt;
Lorsqu'il est activé, permet de vérifier le potentiel restant et [[Utilisation-des-réservations-internes-sur-l'interface-web#Potentiel-estimé-restant-insuffisant|déclencher une alerte]] si celui-ci est inférieur au seuil défini lors d'une réservation.&lt;br /&gt;
&lt;br /&gt;
;Réservations débutant dans moins de&lt;br /&gt;
Indique le délai (en jours ou semaines) avant le début des réservations pour laquelle l'alerte sur le potentiel estimé restant doit être déclenchée. Par exemple, '''7 jours''' déclenche l'alerte pour les réservations commençant dans moins d'une semaine.&lt;br /&gt;
&lt;br /&gt;
;Seuil d'alerte&lt;br /&gt;
Définit le niveau minimal de potentiel estimé restant pour lequel l'alerte sera envoyée. Si le potentiel estimé tombe en dessous de ce seuil, une alerte est générée.&lt;br /&gt;
&lt;br /&gt;
==[[Paramétrage-des-validités#Paramétrer-le-contrôle-des-validités-pour-les-activités-ou-les-réservations|Paramétrage général du contrôle des validités pour les réservations]]==&lt;br /&gt;
&lt;br /&gt;
=Sélections par défaut=&lt;br /&gt;
==Type d'activité par défaut==&lt;br /&gt;
Permet de définir le type d'activité à cocher par défaut :&lt;br /&gt;
* lors d'une nouvelle réservation ou lorsqu'on sélectionne une personne en première place sur le [[Utilisation-des-réservations-internes-sur-l%27interface-web#Formulaire-de-réservation|formulaire de réservation de l'ancienne interface]]&lt;br /&gt;
* lors d'une nouvelle réservation sur le [[Utilisation-des-réservations-internes-sur-l%27appli-mobile#Tutoriel-vidéo|planning de la nouvelle interface]]&lt;br /&gt;
&lt;br /&gt;
Pour définir le type :&lt;br /&gt;
* Aller dans '''Admin &amp;gt; Structure &amp;gt; Paramétrage &amp;gt; Planning'''&lt;br /&gt;
* Champ '''Type d'activité par défaut''' : Sélectionner le type d'activité&lt;br /&gt;
* Cliquer sur '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
==Type d'activité par défaut pour la seconde place (ancienne interface)==&lt;br /&gt;
Permet de définir le type d'activité à cocher par défaut lorsqu'on sélectionne une personne en seconde place sur le [[Utilisation-des-réservations-internes-sur-l%27interface-web#Formulaire-de-réservation|formulaire de réservation de l'ancienne interface]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir le type :&lt;br /&gt;
* Aller dans '''Admin &amp;gt; Structure &amp;gt; Paramétrage &amp;gt; Planning'''&lt;br /&gt;
* Champ '''Type d'activité par défaut pour la seconde place (ancienne interface)''' : Sélectionner le type d'activité&lt;br /&gt;
* Cliquer sur '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
=Règles de saisies XML=&lt;br /&gt;
Les règles de saisie sont utilisées, pour le moment, uniquement par le moteur de réservation pour construire l'affichage des champs du formulaire de réservation et pour vérifier, après la saisie d'une réservation, que les données saisies respectent bien les règles de saisie.&lt;br /&gt;
&lt;br /&gt;
Elles sont écrites en [[Wikipedia-fr:Extensible_Markup_Language|XML]]. cf. l'exemple de règles de saisie ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Le moteur de vérification des règles s'enclenche dès qu'une réservation n'est plus &amp;quot;nue&amp;quot;, c'est à dire lorsqu'au moins un élément est renseigné (activité, ressource, etc.). Alors il vérifie quelles sont les règles compatibles et en déduit les contenus possibles dans les champs de saisie de l'interface utilisateur.&lt;br /&gt;
&lt;br /&gt;
La compatibilité d'une règle se détermine '''par restriction''' en vérifiant dans cet ordre les informations suivantes :&lt;br /&gt;
#Activités&lt;br /&gt;
#Ressources&lt;br /&gt;
#Profils&lt;br /&gt;
#Places&lt;br /&gt;
&lt;br /&gt;
Pour chaque information, le moteur regarde si elle est renseignée. Si ce n'est pas le cas alors il passe à l'information suivante. Par exemple s'il n'y a pas encore d'activité de saisie alors il ne vérifie pas ce point-là dans la règle.&lt;br /&gt;
&lt;br /&gt;
Pour les activités et les ressources, il regarde les règles qui acceptent celles renseignées. S'il y a des règles qui pose problème alors elles sont rejetées.&lt;br /&gt;
&lt;br /&gt;
Pour les profils ce sont les personnes qui sont étudiées et ce de deux manières différentes selon si sur la saisie il y a une ressource de renseignée ou non.&lt;br /&gt;
*Lorsqu'il y a une ressource de renseignée, le fonctionnement est similaire aux autres informations. le moteur regarde pour toutes les personnes renseignées si sur la place où elles sont, elles ont au moins un profil valide. Si une personne n'a aucun profil pour la place où il est alors la règle est rejetée.&lt;br /&gt;
*Lorsqu'il n'y a pas de ressource le fonctionnement est différent. Au lieu de faire par restriction, le moteur va faire '''par ajout'''. C'est-à-dire qu'au lieu de dire &amp;quot;il ne faut que des pilotes&amp;quot;, il va dire &amp;quot;je veux au moins un pilote&amp;quot;. Pour ce faire il va regarder les profils de chaque personne. S'il trouve une personne avec un profil valide, il accepte la règle. Si aucune des personnes ne correspond, il va faire une seconde vérification au niveau des places. Si pour cette règle l'une des places n'est pas définie, il considère que les personnes présentes vont potentiellement aller sur cette place et il ne rejette pas la règle. Par contre, si toutes les places sont définies et qu'aucune des personnes ne correspond alors la règle est rejetée.&lt;br /&gt;
&lt;br /&gt;
Pour les places, il vérifie qu'il n'y a pas trop de monde. Comme pour les profils il y a deux manières de les étudier en fonction de s'il y a une ressource ou non.&lt;br /&gt;
*Lorsqu'il y a une ressource, il va regarder pour chaque place si le nombre de personnes autorisées n'est pas dépassé. Si sur l'une des places le nombre est dépassé alors la règle est rejetée. Cependant, si le nombre est atteint mais pas dépassé alors la règle n'est pas rejetée.&lt;br /&gt;
*Lorsqu'il n'y a pas de ressource, il va parcourir chaque place pour compter le nombre total de personnes autorisées pour cette règle. Si le nombre est dépassé alors la règle est rejetée. Comme précédemment si le nombre est simplement atteint alors la règle n'est pas rejetée.&lt;br /&gt;
&lt;br /&gt;
Si pour chaque information saisie, la règle est compatible alors elle est conservée.&lt;br /&gt;
&lt;br /&gt;
Pour qu'une saisie soit valide, il faut qu'il existe au moins une règle de conservée, c'est à dire de compatible.&lt;br /&gt;
&lt;br /&gt;
;Exemple de règles de saisie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;ruleList&amp;gt;&lt;br /&gt;
    &amp;lt;rule&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des activités autorisées et requises --&amp;gt;&lt;br /&gt;
        &amp;lt;activityTypeList needs=&amp;quot;bookAlone&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;activityType&amp;gt;1&amp;lt;/activityType&amp;gt; &amp;lt;!-- Local --&amp;gt;&lt;br /&gt;
        &amp;lt;/activityTypeList&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des ressources autorisées --&amp;gt;&lt;br /&gt;
        &amp;lt;resourceList minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;resourceType&amp;gt;1&amp;lt;/resourceType&amp;gt; &amp;lt;!-- F-001 --&amp;gt;&lt;br /&gt;
            &amp;lt;resourceType&amp;gt;2&amp;lt;/resourceType&amp;gt; &amp;lt;!-- F-002 --&amp;gt;&lt;br /&gt;
        &amp;lt;/resourceList&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Définition des places --&amp;gt;&lt;br /&gt;
        &amp;lt;placeList&amp;gt;&lt;br /&gt;
            &amp;lt;place index=&amp;quot;0&amp;quot;  minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot; status=&amp;quot;1&amp;quot; needs=&amp;quot;bookAnyone&amp;quot;&amp;gt; &amp;lt;!-- Pilote --&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Liste des profils autorisés --&amp;gt;&lt;br /&gt;
                &amp;lt;profile&amp;gt;2&amp;lt;/profile&amp;gt; &amp;lt;!-- Pilote --&amp;gt;&lt;br /&gt;
            &amp;lt;/place&amp;gt;&lt;br /&gt;
        &amp;lt;/placeList&amp;gt;&lt;br /&gt;
    &amp;lt;/rule&amp;gt;&lt;br /&gt;
    &amp;lt;rule&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des activités autorisées et requises --&amp;gt;&lt;br /&gt;
        &amp;lt;activityTypeList needs=&amp;quot;*(bookAlone)(bookWithInstr)&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;activityType&amp;gt;1&amp;lt;/activityType&amp;gt; &amp;lt;!-- Local --&amp;gt;&lt;br /&gt;
            &amp;lt;activityType&amp;gt;2&amp;lt;/activityType&amp;gt; &amp;lt;!-- Instruction --&amp;gt;&lt;br /&gt;
        &amp;lt;/activityTypeList&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des ressources autorisées --&amp;gt;&lt;br /&gt;
        &amp;lt;resourceList minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;resourceType&amp;gt;*&amp;lt;/resourceType&amp;gt; &amp;lt;!-- F-001, F-002, F-00X --&amp;gt;&lt;br /&gt;
        &amp;lt;/resourceList&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Définition des places --&amp;gt;&lt;br /&gt;
        &amp;lt;placeList&amp;gt;&lt;br /&gt;
            &amp;lt;place index=&amp;quot;0&amp;quot;  minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot; status=&amp;quot;1&amp;quot;&amp;gt; &amp;lt;!-- Pilote--&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Liste des profils autorisés --&amp;gt;&lt;br /&gt;
                &amp;lt;profile&amp;gt;1&amp;lt;/profile&amp;gt; &amp;lt;!-- Elève --&amp;gt;&lt;br /&gt;
                &amp;lt;profile&amp;gt;2&amp;lt;/profile&amp;gt; &amp;lt;!-- Pilote --&amp;gt;&lt;br /&gt;
            &amp;lt;/place&amp;gt;&lt;br /&gt;
            &amp;lt;place index=&amp;quot;1&amp;quot; minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot; status=&amp;quot;2&amp;quot;&amp;gt; &amp;lt;!-- Instructeur --&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Liste des profils autorisés --&amp;gt;&lt;br /&gt;
                &amp;lt;profile&amp;gt;4&amp;lt;/profile&amp;gt; &amp;lt;!-- Instructeur --&amp;gt;&lt;br /&gt;
            &amp;lt;/place&amp;gt;&lt;br /&gt;
        &amp;lt;/placeList&amp;gt;&lt;br /&gt;
    &amp;lt;/rule&amp;gt;&lt;br /&gt;
    &amp;lt;rule&amp;gt;...&amp;lt;/rule&amp;gt;&lt;br /&gt;
&amp;lt;/ruleList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==attribut needs==&lt;br /&gt;
L'attribut needs peut être utilisé pour les éléments :&lt;br /&gt;
*activityTypeList&lt;br /&gt;
*place&lt;br /&gt;
&lt;br /&gt;
Il contient un ou plusieurs droits qui sont requis par l'utilisateur effectuant la saisie pour que la règle puisse s'appliquer.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il n'y a qu'un droit de requis, il faut écrire ''needs=&amp;quot;nomDuDroit&amp;quot;''.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il y a plusieurs droits possibles, un seul étant requis, il faut commencer par le signe * puis lister chaque droit en l'entourant de parenthèses : ''needs=&amp;quot;*(bookAlone)(bookWithInstr)''.&lt;br /&gt;
&lt;br /&gt;
==Capacité maximale autorisée==&lt;br /&gt;
La taille maximale autorisée pour les règles de saisie XML est de '''16 Mo'''.  &lt;br /&gt;
Lors de la création d'un type d'activité ou lors de la modification manuelle depuis '''Admin &amp;gt; Structure &amp;gt; Paramétrage &amp;gt; Réservations internes''',  si la taille des règles de saisie XML dépasse cette limite, un message d'alerte s'affiche indiquant que les règles de saisie XML sont saturées.&lt;br /&gt;
&lt;br /&gt;
Pour résoudre ce problème, il est conseillé de vérifier le contenu XML et d'identifier d'éventuelles données obsolètes afin de les supprimer et d'alléger le fichier.  &lt;br /&gt;
Si cela ne suffit pas, il est recommandé de contacter OpenFlyers pour discuter de la possibilité d'augmenter la taille du champ.&lt;br /&gt;
&lt;br /&gt;
==ruleList==&lt;br /&gt;
Élément racine de la structure XML ne peut contenir comme élément enfant que des éléments &amp;quot;rule&amp;quot; qui correspondent, chacun, à une règle.&lt;br /&gt;
&lt;br /&gt;
Il n'y pas d'attribut possible.&lt;br /&gt;
&lt;br /&gt;
===rule===&lt;br /&gt;
Définit une règle.&lt;br /&gt;
&lt;br /&gt;
Les éléments possibles sont :&lt;br /&gt;
*formulaList&lt;br /&gt;
*activityTypeList&lt;br /&gt;
*resourceList&lt;br /&gt;
*placeList&lt;br /&gt;
&lt;br /&gt;
Il n'y a pas d'attribut possible.&lt;br /&gt;
&lt;br /&gt;
Chaque règle définit les types d'activités, types de ressources et places qui la rendent compatible.&lt;br /&gt;
&lt;br /&gt;
L'exemple suivant définit une règle qui autorise une saisie pour le type d'activité ''Local'', les types de ressources ''F-001'' ou ''F-002'' et pour laquelle il faut exactement 1 utilisateur avec le profil ''Pilote'' à la place 0. Le statut attribué sera celui de numéro 1. De plus, La personne qui fait la réservation doit avoir le droit &amp;quot;bookAlone&amp;quot; et si elle dispose du droit &amp;quot;bookAnyone&amp;quot; alors elle verra en plus la liste des utilisateurs compatibles avec cette règle pour lui permettre d'en choisir une : &lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;rule&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des activités autorisées et requises --&amp;gt;&lt;br /&gt;
        &amp;lt;activityTypeList needs=&amp;quot;bookAlone&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;activityType&amp;gt;1&amp;lt;/activityType&amp;gt; &amp;lt;!-- Local --&amp;gt;&lt;br /&gt;
        &amp;lt;/activityTypeList&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des ressources autorisées --&amp;gt;&lt;br /&gt;
        &amp;lt;resourceList minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;resourceType&amp;gt;1&amp;lt;/resourceType&amp;gt; &amp;lt;!-- F-001 --&amp;gt;&lt;br /&gt;
            &amp;lt;resourceType&amp;gt;2&amp;lt;/resourceType&amp;gt; &amp;lt;!-- F-002 --&amp;gt;&lt;br /&gt;
        &amp;lt;/resourceList&amp;gt;&lt;br /&gt;
         &amp;lt;!-- Définition des places --&amp;gt;&lt;br /&gt;
        &amp;lt;placeList&amp;gt;&lt;br /&gt;
            &amp;lt;place index=&amp;quot;0&amp;quot;  minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot; status=&amp;quot;1&amp;quot; needs=&amp;quot;bookAnyone&amp;quot;&amp;gt; &amp;lt;!-- Pilote --&amp;gt;&lt;br /&gt;
                 &amp;lt;!-- Liste des profils autorisés --&amp;gt;&lt;br /&gt;
                &amp;lt;profile&amp;gt;2&amp;lt;/profile&amp;gt; &amp;lt;!-- Pilote --&amp;gt;&lt;br /&gt;
            &amp;lt;/place&amp;gt;&lt;br /&gt;
        &amp;lt;/placeList&amp;gt;&lt;br /&gt;
    &amp;lt;/rule&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====formulaList====&lt;br /&gt;
Contient la liste des formules que la règle doit respecter au travers des éléments ''formula''.&lt;br /&gt;
&lt;br /&gt;
=====formula=====&lt;br /&gt;
Doit contenir les attributs :&lt;br /&gt;
*''action'' : indique l'action concernée pour la vérification de la formule. Si l'action effectuée par l'utilisateur n'est pas celle de la formule, alors la formule n'est pas vérifiée. Par contre, la règle peut quand être compatible. Il est possible de remplacer le nom d'une action par * pour indiquer que la formule doit être vérifiée quelque soit l'action.&lt;br /&gt;
*''title'' : pour indiquer le message d'alerte devant s'afficher lorsque la formule n'est pas respectée&lt;br /&gt;
&lt;br /&gt;
Le contenu de l'élément ''formula'' est une formule qui est testée lors de la saisie.&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' dans la formule, pour les signes de comparaison supérieur ou inférieur, il faut saisir leur équivalent HTML :&lt;br /&gt;
* &amp;gt; doit être remplacé par &amp;lt;code&amp;gt;&amp;amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt; doit être remplacé par &amp;lt;code&amp;gt;&amp;amp;amp;lt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;gt;= doit être remplacé &amp;lt;code&amp;gt;&amp;amp;amp;gt;=&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;= doit être remplacé &amp;lt;code&amp;gt;&amp;amp;amp;lt;=&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;!-- Durée maximum : 30min --&amp;gt;&lt;br /&gt;
&amp;lt;formula action=&amp;quot;update&amp;quot; title=&amp;quot;Vous ne pouvez pas faire de réservation ayant une durée supérieure à 30 minutes.&amp;quot;&amp;gt;(%DURATION &amp;amp;lt;= 300)&amp;lt;/formula&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====activityTypeList====&lt;br /&gt;
Contient la liste des types d'activités qui sont compatibles avec la règle.&lt;br /&gt;
&lt;br /&gt;
Peut contenir l'attribut [[#attribut-needs|needs]].&lt;br /&gt;
=====activityType=====&lt;br /&gt;
Contient l'identifiant d'un type d'activité.&lt;br /&gt;
&lt;br /&gt;
====resourceList====&lt;br /&gt;
Contient la liste des types de ressources qui sont compatibles avec la règle.&lt;br /&gt;
&lt;br /&gt;
Peut contenir les attributs ''maxQty'' et ''minQty'' pour définir le nombre de ressources maximum et minimum.&lt;br /&gt;
&lt;br /&gt;
====placeList====&lt;br /&gt;
Contient la liste définissant les places.&lt;br /&gt;
&lt;br /&gt;
=====place=====&lt;br /&gt;
Contient la définition de chaque place.&lt;br /&gt;
&lt;br /&gt;
Peut contenir des éléments ''profile'' pour indiquer un profil requis parmi plusieurs pour qu'un utilisateur puisse occuper la place.&lt;br /&gt;
&lt;br /&gt;
Doit contenir l'attribut index pour numéroter la place définie.&lt;br /&gt;
&lt;br /&gt;
Peut contenir les attributs ''maxQty'', ''minQty'', ''needs'' et ''status''.&lt;br /&gt;
&lt;br /&gt;
L'attribut ''needs'' permet de définir le droit requis pour l'utilisateur effectuant la saisie afin qu'il puisse choisir l'utilisateur dans la liste des utilisateurs compatibles. typiquement, cet attribut est utilisé ainsi : ''needs=&amp;quot;bookAnyone&amp;quot;''.&lt;br /&gt;
&lt;br /&gt;
L'attribut ''status'' permet de définir le statut de la personne à laquelle on attribut la place. Cette définition se fait en utilisant l'identifiant du statut. Exemple : ''status=&amp;quot;1&amp;quot;''.&lt;br /&gt;
&lt;br /&gt;
======profile======&lt;br /&gt;
Contient l'identifiant du profile requis.&lt;br /&gt;
&lt;br /&gt;
==Wildcard==&lt;br /&gt;
Le caractère * peut être utilisé dans les éléments '''resourceType'''. Il indique que la règle s'applique à tous les types de ressources existants de la plateforme.&lt;br /&gt;
&lt;br /&gt;
Exemple avec wildcard :&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;resourceTypeList minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resourceType&amp;gt;*&amp;lt;/resourceType&amp;gt;&lt;br /&gt;
&amp;lt;/resourceTypeList&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple sans wildcard :&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;resourceTypeList minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resourceType&amp;gt;1&amp;lt;/resourceType&amp;gt;&lt;br /&gt;
    &amp;lt;resourceType&amp;gt;2&amp;lt;/resourceType&amp;gt;&lt;br /&gt;
    &amp;lt;resourceType&amp;gt;3&amp;lt;/resourceType&amp;gt;&lt;br /&gt;
&amp;lt;/resourceTypeList&amp;gt;&amp;lt;/xml&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Gestion-des-profils&amp;diff=14380</id>
		<title>Gestion des profils</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Gestion-des-profils&amp;diff=14380"/>
		<updated>2026-03-31T13:22:23Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Alertable par email pour toute saisie d'activité */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter la '''gestion des profils''' sur la [[Accueil|version 4 d'OpenFlyers]].&lt;br /&gt;
&lt;br /&gt;
Les profils attribués par défaut à un utilisateur créé automatiquement sont définis dans '''Admin &amp;gt; Utilisateurs &amp;gt; Paramètres par défaut'''.&lt;br /&gt;
&lt;br /&gt;
=Définition=&lt;br /&gt;
*Un '''profil''' correspond à un ensemble de '''droits''' qui définissent les actions que peut effectuer un [[Glossaire|utilisateur]] dans l'application OpenFlyers.&lt;br /&gt;
*Un utilisateur peut disposer de '''plusieurs profils'''. L'attribution des profils aux utilisateurs se fait par l'intermédiaire du  [[Gestion des utilisateurs|tableau de gestion des utilisateurs]].&lt;br /&gt;
&lt;br /&gt;
''Exemple de profils : administrateur, pilote, formateur, technicien, mécanicien, trésorier, secrétaire.''&lt;br /&gt;
&lt;br /&gt;
=Icônes symbolisant les droits des profils=&lt;br /&gt;
Dans la page '''Admin &amp;gt; Utilisateurs &amp;gt; Profils''', il faut distinguer deux éléments pour comprendre le principe des icônes. Il y a les droits d'un côté et les profils de l'autre.&lt;br /&gt;
&lt;br /&gt;
Les droits constituent les entêtes du tableau. Chaque entête de colonne correspond à un droit.&lt;br /&gt;
L’icône [[File:Profile-management3.0.x_Userinfo_connected.gif]] a été attribuée à l'ensemble de ces droits sauf deux :&lt;br /&gt;
*[[#Profil-non-sélectionnable-par-l'utilisateur|Profil non sélectionnable par l'utilisateur]] de l'onglet '''Généralités''' à laquelle l'icône [[File:Profile-management3.0.x_ConnectedNoFilling.png]] à été attribuée&lt;br /&gt;
*[[#Voir-les-noms-sur-les-réservations%2C-les-activités-réalisées-et-la-liste-des-utilisateurs|Voir les noms sur les réservations]] de l'onglet '''Réservations''' à laquelle l'icône [[File:Profile-management3.0.x_Userinfo_kiosk.gif]] à été attribuée&lt;br /&gt;
&lt;br /&gt;
Les profils correspondent à chaque ligne du tableau. L'icône d'un profil est variable et dépend des droits qui lui sont attribués.&lt;br /&gt;
#L'icône d'un profil sera [[File:Profile-management3.0.x_ConnectedNoFilling.png]] si le droit [[#Profil-non-sélectionnable-par-l'utilisateur|Profil non sélectionnable par l'utilisateur]] ci-dessus est coché&lt;br /&gt;
#L'icône d'un profil sera [[File:Profile-management3.0.x_Userinfo_kiosk.gif]] si aucun droit n'est attribué au profil à l'exception du droit [[#Voir-les-noms-sur-les-réservations%2C-les-activités-réalisées-et-la-liste-des-utilisateurs|Voir les noms sur les réservations]] ci-dessus qui peut être coché ou non&lt;br /&gt;
#Dans tous les autres cas, l'icône d'un profil sera [[File:Profile-management3.0.x_Userinfo_connected.gif]]&lt;br /&gt;
&lt;br /&gt;
==Définition des icônes représentant des droits==&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_connected.gif]] : Droit qui définit un profil de base.&lt;br /&gt;
:[[File:Profile-management3.0.x_ConnectedNoFilling.png]] : Droit qui rend un profil non sélectionnable par un utilisateur lors de sa connexion.&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_kiosk.gif]] : Droit qui rend un profil de type &amp;quot;kiosque&amp;quot; (voir [[Kiosque PC]]) permettant de consulter le planning uniquement. Si au moins un droit de base est activé, le profil devient un profil de base.&lt;br /&gt;
&lt;br /&gt;
==Définition des icônes attribuées aux profils==&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_connected.gif]] : Profil de base&lt;br /&gt;
:[[File:Profile-management3.0.x_ConnectedNoFilling.png]] : Profil non sélectionnable par un utilisateur lors de sa connexion.&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_kiosk.gif]] : Profil de type &amp;quot;kiosque&amp;quot; (voir [[Kiosque PC]]) permettant de consulter le planning uniquement. Toute modification ou saisie par un utilisateur nécessitera une identification par le biais d'une fenêtre &amp;quot;pop-up&amp;quot; demandant à l'utilisateur son propre identifiant et mot de passe.&lt;br /&gt;
&lt;br /&gt;
=Niveau d'accréditation des droits et des profils=&lt;br /&gt;
Les niveaux d'accréditation vont de 0 à 6 :&lt;br /&gt;
*0 représente le niveau le plus bas&lt;br /&gt;
*6 représente le niveau le plus élevé&lt;br /&gt;
&lt;br /&gt;
Chaque droit dispose d'un niveau d'accréditation qui lui est propre : plus le droit permet de faire des actions pouvant avoir des conséquences sur les données, plus le niveau d'accréditation est élevé.&lt;br /&gt;
&lt;br /&gt;
Chaque profil dispose également d'un niveau d'accréditation. Le niveau d'accréditation d'un profil correspond au niveau d'accréditation le plus élevé des droits détenus par le profil.&lt;br /&gt;
&lt;br /&gt;
La page '''Admin &amp;gt; Utilisateurs &amp;gt; Profils''' indique les niveaux d'accréditation à la fois des droits et des profils :&lt;br /&gt;
*Les droits sont indiqués dans les entêtes de chaque colonne. Le niveau d'accréditation du droit est indiqué en dessous du nom du droit dans un cercle.&lt;br /&gt;
*Les profils sont indiqués à chaque ligne du tableau. le niveau d'accréditation du profil est indiqué en dessous du nom du profil dans un cercle.&lt;br /&gt;
Le niveau d'accréditation 6 est affiché en inverse vidéo par rapport aux autres niveaux pour le distinguer.&lt;br /&gt;
&lt;br /&gt;
Un gestionnaire disposant le droit de gérer des utilisateurs ne peut attribuer un profil à un utilisateur qui soit plus élevé que le profil le plus élevé qu'il détient lui-même.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'une plateforme dispose de plus de 3 utilisateurs avec le niveau 6, [[Alertes-de-configuration#La-plateforme-a-plus-de-3-utilisateurs-actifs-avec-un-profil-de-niveau-6.-Les-utilisateurs-concernés-sont-:-XXX|une alerte de configuration est affichée]].&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un droit de niveau 6 est accordé à un profil, une alerte est générée si cela entraîne plus de 3 utilisateurs de niveau 6.&lt;br /&gt;
&lt;br /&gt;
=Profils=&lt;br /&gt;
La gestion des profils s'effectue depuis le menu '''Admin &amp;gt; Utilisateurs &amp;gt; Profils'''.&lt;br /&gt;
&lt;br /&gt;
Le nombre d'onglets disponible dépend du paramétrage de la plateforme OpenFlyers. Par exemple, si la gestion des activités est activée, alors l'onglet ''Activités'' est disponible.&lt;br /&gt;
&lt;br /&gt;
==Généralités==&lt;br /&gt;
&lt;br /&gt;
===Profil non sélectionnable par l'utilisateur===&lt;br /&gt;
&lt;br /&gt;
Lors de la connexion et lorsqu'un utilisateur doit faire le choix entre un profil pour se connecter, les [[Bien-débuter-avec-OpenFlyers#Attribuer-les-profils-aux-utilisateurs|profils non sélectionnables]] ne seront pas proposés parmi la liste. Ce droit ne peut pas être attribué à un profil ayant des droits de gestion.&lt;br /&gt;
&lt;br /&gt;
===Pas de déconnexion automatique===&lt;br /&gt;
Ce droit permet d'éviter la [[Connexion#Automatique|déconnexion automatique de la session]] au bout de 10 minutes et étend la connexion à 2 heures.&lt;br /&gt;
&lt;br /&gt;
===Accès visiteur===&lt;br /&gt;
L'accès visiteur permet de [[Kiosque-PC#Créer-un-compte-utilisateur-Visiteur|créer un compte visiteur]] donnant un accès limité destiné à pouvoir être utilisé par n'importe quelle personne.&lt;br /&gt;
&lt;br /&gt;
Cet accès permet également de créer un lien vers OpenFlyers avec une connexion automatique en passant les identifiants via l'URL.&lt;br /&gt;
&lt;br /&gt;
Si un visiteur [[#Réservation|peut réserver]] - dépend du paramétrage - alors, lors de la création d'une réservation, [[Utilisation-des-réservations-internes-sur-l%27appli-mobile#Créer-automatiquement-un-utilisateur-en-créant-une-réservation|le système va générer automatiquement un compte utilisateur]] à partir des informations que le visiteur aura saisi. Le visiteur sera connecté automatiquement sur ce nouveau compte.&lt;br /&gt;
&lt;br /&gt;
===Mise à jour de sa date de naissance, de son sexe et de sa nationalité===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur de modifier [[Fiche-personnelle#Mettre-à-jour-sa-date-de-naissance,-sa-nationalité-ou-son-sexe|sa date de naissance, sa nationalité et/ou son sexe dans sa fiche personnelle]].&lt;br /&gt;
&lt;br /&gt;
===Voir ses validités===&lt;br /&gt;
&lt;br /&gt;
Permet d'[[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|accéder à ses validités depuis le planning]].&lt;br /&gt;
&lt;br /&gt;
===Ajout et gestion de ses validités===&lt;br /&gt;
&lt;br /&gt;
Permet à un [[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|utilisateur de rajouter/supprimer/mettre à jour ses validités]] qui sont dans la liste [[#Type-de-validité-que-l'utilisateur-peut-gérer-pour-lui-même|Type de validité que l'utilisateur peut gérer]] et pour la mise à jour, sous réserve que le type de validité dispose d'informations qui peuvent être mises à jour.&lt;br /&gt;
&lt;br /&gt;
===Gestion de ses validités détenues===&lt;br /&gt;
&lt;br /&gt;
Permet à un [[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|utilisateur de mettre à jour/supprimer uniquement les validités]] qui lui sont déjà attribuées et qui sont dans la liste [[#Type-de-validité-que-l'utilisateur-peut-gérer-pour-lui-même|Type de validité que l'utilisateur peut gérer]] et pour la mise à jour, sous réserve que le type de validité dispose d'informations qui peuvent être mises à jour.&lt;br /&gt;
&lt;br /&gt;
===Surpasser les restrictions sur les validités===&lt;br /&gt;
Permet à un utilisateur de surpasser les [[Connexion#Restriction-d'accès|restrictions d'accès]] dues à des validités expirées, incomplétes ou non certifiées qui sont [[Validités#Contrôle-des-validités-à-la-connexion|appliquées à la connexion]].&lt;br /&gt;
&lt;br /&gt;
Voir le chapitre [[Paramétrage-des-validités#Alerte-à-la-connexion|Alerte à la connexion]] pour le paramétrage des restrictions sur les validités.&lt;br /&gt;
&lt;br /&gt;
[[Connexion#Restriction-d'accès-pour-un-administrateur-référent|Ce droit peut être attribué de façon dynamique à la connexion]] par un [[Configuration#Administrateur-référent|administrateur référent]].&lt;br /&gt;
&lt;br /&gt;
===Editer sa photo===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur [[Fiche-personnelle#Editer-sa-photo|d'importer ou de supprimer sa photo dans sa fiche personnelle]].&lt;br /&gt;
&lt;br /&gt;
==Réservation==&lt;br /&gt;
&lt;br /&gt;
===Alertable par e-mail pour toute réservation===&lt;br /&gt;
Permet la [[Fiche-personnelle#Recevoir-un-e-mail-pour-les-réservations-ayant-pour-activité|notification par e-mail pour toute réservation]].&lt;br /&gt;
&lt;br /&gt;
===Champs additionnels visualisables dans les pop-ups de réservation===&lt;br /&gt;
Permet de visualiser le contenu des champs additionnels dans la pop-up de réservation.&lt;br /&gt;
&lt;br /&gt;
===Créer ou modifier une réservation avec une date de début dépassée===&lt;br /&gt;
Autorise à créer ou modifier une réservation dont la date de début est dépassée.&lt;br /&gt;
&lt;br /&gt;
===Etre sur une nouvelle réservation===&lt;br /&gt;
Permet lors d'une nouvelle réservation, que l'utilisateur disposant du profil concerné soit autorisé à être sur une des places. &lt;br /&gt;
&lt;br /&gt;
Permet entre autre à un utilisateur tiers, de pouvoir effectuer de nouvelles réservations pour un utilisateur disposant du profil concerné et n'ayant pas de droit [[#Réservation-en-solo|Réservation solo]], [[#Réservation-pour-des-tiers|Réservation pour des tiers]] ou [[#Réservation-avec-un-instructeur|Réservation avec un instructeur]].&lt;br /&gt;
&lt;br /&gt;
===Gestion des disponibilités des ressources===&lt;br /&gt;
Sur l'ancienne interface, permet de gérer la disponibilité des ressources et de les immobiliser (pour entretien, maintenance, réparation, arrêt d'activité, ...). &lt;br /&gt;
&lt;br /&gt;
Cela se fait comme pour une réservation, une case &amp;quot;immobiliser la ressource&amp;quot; est alors disponible. Sur la frise de réservation, il sera indiqué &amp;quot;Mise en maintenance&amp;quot; pour la période demandée.&lt;br /&gt;
&lt;br /&gt;
===Gestion des disponibilités des tiers===&lt;br /&gt;
Permet de gérer la [[Gestion-des-disponibilités#Gérer-la-disponibilité-des-intervenants|disponibilité des utilisateurs]].&lt;br /&gt;
&lt;br /&gt;
===Personnaliser ses ressources visibles===&lt;br /&gt;
Permet de personnaliser la [[Fiche-personnelle#Paramétrer-les-ressources-et-les-utilisateurs-visibles-sur-le-planning|liste des ressources et utilisateurs visibles dans le planning depuis sa fiche utilisateur]].&lt;br /&gt;
&lt;br /&gt;
===Planning individuel visible pour les autres===&lt;br /&gt;
Permet de rendre disponible son planning aux autres utilisateurs.&lt;br /&gt;
&lt;br /&gt;
===Planning personnel===&lt;br /&gt;
Permet de visualiser son propre planning.&lt;br /&gt;
&lt;br /&gt;
===Réservation de programmes===&lt;br /&gt;
Autorise [[Utilisation-des-réservations-internes-sur-l%27interface-web#Positionner-automatiquement-les-activités-d’un-programme-de-formation|le positionnement automatique des activités d’un programme de formation dans le planning]].&lt;br /&gt;
&lt;br /&gt;
===Réservation en solo===&lt;br /&gt;
Autorise un utilisateur de réserver une ressource avec lui-même en première place.&lt;br /&gt;
&lt;br /&gt;
===Réservation pour des tiers===&lt;br /&gt;
Autorise la réservation d'une ressource pour un autre utilisateur (en solo et/ou double selon les droits du profil de cet utilisateur tiers).&lt;br /&gt;
&lt;br /&gt;
===Réservation avec un instructeur===&lt;br /&gt;
Autorise la réservation d'une ressource avec une personne en seconde place.&lt;br /&gt;
&lt;br /&gt;
===Supprimer une réservation avec une date de début dépassée===&lt;br /&gt;
Autorise à supprimer une réservation dont la date de début est dépassée.&lt;br /&gt;
&lt;br /&gt;
===Surpasser l'indisponibilité des instructeurs=== &lt;br /&gt;
Autorise la réservation d'une ressource avec un instructeur même si celui-ci n'est pas enregistré comme disponible durant la plage horaire de la réservation (Un message d'alerte prévient quand même. Fonction utile pour les instructeurs et le secrétariat).&lt;br /&gt;
&lt;br /&gt;
===Surpasser l'indisponibilité des ressources===&lt;br /&gt;
Autorise la réservation d'une ressource même si celle-ci n'est pas enregistrée comme disponible durant la plage horaire de la réservation (Un message d'alerte prévient quand même).&lt;br /&gt;
&lt;br /&gt;
===Surpasser l'interdiction d'effectuer une réservation dans moins de X temps===&lt;br /&gt;
Autorise la réservation en annulant l'interdiction &amp;quot;d'effectuer une réservation débutant dans moins de&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Surpasser l'interdiction de modifier ou supprimer une réservation débutant dans moins de X temps ===&lt;br /&gt;
Permet de surpasser l'[[Utilisation-des-réservations-internes-sur-l'interface-web#Alerte-de-délai-minimum-pour-modifier%2Fsupprimer-une-réservation|alerte de délai minimum pour modifier/supprimer une réservation]] qui s'affiche lorsque est paramétrée l'[[Configuration-des-réservations-internes#Interdire-la-modification-ou-la-suppression-d'une-réservation-débutant-dans-moins-de|interdiction de modifier ou supprimer une réservation débutant dans moins de X temps]].&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de durée minimum===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur la durée minimum d'une réservation.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de durée maximum===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur la durée maximum d'une réservation.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de temps===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur la limitation dans le temps des réservations.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de nombre===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur le nombre maximum de réservation.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la réservation par type===&lt;br /&gt;
En cas de chevauchement, cela permet de déplacer la réservation sur une autre ressource de type différent.&lt;br /&gt;
&lt;br /&gt;
===Surpasser les formules de saisie===&lt;br /&gt;
Permet de surpasser les règles de saisie sur les réservations.&lt;br /&gt;
&lt;br /&gt;
===Voir les images des pilotes sur le menu contextuel===&lt;br /&gt;
Permet de [[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-images-des-pilotes-sur-le-menu-contextuel|visualiser images des pilotes associés à chaque réservation sur le menu contextuel]] lorsqu'on survole ou effectue un clic droit sur la réservation.&lt;br /&gt;
&lt;br /&gt;
===Voir les noms sur les réservations, les activités réalisées et la liste des utilisateurs===&lt;br /&gt;
Permet de visualiser les noms des utilisateurs sur la page du planning à la fois pour les réservations et les [[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-activités-réalisées|activités réalisées]].&lt;br /&gt;
&lt;br /&gt;
===Voir les noms d'activités sur les réservations et les activités réalisées===&lt;br /&gt;
Permet d'[[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-noms-d'activités-sur-les-réservations-et-les-activités-réalisées|afficher les noms d'activités sur les réservations et les activités réalisées]].&lt;br /&gt;
&lt;br /&gt;
==Activités==&lt;br /&gt;
&lt;br /&gt;
===Alertable par email pour toute saisie d'activité ou alerte de maintenance===&lt;br /&gt;
;Description&lt;br /&gt;
Ce droit permet aux gestionnaires de [[Fiche-personnelle#Recevoir-un-e-mail-pour-les-activités-ayant-les-champs-sélectionnés-non-vide|s'abonner aux notifications par emails dès lors qu'une activité est saisie par un utilisateur en renseignant un champ suivi par le gestionnaire]].&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
[[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
===Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs===&lt;br /&gt;
Ce droit permet de suivre le renouvellement des validités par les utilisateurs en étant alerté par un [[Envoi-des-emails#E-mail-d'information-des-actions-des-utilisateurs-sur-des-validités|e-mail d'information des actions des utilisateurs sur des validités]] à chaque fois qu'un utilisateur renouvelle une validité sélectionnée dans la liste de la cellule '''Alerté par e-mail pour le renouvellement des types de validités'''. Attention : la mise en place de ce droit peut provoquer la réception de nombreux e-mails.&lt;br /&gt;
&lt;br /&gt;
===Attribution de place===&lt;br /&gt;
Permet d'attribuer les places auxquelles sont autorisées les utilisateurs de ce profil. Cela impacte sur les listes des utilisateurs qui se nttrouve à la saisie d'une réservation ou d'une activité.&lt;br /&gt;
&lt;br /&gt;
Ces listes sont accessibles depuis '''Planning &amp;gt; Planning &amp;gt; Réserver''' et '''Planning &amp;gt; Activités &amp;gt; Saisir'''.&lt;br /&gt;
&lt;br /&gt;
La page '''Admin &amp;gt; Type de ressource &amp;gt; Places''' permet de gérer les places d'un type de ressource. Elle permet également de définir qui a le droit d'être sur telle place en cas de restriction de profil.&lt;br /&gt;
&lt;br /&gt;
===Etre sur une nouvelle fermeture d'activité===&lt;br /&gt;
Permet lors d'une nouvelle fermeture d'activité, que la personne disposant du profil concerné soit autorisée à être sur une des places.&lt;br /&gt;
&lt;br /&gt;
Permet entre autre à une personne tierce, de pouvoir effectuer de nouvelles fermetures d'activité pour une personne disposant du profil concerné et n'ayant pas le droit [[#Saisie-d'activité-pour-soi-même|Saisie d'activité pour soi-même]] ou [[#Saisie-d'activité-pour-un-tiers|Saisie d'activité pour un tiers]].&lt;br /&gt;
&lt;br /&gt;
===Etre sur une nouvelle ouverture d'activité===&lt;br /&gt;
Permet lors d'une nouvelle ouverture d'activité, que la personne disposant du profil concerné soit autorisée à être sur une des places.&lt;br /&gt;
&lt;br /&gt;
Permet entre autre à une personne tierce, de pouvoir effectuer de nouvelles ouvertures d'activité pour une personne disposant du profil concerné et n'ayant pas le droit [[#Saisie-d'activité-pour-soi-même|Saisie d'activité pour soi-même]] ou [[#Saisie-d'activité-pour-un-tiers|Saisie d'activité pour un tiers]].&lt;br /&gt;
&lt;br /&gt;
===Saisie d'activité pour soi-même===&lt;br /&gt;
Autorise la saisie des vols et permet aussi à l'utilisateur de voir son carnet de vols.&lt;br /&gt;
&lt;br /&gt;
Permet également de supprimer ses propres vols depuis son carnet de vol et depuis le [[Carnet-de-route#Modifier-et-supprimer|carnet de route]].&lt;br /&gt;
&lt;br /&gt;
===Saisie d'activité pour un tiers===&lt;br /&gt;
Autorise la saisie des vols pour des tiers et permet de voir les carnets de vols des utilisateurs.&lt;br /&gt;
&lt;br /&gt;
Permet également de supprimer les vols des tiers depuis le carnet de vol d'un utilisateur et depuis le [[Carnet-de-route#Modifier-et-supprimer|carnet de route]].&lt;br /&gt;
&lt;br /&gt;
===Vérifier la saisie des activités et les modifier===&lt;br /&gt;
Permet de voir les carnets de vols des utilisateurs et de pointer les vols (vérification qui entérine un vol et qui rend ainsi sa modification ou suppression impossible), permet ainsi de voir les &amp;quot;vols oubliés&amp;quot; aussi (trous dans les horamètres).&lt;br /&gt;
&lt;br /&gt;
===Voir les activités de tous===&lt;br /&gt;
Permet :&lt;br /&gt;
*d'accéder au [[Carnet-de-route|carnet de route]] de chaque ressource aéronef&lt;br /&gt;
*de [[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-activités-réalisées|voir les activités réalisées sur le planning]] si le paramètre [[Configuration-des-réservations-internes#Affichage-possible-des-activités-réalisées-dans-le-planning|Affichage possible des activités réalisées dans le planning]] est activé&lt;br /&gt;
&lt;br /&gt;
===Voir ses activités===&lt;br /&gt;
Autorise l'utilisateur à voir son carnet de vol.&lt;br /&gt;
&lt;br /&gt;
===Visualiser les traces de vol===&lt;br /&gt;
Permet de [[Interfaçage-OpenFlyers-et-Charterware#Récupération-des-traces-de-vols|visualiser les traces d'un vol]].&lt;br /&gt;
&lt;br /&gt;
==Formations==&lt;br /&gt;
===Voir les suivis de formations===&lt;br /&gt;
Autorise l'utilisateur à [[Gestion-des-activités#Consulter-le-suivi-de-formation|voir les suivis de formations]] de tous les utilisateurs.&lt;br /&gt;
&lt;br /&gt;
===Gestion des formations===&lt;br /&gt;
Ce droit permet la [[Gestion-des-formations|gestion des formations]].&lt;br /&gt;
&lt;br /&gt;
==Comptes==&lt;br /&gt;
&lt;br /&gt;
===Gestion des comptes===&lt;br /&gt;
Couplé à d'autres droits, permet de créer et modifier les intitulés des comptes (boutiques, espèces, etc.) ainsi que d'accéder à la comptabilité.&lt;br /&gt;
&lt;br /&gt;
Permet lors de la [[Gestion-de-la-comptabilité-côté-utilisateur#Extrait-de-compte|visualisation des écritures]] d'un compte :&lt;br /&gt;
*de pouvoir consulter les écritures des comptes affectés&lt;br /&gt;
*[[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-une-facture-client-ou-un-reçu-d'encaissement|de pouvoir consulter une facture client ou un reçu]]&lt;br /&gt;
*de pouvoir [[Utilisation-de-la-comptabilité#Contrepasser-une-écriture|contrepasser les écritures]]&lt;br /&gt;
*de pouvoir [[Utilisation-de-la-comptabilité#Lettrer-des-écritures-comptables|lettrer les écritures]]&lt;br /&gt;
&lt;br /&gt;
Permet [[Utilisation-de-la-comptabilité#Importer-un-relevé-bancaire|d'importer des relevés bancaires]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ce droit inclut les droits '''Paramétrage des types d'encaissements''' et '''Voir les comptes'''.&lt;br /&gt;
&lt;br /&gt;
===Voir les comptes===&lt;br /&gt;
[[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-son-compte-ou-celui-d'un-tiers|Permet de voir tous les comptes]], de [[Gestion-de-la-comptabilité-côté-utilisateur#Extrait-de-compte|visualiser la liste des mouvements]] et de [[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-une-facture-client-ou-un-reçu-d'encaissement|consulter les factures clients et les reçus]].&lt;br /&gt;
&lt;br /&gt;
Couplé au droit [[#Saisir-les-encaissements-pour-les-tiers|Saisir les encaissements pour les tiers]], il permet de saisir un encaissement sur tous comptes. Ce droit inclut les privilèges du droit [[#Voir-les-comptes-utilisateurs|Voir les comptes utilisateurs]].&lt;br /&gt;
&lt;br /&gt;
===Voir les comptes utilisateurs===&lt;br /&gt;
[[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-son-compte-ou-celui-d'un-tiers|Permet de voir tous les comptes utilisateurs]] et de [[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-une-facture-client-ou-un-reçu-d'encaissement|consulter les factures clients et les reçus]].&lt;br /&gt;
&lt;br /&gt;
Couplé au droit [[#Saisir-les-encaissements-pour-les-tiers|Saisir les encaissements pour les tiers]], il permet de saisir un encaissement sur les comptes utilisateurs.&lt;br /&gt;
&lt;br /&gt;
===Gestion des comptabilités===&lt;br /&gt;
&lt;br /&gt;
permet la gestion des comptabilités&lt;br /&gt;
&lt;br /&gt;
===Paramétrage des types d'encaissements===&lt;br /&gt;
Permet le [[Configuration-de-la-comptabilité#Types-d'encaissements|paramétrage des types d'encaissements]].&lt;br /&gt;
&lt;br /&gt;
===Encaisser ses paiements===&lt;br /&gt;
&lt;br /&gt;
Permet à l'utilisateur de [[FAQ-comptabilité#Comment-autoriser-un-profil-utilisateur-à-saisir-des-encaissements-pour-lui-même-?|saisir ses propres paiements]], de les modifier ou de les supprimer tant qu'ils n'ont pas été validés. L'utilisateur ne peut pas saisir les types d'encaissements qui sont ''Accessible uniquement aux personnes autorisées à saisir pour les tiers''.&lt;br /&gt;
&lt;br /&gt;
===Saisir les encaissements pour les tiers===&lt;br /&gt;
&lt;br /&gt;
Permet à l'utilisateur de saisir, modifier ou supprimer, tant qu'ils n'ont pas été validés, les encaissements d'autres utilisateurs ainsi que les encaissements devant être affectés sur des [[Configuration de la comptabilité#Créer_un_compte_comptable|comptes comptables clients autorisés à recevoir de l'argent]].&lt;br /&gt;
&lt;br /&gt;
===Modifier la date d'un encaissement, d'un flux ou d'un transfert===&lt;br /&gt;
&lt;br /&gt;
autorise la modification de la date d'un encaissement, d'un flux ou d'un transfert s'il peut être modifié&lt;br /&gt;
&lt;br /&gt;
===Valider les encaissements===&lt;br /&gt;
&lt;br /&gt;
pointage des paiements saisis par les pilotes par exemple (Modification ultérieure de cette saisie impossible, en cas de problème il faudra alors faire l'opération inverse). Permet également la suppression d'encaissement.&lt;br /&gt;
&lt;br /&gt;
===Recevoir de l'argent===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur d'être sur la liste des paiements remis. Voir la [[Configuration-de-la-comptabilité#Types-d'encaissements|configuration de la ventilation des types d'encaissements]].&lt;br /&gt;
&lt;br /&gt;
===Transfert de son compte===&lt;br /&gt;
Permet le transfert de compte à compte depuis la page '''Planning &amp;gt; Comptes &amp;gt; Actions &amp;gt; Transférer'''.&lt;br /&gt;
&lt;br /&gt;
Les transferts effectués avec ce seul droit (sans le droit [[#Transfert-de-son-compte-sans-validation|Transfert de son compte sans validation]]) depuis cette page sont validés automatiquement.&lt;br /&gt;
&lt;br /&gt;
===Transfert de son compte sans validation===&lt;br /&gt;
Permet lors d'un transfert de compte à compte, que les flux générés ne soient pas automatiquement validés. Ce droit n'a d'effet que si le droit [[#Transfert-de-son-compte|Transfert de son compte]] est affecté au profil.&lt;br /&gt;
&lt;br /&gt;
'''Conseil OpenFlyers :''' Ce droit a été créé à la demande de clients OpenFlyers. Néanmoins, nous en déconseillons son usage. En effet, avec ce droit, un utilisateur qui &amp;quot;donne&amp;quot; de l'argent à un autre utilisateur peut ensuite reprendre sa donation. Or comme le dit l'expression : &amp;quot;[https://fr.wiktionary.org/wiki/donner_c%E2%80%99est_donner,_reprendre_c%E2%80%99est_voler Donner c'est donner, reprendre c'est voler]&amp;quot;. L'attribution du seul droit [[#Transfert-de-son-compte|Transfert de son compte]] permet un comportement conforme aux fonctionnalités présentes sur les applications bancaires, à savoir que lorsqu'on effectue un virement ce virement est définitif. Si un utilisateur se trompe dans son virement, alors il faut qu'il demande soit à la personne à qui il a donné de lui rendre le trop-perçu, soit à un gestionnaire de la structure pour qu'elle saisisse une écriture corrective. L'intérêt de procéder ainsi est qu'on conserve visuellement et directement sur les comptes la trace des opérations effectuées.&lt;br /&gt;
&lt;br /&gt;
===Saisir tout flux===&lt;br /&gt;
Permet de :&lt;br /&gt;
*[[Utilisation-de-la-comptabilité#Saisir-un-flux|saisir des flux]] depuis '''Gestion &amp;gt; Comptes &amp;gt; Flux &amp;gt; Saisir'''&lt;br /&gt;
*de modifier/supprimer des flux non validés&lt;br /&gt;
*de consulter la liste des flux depuis '''Gestion &amp;gt; Comptes &amp;gt; Flux &amp;gt; Valider'''&lt;br /&gt;
*de [[Gestion-de-la-comptabilité-côté-utilisateur#Extrait-de-compte|visualiser la liste des mouvements]]&lt;br /&gt;
*d'[[Utilisation-de-la-comptabilité#Importer-un-relevé-bancaire|importer des relevés bancaires]]&lt;br /&gt;
&lt;br /&gt;
===Valider tout flux===&lt;br /&gt;
Permet de valider les flux de la page '''Gestion &amp;gt; Comptes &amp;gt; Flux &amp;gt; Valider'''.&lt;br /&gt;
&lt;br /&gt;
Ce droit n'a effet que si le droit [[#Saisir-tout-flux|Saisir tout flux]] est affecté au profil.&lt;br /&gt;
&lt;br /&gt;
===Paramétrage de la facturation===&lt;br /&gt;
Permet de gérer les règles de [[Facturation-des-clients#Facturation-des-activités|facturation des activités]] et de [[Facturation-des-clients#Facturation-périodique|facturation périodique]].&lt;br /&gt;
&lt;br /&gt;
===Saisie des valeurs de facturation===&lt;br /&gt;
&lt;br /&gt;
Permet de gérer les variables et leurs valeurs destinés aux règles de facturation&lt;br /&gt;
&lt;br /&gt;
===Compte sur lequel un utilisateur peut agir===&lt;br /&gt;
&lt;br /&gt;
Permet de définir sur quel compte utilisateur un encaissement ou un transfert peut être réalisé par la personne connectée. Attention : ce droit est pour l'utilisateur connecté et non pas pour l'utilisateur concerné par l'encaissement ou le transfert.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limitation du solde du compte===&lt;br /&gt;
Permet à un utilisateur disposant de ce droit dans l'un de ses profils de ne pas avoir de [[Connexion#Restriction-d'accès|restriction d'accès]], de saisie de réservation ou de saisie de vol lorsque [[Configuration de la comptabilité#Restriction_d'accès_en_cas_de_solde_insuffisant|une restriction sur les soldes]] est en place. Il aura juste une alerte à la connexion. Ce droit ne permet pas à l'utilisateur concerné X de pouvoir surpasser les restrictions d'un autre utilisateur Y en effectuant par exemple une réservation en son nom alors que Y n'a ni le droit de surpasser ni le solde suffisant.&lt;br /&gt;
&lt;br /&gt;
[[Connexion#Restriction-d'accès-pour-un-administrateur-référent|Ce droit peut être attribué de façon dynamique à la connexion]] par un [[Configuration#Administrateur-référent|administrateur référent]].&lt;br /&gt;
&lt;br /&gt;
===Surpasser le seuil de [[Gestion-de-la-comptabilité-côté-utilisateur#Transférer-de-l'argent|transfert de compte]]===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur disposant de ce droit dans l'un de ses profils de ne pas être bloqué lorsque une [[Configuration-de-la-comptabilité#Paramétrage-général-des-comptabilités|restriction sur les soldes]] est en place et qu'il ne dispose pas d'un solde suffisant.&lt;br /&gt;
&lt;br /&gt;
==Ventes==&lt;br /&gt;
&lt;br /&gt;
===Gestion globale des ventes===&lt;br /&gt;
&lt;br /&gt;
Permet de gérer les produits, la facturation des produits, les stocks et [[Paramétrage-des-validités#Validité-à-vendre|validités à vendre]]. Permet également de modifier/supprimer des achats de produit.&lt;br /&gt;
&lt;br /&gt;
===Achat ventes libres===&lt;br /&gt;
&lt;br /&gt;
Autorise à acheter tous les produits qui sont en vente libre. Permet également de modifier/supprimer des achats de produit.&lt;br /&gt;
&lt;br /&gt;
===Acheter pour les tiers===&lt;br /&gt;
Autorise à effectuer/modifier/supprimer des achats de produit pour un tiers.&lt;br /&gt;
*Couplé au droit [[#Gestion-des-utilisateurs|Gestion des utilisateurs]], il permet de gérer les [[Paramétrage-des-validités#Validité-à-vendre|validités à vendre]] d'un tiers.&lt;br /&gt;
*Couplé au droit [[Gestion-des-profils#Vente-de-produit-sans-tarif|Vente de produit sans tarif]], il permet de vendre des [[Gestion-des-produits-et-des-ventes#Configuration-d'un-produit-non-stocké-sans-tarif-défini|produits sans tarif]].&lt;br /&gt;
&lt;br /&gt;
===Vente de produit sans tarif===&lt;br /&gt;
Autorise à rendre disponible et à acheter des produits sans tarif. Nécessite le droit [[#Acheter-pour-les-tiers|Acheter pour les tiers]].&lt;br /&gt;
&lt;br /&gt;
===Débrayage des ventes de validités===&lt;br /&gt;
&lt;br /&gt;
Autorise à ajouter et modifier la date d'expiration d'une [[Validités#Validité-à-vendre|validité à vendre]] sans débiter le compte.&lt;br /&gt;
&lt;br /&gt;
==Achats==&lt;br /&gt;
&lt;br /&gt;
===Gestion des achats===&lt;br /&gt;
Permet la gestion des factures fournisseurs, à en créer, modifier et supprimer.&lt;br /&gt;
&lt;br /&gt;
==Admin==&lt;br /&gt;
===Gestion du paramétrage===&lt;br /&gt;
Ce droit est nécessaire pour accéder aux pages permettant de [[Paramétrage|paramétrer la plateforme]] et fait apparaitre le menu '''Structure''' avec les items :&lt;br /&gt;
*[[Données#Accéder-au-tableau-de-conservation-des-données|'''Admin &amp;gt; Structure &amp;gt; Données &amp;gt; Conservation des données''']]&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Canaux de communications'''&lt;br /&gt;
*[[Configuration#Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Paramétrage|'''Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Paramétrage''']]&lt;br /&gt;
*[[Configuration#Admin-&amp;gt;-Structure-&amp;gt;-Structure-&amp;gt;-Coordonnées|'''Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Coordonnées''']]&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Définition'''&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Actualisation'''&lt;br /&gt;
*[[Configuration#Structure-&amp;gt;-Champs-métiers|'''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Champs métiers''']]&lt;br /&gt;
*[[Configuration#Structure-&amp;gt;-Export-SQL|'''Admin &amp;gt; Structure &amp;gt; Export SQL &amp;gt; Complet''']]&lt;br /&gt;
*[[Utilisation-de-la-comptabilité#Importer-son-modèle-de-facture|'''Admin &amp;gt; Structure &amp;gt; Imports &amp;gt; Templates ODT''']]&lt;br /&gt;
&lt;br /&gt;
Ce droit fait également apparaitre des items utiles au paramétrage mais présents dans d'autres menus :&lt;br /&gt;
*Couplé au droit [[#Gestion-des-utilisateurs|Gestion des utilisateurs]], dans le menu '''Admin &amp;gt; Utilisateurs''' :&lt;br /&gt;
**[[Champs-métiers|'''Admin &amp;gt; Utilisateurs &amp;gt; Champs métiers''']]&lt;br /&gt;
**'''[[Gestion des statuts|Admin &amp;gt; Utilisateurs &amp;gt; Statuts]]'''&lt;br /&gt;
*[[Gestion-des-types-d'activités|'''Admin &amp;gt; Types d'activités &amp;gt; Actifs''']]&lt;br /&gt;
*[[Champs-métiers|'''Admin &amp;gt; Types d'activités &amp;gt; Champs métiers''']]&lt;br /&gt;
*[[Champs-métiers|'''Ventes &amp;gt; Champs métiers &amp;gt; Champs métiers''']]&lt;br /&gt;
&lt;br /&gt;
===Gestion des valeurs===&lt;br /&gt;
&lt;br /&gt;
===Gestion des profils===&lt;br /&gt;
permet de créer et modifier les profils. Attention, laisser cette autorisation à au moins un profil !&lt;br /&gt;
&lt;br /&gt;
===Gestion des utilisateurs===&lt;br /&gt;
&lt;br /&gt;
Permet de modifier les caractéristiques, infos et photos des utilisateurs, les désactiver et gérer leurs validités qui ne correspondent pas à des [[Paramétrage-des-validités#Validité-à-vendre|validités à vendre]]. Couplé au droit [[#Acheter-pour-les-tiers|Acheter pour les tiers]], il permet de gérer les [[Paramétrage-des-validités#Validité-à-vendre|validités qui sont à vendre]].&lt;br /&gt;
&lt;br /&gt;
===Gestion des ressources===&lt;br /&gt;
Permet la gestion complète des types de ressources et des ressources (créer/supprimer/modifier/associer des validités). Autorise également la gestion de navigabilité des ressources aéronefs et la gestion des statuts.&lt;br /&gt;
&lt;br /&gt;
Permet d'accéder à [[Gestion-des-documents|la liste des documents]] qui sont associés aux ressources et leur gestion (Ajouter, modifier, supprimer). Permet aussi de gérer la liste des catégories de ces documents.&lt;br /&gt;
&lt;br /&gt;
===Gestion des rapports===&lt;br /&gt;
Fait apparaître le menu '''[[Gestion-des-rapports|Gestion &amp;gt; Rapports]]''' avec les items :&lt;br /&gt;
* '''Gestion &amp;gt; Rapports &amp;gt; Rapports personnalisés &amp;gt; Champs métiers'''&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Gestion &amp;gt; Rapports &amp;gt; Rapports personnalisés &amp;gt; Créer/Modifier]]'''&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Gestion &amp;gt; Rapports &amp;gt; Rapports personnalisés &amp;gt; Visualiser]]'''&lt;br /&gt;
* '''Gestion &amp;gt; Rapports &amp;gt; Rapports spécifiques &amp;gt; Activités et coûts'''&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Gestion &amp;gt; Rapports &amp;gt; Bibliothèque]]'''&lt;br /&gt;
&lt;br /&gt;
Fait apparaître la [[Gestion-des-rapports#Case-à-cocher-Mémoriser-ce-choix|case à cocher '''Mémoriser ce choix''']].&lt;br /&gt;
&lt;br /&gt;
Donne également accès à '''Gestion &amp;gt; Comptes &amp;gt; Gestion &amp;gt; Compte de résultat'''.&lt;br /&gt;
&lt;br /&gt;
===Voir tous les rapports===&lt;br /&gt;
Fait apparaître le menu '''Rapports''' avec les items :&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Rapports personnalisés &amp;gt; Visualiser]]'''&lt;br /&gt;
* '''Rapports spécifiques &amp;gt; Vols et coûts'''&lt;br /&gt;
Cela permet de consulter l'intégralité des rapports, y compris les favoris.&lt;br /&gt;
&lt;br /&gt;
Fait apparaître la [[Gestion-des-rapports#Case-à-cocher-Mémoriser-ce-choix|case à cocher '''Mémoriser ce choix''']].&lt;br /&gt;
&lt;br /&gt;
Donne également accès à '''Gestion &amp;gt; Comptes &amp;gt; Gestion &amp;gt; Compte de résultat'''.&lt;br /&gt;
&lt;br /&gt;
===Gestion des logs===&lt;br /&gt;
Fait apparaître le menu '''Admin &amp;gt; Logs''' avec les items :&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Actions effectuées'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Adresses IP bloquées'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Historique d'une réservation'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Identifiants bloqués'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Requête utilisateur en attente'''&lt;br /&gt;
&lt;br /&gt;
===Envoyer et suivre les e-mails===&lt;br /&gt;
Permet d'accéder à la page [[Mailing|Mailing]] et de [[Suivi-des-emails|suivre les emails]].&lt;br /&gt;
&lt;br /&gt;
===Accès aux tableurs===&lt;br /&gt;
Permet d'accéder aux fichiers [[Tableurs|tableurs]] depuis le menu.&lt;br /&gt;
&lt;br /&gt;
===Gestion des communications===&lt;br /&gt;
Permet de gérer les flux d'informations et leurs canaux.&lt;br /&gt;
&lt;br /&gt;
==Modules désactivés==&lt;br /&gt;
*Un onglet lié à un module désactivé est affiché uniquement si au moins un droit de son groupe reste actif sur au moins un profil utilisateur.&lt;br /&gt;
*Dans ce cas:&lt;br /&gt;
**L'onglet apparaît avec l'indication '''désactivé'''.&lt;br /&gt;
**Les droits non cochés apparaissent en mode inactif (non modifiables), empêchant toute nouvelle attribution.&lt;br /&gt;
**Les droits déjà attribués (cases cochées) restent visibles.&lt;br /&gt;
*Si aucun droit du groupe n'est actif, l'onglet correspondant n'est plus affiché.&lt;br /&gt;
&lt;br /&gt;
=Profils Plus=&lt;br /&gt;
*'''Admin &amp;gt; Utilisateurs &amp;gt; Profils plus'''&lt;br /&gt;
&lt;br /&gt;
==Ajouter un profil depuis Profils plus==&lt;br /&gt;
*Cliquer sur une cellule contenant le caractère '''+'''&lt;br /&gt;
*remplissez la cellule puis appuyer sur la touche &amp;quot;Entrée&amp;quot;&lt;br /&gt;
*pour valider cliquer sur la disquette à gauche dans la colonne &amp;quot;Actions&amp;quot;&lt;br /&gt;
*le nouveau profil est placé à la fin du tableau&lt;br /&gt;
&lt;br /&gt;
==Modifier un profil depuis Profils plus==&lt;br /&gt;
*Cliquer sur une cellule du profil à modifier&lt;br /&gt;
*remplissez la cellule puis appuyer sur la touche &amp;quot;Entrée&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Colonnes du tableau Profils Plus==&lt;br /&gt;
===Nom (du profil)===&lt;br /&gt;
Nom du profil&lt;br /&gt;
&lt;br /&gt;
===Type de compte requis===&lt;br /&gt;
Permet de définir les comptes utilisateurs appartenant aux types sélectionnés qui seront créés pour les nouveaux utilisateurs ou ajoutés aux utilisateurs existants à qui on attribuera ce profil&lt;br /&gt;
&lt;br /&gt;
===Champ métier visible par le profil sur le formulaire utilisateur ou sur le planning===&lt;br /&gt;
Permet d'afficher ou de cacher les [[Champs-métiers|champs métiers]] des formulaires présents dans :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*'''Gestion &amp;gt; Utilisateurs &amp;gt; Utilisateurs &amp;gt; Actifs'''&lt;br /&gt;
*'''Planning &amp;gt; Planning &amp;gt; Réserver'''&lt;br /&gt;
&lt;br /&gt;
===Type de validité que l'utilisateur peut gérer pour lui-même===&lt;br /&gt;
Permet de sélectionner les types de validités qu'un utilisateur de ce profil peut [[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|ajouter/acheter/mettre/supprimer]] (ex: Licence fédérale, Visite Médicale, Autres licences) pour lui-même. Les validités d'un utilisateur sont accessibles depuis '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Validités'''.&lt;br /&gt;
&lt;br /&gt;
[[Paramétrage-des-validités#Profils-autorisés-à-gérer-pour-eux-mêmes|Lors de l'ajout d'un type de validité, celui-ci est automatiquement affecté aux profils]].&lt;br /&gt;
&lt;br /&gt;
===Types de validités que l'utilisateur peut gérer et certifier===&lt;br /&gt;
Permet de sélectionner les types de validités qu'un utilisateur de ce profil peut gérer et certifier.&lt;br /&gt;
&lt;br /&gt;
[[Paramétrage-des-validités#Profils-autorisés-à-gérer/certifier-pour-les-autres|Lors de l'ajout d'un type de validité, celui-ci est automatiquement affecté aux profils]].&lt;br /&gt;
&lt;br /&gt;
Tous les utilisateurs détenant un profil pouvant certifier un type de validité coché recevront un [[Envoi-des-emails#E-mail-de-demande-de-certification-de-validité|e-mail]] lorsqu'une validité d'un des types choisis sera ajoutée par un utilisateur et [[Validités#Validités-en-attente-de-certification|en attente de certification]].&lt;br /&gt;
&lt;br /&gt;
'''NB''': Pour que la notification soit effective, il faut également que l'utilisateur ait coché l'option '''[[Fiche-personnelle#Recevoir-un-e-mail-pour-chaque-validité-en-attente-de-certification|Recevoir un e-mail pour chaque validité en attente de certification]]''' dans [[Fiche-personnelle#Notifications|sa fiche personnelle (onglet ''Notifications'')]].&lt;br /&gt;
&lt;br /&gt;
===Contrats non requis===&lt;br /&gt;
Voir la définition de [[Paramétrage-des-validités#Validité-contrat|validité-contrat]].&lt;br /&gt;
&lt;br /&gt;
Permet de [[Gestion-des-profils#Modifier-un-profil-depuis-Profils-plus|définir]] les [[Paramétrage-des-validités#Validité-contrat|validités-contrats]] qui ne sont pas requises pour certains profils.&lt;br /&gt;
&lt;br /&gt;
Les utilisateurs ne disposant que de profils exemptés, ne se verront pas demandés la signature des validités-contrats à la connexion. Tous les autres utilisateurs doivent signer chacun des contrats s'ils disposent d'au moins un profil non-exempté ou si la validité-contrat est requise pour tous les profils.&lt;br /&gt;
&lt;br /&gt;
La signature des validités-contrats, se fait juste après l'identification à la connexion. Le formulaire apparait tant qu'il reste au moins un contrat non-signé. L'utilisateur ne peut passer outre ce processus.&lt;br /&gt;
&lt;br /&gt;
===Attribution de place===&lt;br /&gt;
Permet d'attribuer les places auxquelles sont autorisées les utilisateurs de ce profil. Cela impacte sur les listes des utilisateurs que l'on trouve à la saisie d'une réservation ou d'un vol.&lt;br /&gt;
&lt;br /&gt;
Ces listes sont accessibles depuis '''Planning &amp;gt; Planning &amp;gt; Réserver''' et '''Planning &amp;gt; Activités &amp;gt; Saisir une activités'''.&lt;br /&gt;
&lt;br /&gt;
La page '''Admin &amp;gt; Type de ressource &amp;gt; Places''' permet de gérer les places d'un type de ressource. Elle permet également de définir qui a le droit d'être sur telle place en cas de restriction de profil.&lt;br /&gt;
&lt;br /&gt;
===Profils visibles===&lt;br /&gt;
Dans les pages '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle''', '''Gestion &amp;gt; Utilisateurs &amp;gt; Actifs''' et '''Admin &amp;gt; Utilisateurs &amp;gt; Paramètres par défaut''', on peut sélectionner les utilisateurs auxquels on souhaite voir leur planning.&lt;br /&gt;
&lt;br /&gt;
La liste des utilisateurs affichés sont ceux possédant un profil ayant les droits [[#Planning-personnel|Planning personnel]] et [[#Planning-individuel-visible-pour-les-autres|Planning individuel visible pour les autres]]. La colonne '''Profils visibles''' permet de restreindre la liste de ces utilisateurs pour ne la limiter qu'aux utilisateurs possédant les profils sélectionnés.&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' Il faut attribuer à un profil au moins une place de 1ère rang (numéro de place 0).&lt;br /&gt;
&lt;br /&gt;
===Types de ressources visibles===&lt;br /&gt;
Dans les pages '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle''', '''Gestion &amp;gt; Utilisateurs &amp;gt; Actifs''' et '''Admin &amp;gt; Utilisateurs &amp;gt; Paramètres par défaut''', on peut sélectionner les ressources dont on souhaite voir le [[Utilisation-des-réservations-internes-sur-l%27appli-mobile|planning]] ou les rendre disponibles dans les formulaires de saisie de réservation et d'activité.&lt;br /&gt;
&lt;br /&gt;
La colonne '''Types de ressources visibles''' permet de restreindre la liste de ces ressources pour ne la limiter qu'aux ressources appartenant aux types de ressources sélectionnés.&lt;br /&gt;
&lt;br /&gt;
===Comptabilités visibles===&lt;br /&gt;
Permet de sélectionner les comptabilités qui sont visibles pour un profil. De plus, les types de compte et les comptes n'étant pas d'une comptabilité sélectionnée ne seront pas visibles.&lt;br /&gt;
&lt;br /&gt;
===Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs===&lt;br /&gt;
Ce droit permet de suivre le renouvellement des validités par les utilisateurs en étant alerté par e-mail à chaque fois qu'un utilisateur renouvelle une validité sélectionnée dans la liste de la cellule '''Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs'''. Attention : la mise en place de ce droit peut provoquer la réception de nombreux e-mails.&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==[[Connexion#Choix_du_profil|Choix du profil à la connexion]]==&lt;br /&gt;
&lt;br /&gt;
==Ajouter un profil==&lt;br /&gt;
&lt;br /&gt;
Depuis l'interface dynamique :&lt;br /&gt;
*Cliquer sur l'icône de menu correspondant à la gestion des profils&lt;br /&gt;
*Ajouter une ligne&lt;br /&gt;
*Compléter les cellules&lt;br /&gt;
*L'ajout est enregistré si les cellules suivantes sont correctement remplies :&lt;br /&gt;
**'''Nom du profil''' : la cellule doit être remplie et le nom ne pas avoir déjà été utilisé comme nom de profil.&lt;br /&gt;
&lt;br /&gt;
Depuis l'interface légère :&lt;br /&gt;
*Aller sur '''Admin &amp;gt; Utilisateurs &amp;gt; Profils'''&lt;br /&gt;
*En-dessous du tableau listant les profils, cliquer sur le bouton '''AJOUTER UN PROFIL'''&lt;br /&gt;
*Renseigner les droits pour chaque onglet&lt;br /&gt;
*Aller sur '''Admin &amp;gt; Utilisateurs &amp;gt; Profils plus'''&lt;br /&gt;
*Renseigner les colonnes pour la ligne du profil nouvellement créé&lt;br /&gt;
&lt;br /&gt;
===Ajouter un profil qui surpasse la restriction en cas de solde insuffisant===&lt;br /&gt;
*Procéder à l'ajout de ligne dans un tableau.&lt;br /&gt;
*Saisir par exemple comme nom '''Non restreignable'''.&lt;br /&gt;
*Toujours dans '''Admin &amp;gt; Utilisateurs &amp;gt; Profils''', onglet '''Généralités''', cocher pour ce profil le droit [[Gestion des profils#Généralités|Profil non sélectionnable par l'utilisateur]].&lt;br /&gt;
*Dans l'onglet '''Gestion des comptes''', sélectionner le droit [[#Surpasser-la-limitation-du-solde-du-compte|Surpasser la limitation du solde du compte]] pour le profil concerné&lt;br /&gt;
Il suffit ensuite de rajouter ce profil aux utilisateurs concernés.&lt;br /&gt;
&lt;br /&gt;
=Créer un profil empêchant tout surpassement=&lt;br /&gt;
Il peut être nécessaire d'empêcher un utilisateur de pouvoir réserver ou saisir une activité même en recourant à l'aide d'un tiers qui disposerait de droits permettant de surpasser des restrictions, que cela soit sur des comptes ou sur des validités.&lt;br /&gt;
&lt;br /&gt;
Cela peut être le cas, par exemple, pour la détention d'une validité ''Cotisation'' périmée ou lorsque le solde du compte utilisateur est insuffisant (cf. [[Configuration-de-la-comptabilité#Restriction-d'accès-en-cas-de-solde-insuffisant|Restriction d'accès en cas de solde insuffisant]]).&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place une telle restriction, il faut :&lt;br /&gt;
*[[Gestion-des-profils#Ajouter-un-profil|Ajouter un profil]] en lui attribuant l'ensemble des droits (ne pas oublier la page '''Admin &amp;gt; Utilisateurs &amp;gt; Profils plus'''&lt;br /&gt;
*[[Gestion-des-profils#Modifier-un-profil|Modifier le profil]] nouvellement créé&lt;br /&gt;
**Si l'utilisateur ne doit pas pouvoir ouvrir un vol : dans l'onglet [[Gestion-des-profils#Activités|Activités]], décocher le droit [[Gestion-des-profils#Etre-sur-une-nouvelle-ouverture-d'activité|Etre sur une nouvelle ouverture d'activité]]&lt;br /&gt;
**Si l'utilisateur ne doit pas pouvoir être sur une réservation : dans l'onglet [[Gestion-des-profils#Réservation|Réservation]], décocher les droits [[Gestion-des-profils#Etre-sur-une-nouvelle-réservation|Etre sur une nouvelle réservation]], [[Gestion-des-profils#Réservation-solo|Réservation solo]] et [[Gestion-des-profils#Réservation-avec-un-instructeur|Réservation avec un instructeur]]&lt;br /&gt;
&lt;br /&gt;
==Droits particuliers==&lt;br /&gt;
*'''GÉNÉRALITÉS / Profil non sélectionnable par l'utilisateur :''' ce droit n'est applicable que si les [[Gestion des utilisateurs|utilisateurs disposant du profil concerné]] possèdent au moins un autre [[Connexion#Sélection_du_profil|profil sélectionnable à la connexion]].&lt;br /&gt;
*'''GÉNÉRALITÉS ADMIN / Gestion des profils :''' au moins un profil doit posséder ce droit.&lt;br /&gt;
&lt;br /&gt;
==Modifier un profil==&lt;br /&gt;
La modification des profils s'effectue selon les règles d'[[Utilisation des tableaux#Édition_des_données#|édition des données d'un tableau]].&lt;br /&gt;
&lt;br /&gt;
==Supprimer un profil==&lt;br /&gt;
*La suppression d'un profil est possible uniquement si les [[Gestion des utilisateurs|utilisateurs disposant de ce profil]] possèdent aussi au moins un autre profil.&lt;br /&gt;
*Procéder à la suppression de ligne dans un tableau.&lt;br /&gt;
&lt;br /&gt;
==Valeurs par défaut lors de la création d'un profil==&lt;br /&gt;
Lors de la création d'un profil, on affecte automatiquement par défaut :&lt;br /&gt;
* Tous les '''Profils visibles'''&lt;br /&gt;
* Tous les '''Types de ressources visibles'''&lt;br /&gt;
* Toutes les '''Comptabilités visibles'''&lt;br /&gt;
* Les '''Attribution de place''' correspondants à la première place de chaque type de ressource&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Utilisation-des-r%C3%A9servations-internes-sur-l%27interface-web&amp;diff=14368</id>
		<title>Utilisation des réservations internes sur l'interface web</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Utilisation-des-r%C3%A9servations-internes-sur-l%27interface-web&amp;diff=14368"/>
		<updated>2026-03-18T11:35:06Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter l'interface web du planning de réservation d'OpenFlyers et le formulaire de réservation.&lt;br /&gt;
&lt;br /&gt;
Le cartouche des éphémérides est décrit sur la page [[Éphémérides]].&lt;br /&gt;
&lt;br /&gt;
=Alertes=&lt;br /&gt;
==[[Validités#Alertes-lors-d'une-réservation-ou-une-saisie-d'activité|Alerte liées aux validités lors d'une réservation]]==&lt;br /&gt;
&lt;br /&gt;
==Alerte de délai minimum pour modifier/supprimer une réservation==&lt;br /&gt;
&lt;br /&gt;
;Prérequis&lt;br /&gt;
&lt;br /&gt;
Le paramètre de limitation temporelle de modification/suppression doit être configuré.&lt;br /&gt;
Le comportement dépend du droit [[Gestion-des-profils#Surpasser_l'interdiction_de_modifier_ou_supprimer_une_réservation_débutant_dans_moins_de_X_temps|surpassement de la limitation temporelle de modification/suppression]]&lt;br /&gt;
;Fonctionnement&lt;br /&gt;
Lorsqu'un utilisateur tente de modifier ou supprimer une réservation dont l'heure de début est trop proche (inférieure au délai minimum configuré) :&lt;br /&gt;
&lt;br /&gt;
Sans droit de surpassement : l'action est bloquée.&lt;br /&gt;
Avec droit de surpassement : une alerte orange non bloquante s'affiche, puis l'utilisateur peut confirmer l'action.&lt;br /&gt;
Exemple de message affiché (non bloquant) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Vous êtes sur le point de modifier ou supprimer une réservation débutant dans moins de X temps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple de message bloquant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Vous ne pouvez pas modifier ou supprimer une réservation débutant dans moins de X temps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L'instructeur n'est pas disponible pendant le créneau souhaité==&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un utilisateur tente d'effectuer une réservation avec une personne en seconde place, une alerte s'affiche si cette dernière a :&lt;br /&gt;
*ses disponibilités qui sont indéfinies&lt;br /&gt;
*ses disponibilités qui ne concordent pas avec le créneau souhaité&lt;br /&gt;
&lt;br /&gt;
==Potentiel estimé restant insuffisant==&lt;br /&gt;
;Prérequis&lt;br /&gt;
*L'[[Configuration-des-réservations-internes#Alerte-sur-le-potentiel|alerte sur le potentiel]] doit être activée&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Fonctionnement&lt;br /&gt;
Lors de l'ajout ou de la modification d'une réservation, si le potentiel estimé restant d'une ressource devient inférieur à un seuil critique défini, un avertissement orange apparaît :&lt;br /&gt;
&amp;lt;pre&amp;gt;Le potentiel estimé restant à l'issue de cette réservation (XX:xx) est inférieur au seuil minimum requis (YY:yy)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Aspect du planning de réservation=&lt;br /&gt;
==Activité ouverte==&lt;br /&gt;
Lorsqu'une activité et en cours :&lt;br /&gt;
*Le créneau horaire correspondant est coloré en bleu vif.&lt;br /&gt;
*L'en-tête contenant le nom de la ressource sera coloré du même bleu.&lt;br /&gt;
&lt;br /&gt;
[[File:planning-int-leg-activite-1.png]]&lt;br /&gt;
&lt;br /&gt;
==Affichage des activités réalisées==&lt;br /&gt;
Si le paramètre [[Configuration-des-réservations-internes#Affichage-possible-des-activités-réalisées-dans-le-planning|Affichage possible des activités réalisées dans le planning]] est activé et que l'utilisateur connecté dispose du droit [[Gestion-des-profils#Voir-les-activités-de-tous|Voir les activités de tous]], un interrupteur apparaît pour afficher/masquer les lignes et les créneaux des activités réalisées :&lt;br /&gt;
&lt;br /&gt;
[[File:Toggle switch to display activities.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Chaque ligne de ressource et d'instructeur comporte alors deux sous-lignes :  &lt;br /&gt;
*La sous-ligne supérieure affiche les réservations.  &lt;br /&gt;
*La sous-ligne inférieure affiche les activités réalisées.&lt;br /&gt;
&lt;br /&gt;
[[File:Enabled toggle switch to display activities.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Les informations des activités visibles pour les utilisateurs sont les mêmes que pour les réservations.&lt;br /&gt;
&lt;br /&gt;
La visibilité des informations dépend des droits [[Gestion-des-profils#Voir-les-noms-sur-les-réservations,-les-activités-réalisées-et-la-liste-des-utilisateurs|Voir les noms sur les réservations, les activités réalisées et la liste des utilisateurs]] et [[Gestion-des-profils#Voir-les-noms-d'activités-sur-les-réservations-et-les-activités-réalisées|Voir les noms d'activités sur les réservations et les activités réalisées]].&lt;br /&gt;
&lt;br /&gt;
==Affichage des images des pilotes sur le menu contextuel==&lt;br /&gt;
Cette fonctionnalité permet d'afficher les images des personnes associées à une réservation sur le menu contextuel lorsqu'on survole ou effectue un clic droit sur une réservation dans le planning.&lt;br /&gt;
&lt;br /&gt;
Cet affichage est en place lorsque l'utilisateur connecté dispose du droit [[Gestion-des-profils#Voir-les-images-des-pilotes-sur-le-menu-contextuel|Voir les images des pilotes sur le menu contextuel]].&lt;br /&gt;
&lt;br /&gt;
[[File:images-des-pilots-sur-la-réservation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Affichage des noms d'activités sur les réservations et les activités réalisées==&lt;br /&gt;
Cette fonctionnalité permet d'afficher les types d'activités associés à une réservation directement sur l'affichage de la réservation ou de l'activité réalisée dans le planning sans avoir besoin de la survoler.&lt;br /&gt;
&lt;br /&gt;
Cet affichage est en place lorsque l'utilisateur connecté dispose du droit [[Gestion-des-profils#Voir-les-noms-d'activités-sur-les-réservations-et-les-activités-réalisées|Voir les noms d'activités sur les réservations et les activités réalisées]].&lt;br /&gt;
&lt;br /&gt;
==Couleur d'un créneau de réservation==&lt;br /&gt;
===[[Gestion-des-utilisateurs#Changer-la-couleur-d'affichage-des-réservations-d'un-utilisateur|Couleur Par utilisateur]]===&lt;br /&gt;
===[[Gestion-des-types-d%27activités#Affecter-une-couleur-à-un-type-d'activité|Couleur par type d'activité]]===&lt;br /&gt;
La couleur reflète le niveau de spécificité des activités : les activités plus spécifiques sont priorisées dans le choix de la couleur.&lt;br /&gt;
&lt;br /&gt;
;Principe&lt;br /&gt;
*Les activités les plus courantes sont positionnées dans les premiers rangs&lt;br /&gt;
*Les activités les plus spécifiques sont positionnées dans les derniers rangs&lt;br /&gt;
*Lorsqu'une couleur spécifique doit être appliquée, elle doit provenir des activités les plus spécifiques&lt;br /&gt;
&lt;br /&gt;
;Règles&lt;br /&gt;
*Ordonnancement : du commun vers le spécifique&lt;br /&gt;
*Couleur : la couleur finale d'un créneau reflète la spécificité des activités qui le composent&lt;br /&gt;
&lt;br /&gt;
==Créneaux horaires==&lt;br /&gt;
Lorsqu'une réservation ne comporte pas de nom, les intitulés des activités apparaissent sur le créneau de la réservation.&lt;br /&gt;
&lt;br /&gt;
==Places disponibles==&lt;br /&gt;
Lorsqu'une ou plusieurs places sont indiquées comme disponibles pour une réservation, alors un pictogramme représentant un siège apparaît dans le créneau correspond à cette réservation. &lt;br /&gt;
&lt;br /&gt;
Le nombre de places disponibles y est précisé : +1, +2, ou +3.&lt;br /&gt;
&lt;br /&gt;
[[File:places-disponibles.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Planning par type d'activité==&lt;br /&gt;
Lorsqu'un type d'activité est sélectionné, seuls les créneaux horaires réservés avec le type d'activité sélectionné sont affichés. En revanche, les autres plages horaires réservées sont affichées sur fond gris hachuré.&lt;br /&gt;
&lt;br /&gt;
[[File:planning_By_Activity_Type.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Positionner automatiquement les activités d’un programme de formation==&lt;br /&gt;
Si la plateforme dispose du droit [[Gestion-des-profils#Réservation-de-programmes|réservation de programmes]] et des programmes de formation définis, lorsqu'on survole un créneau horaire dans le planning, un menu contextuel s'affiche, proposant les actions suivantes :&lt;br /&gt;
*'''Ajouter une réservation...''': Cette option permet de réaliser une réservation simple en affichant le [[#Formulaire-de-réservation|formulaire de réservation]].&lt;br /&gt;
*'''Ajouter un programme...''': En choisissant cette option, un pop-up s'affiche, permettant de sélectionner un programme de formation à ajouter au planning pour un utilisateur/client spécifique. En cliquant sur &amp;quot;Ajouter&amp;quot;, des créneaux de réservation sont automatiquement générés si des ressources compatibles avec le type d'activité sont disponibles. Dans le cas contraire, ces créneaux sont placés dans une nouvelle ligne appelée &amp;quot;Activité non placée&amp;quot;. Cette ligne est positionnée au début du planning, juste après la barre des heures, et reste fixe en haut de la page lorsque l'on fait défiler la page.&lt;br /&gt;
&lt;br /&gt;
En survolant l'un des créneaux créés, tous les créneaux des réservations et des activités non placées du même programme s'affichent avec un effet de mise en surbrillance jaune.&lt;br /&gt;
&lt;br /&gt;
Pour supprimer tous les créneaux créés, il suffit de survoler l'un des créneaux de réservation et de cliquer sur l'action '''Annuler le groupe de réservations'''.&lt;br /&gt;
&lt;br /&gt;
Pour supprimer un créneau parmi ceux déjà créés, il est nécessaire d'activer l'interrupteur [[Configuration-des-réservations-internes#Autoriser-la-suppression-partielle-d'éléments-de-réservations|Autoriser la suppression partielle d'éléments de réservations]].&lt;br /&gt;
&lt;br /&gt;
Une fois ce paramètre activé, l'action '''Annuler cet élément du groupe de réservations''' devient disponible. En cliquant sur cette action, le créneau sélectionné sera supprimé du groupe de réservations.&lt;br /&gt;
&lt;br /&gt;
Pour positionner une activité non placée, il est possible de soit la [[#Glisser-déposer-des-réservations|glisser-déposer]]  à l'emplacement souhaité dans le planning, soit de cliquer sur le créneau pour afficher le [[#Formulaire-de-réservation|formulaire de réservation]].&lt;br /&gt;
&lt;br /&gt;
==Ressource n'est pas disponible==&lt;br /&gt;
Si la resource n'est pas disponible sur des plages horaires, ils sont affichées sur fond gris hachuré.&lt;br /&gt;
&lt;br /&gt;
Si la ressource n'est pas disponible à certains créneaux horaires qui ne sont pas affichés sur le planning, et qu'une réservation est saisie sur plusieurs jours, alors un message d'alerte s'affiche pour indiquer à partir de quelle date et heure la ressource devient indisponible.&lt;br /&gt;
&lt;br /&gt;
Le message d’erreur affiché n’est pas bloquant si l’utilisateur possède le droit [[Gestion-des-profils#Surpasser-l'indisponibilité-des-ressources|Surpasser l'indisponibilité des ressources]].&lt;br /&gt;
&lt;br /&gt;
Pour modifier la disponibilité de la ressource, il convient de suivre la procédure [[Gestion-des-disponibilités#Gérer-la-disponibilité-des-ressources|Gérer la disponibilité des ressources]].&lt;br /&gt;
&lt;br /&gt;
=Créer une réservation avec une activité antérieure/postérieure sans ressource matérielle=&lt;br /&gt;
;prérequis&lt;br /&gt;
*[[Gestion-des-types-d'activités#Affecter-une-activité-antérieure-sans-ressource-matérielle|Affecter une activité antérieure sans ressource matérielle]]&lt;br /&gt;
*[[Gestion-des-types-d'activités#Affecter-une-activité-postérieure-sans-ressource-matérielle|Affecter une activité postérieure sans ressource matérielle]]&lt;br /&gt;
&lt;br /&gt;
;Fonctionnement&lt;br /&gt;
Dans le formulaire de réservation, lorsque le type d'activité sélectionné possède une activité antérieure/postérieure configurée, des champs supplémentaires apparaissent.&lt;br /&gt;
Ces champs reprennent le nom des types d'activité configurés et permettent de définir une durée spécifique pour chacune d'elles.&lt;br /&gt;
&lt;br /&gt;
[[File:Booking-Form-By-Previous-Next-Activity.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Lors de la création de la réservation, le système génère automatiquement trois blocs distincts :&lt;br /&gt;
*Bloc central : la réservation principale (activité normale), affichée seule sur la ligne de la ressource et au centre sur la ligne de l'utilisateur.&lt;br /&gt;
*Bloc antérieur : une réservation pour l'instructeur et l'élève uniquement, sans ressource, positionnée avant l'activité principale (exp: briefing).&lt;br /&gt;
*Bloc postérieur : une réservation pour l’instructeur et l'élève uniquement, sans ressource, positionnée après l'activité principale (exp: débriefing).&lt;br /&gt;
&lt;br /&gt;
Le moteur d'affichage met en évidence les liens entre les trois blocs de réservation (activité antérieure, activité principale, activité postérieure) à l'aide d'un effet de surbrillance jaune.&lt;br /&gt;
&lt;br /&gt;
Pour supprimer l'ensemble des créneaux créés, il suffit de survoler l'un des créneaux de réservation et de cliquer sur l'action '''Annuler le groupe de réservations'''.&lt;br /&gt;
&lt;br /&gt;
[[File:planning-By-Previous-Next-Activity.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Il est impossible de réserver l'instructeur ou l'élève pendant qu'ils participent à une activité antérieure ou postérieure. En revanche, la ressource matérielle peut être réservée pendant ces périodes.&lt;br /&gt;
&lt;br /&gt;
=Ergonomie sur écran tactile=&lt;br /&gt;
==Appui court==&lt;br /&gt;
L'appui court au-dessus d'une réservation affiche le menu contextuel.&lt;br /&gt;
&lt;br /&gt;
==Appui suivi d'un déplacement==&lt;br /&gt;
L'appui sui d'un déplacement peu de temps après l'appui fait déplacer tout le planning.&lt;br /&gt;
&lt;br /&gt;
==Appui long==&lt;br /&gt;
L'appui long au-dessus d'une réservation sans bouger le doigt permet de [[#Glisser-déposer-des-réservations|glisser-déposer]] un créneau de réservation.&lt;br /&gt;
&lt;br /&gt;
==Double-clic==&lt;br /&gt;
Double-clic au-dessus d'une réservation permet d'afficher le formulaire de réservation.&lt;br /&gt;
&lt;br /&gt;
=Ergonomie sur écran non tactile=&lt;br /&gt;
==Clic==&lt;br /&gt;
Un clic sur un créneau vide du planning pour effectuer '''une nouvelle réservation''', ou un clic sur un créneau réservé pour '''modifier une réservation'''.&lt;br /&gt;
&lt;br /&gt;
==Survol et Clic droit==&lt;br /&gt;
Un '''Survol'''/'''Clic droit''' sur une réservation affiche le menu contextuel avec les options suivantes :&lt;br /&gt;
&lt;br /&gt;
[[File:Contextual menu.png|400px]]&lt;br /&gt;
&lt;br /&gt;
;- Annuler/Modifier la réservation&lt;br /&gt;
&lt;br /&gt;
;- Saisir le vol&lt;br /&gt;
&lt;br /&gt;
;- Préparer un vol&lt;br /&gt;
*OpenFlyers est couplé avec [[Airmate]] pour aider les pilotes à préparer leur vol. Ainsi, depuis OpenFlyers il est possible de :&lt;br /&gt;
**coupler une réservation avec une préparation de vol Airmate en survolant la réservation concernée pour faire apparaitre le menu contextuel, puis de sélectionner l'item de menu '''Préparer le vol...'''&lt;br /&gt;
**créer un nouveau vol dans Airmate en cliquant sur l'item de menu '''Préparation vol &amp;gt; Préparer un vol'''&lt;br /&gt;
*Voir la page [[Airmate]] pour les détails concernant l'inscription à Airmate et la synchronisation réservation/vol.&lt;br /&gt;
&lt;br /&gt;
=Glisser-déposer des réservations=&lt;br /&gt;
La fonction de glisser-déposer est active pour tout utilisateur qui dispose du droit de réservation pour lui-même. Dans ce cas, il ne peut effectuer cette opération que pour les réservations qui le concerne.&lt;br /&gt;
&lt;br /&gt;
;Écran non tactile&lt;br /&gt;
*Survoler la réservation qui a besoin d'être déplacée&lt;br /&gt;
Le pointeur de la souris se transforme en &amp;quot;4 flèches&amp;quot;.&lt;br /&gt;
*Appuyer sur le bouton gauche de la souris pour sélectionner la réservation&lt;br /&gt;
*Déplacer la souris tout en maintenant le bouton gauche appuyé afin de déplacer le créneau de réservation sur le nouvel horaire et/ou la nouvelle ressource souhaités&lt;br /&gt;
*Relâcher le bouton gauche afin que la réservation soit mise à jour&lt;br /&gt;
Un pictogramme (roue qui tourne) apparaît en haut à gauche du rectangle de la réservation pour symboliser la mise à jour en base de données.&lt;br /&gt;
&lt;br /&gt;
Lorsque cette mise à jour est effective, le pictogramme est remplacé pendant quelques secondes par une « check » verte.&lt;br /&gt;
&lt;br /&gt;
;Écran tactile&lt;br /&gt;
*Maintenir un appui prolongé avec le doigt sur une réservation qui a besoin d'être déplacée&lt;br /&gt;
Un pictogramme &amp;quot;4 flèches&amp;quot; s'affiche en haut à gauche du rectangle symbolisant la réservation&lt;br /&gt;
*Déplacer son doigt afin de déplacer le créneau de réservation sur le nouvel horaire et/ou la nouvelle ressource souhaités&lt;br /&gt;
*Relâcher le doigt afin que la réservation se mette à jour&lt;br /&gt;
Un pictogramme (roue qui tourne) apparaît en haut à gauche du rectangle de la réservation pour symboliser la mise à jour en base de données.&lt;br /&gt;
&lt;br /&gt;
Lorsque cette mise à jour est effective, le pictogramme est remplacé pendant quelques secondes par une « check » verte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un utilisateur disposant du droit d'effectuer des réservations pour des tiers peut procéder de la même façon pour toutes les réservations.&lt;br /&gt;
&lt;br /&gt;
;Le déplacement est soumis aux règles suivantes :  &lt;br /&gt;
* Les réservations sur une ligne de type &amp;quot;utlisateur&amp;quot; ne peuvent être déplacées que vers une autre ligne de type &amp;quot;utlisateur&amp;quot;.  &lt;br /&gt;
* Les réservations sur une ligne de type &amp;quot;ressource&amp;quot; ne peuvent être déplacées que vers une autre ligne de type &amp;quot;ressource&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
;Lors du déplacement d'une réservation :&lt;br /&gt;
* si une alerte bloquante est générée elle est affichée et empêche le déplacement de la réservation&lt;br /&gt;
* si une alerte non bloquante est générée, elle n'est affichée que si le paramètre [[Configuration#Afficher-les-alertes-non-bloquantes-lors-des-glisser-déposer|Afficher les alertes non bloquantes lors des glisser-déposer]] est activé.&lt;br /&gt;
&lt;br /&gt;
=Formulaire de réservation=&lt;br /&gt;
Ce formulaire est accessible via plusieurs actions :  &lt;br /&gt;
* Un clic sur un créneau vide du planning pour effectuer une nouvelle réservation, ou un clic sur un créneau réservé pour modifier une réservation.  &lt;br /&gt;
* Via l'action '''&amp;quot;Planning &amp;gt; Planning &amp;gt; Réserver&amp;quot;'''.  &lt;br /&gt;
* En survolant un créneau réservé et en cliquant sur '''&amp;quot;Modifier la réservation&amp;quot;'''.&lt;br /&gt;
* En cas de surpassement autorisé, la modification/suppression proche de l'heure de début passe par une confirmation explicite après affichage d'un avertissement orange.&lt;br /&gt;
&lt;br /&gt;
[[File:Formulaire_reservation_ancienne_interface.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
==Type d'activité par défaut==&lt;br /&gt;
&lt;br /&gt;
Il est possible de cocher automatiquement un type d'activité sur le formulaire de réservation :&lt;br /&gt;
* Pour définir le type par défaut lors d'une nouvelle réservation ou lorsqu'on sélectionne une personne en première place, [[Configuration#Type-d'activité-par-défaut|suivre cette procédure de paramétrage]]&lt;br /&gt;
* Pour définir le type par défaut lorsqu'on sélectionne une personne en seconde place, [[Configuration#Type-d'activité-par-défaut-pour-la-seconde-place-(ancienne-interface)|suivre cette procédure de paramétrage]]&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Gestion-des-profils&amp;diff=14367</id>
		<title>Gestion des profils</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Gestion-des-profils&amp;diff=14367"/>
		<updated>2026-03-18T11:28:42Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Surpasser la limite de durée maximum */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
L'objet de cette page est de présenter la '''gestion des profils''' sur la [[Accueil|version 4 d'OpenFlyers]].&lt;br /&gt;
&lt;br /&gt;
Les profils attribués par défaut à un utilisateur créé automatiquement sont définis dans '''Admin &amp;gt; Utilisateurs &amp;gt; Paramètres par défaut'''.&lt;br /&gt;
&lt;br /&gt;
=Définition=&lt;br /&gt;
*Un '''profil''' correspond à un ensemble de '''droits''' qui définissent les actions que peut effectuer un [[Glossaire|utilisateur]] dans l'application OpenFlyers.&lt;br /&gt;
*Un utilisateur peut disposer de '''plusieurs profils'''. L'attribution des profils aux utilisateurs se fait par l'intermédiaire du  [[Gestion des utilisateurs|tableau de gestion des utilisateurs]].&lt;br /&gt;
&lt;br /&gt;
''Exemple de profils : administrateur, pilote, formateur, technicien, mécanicien, trésorier, secrétaire.''&lt;br /&gt;
&lt;br /&gt;
=Icônes symbolisant les droits des profils=&lt;br /&gt;
Dans la page '''Admin &amp;gt; Utilisateurs &amp;gt; Profils''', il faut distinguer deux éléments pour comprendre le principe des icônes. Il y a les droits d'un côté et les profils de l'autre.&lt;br /&gt;
&lt;br /&gt;
Les droits constituent les entêtes du tableau. Chaque entête de colonne correspond à un droit.&lt;br /&gt;
L’icône [[File:Profile-management3.0.x_Userinfo_connected.gif]] a été attribuée à l'ensemble de ces droits sauf deux :&lt;br /&gt;
*[[#Profil-non-sélectionnable-par-l'utilisateur|Profil non sélectionnable par l'utilisateur]] de l'onglet '''Généralités''' à laquelle l'icône [[File:Profile-management3.0.x_ConnectedNoFilling.png]] à été attribuée&lt;br /&gt;
*[[#Voir-les-noms-sur-les-réservations%2C-les-activités-réalisées-et-la-liste-des-utilisateurs|Voir les noms sur les réservations]] de l'onglet '''Réservations''' à laquelle l'icône [[File:Profile-management3.0.x_Userinfo_kiosk.gif]] à été attribuée&lt;br /&gt;
&lt;br /&gt;
Les profils correspondent à chaque ligne du tableau. L'icône d'un profil est variable et dépend des droits qui lui sont attribués.&lt;br /&gt;
#L'icône d'un profil sera [[File:Profile-management3.0.x_ConnectedNoFilling.png]] si le droit [[#Profil-non-sélectionnable-par-l'utilisateur|Profil non sélectionnable par l'utilisateur]] ci-dessus est coché&lt;br /&gt;
#L'icône d'un profil sera [[File:Profile-management3.0.x_Userinfo_kiosk.gif]] si aucun droit n'est attribué au profil à l'exception du droit [[#Voir-les-noms-sur-les-réservations%2C-les-activités-réalisées-et-la-liste-des-utilisateurs|Voir les noms sur les réservations]] ci-dessus qui peut être coché ou non&lt;br /&gt;
#Dans tous les autres cas, l'icône d'un profil sera [[File:Profile-management3.0.x_Userinfo_connected.gif]]&lt;br /&gt;
&lt;br /&gt;
==Définition des icônes représentant des droits==&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_connected.gif]] : Droit qui définit un profil de base.&lt;br /&gt;
:[[File:Profile-management3.0.x_ConnectedNoFilling.png]] : Droit qui rend un profil non sélectionnable par un utilisateur lors de sa connexion.&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_kiosk.gif]] : Droit qui rend un profil de type &amp;quot;kiosque&amp;quot; (voir [[Kiosque PC]]) permettant de consulter le planning uniquement. Si au moins un droit de base est activé, le profil devient un profil de base.&lt;br /&gt;
&lt;br /&gt;
==Définition des icônes attribuées aux profils==&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_connected.gif]] : Profil de base&lt;br /&gt;
:[[File:Profile-management3.0.x_ConnectedNoFilling.png]] : Profil non sélectionnable par un utilisateur lors de sa connexion.&lt;br /&gt;
:[[File:Profile-management3.0.x_Userinfo_kiosk.gif]] : Profil de type &amp;quot;kiosque&amp;quot; (voir [[Kiosque PC]]) permettant de consulter le planning uniquement. Toute modification ou saisie par un utilisateur nécessitera une identification par le biais d'une fenêtre &amp;quot;pop-up&amp;quot; demandant à l'utilisateur son propre identifiant et mot de passe.&lt;br /&gt;
&lt;br /&gt;
=Niveau d'accréditation des droits et des profils=&lt;br /&gt;
Les niveaux d'accréditation vont de 0 à 6 :&lt;br /&gt;
*0 représente le niveau le plus bas&lt;br /&gt;
*6 représente le niveau le plus élevé&lt;br /&gt;
&lt;br /&gt;
Chaque droit dispose d'un niveau d'accréditation qui lui est propre : plus le droit permet de faire des actions pouvant avoir des conséquences sur les données, plus le niveau d'accréditation est élevé.&lt;br /&gt;
&lt;br /&gt;
Chaque profil dispose également d'un niveau d'accréditation. Le niveau d'accréditation d'un profil correspond au niveau d'accréditation le plus élevé des droits détenus par le profil.&lt;br /&gt;
&lt;br /&gt;
La page '''Admin &amp;gt; Utilisateurs &amp;gt; Profils''' indique les niveaux d'accréditation à la fois des droits et des profils :&lt;br /&gt;
*Les droits sont indiqués dans les entêtes de chaque colonne. Le niveau d'accréditation du droit est indiqué en dessous du nom du droit dans un cercle.&lt;br /&gt;
*Les profils sont indiqués à chaque ligne du tableau. le niveau d'accréditation du profil est indiqué en dessous du nom du profil dans un cercle.&lt;br /&gt;
Le niveau d'accréditation 6 est affiché en inverse vidéo par rapport aux autres niveaux pour le distinguer.&lt;br /&gt;
&lt;br /&gt;
Un gestionnaire disposant le droit de gérer des utilisateurs ne peut attribuer un profil à un utilisateur qui soit plus élevé que le profil le plus élevé qu'il détient lui-même.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'une plateforme dispose de plus de 3 utilisateurs avec le niveau 6, [[Alertes-de-configuration#La-plateforme-a-plus-de-3-utilisateurs-actifs-avec-un-profil-de-niveau-6.-Les-utilisateurs-concernés-sont-:-XXX|une alerte de configuration est affichée]].&lt;br /&gt;
&lt;br /&gt;
Lorsqu'un droit de niveau 6 est accordé à un profil, une alerte est générée si cela entraîne plus de 3 utilisateurs de niveau 6.&lt;br /&gt;
&lt;br /&gt;
=Profils=&lt;br /&gt;
La gestion des profils s'effectue depuis le menu '''Admin &amp;gt; Utilisateurs &amp;gt; Profils'''.&lt;br /&gt;
&lt;br /&gt;
Le nombre d'onglets disponible dépend du paramétrage de la plateforme OpenFlyers. Par exemple, si la gestion des activités est activée, alors l'onglet ''Activités'' est disponible.&lt;br /&gt;
&lt;br /&gt;
==Généralités==&lt;br /&gt;
&lt;br /&gt;
===Profil non sélectionnable par l'utilisateur===&lt;br /&gt;
&lt;br /&gt;
Lors de la connexion et lorsqu'un utilisateur doit faire le choix entre un profil pour se connecter, les [[Bien-débuter-avec-OpenFlyers#Attribuer-les-profils-aux-utilisateurs|profils non sélectionnables]] ne seront pas proposés parmi la liste. Ce droit ne peut pas être attribué à un profil ayant des droits de gestion.&lt;br /&gt;
&lt;br /&gt;
===Pas de déconnexion automatique===&lt;br /&gt;
Ce droit permet d'éviter la [[Connexion#Automatique|déconnexion automatique de la session]] au bout de 10 minutes et étend la connexion à 2 heures.&lt;br /&gt;
&lt;br /&gt;
===Accès visiteur===&lt;br /&gt;
L'accès visiteur permet de [[Kiosque-PC#Créer-un-compte-utilisateur-Visiteur|créer un compte visiteur]] donnant un accès limité destiné à pouvoir être utilisé par n'importe quelle personne.&lt;br /&gt;
&lt;br /&gt;
Cet accès permet également de créer un lien vers OpenFlyers avec une connexion automatique en passant les identifiants via l'URL.&lt;br /&gt;
&lt;br /&gt;
Si un visiteur [[#Réservation|peut réserver]] - dépend du paramétrage - alors, lors de la création d'une réservation, [[Utilisation-des-réservations-internes-sur-l%27appli-mobile#Créer-automatiquement-un-utilisateur-en-créant-une-réservation|le système va générer automatiquement un compte utilisateur]] à partir des informations que le visiteur aura saisi. Le visiteur sera connecté automatiquement sur ce nouveau compte.&lt;br /&gt;
&lt;br /&gt;
===Mise à jour de sa date de naissance, de son sexe et de sa nationalité===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur de modifier [[Fiche-personnelle#Mettre-à-jour-sa-date-de-naissance,-sa-nationalité-ou-son-sexe|sa date de naissance, sa nationalité et/ou son sexe dans sa fiche personnelle]].&lt;br /&gt;
&lt;br /&gt;
===Voir ses validités===&lt;br /&gt;
&lt;br /&gt;
Permet d'[[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|accéder à ses validités depuis le planning]].&lt;br /&gt;
&lt;br /&gt;
===Ajout et gestion de ses validités===&lt;br /&gt;
&lt;br /&gt;
Permet à un [[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|utilisateur de rajouter/supprimer/mettre à jour ses validités]] qui sont dans la liste [[#Type-de-validité-que-l'utilisateur-peut-gérer-pour-lui-même|Type de validité que l'utilisateur peut gérer]] et pour la mise à jour, sous réserve que le type de validité dispose d'informations qui peuvent être mises à jour.&lt;br /&gt;
&lt;br /&gt;
===Gestion de ses validités détenues===&lt;br /&gt;
&lt;br /&gt;
Permet à un [[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|utilisateur de mettre à jour/supprimer uniquement les validités]] qui lui sont déjà attribuées et qui sont dans la liste [[#Type-de-validité-que-l'utilisateur-peut-gérer-pour-lui-même|Type de validité que l'utilisateur peut gérer]] et pour la mise à jour, sous réserve que le type de validité dispose d'informations qui peuvent être mises à jour.&lt;br /&gt;
&lt;br /&gt;
===Surpasser les restrictions sur les validités===&lt;br /&gt;
Permet à un utilisateur de surpasser les [[Connexion#Restriction-d'accès|restrictions d'accès]] dues à des validités expirées, incomplétes ou non certifiées qui sont [[Validités#Contrôle-des-validités-à-la-connexion|appliquées à la connexion]].&lt;br /&gt;
&lt;br /&gt;
Voir le chapitre [[Paramétrage-des-validités#Alerte-à-la-connexion|Alerte à la connexion]] pour le paramétrage des restrictions sur les validités.&lt;br /&gt;
&lt;br /&gt;
[[Connexion#Restriction-d'accès-pour-un-administrateur-référent|Ce droit peut être attribué de façon dynamique à la connexion]] par un [[Configuration#Administrateur-référent|administrateur référent]].&lt;br /&gt;
&lt;br /&gt;
===Editer sa photo===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur [[Fiche-personnelle#Editer-sa-photo|d'importer ou de supprimer sa photo dans sa fiche personnelle]].&lt;br /&gt;
&lt;br /&gt;
==Réservation==&lt;br /&gt;
&lt;br /&gt;
===Alertable par e-mail pour toute réservation===&lt;br /&gt;
Permet la [[Fiche-personnelle#Recevoir-un-e-mail-pour-les-réservations-ayant-pour-activité|notification par e-mail pour toute réservation]].&lt;br /&gt;
&lt;br /&gt;
===Champs additionnels visualisables dans les pop-ups de réservation===&lt;br /&gt;
Permet de visualiser le contenu des champs additionnels dans la pop-up de réservation.&lt;br /&gt;
&lt;br /&gt;
===Créer ou modifier une réservation avec une date de début dépassée===&lt;br /&gt;
Autorise à créer ou modifier une réservation dont la date de début est dépassée.&lt;br /&gt;
&lt;br /&gt;
===Etre sur une nouvelle réservation===&lt;br /&gt;
Permet lors d'une nouvelle réservation, que l'utilisateur disposant du profil concerné soit autorisé à être sur une des places. &lt;br /&gt;
&lt;br /&gt;
Permet entre autre à un utilisateur tiers, de pouvoir effectuer de nouvelles réservations pour un utilisateur disposant du profil concerné et n'ayant pas de droit [[#Réservation-en-solo|Réservation solo]], [[#Réservation-pour-des-tiers|Réservation pour des tiers]] ou [[#Réservation-avec-un-instructeur|Réservation avec un instructeur]].&lt;br /&gt;
&lt;br /&gt;
===Gestion des disponibilités des ressources===&lt;br /&gt;
Sur l'ancienne interface, permet de gérer la disponibilité des ressources et de les immobiliser (pour entretien, maintenance, réparation, arrêt d'activité, ...). &lt;br /&gt;
&lt;br /&gt;
Cela se fait comme pour une réservation, une case &amp;quot;immobiliser la ressource&amp;quot; est alors disponible. Sur la frise de réservation, il sera indiqué &amp;quot;Mise en maintenance&amp;quot; pour la période demandée.&lt;br /&gt;
&lt;br /&gt;
===Gestion des disponibilités des tiers===&lt;br /&gt;
Permet de gérer la [[Gestion-des-disponibilités#Gérer-la-disponibilité-des-intervenants|disponibilité des utilisateurs]].&lt;br /&gt;
&lt;br /&gt;
===Personnaliser ses ressources visibles===&lt;br /&gt;
Permet de personnaliser la [[Fiche-personnelle#Paramétrer-les-ressources-et-les-utilisateurs-visibles-sur-le-planning|liste des ressources et utilisateurs visibles dans le planning depuis sa fiche utilisateur]].&lt;br /&gt;
&lt;br /&gt;
===Planning individuel visible pour les autres===&lt;br /&gt;
Permet de rendre disponible son planning aux autres utilisateurs.&lt;br /&gt;
&lt;br /&gt;
===Planning personnel===&lt;br /&gt;
Permet de visualiser son propre planning.&lt;br /&gt;
&lt;br /&gt;
===Réservation de programmes===&lt;br /&gt;
Autorise [[Utilisation-des-réservations-internes-sur-l%27interface-web#Positionner-automatiquement-les-activités-d’un-programme-de-formation|le positionnement automatique des activités d’un programme de formation dans le planning]].&lt;br /&gt;
&lt;br /&gt;
===Réservation en solo===&lt;br /&gt;
Autorise un utilisateur de réserver une ressource avec lui-même en première place.&lt;br /&gt;
&lt;br /&gt;
===Réservation pour des tiers===&lt;br /&gt;
Autorise la réservation d'une ressource pour un autre utilisateur (en solo et/ou double selon les droits du profil de cet utilisateur tiers).&lt;br /&gt;
&lt;br /&gt;
===Réservation avec un instructeur===&lt;br /&gt;
Autorise la réservation d'une ressource avec une personne en seconde place.&lt;br /&gt;
&lt;br /&gt;
===Supprimer une réservation avec une date de début dépassée===&lt;br /&gt;
Autorise à supprimer une réservation dont la date de début est dépassée.&lt;br /&gt;
&lt;br /&gt;
===Surpasser l'indisponibilité des instructeurs=== &lt;br /&gt;
Autorise la réservation d'une ressource avec un instructeur même si celui-ci n'est pas enregistré comme disponible durant la plage horaire de la réservation (Un message d'alerte prévient quand même. Fonction utile pour les instructeurs et le secrétariat).&lt;br /&gt;
&lt;br /&gt;
===Surpasser l'indisponibilité des ressources===&lt;br /&gt;
Autorise la réservation d'une ressource même si celle-ci n'est pas enregistrée comme disponible durant la plage horaire de la réservation (Un message d'alerte prévient quand même).&lt;br /&gt;
&lt;br /&gt;
===Surpasser l'interdiction d'effectuer une réservation dans moins de X temps===&lt;br /&gt;
Autorise la réservation en annulant l'interdiction &amp;quot;d'effectuer une réservation débutant dans moins de&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Surpasser l'interdiction de modifier ou supprimer une réservation débutant dans moins de X temps ===&lt;br /&gt;
Autorise la modification ou la suppression d'une réservation débutant dans moins de X temps en annulant l'interdiction &amp;quot;de modifier ou supprimer une réservation débutant dans moins de X temps&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de durée minimum===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur la durée minimum d'une réservation.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de durée maximum===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur la durée maximum d'une réservation.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de temps===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur la limitation dans le temps des réservations.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limite de nombre===&lt;br /&gt;
Autorise la réservation en annulant la restriction sur le nombre maximum de réservation.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la réservation par type===&lt;br /&gt;
En cas de chevauchement, cela permet de déplacer la réservation sur une autre ressource de type différent.&lt;br /&gt;
&lt;br /&gt;
===Surpasser les formules de saisie===&lt;br /&gt;
Permet de surpasser les règles de saisie sur les réservations.&lt;br /&gt;
&lt;br /&gt;
===Voir les images des pilotes sur le menu contextuel===&lt;br /&gt;
Permet de [[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-images-des-pilotes-sur-le-menu-contextuel|visualiser images des pilotes associés à chaque réservation sur le menu contextuel]] lorsqu'on survole ou effectue un clic droit sur la réservation.&lt;br /&gt;
&lt;br /&gt;
===Voir les noms sur les réservations, les activités réalisées et la liste des utilisateurs===&lt;br /&gt;
Permet de visualiser les noms des utilisateurs sur la page du planning à la fois pour les réservations et les [[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-activités-réalisées|activités réalisées]].&lt;br /&gt;
&lt;br /&gt;
===Voir les noms d'activités sur les réservations et les activités réalisées===&lt;br /&gt;
Permet d'[[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-noms-d'activités-sur-les-réservations-et-les-activités-réalisées|afficher les noms d'activités sur les réservations et les activités réalisées]].&lt;br /&gt;
&lt;br /&gt;
==Activités==&lt;br /&gt;
&lt;br /&gt;
===Alertable par email pour toute saisie d'activité===&lt;br /&gt;
;Description&lt;br /&gt;
Ce droit permet aux gestionnaires de [[Fiche-personnelle#Recevoir-un-e-mail-pour-les-activités-ayant-les-champs-sélectionnés-non-vide|s'abonner aux notifications par emails dès lors qu'une activité est saisie par un utilisateur en renseignant un champ suivi par le gestionnaire]].&lt;br /&gt;
&lt;br /&gt;
;Cas d'usage&lt;br /&gt;
[[Suivi des remarques de maintenance]].&lt;br /&gt;
&lt;br /&gt;
===Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs===&lt;br /&gt;
Ce droit permet de suivre le renouvellement des validités par les utilisateurs en étant alerté par un [[Envoi-des-emails#E-mail-d'information-des-actions-des-utilisateurs-sur-des-validités|e-mail d'information des actions des utilisateurs sur des validités]] à chaque fois qu'un utilisateur renouvelle une validité sélectionnée dans la liste de la cellule '''Alerté par e-mail pour le renouvellement des types de validités'''. Attention : la mise en place de ce droit peut provoquer la réception de nombreux e-mails.&lt;br /&gt;
&lt;br /&gt;
===Attribution de place===&lt;br /&gt;
Permet d'attribuer les places auxquelles sont autorisées les utilisateurs de ce profil. Cela impacte sur les listes des utilisateurs qui se nttrouve à la saisie d'une réservation ou d'une activité.&lt;br /&gt;
&lt;br /&gt;
Ces listes sont accessibles depuis '''Planning &amp;gt; Planning &amp;gt; Réserver''' et '''Planning &amp;gt; Activités &amp;gt; Saisir'''.&lt;br /&gt;
&lt;br /&gt;
La page '''Admin &amp;gt; Type de ressource &amp;gt; Places''' permet de gérer les places d'un type de ressource. Elle permet également de définir qui a le droit d'être sur telle place en cas de restriction de profil.&lt;br /&gt;
&lt;br /&gt;
===Etre sur une nouvelle fermeture d'activité===&lt;br /&gt;
Permet lors d'une nouvelle fermeture d'activité, que la personne disposant du profil concerné soit autorisée à être sur une des places.&lt;br /&gt;
&lt;br /&gt;
Permet entre autre à une personne tierce, de pouvoir effectuer de nouvelles fermetures d'activité pour une personne disposant du profil concerné et n'ayant pas le droit [[#Saisie-d'activité-pour-soi-même|Saisie d'activité pour soi-même]] ou [[#Saisie-d'activité-pour-un-tiers|Saisie d'activité pour un tiers]].&lt;br /&gt;
&lt;br /&gt;
===Etre sur une nouvelle ouverture d'activité===&lt;br /&gt;
Permet lors d'une nouvelle ouverture d'activité, que la personne disposant du profil concerné soit autorisée à être sur une des places.&lt;br /&gt;
&lt;br /&gt;
Permet entre autre à une personne tierce, de pouvoir effectuer de nouvelles ouvertures d'activité pour une personne disposant du profil concerné et n'ayant pas le droit [[#Saisie-d'activité-pour-soi-même|Saisie d'activité pour soi-même]] ou [[#Saisie-d'activité-pour-un-tiers|Saisie d'activité pour un tiers]].&lt;br /&gt;
&lt;br /&gt;
===Saisie d'activité pour soi-même===&lt;br /&gt;
Autorise la saisie des vols et permet aussi à l'utilisateur de voir son carnet de vols.&lt;br /&gt;
&lt;br /&gt;
Permet également de supprimer ses propres vols depuis son carnet de vol et depuis le [[Carnet-de-route#Modifier-et-supprimer|carnet de route]].&lt;br /&gt;
&lt;br /&gt;
===Saisie d'activité pour un tiers===&lt;br /&gt;
Autorise la saisie des vols pour des tiers et permet de voir les carnets de vols des utilisateurs.&lt;br /&gt;
&lt;br /&gt;
Permet également de supprimer les vols des tiers depuis le carnet de vol d'un utilisateur et depuis le [[Carnet-de-route#Modifier-et-supprimer|carnet de route]].&lt;br /&gt;
&lt;br /&gt;
===Vérifier la saisie des activités et les modifier===&lt;br /&gt;
Permet de voir les carnets de vols des utilisateurs et de pointer les vols (vérification qui entérine un vol et qui rend ainsi sa modification ou suppression impossible), permet ainsi de voir les &amp;quot;vols oubliés&amp;quot; aussi (trous dans les horamètres).&lt;br /&gt;
&lt;br /&gt;
===Voir les activités de tous===&lt;br /&gt;
Permet :&lt;br /&gt;
*d'accéder au [[Carnet-de-route|carnet de route]] de chaque ressource aéronef&lt;br /&gt;
*de [[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-activités-réalisées|voir les activités réalisées sur le planning]] si le paramètre [[Configuration-des-réservations-internes#Affichage-possible-des-activités-réalisées-dans-le-planning|Affichage possible des activités réalisées dans le planning]] est activé&lt;br /&gt;
&lt;br /&gt;
===Voir ses activités===&lt;br /&gt;
Autorise l'utilisateur à voir son carnet de vol.&lt;br /&gt;
&lt;br /&gt;
===Visualiser les traces de vol===&lt;br /&gt;
Permet de [[Interfaçage-OpenFlyers-et-Charterware#Récupération-des-traces-de-vols|visualiser les traces d'un vol]].&lt;br /&gt;
&lt;br /&gt;
==Formations==&lt;br /&gt;
===Voir les suivis de formations===&lt;br /&gt;
Autorise l'utilisateur à [[Gestion-des-activités#Consulter-le-suivi-de-formation|voir les suivis de formations]] de tous les utilisateurs.&lt;br /&gt;
&lt;br /&gt;
===Gestion des formations===&lt;br /&gt;
Ce droit permet la [[Gestion-des-formations|gestion des formations]].&lt;br /&gt;
&lt;br /&gt;
==Comptes==&lt;br /&gt;
&lt;br /&gt;
===Gestion des comptes===&lt;br /&gt;
Couplé à d'autres droits, permet de créer et modifier les intitulés des comptes (boutiques, espèces, etc.) ainsi que d'accéder à la comptabilité.&lt;br /&gt;
&lt;br /&gt;
Permet lors de la [[Gestion-de-la-comptabilité-côté-utilisateur#Extrait-de-compte|visualisation des écritures]] d'un compte :&lt;br /&gt;
*de pouvoir consulter les écritures des comptes affectés&lt;br /&gt;
*[[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-une-facture-client-ou-un-reçu-d'encaissement|de pouvoir consulter une facture client ou un reçu]]&lt;br /&gt;
*de pouvoir [[Utilisation-de-la-comptabilité#Contrepasser-une-écriture|contrepasser les écritures]]&lt;br /&gt;
*de pouvoir [[Utilisation-de-la-comptabilité#Lettrer-des-écritures-comptables|lettrer les écritures]]&lt;br /&gt;
&lt;br /&gt;
Permet [[Utilisation-de-la-comptabilité#Importer-un-relevé-bancaire|d'importer des relevés bancaires]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ce droit inclut les droits '''Paramétrage des types d'encaissements''' et '''Voir les comptes'''.&lt;br /&gt;
&lt;br /&gt;
===Voir les comptes===&lt;br /&gt;
[[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-son-compte-ou-celui-d'un-tiers|Permet de voir tous les comptes]], de [[Gestion-de-la-comptabilité-côté-utilisateur#Extrait-de-compte|visualiser la liste des mouvements]] et de [[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-une-facture-client-ou-un-reçu-d'encaissement|consulter les factures clients et les reçus]].&lt;br /&gt;
&lt;br /&gt;
Couplé au droit [[#Saisir-les-encaissements-pour-les-tiers|Saisir les encaissements pour les tiers]], il permet de saisir un encaissement sur tous comptes. Ce droit inclut les privilèges du droit [[#Voir-les-comptes-utilisateurs|Voir les comptes utilisateurs]].&lt;br /&gt;
&lt;br /&gt;
===Voir les comptes utilisateurs===&lt;br /&gt;
[[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-son-compte-ou-celui-d'un-tiers|Permet de voir tous les comptes utilisateurs]] et de [[Gestion-de-la-comptabilité-côté-utilisateur#Consulter-une-facture-client-ou-un-reçu-d'encaissement|consulter les factures clients et les reçus]].&lt;br /&gt;
&lt;br /&gt;
Couplé au droit [[#Saisir-les-encaissements-pour-les-tiers|Saisir les encaissements pour les tiers]], il permet de saisir un encaissement sur les comptes utilisateurs.&lt;br /&gt;
&lt;br /&gt;
===Gestion des comptabilités===&lt;br /&gt;
&lt;br /&gt;
permet la gestion des comptabilités&lt;br /&gt;
&lt;br /&gt;
===Paramétrage des types d'encaissements===&lt;br /&gt;
Permet le [[Configuration-de-la-comptabilité#Types-d'encaissements|paramétrage des types d'encaissements]].&lt;br /&gt;
&lt;br /&gt;
===Encaisser ses paiements===&lt;br /&gt;
&lt;br /&gt;
Permet à l'utilisateur de [[FAQ-comptabilité#Comment-autoriser-un-profil-utilisateur-à-saisir-des-encaissements-pour-lui-même-?|saisir ses propres paiements]], de les modifier ou de les supprimer tant qu'ils n'ont pas été validés. L'utilisateur ne peut pas saisir les types d'encaissements qui sont ''Accessible uniquement aux personnes autorisées à saisir pour les tiers''.&lt;br /&gt;
&lt;br /&gt;
===Saisir les encaissements pour les tiers===&lt;br /&gt;
&lt;br /&gt;
Permet à l'utilisateur de saisir, modifier ou supprimer, tant qu'ils n'ont pas été validés, les encaissements d'autres utilisateurs ainsi que les encaissements devant être affectés sur des [[Configuration de la comptabilité#Créer_un_compte_comptable|comptes comptables clients autorisés à recevoir de l'argent]].&lt;br /&gt;
&lt;br /&gt;
===Modifier la date d'un encaissement, d'un flux ou d'un transfert===&lt;br /&gt;
&lt;br /&gt;
autorise la modification de la date d'un encaissement, d'un flux ou d'un transfert s'il peut être modifié&lt;br /&gt;
&lt;br /&gt;
===Valider les encaissements===&lt;br /&gt;
&lt;br /&gt;
pointage des paiements saisis par les pilotes par exemple (Modification ultérieure de cette saisie impossible, en cas de problème il faudra alors faire l'opération inverse). Permet également la suppression d'encaissement.&lt;br /&gt;
&lt;br /&gt;
===Recevoir de l'argent===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur d'être sur la liste des paiements remis. Voir la [[Configuration-de-la-comptabilité#Types-d'encaissements|configuration de la ventilation des types d'encaissements]].&lt;br /&gt;
&lt;br /&gt;
===Transfert de son compte===&lt;br /&gt;
Permet le transfert de compte à compte depuis la page '''Planning &amp;gt; Comptes &amp;gt; Actions &amp;gt; Transférer'''.&lt;br /&gt;
&lt;br /&gt;
Les transferts effectués avec ce seul droit (sans le droit [[#Transfert-de-son-compte-sans-validation|Transfert de son compte sans validation]]) depuis cette page sont validés automatiquement.&lt;br /&gt;
&lt;br /&gt;
===Transfert de son compte sans validation===&lt;br /&gt;
Permet lors d'un transfert de compte à compte, que les flux générés ne soient pas automatiquement validés. Ce droit n'a d'effet que si le droit [[#Transfert-de-son-compte|Transfert de son compte]] est affecté au profil.&lt;br /&gt;
&lt;br /&gt;
'''Conseil OpenFlyers :''' Ce droit a été créé à la demande de clients OpenFlyers. Néanmoins, nous en déconseillons son usage. En effet, avec ce droit, un utilisateur qui &amp;quot;donne&amp;quot; de l'argent à un autre utilisateur peut ensuite reprendre sa donation. Or comme le dit l'expression : &amp;quot;[https://fr.wiktionary.org/wiki/donner_c%E2%80%99est_donner,_reprendre_c%E2%80%99est_voler Donner c'est donner, reprendre c'est voler]&amp;quot;. L'attribution du seul droit [[#Transfert-de-son-compte|Transfert de son compte]] permet un comportement conforme aux fonctionnalités présentes sur les applications bancaires, à savoir que lorsqu'on effectue un virement ce virement est définitif. Si un utilisateur se trompe dans son virement, alors il faut qu'il demande soit à la personne à qui il a donné de lui rendre le trop-perçu, soit à un gestionnaire de la structure pour qu'elle saisisse une écriture corrective. L'intérêt de procéder ainsi est qu'on conserve visuellement et directement sur les comptes la trace des opérations effectuées.&lt;br /&gt;
&lt;br /&gt;
===Saisir tout flux===&lt;br /&gt;
Permet de :&lt;br /&gt;
*[[Utilisation-de-la-comptabilité#Saisir-un-flux|saisir des flux]] depuis '''Gestion &amp;gt; Comptes &amp;gt; Flux &amp;gt; Saisir'''&lt;br /&gt;
*de modifier/supprimer des flux non validés&lt;br /&gt;
*de consulter la liste des flux depuis '''Gestion &amp;gt; Comptes &amp;gt; Flux &amp;gt; Valider'''&lt;br /&gt;
*de [[Gestion-de-la-comptabilité-côté-utilisateur#Extrait-de-compte|visualiser la liste des mouvements]]&lt;br /&gt;
*d'[[Utilisation-de-la-comptabilité#Importer-un-relevé-bancaire|importer des relevés bancaires]]&lt;br /&gt;
&lt;br /&gt;
===Valider tout flux===&lt;br /&gt;
Permet de valider les flux de la page '''Gestion &amp;gt; Comptes &amp;gt; Flux &amp;gt; Valider'''.&lt;br /&gt;
&lt;br /&gt;
Ce droit n'a effet que si le droit [[#Saisir-tout-flux|Saisir tout flux]] est affecté au profil.&lt;br /&gt;
&lt;br /&gt;
===Paramétrage de la facturation===&lt;br /&gt;
Permet de gérer les règles de [[Facturation-des-clients#Facturation-des-activités|facturation des activités]] et de [[Facturation-des-clients#Facturation-périodique|facturation périodique]].&lt;br /&gt;
&lt;br /&gt;
===Saisie des valeurs de facturation===&lt;br /&gt;
&lt;br /&gt;
Permet de gérer les variables et leurs valeurs destinés aux règles de facturation&lt;br /&gt;
&lt;br /&gt;
===Compte sur lequel un utilisateur peut agir===&lt;br /&gt;
&lt;br /&gt;
Permet de définir sur quel compte utilisateur un encaissement ou un transfert peut être réalisé par la personne connectée. Attention : ce droit est pour l'utilisateur connecté et non pas pour l'utilisateur concerné par l'encaissement ou le transfert.&lt;br /&gt;
&lt;br /&gt;
===Surpasser la limitation du solde du compte===&lt;br /&gt;
Permet à un utilisateur disposant de ce droit dans l'un de ses profils de ne pas avoir de [[Connexion#Restriction-d'accès|restriction d'accès]], de saisie de réservation ou de saisie de vol lorsque [[Configuration de la comptabilité#Restriction_d'accès_en_cas_de_solde_insuffisant|une restriction sur les soldes]] est en place. Il aura juste une alerte à la connexion. Ce droit ne permet pas à l'utilisateur concerné X de pouvoir surpasser les restrictions d'un autre utilisateur Y en effectuant par exemple une réservation en son nom alors que Y n'a ni le droit de surpasser ni le solde suffisant.&lt;br /&gt;
&lt;br /&gt;
[[Connexion#Restriction-d'accès-pour-un-administrateur-référent|Ce droit peut être attribué de façon dynamique à la connexion]] par un [[Configuration#Administrateur-référent|administrateur référent]].&lt;br /&gt;
&lt;br /&gt;
===Surpasser le seuil de [[Gestion-de-la-comptabilité-côté-utilisateur#Transférer-de-l'argent|transfert de compte]]===&lt;br /&gt;
&lt;br /&gt;
Permet à un utilisateur disposant de ce droit dans l'un de ses profils de ne pas être bloqué lorsque une [[Configuration-de-la-comptabilité#Paramétrage-général-des-comptabilités|restriction sur les soldes]] est en place et qu'il ne dispose pas d'un solde suffisant.&lt;br /&gt;
&lt;br /&gt;
==Ventes==&lt;br /&gt;
&lt;br /&gt;
===Gestion globale des ventes===&lt;br /&gt;
&lt;br /&gt;
Permet de gérer les produits, la facturation des produits, les stocks et [[Paramétrage-des-validités#Validité-à-vendre|validités à vendre]]. Permet également de modifier/supprimer des achats de produit.&lt;br /&gt;
&lt;br /&gt;
===Achat ventes libres===&lt;br /&gt;
&lt;br /&gt;
Autorise à acheter tous les produits qui sont en vente libre. Permet également de modifier/supprimer des achats de produit.&lt;br /&gt;
&lt;br /&gt;
===Acheter pour les tiers===&lt;br /&gt;
Autorise à effectuer/modifier/supprimer des achats de produit pour un tiers.&lt;br /&gt;
*Couplé au droit [[#Gestion-des-utilisateurs|Gestion des utilisateurs]], il permet de gérer les [[Paramétrage-des-validités#Validité-à-vendre|validités à vendre]] d'un tiers.&lt;br /&gt;
*Couplé au droit [[Gestion-des-profils#Vente-de-produit-sans-tarif|Vente de produit sans tarif]], il permet de vendre des [[Gestion-des-produits-et-des-ventes#Configuration-d'un-produit-non-stocké-sans-tarif-défini|produits sans tarif]].&lt;br /&gt;
&lt;br /&gt;
===Vente de produit sans tarif===&lt;br /&gt;
Autorise à rendre disponible et à acheter des produits sans tarif. Nécessite le droit [[#Acheter-pour-les-tiers|Acheter pour les tiers]].&lt;br /&gt;
&lt;br /&gt;
===Débrayage des ventes de validités===&lt;br /&gt;
&lt;br /&gt;
Autorise à ajouter et modifier la date d'expiration d'une [[Validités#Validité-à-vendre|validité à vendre]] sans débiter le compte.&lt;br /&gt;
&lt;br /&gt;
==Achats==&lt;br /&gt;
&lt;br /&gt;
===Gestion des achats===&lt;br /&gt;
Permet la gestion des factures fournisseurs, à en créer, modifier et supprimer.&lt;br /&gt;
&lt;br /&gt;
==Admin==&lt;br /&gt;
===Gestion du paramétrage===&lt;br /&gt;
Ce droit est nécessaire pour accéder aux pages permettant de [[Paramétrage|paramétrer la plateforme]] et fait apparaitre le menu '''Structure''' avec les items :&lt;br /&gt;
*[[Données#Accéder-au-tableau-de-conservation-des-données|'''Admin &amp;gt; Structure &amp;gt; Données &amp;gt; Conservation des données''']]&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Canaux de communications'''&lt;br /&gt;
*[[Configuration#Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Paramétrage|'''Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Paramétrage''']]&lt;br /&gt;
*[[Configuration#Admin-&amp;gt;-Structure-&amp;gt;-Structure-&amp;gt;-Coordonnées|'''Admin &amp;gt; Structure &amp;gt; Structure &amp;gt; Coordonnées''']]&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Définition'''&lt;br /&gt;
*'''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Actualisation'''&lt;br /&gt;
*[[Configuration#Structure-&amp;gt;-Champs-métiers|'''Admin &amp;gt; Structure &amp;gt; Variables &amp;gt; Champs métiers''']]&lt;br /&gt;
*[[Configuration#Structure-&amp;gt;-Export-SQL|'''Admin &amp;gt; Structure &amp;gt; Export SQL &amp;gt; Complet''']]&lt;br /&gt;
*[[Utilisation-de-la-comptabilité#Importer-son-modèle-de-facture|'''Admin &amp;gt; Structure &amp;gt; Imports &amp;gt; Templates ODT''']]&lt;br /&gt;
&lt;br /&gt;
Ce droit fait également apparaitre des items utiles au paramétrage mais présents dans d'autres menus :&lt;br /&gt;
*Couplé au droit [[#Gestion-des-utilisateurs|Gestion des utilisateurs]], dans le menu '''Admin &amp;gt; Utilisateurs''' :&lt;br /&gt;
**[[Champs-métiers|'''Admin &amp;gt; Utilisateurs &amp;gt; Champs métiers''']]&lt;br /&gt;
**'''[[Gestion des statuts|Admin &amp;gt; Utilisateurs &amp;gt; Statuts]]'''&lt;br /&gt;
*[[Gestion-des-types-d'activités|'''Admin &amp;gt; Types d'activités &amp;gt; Actifs''']]&lt;br /&gt;
*[[Champs-métiers|'''Admin &amp;gt; Types d'activités &amp;gt; Champs métiers''']]&lt;br /&gt;
*[[Champs-métiers|'''Ventes &amp;gt; Champs métiers &amp;gt; Champs métiers''']]&lt;br /&gt;
&lt;br /&gt;
===Gestion des valeurs===&lt;br /&gt;
&lt;br /&gt;
===Gestion des profils===&lt;br /&gt;
permet de créer et modifier les profils. Attention, laisser cette autorisation à au moins un profil !&lt;br /&gt;
&lt;br /&gt;
===Gestion des utilisateurs===&lt;br /&gt;
&lt;br /&gt;
Permet de modifier les caractéristiques, infos et photos des utilisateurs, les désactiver et gérer leurs validités qui ne correspondent pas à des [[Paramétrage-des-validités#Validité-à-vendre|validités à vendre]]. Couplé au droit [[#Acheter-pour-les-tiers|Acheter pour les tiers]], il permet de gérer les [[Paramétrage-des-validités#Validité-à-vendre|validités qui sont à vendre]].&lt;br /&gt;
&lt;br /&gt;
===Gestion des ressources===&lt;br /&gt;
Permet la gestion complète des types de ressources et des ressources (créer/supprimer/modifier/associer des validités). Autorise également la gestion de navigabilité des ressources aéronefs et la gestion des statuts.&lt;br /&gt;
&lt;br /&gt;
Permet d'accéder à [[Gestion-des-documents|la liste des documents]] qui sont associés aux ressources et leur gestion (Ajouter, modifier, supprimer). Permet aussi de gérer la liste des catégories de ces documents.&lt;br /&gt;
&lt;br /&gt;
===Gestion des rapports===&lt;br /&gt;
Fait apparaître le menu '''[[Gestion-des-rapports|Gestion &amp;gt; Rapports]]''' avec les items :&lt;br /&gt;
* '''Gestion &amp;gt; Rapports &amp;gt; Rapports personnalisés &amp;gt; Champs métiers'''&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Gestion &amp;gt; Rapports &amp;gt; Rapports personnalisés &amp;gt; Créer/Modifier]]'''&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Gestion &amp;gt; Rapports &amp;gt; Rapports personnalisés &amp;gt; Visualiser]]'''&lt;br /&gt;
* '''Gestion &amp;gt; Rapports &amp;gt; Rapports spécifiques &amp;gt; Activités et coûts'''&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Gestion &amp;gt; Rapports &amp;gt; Bibliothèque]]'''&lt;br /&gt;
&lt;br /&gt;
Fait apparaître la [[Gestion-des-rapports#Case-à-cocher-Mémoriser-ce-choix|case à cocher '''Mémoriser ce choix''']].&lt;br /&gt;
&lt;br /&gt;
Donne également accès à '''Gestion &amp;gt; Comptes &amp;gt; Gestion &amp;gt; Compte de résultat'''.&lt;br /&gt;
&lt;br /&gt;
===Voir tous les rapports===&lt;br /&gt;
Fait apparaître le menu '''Rapports''' avec les items :&lt;br /&gt;
* '''[[Gestion-des-rapports#Configurer-les-rapports-visibles-pour-les-utilisateurs|Rapports personnalisés &amp;gt; Visualiser]]'''&lt;br /&gt;
* '''Rapports spécifiques &amp;gt; Vols et coûts'''&lt;br /&gt;
Cela permet de consulter l'intégralité des rapports, y compris les favoris.&lt;br /&gt;
&lt;br /&gt;
Fait apparaître la [[Gestion-des-rapports#Case-à-cocher-Mémoriser-ce-choix|case à cocher '''Mémoriser ce choix''']].&lt;br /&gt;
&lt;br /&gt;
Donne également accès à '''Gestion &amp;gt; Comptes &amp;gt; Gestion &amp;gt; Compte de résultat'''.&lt;br /&gt;
&lt;br /&gt;
===Gestion des logs===&lt;br /&gt;
Fait apparaître le menu '''Admin &amp;gt; Logs''' avec les items :&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Actions effectuées'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Adresses IP bloquées'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Historique d'une réservation'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Identifiants bloqués'''&lt;br /&gt;
*'''Admin &amp;gt; Logs &amp;gt; Requête utilisateur en attente'''&lt;br /&gt;
&lt;br /&gt;
===Envoyer et suivre les e-mails===&lt;br /&gt;
Permet d'accéder à la page [[Mailing|Mailing]] et de [[Suivi-des-emails|suivre les emails]].&lt;br /&gt;
&lt;br /&gt;
===Accès aux tableurs===&lt;br /&gt;
Permet d'accéder aux fichiers [[Tableurs|tableurs]] depuis le menu.&lt;br /&gt;
&lt;br /&gt;
===Gestion des communications===&lt;br /&gt;
Permet de gérer les flux d'informations et leurs canaux.&lt;br /&gt;
&lt;br /&gt;
==Modules désactivés==&lt;br /&gt;
*Un onglet lié à un module désactivé est affiché uniquement si au moins un droit de son groupe reste actif sur au moins un profil utilisateur.&lt;br /&gt;
*Dans ce cas:&lt;br /&gt;
**L'onglet apparaît avec l'indication '''désactivé'''.&lt;br /&gt;
**Les droits non cochés apparaissent en mode inactif (non modifiables), empêchant toute nouvelle attribution.&lt;br /&gt;
**Les droits déjà attribués (cases cochées) restent visibles.&lt;br /&gt;
*Si aucun droit du groupe n'est actif, l'onglet correspondant n'est plus affiché.&lt;br /&gt;
&lt;br /&gt;
=Profils Plus=&lt;br /&gt;
*'''Admin &amp;gt; Utilisateurs &amp;gt; Profils plus'''&lt;br /&gt;
&lt;br /&gt;
==Ajouter un profil depuis Profils plus==&lt;br /&gt;
*Cliquer sur une cellule contenant le caractère '''+'''&lt;br /&gt;
*remplissez la cellule puis appuyer sur la touche &amp;quot;Entrée&amp;quot;&lt;br /&gt;
*pour valider cliquer sur la disquette à gauche dans la colonne &amp;quot;Actions&amp;quot;&lt;br /&gt;
*le nouveau profil est placé à la fin du tableau&lt;br /&gt;
&lt;br /&gt;
==Modifier un profil depuis Profils plus==&lt;br /&gt;
*Cliquer sur une cellule du profil à modifier&lt;br /&gt;
*remplissez la cellule puis appuyer sur la touche &amp;quot;Entrée&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Colonnes du tableau Profils Plus==&lt;br /&gt;
===Nom (du profil)===&lt;br /&gt;
Nom du profil&lt;br /&gt;
&lt;br /&gt;
===Type de compte requis===&lt;br /&gt;
Permet de définir les comptes utilisateurs appartenant aux types sélectionnés qui seront créés pour les nouveaux utilisateurs ou ajoutés aux utilisateurs existants à qui on attribuera ce profil&lt;br /&gt;
&lt;br /&gt;
===Champ métier visible par le profil sur le formulaire utilisateur ou sur le planning===&lt;br /&gt;
Permet d'afficher ou de cacher les [[Champs-métiers|champs métiers]] des formulaires présents dans :&lt;br /&gt;
*'''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle'''&lt;br /&gt;
*'''Gestion &amp;gt; Utilisateurs &amp;gt; Utilisateurs &amp;gt; Actifs'''&lt;br /&gt;
*'''Planning &amp;gt; Planning &amp;gt; Réserver'''&lt;br /&gt;
&lt;br /&gt;
===Type de validité que l'utilisateur peut gérer pour lui-même===&lt;br /&gt;
Permet de sélectionner les types de validités qu'un utilisateur de ce profil peut [[Validités#Consulter-et-gérer-ses-validités-ou-celles-d'un-tiers|ajouter/acheter/mettre/supprimer]] (ex: Licence fédérale, Visite Médicale, Autres licences) pour lui-même. Les validités d'un utilisateur sont accessibles depuis '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Validités'''.&lt;br /&gt;
&lt;br /&gt;
[[Paramétrage-des-validités#Profils-autorisés-à-gérer-pour-eux-mêmes|Lors de l'ajout d'un type de validité, celui-ci est automatiquement affecté aux profils]].&lt;br /&gt;
&lt;br /&gt;
===Types de validités que l'utilisateur peut gérer et certifier===&lt;br /&gt;
Permet de sélectionner les types de validités qu'un utilisateur de ce profil peut gérer et certifier.&lt;br /&gt;
&lt;br /&gt;
[[Paramétrage-des-validités#Profils-autorisés-à-gérer/certifier-pour-les-autres|Lors de l'ajout d'un type de validité, celui-ci est automatiquement affecté aux profils]].&lt;br /&gt;
&lt;br /&gt;
Tous les utilisateurs détenant un profil pouvant certifier un type de validité coché recevront un [[Envoi-des-emails#E-mail-de-demande-de-certification-de-validité|e-mail]] lorsqu'une validité d'un des types choisis sera ajoutée par un utilisateur et [[Validités#Validités-en-attente-de-certification|en attente de certification]].&lt;br /&gt;
&lt;br /&gt;
'''NB''': Pour que la notification soit effective, il faut également que l'utilisateur ait coché l'option '''[[Fiche-personnelle#Recevoir-un-e-mail-pour-chaque-validité-en-attente-de-certification|Recevoir un e-mail pour chaque validité en attente de certification]]''' dans [[Fiche-personnelle#Notifications|sa fiche personnelle (onglet ''Notifications'')]].&lt;br /&gt;
&lt;br /&gt;
===Contrats non requis===&lt;br /&gt;
Voir la définition de [[Paramétrage-des-validités#Validité-contrat|validité-contrat]].&lt;br /&gt;
&lt;br /&gt;
Permet de [[Gestion-des-profils#Modifier-un-profil-depuis-Profils-plus|définir]] les [[Paramétrage-des-validités#Validité-contrat|validités-contrats]] qui ne sont pas requises pour certains profils.&lt;br /&gt;
&lt;br /&gt;
Les utilisateurs ne disposant que de profils exemptés, ne se verront pas demandés la signature des validités-contrats à la connexion. Tous les autres utilisateurs doivent signer chacun des contrats s'ils disposent d'au moins un profil non-exempté ou si la validité-contrat est requise pour tous les profils.&lt;br /&gt;
&lt;br /&gt;
La signature des validités-contrats, se fait juste après l'identification à la connexion. Le formulaire apparait tant qu'il reste au moins un contrat non-signé. L'utilisateur ne peut passer outre ce processus.&lt;br /&gt;
&lt;br /&gt;
===Attribution de place===&lt;br /&gt;
Permet d'attribuer les places auxquelles sont autorisées les utilisateurs de ce profil. Cela impacte sur les listes des utilisateurs que l'on trouve à la saisie d'une réservation ou d'un vol.&lt;br /&gt;
&lt;br /&gt;
Ces listes sont accessibles depuis '''Planning &amp;gt; Planning &amp;gt; Réserver''' et '''Planning &amp;gt; Activités &amp;gt; Saisir une activités'''.&lt;br /&gt;
&lt;br /&gt;
La page '''Admin &amp;gt; Type de ressource &amp;gt; Places''' permet de gérer les places d'un type de ressource. Elle permet également de définir qui a le droit d'être sur telle place en cas de restriction de profil.&lt;br /&gt;
&lt;br /&gt;
===Profils visibles===&lt;br /&gt;
Dans les pages '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle''', '''Gestion &amp;gt; Utilisateurs &amp;gt; Actifs''' et '''Admin &amp;gt; Utilisateurs &amp;gt; Paramètres par défaut''', on peut sélectionner les utilisateurs auxquels on souhaite voir leur planning.&lt;br /&gt;
&lt;br /&gt;
La liste des utilisateurs affichés sont ceux possédant un profil ayant les droits [[#Planning-personnel|Planning personnel]] et [[#Planning-individuel-visible-pour-les-autres|Planning individuel visible pour les autres]]. La colonne '''Profils visibles''' permet de restreindre la liste de ces utilisateurs pour ne la limiter qu'aux utilisateurs possédant les profils sélectionnés.&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' Il faut attribuer à un profil au moins une place de 1ère rang (numéro de place 0).&lt;br /&gt;
&lt;br /&gt;
===Types de ressources visibles===&lt;br /&gt;
Dans les pages '''Planning &amp;gt; Données &amp;gt; Personnelles &amp;gt; Affichage et fiche personnelle''', '''Gestion &amp;gt; Utilisateurs &amp;gt; Actifs''' et '''Admin &amp;gt; Utilisateurs &amp;gt; Paramètres par défaut''', on peut sélectionner les ressources dont on souhaite voir le [[Utilisation-des-réservations-internes-sur-l%27appli-mobile|planning]] ou les rendre disponibles dans les formulaires de saisie de réservation et d'activité.&lt;br /&gt;
&lt;br /&gt;
La colonne '''Types de ressources visibles''' permet de restreindre la liste de ces ressources pour ne la limiter qu'aux ressources appartenant aux types de ressources sélectionnés.&lt;br /&gt;
&lt;br /&gt;
===Comptabilités visibles===&lt;br /&gt;
Permet de sélectionner les comptabilités qui sont visibles pour un profil. De plus, les types de compte et les comptes n'étant pas d'une comptabilité sélectionnée ne seront pas visibles.&lt;br /&gt;
&lt;br /&gt;
===Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs===&lt;br /&gt;
Ce droit permet de suivre le renouvellement des validités par les utilisateurs en étant alerté par e-mail à chaque fois qu'un utilisateur renouvelle une validité sélectionnée dans la liste de la cellule '''Alerté par e-mail pour le renouvellement des validités de tous les utilisateurs'''. Attention : la mise en place de ce droit peut provoquer la réception de nombreux e-mails.&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==[[Connexion#Choix_du_profil|Choix du profil à la connexion]]==&lt;br /&gt;
&lt;br /&gt;
==Ajouter un profil==&lt;br /&gt;
&lt;br /&gt;
Depuis l'interface dynamique :&lt;br /&gt;
*Cliquer sur l'icône de menu correspondant à la gestion des profils&lt;br /&gt;
*Ajouter une ligne&lt;br /&gt;
*Compléter les cellules&lt;br /&gt;
*L'ajout est enregistré si les cellules suivantes sont correctement remplies :&lt;br /&gt;
**'''Nom du profil''' : la cellule doit être remplie et le nom ne pas avoir déjà été utilisé comme nom de profil.&lt;br /&gt;
&lt;br /&gt;
Depuis l'interface légère :&lt;br /&gt;
*Aller sur '''Admin &amp;gt; Utilisateurs &amp;gt; Profils'''&lt;br /&gt;
*En-dessous du tableau listant les profils, cliquer sur le bouton '''AJOUTER UN PROFIL'''&lt;br /&gt;
*Renseigner les droits pour chaque onglet&lt;br /&gt;
*Aller sur '''Admin &amp;gt; Utilisateurs &amp;gt; Profils plus'''&lt;br /&gt;
*Renseigner les colonnes pour la ligne du profil nouvellement créé&lt;br /&gt;
&lt;br /&gt;
===Ajouter un profil qui surpasse la restriction en cas de solde insuffisant===&lt;br /&gt;
*Procéder à l'ajout de ligne dans un tableau.&lt;br /&gt;
*Saisir par exemple comme nom '''Non restreignable'''.&lt;br /&gt;
*Toujours dans '''Admin &amp;gt; Utilisateurs &amp;gt; Profils''', onglet '''Généralités''', cocher pour ce profil le droit [[Gestion des profils#Généralités|Profil non sélectionnable par l'utilisateur]].&lt;br /&gt;
*Dans l'onglet '''Gestion des comptes''', sélectionner le droit [[#Surpasser-la-limitation-du-solde-du-compte|Surpasser la limitation du solde du compte]] pour le profil concerné&lt;br /&gt;
Il suffit ensuite de rajouter ce profil aux utilisateurs concernés.&lt;br /&gt;
&lt;br /&gt;
=Créer un profil empêchant tout surpassement=&lt;br /&gt;
Il peut être nécessaire d'empêcher un utilisateur de pouvoir réserver ou saisir une activité même en recourant à l'aide d'un tiers qui disposerait de droits permettant de surpasser des restrictions, que cela soit sur des comptes ou sur des validités.&lt;br /&gt;
&lt;br /&gt;
Cela peut être le cas, par exemple, pour la détention d'une validité ''Cotisation'' périmée ou lorsque le solde du compte utilisateur est insuffisant (cf. [[Configuration-de-la-comptabilité#Restriction-d'accès-en-cas-de-solde-insuffisant|Restriction d'accès en cas de solde insuffisant]]).&lt;br /&gt;
&lt;br /&gt;
Pour mettre en place une telle restriction, il faut :&lt;br /&gt;
*[[Gestion-des-profils#Ajouter-un-profil|Ajouter un profil]] en lui attribuant l'ensemble des droits (ne pas oublier la page '''Admin &amp;gt; Utilisateurs &amp;gt; Profils plus'''&lt;br /&gt;
*[[Gestion-des-profils#Modifier-un-profil|Modifier le profil]] nouvellement créé&lt;br /&gt;
**Si l'utilisateur ne doit pas pouvoir ouvrir un vol : dans l'onglet [[Gestion-des-profils#Activités|Activités]], décocher le droit [[Gestion-des-profils#Etre-sur-une-nouvelle-ouverture-d'activité|Etre sur une nouvelle ouverture d'activité]]&lt;br /&gt;
**Si l'utilisateur ne doit pas pouvoir être sur une réservation : dans l'onglet [[Gestion-des-profils#Réservation|Réservation]], décocher les droits [[Gestion-des-profils#Etre-sur-une-nouvelle-réservation|Etre sur une nouvelle réservation]], [[Gestion-des-profils#Réservation-solo|Réservation solo]] et [[Gestion-des-profils#Réservation-avec-un-instructeur|Réservation avec un instructeur]]&lt;br /&gt;
&lt;br /&gt;
==Droits particuliers==&lt;br /&gt;
*'''GÉNÉRALITÉS / Profil non sélectionnable par l'utilisateur :''' ce droit n'est applicable que si les [[Gestion des utilisateurs|utilisateurs disposant du profil concerné]] possèdent au moins un autre [[Connexion#Sélection_du_profil|profil sélectionnable à la connexion]].&lt;br /&gt;
*'''GÉNÉRALITÉS ADMIN / Gestion des profils :''' au moins un profil doit posséder ce droit.&lt;br /&gt;
&lt;br /&gt;
==Modifier un profil==&lt;br /&gt;
La modification des profils s'effectue selon les règles d'[[Utilisation des tableaux#Édition_des_données#|édition des données d'un tableau]].&lt;br /&gt;
&lt;br /&gt;
==Supprimer un profil==&lt;br /&gt;
*La suppression d'un profil est possible uniquement si les [[Gestion des utilisateurs|utilisateurs disposant de ce profil]] possèdent aussi au moins un autre profil.&lt;br /&gt;
*Procéder à la suppression de ligne dans un tableau.&lt;br /&gt;
&lt;br /&gt;
==Valeurs par défaut lors de la création d'un profil==&lt;br /&gt;
Lors de la création d'un profil, on affecte automatiquement par défaut :&lt;br /&gt;
* Tous les '''Profils visibles'''&lt;br /&gt;
* Tous les '''Types de ressources visibles'''&lt;br /&gt;
* Toutes les '''Comptabilités visibles'''&lt;br /&gt;
* Les '''Attribution de place''' correspondants à la première place de chaque type de ressource&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=Configuration-des-r%C3%A9servations-internes&amp;diff=14365</id>
		<title>Configuration des réservations internes</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=Configuration-des-r%C3%A9servations-internes&amp;diff=14365"/>
		<updated>2026-03-16T15:29:22Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: /* Général */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
Cette page présente le paramétrage du module de réservations interne.&lt;br /&gt;
&lt;br /&gt;
=Général=&lt;br /&gt;
La gestion du planning se fait en allant dans '''Admin &amp;gt; Structure &amp;gt; Paramétrage &amp;gt; Réservations internes''' :&lt;br /&gt;
[[File:015 parametrage gestion reservation.png|center|1500x1500px|gestion des réservations]]&lt;br /&gt;
&lt;br /&gt;
==Mode de réservation==&lt;br /&gt;
===Réservations standards===&lt;br /&gt;
Cette option permet de faire des réservations classiques, c'est-à-dire que l'on réserve directement une ressource en fonction de son nom (exemple : son immatriculation), cela ne diffère en rien des réservations &amp;quot;papier&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'une ressource réservée en mode standard est immobilisée, les réservations existantes sur cette ressource sont supprimées.&lt;br /&gt;
&lt;br /&gt;
L'utilisateur est averti avant la confirmation de l'opération.&lt;br /&gt;
&lt;br /&gt;
===Réservation par type de ressource===&lt;br /&gt;
La réservation par type permet non pas de choisir une ressource particulière mais un type de ressource. Dans les structures aéronautiques possédant plusieurs aéronefs d'une même famille (plusieurs DR400/120 par exemple) on choisit alors de réserver un DR400/120 parmi ceux de la flotte. Le programme choisira l'immatriculation en fonction de la disponibilité des appareils (entretien mécanique par exemple).&lt;br /&gt;
&lt;br /&gt;
La réservation par type comporte un double intérêt :&lt;br /&gt;
*pouvoir donner la priorité à une ressource par rapport à une autre et ainsi pousser telle ou telle ressource à être plus utilisée en fonction des souhaits de programmation (pour les opérations de maintenance par exemple) ;&lt;br /&gt;
*créer une ressource fictive supplémentaire pour mettre en place le surbooking.&lt;br /&gt;
&lt;br /&gt;
Si des ressources de même type sont indisponibles, que ce soit parce qu'elles sont réservées ou immobilisées, alors c'est la 1ère ressource disponible qui est choisie par OpenFlyers.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'une ressource réservée par type est immobilisée, les réservations ne sont pas supprimées. Elles sont automatiquement déplacées vers la prochaine ressource disponible du même type, selon l'ordre de priorité défini.&lt;br /&gt;
Si aucune autre ressource du même type n'est disponible, la réservation concernée est supprimée.&lt;br /&gt;
&lt;br /&gt;
Il est possible de modifier l'ordre de tri des ressources à n'importe quel moment.&lt;br /&gt;
&lt;br /&gt;
De même, pour les utilisateurs disposant du droit [[Gestion-des-profils#Surpasser-la-réservation-par-type|Surpasser la réservation par type]], il est possible de forcer une réservation sur une ressource donnée en cochant la case '''Ne pas changer de ressource'''.&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' dans le cas où la structure exploite plusieurs ressources d'un même type mais qu'elle souhaite séparer la gestion des réservations pour chaque ressource, il faut créer autant de type de ressource que de ressources. Exemple : une structure aéronautique dispose de 2 avions de type DR420. Si les 2 avions sont identifiés avec un même type &amp;quot;DR420&amp;quot; alors les réservations seront faite toujours en priorité sur le DR420 du plus forte priorité. Si ce comportement n'est pas souhaité, il faut créer 2 types (DR420-1 et DR420-2 par exemple) et associer un avion au type DR420-1 et l'autre avion au type DR420-2.&lt;br /&gt;
&lt;br /&gt;
==Code couleur==&lt;br /&gt;
Permet de définir quelle code couleur doit être utilisée pour l'affichage des réservations :&lt;br /&gt;
*Par utilisateur&lt;br /&gt;
:deux champs de sélection s'affichent :&lt;br /&gt;
:*'''Couleur par défaut pour les réservations qui ne concernent pas l'utilisateur'''&lt;br /&gt;
::Il s'agit d'une paire de couleurs [Couleur claire (réservation en solo) / couleur foncée (réservation en instruction)] utilisé pour afficher les réservations qui ne concernent pas l'utilisateur connecté.&lt;br /&gt;
:*'''Couleur par défaut pour les réservations qui concernent l'utilisateur'''&lt;br /&gt;
::Il s'agit d'une paire de couleurs [Couleur claire (réservation en solo) / couleur foncée (réservation en instruction)] utilisé pour afficher les réservations qui concernent l'utilisateur connecté.&lt;br /&gt;
:Il est possible de configurer [[Gestion-des-utilisateurs#Changer-la-couleur-d'affichage-des-réservations-d'un-utilisateur|une paire de couleurs par utilisateur]].&lt;br /&gt;
*[[Gestion-des-types-d'activités#Affecter-une-couleur-à-un-type-d'activité|Par type d'activité]]&lt;br /&gt;
&lt;br /&gt;
==Affichage possible des activités réalisées dans le planning==&lt;br /&gt;
Permet aux utilisateurs disposant du droit [[Gestion-des-profils#Voir-les-activités-de-tous|Voir les activités de tous]] d'activer le module d'[[Utilisation-des-réservations-internes-sur-l%27interface-web#Affichage-des-activités-réalisées|Affichage des activités réalisées]] sur la page de réservation.&lt;br /&gt;
&lt;br /&gt;
==Réservation multi-ressources==&lt;br /&gt;
Cette fonctionnalité permet d'autoriser à un utilisateur de réserver plusieurs ressources sur des créneaux horaires qui se chevauchent.&lt;br /&gt;
&lt;br /&gt;
==Affichage du nom des ressources dans le planning==&lt;br /&gt;
Ce paramétrage permet d'afficher ou cacher le nom des ressources dans le planning. Cela permet de diminuer la taille verticale des lignes du planning et de cacher ces noms lorsqu'ils ne sont pas nécessaires.&lt;br /&gt;
&lt;br /&gt;
==Afficher les alertes non bloquantes lors des glisser-déposer==&lt;br /&gt;
Ce paramétrage permet d'afficher les alertes non bloquantes lors des [[Utilisation-des-réservations-internes-sur-l%27interface-web#Glisser-déposer-des-réservations|glisser-déposer des réservations]] sur le planning.&lt;br /&gt;
&lt;br /&gt;
==Autoriser la suppression partielle d'éléments de réservations== &lt;br /&gt;
Ce paramétrage permet d'afficher l'action '''Annuler cet élément du groupe de réservations''' lorsqu'un groupe de réservations est lié. Il autorise ainsi la suppression individuelle d'un élément au sein d'un groupe de réservations, sans devoir annuler l'ensemble du groupe.&lt;br /&gt;
&lt;br /&gt;
==Amplitude du planning==&lt;br /&gt;
===Heure de début et fin (fuseau X)===&lt;br /&gt;
Permet de définir la plage horaire du planning de réservation dans le fuseau horaire de la structure.&lt;br /&gt;
&lt;br /&gt;
'''Remarque :''' les minutes proposées doivent être des multiples de 15 (00, 15, 30, 45).&lt;br /&gt;
&lt;br /&gt;
=Limitations=&lt;br /&gt;
==Interdire d'effectuer une réservation débutant dans moins de==&lt;br /&gt;
Permet d'empêcher d'effectuer une réservation débutant dans moins de X temps. Cette fonctionnalité est notamment utile en réservation par type lorsque la distribution des ressources réelles par ligne de planning est faite le matin pour la journée. Elle est également utile lorsque la facturation se fait la veille au vu des réservations du lendemain.&lt;br /&gt;
&lt;br /&gt;
==Limitation dans le temps des réservations==&lt;br /&gt;
Permet de limiter dans le temps les réservations.&lt;br /&gt;
&lt;br /&gt;
== Interdire la modification ou la suppression d'une réservation débutant dans moins de ==&lt;br /&gt;
Permet d'empêcher la modification ou la suppression d'une réservation lorsque son heure de début est moins de X temps.&lt;br /&gt;
&lt;br /&gt;
==Limitation du nombre de réservations==&lt;br /&gt;
Permet de limiter le nombre de réservations par utilisateur.&lt;br /&gt;
&lt;br /&gt;
==Durée minimale d'une réservation==&lt;br /&gt;
Permet de définir la durée minimale d'une réservation.&lt;br /&gt;
&lt;br /&gt;
La durée maximale d'une réservation peut se définir pour chaque type de ressource.&lt;br /&gt;
&lt;br /&gt;
==Durée par défaut d'une réservation==&lt;br /&gt;
Permet de définir la durée par défaut.&lt;br /&gt;
&lt;br /&gt;
=Champs visibles=&lt;br /&gt;
Permet de définir les champs visibles dans le formulaire de réservation :&lt;br /&gt;
*Même jour&lt;br /&gt;
*Places à disposition&lt;br /&gt;
*Lieu de départ&lt;br /&gt;
*Lieu d'arrivée&lt;br /&gt;
&lt;br /&gt;
Les lieux cochés sont ainsi définis avec une valeur par défaut lorsqu'un vol est entré à partir d'une réservation.&lt;br /&gt;
&lt;br /&gt;
;Saisie de la destination&lt;br /&gt;
Ce champ n'est disponible que si le champ '''Lieu d'arrivée''' est activé.&lt;br /&gt;
&lt;br /&gt;
Permet de demander à l'utilisateur d'indiquer sa destination et ce en fonction de la durée de sa réservation.&lt;br /&gt;
&lt;br /&gt;
Lorsque le champ '''Lieu d'arrivée''' est désactivé, la valeur enregistrée pour '''Saisie de la destination''' est vidée.&lt;br /&gt;
&lt;br /&gt;
=Alerte sur le potentiel=&lt;br /&gt;
&lt;br /&gt;
Cette section ne s'affiche que lorsque la [[Paramétrage-des-activités#Gestion-des-potentiels|gestion des potentiels]] est activée.&lt;br /&gt;
&lt;br /&gt;
;Alerter sur le potentiel estimé restant&lt;br /&gt;
Lorsqu'il est activé, permet de vérifier le potentiel restant et [[Utilisation-des-réservations-internes-sur-l'interface-web#Potentiel-estimé-restant-insuffisant|déclencher une alerte]] si celui-ci est inférieur au seuil défini lors d'une réservation.&lt;br /&gt;
&lt;br /&gt;
;Réservations débutant dans moins de&lt;br /&gt;
Indique le délai (en jours ou semaines) avant le début des réservations pour laquelle l'alerte sur le potentiel estimé restant doit être déclenchée. Par exemple, '''7 jours''' déclenche l'alerte pour les réservations commençant dans moins d'une semaine.&lt;br /&gt;
&lt;br /&gt;
;Seuil d'alerte&lt;br /&gt;
Définit le niveau minimal de potentiel estimé restant pour lequel l'alerte sera envoyée. Si le potentiel estimé tombe en dessous de ce seuil, une alerte est générée.&lt;br /&gt;
&lt;br /&gt;
==[[Paramétrage-des-validités#Paramétrer-le-contrôle-des-validités-pour-les-activités-ou-les-réservations|Paramétrage général du contrôle des validités pour les réservations]]==&lt;br /&gt;
&lt;br /&gt;
=Sélections par défaut=&lt;br /&gt;
==Type d'activité par défaut==&lt;br /&gt;
Permet de définir le type d'activité à cocher par défaut :&lt;br /&gt;
* lors d'une nouvelle réservation ou lorsqu'on sélectionne une personne en première place sur le [[Utilisation-des-réservations-internes-sur-l%27interface-web#Formulaire-de-réservation|formulaire de réservation de l'ancienne interface]]&lt;br /&gt;
* lors d'une nouvelle réservation sur le [[Utilisation-des-réservations-internes-sur-l%27appli-mobile#Tutoriel-vidéo|planning de la nouvelle interface]]&lt;br /&gt;
&lt;br /&gt;
Pour définir le type :&lt;br /&gt;
* Aller dans '''Admin &amp;gt; Structure &amp;gt; Paramétrage &amp;gt; Planning'''&lt;br /&gt;
* Champ '''Type d'activité par défaut''' : Sélectionner le type d'activité&lt;br /&gt;
* Cliquer sur '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
==Type d'activité par défaut pour la seconde place (ancienne interface)==&lt;br /&gt;
Permet de définir le type d'activité à cocher par défaut lorsqu'on sélectionne une personne en seconde place sur le [[Utilisation-des-réservations-internes-sur-l%27interface-web#Formulaire-de-réservation|formulaire de réservation de l'ancienne interface]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir le type :&lt;br /&gt;
* Aller dans '''Admin &amp;gt; Structure &amp;gt; Paramétrage &amp;gt; Planning'''&lt;br /&gt;
* Champ '''Type d'activité par défaut pour la seconde place (ancienne interface)''' : Sélectionner le type d'activité&lt;br /&gt;
* Cliquer sur '''Enregistrer'''&lt;br /&gt;
&lt;br /&gt;
=Règles de saisies XML=&lt;br /&gt;
Les règles de saisie sont utilisées, pour le moment, uniquement par le moteur de réservation pour construire l'affichage des champs du formulaire de réservation et pour vérifier, après la saisie d'une réservation, que les données saisies respectent bien les règles de saisie.&lt;br /&gt;
&lt;br /&gt;
Elles sont écrites en [[Wikipedia-fr:Extensible_Markup_Language|XML]]. cf. l'exemple de règles de saisie ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Le moteur de vérification des règles s'enclenche dès qu'une réservation n'est plus &amp;quot;nue&amp;quot;, c'est à dire lorsqu'au moins un élément est renseigné (activité, ressource, etc.). Alors il vérifie quelles sont les règles compatibles et en déduit les contenus possibles dans les champs de saisie de l'interface utilisateur.&lt;br /&gt;
&lt;br /&gt;
La compatibilité d'une règle se détermine '''par restriction''' en vérifiant dans cet ordre les informations suivantes :&lt;br /&gt;
#Activités&lt;br /&gt;
#Ressources&lt;br /&gt;
#Profils&lt;br /&gt;
#Places&lt;br /&gt;
&lt;br /&gt;
Pour chaque information, le moteur regarde si elle est renseignée. Si ce n'est pas le cas alors il passe à l'information suivante. Par exemple s'il n'y a pas encore d'activité de saisie alors il ne vérifie pas ce point-là dans la règle.&lt;br /&gt;
&lt;br /&gt;
Pour les activités et les ressources, il regarde les règles qui acceptent celles renseignées. S'il y a des règles qui pose problème alors elles sont rejetées.&lt;br /&gt;
&lt;br /&gt;
Pour les profils ce sont les personnes qui sont étudiées et ce de deux manières différentes selon si sur la saisie il y a une ressource de renseignée ou non.&lt;br /&gt;
*Lorsqu'il y a une ressource de renseignée, le fonctionnement est similaire aux autres informations. le moteur regarde pour toutes les personnes renseignées si sur la place où elles sont, elles ont au moins un profil valide. Si une personne n'a aucun profil pour la place où il est alors la règle est rejetée.&lt;br /&gt;
*Lorsqu'il n'y a pas de ressource le fonctionnement est différent. Au lieu de faire par restriction, le moteur va faire '''par ajout'''. C'est-à-dire qu'au lieu de dire &amp;quot;il ne faut que des pilotes&amp;quot;, il va dire &amp;quot;je veux au moins un pilote&amp;quot;. Pour ce faire il va regarder les profils de chaque personne. S'il trouve une personne avec un profil valide, il accepte la règle. Si aucune des personnes ne correspond, il va faire une seconde vérification au niveau des places. Si pour cette règle l'une des places n'est pas définie, il considère que les personnes présentes vont potentiellement aller sur cette place et il ne rejette pas la règle. Par contre, si toutes les places sont définies et qu'aucune des personnes ne correspond alors la règle est rejetée.&lt;br /&gt;
&lt;br /&gt;
Pour les places, il vérifie qu'il n'y a pas trop de monde. Comme pour les profils il y a deux manières de les étudier en fonction de s'il y a une ressource ou non.&lt;br /&gt;
*Lorsqu'il y a une ressource, il va regarder pour chaque place si le nombre de personnes autorisées n'est pas dépassé. Si sur l'une des places le nombre est dépassé alors la règle est rejetée. Cependant, si le nombre est atteint mais pas dépassé alors la règle n'est pas rejetée.&lt;br /&gt;
*Lorsqu'il n'y a pas de ressource, il va parcourir chaque place pour compter le nombre total de personnes autorisées pour cette règle. Si le nombre est dépassé alors la règle est rejetée. Comme précédemment si le nombre est simplement atteint alors la règle n'est pas rejetée.&lt;br /&gt;
&lt;br /&gt;
Si pour chaque information saisie, la règle est compatible alors elle est conservée.&lt;br /&gt;
&lt;br /&gt;
Pour qu'une saisie soit valide, il faut qu'il existe au moins une règle de conservée, c'est à dire de compatible.&lt;br /&gt;
&lt;br /&gt;
;Exemple de règles de saisie&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;ruleList&amp;gt;&lt;br /&gt;
    &amp;lt;rule&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des activités autorisées et requises --&amp;gt;&lt;br /&gt;
        &amp;lt;activityTypeList needs=&amp;quot;bookAlone&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;activityType&amp;gt;1&amp;lt;/activityType&amp;gt; &amp;lt;!-- Local --&amp;gt;&lt;br /&gt;
        &amp;lt;/activityTypeList&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des ressources autorisées --&amp;gt;&lt;br /&gt;
        &amp;lt;resourceList minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;resourceType&amp;gt;1&amp;lt;/resourceType&amp;gt; &amp;lt;!-- F-001 --&amp;gt;&lt;br /&gt;
            &amp;lt;resourceType&amp;gt;2&amp;lt;/resourceType&amp;gt; &amp;lt;!-- F-002 --&amp;gt;&lt;br /&gt;
        &amp;lt;/resourceList&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Définition des places --&amp;gt;&lt;br /&gt;
        &amp;lt;placeList&amp;gt;&lt;br /&gt;
            &amp;lt;place index=&amp;quot;0&amp;quot;  minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot; status=&amp;quot;1&amp;quot; needs=&amp;quot;bookAnyone&amp;quot;&amp;gt; &amp;lt;!-- Pilote --&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Liste des profils autorisés --&amp;gt;&lt;br /&gt;
                &amp;lt;profile&amp;gt;2&amp;lt;/profile&amp;gt; &amp;lt;!-- Pilote --&amp;gt;&lt;br /&gt;
            &amp;lt;/place&amp;gt;&lt;br /&gt;
        &amp;lt;/placeList&amp;gt;&lt;br /&gt;
    &amp;lt;/rule&amp;gt;&lt;br /&gt;
    &amp;lt;rule&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des activités autorisées et requises --&amp;gt;&lt;br /&gt;
        &amp;lt;activityTypeList needs=&amp;quot;*(bookAlone)(bookWithInstr)&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;activityType&amp;gt;1&amp;lt;/activityType&amp;gt; &amp;lt;!-- Local --&amp;gt;&lt;br /&gt;
            &amp;lt;activityType&amp;gt;2&amp;lt;/activityType&amp;gt; &amp;lt;!-- Instruction --&amp;gt;&lt;br /&gt;
        &amp;lt;/activityTypeList&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des ressources autorisées --&amp;gt;&lt;br /&gt;
        &amp;lt;resourceList minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;resourceType&amp;gt;*&amp;lt;/resourceType&amp;gt; &amp;lt;!-- F-001, F-002, F-00X --&amp;gt;&lt;br /&gt;
        &amp;lt;/resourceList&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Définition des places --&amp;gt;&lt;br /&gt;
        &amp;lt;placeList&amp;gt;&lt;br /&gt;
            &amp;lt;place index=&amp;quot;0&amp;quot;  minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot; status=&amp;quot;1&amp;quot;&amp;gt; &amp;lt;!-- Pilote--&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Liste des profils autorisés --&amp;gt;&lt;br /&gt;
                &amp;lt;profile&amp;gt;1&amp;lt;/profile&amp;gt; &amp;lt;!-- Elève --&amp;gt;&lt;br /&gt;
                &amp;lt;profile&amp;gt;2&amp;lt;/profile&amp;gt; &amp;lt;!-- Pilote --&amp;gt;&lt;br /&gt;
            &amp;lt;/place&amp;gt;&lt;br /&gt;
            &amp;lt;place index=&amp;quot;1&amp;quot; minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot; status=&amp;quot;2&amp;quot;&amp;gt; &amp;lt;!-- Instructeur --&amp;gt;&lt;br /&gt;
                &amp;lt;!-- Liste des profils autorisés --&amp;gt;&lt;br /&gt;
                &amp;lt;profile&amp;gt;4&amp;lt;/profile&amp;gt; &amp;lt;!-- Instructeur --&amp;gt;&lt;br /&gt;
            &amp;lt;/place&amp;gt;&lt;br /&gt;
        &amp;lt;/placeList&amp;gt;&lt;br /&gt;
    &amp;lt;/rule&amp;gt;&lt;br /&gt;
    &amp;lt;rule&amp;gt;...&amp;lt;/rule&amp;gt;&lt;br /&gt;
&amp;lt;/ruleList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==attribut needs==&lt;br /&gt;
L'attribut needs peut être utilisé pour les éléments :&lt;br /&gt;
*activityTypeList&lt;br /&gt;
*place&lt;br /&gt;
&lt;br /&gt;
Il contient un ou plusieurs droits qui sont requis par l'utilisateur effectuant la saisie pour que la règle puisse s'appliquer.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il n'y a qu'un droit de requis, il faut écrire ''needs=&amp;quot;nomDuDroit&amp;quot;''.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'il y a plusieurs droits possibles, un seul étant requis, il faut commencer par le signe * puis lister chaque droit en l'entourant de parenthèses : ''needs=&amp;quot;*(bookAlone)(bookWithInstr)''.&lt;br /&gt;
&lt;br /&gt;
==Capacité maximale autorisée==&lt;br /&gt;
La taille maximale autorisée pour les règles de saisie XML est de '''16 Mo'''.  &lt;br /&gt;
Lors de la création d'un type d'activité ou lors de la modification manuelle depuis '''Admin &amp;gt; Structure &amp;gt; Paramétrage &amp;gt; Réservations internes''',  si la taille des règles de saisie XML dépasse cette limite, un message d'alerte s'affiche indiquant que les règles de saisie XML sont saturées.&lt;br /&gt;
&lt;br /&gt;
Pour résoudre ce problème, il est conseillé de vérifier le contenu XML et d'identifier d'éventuelles données obsolètes afin de les supprimer et d'alléger le fichier.  &lt;br /&gt;
Si cela ne suffit pas, il est recommandé de contacter OpenFlyers pour discuter de la possibilité d'augmenter la taille du champ.&lt;br /&gt;
&lt;br /&gt;
==ruleList==&lt;br /&gt;
Élément racine de la structure XML ne peut contenir comme élément enfant que des éléments &amp;quot;rule&amp;quot; qui correspondent, chacun, à une règle.&lt;br /&gt;
&lt;br /&gt;
Il n'y pas d'attribut possible.&lt;br /&gt;
&lt;br /&gt;
===rule===&lt;br /&gt;
Définit une règle.&lt;br /&gt;
&lt;br /&gt;
Les éléments possibles sont :&lt;br /&gt;
*formulaList&lt;br /&gt;
*activityTypeList&lt;br /&gt;
*resourceList&lt;br /&gt;
*placeList&lt;br /&gt;
&lt;br /&gt;
Il n'y a pas d'attribut possible.&lt;br /&gt;
&lt;br /&gt;
Chaque règle définit les types d'activités, types de ressources et places qui la rendent compatible.&lt;br /&gt;
&lt;br /&gt;
L'exemple suivant définit une règle qui autorise une saisie pour le type d'activité ''Local'', les types de ressources ''F-001'' ou ''F-002'' et pour laquelle il faut exactement 1 utilisateur avec le profil ''Pilote'' à la place 0. Le statut attribué sera celui de numéro 1. De plus, La personne qui fait la réservation doit avoir le droit &amp;quot;bookAlone&amp;quot; et si elle dispose du droit &amp;quot;bookAnyone&amp;quot; alors elle verra en plus la liste des utilisateurs compatibles avec cette règle pour lui permettre d'en choisir une : &lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;rule&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des activités autorisées et requises --&amp;gt;&lt;br /&gt;
        &amp;lt;activityTypeList needs=&amp;quot;bookAlone&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;activityType&amp;gt;1&amp;lt;/activityType&amp;gt; &amp;lt;!-- Local --&amp;gt;&lt;br /&gt;
        &amp;lt;/activityTypeList&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Liste des ressources autorisées --&amp;gt;&lt;br /&gt;
        &amp;lt;resourceList minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;resourceType&amp;gt;1&amp;lt;/resourceType&amp;gt; &amp;lt;!-- F-001 --&amp;gt;&lt;br /&gt;
            &amp;lt;resourceType&amp;gt;2&amp;lt;/resourceType&amp;gt; &amp;lt;!-- F-002 --&amp;gt;&lt;br /&gt;
        &amp;lt;/resourceList&amp;gt;&lt;br /&gt;
         &amp;lt;!-- Définition des places --&amp;gt;&lt;br /&gt;
        &amp;lt;placeList&amp;gt;&lt;br /&gt;
            &amp;lt;place index=&amp;quot;0&amp;quot;  minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot; status=&amp;quot;1&amp;quot; needs=&amp;quot;bookAnyone&amp;quot;&amp;gt; &amp;lt;!-- Pilote --&amp;gt;&lt;br /&gt;
                 &amp;lt;!-- Liste des profils autorisés --&amp;gt;&lt;br /&gt;
                &amp;lt;profile&amp;gt;2&amp;lt;/profile&amp;gt; &amp;lt;!-- Pilote --&amp;gt;&lt;br /&gt;
            &amp;lt;/place&amp;gt;&lt;br /&gt;
        &amp;lt;/placeList&amp;gt;&lt;br /&gt;
    &amp;lt;/rule&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====formulaList====&lt;br /&gt;
Contient la liste des formules que la règle doit respecter au travers des éléments ''formula''.&lt;br /&gt;
&lt;br /&gt;
=====formula=====&lt;br /&gt;
Doit contenir les attributs :&lt;br /&gt;
*''action'' : indique l'action concernée pour la vérification de la formule. Si l'action effectuée par l'utilisateur n'est pas celle de la formule, alors la formule n'est pas vérifiée. Par contre, la règle peut quand être compatible. Il est possible de remplacer le nom d'une action par * pour indiquer que la formule doit être vérifiée quelque soit l'action.&lt;br /&gt;
*''title'' : pour indiquer le message d'alerte devant s'afficher lorsque la formule n'est pas respectée&lt;br /&gt;
&lt;br /&gt;
Le contenu de l'élément ''formula'' est une formule qui est testée lors de la saisie.&lt;br /&gt;
&lt;br /&gt;
'''Attention :''' dans la formule, pour les signes de comparaison supérieur ou inférieur, il faut saisir leur équivalent HTML :&lt;br /&gt;
* &amp;gt; doit être remplacé par &amp;lt;code&amp;gt;&amp;amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt; doit être remplacé par &amp;lt;code&amp;gt;&amp;amp;amp;lt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;gt;= doit être remplacé &amp;lt;code&amp;gt;&amp;amp;amp;gt;=&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;= doit être remplacé &amp;lt;code&amp;gt;&amp;amp;amp;lt;=&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;!-- Durée maximum : 30min --&amp;gt;&lt;br /&gt;
&amp;lt;formula action=&amp;quot;update&amp;quot; title=&amp;quot;Vous ne pouvez pas faire de réservation ayant une durée supérieure à 30 minutes.&amp;quot;&amp;gt;(%DURATION &amp;amp;lt;= 300)&amp;lt;/formula&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====activityTypeList====&lt;br /&gt;
Contient la liste des types d'activités qui sont compatibles avec la règle.&lt;br /&gt;
&lt;br /&gt;
Peut contenir l'attribut [[#attribut-needs|needs]].&lt;br /&gt;
=====activityType=====&lt;br /&gt;
Contient l'identifiant d'un type d'activité.&lt;br /&gt;
&lt;br /&gt;
====resourceList====&lt;br /&gt;
Contient la liste des types de ressources qui sont compatibles avec la règle.&lt;br /&gt;
&lt;br /&gt;
Peut contenir les attributs ''maxQty'' et ''minQty'' pour définir le nombre de ressources maximum et minimum.&lt;br /&gt;
&lt;br /&gt;
====placeList====&lt;br /&gt;
Contient la liste définissant les places.&lt;br /&gt;
&lt;br /&gt;
=====place=====&lt;br /&gt;
Contient la définition de chaque place.&lt;br /&gt;
&lt;br /&gt;
Peut contenir des éléments ''profile'' pour indiquer un profil requis parmi plusieurs pour qu'un utilisateur puisse occuper la place.&lt;br /&gt;
&lt;br /&gt;
Doit contenir l'attribut index pour numéroter la place définie.&lt;br /&gt;
&lt;br /&gt;
Peut contenir les attributs ''maxQty'', ''minQty'', ''needs'' et ''status''.&lt;br /&gt;
&lt;br /&gt;
L'attribut ''needs'' permet de définir le droit requis pour l'utilisateur effectuant la saisie afin qu'il puisse choisir l'utilisateur dans la liste des utilisateurs compatibles. typiquement, cet attribut est utilisé ainsi : ''needs=&amp;quot;bookAnyone&amp;quot;''.&lt;br /&gt;
&lt;br /&gt;
L'attribut ''status'' permet de définir le statut de la personne à laquelle on attribut la place. Cette définition se fait en utilisant l'identifiant du statut. Exemple : ''status=&amp;quot;1&amp;quot;''.&lt;br /&gt;
&lt;br /&gt;
======profile======&lt;br /&gt;
Contient l'identifiant du profile requis.&lt;br /&gt;
&lt;br /&gt;
==Wildcard==&lt;br /&gt;
Le caractère * peut être utilisé dans les éléments '''resourceType'''. Il indique que la règle s'applique à tous les types de ressources existants de la plateforme.&lt;br /&gt;
&lt;br /&gt;
Exemple avec wildcard :&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;resourceTypeList minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resourceType&amp;gt;*&amp;lt;/resourceType&amp;gt;&lt;br /&gt;
&amp;lt;/resourceTypeList&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple sans wildcard :&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;resourceTypeList minQty=&amp;quot;1&amp;quot; maxQty=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;resourceType&amp;gt;1&amp;lt;/resourceType&amp;gt;&lt;br /&gt;
    &amp;lt;resourceType&amp;gt;2&amp;lt;/resourceType&amp;gt;&lt;br /&gt;
    &amp;lt;resourceType&amp;gt;3&amp;lt;/resourceType&amp;gt;&lt;br /&gt;
&amp;lt;/resourceTypeList&amp;gt;&amp;lt;/xml&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
	<entry>
		<id>https://doc4-fr.openflyers.com/index.php?title=File:015_parametrage_gestion_reservation.png&amp;diff=14364</id>
		<title>File:015_parametrage_gestion_reservation.png</title>
		<link rel="alternate" type="text/html" href="https://doc4-fr.openflyers.com/index.php?title=File:015_parametrage_gestion_reservation.png&amp;diff=14364"/>
		<updated>2026-03-16T15:21:09Z</updated>

		<summary type="html">&lt;p&gt;Mbouzar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paramétrage Réservations Internes&lt;/div&gt;</summary>
		<author><name>Mbouzar</name></author>
	</entry>
</feed>