/****************************************************************************
** ui.h extension file, included from the uic-generated form implementation.
**
** If you wish to add, delete or rename functions or slots use
** Qt Designer which will update this file, preserving your code. Create an
** init() function in place of a constructor, and a destroy() function in
** place of a destructor.
*****************************************************************************/
//#include "CApp.h"
//.................. index des champs .......................................

#ifdef COMMERCIAL_VERSION
    #include "../../Commercial/C_Cps.h"
    #include "../../Commercial/C_Vitale.h"
#endif

#include "../../MedinTuxTools/Theme.h"
#include "Wdg_Agenda.h"
#include "manager.h"

#define LIST_NOM       0
#define LIST_PRENOM    1
#define LIST_ID_KEY    2
#define LIST_GUID      3

#define F_GUID         0

#define NEW_IDENTITE 1
#define PROG_NAME "Manager"
#define MODE_SAISIE_EN_COURS      1
#define MODE_DISABLED             0
#define MODE_SAISIE_MULTICRITERES 2
#define MODE_NO_AUTHORIZED        4
#define MODE_CREATION             8
#define MODE_ENABLED              16

#define ID_INTERV   4
#define QUAL_INTERV 3

#define IDENT_SET_DISABLED      1
#define IDENT_NOCHANGE          0
#define IDENT_ERASE_ALL         2
//----------------------------------------- init ----------------------------------------------------------------------
void Wdg_Central::init()
{   m_pCMoteurBase       = G_pCApp->m_pCMoteurBase;
    m_Contacts_Run       = 0;
    m_ID_Doss            = "";
    m_IsModifiable       = 0;
    m_pCGestRPU          = 0;
    m_pQtimerCheckState  = 0;
    m_pQPopupMenu        = 0;
    m_MonitorIsInit      = 0;
    m_IdentIsClear       = 1;
    m_pLastQListViewItem = 0;
    tabWidgetNotes->setCurrentPage(2);

    //.................................................................................................................
    /////////////////////////////////////////////////// INIT ONGLET IDENTIFICATION ////////////////////////////////////

    pushButtonCreate->hide();
    pushButtonSavModif->show();  //void Sig_CarEvent(QEvent * ev);
    pushButtonCancel->show();
    //checkBox_IsNotPatient->setChecked(FALSE);
    lineEdit_NomAssure->setEnabled(FALSE);
    lineEdit_PrenomAssure->setEnabled(FALSE);

    //.............. un peu de malades pour commencer ..................
    //InitAllList( "", "");
    //............... connecter le champ de selection ..................
    // ________________________________________________________________________________
    // MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
    ClearDialog(IDENT_NOCHANGE);
    lineEditAutoLocator->setMixMode(1);
    lineEditAutoLocator->setText("");
    connect( lineEditAutoLocator,   SIGNAL( Sig_KeyDown ()),                 this, SLOT(    OnSign_NomKeyDown())  );
    connect( lineEditAutoLocator,   SIGNAL( Sig_KeyUp ()),                   this, SLOT(    OnSign_NomKeyUp())   );
    connect( lineEditAutoLocator,   SIGNAL(   textChanged (const QString&)), this, SLOT(    lineEditAutoLocator_textChanged(const QString&)) );
    connect( lineEditAutoLocator,   SIGNAL(   returnPressed ()),             this, SLOT(    lineEditAutoLocator_returnPressed()) );

    connect( lineEdit_NomDossier,      SIGNAL(   textChanged (const QString&)), this, SLOT(    lineEdit_NomDossier_textChanged(const QString&)) );
    connect( lineEdit_PremomDossier,   SIGNAL(   textChanged (const QString&)), this, SLOT(    lineEdit_PrenomDossier_textChanged(const QString&)) );

    lineEditAutoLocator->setFocus();
    //........................ connecter les slot de verification ...........................................................................................
    connect( lineEdit_DtNss,    SIGNAL( Sig_FocusOut ()),        this,     SLOT(   OnOutFocuslineEdit_DtNss()));
    connect( lineEditVille,     SIGNAL( Sig_FocusOut ()),        this,     SLOT(   OnOutFocusVille())  );
    connect( lineEdit_CdPostal, SIGNAL( Sig_FocusOut()),         this,     SLOT(   OnOutFocusCodePostal())  );
    connect( lineEdit_CdPostal, SIGNAL( Sig_CarEvent(QEvent* )), this,     SLOT(   OnCharEventCodePostal(QEvent* )) );

    connect( lineEdit_NumSecu, SIGNAL( Sig_CarEvent(QEvent* )),  this,     SLOT(   OnCharEventNumSecu(QEvent* )) );
    connect( lineEdit_NumSecu, SIGNAL( Sig_FocusIn()),           this,     SLOT(   OnInFocusNumSecu())  );
    connect( lineEdit_NumSecu, SIGNAL( Sig_FocusOut()),          this,     SLOT(   OnOutFocusNumSecu())  );
    //........................ connecter les slot de changement ............................................................................................
    connect( lineEdit_NomDossier, SIGNAL( textChanged ( const QString & ) ),     this, SLOT(   OnTextChanged_lineEdit_NomDossier(const QString & )    ));
    connect( lineEdit_PremomDossier, SIGNAL( textChanged ( const QString & ) ),  this, SLOT(   OnTextChanged_lineEdit_PremomDossier(const QString & ) ));
    connect( lineEdit_NomDeNss, SIGNAL( textChanged ( const QString & ) ),       this, SLOT(   OnTextChanged_lineEdit_NomDeNss(const QString & )      ));
    connect( lineEdit_Titre, SIGNAL( textChanged ( const QString & ) ),          this, SLOT(   OnTextChanged_lineEdit_Titre(const QString & )         ));
    connect( lineEdit_DtNss, SIGNAL( textChanged ( const QString & ) ),          this, SLOT(   OnTextChanged_lineEdit_DtNss(const QString & )         ));
    connect( lineEdit_Profession, SIGNAL( textChanged ( const QString & ) ),     this, SLOT(   OnTextChanged_lineEdit_Profession(const QString & ))  );
    connect( textEdit_Adresse, SIGNAL( textChanged ( ) ),                        this, SLOT(   OnTextChanged_textEdit_Adresse( ))  );
    connect( lineEdit_Tel1, SIGNAL( textChanged ( const QString & ) ),           this, SLOT(   OnTextChanged_lineEdit_Tel1(const QString & ))  );
    connect( lineEdit_Tel2, SIGNAL( textChanged ( const QString & ) ),           this, SLOT(   OnTextChanged_lineEdit_Tel2(const QString & ))  );
    connect( lineEdit_Tel3, SIGNAL( textChanged ( const QString & ) ),           this, SLOT(   OnTextChanged_lineEdit_Tel3(const QString & ))  );
    connect( lineEdit_CdPostal, SIGNAL( textChanged ( const QString & ) ),       this, SLOT(   OnTextChanged_lineEdit_CdPostal(const QString & ))  );
    connect( lineEditVille, SIGNAL( textChanged ( const QString & ) ),           this, SLOT(   OnTextChanged_lineEditVille(const QString & )) );
    connect( lineEdit_Email, SIGNAL( textChanged ( const QString & ) ),          this, SLOT(   OnTextChanged_lineEdit_Email(const QString & )) );
    connect( lineEdit_NumSecu, SIGNAL( textChanged ( const QString & ) ),        this, SLOT(   OnTextChanged_lineEdit_NumSecu(const QString & )) );
    connect( lineEdit_NomAssure, SIGNAL( textChanged ( const QString & ) ),      this, SLOT(   OnTextChanged_lineEdit_NomAssure(const QString & ))  );
    connect( lineEdit_PrenomAssure, SIGNAL( textChanged ( const QString & ) ),   this, SLOT(   OnTextChanged_lineEdit_PrenomAssure(const QString & ))  );
    connect( textEdit_Note, SIGNAL( textChanged ( ) ),                           this, SLOT(   OnTextChanged_textEdit_Note( )) );
    connect( lineEdit_RangGeme, SIGNAL( textChanged (const QString & ) ),        this, SLOT(   OnTextChanged_lineEdit_RangGeme(const QString &)) );
    connect( comboBoxSexe,    SIGNAL( textChanged (const QString & ) ),          this, SLOT(   OnTextChanged_comboBoxSexe( const QString &))  );
    connect( comboBoxSexe,    SIGNAL( activated (const QString & ) ),            this, SLOT(   OnActivated_comboBoxSexe( const QString &)) );
    connect( comboBoxQualiteAyantDroit,    SIGNAL( activated (int ) ),           this, SLOT(   OnActivated_comboBoxQualiteAyantDroit( int)) );
    connect( comboBoxSexe->lineEdit(),    SIGNAL(lostFocus () ),                 this, SLOT(   OnOutFocuslineEdit_DtNss()) );

    connect(ListView_Patient ,  SIGNAL( contextMenuRequested (  QListViewItem * , const QPoint&, int  )),
                  this,           SLOT( Slot_listView_Patient_contextMenuRequested (  QListViewItem * , const QPoint&, int))
           );
    connect(ListView_Doublons ,  SIGNAL( mouseButtonClicked ( int , QListViewItem * , const QPoint&, int  )),
                  this,            SLOT( Slot_ListView_Doublons_mouseButtonPressed (int , QListViewItem * , const QPoint&, int))
           );

    connect(pushButton_ActiverMultiCritere ,  SIGNAL(clicked ()), this,  SLOT( Slot_ActiverMultiCritere_clicked ()) );
    connect(pushButton_QuitterMultiCritere ,  SIGNAL(clicked ()), this,  SLOT( Slot_QuitterMultiCritere_clicked ()) );
    connect(pushButton_Effacer ,              SIGNAL(clicked ()), this,  SLOT( Slot_pushButton_Effacer_clicked ()) );
    connect(pushButton_ReinitListe ,          SIGNAL(clicked ()), this,  SLOT( Slot_pushButton_ReinitListe_clicked ()) );

    pushButtonCancel->hide();
    InitAllList( "", "");
    if (ListView_Patient->childCount())
    {QListViewItem *pQListViewItem =  ListView_Patient->firstChild ();
        if (pQListViewItem) ListView_Patient->setCurrentItem (pQListViewItem );
    }
    m_UserName = G_pCApp->m_User;
    //.................................. mode de creation des dossiers ...............................................
    CGestIni::Param_UpdateFromDisk(G_pCApp->m_PathAppli + "Manager.ini", m_LocalParam);

    m_StdColor = groupBoxPatient->paletteBackgroundColor();
    groupBoxPatient->setPaletteBackgroundColor (m_StdColor);
    groupBoxAssure->setPaletteBackgroundColor ( m_StdColor);
    //.................................................................................................................
    ///////////////////////////////////////////////////INIT ONGLET STATISTIQUES //////////////////////////////////////
    //........................ images des differents gadjets.................................
    QString path_img = G_pCApp->m_PathAppli + "Images" + QDir::separator();
    m_GoDatePopup.setPixmap (Theme::getIcon( "DownExpandArrow.xpm"),    QIconSet::Automatic);
    m_Cadenas.setPixmap (Theme::getIcon("cadenas.png"),                QIconSet::Automatic);
    m_Standard.setPixmap (Theme::getIcon("standards.png"),             QIconSet::Automatic);
    pushButtonInfo->setPixmap ( Theme::getIcon("help.png") );
    pushButtonVitale->setPixmap ( Theme::getIcon("VitaleButt.png") );
    pushButton_ReinitListe->setPixmap ( Theme::getIcon("listview_renouv.png") );

    //........................ dates et heure des stat.................................
    QDate dateDeb(QDate::currentDate());
    QDate dateFin(QDate::currentDate());
    dateDeb = dateDeb.addDays (-1);
    //dateFin   = dateFin.addDays (1);
    mle_deb->setText(dateDeb.toString("ddMMyyyy"));
    mle_fin->setText(dateFin.toString("ddMMyyyy"));
    mle_HeureDeb->setText("0800");
    mle_HeureFin->setText("0800");
    pushButtonDateFin->setIconSet (m_GoDatePopup);
    pushButtonDateDeb->setIconSet (m_GoDatePopup);
    //.................................................................................................................
    ///////////////////////////////////////////////////INIT ONGLET MONITEUR //////////////////////////////////////
    //........................ dates et heure du moniteur patient.................................
    QDate dateDeb_Mon(QDate::currentDate());
    QDate dateFin_Mon(QDate::currentDate());
    dateFin_Mon = dateFin_Mon.addDays (1);
    mle_deb_Mon->setText(dateDeb_Mon.toString("ddMMyyyy"));
    mle_fin_Mon->setText(dateFin_Mon.toString("ddMMyyyy"));
    mle_HeureDeb_Mon->setText("0800");
    mle_HeureFin_Mon->setText("0800");
    pushButtonDateFin_Mon->setIconSet (m_GoDatePopup);
    pushButtonDateDeb_Mon->setIconSet (m_GoDatePopup);

    /*
  QWidget *w = tabWidget_Cenral->page ( 0 ) ;
  QPixmap pixmap (path_img +"Marbre.jpg");
  if (w>0)
     {w->setPaletteBackgroundPixmap ( pixmap );
     }
  groupBoxPatient->setPaletteBackgroundPixmap ( pixmap );
  groupBoxAssure->setPaletteBackgroundPixmap ( pixmap  );
  w = tabWidgetNotes->page ( 0 ) ;
  if (w>0)
     {w->setPaletteBackgroundPixmap ( pixmap  );
     }
   */
    //............................ creer le timer de verification .................................
    // [Monitor]
    //     Rafraichissement = 120
    //spinBoxRafraichInterval->setMaxValue(3000);
    QString mode;
    if (CGestIni::Param_ReadParam(m_LocalParam, "Monitor", tr("Rafraichissement"), &mode)==0)   // = zero si pas d'erreur
       {spinBoxRafraichInterval->setValue (mode.toInt());
       }
    else spinBoxRafraichInterval->setValue (5);
    m_pQtimerCheckState = new QTimer;
    connect( m_pQtimerCheckState, SIGNAL(timeout()), this, SLOT(CheckState()) );
    m_pQtimerCheckState->start(3*1000, FALSE);
    //............................ Placer le spliter dans la bonne position .................................
    ListView_Vitale->hide();
    ListView_Doublons->hide();
    QValueList <int> list;
    list.append(60);
    list.append(height()-60);
    splitter3->setSizes(list);
    list.clear();
    list.append(150);
    list.append(width()-150);
    splitter7->setSizes(list);
    tabWidget_Central->removePage ( tabWidget_Central->page(1) );     // onglet statistique
    tabWidget_Central->removePage ( tabWidget_Central->page(1) );    // une deuxi�me fois pour enlever le suivant
#ifdef COMMERCIAL_VERSION
#else
    pushButtonVitale->hide();
#endif

    SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_DISABLED);
    //................... lire les éventuelles parametres de couleur .....................................
    m_VitaleListColor.setRgb ( 170, 255, 127 ) ;
    m_DoublonsListColor.setRgb ( 255, 255, 197 ) ;
    m_PatientsListColor.setRgb ( 255, 255, 255 ) ;
    m_CreateModeColor.setRgb ( 170, 255, 255 ) ;
    m_MulticritereModeColor.setRgb ( 239, 167, 28 ) ;

    GetCouleurFromIniFile(  "Fond liste vitale",      m_VitaleListColor );
    GetCouleurFromIniFile(  "Fond liste doublons",    m_DoublonsListColor );
    GetCouleurFromIniFile(  "Fond liste patients",    m_PatientsListColor );
    GetCouleurFromIniFile(  "Mode creation dossiers", m_CreateModeColor );
    GetCouleurFromIniFile(  "Mode multicriteres",     m_MulticritereModeColor );
    ListView_Vitale->setPaletteBackgroundColor(   m_VitaleListColor );
    ListView_Doublons->setPaletteBackgroundColor( m_DoublonsListColor );
    ListView_Patient->setPaletteBackgroundColor(  m_PatientsListColor );
}

//--------------------------------- GetCouleurFromIniFile -----------------------------------------------------------------------
void Wdg_Central::GetCouleurFromIniFile(const QString &pourQuiStr, QColor &destColor)
{QString couleur = CGestIni::Param_ReadUniqueParam(G_pCApp->m_LocalParam, "Couleurs", pourQuiStr);
 QStringList rvb = QStringList::split ( " ", couleur.stripWhiteSpace());
 if (rvb.count()) destColor.setRgb ( rvb[0].toInt(), rvb[1].toInt(),rvb[2].toInt() );
}

//--------------------------------- lineEdit_NomDossier_textChanged -----------------------------------------------------------------------
void Wdg_Central::lineEdit_NomDossier_textChanged(const QString &nom)
{if (pushButtonCancel->isShown()) InitAllList( nom, lineEdit_PremomDossier->text());
}
//--------------------------------- lineEdit_PrenomDossier_textChanged -----------------------------------------------------------------------
void Wdg_Central::lineEdit_PrenomDossier_textChanged(const QString &prenom)
{if (pushButtonCancel->isShown()) InitAllList(lineEdit_NomDossier->text(), prenom);
}

//--------------------------------- Slot_pushButton_ReinitListe_clicked -----------------------------------------------------------------------
void Wdg_Central::Slot_pushButton_ReinitListe_clicked()
{if (lineEditAutoLocator->text().length()) lineEditAutoLocator->setText("");
 else                                      InitAllList("","");
}

//--------------------------------- Slot_ActiverMultiCritere_clicked -----------------------------------------------------------------------
void Wdg_Central::Slot_ActiverMultiCritere_clicked ()
{
 if (!pushButton_QuitterMultiCritere->isShown())
    {ClearDialog(IDENT_ERASE_ALL);
     pushButton_ActiverMultiCritere->setText( tr("Lancer la recherche"));
     SetInterfaceOnMode(G_pCApp->m_Droits, MODE_SAISIE_MULTICRITERES);
     return;
    }
 //............... faire la recherche multicritere .......................
 QString  dnss     = lineEdit_DtNss->text();                      //  05061956
 if (dnss.length()==8) dnss = dnss.mid(4,4)+"-"+dnss.mid(2,2)+"-"+dnss.mid(0,2)+" 00:00:00";
 else                  dnss = "";
 QString numSecu  = lineEdit_NumSecu->text();
 if (numSecu.length()==13) numSecu += CMoteurBase::ComputeClef_Secu(numSecu).stripWhiteSpace();
 else if (numSecu.length()==0) numSecu  = "";
 else                          numSecu += "%";
 QString sexe     = comboBoxSexe->currentText().left(1).upper();
 QString cdPost   = lineEdit_CdPostal->text().stripWhiteSpace();
 if (cdPost.length()==0 || cdPost.toInt()==0)   cdPost  = "";
 else if (cdPost.length()<5)                    cdPost += "%";

          G_pCApp->m_pCMoteurBase->GetPatientListFromNomPrenomSecuDtNssGeme( ListView_Patient,
                                                                             lineEdit_NomDossier->text().stripWhiteSpace(),                         // nom
                                                                             lineEdit_PremomDossier->text().stripWhiteSpace(),                      // prenom
                                                                             dnss,                                            // date Nss // doit etre 1993-06-01 00:00:00
                                                                             numSecu,                               // num secu // 160196296519557
                                                                             lineEdit_RangGeme->text().stripWhiteSpace(),                     // rang gemellaire
                                                                             "255",     // qualite d'ayant droit 255 pour ne pas requetter dessus
                                                                             textEdit_Adresse->text().stripWhiteSpace(),      //  adresse,
                                                                             lineEdit_CdPostal->text().stripWhiteSpace(),      //  codePost,
                                                                             lineEditVille->text().stripWhiteSpace(),      //  ville,
                                                                             sexe,              //  sexe,
                                                                             lineEdit_Profession->text().stripWhiteSpace(),      //  profession,
                                                                             lineEdit_NomDeNss->text().stripWhiteSpace(),      //  nomJfille
                                                                             lineEdit_NomAssure->text().stripWhiteSpace(),      //  nomAss,
                                                                             lineEdit_PrenomAssure->text().stripWhiteSpace(),      //  prenomAss,
                                                                             lineEdit_Tel1->text().stripWhiteSpace(),      //  tel1,
                                                                             lineEdit_Tel2->text().stripWhiteSpace(),      //  tel2,
                                                                             lineEdit_Tel3->text().stripWhiteSpace(),      //  tel3,
                                                                             lineEdit_Email->text().stripWhiteSpace(),      //  email,
                                                                             " LIKE ",   //  egal_like  " = ",
                                                                             textLabel_StateList
                                                                           );
}

//--------------------------------- Slot_QuitterMultiCritere_clicked -----------------------------------------------------------------------
void Wdg_Central::Slot_QuitterMultiCritere_clicked ()
{SetInterfaceOnMode(G_pCApp->m_Droits, MODE_ENABLED);
 SetInterfaceOnMode(G_pCApp->m_Droits, MODE_DISABLED);
 pushButtonSavModif->setEnabled(FALSE);
 pushButton_ActiverMultiCritere->setText( tr("&Activer le mode recherche multicritères"));
}

//--------------------------------- Slot_pushButton_Effacer_clicked -----------------------------------------------------------------------
void Wdg_Central::Slot_pushButton_Effacer_clicked ()
{ClearDialog(IDENT_ERASE_ALL);
}

//--------------------------------- listView_Praticiens_contextMenuRequested -----------------------------------------------------------------------
void Wdg_Central::listView_Praticiens_contextMenuRequested( QListViewItem *pQListViewItem, const QPoint &, int )
{if (pushButton_QuitterMultiCritere->isShown()) return; // liste inactive dans le mode multicritere
 //if (pushButtonCancel->show())               return; // liste inactive dans le mode creation

 if (pQListViewItem==0)            return;
 QStringList lst;
 QString removeProp = tr("Retirer la propriété 'En qualité de'");
 CGestIni::Param_GetList(m_LocalParam, "Qualite intervenant", "",  lst );
 if (lst.count()==0)               return;
 lst.append ( "-------------" );
 lst.append ( removeProp );
 QString ret = G_pCApp->DoPopupList(lst);
 if (ret.length()==0)              return;
 if (ret == removeProp) ret="";
 pQListViewItem->setText(QUAL_INTERV, ret);
 if (pushButtonCreate->isShown())  return;     // on se contente de renseigner uniquement la listview (l'enregistrement se fera apres click sur enregistrer)
 QListViewItem *pQListViewItemPat =  ListView_Patient->currentItem();
 if ( pQListViewItemPat == 0)      return;
 QString numGUID  = textLabel_NumDoss->text();
 QString iD_Doss   = pQListViewItemPat->text(LIST_ID_KEY);
 m_pCMoteurBase->PatientIntervenantsWrite( iD_Doss , numGUID, pQListViewItem->text(ID_INTERV),  pQListViewItem->text(QUAL_INTERV));
}


//--------------------------------- Slot_listView_Patient_contextMenuRequested -----------------------------------------------------------------------
void Wdg_Central::Slot_listView_Patient_contextMenuRequested( QListViewItem *pQListViewItem, const QPoint &, int )
{if (pushButton_QuitterMultiCritere->isShown()) return; // liste inactive dans le mode multicritere
 if (pushButtonCancel->isShown())               return; // liste inactive dans le mode creation
 if (!G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "adr")) return;
 pushButtonSavModif->setEnabled(FALSE);
 QStringList list;
 list.append(tr("Nouveau dossier"));
 if (pQListViewItem){
                     list.append(tr("Créer un nouveau dossier en se servant des données de : ")+pQListViewItem->text(0)+" "+pQListViewItem->text(1));
                     list.append("-------------");
                    }
 if (ListView_Doublons->isShown()) list.append(tr("Fermer la liste de résolution des doublons"));
 else                              list.append(tr("Ouvrir la liste de résolution des doublons"));
 if (pQListViewItem){ list.append(tr("Ajouter ce patient à la liste de résolution des doublons"));
                      list.append("-------------");
                      //list.append(tr("Rechercher par le nom : ")+lineEdit_NomDossier->text());
                      //list.append(tr("Rechercher par le prénom : ")+lineEdit_PremomDossier->text());
                      list.append(tr("Rechercher par la date de naissance : ")+lineEdit_DtNss->getMixText().replace("/","-"));
                      //list.append(tr("Rechercher par le n. de jeune fille : ")+lineEdit_NomDeNss->text());
                      list.append(tr("Rechercher par le numéro de sécurité sociale : ")+lineEdit_NumSecu->text());
                      list.append(tr("Rechercher avec le nom le prénom et la date de naissance : ")+lineEditAutoLocator->text().replace(";"," ")+" "+lineEdit_DtNss->getMixText().replace("/","-"));
                    }
 QString      ret = G_pCApp->DoPopupList(list);
 bool pas_present = TRUE;
 switch((int)(QChar(ret[0]).latin1()))
    {case 'A':
       {ListView_Doublons->show();
        //.............. verifier si pas deja present .................................
        QListViewItemIterator it( ListView_Doublons );
        while ( it.current() )
              {QListViewItem *pQListViewItem_D = it.current();
               if (pQListViewItem->text(2) == pQListViewItem_D->text(2))
                  {pas_present = FALSE;
                   break;
                  }
               ++it;
              }
        if (pas_present)
           {/*QListViewItem *pQListViewItem_D = */new QListViewItem( ListView_Doublons, pQListViewItem->text(0),
                                                                     pQListViewItem->text(1),
                                                                     pQListViewItem->text(2),
                                                                     pQListViewItem->text(3));
           }
        //.............. verifier si pas verrouillé .................................
        QString usedBy;
        if (m_pCMoteurBase->IsDossierVerrouille   ( pQListViewItem->text(3), usedBy ))
           {pQListViewItem->setPixmap ( 0, Theme::getIcon( "16x16/locked.png") );
            pQListViewItem->setText ( 4, usedBy );
           }
        else
           {pQListViewItem->setPixmap ( 0, 0 );
            pQListViewItem->setText ( 4, "" );
           }
        break;
       }
     case 'C':
      {textEdit_Note->clear();
       listView_Praticiens->clear();

       G_pCApp->m_LastNom     ="";
       G_pCApp->m_LastPrenom  ="";
       G_pCApp->m_LastGUID    ="";
       G_pCApp->m_LastPK      ="";
       G_pCApp->m_LastTel     ="";
       //................... se mettre en mode creation .................................
       textLabel_NumDoss->setText(m_pCMoteurBase->GUID_Create());
       SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_CREATION);
       lineEdit_NomDossier->setFocus();
       break;
      }
     case 'N':
      {pushButtonNew_clicked();
       break;
      }
     case 'F':
       {ListView_Doublons->hide();
        break;
       }
     case 'O':
       {ListView_Doublons->show();
        break;
       }
     case 'R':
       {QString nom     = "";
        QString prenom  = "";
        QString dtNss   = "";
        QString numSecu = "";
        QString jeuneF  = "";
        if      (ret.find(tr("le nom"))!=-1)       nom        =   QString("%")+lineEdit_NomDossier->text()+"%";
        if      (ret.find(tr("prénom"))!=-1)       prenom     =   QString("%")+lineEdit_PremomDossier->text()+"%";
        if      (ret.find(tr("date"))!=-1)         dtNss      =   lineEdit_DtNss->text().mid(4,4)+"-"+lineEdit_DtNss->text().mid(2,2)+"-"+lineEdit_DtNss->text().mid(0,2)+ " 00:00:00";
        if      (ret.find(tr("numéro"))!=-1)       numSecu    =   QString("%")+lineEdit_NumSecu->text()+"%";
        if      (ret.find(tr("jeune fille"))!=-1)  jeuneF     =   QString("%")+lineEdit_NomDeNss->text()+"%";
        if (G_pCApp->m_pCMoteurBase->GetPatientListFromNomPrenomSecuDtNssGeme(ListView_Patient,         // pas de listview car on veut juste savoir si trouve
                                                                                     nom,         // nom
                                                                                     prenom,         // prenom
                                                                                     dtNss,         // date Nss // doit etre 1993-06-01 00:00:00
                                                                                     numSecu,        // num secu // 160196296519557
                                                                                     "",         // rang gemellaire
                                                                                     "",         // qualite d'ayant droit
                                                                                     "",         // adresse,
                                                                                     "",         // codePost,
                                                                                     "",         // ville,
                                                                                     "",         // sexe,
                                                                                     "",         // profession,
                                                                                     jeuneF,      //  nomJfille
                                                                                     "",      //  nomAss,
                                                                                     "",      //  prenomAss,
                                                                                     "",      //  tel1,
                                                                                     "",      //  tel2,
                                                                                     "",      //  tel3,
                                                                                     "",      //  email,
                                                                                     " LIKE ",   // egal_like  " = ",
                                                                                     textLabel_StateList
                                                                                   )
                  )
                  {
                  }

        break;
       }

    }

}

//--------------------------------- Slot_ListView_Doublons_mouseButtonPressed -----------------------------------------------------------------------
void Wdg_Central::Slot_ListView_Doublons_mouseButtonPressed (int button, QListViewItem *pQListViewItem , const QPoint& p, int c)
{if (pQListViewItem==0) return;
 switch(button)
   {case 1:
         Slot_listView_Doublons_IsClicked (pQListViewItem, p, c);
         break;
    case 2:
         Slot_listView_Doublons_contextMenuRequested (pQListViewItem, p, c );
         break;
   }
}

//--------------------------------- Slot_listView_Doublons_contextMenuRequested -----------------------------------------------------------------------
void Wdg_Central::Slot_listView_Doublons_contextMenuRequested( QListViewItem *pQListViewItem, const QPoint &, int )
{QStringList list;
 list.append(tr("Fermer la liste de résolution des doublons"));
 list.append(tr("Effacer la liste de résolution des doublons"));
 if (pQListViewItem)
    {list.append(tr("Retirer de la liste des doublons ce dossier : ")                     + pQListViewItem->text(0)+" "+pQListViewItem->text(1));
     list.append(tr("Tester si les dossiers sont verrouillés et utilisables"));
     list.append("------");
     list.append(tr("Assigner tous les dossiers présents dans cette liste au patient : ") + pQListViewItem->text(0)+" "+pQListViewItem->text(1));
    }
 QString    ret = G_pCApp->DoPopupList(list);
 QString usedBy = "";
 bool isVerrou  = FALSE;
 switch((int)(QChar(ret[0]).latin1()))
    {case 'T':
       {//.............. verifier si verrous .................................
        QListViewItemIterator it( ListView_Doublons );
        while ( it.current() )
           {QListViewItem *pQListViewItem_D = it.current();
            if (m_pCMoteurBase->IsDossierVerrouille   ( pQListViewItem_D->text(3), usedBy ))
               {pQListViewItem_D->setPixmap ( 0, Theme::getIcon( "16x16/locked.png") );
                pQListViewItem_D->setText ( 4, usedBy );
                isVerrou = TRUE;
               }
            else
               {pQListViewItem_D->setPixmap ( 0, 0 );
                pQListViewItem_D->setText ( 4, "" );
               }
            ++it;
           }
        break;
       }
     case 'A':
       {if (ListView_Doublons->childCount()<=1) return;
        QString message  = tr ( "<b><font color=\"#e80d0d\">ATTENTION OPÉRATION DE FUSION À HAUT RISQUE </font></b>")                           +
                           tr(  "<hr><br> La personne : <b><font color=\"#1200ff\">") + pQListViewItem->text(0)+" "+pQListViewItem->text(1) + "</font></b>" +
                           tr(  "<br> va être celle à laquelle seront attribués tous les dossiers suivants : <hr>" ) ;
        QListViewItemIterator ut( ListView_Doublons );
        while ( ut.current() )
               {QListViewItem *pQListViewItem_D = ut.current();
                if (pQListViewItem_D->text(2) != pQListViewItem->text(2))
                    message += tr(  "<br> &nbsp;&nbsp;&nbsp;&nbsp;=> Dossier : <b><font color=\"#1200ff\">") + pQListViewItem_D->text(0)+" "+pQListViewItem_D->text(1) + "</font></b>";
                ++ut;
               }
                message += tr("<br><hr>confirmez-vous tout de même cette opération ? ");
        int sel = QMessageBox::information( this, tr("Fusionner plusieurs dossiers"), message,
                                                  tr("&Annuler"), tr("&Fusionner les dossiers"), 0 /*tr("Annuler")*/,
                                                  0, 1 );
        if (sel != 1)                             return;
        message  = tr(  "<b><font color=\"#e80d0d\">ÊTES VOUS CERTAIN DE CETTE FUSION </font></b>") +
                   tr(  "<hr><br> il est encore temps d'annuler cette opération.") +
                   tr(  "<br> qui sera non réversible après confirmation." ) +
                   tr(  "<br><hr>confirmez-vous de nouveau cette opération ? ");
        sel = QMessageBox::information( this, tr("Fusionner plusieurs dossiers"), message,
                                              tr("&Fusionner les dossiers"),tr("&Annuler") , 0 /*tr("Annuler")*/,
                                              1, 1 );
        if (sel == 1)                         return;
        //.............. verifier si verrous .................................
        QListViewItemIterator it( ListView_Doublons );
        while ( it.current() )
           {QListViewItem *pQListViewItem_D = it.current();
            if (m_pCMoteurBase->IsDossierVerrouille   ( pQListViewItem_D->text(3), usedBy ))
               {pQListViewItem_D->setPixmap ( 0, Theme::getIcon( "16x16/locked.png") );
                pQListViewItem_D->setText ( 4, usedBy );
                isVerrou = TRUE;
               }
            else
               {pQListViewItem_D->setPixmap ( 0, 0 );
                pQListViewItem_D->setText ( 4, "" );
               }
            ++it;
           }
        if (isVerrou==FALSE)
           {//............ poser les verrous .....................
            QListViewItemIterator it( ListView_Doublons );
            while ( it.current() )
                 {QListViewItem *pQListViewItem_D = it.current();
                  m_pCMoteurBase->VerrouilleDossier ( pQListViewItem_D->text(3), m_UserName , usedBy );
                  ++it;
                 }
            m_pCMoteurBase->ResoudreDoublons(pQListViewItem, ListView_Doublons);
            m_pCMoteurBase->DeVerrouilleDossier ( pQListViewItem->text(3));
            QString nom    = pQListViewItem->text(0);
            QString prenom = pQListViewItem->text(1);
            ListView_Doublons->clear () ;
            InitAllList( nom, prenom);//ReinitAgendaOnDate(m_FirstDate);
            if (G_pCApp->m_pManager->m_pWdg_Agenda) G_pCApp->m_pManager->m_pWdg_Agenda->ReinitAgendaOnDate( G_pCApp->m_pManager->m_pWdg_Agenda->m_FirstDate);
           }
        break;
        }
     case 'E':
       {ListView_Doublons->clear ();
        ListView_Doublons->hide();
        break;
       }
     case 'R':
       {delete(pQListViewItem);
        break;
       }
     case 'F':
       {ListView_Doublons->hide();
        break;
       }
     case 'O':
       {ListView_Doublons->show();
        break;
       }
    }
}

//--------------------------------- Slot_listView_Doublons_IsClicked -----------------------------------------------------------------------
void Wdg_Central::Slot_listView_Doublons_IsClicked( QListViewItem *pQListViewItem, const QPoint &, int )
{
 if (pQListViewItem) DataToFormulaire( pQListViewItem->text(LIST_ID_KEY), pQListViewItem->text(LIST_NOM), pQListViewItem->text(LIST_PRENOM));
}

//--------------------------------- SetInterfaceOnMode -----------------------------------------------------------------------
//    #define MODE_SAISIE_EN_COURS      1
//    #define MODE_DISABLED  0
void  Wdg_Central::SetInterfaceOnMode(const QString &droits, int mode)
{if (G_pCApp->IsThisDroitExist(droits, "idv"))
    {
     if (CGestIni::Param_ReadUniqueParam(m_LocalParam, "Derniere Session", tr("Mode de creation dossier")).lower()[0] == 'a' &&
         G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idg")
         ){pushButtonCreate->setText(tr("&Créer et accéder"));}
     else {pushButtonCreate->setText(tr("&Créer le dossier"));}

     //........ placer selon les droits .................
     if (G_pCApp->IsThisDroitExist(droits, "idc"))
            {pushButtonDetruire->show();
             pushButtonDetruire->setEnabled(TRUE);
             pushButtonNew->show();
             pushButtonSavModif->show();
            }
     else
            {pushButtonDetruire->hide();
             pushButtonNew->hide();
             pushButtonSavModif->hide();
            }
     if (G_pCApp->IsThisDroitExist(droits, "idg"))
            {pushButtonAcceder->show();
             pushButtonAcceder->setEnabled(FALSE);
            }
     else
            {pushButtonAcceder->hide();
            }
     if (G_pCApp->IsThisDroitExist(droits, "idd"))
           {pushButtonDetruire->setEnabled(FALSE);
           }
     else
           {pushButtonDetruire->setEnabled(TRUE);
           }
     groupBoxPatient->show();
     groupBoxAssure->show();
     tabWidgetNotes->show();

     if (mode == MODE_ENABLED)
        {groupBoxAssure->setEnabled(TRUE);
         tabWidgetNotes->setEnabled(TRUE);
         groupBoxPatient->setEnabled(TRUE);
         ListView_Vitale->setEnabled(TRUE);

        }
     else if (mode == MODE_DISABLED)
        {groupBoxPatient->setPaletteBackgroundColor (m_StdColor);
         groupBoxAssure->setPaletteBackgroundColor ( m_StdColor);
         pushButtonCreate->hide();
         pushButtonCancel->hide();
         pushButton_QuitterMultiCritere->hide();
         pushButton_Effacer->hide();
         groupBoxAssure->setEnabled(FALSE);
         tabWidgetNotes->setEnabled(FALSE);
         groupBoxPatient->setEnabled(FALSE);

         pushButton_ActiverMultiCritere->show();
         // ListView_Patient->setEnabled(TRUE);
         lineEditAutoLocator->setEnabled(TRUE);


         /*
         if (G_pCApp->IsThisDroitExist(droits, "idc"))
            {pushButtonDetruire->show();
             pushButtonDetruire->setEnabled(TRUE);
             pushButtonNew->show();
             pushButtonSavModif->show();
            }
         else
            {pushButtonDetruire->hide();
             pushButtonNew->hide();
             pushButtonSavModif->hide();
            }
         if (G_pCApp->IsThisDroitExist(droits, "idg"))
            {pushButtonAcceder->show();
             pushButtonAcceder->setEnabled(FALSE);
            }
         else
            {pushButtonAcceder->hide();
            }
        if (G_pCApp->IsThisDroitExist(droits, "idd"))
           {pushButtonDetruire->setEnabled(FALSE);
           }
        else
           {pushButtonDetruire->setEnabled(TRUE);
           }
         */
        }
     else if (mode == MODE_CREATION)
        {groupBoxPatient->setPaletteBackgroundColor ( m_CreateModeColor);
         groupBoxAssure->setPaletteBackgroundColor (  m_CreateModeColor);

         // ListView_Patient->setEnabled(FALSE);
         lineEditAutoLocator->setEnabled(FALSE);
         pushButtonDetruire->setEnabled(FALSE);
         pushButtonSavModif->hide();
         pushButtonNew->hide();
         pushButtonAcceder->hide();
         pushButtonDetruire->hide();
         ListView_Doublons->hide();
         pushButtonSavModif->hide();
         pushButton_ActiverMultiCritere->hide();
         pushButton_QuitterMultiCritere->hide();
         pushButton_Effacer->hide();

         //ListView_Vitale->show();                // la saisie de carte vitale est utile lors création
         groupBoxPatient->setEnabled(TRUE);
         groupBoxAssure->setEnabled(TRUE);
         tabWidgetNotes->setEnabled(TRUE);
         pushButtonCreate->show();
         pushButtonCancel->show();
         pushButtonCreate->setEnabled(TRUE);
         pushButtonCancel->setEnabled(TRUE);
        }
     else if (mode == MODE_SAISIE_MULTICRITERES)
        {groupBoxPatient->setPaletteBackgroundColor ( m_MulticritereModeColor);
         groupBoxAssure->setPaletteBackgroundColor  ( m_MulticritereModeColor);

         lineEditAutoLocator->setEnabled(FALSE);
         pushButtonDetruire->setEnabled(FALSE);
         pushButtonSavModif->hide();
         pushButtonNew->hide();
         pushButtonAcceder->hide();
         pushButtonDetruire->hide();
         pushButtonCreate->hide();
         pushButtonCancel->hide();

         ListView_Doublons->hide();
         ListView_Vitale->setEnabled(FALSE);
         pushButtonCreate->setEnabled(FALSE);
         pushButtonCancel->setEnabled(FALSE);

         pushButton_ActiverMultiCritere->show();
         pushButton_QuitterMultiCritere->show();
         pushButton_Effacer->show();

         // ListView_Patient->setEnabled(TRUE);
         groupBoxPatient->setEnabled(TRUE);
         groupBoxAssure->setEnabled(TRUE);
         tabWidgetNotes->setEnabled(FALSE);
        }
      m_GuiMode = mode;
    }
 else
    {pushButtonCreate->hide();
     pushButtonSavModif->hide();
     pushButtonCancel->hide();
     pushButtonAcceder->hide();
     pushButtonDetruire->hide();
     pushButtonNew->hide();
     pushButton_ActiverMultiCritere->hide();
     pushButton_QuitterMultiCritere->hide();
     pushButton_Effacer->hide();

     ListView_Doublons->hide();
     ListView_Vitale->hide();

     groupBoxPatient->hide();
     groupBoxAssure->hide();
     tabWidgetNotes->hide();
     m_GuiMode = MODE_NO_AUTHORIZED;
    }
}

//--------------------------------- SetInterfaceOnDroits -----------------------------------------------------------------------
//    #define MODE_SAISIE_EN_COURS      1
//    #define MODE_SAISIE NON_EN COURS  0
void  Wdg_Central::SetInterfaceOnDroits(const QString &droits, int mode)
{//-idv-idc-idg
 /*
 if (G_pCApp->IsThisDroitExist(droits, "idv"))
    {groupBoxPatient->show();
     groupBoxAssure->show();
     tabWidgetNotes->show();
    }
 else
    {groupBoxPatient->hide();
     groupBoxAssure->hide();
     tabWidgetNotes->hide();
    }
 */
 SetInterfaceOnMode(droits,  mode);
}
//----------------------------------------- setButtonOnContexte ----------------------------------------------------------------------
void Wdg_Central::setButtonOnContexte(int  )
{
}
//----------------------------------------- destroy ----------------------------------------------------------------------
void Wdg_Central::destroy()
{if (m_pCGestRPU)            delete m_pCGestRPU;
    if (m_pQtimerCheckState) delete m_pQtimerCheckState;
}

//----------------------------------------- tabWidget_Central_currentChanged ----------------------------------------------------------------------
void Wdg_Central::tabWidget_Central_currentChanged( QWidget *pageWidget )
{if (pageWidget==0) return;
    if (tabWidget_Central->tabLabel(pageWidget) == tr("&Moniteur"))
    {//qDebug(tabWidget_Central->tabLabel(pageWidget));
     if (m_MonitorIsInit == 0)
        {m_MonitorIsInit=1;
         CheckState( );
       }
    }
 else
    {m_MonitorIsInit = 0;
    }
}
    //=======================================================================================================================================
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////// ONGLET MONITEUR /////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //=======================================================================================================================================
    /*................. relever les dates de debut et fin ..................................*/
    /*
    QDate dateDeb  (QDate::currentDate());
    QDate dateFin  (QDate::currentDate());

    int jour, mois, annee;
    QString text = mle_debut_Mon->text();
    jour  = text.mid(0,2).toInt();
    mois  = text.mid(2,2).toInt();
    annee = text.mid(4,4).toInt();
    if (QDate::isValid ( annee, mois, jour ) ) dateDeb.setYMD (annee , mois  , jour);
    mle_debut_Mon->setText(dateDeb.toString("ddMMyyyy"));
    text  = mle_fin_Mon->text();
    jour  = text.mid(0,2).toInt();
    mois  = text.mid(2,2).toInt();
    annee = text.mid(4,4).toInt();
    if (QDate::isValid ( annee, mois, jour ) ) dateFin_Mon.setYMD (annee , mois  , jour);
    mle_fin->setText(dateFin_Mon.toString("ddMMyyyy"));

    //........................ la requete .....................................................................
    // les dates de la requete sont volontairement placées un jour avant et apres la fourchette de selection
    // car il peut arriver que certains dossiers soient créés après la garde et donc les heures strictement concernées
    // par la garde peuvent ne plus s'appliquer: exemple je vois le patient à 7h45 et apres la fin de garde (8h00)
    // par exemple à 9h je crée le dossier. Donc le test entre 8h la veille et 8h en fin de garde ne fonctionnerai
    // pas.
    QDate reqDateDeb = dateDeb.addDays(-1); QString reqDateDebStr = reqDateDeb.toString("yyyyMMdd");
    QDate reqDateFin = dateFin.addDays(+1); QString reqDateFinStr = reqDateFin.toString("yyyyMMdd");
    */
    //............... requete utilisant la base virtuelle .....................................................
    /*
 //................. DOSS_RUB_HEAD ............................
 QString      m_DOSS_RUB_HEAD_TBL_NAME;        // nom de la table de l'header des RUBRIQUES
 QString      m_DOSS_RUB_HEAD_PRIMKEY;         // clef primaire de cet enregistrement
 QString      m_DOSS_RUB_HEAD_GUID;            // GUID du dossier auquel l'enregistrement fait reference
 QString      m_DOSS_RUB_HEAD_REF_DOSS_PK;     // Clef primaire du dossier auquel l'enregistrement fait reference (doublon avec m_DOSS_RUB_HEAD_GUID)
 QString      m_DOSS_RUB_HEAD_NOM_DATE;        // Court texte descriptif de l'enregistrement.
 QString      m_DOSS_RUB_HEAD_DATE;            // date de l'enregistrement
 QString      m_DOSS_RUB_HEAD_DUREE;           // duree de l'enregistrement
 QString      m_DOSS_RUB_HEAD_TYPE;            // Type de rubrique
 QString      m_DOSS_RUB_HEAD_USER;            // utilisateur associé à rubrique

 //................. DOSS_RUB_DATA ............................
 QString      m_DOSS_RUB_DATA_TBL_NAME;        // nom de la table des données des RUBRIQUES
 QString      m_DOSS_RUB_DATA_PRIMKEY;         // clef primaire de cet enregistrement  (le meme que le header)
 QString      m_DOSS_RUB_DATA_BLOB;            // données binaires
 *//*
    if (m_pCMoteurBase->m_DataBase->isOpen()==FALSE && m_pCMoteurBase->m_DataBase->open()==FALSE)  return ;  // si point = erreur d'ouverture de la base
    QString requete("SELECT ");
    requete +=  m_pCMoteurBase->m_DOSS_RUB_HEAD_GUID     + "," +        // 0
                m_pCMoteurBase->m_DOSS_RUB_HEAD_PRIMKEY  + "," +        // 1
                m_pCMoteurBase->m_DOSS_RUB_HEAD_USER     + "," +        // 2
                m_pCMoteurBase->m_DOSS_RUB_HEAD_DATE     + " FROM  " +  // 3
                m_pCMoteurBase->m_DOSS_RUB_HEAD_TBL_NAME + " WHERE " +
                //m_pCMoteurBase->m_DOSS_RUB_HEAD_TYPE     + " = '20030000'";
                m_pCMoteurBase->m_DOSS_RUB_HEAD_TYPE     + " = '20030000' AND " +
                m_pCMoteurBase->m_DOSS_RUB_HEAD_DATE     + " >= '" + reqDateDebStr + "' AND " + m_pCMoteurBase->m_DOSS_RUB_HEAD_DATE + "<= '" + reqDateFinStr + "'";
    QSqlQuery query(requete , m_pCMoteurBase->m_DataBase );
    long  nbRecord       = 0;
    long  nbRecordTotal  = 0;

    */
//----------------------------------- pushButtonDateDeb_Mon_clicked() ----------------------------------
void Wdg_Central::pushButtonDateDeb_Mon_clicked()
    {   Dlg_Calendar          *dlg  = new Dlg_Calendar(this, "Calendar_Dial", TRUE, WStyle_Customize | WStyle_NormalBorder | WStyle_Title |WStyle_MinMax | WStyle_SysMenu);
        if (dlg ==0)                                                   return;
        dlg->setCaption(tr("Date de début"));
        dlg->move ( QCursor::pos().x(), QCursor::pos().y() );
        QString text = mle_deb_Mon->text();
        int jour, mois, annee;
        jour  = text.mid(0,2).toInt();
        mois  = text.mid(2,2).toInt();
        annee = text.mid(4,4).toInt();
        if (QDate::isValid ( annee, mois, jour ) )
           {dlg->setDate(QDate(annee, mois, jour));
           }
        if (dlg->exec()== QDialog::Accepted )
           {mle_deb_Mon->setText(dlg->getDate().toString("ddMMyyyy"));
           }
        delete dlg;
    }

//----------------------------------- pushButtonDateFin_Mon_clicked() ----------------------------------
void Wdg_Central::pushButtonDateFin_Mon_clicked()
{       Dlg_Calendar          *dlg  = new Dlg_Calendar(this, "Calendar_Dial", TRUE, WStyle_Customize | WStyle_NormalBorder | WStyle_Title |WStyle_MinMax | WStyle_SysMenu);
        if (dlg ==0)                                                   return;
        dlg->setCaption(tr("Date de fin"));
        dlg->move ( QCursor::pos().x(), QCursor::pos().y() );
        QString text = mle_fin_Mon->text();
        int jour, mois, annee;
        jour  = text.mid(0,2).toInt();
        mois  = text.mid(2,2).toInt();
        annee = text.mid(4,4).toInt();
        if (QDate::isValid ( annee, mois, jour ) )
        {dlg->setDate(QDate(annee, mois, jour));
        }
        if (dlg->exec()== QDialog::Accepted )
        {mle_fin_Mon->setText(dlg->getDate().toString("ddMMyyyy"));
        }
        delete dlg;
    }

//----------------------------------------- NaturalToSqlDate ------------------------------------------------------------------------
QString Wdg_Central::NaturalToSqlDate(const QString &inDate )    // 05061956
{char    *pt = (char*)(const char*) inDate;
 QString ret = "";
 if (pt)
    { while ( *pt ) if (*pt>='0'&&*pt<='9') {ret += *pt; ++pt;}   // eliminer tout ce qui n'est pas numérique '-' et autre '/'
      ret = ret.mid(4,4) + ret.mid(2,2) + ret.mid(0,2);
    }
 return ret;
}
//----------------------------------------- SqlDateToNatural ------------------------------------------------------------------------
QString Wdg_Central::SqlDateToNatural(const QString &inDate ) // 19560506
{ char    *pt = (char*)(const char*) inDate;
 QString ret = "";
 if (pt)
    { while ( *pt ) if (*pt>='0'&&*pt<='9') {ret += *pt; ++pt;}  // eliminer tout ce qui n'est pas numérique '-' et autre '/'
      ret= ret.mid(6,2) + ret.mid(4,2) + ret.mid(0,4);
    }
 return ret;
}

//----------------------------------------- pushButtonRaffraichir_clicked ------------------------------------------------------------------------
void Wdg_Central::pushButtonRaffraichir_clicked()
{makeListeMonitor();
}


//----------------------------------------- CheckState ------------------------------------------------------------------------
void Wdg_Central::CheckState( )
{    if (G_pCApp->m_pCMoteurBase->m_DataBase->isOpen()==FALSE && G_pCApp->m_pCMoteurBase->m_DataBase->open()==FALSE) return;
     QListViewItem *pQListViewItem =  ListView_Patient->currentItem ();
     if ( pQListViewItem != 0)
         {QString usedBy;
          if ( m_pCMoteurBase->IsDossierVerrouille(pQListViewItem->text(LIST_GUID), usedBy ))
            {pushButtonAcceder->setIconSet (m_Cadenas);
            }
          else
            {pushButtonAcceder->setIconSet (m_Standard);
            }
         }
     //...................... si page Moniteur active ...................................
     m_MonitorIsInit += 3;    // le timer est regle sur trois secondes
     if (m_MonitorIsInit >= spinBoxRafraichInterval->value () * 60)
        {if (checkBoxAutomaticRebuild->isChecked ()) makeListeMonitor();
         m_MonitorIsInit = 1;
        }
}

//----------------------------------------------- makeListeMonitor ---------------------------------------------------
void Wdg_Central::makeListeMonitor()
{        //QWidget *pageWidget =  tabWidget_Central->currentPage ();
         QString requete ="SELECT IndexNomPrenom.FchGnrl_NomDos, "
                          "IndexNomPrenom.FchGnrl_Prenom, "
                          "IndexNomPrenom.ID_PrimKey,"
                          "IndexNomPrenom.FchGnrl_IDDos"
                          " FROM RubriquesHead INNER JOIN IndexNomPrenom ON RubriquesHead.RbDate_IDDos=IndexNomPrenom.FchGnrl_IDDos WHERE RbDate_Date >= " +
                          NaturalToSqlDate(mle_deb_Mon->text())                     +
                          " AND RbDate_Date <= "                                    +
                          NaturalToSqlDate(mle_fin_Mon->text())                     +
                          " AND RbDate_TypeRub='20030000' AND RbDate_CreateUser= '" +
                          m_UserName                                                +
                          "' ORDER BY RbDate_Date";

            if (m_pCMoteurBase->OpenBase()==0)
               {QSqlQuery query(requete , m_pCMoteurBase->m_DataBase );
                if (query.isActive())
                   {ListView_MonitorPatient->clear();
                    while (query.next())
                           {new QListViewItem (ListView_MonitorPatient,
                                               CGestIni::Utf8_Query(query, 0 ),
                                               CGestIni::Utf8_Query(query, 1 ),
                                               CGestIni::Utf8_Query(query, 2 ),
                                               CGestIni::Utf8_Query(query, 3 )
                                              );
                           }
                  }
                else
                  {m_pCMoteurBase->OutSQL_error(query, "CheckState( )" , requete /*=0*/);
                  }
                m_pCMoteurBase->m_DataBase->close();
               }
}

//----------------------------------------------- ListView_MonitorPatient_doubleClicked ---------------------------------------------------
void Wdg_Central::ListView_MonitorPatient_doubleClicked( QListViewItem *pQListViewItem, const QPoint &, int )
{   if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idg")==0)
      {QMessageBox::warning ( this, tr("Lancement de dossier :"),
                                     tr( "Vos droits sont insuffisants pour lancer un dossier"),
                                     tr("&Annuler"),0, 0,
                                     1, 1
                                     );
       return;
      }
    if ( pQListViewItem == 0) return;
    AccederDossier(pQListViewItem->text(0),    // Nom assuré
                   pQListViewItem->text(1),    // Prenom assuré
                   pQListViewItem->text(2),    // numero PrimKey
                   pQListViewItem->text(3),    // GUID dossier
                   G_pCApp->m_User,            // login de l'utilisateur en cours
                   G_pCApp->m_SignUser);       // login de l'utilisateur signataire en cours
}

//-----------------------------------mle_debut_Mon_lostFocus()----------------------------------
void Wdg_Central::mle_debut_Mon_lostFocus()
{
        int jour, mois, annee;
        QDate dateDebut;

        if (mle_deb->text().length() == 8) {
            jour  = mle_deb->text().mid(0,2).toInt();
            mois  = mle_deb->text().mid(2,2).toInt();
            annee = mle_deb->text().mid(4,4).toInt();
            if ( dateDebut.setYMD( annee , mois , jour ) != true) {
                QMessageBox mb( tr("Date incohérente"),
                                tr("La date de début n'est pas correcte\n"),
                                QMessageBox::Critical,
                                QMessageBox::Ok | QMessageBox::Default,0,0);
                mb.exec();
                mle_deb->setFocus();
            } else {
                //lanceRecherche();
            }
        } else {
            //lanceRecherche();
        }
}


//-----------------------------------mle_fin_Mon_lostFocus()----------------------------------
void Wdg_Central::mle_fin_Mon_lostFocus()
{
        int jour, mois, annee;
        QDate dateFin;

        if (mle_fin->text().length() == 8) {
            jour  = mle_fin->text().mid(0,2).toInt();
            mois  = mle_fin->text().mid(2,2).toInt();
            annee = mle_fin->text().mid(4,4).toInt();
            if ( dateFin.setYMD( annee , mois , jour ) != true) {
                QMessageBox mb( tr("Date incohérente"),
                                tr("La date de fin n'est pas correcte\n"),
                                QMessageBox::Critical,
                                QMessageBox::Ok | QMessageBox::Default,0,0);
                mb.exec();
                mle_fin->setFocus();
            } else {
                //lanceRecherche();
            }
        } else {
            //lanceRecherche();
        }
}

//=======================================================================================================================================
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////// ONGLET IDENTIFICATION ///////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//=======================================================================================================================================

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////// LISTE PATIENT ///////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//---------------------------------------------- OnRendezVousAccederClicked -----------------------------------------------------------------------
void Wdg_Central::OnRendezVousAccederClicked(Wdg_RendezVous *pWdg_RendezVous)
{if (pushButtonCancel->isShown())                                     // return;
    {pushButtonCancel_clicked();
    }
 if (pushButton_QuitterMultiCritere->isShown())                       // return;    // mode multicritere active
    {Slot_QuitterMultiCritere_clicked ();
    }
 if (pWdg_RendezVous->m_pRendezVous->m_GUID.length()==0)               return;
        AccederDossier(pWdg_RendezVous->m_pRendezVous->m_Nom,        // Nom assuré
                       pWdg_RendezVous->m_pRendezVous->m_Prenom,     // Prenom assuré
                       m_pCMoteurBase->GetDossPrimKeyFromGUID(pWdg_RendezVous->m_pRendezVous->m_GUID),    // numero PrimKey
                       pWdg_RendezVous->m_pRendezVous->m_GUID,       // GUID dossier
                       G_pCApp->m_User,
                       G_pCApp->m_SignUser);                // Nom de l'utilisateur signataire
}

//----------------------------------------- setUser ------------------------------------------------------------------------
void Wdg_Central::setUser( const QString &userName, const QString &signUser)
{m_UserName = userName;
 m_SignUser = signUser;
}

//----------------------------------------------- closeEvent -------------------------------------------------------------
void Wdg_Central::closeEvent( QCloseEvent* ce )
{   //ce->accept();
    ce->ignore();

}
//--------------------------------- InitAllList ---------------------------------------------------------------------------
void Wdg_Central::InitAllList( const QString & qstr_nom, const QString & qstr_prenom)
{ if (m_pCMoteurBase==0)
    {textLabel_StateList->setText("InitAllList(): m_pCMoteurBase non initialisée");
        return;
    }
    m_pCMoteurBase->GetPatientList(ListView_Patient,
                                   qstr_nom,
                                   qstr_prenom,
                                   textLabel_StateList
                                   );
    m_pLastQListViewItem = 0;
}
// _____________________________________________________
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//--------------------------------- lineEditAutoLocator_textChanged -------------------------------------------------------------
void Wdg_Central::lineEditAutoLocator_textChanged( const QString &qstr_in )
{   QString nom;
    QString prenom;
    //.................. rechercher le separateur de nom ; prenom .......................
    int f = qstr_in.findRev( ';' );
    //................... si trouvé separer les deux chaines  ...........................
    if (f!=-1)
    {nom        = qstr_in.left(f);
        prenom     = qstr_in.right(qstr_in.length()-f-1);
    }
    else
    {nom        = qstr_in;
        prenom     = "";
    }
    InitAllList( nom, prenom);
    if (m_IdentIsClear==0)
       {ClearDialog(IDENT_NOCHANGE);
        groupBoxPatient->setEnabled(FALSE);
        groupBoxAssure->setEnabled(FALSE);
        tabWidgetNotes->setEnabled(FALSE);
        SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_DISABLED);
        pushButtonCreate->setEnabled(FALSE);
        pushButtonSavModif->setEnabled(FALSE);
        pushButtonCancel->setEnabled(FALSE);
        pushButtonAcceder->setEnabled(FALSE);
        pushButtonDetruire->setEnabled(FALSE);
       }
}

//--------------------------------- ListView_Patient_mouseButtonClicked -------------------------------------------------------------
void Wdg_Central::ListView_Patient_mouseButtonClicked( int, QListViewItem *qlistViewItem, const QPoint &, int )
{if (qlistViewItem<=0) return;
 if (pushButton_QuitterMultiCritere->isShown())
    {if (qlistViewItem) DataToFormulaire( qlistViewItem->text(LIST_ID_KEY), qlistViewItem->text(LIST_NOM), qlistViewItem->text(LIST_PRENOM));
     return; // liste inactive dans le mode multicritere
    }
 if (pushButtonCancel->isShown())               return; // liste inactive dans le mode creation

    groupBoxPatient->setEnabled(TRUE);
    groupBoxAssure->setEnabled(TRUE);
    tabWidgetNotes->setEnabled(TRUE);
    SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_ENABLED);
    ListView_Patient_selectionChanged( qlistViewItem );
    if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idg")) pushButtonAcceder->setEnabled(TRUE);
    //lineEdit_NomDossier->setFocus();
}


//--------------------------------- ListView_Patient_clicked -------------------------------------------------------------
void Wdg_Central::ListView_Patient_clicked( QListViewItem *)
{/*
 if (pushButton_QuitterMultiCritere->isShown()) return; // liste inactive dans le mode multicritere
 if (pushButtonCancel->isShown())               return; // liste inactive dans le mode creation
 if (qlistViewItem<=0) return;
    groupBoxPatient->setEnabled(TRUE);
    groupBoxAssure->setEnabled(TRUE);
    tabWidgetNotes->setEnabled(TRUE);
    SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_ENABLED);
    if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idg")) pushButtonAcceder->setEnabled(TRUE);
 */
}

//--------------------------------- ListView_Patient_selectionChanged -------------------------------------------------------------
void Wdg_Central::ListView_Patient_selectionChanged( QListViewItem *qlistViewItem )
{  if (qlistViewItem<=0)                          return;
   if (m_pLastQListViewItem == qlistViewItem)     return;
   if (pushButton_QuitterMultiCritere->isShown()) return; // liste inactive dans le mode multicritere
   if (pushButtonCancel->isShown())               return; // liste inactive dans le mode creation
   if (pushButtonSavModif->isEnabled() && G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idc"))
      {
       int ret   = QMessageBox::warning ( this, tr("Enregistrer les modifications :"),
                                     tr( "<u><b>ATTENTION :</u></b><br>&nbsp;&nbsp;&nbsp;le dossier :<br>&nbsp;&nbsp; <b><font color=\"#e80d0d\">") +
                                     G_pCApp->m_LastNom  + " " + G_pCApp->m_LastPrenom  +
                                     tr(  "</font></b>&nbsp;&nbsp; a été modifié, faut il enregistrer les modifications avant de sélectionner un autre dossier"),
                                     tr("&Modifier"), tr("Annu&ler"), 0,
                                     1, 1
                                     );
       if (ret==0)
          {pushButtonSavModif_clicked();
          }
      }
    m_pLastQListViewItem  = qlistViewItem;
    SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_ENABLED);
    QString usedBy;
    m_IsModifiable =  m_pCMoteurBase->IsDossierVerrouille( qlistViewItem->text(LIST_GUID), usedBy );
    DataToFormulaire( qlistViewItem->text(LIST_ID_KEY), qlistViewItem->text(LIST_NOM), qlistViewItem->text(LIST_PRENOM));
    m_IdentIsClear = 0;
}

//-------------------------------------- OnSign_NomKeyDown()------------------------------------
void Wdg_Central::OnSign_NomKeyDown()
{   QListViewItem *pQListViewItem =  ListView_Patient->currentItem ();
    if ( pQListViewItem == 0)                 return;
    if ( pQListViewItem->itemBelow () ==0 )   return;
    if (pushButton_QuitterMultiCritere->isShown()) return; // liste inactive dans le mode multicritere
    if (pushButtonCancel->isShown())               return; // liste inactive dans le mode creation

    pQListViewItem =  pQListViewItem->itemBelow ();
    ListView_Patient->setCurrentItem (pQListViewItem );
    ListView_Patient->ensureItemVisible ( pQListViewItem );
}

//-------------------------------------- OnSign_NomKeyUp()------------------------------------
void Wdg_Central::OnSign_NomKeyUp()
{QListViewItem *pQListViewItem =  ListView_Patient->currentItem ();
    if ( pQListViewItem == 0 )                  return;
    if ( pQListViewItem->itemAbove () ==0 )     return;
    if (pushButton_QuitterMultiCritere->isShown()) return; // liste inactive dans le mode multicritere
    if (pushButtonCancel->isShown())               return; // liste inactive dans le mode creation

    pQListViewItem = pQListViewItem->itemAbove ();
    ListView_Patient->setCurrentItem (pQListViewItem );
    ListView_Patient->ensureItemVisible ( pQListViewItem );;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////// IDENTITE ////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Wdg_Central::OnTextChanged_lineEdit_NomDossier(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_PremomDossier(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_NomDeNss(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_Titre(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_DtNss(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_Sexe(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_Profession(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_textEdit_Adresse()
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_Tel1(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_Tel2(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_Tel3(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_CdPostal(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEditVille(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_Email(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_NumSecu(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_NomAssure(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_PrenomAssure(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_textEdit_Note( )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_comboBoxSexe(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnActivated_comboBoxSexe(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
void Wdg_Central::OnTextChanged_lineEdit_RangGeme(const QString &/*text*/ )
{//if (ListView_Doublons->isShown()) return;
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}

//----------------------------------------- OnOutFocuslineEdit_DtNss ------------------------------------------------------------------------
void Wdg_Central::OnOutFocuslineEdit_DtNss()
{ // `HistN0_Date`  >=  "2001-05-19T11:09:40" AND `HistN0_Date`  <=  "2001-05-20T11:09:41";
    QString resolvToken("");
    QString        dtNss      = lineEdit_DtNss->text().mid(4)+lineEdit_DtNss->text().mid(2,2)+lineEdit_DtNss->text().mid(0,2);
    QDate        qDteNss(lineEdit_DtNss->text().mid(4,4).toInt(),
                         lineEdit_DtNss->text().mid(2,2).toInt(),
                         lineEdit_DtNss->text().mid(0,2).toInt()
                         );
    if (qDteNss.isValid () )
       {QString sAge = m_pCMoteurBase->CalculeDiffAge(&qDteNss, 0, TRUE, 0);
        /*textLabel_Age->setText(sAge); */ groupBoxPatient->setTitle(tr("Patient âgé de : ")+sAge);
        int i = 0; while (sAge[i]>='0' && sAge[i]<='9') ++i; sAge.truncate(i);
        int               age      = sAge.toInt();

        if (age < 15)          resolvToken="L'enfant";
        if (age >= 15 && age <= 21)
           { if (comboBoxSexe->currentItem()==1)      resolvToken="Mademoiselle";
             else                                     resolvToken="Monsieur";
           }
        if (age>21)
           {if (comboBoxSexe->currentItem()==1)       resolvToken="Madame";
            else                                      resolvToken="Monsieur";
           }
        lineEdit_Titre->setText(resolvToken);
       }
    else
       {/*textLabel_Age->setText(tr("Date de  naissance non valide")); */ groupBoxPatient->setTitle(tr("Patient avec une date de naissance non valide"));
        lineEdit_Titre->setText("");
       }
}
// ACTION: calcule l'age entre deux dates de début et de fin.
// ENTREE: QDate *pDebut: pointe sur une QDate de debut (exemple date de naissance)
//         QDate *pFin:   pointe sur une QDate de  fin (peut etre zero alors il sera pris la date en cours)
//         bool bTexte:   TRUE   alors la date sera exprimée comme: 4 ans 6 mois 3 jours
//                        FALSE  alors la date sera exprimée comme un chiffre
//         int bAbrege:   2  et alors seules les années seront sorties sous la forme: "0" ou "35" etc ...
//                        1  et alors seules les années seront sorties sous la forme: "0" ou "35" etc ...
//                        0  et alors les sorties seront detaillées avec si age<3 avec les mois et jours:
// QString CMoteurBase::CalculeDiffAge(QDate *pDebut, QDate *pFin/*=NULL*/, bool bTexte/*=TRUE*/, int bAbrege/*=1*/)



//--------------------------------- SetModifiableState -----------------------------------------------------------------------
void  Wdg_Central::SetModifiableState(int state)
{m_IsModifiable = state;
    if (m_IsModifiable)
    {   pushButtonSavModif->show();
        pushButton_AddMedTTT->show();
        pushButton_DelMedTTT->show();
    }
    else
    {   pushButtonSavModif->hide();
        pushButton_AddMedTTT->hide();
        pushButton_DelMedTTT->hide();
    }
}

//--------------------------------- ClearDialog -------------------------------------------------------------------------------------------
void Wdg_Central::ClearDialog(int mode)
{   lineEdit_NomAssure->clear();
    lineEdit_PrenomAssure->clear();
    lineEdit_NomDeNss->clear();
    textEdit_Adresse->clear();
    lineEdit_Tel1->clear();
    lineEdit_Tel2->clear();
    lineEdit_Tel3->clear();
    lineEdit_CdPostal->clear();
    lineEditVille->clear();
    //lineEdit_Sexe->clear();
    textLabel_NumDoss->clear();
    lineEdit_Email->clear();
    lineEdit_NomDossier->clear();
    lineEdit_PremomDossier->clear();
    lineEdit_Profession->clear();

    if (mode!=IDENT_ERASE_ALL)
       {QDateTime  dt ;
        dt.setTime_t(0);
        //....................... trucs speciaux ........................................
        QDate qDteNss =  dt.date () ;
        lineEdit_DtNss->setText(qDteNss.toString(QString("ddMMyyyy")));
       }
    else
       {lineEdit_DtNss->setText("");
        comboBoxSexe->setCurrentText ("");
        lineEdit_Titre->setText("");
        lineEdit_RangGeme->setText("");
       }
    lineEdit_NumSecu->clear();
    lineEdit_NssClef->clear();
    textEdit_Note->clear();
    listView_Praticiens->clear();
    m_IdentIsClear = 1;
    pushButtonSavModif->setEnabled(FALSE);
    //.......................... effacer dossier en cours ...........................
    G_pCApp->m_LastNom     ="";
    G_pCApp->m_LastPrenom  ="";
    G_pCApp->m_LastGUID    ="";
    G_pCApp->m_LastPK      ="";
    G_pCApp->m_LastTel     ="";
    if (mode==IDENT_SET_DISABLED)
       {groupBoxPatient->setEnabled(FALSE);
        groupBoxAssure->setEnabled(FALSE);
        tabWidgetNotes->setEnabled(FALSE);
        pushButtonCreate->setEnabled(FALSE);
        pushButtonSavModif->setEnabled(FALSE);
        pushButtonCancel->setEnabled(FALSE);
        pushButtonAcceder->setEnabled(FALSE);
        pushButtonDetruire->setEnabled(FALSE);
       }
    m_pLastQListViewItem = 0;
}

//--------------------------------- DataToFormulaire -------------------------------------------------------------
int Wdg_Central::DataToFormulaire( const QString &refToPrimkeyDoss, const QString &nom, const QString &prenom )
{/*
   QString      m_DOSS_IDENT_GUID;        // GUID du dossier auquel l'enregistrement fait reference
   QString      m_DOSS_IDENT_NSS ;        // date de naissance
   QString      m_DOSS_IDENT_SEX;         // sexe
   QString      m_DOSS_IDENT_JFNOM;       // nom de jeune fille
   QString      m_DOSS_IDENT_NB_ENF;      // nombre d'enfants
   QString      m_DOSS_IDENT_RUE;         // adresse
   QString      m_DOSS_IDENT_CODE_POST;   // Code postal
   QString      m_DOSS_IDENT_VILLE;       // Ville
   QString      m_DOSS_IDENT_CEDEX;       // cedex
   QString      m_DOSS_IDENT_PAYS;        // pays
   QString      m_DOSS_IDENT_TEL1;        // Telephone 1
   QString      m_DOSS_IDENT_TEL2;        // Telephone 2
   QString      m_DOSS_IDENT_TEL3;        // Telephone 3
   QString      m_DOSS_IDENT_TEL1_TYP;    // Telephone 1  type (parent amis etc...)
   QString      m_DOSS_IDENT_TEL2_TYP;    // Telephone 2
   QString      m_DOSS_IDENT_TEL3_TYP;    // Telephone 3
   QString      m_DOSS_IDENT_NUMSS;       // Numéro de secu
   QString      m_DOSS_IDENT_EMAIL;       // Numéro de secu
   QString      m_DOSS_IDENT_IS_ASS;      // le patient est il l'assuré
   QString      m_DOSS_IDENT_NOM_ASS;     // nom de l'assuré
   QString      m_DOSS_IDENT_PRENOM_ASS;  // prénom de l'assuré
   QString      m_DOSS_IDENT_PROF;        // profession
   QString      m_DOSS_IDENT_TITRE;       // Titre( Dr Mr Md Pr ...)
   QString      m_DOSS_IDENT_REF_PK;      // reference à la primary key: DOSS_INDEX_PRIM_KEY de la table: DOSS_INDEX
*/
    //............................... recuperer les notes ............................................
    QString data;
    m_pCMoteurBase->PatientNoteGetData(refToPrimkeyDoss ,  data);
    textEdit_Note->setText(data);
    m_pCMoteurBase->PatientIntervenantsGetData(refToPrimkeyDoss , listView_Praticiens);
    //............... chaines d'erreurs  ..................................................
    if  (m_pCMoteurBase->OpenBase()==0) return 0;

    //............... crer un curseur SQL ..................................................
    QString requete  = QString( "SELECT ");
            requete += m_pCMoteurBase->m_DOSS_IDENT_NOM_ASS          + ", " +       // 0
                       m_pCMoteurBase->m_DOSS_IDENT_PRENOM_ASS       + ", " +       // 1
                       m_pCMoteurBase->m_DOSS_IDENT_RUE              + ", " +       // 2
                       m_pCMoteurBase->m_DOSS_IDENT_TEL1             + ", " +       // 3
                       m_pCMoteurBase->m_DOSS_IDENT_TEL2             + ", " +       // 4
                       m_pCMoteurBase->m_DOSS_IDENT_TEL3             + ", " +       // 5
                       m_pCMoteurBase->m_DOSS_IDENT_EMAIL            + ", " +       // 6
                       m_pCMoteurBase->m_DOSS_IDENT_CODE_POST        + ", " +       // 7
                       m_pCMoteurBase->m_DOSS_IDENT_VILLE            + ", " +       // 8
                       m_pCMoteurBase->m_DOSS_IDENT_SEX              + ", " +       // 9
                       m_pCMoteurBase->m_DOSS_IDENT_GUID             + ", " +       // 10
                       m_pCMoteurBase->m_DOSS_IDENT_JFNOM            + ", " +       // 11
                       m_pCMoteurBase->m_DOSS_IDENT_TITRE            + ", " +       // 12
                       m_pCMoteurBase->m_DOSS_IDENT_PROF             + ", " +       // 13
                       m_pCMoteurBase->m_DOSS_IDENT_NSS              + ", " +       // 14
                       m_pCMoteurBase->m_DOSS_IDENT_NUMSS            + ", " +       // 15
                       m_pCMoteurBase->m_DOSS_IDENT_IS_ASS           + ", " +       // 16
                       m_pCMoteurBase->m_DOSS_IDENT_GEME             + " FROM "  +  // 17
                       m_pCMoteurBase->m_DOSS_IDENT_TBL_NAME         + " WHERE " +
                       m_pCMoteurBase->m_DOSS_IDENT_REF_PK           + " = '"    + refToPrimkeyDoss + "';";

    QSqlQuery query( requete  , m_pCMoteurBase->m_DataBase );                     // ouvrir un curseur sur la table
    if ( query.isActive() && query.next())
       {
        lineEdit_NomAssure->setText(       CGestIni::Utf8_Query(query , 0)      );
        lineEdit_PrenomAssure->setText(    CGestIni::Utf8_Query(query , 1)      );
        lineEdit_NomDossier->setText(nom);
        lineEdit_PremomDossier->setText(prenom);
        textEdit_Adresse->setText(         CGestIni::Utf8_Query(query , 2)      );
        lineEdit_Tel1->setText(            ToNum(query.value( 3).toString())    );
        lineEdit_Tel2->setText(            ToNum(query.value( 4).toString())    );
        lineEdit_Tel3->setText(            ToNum(query.value( 5).toString())    );
        lineEdit_Email->setText(           CGestIni::Utf8_Query(query , 6)      );
        lineEdit_CdPostal->setText(        ToNum(query.value( 7).toString())    );
        lineEditVille->setText(            CGestIni::Utf8_Query(query , 8)      );

        QString sexe                       =    CGestIni::Utf8_Query(query , 9)    ;
        if       (sexe.left(1).lower() == "m")  comboBoxSexe->setCurrentItem ( 0 ) ;
        else  if (sexe.left(1).lower() == "f")  comboBoxSexe->setCurrentItem ( 1 ) ;
        else                                    comboBoxSexe->setCurrentItem ( 2 ) ;
        lineEdit_RangGeme->setText(        query.value( 17).toString()          );

        //lineEdit_Sexe->setText(            CGestIni::Utf8_Query(query , 9)      );
        textLabel_NumDoss->setText(        CGestIni::Utf8_Query(query , 10)     );
        lineEdit_NomDeNss->setText(        CGestIni::Utf8_Query(query , 11)     );
        lineEdit_Titre->setText(           CGestIni::Utf8_Query(query , 12)     );
        lineEdit_Profession->setText(      CGestIni::Utf8_Query(query , 13)     );

        //....................... trucs speciaux ........................................
        QDate qDteNss =                  query.value( 14).toDate();
        lineEdit_DtNss->setText(qDteNss.toString(QString("ddMMyyyy")));
        if (qDteNss.isValid()) /*textLabel_Age->setText(m_pCMoteurBase->CalculeDiffAge(&qDteNss, 0, TRUE, 0)); */  groupBoxPatient->setTitle(tr("Patient âgé de : ") + m_pCMoteurBase->CalculeDiffAge(&qDteNss, 0, TRUE, 0));
        else                   /*textLabel_Age->setText(tr("Date de naissance non valide"));                   */  groupBoxPatient->setTitle(tr("Patient avec une date de naissance non valide"));
        QString   nss =                  query.value( 15).toString();
        lineEdit_NumSecu->setText( nss.left(13)  );
        lineEdit_NssClef->setText( nss.mid(13)   );
        //.............. qualite assure ..........................
        int qualiteAssure = query.value( 16).toInt()-1;   // 0 l'assuré est le patient  (1 moins 1)
        if (qualiteAssure < 0) qualiteAssure = 9;
        if (qualiteAssure > 9) qualiteAssure = 9;
        comboBoxQualiteAyantDroit->setCurrentItem(qualiteAssure);
        Test_comboBoxQualiteAyantDroit(qualiteAssure, 0);

        QString usedBy;
        if ( m_pCMoteurBase->IsDossierVerrouille( textLabel_NumDoss->text(), usedBy ))
           {pushButtonAcceder->setIconSet (m_Cadenas);
           }
        else
           {pushButtonAcceder->setIconSet (m_Standard);
           }
        m_pCMoteurBase->CloseBase();
        G_pCApp->m_LastNom                   = lineEdit_NomDossier->text();
        G_pCApp->m_LastPrenom                = lineEdit_PremomDossier->text();
        G_pCApp->m_LastGUID                  = textLabel_NumDoss->text();
        G_pCApp->m_LastPK                    = refToPrimkeyDoss;
        G_pCApp->m_LastTel                   = lineEdit_Tel1->text();
        m_IdentIsClear                       = 0;
        pushButtonSavModif->setEnabled(FALSE);
        return 1;
    }
 else
    {   m_pCMoteurBase->OutSQL_error(query);
        m_pCMoteurBase->CloseBase();
        pushButtonSavModif->setEnabled(FALSE);
        return 0;
    }
}

//--------------------------------- OnActivated_comboBoxQualiteAyantDroit ---------------------------------------------------------------------------------
void  Wdg_Central::OnActivated_comboBoxQualiteAyantDroit( int qualiteAssure)
{Test_comboBoxQualiteAyantDroit(qualiteAssure, 1);
}

//--------------------------------- Test_comboBoxQualiteAyantDroit ---------------------------------------------------------------------------------
void  Wdg_Central::Test_comboBoxQualiteAyantDroit( int qualiteAssure, int focusMustBePotionned)
{if (qualiteAssure ==0)
    {lineEdit_NomAssure->setEnabled(FALSE);
     lineEdit_PrenomAssure->setEnabled(FALSE);
    }
 else
    {lineEdit_NomAssure->setEnabled(TRUE);
     lineEdit_PrenomAssure->setEnabled(TRUE);
     if (lineEdit_NumSecu->text().length()==13 && focusMustBePotionned)      lineEdit_NomAssure->setFocus();
     if (lineEdit_NomAssure->text().stripWhiteSpace().length()==0)           lineEdit_NomAssure->setText(lineEdit_NomDossier->text());
     if (lineEdit_PrenomAssure->text().stripWhiteSpace().length()==0)        lineEdit_NomAssure->setText(lineEdit_PremomDossier->text());
    }
 m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
}
//--------------------------------- ToNum ---------------------------------------------------------------------------------
QString Wdg_Central::ToNum(QString in)
{for(uint i=0; i<in.length(); )
    {if (in.at(i)<'0' || in.at(i)>'9') in.remove(i,1);
        else ++i;
    }
    return in;
}

//--------------------------------- OnInFocusNumSecu -----------------------------------------------------------------------
void  Wdg_Central::OnInFocusNumSecu()
{QString numsecu = lineEdit_NumSecu->text();  //18105m_IsModifiable = 0;

    if (numsecu.length()==0)
    {    if (comboBoxSexe->currentItem() != 1)  numsecu += "1";
         else                                   numsecu += "2";
         QString dtnss = lineEdit_DtNss->text();
         if (dtnss.length()==8)
         {numsecu += dtnss.mid(6);
          numsecu += dtnss.mid(2,2);
         }
         lineEdit_NumSecu->setText(numsecu);
         lineEdit_NumSecu->setCursorPosition (numsecu.length()+1);
    }
}

//--------------------------------- OnOutFocusNumSecu -------------------------------------------------------------
void  Wdg_Central::OnOutFocusNumSecu()
{QString numsecu = lineEdit_NumSecu->text();  //18105
    if (numsecu.length()==13)
    {lineEdit_NssClef->setText(ComputeClef_Secu(numsecu));
    }
    else
    {lineEdit_NssClef->clear();
    }

    QString leftNumSecu("");
    if (comboBoxSexe->currentItem() != 1) leftNumSecu += "1";
    else                                  leftNumSecu += "2";
    QString dtnss = lineEdit_DtNss->text();
    if (dtnss.length()==8)
    {   leftNumSecu += dtnss.mid(6);
        leftNumSecu += dtnss.mid(2,2);
    }
    if (numsecu.length()>=5 && leftNumSecu.length()>=5 && leftNumSecu != numsecu.left(5))
       {//checkBox_IsNotPatient->setChecked (TRUE) ;   // l'assuré n'est pas le patient
        if (comboBoxQualiteAyantDroit->currentItem()==0) comboBoxQualiteAyantDroit->setCurrentItem(9);  // autre ayant droit
        //OnActivated_comboBoxQualiteAyantDroit(1);
        lineEdit_NomAssure->setEnabled(TRUE);
        lineEdit_PrenomAssure->setEnabled(TRUE);
        if (lineEdit_NomAssure->text()=="")     lineEdit_NomAssure->setText(lineEdit_NomDossier->text());
        if (numsecu.length()==13)
           {lineEdit_NomAssure->setFocus();
            lineEdit_NomAssure->setCursorPosition (-1);
           }
      }
    else
       {//checkBox_IsNotPatient->setChecked (FALSE) ;   // l'assuré est le patient
        comboBoxQualiteAyantDroit->setCurrentItem(0);
        lineEdit_NomAssure->setEnabled(FALSE);
        lineEdit_PrenomAssure->setEnabled(FALSE);
       }
}

//--------------------------------- OnOutFocusVille -----------------------------------------------------------------------
void  Wdg_Central::OnOutFocusVille()
{if (m_pCMoteurBase==0) return;
    QString codePostal("");
    QString ville = lineEditVille->text().stripWhiteSpace();
    //.......... si pas de ville saisie on tente avec le code postal .........................
    if (ville.length()==0)
    {OnOutFocusCodePostal();
        return;
    }
    //............... chercher liste de codepostaux pouvant correspondre à cette ville .............
    QStringList codePostalList;
    m_pCMoteurBase->GetCodePostalFromVille( ville.replace("SAINT ","ST "),  codePostalList);
    if (codePostalList.findIndex ( lineEdit_CdPostal->text()+" "+lineEditVille->text() ) != -1 ) return;

    int nb = codePostalList.count();
    if (nb==1)
    {codePostal = codePostalList[0];
    }
    else if (nb>1 && nb<35 )
    {
        codePostal = DoPopupList(codePostalList, lineEditVille->x(), lineEditVille->y());
    }
    //............ separer la ville du code postal ...................................................
    int pos = codePostal.find(' ');
    if (pos != -1)
    {ville      = codePostal.mid(pos+1);
        codePostal = codePostal.left(pos);
    }
    if (//lineEdit_CdPostal->text().length()<5           ||                               // si code postal incomplet
            (codePostal.length()!=0 /*&& lineEdit_CdPostal->text() != codePostal */)            // ou non conforme avec celui de la ville
            )
    {lineEdit_CdPostal->setText(codePostal );                                        // placer celui de la ville
        lineEditVille->setText(ville);
        return;
    }

    //.............. si pas de code postal trouvé pour cette ville tenter de placer la ville du code postal .............
    if (codePostal.length()==0 )
    {ville = m_pCMoteurBase->GetVilleFromCodePostal(lineEdit_CdPostal->text());
        if (ville.length()!=0) lineEditVille->setText(ville);
    }
}

//--------------------------------- OnOutFocusCodePostal -------------------------------------------------------------
void  Wdg_Central::OnOutFocusCodePostal()
{if (m_pCMoteurBase==0) return;
    QStringList villeList;
    if (lineEdit_CdPostal->text().length()==5)
    {m_pCMoteurBase->GetVilleFromCodePostal(lineEdit_CdPostal->text(), villeList);
        int nb = villeList.count();
        if (nb==1)
        {lineEditVille->setText(villeList[0]);
        }
        else if (nb>1 && nb<35 )
        {if (villeList.findIndex ( lineEditVille->text()) == -1 )  // si la ville ne correspond pas au code postal
            {QString ville = DoPopupList(villeList, lineEdit_CdPostal->x(), lineEdit_CdPostal->y());
             if (ville.length()>0) lineEditVille->setText(ville);
            }
        }
    }
    else
    {lineEditVille->clear();
    }
}

//--------------------------------- DoPopupList ----------------------------------------------------------------------
QString Wdg_Central::DoPopupList(QStringList &list, int x ,int y)
{m_CurrentPopupItem = "";
    m_RetPopupItem     = "";
    if (m_pQPopupMenu) return m_RetPopupItem;
    m_pQPopupMenu      = new QPopupMenu(0, "MyPopupMenu" );
    if (m_pQPopupMenu==0)       return m_RetPopupItem;
    //............................... chercher une zone de liste deroulante (bleue) .....................
    for ( QStringList::Iterator it =list.begin(); it != list.end(); ++it )
    {m_pQPopupMenu->insertItem( *(it),    this, SLOT( GetPopupItem()),  CTRL+Key_L );
    }
    //................. connecter le menu .................................................................
    connect( m_pQPopupMenu, SIGNAL( activated( int)),
             this,          SLOT(OnMenuActivated( int))
             );

    m_pQPopupMenu->exec(mapToGlobal (QPoint ( x, y)));
    delete  m_pQPopupMenu;
    m_pQPopupMenu = 0;
    return  m_RetPopupItem;
}

//--------------------------------- OnMenuActivated  -------------------------------------------------------------
void Wdg_Central::OnMenuActivated (int id)
{if (id != -1 && m_pQPopupMenu)
    {m_CurrentPopupItem = m_pQPopupMenu->text(id);
    }
}

//--------------------------------- GetPopupItem  -------------------------------------------------------------
void Wdg_Central::GetPopupItem ()
{m_RetPopupItem  = m_CurrentPopupItem;
}

//--------------------------------- OnCharEventCodePostal -------------------------------------------------------------
void  Wdg_Central::OnCharEventCodePostal(QEvent* )
{OnOutFocusCodePostal();
}

//--------------------------------- OnCharEventNumSecu-------------------------------------------------------------
void  Wdg_Central::OnCharEventNumSecu(QEvent * )
{OnOutFocusNumSecu();
}

/*--------------------------------- ComputeClef_Secu ----------------------------*/
QString Wdg_Central::ComputeClef_Secu(const char *txt)
{return m_pCMoteurBase->ComputeClef_Secu(txt);
}

//--------------------------------- VitaleNew_clicked ----------------------------------------------------------------------------------------------
void Wdg_Central::VitaleNew_clicked()
{
    ClearDialog(IDENT_NOCHANGE);
    //................... se mettre en mode creation .................................
    textLabel_NumDoss->setText(m_pCMoteurBase->GUID_Create());
    SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_CREATION);
    lineEdit_NomDossier->setFocus();
}

//--------------------------------- pushButtonNew_clicked ----------------------------------------------------------------------------------------------
void Wdg_Central::pushButtonNew_clicked()
{   /*
    QListViewItem* pQListViewItem_V = ListView_Vitale->selectedItem ();
    QListViewItem* pQListViewItem_P = ListView_Patient->selectedItem ();
    QStringList list;
    if (pQListViewItem_P)
       {QString str = lineEdit_NomDossier->text().stripWhiteSpace()+" "+lineEdit_PremomDossier->text().stripWhiteSpace();
        if (str.length()>1) list.append(tr("Créer un nouveau patient en se servant des données de : ") + str);
       }
    if (pQListViewItem_V)
       {list.append(tr("Utiliser les données sélectionnées de la carte Vitale en cours : ")+pQListViewItem_V->text(0)+" "+pQListViewItem_V->text(1));
       }
    if (list.count())
       {list.prepend(tr("Partir d'une fiche vierge pour créer un nouveau patient"));
       }
    if (list.count())
       {QString ret = G_pCApp->DoPopupList(list);
        if (ret[0]=='C')
           {textEdit_Note->clear();
            listView_Praticiens->clear();
           }
        else if (ret[0]=='U')
           {setInterfaceOnVitaleData(G_pCApp->m_pVitale, pQListViewItem_V->text(8).toInt());
            textEdit_Note->clear();
            listView_Praticiens->clear();
           }
        else if (ret[0]=='P')
           {ClearDialog(IDENT_NOCHANGE);
           }
        else
           {return;
           }
       }
    else  */
       {ClearDialog(IDENT_NOCHANGE);
       }

    G_pCApp->m_LastNom     ="";
    G_pCApp->m_LastPrenom  ="";
    G_pCApp->m_LastGUID    ="";
    G_pCApp->m_LastPK      ="";
    G_pCApp->m_LastTel     ="";

    //................... se mettre en mode creation .................................
    textLabel_NumDoss->setText(m_pCMoteurBase->GUID_Create());
    SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_CREATION);
    lineEdit_NomDossier->setFocus();
}

//--------------------------------- pushButtonCancel_clicked ----------------------------------------------------------------------------------------------
void Wdg_Central::pushButtonCancel_clicked()
{   ClearDialog(IDENT_SET_DISABLED);
    SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_DISABLED);
    lineEditAutoLocator->setFocus();
}

//--------------------------------- setInterfaceOnVitaleData ----------------------------------------------------------------------------------------------
void Wdg_Central::setInterfaceOnVitaleData(void *pcvitale_in, int occurence)
{
#ifdef COMMERCIAL_VERSION
        if (pcvitale_in==0) return;
        C_Vitale  *pcVitale = (C_Vitale*) pcvitale_in;

        //.............. nom prenom patient ...........................
        lineEdit_NomDossier->setText(      pcVitale->GetMember(1,  104, occurence));
        lineEdit_PremomDossier->setText(   pcVitale->GetMember(3,  104, occurence));

        //.............. adresse ...........................
        QString adresse = pcVitale->GetAdresseAyanDroit(occurence);
        if (textEdit_Adresse->text().length()==0 ||       // si adresse determine et pas mode creation alors ne pas y toucher car la CV peut etre non renseignee
            pushButtonCreate->isShown()
           ) textEdit_Adresse->setText(         adresse       );

        //lineEdit_Tel1->setText(            ToNum(query.value( 3).toString())    );
        //lineEdit_Tel2->setText(            ToNum(query.value( 4).toString())    );
        //lineEdit_Tel3->setText(            ToNum(query.value( 5).toString())    );
        //lineEdit_Email->setText(           CGestIni::Utf8_Query(query , 6)      );
        //.............. code postal ville ...........................
        QString codePostLocalite = pcVitale->GetMember(8,  104, occurence);
        if (lineEdit_CdPostal->text().toInt()==0 ||       // si codePostal determine et pas mode creation alors ne pas y toucher car la CV peut etre non renseignee
            pushButtonCreate->isShown()
           ) lineEdit_CdPostal->setText(        codePostLocalite.left(5) );
        if (lineEditVille->text().length()==0 ||           // si ville determine et pas mode creation alors ne pas y toucher car la CV peut etre non renseignee
            pushButtonCreate->isShown()
           ) lineEditVille->setText(            codePostLocalite.mid(6)  );

        //QString sexe                  =    CGestIni::Utf8_Query(query , 9)       ;
        //if (sexe.left(1).lower() == "m")   comboBoxSexe->setCurrentItem ( 0 ) ;
        //else                               comboBoxSexe->setCurrentItem ( 1 ) ;
        //.............. rang gemellaire ...........................
        QString rangGem  = pcVitale->GetMember(13,  104, occurence);
        if (rangGem.length()==0) rangGem = rangGem.prepend("0");
        if (rangGem.length()==1) rangGem = rangGem.prepend("0");
        lineEdit_RangGeme->setText( rangGem );

        //lineEdit_Sexe->setText(            CGestIni::Utf8_Query(query , 9)      );
        //textLabel_NumDoss->setText(        CGestIni::Utf8_Query(query , 10)     );
        if (lineEdit_NomDeNss->text().length()==0 ||           // si ville determine et pas mode creation alors ne pas y toucher car la CV peut etre non renseignee
            pushButtonCreate->isShown()
           )lineEdit_NomDeNss->setText(        pcVitale->GetMember(2,  104, occurence)     );
        //lineEdit_Titre->setText(           CGestIni::Utf8_Query(query , 12)     );
        //lineEdit_Profession->setText(      CGestIni::Utf8_Query(query , 13)     );
        //.......................... ayant droit ........................................
        int qualiteAyantDroit = pcVitale->GetMember(14,  104, occurence).toInt();
        comboBoxQualiteAyantDroit->setCurrentItem ( qualiteAyantDroit );
        Test_comboBoxQualiteAyantDroit( qualiteAyantDroit, 0 );
        //............. rechercher l'assure .............................................
        int last_occurence = pcVitale->GetNbOccurences(104) + 1;
        int i;
        for (i=1; i<last_occurence; ++i)
            {if (pcVitale->GetMember(14,  104, i).toInt()==0)    //  qualite ayant-droit si zero c'est l'assure
                {lineEdit_NomAssure->setText(       pcVitale->GetMember(1,  104, i)      );   // recuperer son nom
                 lineEdit_PrenomAssure->setText(    pcVitale->GetMember(3,  104, i)      );   // recuperer son prenom
                 //............ si adresse ayant droit est non définie ..............................
                 //             proposer celle de l'assure
                 if (adresse.stripWhiteSpace().length()==0)
                    {adresse =pcVitale->GetAdresseAyanDroit(i) ;
                     if (textEdit_Adresse->text().length()==0 ||       // si adresse determine et pas mode creation alors ne pas y toucher car la CV peut etre non renseignee
                         pushButtonCreate->isShown()
                        )textEdit_Adresse->setText(adresse);
                     codePostLocalite = pcVitale->GetMember(8,  104, i);
                     if (lineEdit_CdPostal->text().toInt()==0 ||       // si codePostal determine et pas mode creation alors ne pas y toucher car la CV peut etre non renseignee
                         pushButtonCreate->isShown()
                        )lineEdit_CdPostal->setText(        codePostLocalite.left(5) );
                     if (lineEditVille->text().length()==0 ||           // si ville determine et pas mode creation alors ne pas y toucher car la CV peut etre non renseignee
                         pushButtonCreate->isShown()
                        )lineEditVille->setText(            codePostLocalite.mid(6)  );
                    }
                 break;
                }
            }

        //....................... trucs speciaux ........................................
        QString qDteNss =    pcVitale->GetMember(12, 104, occurence);                   // 199306010000
                qDteNss =    qDteNss.mid(6,2)+qDteNss.mid(4,2)+qDteNss.mid(0,4);        // 01061993
        lineEdit_DtNss->setText(qDteNss);
        int jour, mois, annee;
        jour  = qDteNss.mid(0,2).toInt();
        mois  = qDteNss.mid(2,2).toInt();
        annee = qDteNss.mid(4,4).toInt();
        if (QDate::isValid ( annee, mois, jour ) )
           {QDate dt(annee, mois, jour);
            /*textLabel_Age->setText(m_pCMoteurBase->CalculeDiffAge(&dt, 0, TRUE, 0)); */ groupBoxPatient->setTitle(tr("Patient âgé de : ")+m_pCMoteurBase->CalculeDiffAge(&dt, 0, TRUE, 0));
           }
        else
           { /*textLabel_Age->setText(tr("Date de naissance non valide")); */ groupBoxPatient->setTitle(tr("Patient avec une date de naissance non valide"));
            lineEdit_Titre->setText("");
           }
        //....................... numero secu ........................................
        QString   nss =  pcVitale->GetMember(8,  101, 1);
        lineEdit_NumSecu->setText(nss);
        lineEdit_NssClef->setText(CMoteurBase::ComputeClef_Secu(nss));
        //................ sexe ......................................................
        if (comboBoxSexe->currentItem()==2 ||       // si sexe determine et pas mode creation alors ne pas toucher au sexe
            pushButtonCreate->isShown()
           ) SetSexFromQualiteAyantDroit(qualiteAyantDroit);

#endif
}

//--------------------------------- SetSexFromQualiteAyantDroit -------------------------------------------------------------
int Wdg_Central::SetSexFromQualiteAyantDroit(int qualiteAyantDroit)
{       QString nss =  lineEdit_NumSecu->text();
        switch(qualiteAyantDroit)
              {case 0:    // assure
                        {if (nss[0]=='1')  comboBoxSexe->setCurrentItem ( 0 ) ;
                         else              comboBoxSexe->setCurrentItem ( 1 ) ;
                         OnOutFocuslineEdit_DtNss();  // regler le TITRE
                        } break;
               case 2:   // conjoint
               case 3:   // conjoint divorcé
               case 4:   // concubin
               case 5:   // conjoint separe
               case 7:   // conjoint veuf
                        {if (nss[0]=='1')  comboBoxSexe->setCurrentItem ( 1 ) ;
                         else              comboBoxSexe->setCurrentItem ( 0 ) ;
                          OnOutFocuslineEdit_DtNss();  // regler le TITRE
                        } break;
               default: {lineEdit_Titre->setText("");
                         comboBoxSexe->setCurrentItem ( 2 ) ;
                        } break;
              }
    return comboBoxSexe->currentItem();
}

//--------------------------------- pushButtonCreate_clicked -------------------------------------------------------------
void Wdg_Central::pushButtonCreate_clicked()
{   QString nom        = lineEdit_NomDossier->text().stripWhiteSpace () ;
    QString prenom     = lineEdit_PremomDossier->text().stripWhiteSpace () ;
    QString numGUID    = textLabel_NumDoss->text();
    if (nom == "") nom = tr("ANONYME");
    //.............. rechercher les doublons ....................
     QString  dnss     = lineEdit_DtNss->text();                      //  05061956
     if (dnss.length()==8) dnss = dnss.mid(4,4)+"-"+dnss.mid(2,2)+"-"+dnss.mid(0,2)+" 00:00:00";
     else                  dnss = "";
     QString numSecu  = lineEdit_NumSecu->text();
     if (numSecu.length()==13) numSecu += CMoteurBase::ComputeClef_Secu(numSecu).stripWhiteSpace();
     else if (numSecu.length()==0) numSecu  = "";
     else                          numSecu += "%";

    int nb = G_pCApp->m_pCMoteurBase->GetPatientListFromNomPrenomSecuDtNssGeme( ListView_Patient,
                                                                                nom,                         // nom
                                                                                prenom,                      // prenom
                                                                                dnss,                        // date Nss // doit etre 1993-06-01 00:00:00
                                                                                numSecu,              // num secu // 160196296519557
                                                                              "",                     // rang gemellaire
                                                                              "",     // qualite d'ayant droit
                                                                              "",      //  adresse,
                                                                              "",      //  codePost,
                                                                              "",      //  ville,
                                                                              "",      //  sexe,
                                                                              "",      //  profession,
                                                                              "",      //  nomJfille
                                                                              "",      //  nomAss,
                                                                              "",      //  prenomAss,
                                                                              "",      //  tel1,
                                                                              "",      //  tel2,
                                                                              "",      //  tel3,
                                                                              "",      //  email,
                                                                              " = ",   //  egal_like  " = ",
                                                                              textLabel_StateList
                                                                            );
    if (nb)
       {      QString  message  = tr(  "<b><font color=\"#e80d0d\">DOUBLONS POSSIBLES </font></b>")                         +
                                  tr(  "<hr><br> La personne : <b><font color=\"#1200ff\">") + nom + " " +   prenom         + "</font></b>";
               if (dnss.length())
                       message += tr(  "<br> née le : <b><font color=\"#1200ff\">" )         + dnss                         + "</font></b>";
               if (lineEdit_CdPostal->text().toInt() !=0)
                       message += tr(  "<br> ayant pour code postal  : <b><font color=\"#1200ff\">")     + lineEdit_CdPostal->text()    + "</font></b>";
               if (numSecu.length())
                       message += tr(  "<br> ayant pour numéro de SS : <b><font color=\"#1200ff\">")     + numSecu                      + "</font></b><br>";
                       message += tr(  "<hr><br> présente des similitudes avec les dossiers présents dans la liste des dossiers ");
                       message += tr(  "<br><hr>confirmez-vous tout de même cette opération au risque de créer un doublon ?");
              int sel = QMessageBox::information( this, tr("Doublons possibles"), message
 ,
                                                  //"&nbsp;&nbsp;&nbsp;&nbsp; ° <b>Quitter pour <u>Annuler</u></b> l'opération en cours" ) ,
                                             tr("&Annuler"), tr("Confirmer"), 0 /*tr("Annuler")*/,
                                             0, 1 );
               if (sel != 1)
                  {     //............. se remettre en mode modification .......................
                   SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_DISABLED);
                   if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idg"))  pushButtonAcceder->setEnabled(TRUE);
                   lineEditAutoLocator->setFocus();
                   m_IdentIsClear = 1;
                   pushButtonSavModif->setEnabled(FALSE); // annuler sav if modif
                   pushButtonAcceder->setEnabled(FALSE);
                   return;
                  }
       }
    else if ( (nb    = G_pCApp->m_pCMoteurBase->GetPatientListFromNomPrenomSecuDtNssGeme( ListView_Patient,
                                                                                nom,                         // nom
                                                                                prenom,                      // prenom
                                                                                "",                        // date Nss // doit etre 1993-06-01 00:00:00
                                                                                "",              // num secu // 160196296519557
                                                                                "",                     // rang gemellaire
                                                                                "",     // qualite d'ayant droit
                                                                                "",      //  adresse,
                                                                                "",      //  codePost,
                                                                                "",      //  ville,
                                                                                "",      //  sexe,
                                                                                "",      //  profession,
                                                                                "",      //  nomJfille
                                                                                "",      //  nomAss,
                                                                                "",      //  prenomAss,
                                                                                "",      //  tel1,
                                                                                "",      //  tel2,
                                                                                "",      //  tel3,
                                                                                "",      //  email,
                                                                                " = ",   //  egal_like  " = ",
                                                                                textLabel_StateList
                                                                              )))
       {      QString  message  = tr(  "<b><font color=\"#e80d0d\">DOUBLONS POSSIBLES SUR LE NOM PRENOM </font></b>")                         +
                                  tr(  "<hr><br> La personne : <b><font color=\"#1200ff\">") + nom + " " +   prenom         + "</font></b>";
                       message += tr(  "<hr><br> présente des similitudes de nom avec les dossiers présents dans la liste des dossiers ");
                       message += tr(  "<br><hr>confirmez-vous tout de même cette opération au risque de créer un doublon ?");
              int sel = QMessageBox::information( this, tr("Doublons possibles"), message
 ,
                                                  //"&nbsp;&nbsp;&nbsp;&nbsp; ° <b>Quitter pour <u>Annuler</u></b> l'opération en cours" ) ,
                                             tr("&Annuler"), tr("Confirmer"), 0 /*tr("Annuler")*/,
                                             0, 1 );
               if (sel != 1)
                  {     //............. se remettre en mode modification .......................
                   SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_DISABLED);
                   if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idg"))  pushButtonAcceder->setEnabled(TRUE);
                   lineEditAutoLocator->setFocus();
                   m_IdentIsClear = 1;
                   pushButtonSavModif->setEnabled(FALSE); // annuler sav if modif
                   pushButtonAcceder->setEnabled(FALSE);
                   return;
                  }
       }

    PtrListIdentFieldData list_field;    //  créer la liste: nom champs <-> valeurs
    list_field.setAutoDelete (TRUE);
    SetFieldListData(list_field);

    m_ID_Doss = m_pCMoteurBase->DossIdentIndexCreate(nom, prenom, numGUID,  &list_field );
    pushButtonCreate->hide();
    if (m_IsModifiable) pushButtonSavModif->show();
    if (m_ID_Doss != "")
    {//.......................... ecrire la note ............................................
        QString  usedBy;
        m_IsModifiable = m_pCMoteurBase->VerrouilleDossier (numGUID, m_UserName , usedBy  );
        nom            = nom.upper();
        prenom         = prenom.upper();
        m_pCMoteurBase->PatientNoteWrite(m_ID_Doss ,numGUID,  textEdit_Note->text());
        //...................... ecrire les intervenants ................................................................
        QListViewItemIterator it( listView_Praticiens );
        while ( it.current() )
             {QListViewItem *item = it.current();
              ++it;
              m_pCMoteurBase->PatientIntervenantsWrite( m_ID_Doss , numGUID, item->text(ID_INTERV),  item->text(QUAL_INTERV));
             }
        m_pCMoteurBase->DeVerrouilleDossier (numGUID);
        m_IsModifiable = 1;
        //............. mettre à jour la liste au cas ou le nom change .................................
        m_IdentIsClear = 1;
        pushButtonSavModif->setEnabled(FALSE); // important de le mettre ici car evite lesboite de confirmation si modif
        QListViewItem * pQListViewItem = new QListViewItem( ListView_Patient, nom, prenom, m_ID_Doss, numGUID );
        ListView_Patient->setCurrentItem (pQListViewItem );
        ListView_Patient->setSelected (pQListViewItem, TRUE );
        ListView_Patient->ensureItemVisible (pQListViewItem );
        G_pCApp->m_LastNom                   = lineEdit_NomDossier->text();
        G_pCApp->m_LastPrenom                = lineEdit_PremomDossier->text();
        G_pCApp->m_LastGUID                  = numGUID;
        G_pCApp->m_LastTel                   = lineEdit_Tel1->text();
        G_pCApp->m_LastPK                    = m_ID_Doss;
        if (pushButtonCreate->text() == tr("&Créer et accéder"))
           {pushButtonCancel->hide();         // repermettre l'acces au dossier
            pushButtonAcceder_clicked();
           }
    }
    //................. Patient List Mode = clear .........................................
    QString val;
    if (CGestIni::Param_ReadParam(m_LocalParam, "Derniere Session", "Patient List Mode", &val)==0)   // = zero si pas d'erreur
       {if (val.at(0).lower() == 'c')
           {lineEditAutoLocator->setText("");
            ListView_Patient->clear();
            ClearDialog(IDENT_NOCHANGE);
           }
       }
     //............. se remettre en mode modification .......................
    SetInterfaceOnDroits(G_pCApp->m_Droits, MODE_DISABLED);
    if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idg"))  pushButtonAcceder->setEnabled(TRUE);
    lineEditAutoLocator->setFocus();
    emit Sign_SaveIdentDoing();
    m_pLastQListViewItem = 0;
}

//--------------------------------- pushButtonInfo_clicked -------------------------------------------------------------
void Wdg_Central::pushButtonInfo_clicked()
{QWhatsThis::display ( tr("Pour chercher par le nom et le prénom, il faut séparer le prénom du nom par un point-virgule. Exemple : <b>MARTIN;JEAN</b><br><br>"
                          "Le Symbole pour cent % placé avant ou après le nom ou prénom permet de faire une recherche sur tout ce qui contient l'expression<br>"
                          "Exemple :  <b>%MART;%JE</b> cherchera toutes les personnes dont le nom contient : <b>MART</b> et dont le prénom contient : <b>JE</b>" ));
    //m_pCMoteurBase->ConvertToNew( textLabel_StateList );


}

//--------------------------------- pushButtonDetruire_clicked -------------------------------------------------------------
void Wdg_Central::pushButtonDetruire_clicked()
{   QString nom       = lineEdit_NomDossier->text().stripWhiteSpace () ;
    QString prenom    = lineEdit_PremomDossier->text().stripWhiteSpace () ;
    CMoteurBase::GotoDebug();
    if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idd"))
       {QMessageBox::warning ( this, tr("Effacement d'un dossier patient :"),
                               tr ( " Vos droits sont insuffisants pour effacer le dossier : <br><b> <font color=\"#e80d0d\"> ")     +
                               nom  + " " + prenom  +  "</b></font>",
                               tr("OK"));
       return;
       }
    QListViewItem *pQListViewItem =  ListView_Patient->currentItem ();
    if ( pQListViewItem == 0)                 return;
    QString numGUID   = textLabel_NumDoss->text();
    QString iD_Doss   = pQListViewItem->text(LIST_ID_KEY);

    QString  usedBy;
    m_IsModifiable = m_pCMoteurBase->VerrouilleDossier (textLabel_NumDoss->text(), m_UserName , usedBy  );
    if (m_IsModifiable==0)
    {QMessageBox::warning ( this, tr("Effacement d'un dossier patient :"),
                            tr ( " ATTENTION :\r\n      Impossible d'effacer le dossier : \r\n      ")     +
                            nom  + " " + prenom  +
                            tr(  "\r\n      en cours d'utilisation par : ") + usedBy ,
                            tr("OK"), 0, 0,
                            1, 1
                            );
        return;
    }

    //............. noter la nouvelle identité ..................................

    switch( QMessageBox::warning ( this, tr("Effacement d'un dossier patient :"),
                                   tr ( "<u><b> ATTENTION !</u></b><br>      VOUS VOUS APPRÊTEZ À EFFACER LE DOSSIER : <br>      <font color=\"#e80d0d\"><b>")     +
                                   nom  + " " +prenom  +
                                   tr(  "</b></font><br>&nbsp;&nbsp;&nbsp;CETTE ACTION EST IRRÉVERSIBLE<br>"
                                        "&nbsp;&nbsp;&nbsp;ET LES DONNÉES DU DOSSIER SERONT"
                                        "&nbsp;&nbsp;&nbsp;<u><b>IRRÉCUPÉRABLES</b></u> PAR LA SUITE") ,
                                   tr("&Effacer"), tr("&NON"), 0,
                                   1, 1 )
            )
    {case 1: m_pCMoteurBase->DeVerrouilleDossier (numGUID);
        return ;
    }
    //.................. effacer la note ...................................
    QString pk = m_pCMoteurBase->PatientNoteIsThisExist(iD_Doss);
    m_pCMoteurBase->PatientNoteDelete(pk);
    m_pCMoteurBase->PatientIntervenantsAllDelete( iD_Doss);
    //.................. effacer le dossier ...................................
    RUBREC_LIST rubList;
    m_pCMoteurBase->initRubriquesList(&rubList, numGUID);     // lire et reinitialiser la liste des rubriques
    m_pCMoteurBase->DossIdentDelete(&rubList, numGUID, iD_Doss);
    //................... liberer l'ancien verrou ...............................
    m_pCMoteurBase->DeVerrouilleDossier (numGUID);
    pushButtonSavModif->setEnabled(FALSE);
    //.............. ya plus de dosseir en cours ...................................................
    G_pCApp->m_LastNom                   = "";
    G_pCApp->m_LastPrenom                = "";
    G_pCApp->m_LastGUID                  = "";
    G_pCApp->m_LastTel                   = "";
    G_pCApp->m_LastPK                    = "";

    //............. mettre à jour la liste au cas ou le nom change .................................
    QListViewItem *qlistViewItem  =  ListView_Patient->findItem (iD_Doss, LIST_ID_KEY );
    if (qlistViewItem)
       {QListViewItem           *newQListViewItem = qlistViewItem->itemBelow();
        if (newQListViewItem==0) newQListViewItem = qlistViewItem->itemAbove();
        delete qlistViewItem;
        if (newQListViewItem!=0)
           {ListView_Patient->setCurrentItem ( newQListViewItem );
            ListView_Patient->setSelected ( newQListViewItem, TRUE );
            ListView_Patient->ensureItemVisible ( newQListViewItem );

            DataToFormulaire( newQListViewItem->text(LIST_ID_KEY), newQListViewItem->text(LIST_NOM), newQListViewItem->text(LIST_PRENOM));
            m_pLastQListViewItem = newQListViewItem;
            m_IdentIsClear = 0;
           }
       }
}
//--------------------------------- lineEditAutoLocator_returnPressedl -------------------------------------------------------------
void  Wdg_Central::lineEditAutoLocator_returnPressed()
{if ( ListView_Patient->childCount()==0 )
    {G_pCApp->CouCou(tr("Impossible de lancer un dossier car la liste est vide"));
     return;
    }
 if ( ListView_Patient-> childCount()==1 )
    {QListViewItem *pQListViewItem =  ListView_Patient->firstChild();
     if (pQListViewItem)
        {ListView_Patient->setSelected( pQListViewItem, TRUE );
         ListView_Patient_selectionChanged( pQListViewItem );
        }
    }
 if ( ListView_Patient-> childCount()>1 && ListView_Patient->selectedItem ()==0)
    {G_pCApp->CouCou(tr("Pas de patient sélectionné dans la liste, veuillez en sélectionner un"));
     return;
    }
 pushButtonAcceder_clicked();
}
//--------------------------------- ListView_Patient_returnPressed -------------------------------------------------------------
void Wdg_Central::ListView_Patient_returnPressed( QListViewItem * )
{pushButtonAcceder_clicked();
}

//--------------------------------- ListView_Patient_doubleClicked -------------------------------------------------------------
void Wdg_Central::ListView_Patient_doubleClicked( QListViewItem * )
{pushButtonAcceder_clicked();
}

//--------------------------------- pushButtonAcceder_clicked ------------------------------------------------------------------
void Wdg_Central::pushButtonAcceder_clicked()
{ if (pushButtonCancel->isShown())               return; // liste inactive dans le mode creation
  if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idg")==0)
      {QMessageBox::warning ( this, tr("Lancement de dossier :"),
                                     tr( "Vos droits sont insuffisants pour lancer un dossier"),
                                     tr("&Annuler"),0, 0,
                                     1, 1
                                     );
       return;
      }
    //if ( pQListViewItem == 0) return;
    AccederDossier(G_pCApp->m_LastNom,    // Nom assuré
                   G_pCApp->m_LastPrenom,    // Prenom assuré
                   G_pCApp->m_LastPK,          // numero PrimKey
                   G_pCApp->m_LastGUID,        // GUID dossier
                   G_pCApp->m_User,            // login de l'utilisateur en cours
                   G_pCApp->m_SignUser);       // login de l'utilisateur signataire en cours

     //ListView_MonitorPatient_doubleClicked( ListView_Patient->currentItem () , QPoint(0,0) ,0);

    /*
	QListViewItem *pQListViewItem =  ListView_Patient->currentItem ();
    if ( pQListViewItem == 0) return;
    AccederDossier(pQListViewItem->text(0),    // Nom assuré
                   pQListViewItem->text(1),    // Prenom assuré
                   pQListViewItem->text(2),    // numero PrimKey
                   pQListViewItem->text(3),    // GUID dossier
                   m_UserName);                // Nom de l'utilisateur
    */
    //................. Patient List Mode = clear .........................................
    QString val;
    if (CGestIni::Param_ReadParam(m_LocalParam, "Derniere Session", "Patient List Mode", &val)==0 && (val.at(0).lower() == 'c'))   // = zero si pas d'erreur
       { lineEditAutoLocator->clear();
         ListView_Patient->clear();
         ClearDialog(IDENT_NOCHANGE);
         lineEditAutoLocator->setFocus();
       }
    else
       {lineEditAutoLocator->setFocus();
        //lineEditAutoLocator->clear();
       }
}

//--------------------------------- AccederDossier -----------------------------------------------------------------------------
void Wdg_Central::AccederDossier( QString nom,  QString prenom, const QString &primKey, const QString &guid, const QString &user, const QString &sign_user)
{  if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idg")==0)
      {QMessageBox::warning ( this, tr("Lancement de dossier :"),
                                     tr( "Vos droits sont insuffisants pour lancer un dossier"),
                                     tr("&Annuler"),0, 0,
                                     1, 1
                                     );
       return;
      }
   if (pushButtonSavModif->isEnabled() && G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idc") && (!pushButton_QuitterMultiCritere->isShown()) )
      {int ret   = QMessageBox::warning ( this, tr("Enregistrer les modifications :"),
                                     tr( "<u><b>ATTENTION :</u></b><br>&nbsp;&nbsp;&nbsp;le dossier :<br>&nbsp;&nbsp; <b><font color=\"#e80d0d\">") +
                                     G_pCApp->m_LastNom  + " " + G_pCApp->m_LastPrenom  +
                                     tr(  "</font></b>&nbsp;&nbsp; a été modifié, faut il enregistrer les modifications avant de l'ouvrir"),
                                     tr("&Modifier"), tr("Annu&ler"), 0,
                                     1, 1
                                     );
       if (ret==0)
          {pushButtonSavModif_clicked();
           nom       = G_pCApp->m_LastNom;
           prenom    = G_pCApp->m_LastPrenom;
          }
      }
    // pDrTux = new DrTux(argv[1],       // utilisateur
    //                    argv[2],       // num_doss (GUID dossier)
    //                    argv[3],       // ID_Doss (fchgnrl2002_nom_prenom WHERE ID_PrimKey = ID_Doss)
    //                    argv[4],       // nom dossier
    //                    argv[5]        // prenom dossier
    //                   );
    QString usedBy;
    if ( m_pCMoteurBase->IsDossierVerrouille( guid, usedBy ))
    {//.............. si l'utilisateur du dossier est le même que celui du poste de travail...................................
        //               alors le dossier est déjà lancé sur le poste de travail local
        //               on le lance et alors il se met en premier plan (car gère comme cela l'instance unique)
        // sinon on demande si l'on veut lancer le dossier présent sur un autre poste avec avertisement des
        // conséquences
        if (m_pCMoteurBase->m_UserName + "@" + m_pCMoteurBase->m_HostName != usedBy &&
            AlertVerrou(usedBy, nom, prenom)!=0)
           {return;
           }
    }
    //................. met à jour le formulaire identite sur le patient ................................
    if (DataToFormulaire(primKey, nom, prenom)==0) return;   // met à jour  G_pCApp->m_LastNom, G_pCApp->m_LastPrenom, G_pCApp->m_LastGUID, G_pCApp->m_LastPK
    //................ Lancer le process .................................................................
    QProcess  proc;

    #ifdef Q_WS_WIN
       QString pathExe  = CGestIni::Construct_Name_Exe("drtux",QFileInfo (qApp->argv()[0]).dirPath (true));
    #else
       QString pathExe  = CGestIni::Construct_Name_Exe("Manager",QFileInfo (qApp->argv()[0]).dirPath (true), "guinch");
    #endif

    proc.addArgument( pathExe );
    proc.addArgument( user);                                        // login de l'utilisateur
    proc.addArgument( sign_user );                                  // login du signataire
    proc.addArgument( guid );                                       // GUID dossier
    proc.addArgument( primKey);                                     // numero PrimKey
    proc.addArgument( nom.replace("'","~@~"));                      // Nom assuré
    proc.addArgument( prenom.replace("'","~@~"));                   // Prenom assuré
    /*
    QStringList arg_lst = proc.arguments ();
    for ( QStringList::Iterator it = arg_lst.begin(); it != arg_lst.end(); ++it )
        { qDebug( *it );
        }
    */
    QString str = CGestIni::Construct_Name_File_Ini("Manager",QFileInfo (qApp->argv()[0]).dirPath (true), "");
    proc.addArgument(str );
    // fichier ini
    str = CGestIni::Construct_Name_File_Ini("Manager",QFileInfo (qApp->argv()[0]).dirPath (true), "DataBase.cfg");
    proc.addArgument( str );
    // fichier cfgBase
    if ( !proc.start() )
       {qDebug("ListView_Patient_doubleClicked(): Echec de l'ouverture du process");
       }
    pushButtonAcceder->setIconSet (m_Cadenas);
    pushButtonSavModif->setEnabled(FALSE);
    groupBoxPatient->setEnabled(TRUE);
    groupBoxAssure->setEnabled(TRUE);
    tabWidgetNotes->setEnabled(TRUE);
    pushButtonCreate->setEnabled(TRUE);
    pushButtonCancel->setEnabled(TRUE);
    pushButtonAcceder->setEnabled(TRUE);
    pushButtonDetruire->setEnabled(TRUE);
}

//--------------------------------------- AlertVerrou -------------------------------------------------------------------------------
int  Wdg_Central::AlertVerrou(const QString &userBy, const QString &dossNom, const QString &dossPrenom)
{   QString value;
    CGestIni::Param_ReadParam(m_LocalParam, "Gestion des dossiers", "Acces Concurrent", &value);   // path editeur de texte non défini
    if (value.lower() == tr("non possible"))
    {  QMessageBox::information( this, tr(  "OUVERTURE CONFLICTUELLE"),
                                 tr(  " <b><u>ATTENTION</b></u> ! Ce dossier <font color=\"#e80d0d\"><b>")          + dossNom     + " " + dossPrenom  +
                                 tr(  "</b></font> est déjà ouvert sur le poste suivant : <b>" )   + userBy  +
                                 tr(  "</b><br> Son accès n'est possible qu'en lecture seulement,<br>"
                                      "il se mettra automatiquement en mode écriture<br>"
                                      "dés qu'il sera disponible sur votre poste") ,
                                 //"&nbsp;&nbsp;&nbsp;&nbsp; ° <b>Quitter pour <u>Annuler</u></b> l'opération en cours" ) ,
                                 tr("Annu&ler"),0 , 0,
                                 1, 1 );
        return 1;
    }
    return QMessageBox::information( this, tr("OUVERTURE CONFLICTUELLE"),
                                     tr ( " <b><u>ATTENTION</b></u> ! Ce dossier <b>")          + dossNom     + " " + dossPrenom  +
                                     tr(  "</b> est déjà ouvert sur le poste suivant : <b>" )   + userBy  +
                                     tr(  "</b><br> Faut-il tenter tout de même l'ouverture ?<br>") ,
                                     //"&nbsp;&nbsp;&nbsp;&nbsp; ° <b>Quitter pour <u>Annuler</u></b> l'opération en cours" ) ,   1111b0
                                     tr("&Ouvrir"), tr("Annu&ler"), 0,
                                     1, 1 );
}
//--------------------------------- SavModif -------------------------------------------------------------
void Wdg_Central::SavModif(const QString &oldNom, const QString &oldPrenom, const QString &/*oldGUID*/, const QString &oldPk)
{  if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idc")==0)
      {QMessageBox::warning ( this, tr("Enregistrer les modifications :"),
                                     tr( "Vos droits sont insuffisants pour enregistrer un dossier"),
                                     tr("&Annuler"),0, 0,
                                     1, 1
                                     );
       return;
      }
    int     ret       = 0;
    QString nom       = lineEdit_NomDossier->text().stripWhiteSpace () ;
    QString prenom    = lineEdit_PremomDossier->text().stripWhiteSpace () ;
    QString numGUID   = textLabel_NumDoss->text();

    if (oldNom != nom || oldPrenom != prenom)
    { ret   = QMessageBox::warning ( this, tr("Enregistrement :"),
                                     tr( "<u><b>ATTENTION :</u></b><br>&nbsp;&nbsp;&nbsp;êtes-vous certain que ce dossier :<br>&nbsp;&nbsp; <font color=\"#e80d0d\"><b>")     +
                                     oldNom  + " " + oldPrenom  +
                                     tr(  "</b></font>&nbsp;&nbsp;doit être modifié, et notamment<br>&nbsp;&nbsp;avec ces nouveaux nom et prénom : <font color=\"#1111b0\"><b>") +
                                     nom + " " + prenom + tr("</b></font>&nbsp;&nbsp;(votre intention ne serait elle pas plutôt de créer un nouveau dossier)"),
                                     tr("&Modifier"), tr("Annu&ler"), 0,
                                     1, 1
                                     );
    }
    else
    {ret   = QMessageBox::warning ( this, tr("Enregistrement :"),
                                    tr ( "<u><b>ATTENTION :</u></b><br>&nbsp;&nbsp;&nbsp;confirmez-vous les modifications&nbsp;&nbsp;apportées à ce dossier : <br>&nbsp;&nbsp;<font color=\"#e80d0d\"><b>")     +
                                    oldNom  + " " + oldPrenom  + "</b></font>",
                                    tr("&Modifier"), tr("Annu&ler"), 0,
                                    1, 1
                                    );
    }
    if (ret == 1)
       {//ListView_Patient_clicked( ListView_Patient->currentItem ());    // rafraichir l'ancien dossier
        DataToFormulaire(oldPk, oldNom, oldPrenom);
        return;
       }

    QString  usedBy;
    m_IsModifiable = m_pCMoteurBase->VerrouilleDossier (textLabel_NumDoss->text(), m_UserName , usedBy  );
    if (m_IsModifiable==0)
       {QMessageBox::warning ( this, tr("Enregistrement :"),
                            tr ( " ATTENTION :\r\n      Impossible d'enregistrer le dossier : \r\n      ")     +
                            nom  + " " +prenom  +
                            tr(  "\r\n    car il est en cours d'utilisation par : ") + usedBy ,
                            tr("&Valider"), 0, 0,
                            1, 1
                            );
        return;
       }
    if (nom == "")
       {nom = tr("ANONYME");
        lineEdit_NomDossier->setText(nom);
       }
    PtrListIdentFieldData list_field;   //  créer la liste: nom champs <-> valeurs
    list_field.setAutoDelete (TRUE);
    SetFieldListData(list_field);
    nom             = nom.upper();
    prenom          = prenom.upper();
    QString iD_Doss = m_pCMoteurBase->GetDossPrimKeyFromGUID(numGUID);
    m_pCMoteurBase->DossIdentIndexUpdate(iD_Doss, nom, prenom, &list_field );
    m_pCMoteurBase->PatientNoteWrite(iD_Doss ,numGUID,  textEdit_Note->text());
    m_pCMoteurBase->DeVerrouilleDossier (textLabel_NumDoss->text());
    m_IsModifiable = 1;
    //............. mettre à jour la liste au cas ou le nom change .................................
    QListViewItem *qlistViewItem  =  ListView_Patient->findItem (iD_Doss, LIST_ID_KEY );
    if (qlistViewItem)
       {   qlistViewItem->setText(LIST_NOM , nom);
           qlistViewItem->setText(LIST_PRENOM ,prenom);
       }
    qlistViewItem  =  ListView_Doublons->findItem (iD_Doss, LIST_ID_KEY );
    if (qlistViewItem)
       {   qlistViewItem->setText(LIST_NOM , nom);
           qlistViewItem->setText(LIST_PRENOM ,prenom);
       }

    //................... cela peut avoir change dans le formulaire ....................................
    G_pCApp->m_LastNom                   = nom;
    G_pCApp->m_LastPrenom                = prenom;
    G_pCApp->m_LastTel                   = lineEdit_Tel1->text();

    pushButtonSavModif->setEnabled(FALSE);
    emit Sign_SaveIdentDoing();
}
//--------------------------------- pushButtonSavModif_clicked -------------------------------------------------------------
void Wdg_Central::pushButtonSavModif_clicked()
{
   SavModif(G_pCApp->m_LastNom, G_pCApp->m_LastPrenom, G_pCApp->m_LastGUID, G_pCApp->m_LastPK);
}

//--------------------------------- SetFieldListData ------------------------------------------------------------------------
void Wdg_Central::SetFieldListData(PtrListIdentFieldData &list_field)
{   list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_NOM_ASS,    lineEdit_NomAssure->text().stripWhiteSpace(),          FTN_MAJ_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_PRENOM_ASS, lineEdit_PrenomAssure->text().stripWhiteSpace(),       FTN_MAJ_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_JFNOM,      lineEdit_NomDeNss->text().stripWhiteSpace(),           FTN_MAJ_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_TITRE,      lineEdit_Titre->text().stripWhiteSpace(),              FTN_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_RUE,        textEdit_Adresse->text(),                              FTN_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_TEL1,       lineEdit_Tel1->text(),                                 FTN_MAJ_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_TEL2,       lineEdit_Tel2->text(),                                 FTN_MAJ_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_TEL3,       lineEdit_Tel3->text(),                                 FTN_MAJ_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_EMAIL,      lineEdit_Email->text(),                                FTN_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_CODE_POST,  lineEdit_CdPostal->text(),                             FTN_INTEGER));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_VILLE,      lineEditVille->text(),                                 FTN_MAJ_STRING));
    QString sexe;
    if (comboBoxSexe->currentItem() == 0)        sexe = "M";
    else  if (comboBoxSexe->currentItem() == 1)  sexe = "F";
    else                                         sexe = "I";
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_SEX,        sexe,                                                        FTN_MAJ_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_NUMSS,      lineEdit_NumSecu->text()+lineEdit_NssClef->text(),           FTN_NUM_STRING));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_NSS,        lineEdit_DtNss->text(),                                      FTN_DATETIME));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_IS_ASS,     QString::number(comboBoxQualiteAyantDroit->currentItem()+1), FTN_INTEGER));
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_PROF,       lineEdit_Profession->text(),                                 FTN_MAJ_STRING));
    QString                  rangGem  = lineEdit_RangGeme->text();
    //if (rangGem.length()==0) rangGem = rangGem.prepend("0");
    //if (rangGem.length()==1) rangGem = rangGem.prepend("0");
    list_field.append( new CIdentFieldData(m_pCMoteurBase->m_DOSS_IDENT_GEME,       rangGem,                                                      FTN_MAJ_STRING));
}

//--------------------------------- listView_Praticiens_doubleClicked -------------------------------------------------------------
void Wdg_Central::listView_Praticiens_doubleClicked( QListViewItem *pQListViewItem )
{QString idInterv = "";
 if (pQListViewItem) idInterv = pQListViewItem->text(ID_INTERV);
 exeAnnuaire(idInterv);
}
//--------------------------------- pushButton_AddMedTTT_clicked -------------------------------------------------------------
void Wdg_Central::pushButton_AddMedTTT_clicked()
{QString idInterv = "";
 //............ recuperer ID praticien en cours .......................................
 QListViewItem *pQListViewItem = listView_Praticiens-> selectedItem ();
 if (pQListViewItem) idInterv = pQListViewItem->text(ID_INTERV);
 exeAnnuaire( idInterv );
}
//--------------------------------- exeAnnuaire -------------------------------------------------------------
void Wdg_Central::exeAnnuaire(QString idInterv )
{   if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idc")==0)
      {QMessageBox::warning ( this, tr("Ajouter un correspondant :"),
                                     tr( "Vos droits sont insuffisants pour modifier un dossier"),
                                     tr("&Annuler"),0, 0,
                                     1, 1
                                     );
       return;
      }
    QListViewItem *pQListViewItem =  ListView_Patient->currentItem();
    QString numGUID   = "";
    QString iD_Doss   = "";
    if (pushButtonCreate->isShown())
    {   numGUID   = m_pCMoteurBase->GUID_Create();
        iD_Doss   = "";
    }
    else if ( pQListViewItem)
    {   numGUID   = textLabel_NumDoss->text();
        iD_Doss   = pQListViewItem->text(LIST_ID_KEY);
    }
    else return;
    //.............................. rechercher executable et son fichier d'echange ..........................
    QString pathExe = CGestIni::Construct_Name_Exe("personnes",QFileInfo (qApp->argv()[0]).dirPath (true));
    QString pathExch;


    // path editeur de texte non défini
    if (CGestIni::Param_ReadParam(m_LocalParam, "Repertoire Temporaire", "Repertoire", &pathExch)!=0)             return;         // path editeur de texte non défini
    // Adaptation à la plateforme
    pathExch = CGestIni::Construct_PathBin_Module("Manager",QFileInfo (qApp->argv()[0]).dirPath (true)) + pathExch;
    // if ( QDir::isRelativePath ( pathExch ) ) pathExch = QDir::cleanDirPath (pathExch.prepend(GlobalPathAppli) );
    // if ( QDir::isRelativePath (pathExe ) )   pathExe  = QDir::cleanDirPath (pathExe.prepend(GlobalPathAppli) );


    QProcess*  proc = new QProcess( this );
    if (proc==0) return;

    // fichier d'echange --> canal de comm interprocess
    QString exchFile = pathExch + "/ManagerGetPersonnne"+ numGUID+".ech";
    exchFile = QDir::cleanDirPath(exchFile);
    QFile file( exchFile );
    // suppression si existe
    if (file.exists( exchFile )) file.remove();

    //construction de la commande
    proc->addArgument(pathExe);
    proc->addArgument(exchFile );
    proc->addArgument( "Record");
    proc->addArgument( idInterv);
    proc->addArgument( G_pCApp->m_Droits);

    if (m_Contacts_Run==FALSE && proc->start() )
    {m_Contacts_Run = TRUE;
        qApp->processEvents ();
        while(proc->isRunning () )
        {//if (tempo>1000000) {qApp->processEvents (); tempo=0;}
            QApplication::eventLoop()->processEvents ( QEventLoop::WaitForMore );
            // tempo ++;
        }
        m_Contacts_Run = FALSE;

        //......... recuperer fichier d'echange .............
        if ( !file.open( IO_ReadOnly ) ) return;
        QTextStream ts( &file );
        QString ret = ts.read();    // 281|ANTOINE|Christine|Viscéral
        QString id, spec,nom, prenom;
        int deb =  0;
        int end = ret.find('|');
        id      = ret.mid(deb, end-deb);
        deb     = end + 1;
        end     = ret.find('|', deb);
        nom     = ret.mid(deb, end-deb);
        deb     = end + 1;
        end     = ret.find('|', deb);
        prenom  = ret.mid(deb, end-deb);
        deb     = end + 1;
        spec    = ret.mid(deb);
        //................... si le dossier est en création ajout temps réel ...........................
        //                    car bouton save Modif pas accessible
        if (pushButtonCreate->isShown())
        { new QListViewItem( listView_Praticiens, spec, nom, prenom, "", id );
          //m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
        }
        else if (m_pCMoteurBase->PatientIntervenantsWrite( iD_Doss , numGUID, id, "") != 0)
        { new QListViewItem( listView_Praticiens, spec, nom, prenom, "", id );
          //m_IdentIsClear = 0; pushButtonSavModif->setEnabled(TRUE);
        }
    }
    if (file.exists( exchFile )) file.remove();
    delete proc;
}

//--------------------------------- pushButton_DelMedTTT_clicked -------------------------------------------------------------
void Wdg_Central::pushButton_DelMedTTT_clicked()
{   if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "idc")==0)
      {QMessageBox::warning ( this, tr("Effacer un correspondant :"),
                                     tr( "Vos droits sont insuffisants pour modifier un dossier"),
                                     tr("&Annuler"),0, 0,
                                     1, 1
                                     );
       return;
      }
    QListViewItem* pQListViewItem = listView_Praticiens->currentItem ();
    if (pQListViewItem==0) return;

    QString numGUID   = "";
    if (pushButtonCreate->isShown())
    {   numGUID   = m_pCMoteurBase->GUID_Create();
    }
    else if ( pQListViewItem)
    {   numGUID   = textLabel_NumDoss->text();
    }
    else return;
    if ( !(pushButtonCreate->isShown()) ) m_pCMoteurBase->PatientIntervenantsDelete( pQListViewItem->text(ID_INTERV), numGUID);
    delete pQListViewItem;
}

//=======================================================================================================================================
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////// ONGLET STATISTIQUES /////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//=======================================================================================================================================



//----------------------------------- pushButtonDateDeb_clicked() ----------------------------------
void Wdg_Central::pushButtonDateDeb_clicked()
{Dlg_Calendar          *dlg  = new Dlg_Calendar(this, "Calendar_Dial", TRUE, WStyle_Customize | WStyle_NormalBorder | WStyle_Title |WStyle_MinMax | WStyle_SysMenu);
    if (dlg ==0)                                                   return;
    dlg->setCaption(tr("Date de début"));
    dlg->move ( QCursor::pos().x(), QCursor::pos().y() );
    QString text = mle_deb->text();
    int jour, mois, annee;
    jour  = text.mid(0,2).toInt();
    mois  = text.mid(2,2).toInt();
    annee = text.mid(4,4).toInt();
    if (QDate::isValid ( annee, mois, jour ) )
    {dlg->setDate(QDate(annee, mois, jour));
    }
    if (dlg->exec()== QDialog::Accepted )
    {mle_deb->setText(dlg->getDate().toString("ddMMyyyy"));
    }
    delete dlg;
}


//----------------------------------- pushButtonDateFin_clicked() ----------------------------------
void Wdg_Central::pushButtonDateFin_clicked()
{Dlg_Calendar          *dlg  = new Dlg_Calendar(this, "Calendar_Dial", TRUE, WStyle_Customize | WStyle_NormalBorder | WStyle_Title |WStyle_MinMax | WStyle_SysMenu);
    if (dlg ==0)                                                   return;
    dlg->setCaption(tr("Date de fin"));
    dlg->move ( QCursor::pos().x(), QCursor::pos().y() );
    QString text = mle_fin->text();
    int jour, mois, annee;
    jour  = text.mid(0,2).toInt();
    mois  = text.mid(2,2).toInt();
    annee = text.mid(4,4).toInt();
    if (QDate::isValid ( annee, mois, jour ) )
    {dlg->setDate(QDate(annee, mois, jour));
    }
    if (dlg->exec()== QDialog::Accepted )
    {mle_fin->setText(dlg->getDate().toString("ddMMyyyy"));
    }
    delete dlg;
}

//-----------------------------------mle_debut_lostFocus()----------------------------------
void Wdg_Central::mle_debut_lostFocus()
{
    int jour, mois, annee;
    QDate dateDebut;

    if (mle_deb->text().length() == 8) {
        jour  = mle_deb->text().mid(0,2).toInt();
        mois  = mle_deb->text().mid(2,2).toInt();
        annee = mle_deb->text().mid(4,4).toInt();
        if ( dateDebut.setYMD( annee , mois , jour ) != true) {
            QMessageBox mb( tr("Date incohérente"),
                            tr("La date de début n'est pas correcte\n"),
                            QMessageBox::Critical,
                            QMessageBox::Ok | QMessageBox::Default,0,0);
            mb.exec();
            mle_deb->setFocus();
        } else {
            //lanceRecherche();
        }
    } else {
        //lanceRecherche();
    }
}


//-----------------------------------mle_fin_lostFocus()----------------------------------
void Wdg_Central::mle_fin_lostFocus()
{
    int jour, mois, annee;
    QDate dateFin;

    if (mle_fin->text().length() == 8) {
        jour  = mle_fin->text().mid(0,2).toInt();
        mois  = mle_fin->text().mid(2,2).toInt();
        annee = mle_fin->text().mid(4,4).toInt();
        if ( dateFin.setYMD( annee , mois , jour ) != true) {
            QMessageBox mb( tr("Date incohérente"),
                            tr("La date de fin n'est pas correcte\n"),
                            QMessageBox::Critical,
                            QMessageBox::Ok | QMessageBox::Default,0,0);
            mb.exec();
            mle_fin->setFocus();
        } else {
            //lanceRecherche();
        }
    } else {
        //lanceRecherche();
    }
}


/*----------------------------------------- pushButtonRunStat_clicked ---------------------------------------------------*/
void Wdg_Central::pushButtonRunStat_clicked()
{// TODO: Add your control notification handler code here

    QString        mess = tr("Veuillez prendre note des erreurs suivantes :");
    int             sel = comboBoxUrgType->currentItem()+1;
    int             err = 0;

    int hdeb, mdeb, hfin, mfin;
    //.................. relever qualification du service ............................
    if ( sel>2 || sel<0)
    {mess += tr("\r\n--> Qualification du service : SAU ou POSU ou UPATOU non indiquée !!");
        err|=1;
    }
    //................... numero finess .............................................
    QString finess = cMaskedLineEditNumFiness->text() + "                  ";
    finess         = finess.left(9);
    if (finess == "         ")
    {mess += tr("\r\n--> Numéro de Finess non valide !!!!");
        err|=2;
    }
    //.................... Heures de Départ et D'arrivée du test ....................................
    if (mle_HeureDeb->text().length()!=4)
    {mess += tr("\r\n--> Saisie de l'heure de début incomplète !");
        err|=4;
    }
    if (mle_HeureFin->text().length()!=4)
    {mess += tr("\r\n--> Saisie de l'heure de fin incomplète !");
        err|=8;
    }
    long val = mle_HeureDeb->text().left(2).toLong();
    if ( !(err&4) && (val<0 || val>23))
    {mess += tr("\r\n--> L'Heure de début est supérieure à 23h ou négative");
        err|=16;
    }
    else hdeb = (int)val;
    val = mle_HeureDeb->text().mid(2).toLong();
    if ( !(err&4) && (val<0 || val>59))
    {mess += tr("\r\n--> Les minutes de début sont supérieures à 59 mn ou négatives");
        err|=32;
    }
    else mdeb = (int)val;
    val = mle_HeureFin->text().left(2).toLong();
    if ( !(err&8) && (val<0 || val>23))
    {mess += tr("\r\n--> L'heure de fin est supérieure à 23 h ou négative");
        err|=64;
    }
    else hfin = (int)val;
    val = mle_HeureFin->text().mid(2).toLong();
    if ( !(err&4) && (val<0 || val>59))
    {mess += tr("\r\n--> Les minutes de fin sont supérieures à 59 mn ou négatives");
        err|=128;
    }
    else mfin = (int)val;
    if (err)
    {QMessageBox::warning ( this, tr("Statistiques :"), mess ,
                            tr("Annu&ler"), 0, 0,
                            1, 1
                            );
        return;
    }
    //.................à ce stade les infos de la boite de dialogue devraient être correctes............................................
    QApplication::setOverrideCursor( QCursor( Qt::WaitCursor ) );

    /*................. relever les dates de debut et fin ..................................*/
    QDate dateDeb  (QDate::currentDate());
    QDate dateFin  (QDate::currentDate());

    int jour, mois, annee;
    QString text = mle_deb->text();
    jour  = text.mid(0,2).toInt();
    mois  = text.mid(2,2).toInt();
    annee = text.mid(4,4).toInt();
    if (QDate::isValid ( annee, mois, jour ) ) dateDeb.setYMD (annee , mois  , jour);
    mle_deb->setText(dateDeb.toString("ddMMyyyy"));
    text  = mle_fin->text();
    jour  = text.mid(0,2).toInt();
    mois  = text.mid(2,2).toInt();
    annee = text.mid(4,4).toInt();
    if (QDate::isValid ( annee, mois, jour ) ) dateFin.setYMD (annee , mois  , jour);
    mle_fin->setText(dateFin.toString("ddMMyyyy"));

    //........................ la requete .....................................................................
    // les dates de la requete sont volontairement placées un jour avant et apres la fourchette de selection
    // car il peut arriver que certains dossiers soient créés après la garde et donc les heures strictement concernées
    // par la garde peuvent ne plus s'appliquer: exemple je vois le patient à 7h45 et apres la fin de garde (8h00)
    // par exemple à 9h je crée le dossier. Donc le test entre 8h la veille et 8h en fin de garde ne fonctionnerai
    // pas.
    QDate reqDateDeb = dateDeb.addDays(-1); QString reqDateDebStr = reqDateDeb.toString("yyyyMMdd");
    QDate reqDateFin = dateFin.addDays(+1); QString reqDateFinStr = reqDateFin.toString("yyyyMMdd");
    //............... requete utilisant la base virtuelle .....................................................
    /*
 //................. DOSS_RUB_HEAD ............................
 QString      m_DOSS_RUB_HEAD_TBL_NAME;        // nom de la table de l'header des RUBRIQUES
 QString      m_DOSS_RUB_HEAD_PRIMKEY;         // clef primaire de cet enregistrement
 QString      m_DOSS_RUB_HEAD_GUID;            // GUID du dossier auquel l'enregistrement fait reference
 QString      m_DOSS_RUB_HEAD_REF_DOSS_PK;     // Clef primaire du dossier auquel l'enregistrement fait reference (doublon avec m_DOSS_RUB_HEAD_GUID)
 QString      m_DOSS_RUB_HEAD_NOM_DATE;        // Court texte descriptif de l'enregistrement.
 QString      m_DOSS_RUB_HEAD_DATE;            // date de l'enregistrement
 QString      m_DOSS_RUB_HEAD_DUREE;           // duree de l'enregistrement
 QString      m_DOSS_RUB_HEAD_TYPE;            // Type de rubrique
 QString      m_DOSS_RUB_HEAD_USER;            // utilisateur associé à rubrique

 //................. DOSS_RUB_DATA ............................
 QString      m_DOSS_RUB_DATA_TBL_NAME;        // nom de la table des données des RUBRIQUES
 QString      m_DOSS_RUB_DATA_PRIMKEY;         // clef primaire de cet enregistrement  (le meme que le header)
 QString      m_DOSS_RUB_DATA_BLOB;            // données binaires
 */
    if (m_pCMoteurBase->OpenBase()==0)  return ;  // si point = erreur d'ouverture de la base
    QString requete("SELECT ");
    requete +=  m_pCMoteurBase->m_DOSS_RUB_HEAD_GUID     + "," +        // 0
                m_pCMoteurBase->m_DOSS_RUB_HEAD_PRIMKEY  + "," +        // 1
                m_pCMoteurBase->m_DOSS_RUB_HEAD_USER     + "," +        // 2
                m_pCMoteurBase->m_DOSS_RUB_HEAD_DATE     + " FROM  " +  // 3
                m_pCMoteurBase->m_DOSS_RUB_HEAD_TBL_NAME + " WHERE " +
                //m_pCMoteurBase->m_DOSS_RUB_HEAD_TYPE     + " = '20030000'";
                m_pCMoteurBase->m_DOSS_RUB_HEAD_TYPE     + " = '20030000' AND " +
                m_pCMoteurBase->m_DOSS_RUB_HEAD_DATE     + " >= '" + reqDateDebStr + "' AND " + m_pCMoteurBase->m_DOSS_RUB_HEAD_DATE + "<= '" + reqDateFinStr + "'";
    QSqlQuery query(requete , m_pCMoteurBase->m_DataBase );
    long  nbRecord       = 0;
    long  nbRecordTotal  = 0;
    //.................. Recuperer la liste des observations ..........................................
    //                   filtrée grossièrement sur les dates (1 jr avant 1 jour après)
    //................. initialiser classe d'analyse des dossiers .................................
    if (m_pCGestRPU) delete m_pCGestRPU;
    m_pCGestRPU = new CGestRPU(dateDeb,   hdeb , mdeb,
                               dateFin,   hfin , mfin,
                               G_pCApp->m_PathAppli , "ErreurStat.log",
                               G_pCApp->m_PathAppli , "Test_FILE.log",
                               G_pCApp->m_PathAppli , "RPU_FILE.log",
                               ALL_RPU_TEST    ,
                               (char)sel       ,
                               finess
                               );
    if ( query.isActive() )
    {
        QByteArray qByteArray;
        bool isAgeActif      = checkBoxAge->isChecked();
        long agMin           = cMaskedLineEditAgeMin->text().toLong();
        long agMax           = cMaskedLineEditAgeMax->text().toLong();
        bool ok              = TRUE;
        SSignal patientInfos;
        QDate   dateRub;
        while (query.next())
        {ok         = TRUE;
            ++nbRecordTotal;
            //............... recuperer date cette observation ....................................
            //                verifier si dans bonne fourchette
            //                (pas la peine avec requete cela baigne)
            /*
            QString dtRub = query.value(3).toString();  // 1999-10-08 09:12:47
            dateRub.setYMD (  dtRub.left(4 ).toInt(),
                              dtRub.mid(5,2).toInt(),
                              dtRub.mid(8,2).toInt() );
            if (! (dateRub>=reqDateDeb && dateRub<=reqDateFin) ) ok = FALSE;
            */
            //............... recuperer infos patients de cette observation .......................
            if (patientInfos.setFromGUID(query.value(0).toString(), m_pCMoteurBase))
            {//............ calcul et filtrer selon age patient ................................
                if (ok && isAgeActif )  // 2005-02-26 15:17:03
                {QString agePat   = CMoteurBase::CalculeDiffAge(&patientInfos.m_Naissance);
                    int            i =0;
                    while (agePat[i]>='0' && agePat[i]<='9') ++i; agePat.truncate(i);
                    long patientAge  = agePat.toLong();
                    if (patientAge  >= agMin && patientAge <= agMax) ok = TRUE;
                    else                                             ok = FALSE;
                }
                //................ recuperer les données de l'observation ...........................
                if (ok && m_pCMoteurBase->GetDataFromRub(qByteArray, query.value(1).toString()))  // query.value(1).toByteArray() -> m_DOSS_RUB_HEAD_PRIMKEY
                {char *ptr  = qByteArray.data();
                    long len   = qByteArray.size()-4;
                    if (ptr && len>6)
                    {QString observation;
                        if (strncmp(ptr, "<html>", 6))
                        {observation = CMoteurBase::RTF_ToASCII(ptr+4, len);
                        }
                        else
                        {observation = QString::fromLatin1 (ptr, len + 4);
                            CHtmlTools::HtmlToAscii(observation, CHtmlTools::StrictASCII);
                        }
                        m_pCGestRPU->RPU_TesteRecord(&patientInfos, observation , observation.length(), query.value(2).toString()); //query.value(2).toString() Medecin
                        ++nbRecord;
                    } //endif (ptr && len>6)
                } //endif (ok && m_pCMoteurBase->G
            } // endif (patientInfos.setFromGUID(query.value(1).toString()));
        } // end while (query.next())
        PlaceListErrorInListCtrl(m_pCGestRPU);
    } //endif ( query.isActive() )

    //............................ afficher les comptes ......................................................

    if (checkBoxRPUFile->isChecked())
    {textLabelResDestNbrRPU->setText(QString::number(m_pCGestRPU->m_NbFicWrited));
    }
    if (checkBoxCCMU->isChecked())
    {textLabel_ResCCMU_I->setText(QString::number(m_pCGestRPU->m_CCMU.ccmu1 ));
        textLabel_ResCCMU_II->setText(QString::number(m_pCGestRPU->m_CCMU.ccmu2 ));
        textLabel_ResCCMU_III->setText(QString::number(m_pCGestRPU->m_CCMU.ccmu3 ));
        textLabel_ResCCMU_IV->setText(QString::number(m_pCGestRPU->m_CCMU.ccmu4 ));
        textLabel_ResCCMU_V->setText(QString::number(m_pCGestRPU->m_CCMU.ccmu5 ));
        textLabel_ResCCMU_Err->setText(QString::number(m_pCGestRPU->m_CCMU.ccmu0));

    }
    if (checkBoxGEMSA->isChecked())
    {textLabel_ResGemsa_1->setText(QString::number(m_pCGestRPU->m_GEMSA.gemsa_1 ));
        textLabel_ResGemsa_2->setText(QString::number(m_pCGestRPU->m_GEMSA.gemsa_2 ));
        textLabel_ResGemsa_3->setText(QString::number(m_pCGestRPU->m_GEMSA.gemsa_3 ));
        textLabel_ResGemsa_4->setText(QString::number(m_pCGestRPU->m_GEMSA.gemsa_4 ));
        textLabel_ResGemsa_5->setText(QString::number(m_pCGestRPU->m_GEMSA.gemsa_5 ));
        textLabel_ResGemsa_6->setText(QString::number(m_pCGestRPU->m_GEMSA.gemsa_6 ));
        textLabel_ResGemsa_Err->setText(QString::number(m_pCGestRPU->m_GEMSA.gemsa_I ));
    }
    if (checkBoxDESTCLIN->isChecked())
    {textLabel_ResDestClinTotal->setText(QString::number(m_pCGestRPU->m_DEST.hospi ));
        textLabel_ResDestRetClinExterne->setText(QString::number(m_pCGestRPU->m_DEST.exter ));
        textLabel_ResDestClinHospi->setText(QString::number(m_pCGestRPU->m_DEST.trans ));
        textLabel_ResDestClin_Err->setText(QString::number(m_pCGestRPU->m_DEST.indeter ));
    }
    if (checkBoxRPU->isChecked())
    {textLabel_ResDestDeces->setText(QString::number(m_pCGestRPU->m_DIVERS.Deces ));
        textLabel_ResDestRetDom->setText(QString::number(m_pCGestRPU->m_DIVERS.RetDom ));
        textLabel_ResDestHospi->setText(QString::number(m_pCGestRPU->m_DIVERS.Hosp ));
        textLabel_ResDest_Err->setText(QString::number(m_pCGestRPU->m_DIVERS.Ind ));
    }
    mess  = QString::number(m_pCGestRPU->m_RPU_Record);
    mess  = mess + tr(" dossiers analysés ");
    mess  = mess + QString::number(m_pCGestRPU->m_NbErr);
    mess  = mess + tr(" erreur(s) trouvée(s)");
    textLabel_StateListError->setText(mess);
    QApplication::restoreOverrideCursor();
    return;
}

/*----------------------------------------- ListView_PatientRejetes_doubleClicked ---------------------------------------------------*/
void Wdg_Central::ListView_PatientRejetes_doubleClicked( QListViewItem *pQListViewItem )
{if ( pQListViewItem == 0) return;
    QString guid = pQListViewItem->text(5);
    AccederDossier(pQListViewItem->text(0),                           // Nom assuré
                   pQListViewItem->text(1),                           // Prenom assuré
                   m_pCMoteurBase->GetDossPrimKeyFromGUID(guid ),     // numero PrimKey
                   guid ,                                             // GUID dossier
                   pQListViewItem->text(3),                           // Nom de l'utilisateur
                   G_pCApp->m_SignUser);                              // Nom de l'utilisateur signataire
}


/*----------------------------------------- ListView_PatientRejetes_returnPressed ---------------------------------------------------*/
void Wdg_Central::ListView_PatientRejetes_returnPressed( QListViewItem *pQListViewItem )
{ListView_PatientRejetes_doubleClicked( pQListViewItem );
}


/*----------------------------------------- ListView_PatientRejetes_spacePressed ---------------------------------------------------*/
void Wdg_Central::ListView_PatientRejetes_spacePressed( QListViewItem *pQListViewItem )
{ListView_PatientRejetes_doubleClicked( pQListViewItem );
}

/*----------------------------------------- checkBoxWarning_stateChanged ---------------------------------------------------*/
void Wdg_Central::checkBoxWarning_stateChanged( int )
{PlaceListErrorInListCtrl(m_pCGestRPU);
}

/*----------------------------------------- PlaceListErrorInListCtrl ---------------------------  n      vvvvvvvvvvvvvvvvvvvvvvvvhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhbhhhhhhhhhhhhhhhhhhhhhhbhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhg----------------------------*/
void Wdg_Central::PlaceListErrorInListCtrl( CGestRPU *pCGestRPU)
{ListView_PatientRejetes->clear();
    ERR_RPU  *errRPU;
    for (errRPU = pCGestRPU->m_ErrRpuList.first(); errRPU; errRPU = pCGestRPU->m_ErrRpuList.next() )
    {if ( !checkBoxWarning->isChecked() && errRPU->Message[0]==':' && errRPU->Message[1]==':' )
        {
        }
        else
        {new QListViewItem (ListView_PatientRejetes,
                            errRPU->Nom,
                            errRPU->Prenom,
                            errRPU->Date,
                            errRPU->Medecin,
                            errRPU->Message,
                            errRPU->ID
                            );
        }
    }
}


