#include <QtGui>
#include <QtCore>
#include <QtSql>

#include "depensedialog.h"
#include "connexion.h"
extern QString pathabsolu;
depensedialog::depensedialog(QWidget *parent):QWidget(parent)

{
setupUi(this);
dateEdit->setDate(QDate::currentDate());
CreateConnexion2();

model = new QSqlTableModel(this);
model->setTable("mouvements");

model->select();

tableView->setModel(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(10,true);
tableView->setColumnHidden(11,true);
tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
tableView->verticalHeader()->setResizeMode(QHeaderView::Stretch);
tableView->show();

/*for (int row = 0; row < model->rowCount(); ++row)
{
c_m_record = model->record(row);
c_m_ident.append(c_m_record.value("id_mouvement").toString());
}*/

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

comboBox->setEditable(1);
comboBox->setInsertPolicy(QComboBox::NoInsert);

QFile depense(""+pathabsolu+"/depense.ini");
if(!depense.open(QIODevice::ReadOnly))
return;

QTextStream fleuve(&depense);
while(!fleuve.atEnd()){
QString lignedepense=fleuve.readLine();
depensesliste << ""+lignedepense+"";
}


comboBox->addItems(depensesliste);

comboBox_2->setEditable(1);
comboBox_2->setInsertPolicy(QComboBox::NoInsert);

QFile pourcentage(""+pathabsolu+"/pourcentages.ini");
if(!pourcentage.open(QIODevice::ReadOnly))
return;

QTextStream riviere(&pourcentage);
while(!riviere.atEnd()){
QString lignepourcentage = riviere.readLine();
depensespourcentages << ""+lignepourcentage+"";
}


comboBox_2->addItems(depensespourcentages);

//choix user preferentiel
QStringList listepoint;
QFile user(""+pathabsolu+"/comptabilite.ini");
if(!user.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream point(&user);
while(!point.atEnd()){
QString utilisateur = point.readLine();
listepoint << ""+utilisateur+"";
}
QString utilisateurpref = listepoint[24];
QStringList utilisateurnbre = utilisateurpref.split("=",QString::KeepEmptyParts);
id = utilisateurnbre.value(1).toInt();

QSqlQuery query3;
query3.exec("SELECT id_usr,login FROM utilisateurs WHERE id_drtux_usr = "+QString::number(id)+"");
if(query3.next())
{
idusr = query3.value(0).toInt();
loginpref = query3.value(1).toString();
}

//choix user
comboBox_3->setEditable(1);
comboBox_3->setInsertPolicy(QComboBox::NoInsert);
listelogin << ""+loginpref+"";

QSqlQuery query4;
query4.exec("SELECT login FROM utilisateurs");
while(query4.next()){
login = query4.value(0).toString();
listelogin << ""+login+""; 
}
comboBox_3->addItems(listelogin);

connect(pushButton,SIGNAL(pressed()),this,SLOT(enregistredepense()));
connect(pushButton_2,SIGNAL(pressed()),this,SLOT(voirdepenses()));
connect(pushButton_3,SIGNAL(pressed()),this,SLOT(effacer()));
connect(pushButton_4,SIGNAL(pressed()),this,SLOT(close()));
}

void depensedialog::enregistredepense()
{
QString depense;
QString pourcentage;
QString utilisateur;

int pourcent;
double valeur;
double valeurdepense;
int idmvt;

QString libelle;


QDate currentdate = QDate::currentDate();
QString datecourante = currentdate.toString("yyyy-MM-dd");

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

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

utilisateur = comboBox_3->currentText();
valeur = lineEdit->text().toDouble();
valeurdepense = valeur*pourcent/100;
QStringList listedepense = depense.split("=",QString::KeepEmptyParts);
idmvt = listedepense.value(0).toInt();
libelle = listedepense.value(1);

QSqlQuery query1;
query1.exec("SELECT id_usr,id_drtux_usr FROM utilisateurs WHERE login = '"+utilisateur+"'");
if(query1.next()){
//iduser = query1.value(1).toInt();
id_usr = query1.value(0).toInt();
}

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


QMessageBox *message2;


QSqlQuery query;

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)"
"VALUES ("+QString::number(idmvt)+","+QString::number(id_usr)+","+QString::number(compte)+",1,'"+libelle+"','"+datecourante+"','"+date+"',"+QString::number(valeurdepense)+",'|esp',0,0)");
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)"
"VALUES ("+QString::number(idmvt)+","+QString::number(id_usr)+","+QString::number(compte)+",1,'"+libelle+"','"+datecourante+"','"+date+"',"+QString::number(valeurdepense)+",'|chq',0,0)");
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)"
"VALUES ("+QString::number(idmvt)+","+QString::number(id_usr)+","+QString::number(compte)+",1,'"+libelle+"','"+datecourante+"','"+date+"',"+QString::number(valeurdepense)+",'|cb_',0,0)");
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)"
"VALUES ("+QString::number(idmvt)+","+QString::number(id_usr)+","+QString::number(compte)+",1,'"+libelle+"','"+datecourante+"','"+date+"',"+QString::number(valeurdepense)+",'|vir',0,0)");
emit rafraichir();
emit messagebox();
}
else message2->warning(0,tr("erreur"),trUtf8("vous avez oublié de choisir le type de paiement !"),QMessageBox::Ok);



}

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

void depensedialog::effacer()
{
QModelIndex index = tableView->QAbstractItemView::currentIndex();
if(!index.isValid()){
QMessageBox::warning(0,tr("erreur"),tr("vous avez oublié de sélectionner une ligne à effacer"),QMessageBox::Ok);
}
int i = index.row();
if(tableView->model()==model){
model->removeRows(i,1,QModelIndex());
QMessageBox::information(0,tr("information"),tr("La ligne a été effacée."),QMessageBox::Ok);
}
//QString idmouve = c_m_ident[i];
//int idmouvement = idmouve.toInt();


/*QSqlQuery query4;
if((query4.exec("DELETE FROM mouvements WHERE id_mouvement = '"+QString::number(idmouvement)+"'")==true)){
emit rafraichir();}*/
else{
QMessageBox::critical(0,tr("erreur"),tr("impossible d'effacer la ligne!"),QMessageBox::Ok);}

}

void depensedialog::rafraichir()
{
QSqlTableModel *modele = new QSqlTableModel;
modele->setTable("mouvements");

modele->select();

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

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

void depensedialog::messagebox(){
QMessageBox::information(0,tr("info"),trUtf8("la dépense a été ajoutée"),QMessageBox::Ok);
}
