#include "depensedialog.h"

#include <common/icore.h>
#include <common/settings.h>
#include <common/commandlineparser.h>
#include <common/constants.h>
#include <common/position.h>
#include <QtGui>
#include <QtCore>
#include <QtSql>
#include "../../common/configure/utilisateur.h"
using namespace Common;
using namespace Constants;

static inline QString absolutePath() {return Common::ICore::instance()->settings()->applicationBundlePath();}
static inline Common::CommandLine *dataIn(){ return Common::ICore::instance()->commandLine();}//pointer on commandLineParser
static inline QString pixmapsPath(){return Common::ICore::instance()->settings()->iconPath();}
static inline Common::Position *position() {return Common::ICore::instance()->position();}
depensedialog::depensedialog()

{
  setupUi(this);
  setAttribute(Qt::WA_DeleteOnClose);
  setAttribute( Qt::WA_AlwaysShowToolTips);
  position()->centralPosition(this,width(),height());
  qDebug() << "application name ="+qApp->applicationName();
  
  m_utildialogdep = new utilisateurpref;
  m_user = dataIn()->value(Common::CommandLine::CL_CallingProgramUser).toString();

  pushButton_4   -> setShortcut(QKeySequence("Ctrl+Q"));
  pushButton     -> setEnabled(true);
  pushButton     -> setIcon(QIcon(pixmapsPath() +"/pixmap/vert.png"));
  pushButton_2 ->setToolTip(trUtf8  ("Bouton d'aide,\ncliquez ensuite sur la zone voulue."));
  pushButton   ->setWhatsThis(trUtf8("Ce bouton entre la dépense affichée et des paramètres\ndans la base."));
  pushButton_3 ->setWhatsThis(trUtf8("Efface la ligne surlignée."));
  pushButton_4 ->setWhatsThis(trUtf8("Bouton de fermeture"));
  pushButton_5 ->setWhatsThis(trUtf8("Ce bouton permet de valider après coup la réception \ndes factures correspondant aux dépenses."));
  checkBox_5   ->setWhatsThis(trUtf8("Cochez cette case si vous avez reçu\nla facture correspondant à la dépense"));
  dateEdit     ->setWhatsThis(trUtf8("Choisir la date de la dépense"));
  label_5      ->setWhatsThis(trUtf8("Choisir la date de la dépense"));
  groupBox     ->setWhatsThis(trUtf8("Choisir le type de règlement"));
  label_2      ->setWhatsThis(trUtf8("Choisir le pourcentage professionnel de la dépense."));
  comboBox_2   ->setWhatsThis(trUtf8("Choisir le pourcentage professionnel de la dépense."));
  label        ->setWhatsThis(trUtf8("Choisir le type de dépense dans le menu selon les items de la 2035."));
  comboBox     ->setWhatsThis(trUtf8("Choisir le type de dépense dans le menu selon les items de la 2035."));
  label_3      ->setWhatsThis(trUtf8("Mettre la valeur de la dépense."));
  lineEdit     ->setWhatsThis(trUtf8("Mettre la valeur de la dépense."));
  label_6      ->setWhatsThis(trUtf8("Exemple :""salaire de Mme Untel."));
  lineEdit_2   ->setWhatsThis(trUtf8("Exemple :""salaire de Mme Untel."));
  tableView    ->setWhatsThis(trUtf8("Contenu de la base mouvements."));
  label_7      ->setWhatsThis(trUtf8("Choix du compte bancaire.\nLe compte préférentiel est en premier."));
  comboBox_4   ->setWhatsThis(trUtf8("Choix du compte bancaire.\nLe compte préférentiel est en premier."));

  dateEdit      ->setDate(QDate::currentDate());

//----appel des bases----------------------
    //m_db1 		   = QSqlDatabase::database(Constants::DB_DRTUX);  //DrTuxTEST
    m_accountancyDb 		   = QSqlDatabase::database(Constants::DB_ACCOUNTANCY);//comptabilite

//---remplir depense.ini avec table mouvements_disponibles----------------
  remplirdepensesini();
//--------------------------------------------------------------------
  m_modele = new QSqlTableModel(this,m_accountancyDb);
  m_model  = new QSqlTableModel(this,m_accountancyDb);
  m_model  ->setTable("mouvements");

  m_model->select();

  tableView->setModel(m_model);
  tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
  tableView->setSelectionMode(QAbstractItemView::SingleSelection);
  tableView->setEditTriggers(QAbstractItemView::SelectedClicked);
  tableView->setSortingEnabled(true);
  tableView->setColumnHidden(0,true);
  tableView->setColumnHidden(1,true);
  tableView->setColumnHidden(2,true);
  tableView->setColumnHidden(3,true);
  tableView->setColumnHidden(4,true);
  tableView->setColumnHidden(11,true);
  tableView->setColumnHidden(12,true);
  tableView->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
  tableView->horizontalHeader()->setStretchLastSection ( true );
  tableView->verticalHeader()  ->setResizeMode(QHeaderView::Stretch);
  tableView->show();

  checkBox ->setCheckable(true);
  checkBox_2->setCheckable(true);
  checkBox_3->setCheckable(true);
  checkBox_4->setCheckable(true);
  checkBox_5->setCheckable(true);

  checkBox->setAutoExclusive(true);
  checkBox_2->setAutoExclusive(true);
  checkBox_3->setAutoExclusive(true);
  checkBox_4->setAutoExclusive(true);
//------remplir depenses---------------
  comboBox->setEditable(1);
  comboBox->setToolTip("Apports praticiens");
  comboBox->setInsertPolicy(QComboBox::NoInsert);
  QSqlQuery queryDepensesTypes(m_accountancyDb);
  QString   typesDepenses = "SELECT type,libelle FROM mouvements_disponibles";
            queryDepensesTypes.exec(typesDepenses);
            int nKey = 0;
            while(queryDepensesTypes.next()){
                nKey ++;
                QString lineType = queryDepensesTypes.value(0).toString();
                QString lineLibelle = queryDepensesTypes.value(1).toString();
                m_typeMap.insert(nKey,lineType);
                m_spendingsMap.insert(nKey,lineLibelle);
            }
  qDebug() << "map size = "+QString::number(m_spendingsMap.size());
  QMapIterator<int,QString> it(m_spendingsMap);
  while(it.hasNext()){
      it.next();
      int key = it.key();
      QString typeSpendings = m_typeMap.value(key);
      QString libelleSpendings = it.value();
      qDebug() << typeSpendings+" "+libelleSpendings;
      if(typeSpendings == "0"){
          comboBox->addItem(QIcon(pixmapsPath()+"/plusOrange.png"),libelleSpendings,Qt::ToolTipRole);
      }
      else if(typeSpendings == "1") {
          comboBox->addItem(QIcon(pixmapsPath()+"/minus.png"),libelleSpendings,Qt::ToolTipRole);
      }
      else{
          QMessageBox::warning(0,tr("Erreur"),
          trUtf8("Erreur mapping dépenses")+QString::number(__LINE__)+__FILE__,QMessageBox::Ok);
      }

  }


//---------remplissage comboBox pourcentages-------------------------------
  comboBox_2->setEditable(1);
  comboBox_2->setInsertPolicy(QComboBox::NoInsert);

  QString percentsStr = Common::ICore::instance()->settings()->value(S_POURCENTAGES_DEPENSES).toString();
  m_depensespourcentages = percentsStr.split(" ");
  comboBox_2->addItems(m_depensespourcentages);

//--------choix user preferentiel---------------
  QString utilisateurpref = Common::ICore::instance()->settings()->value(S_UTILISATEUR_CHOISI).toString();
                     m_id = Common::ICore::instance()->settings()->value(S_ID_UTILISATEUR_CHOISI).toInt();

  QSqlQuery query3(m_accountancyDb);
            query3.exec("SELECT id_usr,login FROM utilisateurs WHERE id_usr = '"+QString::number(m_id)+"'");
            if(query3.next()){
               m_idusr     = query3.value(0).toInt();
               m_loginpref = query3.value(1).toString();
            }


  if(m_user == "" && m_loginpref == ""){
        m_u             = new utilisateur("admin");

	QString compta;
	int retno = 0;
	 QMessageBox msgBox;
	 QMessageBox msgBoxNo;

 	msgBox.setText(trUtf8("Il n'est pas possible d'obtenir les utilisateurs\nde la table utilisateurs de comptabilite,\n"
 			      "ou l'utilisateur préférentiel est mal renseigné dans config.ini.\n"
			      "Voulez vous paramétrer les utilisateurs de la comptabilité ?"));
 	//msgBox.setInformativeText(trUtf8("Paramétrage de la table comptabilité"));
 	msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No );
 	QPushButton *elseButton = msgBox.addButton(trUtf8("Else"),QMessageBox::AcceptRole);
 	             elseButton-> setToolTip(trUtf8("Paramétrer l'utilisateur préférentiel.\n"
 	                                            "Vous devez d'abord paramétrer les utilisateurs."));
 	msgBox.setDefaultButton(QMessageBox::Yes);
 	int ret = msgBox.exec();
 	switch(ret){
 	    case QMessageBox::Yes:
               m_u -> show();
               connect(m_u,SIGNAL(destroyed()),this,SLOT(remplirComboUtilisateurs()));
            break;
 	    case QMessageBox::No:
 	       msgBox.close();
 	    break;
 	    case QMessageBox::AcceptRole:
 	       msgBoxNo.setText(trUtf8("Voulez-vous paramétrer l'utilisateur préférentiel dans config.ini ?"));
 	       msgBoxNo.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
 	       msgBoxNo.setDefaultButton(QMessageBox::Yes);
 	       retno = msgBoxNo.exec();

 		switch(retno){
 		    case QMessageBox::Yes:
 		        m_utildialogdep->show();
 		    break;
 		    case QMessageBox::No:
 		       msgBoxNo.close();
 		       msgBox.close();
 		    break;
 		    default:
 		    break;
 		}
 	   break;
 	   default:
 	   break;
 	}

  }
  m_listelogin << m_loginpref;
  //choix user
  comboBox_3->setEditable(1);
  comboBox_3->setInsertPolicy(QComboBox::NoInsert);
  QSqlQuery query4(m_accountancyDb);
            query4.exec("SELECT login FROM utilisateurs");
  while(query4.next()){
      m_login = query4.value(0).toString();
      m_listelogin << m_login;
  }
  m_listelogin.removeDuplicates();
  if(m_listelogin.size() < 1){
      m_listelogin << trUtf8("Docteur Générique");
      label_4   -> setStyleSheet("*{color:red}");
      label_4   -> setText(trUtf8("Utilisateurs \nnon configurés"));
      label_4   -> setWordWrap(true);
      label_4   -> setToolTip(trUtf8("Veuillez les configurer dans les paramétrages"));
  }

  comboBox_3->addItems(m_listelogin);
//------------remplissage du comboBox_4 comptes bancaires---------------------------------------
    comboBox_4                   -> setEditable(1);
    comboBox_4                   -> setInsertPolicy(QComboBox::NoInsert);
    QString requeteCompte = "SELECT id_compte,id_usr,libelle,solde_initial FROM comptes_bancaires";
    QStringList listLibelleCompte;
    m_solde_initial = 0.00; //initialisation double solde_initial
    QSqlQuery queryReqComptes(m_accountancyDb);
              if(!queryReqComptes.exec(requeteCompte)){
                  QMessageBox::warning(0,tr("Erreur"),trUtf8("Erreur =")
                  +queryReqComptes.lastError().text(),QMessageBox::Ok);
              }
              while(queryReqComptes.next()){
                 QString reqLibelle = queryReqComptes.value(2).toString();
                 listLibelleCompte << reqLibelle;
                 m_hashCompte.insert(queryReqComptes.value(0).toString(),reqLibelle);
                 m_solde_initial = queryReqComptes.value(3).toDouble();

              }
    if(m_loginpref.isEmpty() == false){
        if(m_hashCompte.count(QString::number(m_id)) > 1){
            QMessageBox::information(0,trUtf8("Information"),trUtf8("Plusieurs comptes bancaires possibles pour "
                                                                    "cet utilisateur,\nveuillez en choisir un"),QMessageBox::Ok);
        }
        else{
            QString reqComptePref = m_hashCompte.value(QString::number(m_id));
            if(!reqComptePref.isEmpty()){
                listLibelleCompte.prepend(reqComptePref);
            }

        }

    }
    comboBox_4 -> addItems(listLibelleCompte);

//----------------------------------------------------------------------------------------------
//--------------------------connect--------------------------------------------------------------
  connect(pushButton,  SIGNAL(pressed()),this,SLOT(enregistredepense()));
  connect(pushButton_2,SIGNAL(pressed()),this,SLOT(whatsthismode()));
  connect(pushButton_3,SIGNAL(pressed()),this,SLOT(effacer()));
  connect(pushButton_4,SIGNAL(pressed()),this,SLOT(close()));
  connect(pushButton_5,SIGNAL(pressed()),this,SLOT(valide()));
  connect(comboBox,SIGNAL(highlighted(int)),this,SLOT(showToolTip(int)));

}
///////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------------fin du constructeur------------------------------------------------
/////////////////////////////////////////////////////////////////////////////////////////////////

depensedialog::~depensedialog(){
    delete   m_utildialogdep;
   // delete   m_u;
    delete   m_model;
    delete   m_modele;
    m_id     = 0;
    m_idusr  = 0;
    m_id_usr = 0;
    m_compte = 0;
    m_loginpref  = "";
    m_login        = "";
    m_listelogin          .clear();
    m_depensespourcentages.clear();
}

//////////////////////////////////////////////////////////////////////////////////////////////////
/////////--------------enregistrer la depense-----------------------------------------------------
//////////////////////////////////////////////////////////////////////////////////////////////////
void depensedialog::enregistredepense()
{
  if(m_spendingsMap.size() < 1){
      QMessageBox::warning(0,trUtf8("Erreur"),trUtf8("depense.ini est vide.\nProblème de récupération de la "
                                                   "table mouvements_disponibles."),QMessageBox::Ok);
  }
//-----------variables----------------------------------------
  QString depense;
  QString pourcentage;
  QString utilisateur;
  int valide = 0;
  if(checkBox_5->isChecked()){
      valide     = 1;
  }
  int pourcent;
  double valeur;
  double valeurdepense;
  QString detail;
  int idmvt = 0;
  QString libelle;
  int type = 0;//valeur en positif (apport) ou négatif (depense)

//------------fin variables-------------------------------------
  depense           = comboBox->currentText();
  libelle           = depense;




//---quelles valeurs sont positives(les dépenses) et négatives (les apports), il s'agit de débit...
  QSqlQuery queryplusoumoins(m_accountancyDb);
            queryplusoumoins.exec("SELECT type ,  id_mvt_dispo FROM mouvements_disponibles WHERE libelle = '"+depense+"'");
  if(queryplusoumoins.next()){
      type  = queryplusoumoins.value(0).toInt();
      idmvt = queryplusoumoins.value(1).toInt();
  }
//fin type
//---------recuperation donnees inscrites par l'utilisateur----------------------------------
  QDate currentdate    = QDate::currentDate();
  QString datecourante = currentdate.toString("yyyy-MM-dd");

  QDate daterecup      = dateEdit->date();
  QString date         = daterecup.toString("yyyy-MM-dd");

  pourcentage          = comboBox_2->currentText();
  pourcent             = pourcentage.toInt();

  utilisateur          = comboBox_3->currentText();
  valeur               = lineEdit->text().toDouble();
  valeurdepense        = valeur*pourcent/100;
  detail               = lineEdit_2->text().toUtf8();
  //--particularites semantiques
     if(detail.contains("'")){
         detail.replace("'","''");
     }
//fin recuperation donnees
  QSqlQuery query1(m_accountancyDb);
            query1.exec("SELECT id_usr,id_drtux_usr FROM utilisateurs WHERE login = '"+utilisateur+"'");
  if(query1.next()){
      //iduser = query1.value(1).toInt();
      m_id_usr = query1.value(0).toInt();
  }

  QSqlQuery query2(m_accountancyDb);
            query2.exec("SELECT id_compte FROM comptes_bancaires WHERE id_usr = "+QString::number(m_id_usr)+"");
  if(query2.next()){
      m_compte = query2.value(0).toInt();
  }

  QMessageBox *message2;

  QSqlQuery query(m_accountancyDb);

  if(checkBox->isChecked()){
      checkBox_2->setChecked(false);
      checkBox_3->setChecked(false);
      checkBox_4->setChecked(false);
    query.exec("INSERT INTO mouvements (id_mvt_dispo,id_usr,id_compte,type,libelle,date,date_valeur,montant,remarque,valide,tracabilite,detail)"
             "VALUES ("+QString::number(idmvt)+","+QString::number(m_id_usr)+","+QString::number(m_compte)+","+QString::number(type)+","
             "'"+libelle+"','"+datecourante+"','"+date+"',"+QString::number(valeurdepense)+",'esp',"+QString::number(valide)+",0,'"+detail+"')");
    emit rafraichir();
    emit messagebox();
  }
  else if(checkBox_2->isChecked()){
    checkBox->setChecked(false);
    checkBox_3->setChecked(false);
    checkBox_4->setChecked(false);
    query.exec("INSERT INTO mouvements" "(id_mvt_dispo,id_usr,id_compte,type,libelle,date,date_valeur,montant,remarque,valide,tracabilite,detail)"
               "VALUES ("+QString::number(idmvt)+","+QString::number(m_id_usr)+","+QString::number(m_compte)+","+QString::number(type)+","
	       "'"+libelle+"','"+datecourante+"','"+date+"',"+QString::number(valeurdepense)+",'chq',"+QString::number(valide)+",0,'"+detail+"')");
    emit rafraichir();
    emit messagebox();
  }
  else if(checkBox_3->isChecked()){
    checkBox->setChecked(false);
    checkBox_2->setChecked(false);
    checkBox_4->setChecked(false);
    query.exec("INSERT INTO mouvements (id_mvt_dispo,id_usr,id_compte,type,libelle,date,date_valeur,montant,remarque,valide,tracabilite,detail)"
             "VALUES ("+QString::number(idmvt)+","+QString::number(m_id_usr)+","+QString::number(m_compte)+","+QString::number(type)+","
             "'"+libelle+"','"+datecourante+"','"+date+"',"+QString::number(valeurdepense)+",'cb_vir',"+QString::number(valide)+",0,'"+detail+"')");
    emit rafraichir();
    emit messagebox();
  }
  else if(checkBox_4->isChecked()){
    checkBox->setChecked(false);
    checkBox_2->setChecked(false);
    checkBox_3->setChecked(false);
    query.exec("INSERT INTO mouvements (id_mvt_dispo,id_usr,id_compte,type,libelle,date,date_valeur,montant,remarque,valide,tracabilite,detail)"
               "VALUES ("+QString::number(idmvt)+","+QString::number(m_id_usr)+","+QString::number(m_compte)+","+QString::number(type)+","
               "'"+libelle+"','"+datecourante+"','"+date+"',"+QString::number(valeurdepense)+",'prelevt',"+QString::number(valide)+",0,'"+detail+"')");
    emit rafraichir();
    emit messagebox();
  }
  else message2->warning(0,trUtf8("Erreur"),trUtf8("Vous avez oublié de choisir le type de paiement !"),QMessageBox::Ok);

  //--------------insertion dans table rapprochement_bancaire du solde actuel--------------------------
  QString nouveauSolde = "";
  QString reqSolde = "SELECT solde FROM rapprochement_bancaire";
  int idCompte = m_hashCompte.key(comboBox_4->currentText()).toInt();
  QSqlQuery querySolde(m_accountancyDb);
  QSqlQuery queryInsertBank(m_accountancyDb);
  QStringList listSolde;
      querySolde.exec(reqSolde);
      while(querySolde.next()){
          QString solde = querySolde.value(0).toString();
          listSolde << solde;
      }
      double resultSolde = 0.00;
      if((listSolde.size() == 0 ) == false){
          resultSolde = listSolde.last().toDouble();
      }
      else{
          resultSolde = m_solde_initial;
      }
      nouveauSolde = QString::number(resultSolde-valeurdepense);
   QString requeteInsertSolde ="INSERT INTO rapprochement_bancaire (id_compte,solde) "
                               "VALUES("+QString::number(idCompte)+",'"+nouveauSolde+"')";
   if(!queryInsertBank.exec(requeteInsertSolde)){
       qDebug() << "Erreur ="+queryInsertBank.lastError().text()+"\n"+requeteInsertSolde;
   }
}

/*void depensedialog::voirdepenses()
{
  emit rafraichir();
}*/

void depensedialog::effacer()
{
  QModelIndex index                   = tableView->QAbstractItemView::currentIndex();
  if(!index.isValid()){
      QMessageBox::warning(0,trUtf8("Erreur"),trUtf8("vous avez oublié de sélectionner une ligne à effacer"),QMessageBox::Ok);
  }
  int i                               = index.row();
  if(tableView->model()==m_model){
      if(m_model -> removeRows(i,1,QModelIndex()) == false){
          qWarning() << __FILE__ << QString::number(__LINE__) << "lastError = " << m_model->lastError().text();
          }
      m_model                          -> submitAll();
      rafraichir();
      QMessageBox::information(0,trUtf8("Information"),trUtf8("La ligne a été effacée."),QMessageBox::Ok);
  }
  else if(tableView->model()==m_modele){
      if(m_modele -> removeRows(i,1,QModelIndex()) == false){
          qWarning() << __FILE__ << QString::number(__LINE__) << "lastError = " << m_modele->lastError().text();
          }
      m_modele                       -> submitAll();
      rafraichir();
      QMessageBox::information(0,trUtf8("Information"),trUtf8("La ligne a été effacée."),QMessageBox::Ok);
  }

  else{
      QMessageBox::critical(0,trUtf8("Erreur"),trUtf8("Impossible d'effacer la ligne!"),QMessageBox::Ok);
  }

}

void depensedialog::rafraichir()
{
  m_model  -> clear();

  m_modele ->setTable("mouvements");

  m_modele ->select();

  tableView->setModel(m_modele);
  tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
  tableView->setSelectionMode(QAbstractItemView::SingleSelection);
  tableView->setEditTriggers(QAbstractItemView::SelectedClicked);
  tableView->setSortingEnabled(true);
  tableView->setColumnHidden(0,true);
  tableView->setColumnHidden(1,true);
  tableView->setColumnHidden(2,true);
  tableView->setColumnHidden(3,true);
  tableView->setColumnHidden(4,true);
  tableView->setColumnHidden(11,true);
  tableView->setColumnHidden(12,true);
  tableView->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
  tableView->horizontalHeader()->setStretchLastSection ( true );
  tableView->verticalHeader()  ->setResizeMode(QHeaderView::Stretch);
  tableView->show();

  checkBox  ->setChecked(false);
  checkBox_2->setChecked(false);
  checkBox_3->setChecked(false);
  checkBox_4->setChecked(false);
  checkBox_5->setChecked(false);
}

void depensedialog::messagebox(){
  QMessageBox::information(0,trUtf8("Info"),trUtf8("La dépense a été ajoutée"),QMessageBox::Ok);
}
//------------------------remplir le fichier depenses.ini à partir de la base "mouvements_dispo"
void depensedialog::remplirdepensesini(){
  QFile depensef(absolutePath()+"/depense.ini");
  if(!depensef.open(QIODevice::ReadWrite|QIODevice::Truncate)){
      QMessageBox::warning(0,trUtf8("Erreur"),trUtf8("depense.ini ne peut pas être ouvert,erreur 422."),QMessageBox::Ok);
      return;
      }

  QTextStream fleuvef(&depensef);

  QSqlQuery query(m_accountancyDb);
            query.exec("SELECT id_mvt_dispo, libelle FROM mouvements_disponibles");
  QStringList list;
  while(query.next()){
      QString chiffre   = query.value(0).toString();
      QString mouvement = query.value(1).toString();
              list     << chiffre+"="+mouvement+"\n";
  }
  foreach(QString str,list){
      fleuvef          << str;
  }
}

void depensedialog::valide(){
//-----------recuperation index de la ligne surlignee-----------------
  QModelIndex index                       = tableView->QAbstractItemView::currentIndex();
  if(!index.isValid()){
      QMessageBox::warning(0,trUtf8("Erreur"),trUtf8("vous avez oublié de sélectionner une ligne à valider"),QMessageBox::Ok);
  }
  int i = index.row();

  if(tableView->model()==m_model){
      QModelIndex indexvalide = m_model->index(i,10,QModelIndex());
      m_model->setEditStrategy(QSqlTableModel::OnFieldChange);
      m_model->setData(indexvalide,1,Qt::EditRole);
      m_model->submitAll();
      rafraichir();
            }
  else if(tableView->model()==m_modele){
      QModelIndex indexvalide2 = m_modele->index(i,10,QModelIndex());
      m_modele->setEditStrategy(QSqlTableModel::OnFieldChange);
      m_modele->setData(indexvalide2,1,Qt::EditRole);
      m_modele->submitAll();
      rafraichir();
            }
  else{
      QMessageBox::critical(0,trUtf8("Erreur"),trUtf8("Impossible d'insérer la validation de facture!"),QMessageBox::Ok);
  }

}

/*void depensedialog::altertable(){

  QSqlQuery query1(m_accountancyDb);
  query1.exec("ALTER TABLE mouvements ADD validation  tinyint(1)                             NULL AFTER tracabilite;");
  QSqlQuery query2(m_accountancyDb);
  query2.exec("ALTER TABLE mouvements ADD detail      varchar(100)  COLLATE utf8_unicode_ci  NULL AFTER validation;");

}*/

void depensedialog::remplirComboUtilisateurs(){
  parametrages p(this);
  QMessageBox mess;
              mess   . setText(trUtf8("Voulez vous paramétrer la comptabilité ?"));
              mess   . setStandardButtons(QMessageBox::Ok|QMessageBox::No);
              mess   . setDefaultButton(QMessageBox::Ok);
  int         retour = mess . exec();
  switch(retour){
      case QMessageBox::Ok :
              p . show();
        break;
      case QMessageBox::No :
        break;
      default:
        QMessageBox::warning(0,tr("Erreur"),trUtf8("Erreur switch ")+QString(__FILE__)+" "+QString(__LINE__),QMessageBox::Ok);
        break;

  }
  m_listelogin.clear();
  comboBox_3 -> clear();

  QString utilisateurpref = Common::ICore::instance()->settings()->value(S_UTILISATEUR_CHOISI).toString();
  m_id = Common::ICore::instance()->settings()->value(S_ID_UTILISATEUR_CHOISI).toInt();

  QSqlQuery query3(m_accountancyDb);
            query3.exec("SELECT id_usr,login FROM utilisateurs WHERE id_drtux_usr = "+QString::number(m_id)+"");
  if(query3.next()){
      m_idusr     = query3.value(0).toInt();
      m_loginpref = query3.value(1).toString();
  }
  m_listelogin << m_loginpref;
  QSqlQuery query4(m_accountancyDb);
            query4.exec("SELECT login FROM utilisateurs");
  while(query4.next()){
      m_login = query4.value(0).toString();
      m_listelogin << m_login;
  }
  if(m_listelogin.size() < 1){
      m_listelogin . prepend( trUtf8("Docteur générique"));
      label_4   -> setStyleSheet("*{color:red}");
      label_4   -> setText(trUtf8("Utilisateurs \nnon configurés"));
      label_4   -> setWordWrap(true);
      label_4   -> setToolTip(trUtf8("Veuillez les configurer dans les paramétrages."));
  }
  comboBox_3->addItems(m_listelogin);

}

void depensedialog::whatsthismode()
{
  QWhatsThis::enterWhatsThisMode();
}

void depensedialog::showToolTip(int row){
    QString text = comboBox->itemText(row);
    QAbstractItemModel *m = new QStandardItemModel;
    m = comboBox->model();
    QStandardItemModel *model = qobject_cast<QStandardItemModel*> (m);
    QStandardItem *i = model->item(row);
    i->setToolTip(text);
}
