/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Models.Caisse;

import Controllers.Traitement.Adaptateur;
import Controllers.Traitement.ParametreSystem;
import Controllers.Traitement.contro;
import Models.User.Profile;
import Models.User.ProfileDB;
import Models.connexion;
import java.sql.ResultSet;
import java.sql.SQLException;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

/**
 *
 * @author Maher
 */
public class FraisDB {
    
    connexion cnx = new connexion();
    contro clt = new contro();
    
    public Frais getFrais(String IdFrais){
        Frais frais = new Frais();
        if(cnx.ouverture()){
            try{
               ResultSet resultat = cnx.excutionquery("SELECT *, DATE_FORMAT(date_cheque, '%d/%m/%Y') as datecheque, DATE_FORMAT(date_creation, '%d/%m/%Y %H:%i') as datecreation FROM `frais` WHERE `id_frais` = "+IdFrais+" ;");
                //on place le curseur sur le dernier tuple
                resultat.last();
                //on récupère le numéro de la ligne
                int nombreLignes = resultat.getRow();
                if(nombreLignes>0){
                
                    frais.setIdFrais(resultat.getString("id_frais"));
                    frais.setMontant(Adaptateur.FloatToStringEspaceCurrency(resultat.getFloat("montant")));
                    frais.setObject(resultat.getString("object"));
                    frais.setContext(resultat.getString("context"));
                    frais.setPersonne(resultat.getString("personne"));
                    frais.setPaiement(resultat.getString("mode_paiement"));
                    frais.setNumero(resultat.getString("numero"));
                    frais.setBanque(resultat.getString("banque"));
                    frais.setDateCheque(resultat.getString("datecheque"));
                    frais.setLocalNom(resultat.getString("local_nom"));
                    frais.setDateCreation(resultat.getString("datecreation"));
                    
                    Profile profile = new ProfileDB().getpro(resultat.getInt("id_profile"));
                    frais.setProfile(profile.getNom()+" "+profile.getPrenom());
                    
                }
            }catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
            }
        }
        return frais;
    }
    
    public Frais setFrais(Frais frais){
        
        String Context = "NULL";
        if(frais.getContext() != null){
            Context = "'"+frais.getContext().replace("'", "\\'").replace("\"", "\\\"")+"'";
        }
        String Personne = "NULL";
        if(frais.getPersonne() != null){
            Personne = "'"+frais.getPersonne()+"'";
        }
        
        String Numero = "NULL";
        if(frais.getNumero() != null){
            Numero = "'"+frais.getNumero()+"'";
        }
        
        String Banque = "NULL";
        if(frais.getBanque()!= null){
            Banque = "'"+frais.getBanque()+"'";
        }
        
        String DateCheque = "NULL";
        if(frais.getDateCheque()!= null){
            DateCheque = "'"+frais.getDateCheque()+"'";
        }
        
        String Query = "INSERT INTO `frais` (`montant`, `object`, `context`, `personne`, `mode_paiement`, `numero`, `banque`, `date_cheque`, `id_profile`, `local_nom`, `date_creation`) VALUES ('"+frais.getMontant()+"', '"+frais.getObject()+"', "+Context+", "+Personne+", '"+frais.getPaiement()+"', "+Numero+", "+Banque+", "+DateCheque+", '"+frais.getProfile()+"', '"+frais.getLocalNom()+"', '"+frais.getDateCreation()+"');";
        
        frais.setIdFrais(cnx.InsertGetLastId(Query));
        
        return frais;
    }
    
    public ObservableList<Frais> SearchFraisGestion(Integer debut, Integer nbr, String CodeFrais, String ObjectFrais, String Presonne, String Locale, String Paiement, String DateCreation )
    {
        ObservableList<Frais> ListFrais =FXCollections.observableArrayList();
        
        String Where = "";
        
        if(!clt.isStringNull(CodeFrais)){
            Where += " (`id_frais` = \""+CodeFrais+"\") AND ";
        }
        
        if(!clt.isStringNull(ObjectFrais)){
            Where += " (`object` LIKE \"%"+Adaptateur.addSlashes(ObjectFrais)+"%\") AND ";
        }
        
        if(!clt.isStringNull(Presonne)){
            Where += " (`personne` LIKE \"%"+Adaptateur.addSlashes(Presonne)+"%\") AND ";
        }
        
        if(!clt.isStringNull(Locale)){
            Where += " (`local_nom` LIKE \""+Adaptateur.addSlashes(Locale)+"\") AND ";
        }
        
        if(!clt.isStringNull(Paiement)){
            if(Paiement.equals("Espèces")){
                Where += " (`mode_paiement` = '0') AND ";
            }else if(Paiement.equals("Chèque")){
                Where += " (`mode_paiement` = '1') AND ";
            }else if(Paiement.equals("Carte Bancaire")){
                Where += " (`mode_paiement` = '2') AND ";
            }
        }
        
        if(!clt.isStringNull(DateCreation)){
            Where += " (DATE(`frais`.`date_creation`) = \""+DateCreation+"\") AND ";
        }
        
       
        if(!Where.equals("")){
            Where = Where.substring(0, Where.length() - 4);
            Where = "WHERE  (id_profile = idprofile) AND " + Where;
        }else{
            Where = " WHERE (id_profile = idprofile) ";
        }
        
        String req = "SELECT  *, DATE_FORMAT(frais.date_creation, '%d/%m/%Y %H:%i') as date_creat "
                + " FROM `frais`, `profile` "
                + Where
                + "ORDER BY id_frais DESC "
                + "LIMIT "+debut+" , "+nbr+" ;";
        
                    
        if(cnx.ouverture()){
            try{
               // Exécution d'une requête de lecture 
                ResultSet resultat = cnx.excutionquery(req);
                //on place le curseur sur le dernier tuple
                resultat.last();
                //on récupère le numéro de la ligne
                int nombreLignes = resultat.getRow();
                if(nombreLignes>0){
                    //on repace le curseur avant la première ligne
                    resultat.beforeFirst();
                    while ( resultat.next() ) {
                        Frais frais = new Frais();
                        frais.setIdFrais(resultat.getString("id_frais"));
                        frais.setMontant(Adaptateur.FloatToStringEspace(resultat.getFloat("montant")));
                        frais.setObject(resultat.getString("object"));
                        frais.setContext(resultat.getString("context"));
                        frais.setPersonne(resultat.getString("personne"));
                        frais.setPaiement(resultat.getString("mode_paiement"));
                        frais.setNumero(resultat.getString("numero"));
                        frais.setBanque(resultat.getString("banque"));
                        frais.setLocalNom(resultat.getString("local_nom"));
                        frais.setDateCreation(resultat.getString("date_creat"));
                        frais.setProfile(resultat.getString("prenom")+" "+resultat.getString("nom"));
                        ListFrais.add(frais);
                    }
                }
            }
            catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
                System.out.println(req);
            }
        }
        return ListFrais;
    }
    
    public Integer nbrFraisGestion(String CodeFrais, String ObjectFrais, String Presonne, String Locale, String Paiement, String DateCreation )
    {
        String Where = "";
        
        if(!clt.isStringNull(CodeFrais)){
            Where += " (`id_frais` = \""+CodeFrais+"\") AND ";
        }
        
        if(!clt.isStringNull(ObjectFrais)){
            Where += " (`object` LIKE \"%"+Adaptateur.addSlashes(ObjectFrais)+"%\") AND ";
        }
        
        if(!clt.isStringNull(Presonne)){
            Where += " (`personne` LIKE \"%"+Adaptateur.addSlashes(Presonne)+"%\") AND ";
        }
        
        if(!clt.isStringNull(Locale)){
            Where += " (`local_nom` LIKE \""+Adaptateur.addSlashes(Locale)+"\") AND ";
        }
        
        if(!clt.isStringNull(Paiement)){
            if(Paiement.equals("Espèces")){
                Where += " (`mode_paiement` = '0') AND ";
            }else if(Paiement.equals("Chèque")){
                Where += " (`mode_paiement` = '1') AND ";
            }else if(Paiement.equals("Carte Bancaire")){
                Where += " (`mode_paiement` = '2') AND ";
            }
        }
        
        if(!clt.isStringNull(DateCreation)){
            Where += " (DATE(`date_creation`) = \""+DateCreation+"\") AND ";
        }
        
       
        if(!Where.equals("")){
            Where = Where.substring(0, Where.length() - 4);
            Where = "WHERE " + Where;
        }
        
        String req = "SELECT  COUNT(`id_frais`) "
                + " FROM `frais` "
                + Where +" ;";
        
        int sommme =0;
        
        if(cnx.ouverture()){
            try{
               /* Exécution d'une requête de lecture */
                ResultSet resultat = cnx.excutionquery(req);
                resultat.next();    // get the number of rows from the result set
                sommme = resultat.getInt(1);
            }
            catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
                System.out.println(req);
            }
        }
        return sommme ;
    }
   
    
    
}
