From 433e47e385450b01d108867b796a179a70c0d9b4 Mon Sep 17 00:00:00 2001 From: maher Date: Thu, 30 Oct 2025 13:23:53 +0100 Subject: [PATCH] first commit --- README.md | 0 conf/log4j.xml | 18 + conf/logo.xml | 39 + conf/logo1.png | Bin 0 -> 17747 bytes conf/logo2.png | Bin 0 -> 10114 bytes conf/logs/myStruts1App.log | 0 conf/parametre.xml | 33 + conf/print.xml | 95 ++ jshell.history | 0 nb-configuration.xml | 20 + nbactions.xml | 40 + pom.xml | 151 +++ src/logs/myStruts1App.log | 1 + src/main/java/Controllers/App.java | 40 + .../AuthentificationController.java | 197 +++ .../BonLivraisonCltAjouterController.java | 409 ++++++ ...onLivraisonCltAjouterEtape2Controller.java | 299 +++++ ...onLivraisonCltAjouterEtape3Controller.java | 81 ++ .../BonLivraisonCltDetailController.java | 347 +++++ .../BonLivraisonCltGestionController.java | 379 ++++++ .../BonLivraisonCltPrintController.java | 242 ++++ .../BonReceptionAjouterFrsController.java | 624 +++++++++ .../BonReceptionDetailFrsController.java | 150 +++ .../BonReceptionGestionFrsController.java | 480 +++++++ .../Caisse/CaisseEntreController.java | 457 +++++++ .../Caisse/CaisseEntrePrintController.java | 78 ++ .../Caisse/CaisseSortieController.java | 437 +++++++ .../Caisse/CaisseSortiePrintController.java | 78 ++ .../Caisse/FraisAjouterController.java | 220 ++++ .../Caisse/FraisDetailController.java | 157 +++ .../Caisse/FraisGestionController.java | 424 +++++++ .../Categorie/AjouterCategorieController.java | 123 ++ .../ChequeClt/ChequeCltDetailController.java | 327 +++++ .../ChequeClt/ChequeCltGestionController.java | 482 +++++++ .../ChequeCltProvisionController.java | 466 +++++++ .../ChequeCltProvisionPrintController.java | 77 ++ .../ChequeClt/ChequeCltVercerController.java | 274 ++++ .../Client/AjouterClientController.java | 54 + .../AjouterClientEntrepriseController.java | 448 +++++++ .../AjouterClientPersonneController.java | 398 ++++++ .../Client/DetailClientController.java | 552 ++++++++ .../GestionClientEntrepriseController.java | 417 +++++++ .../GestionClientPersonneController.java | 413 ++++++ .../java/Controllers/Client/ListeClient.java | 82 ++ .../Client/ListeClientEntreprise.java | 66 + .../Client/MenuClientController.java | 47 + .../RechercherClientEntrepriseController.java | 364 ++++++ .../RechercherClientPersonneController.java | 396 ++++++ .../CommandeClt/CommandeCltDetail.java | 196 +++ ...mmandeCltDialogConfirmationController.java | 203 +++ .../CommandeCltGestionController.java | 466 +++++++ .../CommandeCltPasserController.java | 1004 +++++++++++++++ .../DevisClt/DevisAjouterController.java | 911 ++++++++++++++ .../DevisClt/DevisCltGestionController.java | 425 +++++++ .../DevisClt/DevisCltPrintController.java | 240 ++++ .../DevisClt/DevisDetailController.java | 174 +++ .../DevisDialogConfirmationController.java | 167 +++ .../DevisClt/DevisImporterController.java | 396 ++++++ .../DevisClt/ListProduitDevis.java | 118 ++ src/main/java/Controllers/Dialog/Dialog.java | 87 ++ .../Dialog/DialogSuccessController.java | 62 + .../Controllers/Dialog/MessageControle.java | 123 ++ .../java/Controllers/Dialog/Notification.java | 125 ++ .../java/Controllers/Dialog/ShowDialog.java | 306 +++++ .../FactureCltAjouterController.java | 416 ++++++ ...ctureCltAjouterDetailSelectController.java | 184 +++ ...ctureCltAjouterDetailTraiteController.java | 209 ++++ ...eCltAjouterPaiementComptentController.java | 193 +++ ...eCltAjouterPaiementFaciliteController.java | 624 +++++++++ .../FactureCltDetailController.java | 363 ++++++ ...actureCltDialogConfirmationController.java | 186 +++ .../FactureCltGestionController.java | 454 +++++++ .../FactureClt/FactureCltPrintController.java | 228 ++++ .../FactureFrsAjouterController.java | 685 ++++++++++ ...ctureFrsBonReceptionAjouterController.java | 633 ++++++++++ .../FactureFrsDetailController.java | 205 +++ .../FactureFrsGestionController.java | 487 ++++++++ .../FournisseurGererController.java | 344 +++++ .../FournisseurGestionController.java | 395 ++++++ .../java/Controllers/Home/AideController.java | 38 + .../Controllers/Home/ContactController.java | 44 + .../Controllers/Home/DashboardController.java | 119 ++ .../Controllers/Home/LogicielController.java | 35 + .../Controllers/Home/MentionsController.java | 35 + src/main/java/Controllers/Main.java | 11 + .../java/Controllers/PrincipalController.java | 335 +++++ .../Produit/AjouterProduitController.java | 349 ++++++ .../Produit/GestionProduitController.java | 487 ++++++++ .../Produit/ModifierProduitController.java | 297 +++++ .../Produit/RechercherProduitController.java | 470 +++++++ .../Reglement/GestionReglementController.java | 564 +++++++++ .../ReglementAjouter1Controller.java | 418 +++++++ .../ReglementAjouter2Controller.java | 497 ++++++++ .../ReglementAjouter3Controller.java | 255 ++++ ...ReglementDialogConfirmationController.java | 230 ++++ .../ReglementDialogDetailController.java | 313 +++++ .../Reglement/TraiteFrsPrintController.java | 34 + .../Stock/BondeEnterPrintController.java | 76 ++ .../Stock/BondeEntrerController.java | 546 ++++++++ .../Stock/BondeEntrerDetailController.java | 177 +++ .../Stock/BondeEntrerDialogConfirmation.java | 247 ++++ .../Stock/BondeSortieController.java | 605 +++++++++ .../Stock/BondeSortieDetailController.java | 173 +++ .../Stock/BondeSortieDialogConfirmation.java | 235 ++++ .../Stock/EtatStockCategorieController.java | 439 +++++++ .../Controllers/Stock/ListProduitBon.java | 65 + .../Controllers/Stock/ListProduitRech.java | 61 + .../Stock/MouvementStockController.java | 361 ++++++ .../Stock/PrintAllCategorieController.java | 48 + .../Stock/PrintAllProduitController.java | 58 + .../PrintMouvementProduitController.java | 73 ++ .../Stock/PrintSelProduitController.java | 57 + .../TraiteClt/TraiteCltDetailController.java | 402 ++++++ .../TraiteClt/TraiteCltGestionController.java | 430 +++++++ .../TraiteClt/TraiteCltPrintController.java | 178 +++ .../TraiteCltPrintRetardController.java | 73 ++ .../TraiteClt/TraiteCltRetardController.java | 452 +++++++ .../Controllers/Traitement/Adaptateur.java | 375 ++++++ .../java/Controllers/Traitement/MyWindow.java | 117 ++ .../Traitement/ParametreSystem.java | 156 +++ .../Traitement/TotalHeightTableColumn.java | 72 ++ .../java/Controllers/Traitement/contro.java | 344 +++++ .../Controllers/User/AddUserController.java | 46 + .../User/GestionUtilisateurController.java | 99 ++ .../Controllers/User/ProfileController.java | 392 ++++++ .../Step1CommandeCltController.java | 1111 +++++++++++++++++ .../Step2BonLivraisonCltController.java | 164 +++ .../Step3FactureCltController.java | 756 +++++++++++ .../Step4SaveVenteCltController.java | 355 ++++++ .../VenteRapideCltController.java | 44 + .../VenteSansFactureCltController.java | 1070 ++++++++++++++++ .../VenteSansFactureCltDetailController.java | 219 ++++ .../BonLivraisonClt/BonLivraisonClt.java | 240 ++++ .../BonLivraisonClt/BonLivraisonCltDB.java | 417 +++++++ .../BonLivraisonCltGestionList.java | 53 + .../BonLivraisonCltProduitList.java | 67 + .../BonReceptionFrs/BonReceptionDB.java | 238 ++++ .../BonReceptionFrs/BonReceptionFrs.java | 137 ++ .../BonReceptionGestionDB.java | 159 +++ .../BonReceptionGestionList.java | 68 + .../BonReceptionFrs/BonReceptionList.java | 75 ++ .../BonReceptionProduitList.java | 74 ++ src/main/java/Models/Caisse/CaisseClt.java | 143 +++ src/main/java/Models/Caisse/CaisseDB.java | 405 ++++++ .../java/Models/Caisse/CaisseEntreListe.java | 82 ++ src/main/java/Models/Caisse/CaisseListe.java | 97 ++ .../java/Models/Caisse/CaisseSortieListe.java | 79 ++ .../java/Models/Caisse/CarteBancaireClt.java | 112 ++ .../Models/Caisse/CarteBancaireCltDB.java | 123 ++ src/main/java/Models/Caisse/Frais.java | 139 +++ src/main/java/Models/Caisse/FraisDB.java | 245 ++++ src/main/java/Models/Categorie/Categorie.java | 33 + .../java/Models/Categorie/CategorieDB.java | 123 ++ .../java/Models/Categorie/CategorieListe.java | 25 + src/main/java/Models/ChequeClt/ChequeClt.java | 175 +++ .../java/Models/ChequeClt/ChequeCltDB.java | 895 +++++++++++++ .../ChequeClt/ChequeCltGestionListe.java | 111 ++ .../ChequeClt/ChequeCltHistoriqueListe.java | 69 + .../java/Models/ChequeClt/ChequeList.java | 138 ++ .../ChequeClt/DatePickerCellCheque.java | 192 +++ src/main/java/Models/Client/Client.java | 218 ++++ src/main/java/Models/Client/ClientDB.java | 323 +++++ .../java/Models/Client/ClientEntreprise.java | 212 ++++ .../Client/ClientEntrepriseContact.java | 162 +++ .../Client/ClientEntrepriseContactDB.java | 126 ++ .../Models/Client/ClientEntrepriseDB.java | 286 +++++ .../java/Models/Client/ClientPassager.java | 160 +++ .../java/Models/Client/ClientPassagerDB.java | 93 ++ .../java/Models/CommandeClt/CommandeClt.java | 237 ++++ .../Models/CommandeClt/CommandeCltDB.java | 587 +++++++++ .../Models/CommandeClt/CommandeCltListe.java | 71 ++ .../java/Models/CommandeFrs/CommandeFrs.java | 25 + src/main/java/Models/DevisClt/Devis.java | 246 ++++ .../java/Models/DevisClt/DevisCltListe.java | 59 + src/main/java/Models/DevisClt/DevisDB.java | 423 +++++++ .../java/Models/FactureClt/FactureClt.java | 423 +++++++ .../FactureClt/FactureCltChequeListe.java | 43 + .../java/Models/FactureClt/FactureCltDB.java | 436 +++++++ .../Models/FactureClt/FactureCltGestion.java | 88 ++ .../FactureClt/FactureCltGestionList.java | 65 + .../FactureClt/FactureCltTraiteListe.java | 31 + .../java/Models/FactureFrs/FactureFrs.java | 287 +++++ .../java/Models/FactureFrs/FactureFrsDB.java | 532 ++++++++ .../FactureFrs/FactureFrsProduitList.java | 79 ++ .../java/Models/Fournisseur/Fournisseur.java | 122 ++ .../Fournisseur/FournisseurContactDB.java | 83 ++ .../Fournisseur/FournisseurContactList.java | 70 ++ .../Models/Fournisseur/FournisseurDB.java | 276 ++++ .../Fournisseur/FournisseurGestionList.java | 80 ++ src/main/java/Models/Home/HomeDB.java | 135 ++ .../java/Models/Produit/ListeProduit.java | 123 ++ src/main/java/Models/Produit/Produit.java | 266 ++++ src/main/java/Models/Produit/ProduitDB.java | 297 +++++ .../Reglement/CarteElectroniqueFrs.java | 81 ++ src/main/java/Models/Reglement/ChequeFrs.java | 109 ++ src/main/java/Models/Reglement/Reglement.java | 192 +++ .../java/Models/Reglement/ReglementDB.java | 508 ++++++++ src/main/java/Models/Reglement/TraiteFrs.java | 75 ++ src/main/java/Models/Stock/BonEntree.java | 84 ++ .../java/Models/Stock/BonEntreeListeProd.java | 64 + src/main/java/Models/Stock/BonSortie.java | 81 ++ src/main/java/Models/Stock/BondeEntrerDB.java | 216 ++++ src/main/java/Models/Stock/BondeSortieDB.java | 191 +++ .../java/Models/Stock/ListeMouvement.java | 49 + src/main/java/Models/Stock/StockDB.java | 287 +++++ src/main/java/Models/Stock/StockDetail.java | 139 +++ src/main/java/Models/Stock/StockDetailDB.java | 68 + .../java/Models/TraiteClt/DatePickerCell.java | 194 +++ src/main/java/Models/TraiteClt/TraiteClt.java | 98 ++ .../java/Models/TraiteClt/TraiteCltDB.java | 400 ++++++ .../Models/TraiteClt/TraiteCltGestionDB.java | 213 ++++ .../TraiteClt/TraiteCltGestionListe.java | 85 ++ .../TraiteClt/TraiteCltPaiementListe.java | 58 + .../java/Models/TraiteClt/TraiteList.java | 77 ++ .../java/Models/User/Authentification.java | 92 ++ src/main/java/Models/User/ListUserDB.java | 153 +++ src/main/java/Models/User/ListUsers.java | 60 + src/main/java/Models/User/Profile.java | 127 ++ src/main/java/Models/User/ProfileDB.java | 154 +++ src/main/java/Models/User/User.java | 51 + .../VenteRapideClt/ListeVenteSansFacture.java | 67 + .../VenteRapideClt/VenteSansFacture.java | 148 +++ .../VenteRapideClt/VenteSansFactureDB.java | 279 +++++ src/main/java/Models/connexion.java | 276 ++++ src/main/java/module-info.java | 118 ++ .../resources/Public/CSS/StylePrincipal.css | 590 +++++++++ .../Public/CSS/StyleSheetAccordion.css | 105 ++ .../Public/CSS/StyleSheetPanelHaut.css | 50 + .../resources/Public/CSS/StyleSheetPrint.css | 47 + .../Public/CSS/StyleSheetProfile.css | 39 + .../resources/Public/Fonts/Raleway-Medium.ttf | Bin 0 -> 129308 bytes .../Public/Fonts/Raleway-SemiBold.ttf | Bin 0 -> 130880 bytes src/main/resources/Public/icon/Client.png | Bin 0 -> 2003 bytes .../resources/Public/icon/IconUserBleu.png | Bin 0 -> 962 bytes .../resources/Public/icon/ImageMessage.png | Bin 0 -> 1423 bytes .../Public/icon/ImageNotification.png | Bin 0 -> 446 bytes src/main/resources/Public/icon/Logo.png | Bin 0 -> 3212 bytes .../resources/Public/icon/NotifiMessa.png | Bin 0 -> 541 bytes src/main/resources/Public/icon/Shopping.png | Bin 0 -> 895 bytes src/main/resources/Public/icon/Stock.png | Bin 0 -> 1189 bytes src/main/resources/Public/icon/Usericon.png | Bin 0 -> 1248 bytes src/main/resources/Public/icon/achat.png | Bin 0 -> 1898 bytes src/main/resources/Public/icon/cheque.png | Bin 0 -> 507 bytes .../resources/Public/icon/client_ajouter.png | Bin 0 -> 835 bytes .../resources/Public/icon/client_detail.png | Bin 0 -> 1868 bytes .../resources/Public/icon/client_fidele.png | Bin 0 -> 903 bytes .../resources/Public/icon/client_retard.png | Bin 0 -> 819 bytes src/main/resources/Public/icon/dashboard.png | Bin 0 -> 1251 bytes .../resources/Public/icon/detailbutton.png | Bin 0 -> 501 bytes .../resources/Public/icon/dialog_error.png | Bin 0 -> 2989 bytes .../Public/icon/dialog_notification.png | Bin 0 -> 4118 bytes .../resources/Public/icon/dialoginform.png | Bin 0 -> 4722 bytes .../Public/icon/entropot_sortie72.png | Bin 0 -> 5618 bytes .../resources/Public/icon/glyphicon-lock.png | Bin 0 -> 949 bytes .../resources/Public/icon/glyphicon-user.png | Bin 0 -> 1205 bytes src/main/resources/Public/icon/icon-excel.png | Bin 0 -> 2010 bytes src/main/resources/Public/icon/icon-pdf.png | Bin 0 -> 2238 bytes src/main/resources/Public/icon/icon-print.png | Bin 0 -> 1492 bytes .../resources/Public/icon/icon-relogin.png | Bin 0 -> 1004 bytes .../resources/Public/icon/icon-success.png | Bin 0 -> 2143 bytes .../Public/icon/iconNotification.png | Bin 0 -> 1656 bytes src/main/resources/Public/icon/iconadd.png | Bin 0 -> 651 bytes .../resources/Public/icon/iconaffecter.png | Bin 0 -> 826 bytes src/main/resources/Public/icon/iconalert.png | Bin 0 -> 6477 bytes src/main/resources/Public/icon/icondelete.png | Bin 0 -> 359 bytes src/main/resources/Public/icon/iconedit.png | Bin 0 -> 437 bytes src/main/resources/Public/icon/iconsave.png | Bin 0 -> 869 bytes src/main/resources/Public/icon/logo1.png | Bin 0 -> 2136 bytes src/main/resources/Public/icon/outil.png | Bin 0 -> 592 bytes src/main/resources/Public/icon/product.png | Bin 0 -> 924 bytes src/main/resources/Public/icon/profiluser.jpg | Bin 0 -> 3418 bytes src/main/resources/Public/icon/search.png | Bin 0 -> 645 bytes .../resources/Public/icon/successfully.png | Bin 0 -> 4436 bytes src/main/resources/Public/icon/uses.png | Bin 0 -> 823 bytes src/main/resources/Public/icon/vente.png | Bin 0 -> 952 bytes src/main/resources/Public/icon/vente_2.png | Bin 0 -> 919 bytes .../resources/Views/Authentification.fxml | 81 ++ .../BonLivraisonCltAjouter.fxml | 313 +++++ .../BonLivraisonCltAjouterEtape2.fxml | 413 ++++++ .../BonLivraisonCltAjouterEtape3.fxml | 181 +++ .../BonLivraisonCltDetail.fxml | 302 +++++ .../BonLivraisonCltGestion.fxml | 250 ++++ .../BonLivraisonClt/BonLivraisonCltPrint.fxml | 300 +++++ .../BonReceptionAjouterFrs.fxml | 214 ++++ .../BonReceptionDetailFrs.fxml | 342 +++++ .../BonReceptionGestionFrs.fxml | 246 ++++ .../resources/Views/Caisse/CaisseEntre.fxml | 183 +++ .../Views/Caisse/CaisseEntrePrint.fxml | 116 ++ .../resources/Views/Caisse/CaisseSortie.fxml | 164 +++ .../Views/Caisse/CaisseSortiePrint.fxml | 116 ++ .../resources/Views/Caisse/FraisAjouter.fxml | 255 ++++ .../resources/Views/Caisse/FraisDetail.fxml | 210 ++++ .../resources/Views/Caisse/FraisGestion.fxml | 253 ++++ .../Views/Categorie/AjouterCategorie.fxml | 82 ++ .../Views/ChequeClt/ChequeCltDetail.fxml | 298 +++++ .../Views/ChequeClt/ChequeCltGestion.fxml | 258 ++++ .../Views/ChequeClt/ChequeCltProvision.fxml | 242 ++++ .../ChequeClt/ChequeCltProvisionPrint.fxml | 60 + .../Views/ChequeClt/ChequeCltVercer.fxml | 115 ++ .../resources/Views/Client/AjouterClient.fxml | 56 + .../Views/Client/AjouterClientEntreprise.fxml | 273 ++++ .../Views/Client/AjouterClientPersonne.fxml | 242 ++++ .../resources/Views/Client/DetailClient.fxml | 725 +++++++++++ .../Views/Client/GestionClientEntreprise.fxml | 260 ++++ .../Views/Client/GestionClientPersonne.fxml | 259 ++++ .../resources/Views/Client/MenuClient.fxml | 144 +++ .../Client/RechercherClientEntreprise.fxml | 254 ++++ .../Client/RechercherClientPersonne.fxml | 254 ++++ .../Views/CommandeClt/CommandeCltDetail.fxml | 322 +++++ .../CommandeCltDialogConfirmation.fxml | 287 +++++ .../Views/CommandeClt/CommandeCltGestion.fxml | 249 ++++ .../Views/CommandeClt/CommandeCltPasser.fxml | 344 +++++ .../resources/Views/Devis/DevisAjouter.fxml | 338 +++++ .../Views/Devis/DevisCltGestion.fxml | 259 ++++ .../resources/Views/Devis/DevisCltPrint.fxml | 180 +++ .../resources/Views/Devis/DevisDetail.fxml | 322 +++++ .../Views/Devis/DevisDialogConfirmation.fxml | 287 +++++ .../resources/Views/Devis/DevisImporter.fxml | 248 ++++ .../resources/Views/Dialog/DialogAlert.fxml | 59 + .../Views/Dialog/DialogNotification.fxml | 59 + .../resources/Views/Dialog/DialogSuccess.fxml | 61 + .../Views/FactureClt/FactureCltAjouter.fxml | 337 +++++ .../FactureCltAjouterDetailSelect.fxml | 352 ++++++ .../FactureCltAjouterDetailTraite.fxml | 363 ++++++ .../FactureCltAjouterPaiementComptent.fxml | 331 +++++ .../FactureCltAjouterPaiementFacilite.fxml | 327 +++++ .../Views/FactureClt/FactureCltDetail.fxml | 396 ++++++ .../FactureCltDialogConfirmation.fxml | 277 ++++ .../Views/FactureClt/FactureCltGestion.fxml | 263 ++++ .../Views/FactureClt/FactureCltPrint.fxml | 305 +++++ .../Views/FactureFrs/FactureFrsAjouter.fxml | 258 ++++ .../FactureFrsBonReceptionAjouter.fxml | 224 ++++ .../Views/FactureFrs/FactureFrsDetail.fxml | 407 ++++++ .../Views/FactureFrs/FactureFrsGestion.fxml | 224 ++++ .../Views/Fournisseur/FournisseurGerer.fxml | 316 +++++ .../Views/Fournisseur/FournisseurGestion.fxml | 247 ++++ src/main/resources/Views/Home/Aide.fxml | 163 +++ src/main/resources/Views/Home/Contact.fxml | 77 ++ src/main/resources/Views/Home/Dashboard.fxml | 197 +++ src/main/resources/Views/Home/Logiciel.fxml | 264 ++++ src/main/resources/Views/Home/Mentions.fxml | 116 ++ src/main/resources/Views/Principal.fxml | 215 ++++ .../Views/Produit/AjouterProduit.fxml | 494 ++++++++ .../Views/Produit/GestionProduit.fxml | 221 ++++ .../Views/Produit/ModifierProduit.fxml | 409 ++++++ .../Views/Produit/RechercherProduit.fxml | 252 ++++ .../Views/Reglement/ReglementAjouter1.fxml | 271 ++++ .../Views/Reglement/ReglementAjouter2.fxml | 475 +++++++ .../Views/Reglement/ReglementAjouter3.fxml | 500 ++++++++ .../ReglementDialogConfirmation.fxml | 416 ++++++ .../Reglement/ReglementDialogDetail.fxml | 355 ++++++ .../Views/Reglement/ReglementGestion.fxml | 250 ++++ .../Views/Reglement/TraiteFrsPrint.fxml | 66 + .../Views/Stock/BondeEnterPrint.fxml | 143 +++ .../resources/Views/Stock/BondeEntrer.fxml | 229 ++++ .../Views/Stock/BondeEntrerDetail.fxml | 194 +++ .../resources/Views/Stock/BondeSortie.fxml | 240 ++++ .../Views/Stock/BondeSortieDetail.fxml | 194 +++ .../Views/Stock/EtatStockCategorie.fxml | 91 ++ .../resources/Views/Stock/MouvementStock.fxml | 220 ++++ .../Views/Stock/PrintAllCategorie.fxml | 86 ++ .../Views/Stock/PrintAllProduit.fxml | 87 ++ .../Views/Stock/PrintMouvementProduit.fxml | 117 ++ .../Views/Stock/PrintSelProduit.fxml | 101 ++ .../Views/TraiteClt/TraiteCltDetail.fxml | 432 +++++++ .../Views/TraiteClt/TraiteCltGestion.fxml | 233 ++++ .../Views/TraiteClt/TraiteCltPrint.fxml | 69 + .../Views/TraiteClt/TraiteCltPrintRetard.fxml | 60 + .../Views/TraiteClt/TraiteCltRetard.fxml | 250 ++++ src/main/resources/Views/User/AddUser.fxml | 230 ++++ .../Views/User/GestionUtilisateur.fxml | 92 ++ src/main/resources/Views/User/Profile.fxml | 419 +++++++ .../VenteRapideClt/Step1CommandeClt.fxml | 475 +++++++ .../VenteRapideClt/Step2BonLivraisonClt.fxml | 288 +++++ .../Views/VenteRapideClt/Step3FactureClt.fxml | 538 ++++++++ .../VenteRapideClt/Step4SaveVenteClt.fxml | 334 +++++ .../Views/VenteRapideClt/VenteRapideClt.fxml | 81 ++ .../VenteRapideClt/VenteSansFactureClt.fxml | 443 +++++++ .../VenteSansFactureCltDetail.fxml | 259 ++++ target/classes/Controllers/App.class | Bin 0 -> 1706 bytes .../AuthentificationController$1.class | Bin 0 -> 1451 bytes .../AuthentificationController$2$1.class | Bin 0 -> 1521 bytes .../AuthentificationController$2.class | Bin 0 -> 1239 bytes .../AuthentificationController$3.class | Bin 0 -> 3701 bytes .../AuthentificationController.class | Bin 0 -> 5881 bytes .../BonLivraisonCltAjouterController$1.class | Bin 0 -> 1991 bytes .../BonLivraisonCltAjouterController$10.class | Bin 0 -> 2356 bytes .../BonLivraisonCltAjouterController$11.class | Bin 0 -> 1920 bytes .../BonLivraisonCltAjouterController$12.class | Bin 0 -> 1891 bytes .../BonLivraisonCltAjouterController$13.class | Bin 0 -> 1924 bytes .../BonLivraisonCltAjouterController$14.class | Bin 0 -> 1895 bytes .../BonLivraisonCltAjouterController$2.class | Bin 0 -> 1280 bytes .../BonLivraisonCltAjouterController$3.class | Bin 0 -> 1576 bytes .../BonLivraisonCltAjouterController$4.class | Bin 0 -> 1280 bytes .../BonLivraisonCltAjouterController$5.class | Bin 0 -> 1280 bytes ...BonLivraisonCltAjouterController$6$1.class | Bin 0 -> 3595 bytes .../BonLivraisonCltAjouterController$6.class | Bin 0 -> 1226 bytes .../BonLivraisonCltAjouterController$7.class | Bin 0 -> 1896 bytes ...BonLivraisonCltAjouterController$8$1.class | Bin 0 -> 2858 bytes .../BonLivraisonCltAjouterController$8.class | Bin 0 -> 1477 bytes .../BonLivraisonCltAjouterController$9.class | Bin 0 -> 1682 bytes ...sonCltAjouterController$ButtonCell$1.class | Bin 0 -> 3452 bytes ...aisonCltAjouterController$ButtonCell.class | Bin 0 -> 2430 bytes .../BonLivraisonCltAjouterController.class | Bin 0 -> 7973 bytes ...raisonCltAjouterEtape2Controller$1$1.class | Bin 0 -> 2488 bytes ...ivraisonCltAjouterEtape2Controller$1.class | Bin 0 -> 2306 bytes ...ivraisonCltAjouterEtape2Controller$2.class | Bin 0 -> 1628 bytes ...nLivraisonCltAjouterEtape2Controller.class | Bin 0 -> 12250 bytes ...raisonCltAjouterEtape3Controller$1$1.class | Bin 0 -> 1937 bytes ...ivraisonCltAjouterEtape3Controller$1.class | Bin 0 -> 1277 bytes ...ivraisonCltAjouterEtape3Controller$2.class | Bin 0 -> 2311 bytes ...nLivraisonCltAjouterEtape3Controller.class | Bin 0 -> 2461 bytes .../BonLivraisonCltDetailController$1$1.class | Bin 0 -> 1955 bytes .../BonLivraisonCltDetailController$1.class | Bin 0 -> 1217 bytes .../BonLivraisonCltDetailController$2.class | Bin 0 -> 4580 bytes ...onLivraisonCltDetailController$3$1$1.class | Bin 0 -> 2541 bytes .../BonLivraisonCltDetailController$3$1.class | Bin 0 -> 2408 bytes .../BonLivraisonCltDetailController$3.class | Bin 0 -> 2077 bytes .../BonLivraisonCltDetailController.class | Bin 0 -> 10010 bytes .../BonLivraisonCltGestionController$1.class | Bin 0 -> 2061 bytes .../BonLivraisonCltGestionController$10.class | Bin 0 -> 1897 bytes .../BonLivraisonCltGestionController$11.class | Bin 0 -> 1930 bytes .../BonLivraisonCltGestionController$12.class | Bin 0 -> 1901 bytes .../BonLivraisonCltGestionController$2.class | Bin 0 -> 1283 bytes .../BonLivraisonCltGestionController$3.class | Bin 0 -> 1579 bytes ...BonLivraisonCltGestionController$4$1.class | Bin 0 -> 3758 bytes .../BonLivraisonCltGestionController$4.class | Bin 0 -> 1229 bytes .../BonLivraisonCltGestionController$5.class | Bin 0 -> 1905 bytes ...BonLivraisonCltGestionController$6$1.class | Bin 0 -> 2883 bytes .../BonLivraisonCltGestionController$6.class | Bin 0 -> 1480 bytes .../BonLivraisonCltGestionController$7.class | Bin 0 -> 1691 bytes .../BonLivraisonCltGestionController$8.class | Bin 0 -> 2360 bytes .../BonLivraisonCltGestionController$9.class | Bin 0 -> 1924 bytes ...sonCltGestionController$ButtonCell$1.class | Bin 0 -> 2264 bytes ...aisonCltGestionController$ButtonCell.class | Bin 0 -> 2448 bytes .../BonLivraisonCltGestionController.class | Bin 0 -> 8381 bytes .../BonLivraisonCltPrintController$1$1.class | Bin 0 -> 2101 bytes .../BonLivraisonCltPrintController$1.class | Bin 0 -> 2110 bytes .../BonLivraisonCltPrintController.class | Bin 0 -> 10462 bytes .../BonReceptionAjouterFrsController$1.class | Bin 0 -> 2122 bytes .../BonReceptionAjouterFrsController$2.class | Bin 0 -> 1951 bytes .../BonReceptionAjouterFrsController$3.class | Bin 0 -> 2122 bytes .../BonReceptionAjouterFrsController$4.class | Bin 0 -> 1951 bytes .../BonReceptionAjouterFrsController$5.class | Bin 0 -> 2488 bytes ...eceptionAjouterFrsController$6$1$1$1.class | Bin 0 -> 1818 bytes ...nReceptionAjouterFrsController$6$1$1.class | Bin 0 -> 5449 bytes ...BonReceptionAjouterFrsController$6$1.class | Bin 0 -> 1206 bytes .../BonReceptionAjouterFrsController$6.class | Bin 0 -> 3150 bytes .../BonReceptionAjouterFrsController$7.class | Bin 0 -> 2806 bytes .../BonReceptionAjouterFrsController$8.class | Bin 0 -> 3301 bytes ...nReceptionAjouterFrsController$9$1$1.class | Bin 0 -> 3276 bytes ...BonReceptionAjouterFrsController$9$1.class | Bin 0 -> 2848 bytes .../BonReceptionAjouterFrsController$9.class | Bin 0 -> 2166 bytes ...ionAjouterFrsController$ButtonCell$1.class | Bin 0 -> 2143 bytes ...ptionAjouterFrsController$ButtonCell.class | Bin 0 -> 2418 bytes .../BonReceptionAjouterFrsController.class | Bin 0 -> 14941 bytes .../BonReceptionDetailFrsController$1$1.class | Bin 0 -> 1697 bytes .../BonReceptionDetailFrsController$1.class | Bin 0 -> 1364 bytes .../BonReceptionDetailFrsController$2.class | Bin 0 -> 4373 bytes .../BonReceptionDetailFrsController.class | Bin 0 -> 4312 bytes .../BonReceptionGestionFrsController$1.class | Bin 0 -> 2046 bytes .../BonReceptionGestionFrsController$10.class | Bin 0 -> 1914 bytes ...onReceptionGestionFrsController$11$1.class | Bin 0 -> 2853 bytes .../BonReceptionGestionFrsController$11.class | Bin 0 -> 1491 bytes .../BonReceptionGestionFrsController$12.class | Bin 0 -> 1700 bytes .../BonReceptionGestionFrsController$13.class | Bin 0 -> 2369 bytes .../BonReceptionGestionFrsController$14.class | Bin 0 -> 1933 bytes .../BonReceptionGestionFrsController$15.class | Bin 0 -> 1904 bytes .../BonReceptionGestionFrsController$16.class | Bin 0 -> 1937 bytes .../BonReceptionGestionFrsController$17.class | Bin 0 -> 1908 bytes .../BonReceptionGestionFrsController$2.class | Bin 0 -> 1528 bytes .../BonReceptionGestionFrsController$3.class | Bin 0 -> 1967 bytes .../BonReceptionGestionFrsController$4.class | Bin 0 -> 1290 bytes .../BonReceptionGestionFrsController$5.class | Bin 0 -> 1586 bytes ...BonReceptionGestionFrsController$6$1.class | Bin 0 -> 2532 bytes .../BonReceptionGestionFrsController$6.class | Bin 0 -> 1226 bytes .../BonReceptionGestionFrsController$7.class | Bin 0 -> 1493 bytes .../BonReceptionGestionFrsController$8.class | Bin 0 -> 1609 bytes ...BonReceptionGestionFrsController$9$1.class | Bin 0 -> 3709 bytes .../BonReceptionGestionFrsController$9.class | Bin 0 -> 1236 bytes ...ionGestionFrsController$ButtonCell$1.class | Bin 0 -> 3215 bytes ...ptionGestionFrsController$ButtonCell.class | Bin 0 -> 2445 bytes .../BonReceptionGestionFrsController.class | Bin 0 -> 9977 bytes .../Caisse/CaisseEntreController$1.class | Bin 0 -> 1933 bytes .../Caisse/CaisseEntreController$10.class | Bin 0 -> 1192 bytes .../Caisse/CaisseEntreController$11$1.class | Bin 0 -> 2392 bytes .../Caisse/CaisseEntreController$11.class | Bin 0 -> 1081 bytes .../Caisse/CaisseEntreController$12.class | Bin 0 -> 1724 bytes .../Caisse/CaisseEntreController$13.class | Bin 0 -> 7468 bytes .../Caisse/CaisseEntreController$2.class | Bin 0 -> 1190 bytes .../Caisse/CaisseEntreController$3.class | Bin 0 -> 1190 bytes .../Caisse/CaisseEntreController$4.class | Bin 0 -> 1190 bytes .../Caisse/CaisseEntreController$5.class | Bin 0 -> 1190 bytes .../Caisse/CaisseEntreController$6.class | Bin 0 -> 1190 bytes .../Caisse/CaisseEntreController$7.class | Bin 0 -> 1190 bytes .../Caisse/CaisseEntreController$8.class | Bin 0 -> 1190 bytes .../Caisse/CaisseEntreController$9.class | Bin 0 -> 1190 bytes .../Caisse/CaisseEntreController.class | Bin 0 -> 8957 bytes .../Caisse/CaisseEntrePrintController.class | Bin 0 -> 3349 bytes .../Caisse/CaisseSortieController$1.class | Bin 0 -> 1940 bytes .../Caisse/CaisseSortieController$10.class | Bin 0 -> 1734 bytes .../Caisse/CaisseSortieController$11.class | Bin 0 -> 6267 bytes .../Caisse/CaisseSortieController$2.class | Bin 0 -> 1197 bytes .../Caisse/CaisseSortieController$3.class | Bin 0 -> 1197 bytes .../Caisse/CaisseSortieController$4.class | Bin 0 -> 1197 bytes .../Caisse/CaisseSortieController$5.class | Bin 0 -> 1197 bytes .../Caisse/CaisseSortieController$6.class | Bin 0 -> 1197 bytes .../Caisse/CaisseSortieController$7.class | Bin 0 -> 1197 bytes .../Caisse/CaisseSortieController$8.class | Bin 0 -> 1197 bytes .../Caisse/CaisseSortieController$9$1.class | Bin 0 -> 2552 bytes .../Caisse/CaisseSortieController$9.class | Bin 0 -> 1086 bytes .../Caisse/CaisseSortieController.class | Bin 0 -> 7927 bytes .../Caisse/CaisseSortiePrintController.class | Bin 0 -> 3361 bytes .../Caisse/FraisAjouterController$1$1.class | Bin 0 -> 1578 bytes .../Caisse/FraisAjouterController$1.class | Bin 0 -> 1121 bytes .../Caisse/FraisAjouterController$2$1.class | Bin 0 -> 1459 bytes .../Caisse/FraisAjouterController$2.class | Bin 0 -> 1849 bytes .../Caisse/FraisAjouterController$3.class | Bin 0 -> 1407 bytes .../Caisse/FraisAjouterController$4.class | Bin 0 -> 1407 bytes .../Caisse/FraisAjouterController$5.class | Bin 0 -> 1407 bytes .../Caisse/FraisAjouterController$6.class | Bin 0 -> 2295 bytes .../Caisse/FraisAjouterController.class | Bin 0 -> 6783 bytes .../Caisse/FraisDetailController$1$1.class | Bin 0 -> 1435 bytes .../Caisse/FraisDetailController$1.class | Bin 0 -> 1197 bytes .../Caisse/FraisDetailController$2.class | Bin 0 -> 1602 bytes .../Caisse/FraisDetailController.class | Bin 0 -> 5091 bytes .../Caisse/FraisGestionController$1.class | Bin 0 -> 1645 bytes .../Caisse/FraisGestionController$10.class | Bin 0 -> 2250 bytes .../Caisse/FraisGestionController$11.class | Bin 0 -> 1814 bytes .../Caisse/FraisGestionController$12.class | Bin 0 -> 1785 bytes .../Caisse/FraisGestionController$13.class | Bin 0 -> 1818 bytes .../Caisse/FraisGestionController$14.class | Bin 0 -> 1789 bytes .../Caisse/FraisGestionController$2$1.class | Bin 0 -> 2066 bytes .../Caisse/FraisGestionController$2.class | Bin 0 -> 1935 bytes .../Caisse/FraisGestionController$3.class | Bin 0 -> 1787 bytes .../Caisse/FraisGestionController$4.class | Bin 0 -> 1175 bytes .../Caisse/FraisGestionController$5.class | Bin 0 -> 1471 bytes .../Caisse/FraisGestionController$6$1.class | Bin 0 -> 3565 bytes .../Caisse/FraisGestionController$6.class | Bin 0 -> 1083 bytes .../Caisse/FraisGestionController$7.class | Bin 0 -> 1791 bytes .../Caisse/FraisGestionController$8$1.class | Bin 0 -> 2700 bytes .../Caisse/FraisGestionController$8.class | Bin 0 -> 1334 bytes .../Caisse/FraisGestionController$9.class | Bin 0 -> 1577 bytes .../FraisGestionController$ButtonCell$1.class | Bin 0 -> 1799 bytes .../FraisGestionController$ButtonCell.class | Bin 0 -> 2275 bytes .../Caisse/FraisGestionController.class | Bin 0 -> 8161 bytes .../AjouterCategorieController.class | Bin 0 -> 4942 bytes .../ChequeCltDetailController$1.class | Bin 0 -> 1556 bytes .../ChequeCltDetailController$2.class | Bin 0 -> 1556 bytes .../ChequeCltDetailController$3$1.class | Bin 0 -> 2327 bytes .../ChequeCltDetailController$3.class | Bin 0 -> 2115 bytes .../ChequeCltDetailController$4$1.class | Bin 0 -> 1293 bytes .../ChequeCltDetailController$4.class | Bin 0 -> 991 bytes .../ChequeCltDetailController$5.class | Bin 0 -> 2111 bytes .../ChequeClt/ChequeCltDetailController.class | Bin 0 -> 10074 bytes .../ChequeCltGestionController$1$1.class | Bin 0 -> 2308 bytes .../ChequeCltGestionController$1.class | Bin 0 -> 2102 bytes .../ChequeCltGestionController$10.class | Bin 0 -> 1855 bytes .../ChequeCltGestionController$11.class | Bin 0 -> 1826 bytes .../ChequeCltGestionController$12.class | Bin 0 -> 1859 bytes .../ChequeCltGestionController$13.class | Bin 0 -> 1830 bytes .../ChequeCltGestionController$2.class | Bin 0 -> 1928 bytes .../ChequeCltGestionController$3.class | Bin 0 -> 1218 bytes .../ChequeCltGestionController$4.class | Bin 0 -> 1514 bytes .../ChequeCltGestionController$5$1.class | Bin 0 -> 3803 bytes .../ChequeCltGestionController$5.class | Bin 0 -> 1140 bytes .../ChequeCltGestionController$6.class | Bin 0 -> 1842 bytes .../ChequeCltGestionController$7$1.class | Bin 0 -> 2842 bytes .../ChequeCltGestionController$7.class | Bin 0 -> 1391 bytes .../ChequeCltGestionController$8.class | Bin 0 -> 1628 bytes .../ChequeCltGestionController$9.class | Bin 0 -> 2289 bytes ...eCltGestionController$ButtonCell$1$1.class | Bin 0 -> 2878 bytes ...queCltGestionController$ButtonCell$1.class | Bin 0 -> 2605 bytes ...hequeCltGestionController$ButtonCell.class | Bin 0 -> 2347 bytes .../ChequeCltGestionController.class | Bin 0 -> 9391 bytes .../ChequeCltProvisionController$1.class | Bin 0 -> 1232 bytes .../ChequeCltProvisionController$10.class | Bin 0 -> 2314 bytes .../ChequeCltProvisionController$11.class | Bin 0 -> 1878 bytes .../ChequeCltProvisionController$12.class | Bin 0 -> 1849 bytes .../ChequeCltProvisionController$13.class | Bin 0 -> 1882 bytes .../ChequeCltProvisionController$14.class | Bin 0 -> 1853 bytes .../ChequeCltProvisionController$2.class | Bin 0 -> 1528 bytes .../ChequeCltProvisionController$3.class | Bin 0 -> 1234 bytes .../ChequeCltProvisionController$4$1.class | Bin 0 -> 2465 bytes .../ChequeCltProvisionController$4.class | Bin 0 -> 1160 bytes .../ChequeCltProvisionController$5.class | Bin 0 -> 6054 bytes .../ChequeCltProvisionController$6$1.class | Bin 0 -> 3709 bytes .../ChequeCltProvisionController$6.class | Bin 0 -> 1158 bytes .../ChequeCltProvisionController$7.class | Bin 0 -> 1860 bytes .../ChequeCltProvisionController$8$1.class | Bin 0 -> 2817 bytes .../ChequeCltProvisionController$8.class | Bin 0 -> 1409 bytes .../ChequeCltProvisionController$9.class | Bin 0 -> 1646 bytes .../ChequeCltProvisionController.class | Bin 0 -> 8080 bytes .../ChequeCltProvisionPrintController.class | Bin 0 -> 3174 bytes .../ChequeCltVercerController$1.class | Bin 0 -> 3431 bytes .../ChequeCltVercerController$2$1$1.class | Bin 0 -> 3315 bytes .../ChequeCltVercerController$2$1.class | Bin 0 -> 1864 bytes .../ChequeCltVercerController$2.class | Bin 0 -> 2100 bytes .../ChequeCltVercerController$3.class | Bin 0 -> 1887 bytes .../ChequeCltVercerController$4.class | Bin 0 -> 1890 bytes .../ChequeCltVercerController$5.class | Bin 0 -> 1883 bytes .../ChequeCltVercerController$6.class | Bin 0 -> 1886 bytes .../ChequeCltVercerController$7.class | Bin 0 -> 2638 bytes .../ChequeCltVercerController$8$1.class | Bin 0 -> 2597 bytes .../ChequeCltVercerController$8.class | Bin 0 -> 1001 bytes .../ChequeClt/ChequeCltVercerController.class | Bin 0 -> 5393 bytes .../Client/AjouterClientController.class | Bin 0 -> 2440 bytes .../AjouterClientEntrepriseController$1.class | Bin 0 -> 2163 bytes ...jouterClientEntrepriseController$2$1.class | Bin 0 -> 2016 bytes .../AjouterClientEntrepriseController$2.class | Bin 0 -> 3786 bytes .../AjouterClientEntrepriseController$3.class | Bin 0 -> 1764 bytes .../AjouterClientEntrepriseController.class | Bin 0 -> 10443 bytes .../AjouterClientPersonneController$1$1.class | Bin 0 -> 1998 bytes .../AjouterClientPersonneController$1.class | Bin 0 -> 3775 bytes .../AjouterClientPersonneController$2.class | Bin 0 -> 1741 bytes .../AjouterClientPersonneController$3.class | Bin 0 -> 2084 bytes .../AjouterClientPersonneController.class | Bin 0 -> 9661 bytes .../Client/DetailClientController$1.class | Bin 0 -> 1322 bytes .../Client/DetailClientController$2.class | Bin 0 -> 1332 bytes .../Client/DetailClientController.class | Bin 0 -> 14235 bytes .../GestionClientEntrepriseController$1.class | Bin 0 -> 2122 bytes ...GestionClientEntrepriseController$10.class | Bin 0 -> 2325 bytes ...GestionClientEntrepriseController$11.class | Bin 0 -> 1889 bytes ...GestionClientEntrepriseController$12.class | Bin 0 -> 1860 bytes ...GestionClientEntrepriseController$13.class | Bin 0 -> 1893 bytes ...GestionClientEntrepriseController$14.class | Bin 0 -> 1864 bytes .../GestionClientEntrepriseController$2.class | Bin 0 -> 1969 bytes .../GestionClientEntrepriseController$3.class | Bin 0 -> 3077 bytes .../GestionClientEntrepriseController$4.class | Bin 0 -> 1245 bytes .../GestionClientEntrepriseController$5.class | Bin 0 -> 1541 bytes ...estionClientEntrepriseController$6$1.class | Bin 0 -> 3438 bytes .../GestionClientEntrepriseController$6.class | Bin 0 -> 1175 bytes .../GestionClientEntrepriseController$7.class | Bin 0 -> 1869 bytes ...estionClientEntrepriseController$8$1.class | Bin 0 -> 2548 bytes .../GestionClientEntrepriseController$8.class | Bin 0 -> 1426 bytes .../GestionClientEntrepriseController$9.class | Bin 0 -> 1655 bytes ...entEntrepriseController$ButtonCell$1.class | Bin 0 -> 3226 bytes ...lientEntrepriseController$ButtonCell.class | Bin 0 -> 2384 bytes .../GestionClientEntrepriseController.class | Bin 0 -> 8077 bytes .../GestionClientPersonneController$1.class | Bin 0 -> 2080 bytes .../GestionClientPersonneController$10.class | Bin 0 -> 1873 bytes .../GestionClientPersonneController$11.class | Bin 0 -> 1844 bytes .../GestionClientPersonneController$12.class | Bin 0 -> 1877 bytes .../GestionClientPersonneController$13.class | Bin 0 -> 1848 bytes .../GestionClientPersonneController$2.class | Bin 0 -> 1905 bytes .../GestionClientPersonneController$3.class | Bin 0 -> 1231 bytes .../GestionClientPersonneController$4.class | Bin 0 -> 1527 bytes .../GestionClientPersonneController$5$1.class | Bin 0 -> 3595 bytes .../GestionClientPersonneController$5.class | Bin 0 -> 1157 bytes .../GestionClientPersonneController$6.class | Bin 0 -> 1851 bytes .../GestionClientPersonneController$7$1.class | Bin 0 -> 2754 bytes .../GestionClientPersonneController$7.class | Bin 0 -> 1408 bytes .../GestionClientPersonneController$8.class | Bin 0 -> 1637 bytes .../GestionClientPersonneController$9.class | Bin 0 -> 2307 bytes ...lientPersonneController$ButtonCell$1.class | Bin 0 -> 3284 bytes ...nClientPersonneController$ButtonCell.class | Bin 0 -> 2358 bytes .../GestionClientPersonneController.class | Bin 0 -> 7860 bytes .../Controllers/Client/ListeClient.class | Bin 0 -> 2310 bytes .../Client/ListeClientEntreprise.class | Bin 0 -> 1653 bytes .../Client/MenuClientController.class | Bin 0 -> 1765 bytes ...chercherClientEntrepriseController$1.class | Bin 0 -> 1263 bytes ...hercherClientEntrepriseController$10.class | Bin 0 -> 1911 bytes ...hercherClientEntrepriseController$11.class | Bin 0 -> 1882 bytes ...chercherClientEntrepriseController$2.class | Bin 0 -> 1559 bytes ...ercherClientEntrepriseController$3$1.class | Bin 0 -> 3444 bytes ...chercherClientEntrepriseController$3.class | Bin 0 -> 1199 bytes ...chercherClientEntrepriseController$4.class | Bin 0 -> 1887 bytes ...ercherClientEntrepriseController$5$1.class | Bin 0 -> 2554 bytes ...chercherClientEntrepriseController$5.class | Bin 0 -> 1450 bytes ...chercherClientEntrepriseController$6.class | Bin 0 -> 1673 bytes ...chercherClientEntrepriseController$7.class | Bin 0 -> 2341 bytes ...chercherClientEntrepriseController$8.class | Bin 0 -> 1905 bytes ...chercherClientEntrepriseController$9.class | Bin 0 -> 1876 bytes ...RechercherClientEntrepriseController.class | Bin 0 -> 9110 bytes ...RechercherClientPersonneController$1.class | Bin 0 -> 1249 bytes ...echercherClientPersonneController$10.class | Bin 0 -> 1895 bytes ...echercherClientPersonneController$11.class | Bin 0 -> 1866 bytes ...RechercherClientPersonneController$2.class | Bin 0 -> 1545 bytes ...chercherClientPersonneController$3$1.class | Bin 0 -> 3619 bytes ...RechercherClientPersonneController$3.class | Bin 0 -> 1181 bytes ...RechercherClientPersonneController$4.class | Bin 0 -> 1869 bytes ...chercherClientPersonneController$5$1.class | Bin 0 -> 2778 bytes ...RechercherClientPersonneController$5.class | Bin 0 -> 1432 bytes ...RechercherClientPersonneController$6.class | Bin 0 -> 1655 bytes ...RechercherClientPersonneController$7.class | Bin 0 -> 2325 bytes ...RechercherClientPersonneController$8.class | Bin 0 -> 1889 bytes ...RechercherClientPersonneController$9.class | Bin 0 -> 1860 bytes .../RechercherClientPersonneController.class | Bin 0 -> 9115 bytes .../CommandeClt/CommandeCltDetail$1.class | Bin 0 -> 2732 bytes .../CommandeClt/CommandeCltDetail$2$1.class | Bin 0 -> 1488 bytes .../CommandeClt/CommandeCltDetail$2.class | Bin 0 -> 1211 bytes .../CommandeClt/CommandeCltDetail$3.class | Bin 0 -> 4049 bytes .../CommandeClt/CommandeCltDetail.class | Bin 0 -> 4274 bytes ...mandeCltDialogConfirmationController.class | Bin 0 -> 7778 bytes .../CommandeCltGestionController$1$1.class | Bin 0 -> 1706 bytes .../CommandeCltGestionController$1.class | Bin 0 -> 2114 bytes .../CommandeCltGestionController$10.class | Bin 0 -> 1628 bytes .../CommandeCltGestionController$11.class | Bin 0 -> 2304 bytes .../CommandeCltGestionController$12.class | Bin 0 -> 1868 bytes .../CommandeCltGestionController$13.class | Bin 0 -> 1839 bytes .../CommandeCltGestionController$14.class | Bin 0 -> 1872 bytes .../CommandeCltGestionController$15.class | Bin 0 -> 1843 bytes .../CommandeCltGestionController$2.class | Bin 0 -> 1939 bytes .../CommandeCltGestionController$3.class | Bin 0 -> 1232 bytes .../CommandeCltGestionController$4.class | Bin 0 -> 1528 bytes .../CommandeCltGestionController$5.class | Bin 0 -> 1232 bytes .../CommandeCltGestionController$6.class | Bin 0 -> 1232 bytes .../CommandeCltGestionController$7$1.class | Bin 0 -> 3803 bytes .../CommandeCltGestionController$7.class | Bin 0 -> 1162 bytes .../CommandeCltGestionController$8.class | Bin 0 -> 1840 bytes .../CommandeCltGestionController$9$1.class | Bin 0 -> 2972 bytes .../CommandeCltGestionController$9.class | Bin 0 -> 1413 bytes ...ndeCltGestionController$ButtonCell$1.class | Bin 0 -> 3651 bytes ...mandeCltGestionController$ButtonCell.class | Bin 0 -> 2370 bytes .../CommandeCltGestionController.class | Bin 0 -> 9181 bytes .../CommandeCltPasserController$1.class | Bin 0 -> 2072 bytes .../CommandeCltPasserController$10$1$1.class | Bin 0 -> 3115 bytes .../CommandeCltPasserController$10$1.class | Bin 0 -> 2589 bytes .../CommandeCltPasserController$10.class | Bin 0 -> 1981 bytes .../CommandeCltPasserController$11.class | Bin 0 -> 3253 bytes .../CommandeCltPasserController$12.class | Bin 0 -> 3250 bytes .../CommandeCltPasserController$13.class | Bin 0 -> 2758 bytes .../CommandeCltPasserController$14$1$1.class | Bin 0 -> 2903 bytes .../CommandeCltPasserController$14$1.class | Bin 0 -> 2571 bytes .../CommandeCltPasserController$14.class | Bin 0 -> 1890 bytes .../CommandeCltPasserController$2.class | Bin 0 -> 1892 bytes .../CommandeCltPasserController$3.class | Bin 0 -> 2422 bytes .../CommandeCltPasserController$4.class | Bin 0 -> 3366 bytes .../CommandeCltPasserController$5.class | Bin 0 -> 1527 bytes .../CommandeCltPasserController$6$1$1.class | Bin 0 -> 4796 bytes .../CommandeCltPasserController$6$1.class | Bin 0 -> 2503 bytes .../CommandeCltPasserController$6.class | Bin 0 -> 2078 bytes .../CommandeCltPasserController$7$1$1.class | Bin 0 -> 3076 bytes .../CommandeCltPasserController$7$1.class | Bin 0 -> 2572 bytes .../CommandeCltPasserController$7.class | Bin 0 -> 1927 bytes .../CommandeCltPasserController$8.class | Bin 0 -> 1908 bytes .../CommandeCltPasserController$9.class | Bin 0 -> 1913 bytes ...andeCltPasserController$ButtonCell$1.class | Bin 0 -> 2059 bytes ...mmandeCltPasserController$ButtonCell.class | Bin 0 -> 2350 bytes .../CommandeCltPasserController.class | Bin 0 -> 20853 bytes .../DevisClt/DevisAjouterController$1.class | Bin 0 -> 2027 bytes .../DevisClt/DevisAjouterController$10.class | Bin 0 -> 3213 bytes .../DevisClt/DevisAjouterController$11.class | Bin 0 -> 3210 bytes .../DevisClt/DevisAjouterController$12.class | Bin 0 -> 2713 bytes .../DevisAjouterController$13$1$1.class | Bin 0 -> 3635 bytes .../DevisAjouterController$13$1.class | Bin 0 -> 2629 bytes .../DevisClt/DevisAjouterController$13.class | Bin 0 -> 1959 bytes .../DevisClt/DevisAjouterController$2.class | Bin 0 -> 1839 bytes .../DevisClt/DevisAjouterController$3.class | Bin 0 -> 2382 bytes .../DevisClt/DevisAjouterController$4.class | Bin 0 -> 3168 bytes .../DevisClt/DevisAjouterController$5.class | Bin 0 -> 1481 bytes .../DevisAjouterController$6$1$1.class | Bin 0 -> 3535 bytes .../DevisClt/DevisAjouterController$6$1.class | Bin 0 -> 2503 bytes .../DevisClt/DevisAjouterController$6.class | Bin 0 -> 1866 bytes .../DevisClt/DevisAjouterController$7.class | Bin 0 -> 1863 bytes .../DevisClt/DevisAjouterController$8.class | Bin 0 -> 1868 bytes .../DevisAjouterController$9$1$1.class | Bin 0 -> 3568 bytes .../DevisClt/DevisAjouterController$9$1.class | Bin 0 -> 2513 bytes .../DevisClt/DevisAjouterController$9.class | Bin 0 -> 1916 bytes .../DevisAjouterController$ButtonCell$1.class | Bin 0 -> 1995 bytes .../DevisAjouterController$ButtonCell.class | Bin 0 -> 2289 bytes .../DevisClt/DevisAjouterController.class | Bin 0 -> 18869 bytes .../DevisCltGestionController$1.class | Bin 0 -> 1870 bytes .../DevisCltGestionController$10.class | Bin 0 -> 1806 bytes .../DevisCltGestionController$11.class | Bin 0 -> 1839 bytes .../DevisCltGestionController$12.class | Bin 0 -> 1810 bytes .../DevisCltGestionController$2.class | Bin 0 -> 1199 bytes .../DevisCltGestionController$3.class | Bin 0 -> 1495 bytes .../DevisCltGestionController$4$1.class | Bin 0 -> 3750 bytes .../DevisCltGestionController$4.class | Bin 0 -> 1117 bytes .../DevisCltGestionController$5.class | Bin 0 -> 1807 bytes .../DevisCltGestionController$6$1.class | Bin 0 -> 2918 bytes .../DevisCltGestionController$6.class | Bin 0 -> 1368 bytes .../DevisCltGestionController$7.class | Bin 0 -> 1593 bytes .../DevisCltGestionController$8.class | Bin 0 -> 2269 bytes .../DevisCltGestionController$9.class | Bin 0 -> 1833 bytes ...visCltGestionController$ButtonCell$1.class | Bin 0 -> 3793 bytes ...DevisCltGestionController$ButtonCell.class | Bin 0 -> 2319 bytes .../DevisClt/DevisCltGestionController.class | Bin 0 -> 8385 bytes .../DevisCltPrintController$1$1.class | Bin 0 -> 2129 bytes .../DevisClt/DevisCltPrintController$1.class | Bin 0 -> 2279 bytes ...evisCltPrintController$ListProdDevis.class | Bin 0 -> 2069 bytes .../DevisClt/DevisCltPrintController.class | Bin 0 -> 8558 bytes .../DevisClt/DevisDetailController$1$1.class | Bin 0 -> 1457 bytes .../DevisClt/DevisDetailController$1.class | Bin 0 -> 1213 bytes .../DevisClt/DevisDetailController$2.class | Bin 0 -> 3371 bytes .../DevisClt/DevisDetailController.class | Bin 0 -> 5429 bytes .../DevisDialogConfirmationController.class | Bin 0 -> 6892 bytes .../DevisClt/DevisImporterController$1.class | Bin 0 -> 1187 bytes .../DevisClt/DevisImporterController$10.class | Bin 0 -> 1827 bytes .../DevisClt/DevisImporterController$11.class | Bin 0 -> 1798 bytes .../DevisClt/DevisImporterController$2.class | Bin 0 -> 1483 bytes .../DevisImporterController$3$1.class | Bin 0 -> 3734 bytes .../DevisClt/DevisImporterController$3.class | Bin 0 -> 1101 bytes .../DevisClt/DevisImporterController$4.class | Bin 0 -> 1795 bytes .../DevisImporterController$5$1.class | Bin 0 -> 2902 bytes .../DevisClt/DevisImporterController$5.class | Bin 0 -> 1352 bytes .../DevisClt/DevisImporterController$6.class | Bin 0 -> 1581 bytes .../DevisClt/DevisImporterController$7.class | Bin 0 -> 2257 bytes .../DevisClt/DevisImporterController$8.class | Bin 0 -> 1821 bytes .../DevisClt/DevisImporterController$9.class | Bin 0 -> 1792 bytes .../DevisClt/DevisImporterController.class | Bin 0 -> 9107 bytes .../DevisClt/ListProduitDevis.class | Bin 0 -> 3891 bytes .../classes/Controllers/Dialog/Dialog$1.class | Bin 0 -> 1202 bytes .../classes/Controllers/Dialog/Dialog.class | Bin 0 -> 3209 bytes .../Dialog/DialogSuccessController.class | Bin 0 -> 2414 bytes .../Controllers/Dialog/MessageControle.class | Bin 0 -> 4702 bytes .../Controllers/Dialog/Notification$1.class | Bin 0 -> 1260 bytes .../Controllers/Dialog/Notification.class | Bin 0 -> 5026 bytes .../Controllers/Dialog/ShowDialog$1.class | Bin 0 -> 1340 bytes .../Controllers/Dialog/ShowDialog$2.class | Bin 0 -> 1337 bytes .../Controllers/Dialog/ShowDialog$3.class | Bin 0 -> 1347 bytes .../Controllers/Dialog/ShowDialog$4.class | Bin 0 -> 1344 bytes .../Controllers/Dialog/ShowDialog$5.class | Bin 0 -> 1344 bytes .../Controllers/Dialog/ShowDialog.class | Bin 0 -> 7864 bytes .../FactureCltAjouterController$1.class | Bin 0 -> 1926 bytes .../FactureCltAjouterController$10.class | Bin 0 -> 2313 bytes .../FactureCltAjouterController$11.class | Bin 0 -> 1877 bytes .../FactureCltAjouterController$12.class | Bin 0 -> 1848 bytes .../FactureCltAjouterController$13.class | Bin 0 -> 1881 bytes .../FactureCltAjouterController$14.class | Bin 0 -> 1852 bytes .../FactureCltAjouterController$2.class | Bin 0 -> 1231 bytes .../FactureCltAjouterController$3.class | Bin 0 -> 1527 bytes .../FactureCltAjouterController$4.class | Bin 0 -> 1231 bytes .../FactureCltAjouterController$5.class | Bin 0 -> 1231 bytes .../FactureCltAjouterController$6$1.class | Bin 0 -> 3798 bytes .../FactureCltAjouterController$6.class | Bin 0 -> 1157 bytes .../FactureCltAjouterController$7.class | Bin 0 -> 1859 bytes .../FactureCltAjouterController$8$1.class | Bin 0 -> 2967 bytes .../FactureCltAjouterController$8.class | Bin 0 -> 1408 bytes .../FactureCltAjouterController$9.class | Bin 0 -> 1645 bytes ...ureCltAjouterController$ButtonCell$1.class | Bin 0 -> 3327 bytes ...ctureCltAjouterController$ButtonCell.class | Bin 0 -> 2355 bytes .../FactureCltAjouterController.class | Bin 0 -> 7787 bytes ...tureCltAjouterDetailSelectController.class | Bin 0 -> 8554 bytes ...tureCltAjouterDetailTraiteController.class | Bin 0 -> 9637 bytes ...CltAjouterPaiementComptentController.class | Bin 0 -> 8254 bytes ...tAjouterPaiementFaciliteController$1.class | Bin 0 -> 2411 bytes ...AjouterPaiementFaciliteController$10.class | Bin 0 -> 1642 bytes ...AjouterPaiementFaciliteController$11.class | Bin 0 -> 1642 bytes ...AjouterPaiementFaciliteController$12.class | Bin 0 -> 1642 bytes ...tAjouterPaiementFaciliteController$2.class | Bin 0 -> 1665 bytes ...tAjouterPaiementFaciliteController$3.class | Bin 0 -> 3114 bytes ...tAjouterPaiementFaciliteController$4.class | Bin 0 -> 2630 bytes ...tAjouterPaiementFaciliteController$5.class | Bin 0 -> 2411 bytes ...tAjouterPaiementFaciliteController$6.class | Bin 0 -> 1683 bytes ...tAjouterPaiementFaciliteController$7.class | Bin 0 -> 1640 bytes ...tAjouterPaiementFaciliteController$8.class | Bin 0 -> 1640 bytes ...tAjouterPaiementFaciliteController$9.class | Bin 0 -> 1640 bytes ...CltAjouterPaiementFaciliteController.class | Bin 0 -> 19283 bytes .../FactureCltDetailController$1$1.class | Bin 0 -> 1667 bytes .../FactureCltDetailController$1.class | Bin 0 -> 1205 bytes .../FactureCltDetailController$2.class | Bin 0 -> 6288 bytes .../FactureCltDetailController$3.class | Bin 0 -> 5065 bytes .../FactureCltDetailController.class | Bin 0 -> 7620 bytes ...ctureCltDialogConfirmationController.class | Bin 0 -> 6278 bytes .../FactureCltGestionController$1$1.class | Bin 0 -> 2229 bytes .../FactureCltGestionController$1.class | Bin 0 -> 2123 bytes .../FactureCltGestionController$10.class | Bin 0 -> 1623 bytes .../FactureCltGestionController$11.class | Bin 0 -> 2297 bytes .../FactureCltGestionController$12.class | Bin 0 -> 1861 bytes .../FactureCltGestionController$13.class | Bin 0 -> 1832 bytes .../FactureCltGestionController$14.class | Bin 0 -> 1865 bytes .../FactureCltGestionController$15.class | Bin 0 -> 1836 bytes .../FactureCltGestionController$2.class | Bin 0 -> 1946 bytes .../FactureCltGestionController$3.class | Bin 0 -> 1223 bytes .../FactureCltGestionController$4.class | Bin 0 -> 1519 bytes .../FactureCltGestionController$5.class | Bin 0 -> 1223 bytes .../FactureCltGestionController$6.class | Bin 0 -> 1223 bytes .../FactureCltGestionController$7$1.class | Bin 0 -> 3726 bytes .../FactureCltGestionController$7.class | Bin 0 -> 1149 bytes .../FactureCltGestionController$8.class | Bin 0 -> 1835 bytes .../FactureCltGestionController$9$1.class | Bin 0 -> 2650 bytes .../FactureCltGestionController$9.class | Bin 0 -> 1400 bytes ...ureCltGestionController$ButtonCell$1.class | Bin 0 -> 3538 bytes ...ctureCltGestionController$ButtonCell.class | Bin 0 -> 2363 bytes .../FactureCltGestionController.class | Bin 0 -> 8536 bytes .../FactureCltPrintController$1$1.class | Bin 0 -> 2036 bytes .../FactureCltPrintController$1.class | Bin 0 -> 2035 bytes .../FactureCltPrintController.class | Bin 0 -> 9066 bytes .../FactureFrsAjouterController$1.class | Bin 0 -> 2067 bytes .../FactureFrsAjouterController$10$1$1.class | Bin 0 -> 3182 bytes .../FactureFrsAjouterController$10$1.class | Bin 0 -> 2770 bytes .../FactureFrsAjouterController$10.class | Bin 0 -> 2095 bytes .../FactureFrsAjouterController$2.class | Bin 0 -> 1886 bytes .../FactureFrsAjouterController$3.class | Bin 0 -> 2067 bytes .../FactureFrsAjouterController$4.class | Bin 0 -> 1886 bytes .../FactureFrsAjouterController$5.class | Bin 0 -> 2437 bytes .../FactureFrsAjouterController$6$1$1$1.class | Bin 0 -> 1733 bytes .../FactureFrsAjouterController$6$1$1.class | Bin 0 -> 5201 bytes .../FactureFrsAjouterController$6$1.class | Bin 0 -> 1121 bytes .../FactureFrsAjouterController$6.class | Bin 0 -> 3095 bytes .../FactureFrsAjouterController$7.class | Bin 0 -> 2751 bytes .../FactureFrsAjouterController$8.class | Bin 0 -> 3246 bytes .../FactureFrsAjouterController$9.class | Bin 0 -> 3243 bytes ...ureFrsAjouterController$ButtonCell$1.class | Bin 0 -> 2062 bytes ...ctureFrsAjouterController$ButtonCell.class | Bin 0 -> 2343 bytes .../FactureFrsAjouterController.class | Bin 0 -> 15059 bytes ...reFrsBonReceptionAjouterController$1.class | Bin 0 -> 2175 bytes ...eFrsBonReceptionAjouterController$10.class | Bin 0 -> 2362 bytes ...eFrsBonReceptionAjouterController$11.class | Bin 0 -> 2306 bytes ...eFrsBonReceptionAjouterController$12.class | Bin 0 -> 2138 bytes ...eFrsBonReceptionAjouterController$13.class | Bin 0 -> 2437 bytes ...eFrsBonReceptionAjouterController$14.class | Bin 0 -> 2443 bytes ...eFrsBonReceptionAjouterController$15.class | Bin 0 -> 2008 bytes ...reFrsBonReceptionAjouterController$2.class | Bin 0 -> 2030 bytes ...reFrsBonReceptionAjouterController$3.class | Bin 0 -> 2175 bytes ...reFrsBonReceptionAjouterController$4.class | Bin 0 -> 2042 bytes ...FrsBonReceptionAjouterController$5$1.class | Bin 0 -> 1794 bytes ...reFrsBonReceptionAjouterController$5.class | Bin 0 -> 1276 bytes ...reFrsBonReceptionAjouterController$6.class | Bin 0 -> 1596 bytes ...reFrsBonReceptionAjouterController$7.class | Bin 0 -> 1596 bytes ...reFrsBonReceptionAjouterController$8.class | Bin 0 -> 1596 bytes ...sBonReceptionAjouterController$9$1$1.class | Bin 0 -> 3199 bytes ...FrsBonReceptionAjouterController$9$1.class | Bin 0 -> 1229 bytes ...reFrsBonReceptionAjouterController$9.class | Bin 0 -> 2878 bytes ...eptionAjouterController$ButtonCell$1.class | Bin 0 -> 1933 bytes ...eceptionAjouterController$ButtonCell.class | Bin 0 -> 2459 bytes ...AjouterController$ButtonCellRemove$1.class | Bin 0 -> 2222 bytes ...onAjouterController$ButtonCellRemove.class | Bin 0 -> 2481 bytes ...tureFrsBonReceptionAjouterController.class | Bin 0 -> 17577 bytes .../FactureFrsDetailController$1$1.class | Bin 0 -> 1580 bytes .../FactureFrsDetailController$1.class | Bin 0 -> 1279 bytes .../FactureFrsDetailController$2.class | Bin 0 -> 4779 bytes .../FactureFrsDetailController.class | Bin 0 -> 4996 bytes .../FactureFrsGestionController$1.class | Bin 0 -> 2198 bytes .../FactureFrsGestionController$10$1.class | Bin 0 -> 3377 bytes .../FactureFrsGestionController$10.class | Bin 0 -> 1153 bytes .../FactureFrsGestionController$11.class | Bin 0 -> 1837 bytes .../FactureFrsGestionController$12$1.class | Bin 0 -> 2596 bytes .../FactureFrsGestionController$12.class | Bin 0 -> 1404 bytes .../FactureFrsGestionController$13.class | Bin 0 -> 1623 bytes .../FactureFrsGestionController$14.class | Bin 0 -> 2297 bytes .../FactureFrsGestionController$15.class | Bin 0 -> 1861 bytes .../FactureFrsGestionController$16.class | Bin 0 -> 1832 bytes .../FactureFrsGestionController$17.class | Bin 0 -> 1865 bytes .../FactureFrsGestionController$18.class | Bin 0 -> 1836 bytes .../FactureFrsGestionController$2$1.class | Bin 0 -> 1851 bytes .../FactureFrsGestionController$2.class | Bin 0 -> 2057 bytes .../FactureFrsGestionController$3.class | Bin 0 -> 1891 bytes .../FactureFrsGestionController$4.class | Bin 0 -> 1912 bytes .../FactureFrsGestionController$5.class | Bin 0 -> 1473 bytes .../FactureFrsGestionController$6.class | Bin 0 -> 1223 bytes .../FactureFrsGestionController$7.class | Bin 0 -> 1519 bytes .../FactureFrsGestionController$8$1.class | Bin 0 -> 2210 bytes .../FactureFrsGestionController$8.class | Bin 0 -> 1151 bytes .../FactureFrsGestionController$9.class | Bin 0 -> 1433 bytes ...ureFrsGestionController$ButtonCell$1.class | Bin 0 -> 3534 bytes ...ctureFrsGestionController$ButtonCell.class | Bin 0 -> 2352 bytes .../FactureFrsGestionController.class | Bin 0 -> 9610 bytes .../FournisseurGererController$1.class | Bin 0 -> 3549 bytes .../FournisseurGererController$2$1.class | Bin 0 -> 1549 bytes .../FournisseurGererController$2.class | Bin 0 -> 1276 bytes .../FournisseurGererController$3.class | Bin 0 -> 3353 bytes .../FournisseurGererController$4.class | Bin 0 -> 4937 bytes .../FournisseurGererController.class | Bin 0 -> 9434 bytes .../FournisseurGestionController$1.class | Bin 0 -> 1969 bytes .../FournisseurGestionController$10.class | Bin 0 -> 1852 bytes .../FournisseurGestionController$11.class | Bin 0 -> 1885 bytes .../FournisseurGestionController$12.class | Bin 0 -> 1856 bytes .../FournisseurGestionController$2.class | Bin 0 -> 1242 bytes .../FournisseurGestionController$3.class | Bin 0 -> 1538 bytes .../FournisseurGestionController$4$1.class | Bin 0 -> 3443 bytes .../FournisseurGestionController$4.class | Bin 0 -> 1172 bytes .../FournisseurGestionController$5.class | Bin 0 -> 1870 bytes .../FournisseurGestionController$6$1.class | Bin 0 -> 2527 bytes .../FournisseurGestionController$6.class | Bin 0 -> 1423 bytes .../FournisseurGestionController$7.class | Bin 0 -> 1656 bytes .../FournisseurGestionController$8.class | Bin 0 -> 2315 bytes .../FournisseurGestionController$9.class | Bin 0 -> 1879 bytes ...isseurGestionController$ButtonCell$1.class | Bin 0 -> 3181 bytes ...rnisseurGestionController$ButtonCell.class | Bin 0 -> 2380 bytes .../FournisseurGestionController.class | Bin 0 -> 8190 bytes .../Controllers/Home/AideController.class | Bin 0 -> 1290 bytes .../Controllers/Home/ContactController.class | Bin 0 -> 1762 bytes .../Home/DashboardController$1$1.class | Bin 0 -> 1859 bytes .../Home/DashboardController$1.class | Bin 0 -> 1083 bytes .../Home/DashboardController$2.class | Bin 0 -> 2040 bytes .../Home/DashboardController.class | Bin 0 -> 4087 bytes .../Controllers/Home/LogicielController.class | Bin 0 -> 1306 bytes .../Controllers/Home/MentionsController.class | Bin 0 -> 1306 bytes target/classes/Controllers/Main.class | Bin 0 -> 448 bytes .../Controllers/PrincipalController$1.class | Bin 0 -> 2084 bytes .../Controllers/PrincipalController$2.class | Bin 0 -> 1650 bytes .../Controllers/PrincipalController$3.class | Bin 0 -> 1653 bytes .../Controllers/PrincipalController.class | Bin 0 -> 12349 bytes .../Produit/AjouterProduitController$1.class | Bin 0 -> 2003 bytes .../Produit/AjouterProduitController$2.class | Bin 0 -> 2077 bytes .../Produit/AjouterProduitController$3.class | Bin 0 -> 2082 bytes .../Produit/AjouterProduitController$4.class | Bin 0 -> 1686 bytes .../AjouterProduitController$5$1.class | Bin 0 -> 1902 bytes .../Produit/AjouterProduitController$5.class | Bin 0 -> 1640 bytes .../AjouterProduitController$6$1.class | Bin 0 -> 1607 bytes .../Produit/AjouterProduitController$6.class | Bin 0 -> 1108 bytes .../Produit/AjouterProduitController$7.class | Bin 0 -> 1406 bytes .../Produit/AjouterProduitController.class | Bin 0 -> 9651 bytes .../Produit/GestionProduitController$1.class | Bin 0 -> 2019 bytes .../Produit/GestionProduitController$10.class | Bin 0 -> 1635 bytes .../GestionProduitController$11$1.class | Bin 0 -> 3210 bytes .../Produit/GestionProduitController$11.class | Bin 0 -> 1105 bytes .../Produit/GestionProduitController$12.class | Bin 0 -> 1795 bytes .../GestionProduitController$13$1.class | Bin 0 -> 2376 bytes .../Produit/GestionProduitController$13.class | Bin 0 -> 1356 bytes .../Produit/GestionProduitController$14.class | Bin 0 -> 1581 bytes .../Produit/GestionProduitController$15.class | Bin 0 -> 2258 bytes .../Produit/GestionProduitController$16.class | Bin 0 -> 1822 bytes .../Produit/GestionProduitController$17.class | Bin 0 -> 1793 bytes .../Produit/GestionProduitController$18.class | Bin 0 -> 1826 bytes .../Produit/GestionProduitController$19.class | Bin 0 -> 1797 bytes .../Produit/GestionProduitController$2.class | Bin 0 -> 1822 bytes .../Produit/GestionProduitController$3.class | Bin 0 -> 2847 bytes .../Produit/GestionProduitController$4.class | Bin 0 -> 1187 bytes .../Produit/GestionProduitController$5.class | Bin 0 -> 1483 bytes .../GestionProduitController$6$1.class | Bin 0 -> 1607 bytes .../Produit/GestionProduitController$6.class | Bin 0 -> 1100 bytes .../Produit/GestionProduitController$7.class | Bin 0 -> 1391 bytes .../Produit/GestionProduitController$8.class | Bin 0 -> 2197 bytes .../Produit/GestionProduitController$9.class | Bin 0 -> 1532 bytes ...estionProduitController$ButtonCell$1.class | Bin 0 -> 2952 bytes .../GestionProduitController$ButtonCell.class | Bin 0 -> 2297 bytes .../Produit/GestionProduitController.class | Bin 0 -> 9020 bytes .../Produit/ModifierProduitController$1.class | Bin 0 -> 2293 bytes .../Produit/ModifierProduitController$2.class | Bin 0 -> 2286 bytes .../Produit/ModifierProduitController$3.class | Bin 0 -> 2291 bytes .../ModifierProduitController$4$1.class | Bin 0 -> 2930 bytes .../Produit/ModifierProduitController$4.class | Bin 0 -> 3724 bytes .../Produit/ModifierProduitController.class | Bin 0 -> 8261 bytes .../RechercherProduitController$1.class | Bin 0 -> 1301 bytes .../RechercherProduitController$10.class | Bin 0 -> 1840 bytes .../RechercherProduitController$11.class | Bin 0 -> 1811 bytes .../RechercherProduitController$12.class | Bin 0 -> 1844 bytes .../RechercherProduitController$13.class | Bin 0 -> 1815 bytes .../RechercherProduitController$2.class | Bin 0 -> 1301 bytes .../RechercherProduitController$3.class | Bin 0 -> 1171 bytes .../RechercherProduitController$4.class | Bin 0 -> 1467 bytes .../RechercherProduitController$5$1.class | Bin 0 -> 3309 bytes .../RechercherProduitController$5.class | Bin 0 -> 1125 bytes .../RechercherProduitController$6.class | Bin 0 -> 1811 bytes .../RechercherProduitController$7$1.class | Bin 0 -> 2404 bytes .../RechercherProduitController$7.class | Bin 0 -> 1376 bytes .../RechercherProduitController$8.class | Bin 0 -> 1597 bytes .../RechercherProduitController$9.class | Bin 0 -> 2274 bytes ...ercherProduitController$ButtonCell$1.class | Bin 0 -> 3092 bytes ...chercherProduitController$ButtonCell.class | Bin 0 -> 2325 bytes .../Produit/RechercherProduitController.class | Bin 0 -> 9827 bytes .../GestionReglementController$1.class | Bin 0 -> 2179 bytes .../GestionReglementController$10$1.class | Bin 0 -> 1781 bytes .../GestionReglementController$10.class | Bin 0 -> 1144 bytes .../GestionReglementController$11.class | Bin 0 -> 1434 bytes .../GestionReglementController$12$1.class | Bin 0 -> 3747 bytes .../GestionReglementController$12.class | Bin 0 -> 1144 bytes .../GestionReglementController$13.class | Bin 0 -> 1844 bytes .../GestionReglementController$14$1.class | Bin 0 -> 2920 bytes .../GestionReglementController$14.class | Bin 0 -> 1395 bytes .../GestionReglementController$15.class | Bin 0 -> 1630 bytes .../GestionReglementController$16.class | Bin 0 -> 2298 bytes .../GestionReglementController$17.class | Bin 0 -> 1862 bytes .../GestionReglementController$18.class | Bin 0 -> 1833 bytes .../GestionReglementController$19.class | Bin 0 -> 1866 bytes .../GestionReglementController$2$1.class | Bin 0 -> 2210 bytes .../GestionReglementController$2.class | Bin 0 -> 2030 bytes .../GestionReglementController$20.class | Bin 0 -> 1837 bytes .../GestionReglementController$3$1.class | Bin 0 -> 1834 bytes .../GestionReglementController$3.class | Bin 0 -> 2030 bytes .../GestionReglementController$4$1.class | Bin 0 -> 2219 bytes .../GestionReglementController$4.class | Bin 0 -> 2030 bytes .../GestionReglementController$5.class | Bin 0 -> 1868 bytes .../GestionReglementController$6.class | Bin 0 -> 1901 bytes .../GestionReglementController$7.class | Bin 0 -> 1713 bytes .../GestionReglementController$8.class | Bin 0 -> 1218 bytes .../GestionReglementController$9.class | Bin 0 -> 1514 bytes ...tionReglementController$ButtonCell$1.class | Bin 0 -> 1909 bytes ...estionReglementController$ButtonCell.class | Bin 0 -> 2335 bytes .../GestionReglementController.class | Bin 0 -> 10129 bytes .../ReglementAjouter1Controller$1.class | Bin 0 -> 2193 bytes .../ReglementAjouter1Controller$10.class | Bin 0 -> 2370 bytes .../ReglementAjouter1Controller$11.class | Bin 0 -> 1941 bytes .../ReglementAjouter1Controller$12.class | Bin 0 -> 1916 bytes .../ReglementAjouter1Controller$13.class | Bin 0 -> 2373 bytes .../ReglementAjouter1Controller$14$1.class | Bin 0 -> 2740 bytes .../ReglementAjouter1Controller$14.class | Bin 0 -> 1256 bytes .../ReglementAjouter1Controller$2.class | Bin 0 -> 1885 bytes .../ReglementAjouter1Controller$3.class | Bin 0 -> 2193 bytes .../ReglementAjouter1Controller$4.class | Bin 0 -> 2065 bytes .../ReglementAjouter1Controller$5.class | Bin 0 -> 1897 bytes .../ReglementAjouter1Controller$6.class | Bin 0 -> 1524 bytes .../ReglementAjouter1Controller$7.class | Bin 0 -> 1524 bytes .../ReglementAjouter1Controller$8.class | Bin 0 -> 1907 bytes .../ReglementAjouter1Controller$9.class | Bin 0 -> 2069 bytes ...ementAjouter1Controller$ButtonCell$1.class | Bin 0 -> 3290 bytes ...glementAjouter1Controller$ButtonCell.class | Bin 0 -> 2345 bytes ...jouter1Controller$ButtonCellRemove$1.class | Bin 0 -> 2050 bytes ...tAjouter1Controller$ButtonCellRemove.class | Bin 0 -> 2367 bytes .../ReglementAjouter1Controller.class | Bin 0 -> 11335 bytes .../ReglementAjouter2Controller$1.class | Bin 0 -> 2402 bytes .../ReglementAjouter2Controller$2.class | Bin 0 -> 1561 bytes .../ReglementAjouter2Controller$3.class | Bin 0 -> 3009 bytes .../ReglementAjouter2Controller$4.class | Bin 0 -> 2525 bytes .../ReglementAjouter2Controller$5.class | Bin 0 -> 2352 bytes .../ReglementAjouter2Controller$6.class | Bin 0 -> 1578 bytes .../ReglementAjouter2Controller$7.class | Bin 0 -> 3091 bytes .../ReglementAjouter2Controller.class | Bin 0 -> 16846 bytes .../ReglementAjouter3Controller$1.class | Bin 0 -> 2651 bytes .../ReglementAjouter3Controller$2$1.class | Bin 0 -> 1720 bytes .../ReglementAjouter3Controller$2.class | Bin 0 -> 1144 bytes .../ReglementAjouter3Controller$3.class | Bin 0 -> 1566 bytes .../ReglementAjouter3Controller.class | Bin 0 -> 9418 bytes ...eglementDialogConfirmationController.class | Bin 0 -> 10629 bytes .../ReglementDialogDetailController$1.class | Bin 0 -> 2675 bytes .../ReglementDialogDetailController$2$1.class | Bin 0 -> 1876 bytes .../ReglementDialogDetailController$2.class | Bin 0 -> 2082 bytes .../ReglementDialogDetailController$3$1.class | Bin 0 -> 1636 bytes .../ReglementDialogDetailController$3.class | Bin 0 -> 1306 bytes .../ReglementDialogDetailController$4.class | Bin 0 -> 1581 bytes .../ReglementDialogDetailController.class | Bin 0 -> 11742 bytes .../Reglement/TraiteFrsPrintController.class | Bin 0 -> 1077 bytes .../Stock/BondeEnterPrintController.class | Bin 0 -> 4304 bytes .../Stock/BondeEntrerController$1.class | Bin 0 -> 1727 bytes .../Stock/BondeEntrerController$10.class | Bin 0 -> 1371 bytes .../Stock/BondeEntrerController$11.class | Bin 0 -> 2050 bytes .../Stock/BondeEntrerController$12.class | Bin 0 -> 2050 bytes .../Stock/BondeEntrerController$13.class | Bin 0 -> 2050 bytes .../Stock/BondeEntrerController$14.class | Bin 0 -> 1837 bytes .../Stock/BondeEntrerController$15.class | Bin 0 -> 1468 bytes .../Stock/BondeEntrerController$16.class | Bin 0 -> 4056 bytes .../Stock/BondeEntrerController$2.class | Bin 0 -> 2024 bytes .../Stock/BondeEntrerController$3.class | Bin 0 -> 1844 bytes .../Stock/BondeEntrerController$4.class | Bin 0 -> 2843 bytes .../Stock/BondeEntrerController$5.class | Bin 0 -> 2021 bytes .../Stock/BondeEntrerController$6.class | Bin 0 -> 1843 bytes .../Stock/BondeEntrerController$7$1.class | Bin 0 -> 1761 bytes .../Stock/BondeEntrerController$7.class | Bin 0 -> 1063 bytes .../Stock/BondeEntrerController$8.class | Bin 0 -> 1370 bytes .../Stock/BondeEntrerController$9$1.class | Bin 0 -> 1564 bytes .../Stock/BondeEntrerController$9.class | Bin 0 -> 1062 bytes .../BondeEntrerController$ButtonCell$1.class | Bin 0 -> 3207 bytes .../BondeEntrerController$ButtonCell.class | Bin 0 -> 2274 bytes ...BondeEntrerController$ButtonCellBE$1.class | Bin 0 -> 1694 bytes .../BondeEntrerController$ButtonCellBE.class | Bin 0 -> 2275 bytes .../Stock/BondeEntrerController.class | Bin 0 -> 10432 bytes .../Stock/BondeEntrerDetailController.class | Bin 0 -> 8878 bytes .../BondeEntrerDialogConfirmation$1.class | Bin 0 -> 1357 bytes .../Stock/BondeEntrerDialogConfirmation.class | Bin 0 -> 8684 bytes .../Stock/BondeSortieController$1.class | Bin 0 -> 1537 bytes .../Stock/BondeSortieController$10.class | Bin 0 -> 1469 bytes .../Stock/BondeSortieController$11.class | Bin 0 -> 4153 bytes .../Stock/BondeSortieController$12$1.class | Bin 0 -> 1884 bytes .../Stock/BondeSortieController$12.class | Bin 0 -> 1067 bytes .../Stock/BondeSortieController$13.class | Bin 0 -> 1373 bytes .../Stock/BondeSortieController$14.class | Bin 0 -> 2050 bytes .../Stock/BondeSortieController$15.class | Bin 0 -> 2050 bytes .../Stock/BondeSortieController$16.class | Bin 0 -> 2050 bytes .../Stock/BondeSortieController$17.class | Bin 0 -> 1854 bytes .../Stock/BondeSortieController$2.class | Bin 0 -> 1727 bytes .../Stock/BondeSortieController$3.class | Bin 0 -> 2024 bytes .../Stock/BondeSortieController$4.class | Bin 0 -> 1844 bytes .../Stock/BondeSortieController$5$1.class | Bin 0 -> 1669 bytes .../Stock/BondeSortieController$5.class | Bin 0 -> 4711 bytes .../Stock/BondeSortieController$6.class | Bin 0 -> 2021 bytes .../Stock/BondeSortieController$7.class | Bin 0 -> 1843 bytes .../Stock/BondeSortieController$8$1.class | Bin 0 -> 1564 bytes .../Stock/BondeSortieController$8.class | Bin 0 -> 1062 bytes .../Stock/BondeSortieController$9.class | Bin 0 -> 1370 bytes ...BondeSortieController$ButtonCell$1$1.class | Bin 0 -> 1628 bytes .../BondeSortieController$ButtonCell$1.class | Bin 0 -> 4927 bytes .../BondeSortieController$ButtonCell.class | Bin 0 -> 2274 bytes ...BondeSortieController$ButtonCellBE$1.class | Bin 0 -> 1694 bytes .../BondeSortieController$ButtonCellBE.class | Bin 0 -> 2275 bytes .../Stock/BondeSortieController.class | Bin 0 -> 10693 bytes .../Stock/BondeSortieDetailController.class | Bin 0 -> 8974 bytes .../BondeSortieDialogConfirmation$1.class | Bin 0 -> 1357 bytes .../Stock/BondeSortieDialogConfirmation.class | Bin 0 -> 8473 bytes .../EtatStockCategorieController$1.class | Bin 0 -> 1901 bytes .../EtatStockCategorieController$10$1.class | Bin 0 -> 1722 bytes .../EtatStockCategorieController$10.class | Bin 0 -> 1352 bytes .../EtatStockCategorieController$11.class | Bin 0 -> 1444 bytes .../EtatStockCategorieController$12$1.class | Bin 0 -> 1858 bytes .../EtatStockCategorieController$12.class | Bin 0 -> 1457 bytes .../EtatStockCategorieController$13.class | Bin 0 -> 1461 bytes .../EtatStockCategorieController$2.class | Bin 0 -> 1879 bytes .../EtatStockCategorieController$3.class | Bin 0 -> 1748 bytes .../EtatStockCategorieController$4.class | Bin 0 -> 1877 bytes .../EtatStockCategorieController$5.class | Bin 0 -> 1723 bytes .../EtatStockCategorieController$6.class | Bin 0 -> 1725 bytes .../EtatStockCategorieController$7.class | Bin 0 -> 1267 bytes .../EtatStockCategorieController$8.class | Bin 0 -> 1269 bytes .../EtatStockCategorieController$9.class | Bin 0 -> 1270 bytes ...orieController$ButtonCellCategorie$1.class | Bin 0 -> 1954 bytes ...egorieController$ButtonCellCategorie.class | Bin 0 -> 2373 bytes ...egorieController$ButtonCellProduit$1.class | Bin 0 -> 3111 bytes ...ategorieController$ButtonCellProduit.class | Bin 0 -> 2359 bytes .../Stock/EtatStockCategorieController.class | Bin 0 -> 11651 bytes .../Controllers/Stock/ListProduitBon.class | Bin 0 -> 1749 bytes .../Controllers/Stock/ListProduitRech.class | Bin 0 -> 1625 bytes .../Stock/MouvementStockController$1.class | Bin 0 -> 1783 bytes .../Stock/MouvementStockController$10.class | Bin 0 -> 2149 bytes .../Stock/MouvementStockController$2.class | Bin 0 -> 2029 bytes .../Stock/MouvementStockController$3.class | Bin 0 -> 1242 bytes .../Stock/MouvementStockController$4.class | Bin 0 -> 1246 bytes .../Stock/MouvementStockController$5$1.class | Bin 0 -> 3174 bytes .../Stock/MouvementStockController$5.class | Bin 0 -> 1552 bytes .../Stock/MouvementStockController$6.class | Bin 0 -> 2608 bytes .../Stock/MouvementStockController$7.class | Bin 0 -> 2172 bytes .../Stock/MouvementStockController$8.class | Bin 0 -> 2143 bytes .../Stock/MouvementStockController$9.class | Bin 0 -> 2176 bytes .../Stock/MouvementStockController.class | Bin 0 -> 11688 bytes .../Stock/PrintAllCategorieController.class | Bin 0 -> 2703 bytes .../Stock/PrintAllProduitController.class | Bin 0 -> 2802 bytes .../PrintMouvementProduitController.class | Bin 0 -> 3210 bytes .../Stock/PrintSelProduitController.class | Bin 0 -> 2921 bytes .../TraiteCltDetailController$1.class | Bin 0 -> 1378 bytes .../TraiteCltDetailController$2.class | Bin 0 -> 1378 bytes .../TraiteCltDetailController$3.class | Bin 0 -> 1378 bytes .../TraiteCltDetailController$4$1.class | Bin 0 -> 1481 bytes .../TraiteCltDetailController$4.class | Bin 0 -> 1119 bytes .../TraiteCltDetailController$5.class | Bin 0 -> 5870 bytes .../TraiteCltDetailController$6.class | Bin 0 -> 3782 bytes .../TraiteClt/TraiteCltDetailController.class | Bin 0 -> 7740 bytes .../TraiteCltGestionController$1$1.class | Bin 0 -> 2378 bytes .../TraiteCltGestionController$1.class | Bin 0 -> 2102 bytes .../TraiteCltGestionController$10.class | Bin 0 -> 1848 bytes .../TraiteCltGestionController$11.class | Bin 0 -> 1819 bytes .../TraiteCltGestionController$12.class | Bin 0 -> 1852 bytes .../TraiteCltGestionController$13.class | Bin 0 -> 1823 bytes .../TraiteCltGestionController$2.class | Bin 0 -> 1928 bytes .../TraiteCltGestionController$3.class | Bin 0 -> 1211 bytes .../TraiteCltGestionController$4.class | Bin 0 -> 1507 bytes .../TraiteCltGestionController$5$1.class | Bin 0 -> 3597 bytes .../TraiteCltGestionController$5.class | Bin 0 -> 1133 bytes .../TraiteCltGestionController$6.class | Bin 0 -> 1821 bytes .../TraiteCltGestionController$7$1.class | Bin 0 -> 2739 bytes .../TraiteCltGestionController$7.class | Bin 0 -> 1384 bytes .../TraiteCltGestionController$8.class | Bin 0 -> 1607 bytes .../TraiteCltGestionController$9.class | Bin 0 -> 2282 bytes ...iteCltGestionController$ButtonCell$1.class | Bin 0 -> 2407 bytes ...raiteCltGestionController$ButtonCell.class | Bin 0 -> 2343 bytes .../TraiteCltGestionController.class | Bin 0 -> 8155 bytes .../TraiteClt/TraiteCltPrintController.class | Bin 0 -> 6003 bytes .../TraiteCltPrintRetardController.class | Bin 0 -> 3181 bytes .../TraiteCltRetardController$1.class | Bin 0 -> 1211 bytes .../TraiteCltRetardController$10.class | Bin 0 -> 2290 bytes .../TraiteCltRetardController$11.class | Bin 0 -> 1854 bytes .../TraiteCltRetardController$12.class | Bin 0 -> 1825 bytes .../TraiteCltRetardController$13.class | Bin 0 -> 1858 bytes .../TraiteCltRetardController$14.class | Bin 0 -> 1829 bytes .../TraiteCltRetardController$2.class | Bin 0 -> 1507 bytes .../TraiteCltRetardController$3.class | Bin 0 -> 1213 bytes .../TraiteCltRetardController$4$1.class | Bin 0 -> 2399 bytes .../TraiteCltRetardController$4.class | Bin 0 -> 1133 bytes .../TraiteCltRetardController$5.class | Bin 0 -> 5847 bytes .../TraiteCltRetardController$6$1.class | Bin 0 -> 3670 bytes .../TraiteCltRetardController$6.class | Bin 0 -> 1131 bytes .../TraiteCltRetardController$7.class | Bin 0 -> 1827 bytes .../TraiteCltRetardController$8$1.class | Bin 0 -> 2805 bytes .../TraiteCltRetardController$8.class | Bin 0 -> 1382 bytes .../TraiteCltRetardController$9.class | Bin 0 -> 1613 bytes .../TraiteClt/TraiteCltRetardController.class | Bin 0 -> 7898 bytes .../Controllers/Traitement/Adaptateur.class | Bin 0 -> 10660 bytes .../Controllers/Traitement/MyWindow.class | Bin 0 -> 3699 bytes .../Traitement/ParametreSystem.class | Bin 0 -> 4829 bytes .../TotalHeightTableColumn$1$1.class | Bin 0 -> 1818 bytes .../Traitement/TotalHeightTableColumn$1.class | Bin 0 -> 1944 bytes .../Traitement/TotalHeightTableColumn.class | Bin 0 -> 1933 bytes .../Controllers/Traitement/contro.class | Bin 0 -> 6962 bytes .../Controllers/User/AddUserController.class | Bin 0 -> 1063 bytes .../User/GestionUtilisateurController$1.class | Bin 0 -> 1861 bytes .../User/GestionUtilisateurController.class | Bin 0 -> 2859 bytes .../User/ProfileController$1.class | Bin 0 -> 1127 bytes .../User/ProfileController$2.class | Bin 0 -> 1129 bytes .../User/ProfileController$3.class | Bin 0 -> 3187 bytes .../User/ProfileController$4.class | Bin 0 -> 3189 bytes .../Controllers/User/ProfileController.class | Bin 0 -> 9078 bytes .../Step1CommandeCltController$1.class | Bin 0 -> 2081 bytes .../Step1CommandeCltController$10.class | Bin 0 -> 2767 bytes .../Step1CommandeCltController$11.class | Bin 0 -> 3262 bytes .../Step1CommandeCltController$12.class | Bin 0 -> 1538 bytes .../Step1CommandeCltController$13.class | Bin 0 -> 3259 bytes .../Step1CommandeCltController$2.class | Bin 0 -> 1903 bytes .../Step1CommandeCltController$3.class | Bin 0 -> 2447 bytes .../Step1CommandeCltController$4$1$1.class | Bin 0 -> 3488 bytes .../Step1CommandeCltController$4$1.class | Bin 0 -> 2786 bytes .../Step1CommandeCltController$4.class | Bin 0 -> 2111 bytes .../Step1CommandeCltController$5$1$1.class | Bin 0 -> 5185 bytes .../Step1CommandeCltController$5$1.class | Bin 0 -> 2518 bytes .../Step1CommandeCltController$5.class | Bin 0 -> 2091 bytes .../Step1CommandeCltController$6$1$1.class | Bin 0 -> 4035 bytes .../Step1CommandeCltController$6$1.class | Bin 0 -> 2811 bytes .../Step1CommandeCltController$6.class | Bin 0 -> 2169 bytes .../Step1CommandeCltController$7.class | Bin 0 -> 1917 bytes .../Step1CommandeCltController$8.class | Bin 0 -> 1922 bytes .../Step1CommandeCltController$9$1$1.class | Bin 0 -> 3884 bytes .../Step1CommandeCltController$9$1.class | Bin 0 -> 2821 bytes .../Step1CommandeCltController$9.class | Bin 0 -> 2219 bytes ...p1CommandeCltController$ButtonCell$1.class | Bin 0 -> 2081 bytes ...tep1CommandeCltController$ButtonCell.class | Bin 0 -> 2363 bytes .../Step1CommandeCltController.class | Bin 0 -> 22502 bytes .../Step2BonLivraisonCltController.class | Bin 0 -> 7678 bytes .../Step3FactureCltController$1.class | Bin 0 -> 2323 bytes .../Step3FactureCltController$10.class | Bin 0 -> 1554 bytes .../Step3FactureCltController$11.class | Bin 0 -> 1554 bytes .../Step3FactureCltController$12.class | Bin 0 -> 1554 bytes .../Step3FactureCltController$2.class | Bin 0 -> 1583 bytes .../Step3FactureCltController$3.class | Bin 0 -> 3026 bytes .../Step3FactureCltController$4.class | Bin 0 -> 2542 bytes .../Step3FactureCltController$5.class | Bin 0 -> 2323 bytes .../Step3FactureCltController$6.class | Bin 0 -> 1595 bytes .../Step3FactureCltController$7.class | Bin 0 -> 1552 bytes .../Step3FactureCltController$8.class | Bin 0 -> 1552 bytes .../Step3FactureCltController$9.class | Bin 0 -> 1552 bytes .../Step3FactureCltController.class | Bin 0 -> 22439 bytes .../Step4SaveVenteCltController$1.class | Bin 0 -> 1271 bytes .../Step4SaveVenteCltController$2.class | Bin 0 -> 3445 bytes .../Step4SaveVenteCltController$3.class | Bin 0 -> 2978 bytes .../Step4SaveVenteCltController$4$1.class | Bin 0 -> 2577 bytes .../Step4SaveVenteCltController$4.class | Bin 0 -> 1178 bytes .../Step4SaveVenteCltController$5.class | Bin 0 -> 2491 bytes .../Step4SaveVenteCltController$6$1.class | Bin 0 -> 1818 bytes .../Step4SaveVenteCltController$6.class | Bin 0 -> 1182 bytes .../Step4SaveVenteCltController$7.class | Bin 0 -> 2680 bytes .../Step4SaveVenteCltController$8$1.class | Bin 0 -> 1952 bytes .../Step4SaveVenteCltController$8.class | Bin 0 -> 1177 bytes .../Step4SaveVenteCltController$9.class | Bin 0 -> 3092 bytes .../Step4SaveVenteCltController.class | Bin 0 -> 8647 bytes .../VenteRapideCltController.class | Bin 0 -> 1809 bytes .../VenteSansFactureCltController$1.class | Bin 0 -> 2099 bytes .../VenteSansFactureCltController$10.class | Bin 0 -> 1559 bytes ...VenteSansFactureCltController$11$1$1.class | Bin 0 -> 3525 bytes .../VenteSansFactureCltController$11$1.class | Bin 0 -> 2820 bytes .../VenteSansFactureCltController$11.class | Bin 0 -> 2139 bytes .../VenteSansFactureCltController$12.class | Bin 0 -> 2701 bytes .../VenteSansFactureCltController$13.class | Bin 0 -> 2785 bytes .../VenteSansFactureCltController$14.class | Bin 0 -> 3280 bytes .../VenteSansFactureCltController$15.class | Bin 0 -> 3277 bytes .../VenteSansFactureCltController$16$1.class | Bin 0 -> 3374 bytes .../VenteSansFactureCltController$16.class | Bin 0 -> 1203 bytes .../VenteSansFactureCltController$17.class | Bin 0 -> 1743 bytes .../VenteSansFactureCltController$18$1.class | Bin 0 -> 2622 bytes .../VenteSansFactureCltController$18.class | Bin 0 -> 1454 bytes .../VenteSansFactureCltController$19.class | Bin 0 -> 1529 bytes .../VenteSansFactureCltController$2.class | Bin 0 -> 1924 bytes .../VenteSansFactureCltController$20.class | Bin 0 -> 2341 bytes .../VenteSansFactureCltController$21.class | Bin 0 -> 1905 bytes .../VenteSansFactureCltController$22.class | Bin 0 -> 1876 bytes .../VenteSansFactureCltController$23.class | Bin 0 -> 1909 bytes .../VenteSansFactureCltController$24.class | Bin 0 -> 1880 bytes .../VenteSansFactureCltController$3.class | Bin 0 -> 2465 bytes .../VenteSansFactureCltController$4.class | Bin 0 -> 1579 bytes .../VenteSansFactureCltController$5.class | Bin 0 -> 1579 bytes .../VenteSansFactureCltController$6.class | Bin 0 -> 1579 bytes .../VenteSansFactureCltController$7$1.class | Bin 0 -> 2278 bytes .../VenteSansFactureCltController$7.class | Bin 0 -> 2191 bytes .../VenteSansFactureCltController$8.class | Bin 0 -> 2147 bytes .../VenteSansFactureCltController$9.class | Bin 0 -> 2022 bytes ...ansFactureCltController$ButtonCell$1.class | Bin 0 -> 2108 bytes ...eSansFactureCltController$ButtonCell.class | Bin 0 -> 2387 bytes ...ltController$ButtonCellOperation$1$1.class | Bin 0 -> 2957 bytes ...eCltController$ButtonCellOperation$1.class | Bin 0 -> 3125 bytes ...eCltController$ButtonCellOperation$2.class | Bin 0 -> 2147 bytes ...ureCltController$ButtonCellOperation.class | Bin 0 -> 3432 bytes .../VenteSansFactureCltController.class | Bin 0 -> 20970 bytes ...teSansFactureCltDetailController$1$1.class | Bin 0 -> 1962 bytes ...enteSansFactureCltDetailController$1.class | Bin 0 -> 1243 bytes ...enteSansFactureCltDetailController$2.class | Bin 0 -> 5017 bytes .../VenteSansFactureCltDetailController.class | Bin 0 -> 6480 bytes .../BonLivraisonClt/BonLivraisonClt.class | Bin 0 -> 6091 bytes .../BonLivraisonClt/BonLivraisonCltDB.class | Bin 0 -> 18194 bytes .../BonLivraisonCltGestionList.class | Bin 0 -> 1573 bytes .../BonLivraisonCltProduitList.class | Bin 0 -> 1956 bytes .../BonReceptionFrs/BonReceptionDB.class | Bin 0 -> 11509 bytes .../BonReceptionFrs/BonReceptionFrs.class | Bin 0 -> 3550 bytes .../BonReceptionGestionDB.class | Bin 0 -> 6221 bytes .../BonReceptionGestionList.class | Bin 0 -> 1876 bytes .../BonReceptionFrs/BonReceptionList.class | Bin 0 -> 2025 bytes .../BonReceptionProduitList.class | Bin 0 -> 2135 bytes target/classes/Models/Caisse/CaisseClt.class | Bin 0 -> 3382 bytes target/classes/Models/Caisse/CaisseDB.class | Bin 0 -> 15085 bytes .../Models/Caisse/CaisseEntreListe.class | Bin 0 -> 2165 bytes .../classes/Models/Caisse/CaisseListe.class | Bin 0 -> 2729 bytes .../Models/Caisse/CaisseSortieListe.class | Bin 0 -> 2151 bytes .../Models/Caisse/CarteBancaireClt.class | Bin 0 -> 2872 bytes .../Models/Caisse/CarteBancaireCltDB.class | Bin 0 -> 4990 bytes target/classes/Models/Caisse/Frais.class | Bin 0 -> 3112 bytes target/classes/Models/Caisse/FraisDB.class | Bin 0 -> 8698 bytes .../classes/Models/Categorie/Categorie.class | Bin 0 -> 875 bytes .../Models/Categorie/CategorieDB.class | Bin 0 -> 4654 bytes .../Models/Categorie/CategorieListe.class | Bin 0 -> 843 bytes .../classes/Models/ChequeClt/ChequeClt.class | Bin 0 -> 5075 bytes .../Models/ChequeClt/ChequeCltDB.class | Bin 0 -> 38414 bytes .../ChequeClt/ChequeCltGestionListe.class | Bin 0 -> 3519 bytes .../ChequeClt/ChequeCltHistoriqueListe.class | Bin 0 -> 2199 bytes .../classes/Models/ChequeClt/ChequeList.class | Bin 0 -> 2659 bytes .../ChequeClt/DatePickerCellCheque$1.class | Bin 0 -> 1007 bytes .../ChequeClt/DatePickerCellCheque$2.class | Bin 0 -> 2107 bytes .../ChequeClt/DatePickerCellCheque.class | Bin 0 -> 5291 bytes target/classes/Models/Client/Client.class | Bin 0 -> 5787 bytes target/classes/Models/Client/ClientDB.class | Bin 0 -> 10744 bytes .../Models/Client/ClientEntreprise.class | Bin 0 -> 5520 bytes .../Client/ClientEntrepriseContact.class | Bin 0 -> 3677 bytes .../Client/ClientEntrepriseContactDB.class | Bin 0 -> 5088 bytes .../Models/Client/ClientEntrepriseDB.class | Bin 0 -> 10503 bytes .../Models/Client/ClientPassager.class | Bin 0 -> 3459 bytes .../Models/Client/ClientPassagerDB.class | Bin 0 -> 3685 bytes .../Models/CommandeClt/CommandeClt.class | Bin 0 -> 5899 bytes .../Models/CommandeClt/CommandeCltDB.class | Bin 0 -> 22011 bytes .../Models/CommandeClt/CommandeCltListe.class | Bin 0 -> 2003 bytes .../Models/CommandeFrs/CommandeFrs.class | Bin 0 -> 609 bytes target/classes/Models/DevisClt/Devis.class | Bin 0 -> 5790 bytes .../Models/DevisClt/DevisCltListe.class | Bin 0 -> 1646 bytes target/classes/Models/DevisClt/DevisDB.class | Bin 0 -> 18184 bytes .../Models/FactureClt/FactureClt.class | Bin 0 -> 12172 bytes .../FactureClt/FactureCltChequeListe.class | Bin 0 -> 1267 bytes .../Models/FactureClt/FactureCltDB.class | Bin 0 -> 19505 bytes .../Models/FactureClt/FactureCltGestion.class | Bin 0 -> 2069 bytes .../FactureClt/FactureCltGestionList.class | Bin 0 -> 1661 bytes .../FactureClt/FactureCltTraiteListe.class | Bin 0 -> 906 bytes .../Models/FactureFrs/FactureFrs.class | Bin 0 -> 7418 bytes .../Models/FactureFrs/FactureFrsDB.class | Bin 0 -> 18772 bytes .../FactureFrs/FactureFrsProduitList.class | Bin 0 -> 2288 bytes .../Models/Fournisseur/Fournisseur.class | Bin 0 -> 3011 bytes .../Fournisseur/FournisseurContactDB.class | Bin 0 -> 5392 bytes .../Fournisseur/FournisseurContactList.class | Bin 0 -> 1779 bytes .../Models/Fournisseur/FournisseurDB.class | Bin 0 -> 10330 bytes .../Fournisseur/FournisseurGestionList.class | Bin 0 -> 2052 bytes target/classes/Models/Home/HomeDB.class | Bin 0 -> 5089 bytes .../classes/Models/Produit/ListeProduit.class | Bin 0 -> 3888 bytes target/classes/Models/Produit/Produit.class | Bin 0 -> 6112 bytes target/classes/Models/Produit/ProduitDB.class | Bin 0 -> 12162 bytes .../Reglement/CarteElectroniqueFrs.class | Bin 0 -> 1913 bytes .../classes/Models/Reglement/ChequeFrs.class | Bin 0 -> 2598 bytes .../classes/Models/Reglement/Reglement.class | Bin 0 -> 6299 bytes .../Models/Reglement/ReglementDB.class | Bin 0 -> 17689 bytes .../classes/Models/Reglement/TraiteFrs.class | Bin 0 -> 1735 bytes target/classes/Models/Stock/BonEntree.class | Bin 0 -> 2358 bytes .../Models/Stock/BonEntreeListeProd.class | Bin 0 -> 1657 bytes target/classes/Models/Stock/BonSortie.class | Bin 0 -> 2358 bytes .../classes/Models/Stock/BondeEntrerDB.class | Bin 0 -> 8755 bytes .../classes/Models/Stock/BondeSortieDB.class | Bin 0 -> 9356 bytes .../classes/Models/Stock/ListeMouvement.class | Bin 0 -> 1310 bytes target/classes/Models/Stock/StockDB.class | Bin 0 -> 9139 bytes target/classes/Models/Stock/StockDetail.class | Bin 0 -> 3505 bytes .../classes/Models/Stock/StockDetailDB.class | Bin 0 -> 3315 bytes .../Models/TraiteClt/DatePickerCell$1.class | Bin 0 -> 971 bytes .../Models/TraiteClt/DatePickerCell$2.class | Bin 0 -> 2071 bytes .../Models/TraiteClt/DatePickerCell.class | Bin 0 -> 5249 bytes .../classes/Models/TraiteClt/TraiteClt.class | Bin 0 -> 2383 bytes .../Models/TraiteClt/TraiteCltDB.class | Bin 0 -> 18418 bytes .../Models/TraiteClt/TraiteCltGestionDB.class | Bin 0 -> 9081 bytes .../TraiteClt/TraiteCltGestionListe.class | Bin 0 -> 2604 bytes .../TraiteClt/TraiteCltPaiementListe.class | Bin 0 -> 1820 bytes .../classes/Models/TraiteClt/TraiteList.class | Bin 0 -> 1942 bytes .../Models/User/Authentification.class | Bin 0 -> 2350 bytes target/classes/Models/User/ListUserDB.class | Bin 0 -> 4408 bytes target/classes/Models/User/ListUsers.class | Bin 0 -> 1665 bytes target/classes/Models/User/Profile.class | Bin 0 -> 2830 bytes target/classes/Models/User/ProfileDB.class | Bin 0 -> 5810 bytes target/classes/Models/User/User.class | Bin 0 -> 919 bytes .../ListeVenteSansFacture.class | Bin 0 -> 1898 bytes .../VenteRapideClt/VenteSansFacture.class | Bin 0 -> 4316 bytes .../VenteRapideClt/VenteSansFactureDB.class | Bin 0 -> 13345 bytes target/classes/Models/connexion.class | Bin 0 -> 6708 bytes target/classes/Public/CSS/StylePrincipal.css | 590 +++++++++ .../Public/CSS/StyleSheetAccordion.css | 105 ++ .../Public/CSS/StyleSheetPanelHaut.css | 50 + target/classes/Public/CSS/StyleSheetPrint.css | 47 + .../classes/Public/CSS/StyleSheetProfile.css | 39 + .../classes/Public/Fonts/Raleway-Medium.ttf | Bin 0 -> 129308 bytes .../classes/Public/Fonts/Raleway-SemiBold.ttf | Bin 0 -> 130880 bytes target/classes/Public/icon/Client.png | Bin 0 -> 2003 bytes target/classes/Public/icon/IconUserBleu.png | Bin 0 -> 962 bytes target/classes/Public/icon/ImageMessage.png | Bin 0 -> 1423 bytes .../classes/Public/icon/ImageNotification.png | Bin 0 -> 446 bytes target/classes/Public/icon/Logo.png | Bin 0 -> 3212 bytes target/classes/Public/icon/NotifiMessa.png | Bin 0 -> 541 bytes target/classes/Public/icon/Shopping.png | Bin 0 -> 895 bytes target/classes/Public/icon/Stock.png | Bin 0 -> 1189 bytes target/classes/Public/icon/Usericon.png | Bin 0 -> 1248 bytes target/classes/Public/icon/achat.png | Bin 0 -> 1898 bytes target/classes/Public/icon/cheque.png | Bin 0 -> 507 bytes target/classes/Public/icon/client_ajouter.png | Bin 0 -> 835 bytes target/classes/Public/icon/client_detail.png | Bin 0 -> 1868 bytes target/classes/Public/icon/client_fidele.png | Bin 0 -> 903 bytes target/classes/Public/icon/client_retard.png | Bin 0 -> 819 bytes target/classes/Public/icon/dashboard.png | Bin 0 -> 1251 bytes target/classes/Public/icon/detailbutton.png | Bin 0 -> 501 bytes target/classes/Public/icon/dialog_error.png | Bin 0 -> 2989 bytes .../Public/icon/dialog_notification.png | Bin 0 -> 4118 bytes target/classes/Public/icon/dialoginform.png | Bin 0 -> 4722 bytes .../classes/Public/icon/entropot_sortie72.png | Bin 0 -> 5618 bytes target/classes/Public/icon/glyphicon-lock.png | Bin 0 -> 949 bytes target/classes/Public/icon/glyphicon-user.png | Bin 0 -> 1205 bytes target/classes/Public/icon/icon-excel.png | Bin 0 -> 2010 bytes target/classes/Public/icon/icon-pdf.png | Bin 0 -> 2238 bytes target/classes/Public/icon/icon-print.png | Bin 0 -> 1492 bytes target/classes/Public/icon/icon-relogin.png | Bin 0 -> 1004 bytes target/classes/Public/icon/icon-success.png | Bin 0 -> 2143 bytes .../classes/Public/icon/iconNotification.png | Bin 0 -> 1656 bytes target/classes/Public/icon/iconadd.png | Bin 0 -> 651 bytes target/classes/Public/icon/iconaffecter.png | Bin 0 -> 826 bytes target/classes/Public/icon/iconalert.png | Bin 0 -> 6477 bytes target/classes/Public/icon/icondelete.png | Bin 0 -> 359 bytes target/classes/Public/icon/iconedit.png | Bin 0 -> 437 bytes target/classes/Public/icon/iconsave.png | Bin 0 -> 869 bytes target/classes/Public/icon/logo1.png | Bin 0 -> 2136 bytes target/classes/Public/icon/outil.png | Bin 0 -> 592 bytes target/classes/Public/icon/product.png | Bin 0 -> 924 bytes target/classes/Public/icon/profiluser.jpg | Bin 0 -> 3418 bytes target/classes/Public/icon/search.png | Bin 0 -> 645 bytes target/classes/Public/icon/successfully.png | Bin 0 -> 4436 bytes target/classes/Public/icon/uses.png | Bin 0 -> 823 bytes target/classes/Public/icon/vente.png | Bin 0 -> 952 bytes target/classes/Public/icon/vente_2.png | Bin 0 -> 919 bytes target/classes/Views/Authentification.fxml | 81 ++ .../BonLivraisonCltAjouter.fxml | 313 +++++ .../BonLivraisonCltAjouterEtape2.fxml | 413 ++++++ .../BonLivraisonCltAjouterEtape3.fxml | 181 +++ .../BonLivraisonCltDetail.fxml | 302 +++++ .../BonLivraisonCltGestion.fxml | 250 ++++ .../BonLivraisonClt/BonLivraisonCltPrint.fxml | 300 +++++ .../BonReceptionAjouterFrs.fxml | 214 ++++ .../BonReceptionDetailFrs.fxml | 342 +++++ .../BonReceptionGestionFrs.fxml | 246 ++++ target/classes/Views/Caisse/CaisseEntre.fxml | 183 +++ .../Views/Caisse/CaisseEntrePrint.fxml | 116 ++ target/classes/Views/Caisse/CaisseSortie.fxml | 164 +++ .../Views/Caisse/CaisseSortiePrint.fxml | 116 ++ target/classes/Views/Caisse/FraisAjouter.fxml | 255 ++++ target/classes/Views/Caisse/FraisDetail.fxml | 210 ++++ target/classes/Views/Caisse/FraisGestion.fxml | 253 ++++ .../Views/Categorie/AjouterCategorie.fxml | 82 ++ .../Views/ChequeClt/ChequeCltDetail.fxml | 298 +++++ .../Views/ChequeClt/ChequeCltGestion.fxml | 258 ++++ .../Views/ChequeClt/ChequeCltProvision.fxml | 242 ++++ .../ChequeClt/ChequeCltProvisionPrint.fxml | 60 + .../Views/ChequeClt/ChequeCltVercer.fxml | 115 ++ .../classes/Views/Client/AjouterClient.fxml | 56 + .../Views/Client/AjouterClientEntreprise.fxml | 273 ++++ .../Views/Client/AjouterClientPersonne.fxml | 242 ++++ target/classes/Views/Client/DetailClient.fxml | 725 +++++++++++ .../Views/Client/GestionClientEntreprise.fxml | 260 ++++ .../Views/Client/GestionClientPersonne.fxml | 259 ++++ target/classes/Views/Client/MenuClient.fxml | 144 +++ .../Client/RechercherClientEntreprise.fxml | 254 ++++ .../Client/RechercherClientPersonne.fxml | 254 ++++ .../Views/CommandeClt/CommandeCltDetail.fxml | 322 +++++ .../CommandeCltDialogConfirmation.fxml | 287 +++++ .../Views/CommandeClt/CommandeCltGestion.fxml | 249 ++++ .../Views/CommandeClt/CommandeCltPasser.fxml | 344 +++++ target/classes/Views/Devis/DevisAjouter.fxml | 338 +++++ .../classes/Views/Devis/DevisCltGestion.fxml | 259 ++++ target/classes/Views/Devis/DevisCltPrint.fxml | 180 +++ target/classes/Views/Devis/DevisDetail.fxml | 322 +++++ .../Views/Devis/DevisDialogConfirmation.fxml | 287 +++++ target/classes/Views/Devis/DevisImporter.fxml | 248 ++++ target/classes/Views/Dialog/DialogAlert.fxml | 59 + .../Views/Dialog/DialogNotification.fxml | 59 + .../classes/Views/Dialog/DialogSuccess.fxml | 61 + .../Views/FactureClt/FactureCltAjouter.fxml | 337 +++++ .../FactureCltAjouterDetailSelect.fxml | 352 ++++++ .../FactureCltAjouterDetailTraite.fxml | 363 ++++++ .../FactureCltAjouterPaiementComptent.fxml | 331 +++++ .../FactureCltAjouterPaiementFacilite.fxml | 327 +++++ .../Views/FactureClt/FactureCltDetail.fxml | 396 ++++++ .../FactureCltDialogConfirmation.fxml | 277 ++++ .../Views/FactureClt/FactureCltGestion.fxml | 263 ++++ .../Views/FactureClt/FactureCltPrint.fxml | 305 +++++ .../Views/FactureFrs/FactureFrsAjouter.fxml | 258 ++++ .../FactureFrsBonReceptionAjouter.fxml | 224 ++++ .../Views/FactureFrs/FactureFrsDetail.fxml | 407 ++++++ .../Views/FactureFrs/FactureFrsGestion.fxml | 224 ++++ .../Views/Fournisseur/FournisseurGerer.fxml | 316 +++++ .../Views/Fournisseur/FournisseurGestion.fxml | 247 ++++ target/classes/Views/Home/Aide.fxml | 163 +++ target/classes/Views/Home/Contact.fxml | 77 ++ target/classes/Views/Home/Dashboard.fxml | 197 +++ target/classes/Views/Home/Logiciel.fxml | 264 ++++ target/classes/Views/Home/Mentions.fxml | 116 ++ target/classes/Views/Principal.fxml | 215 ++++ .../classes/Views/Produit/AjouterProduit.fxml | 494 ++++++++ .../classes/Views/Produit/GestionProduit.fxml | 221 ++++ .../Views/Produit/ModifierProduit.fxml | 409 ++++++ .../Views/Produit/RechercherProduit.fxml | 252 ++++ .../Views/Reglement/ReglementAjouter1.fxml | 271 ++++ .../Views/Reglement/ReglementAjouter2.fxml | 475 +++++++ .../Views/Reglement/ReglementAjouter3.fxml | 500 ++++++++ .../ReglementDialogConfirmation.fxml | 416 ++++++ .../Reglement/ReglementDialogDetail.fxml | 355 ++++++ .../Views/Reglement/ReglementGestion.fxml | 250 ++++ .../Views/Reglement/TraiteFrsPrint.fxml | 66 + .../classes/Views/Stock/BondeEnterPrint.fxml | 143 +++ target/classes/Views/Stock/BondeEntrer.fxml | 229 ++++ .../Views/Stock/BondeEntrerDetail.fxml | 194 +++ target/classes/Views/Stock/BondeSortie.fxml | 240 ++++ .../Views/Stock/BondeSortieDetail.fxml | 194 +++ .../Views/Stock/EtatStockCategorie.fxml | 91 ++ .../classes/Views/Stock/MouvementStock.fxml | 220 ++++ .../Views/Stock/PrintAllCategorie.fxml | 86 ++ .../classes/Views/Stock/PrintAllProduit.fxml | 87 ++ .../Views/Stock/PrintMouvementProduit.fxml | 117 ++ .../classes/Views/Stock/PrintSelProduit.fxml | 101 ++ .../Views/TraiteClt/TraiteCltDetail.fxml | 432 +++++++ .../Views/TraiteClt/TraiteCltGestion.fxml | 233 ++++ .../Views/TraiteClt/TraiteCltPrint.fxml | 69 + .../Views/TraiteClt/TraiteCltPrintRetard.fxml | 60 + .../Views/TraiteClt/TraiteCltRetard.fxml | 250 ++++ target/classes/Views/User/AddUser.fxml | 230 ++++ .../Views/User/GestionUtilisateur.fxml | 92 ++ target/classes/Views/User/Profile.fxml | 419 +++++++ .../VenteRapideClt/Step1CommandeClt.fxml | 475 +++++++ .../VenteRapideClt/Step2BonLivraisonClt.fxml | 288 +++++ .../Views/VenteRapideClt/Step3FactureClt.fxml | 538 ++++++++ .../VenteRapideClt/Step4SaveVenteClt.fxml | 334 +++++ .../Views/VenteRapideClt/VenteRapideClt.fxml | 81 ++ .../VenteRapideClt/VenteSansFactureClt.fxml | 443 +++++++ .../VenteSansFactureCltDetail.fxml | 259 ++++ target/classes/module-info.class | Bin 0 -> 2169 bytes target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 1082 ++++++++++++++++ .../compile/default-compile/inputFiles.lst | 212 ++++ .../default-testCompile/inputFiles.lst | 0 1619 files changed, 106327 insertions(+) create mode 100644 README.md create mode 100644 conf/log4j.xml create mode 100644 conf/logo.xml create mode 100644 conf/logo1.png create mode 100644 conf/logo2.png create mode 100644 conf/logs/myStruts1App.log create mode 100644 conf/parametre.xml create mode 100644 conf/print.xml create mode 100644 jshell.history create mode 100644 nb-configuration.xml create mode 100644 nbactions.xml create mode 100644 pom.xml create mode 100644 src/logs/myStruts1App.log create mode 100644 src/main/java/Controllers/App.java create mode 100644 src/main/java/Controllers/AuthentificationController.java create mode 100644 src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController.java create mode 100644 src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape2Controller.java create mode 100644 src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape3Controller.java create mode 100644 src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltDetailController.java create mode 100644 src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltGestionController.java create mode 100644 src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltPrintController.java create mode 100644 src/main/java/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController.java create mode 100644 src/main/java/Controllers/BonReceptionFrs/BonReceptionDetailFrsController.java create mode 100644 src/main/java/Controllers/BonReceptionFrs/BonReceptionGestionFrsController.java create mode 100644 src/main/java/Controllers/Caisse/CaisseEntreController.java create mode 100644 src/main/java/Controllers/Caisse/CaisseEntrePrintController.java create mode 100644 src/main/java/Controllers/Caisse/CaisseSortieController.java create mode 100644 src/main/java/Controllers/Caisse/CaisseSortiePrintController.java create mode 100644 src/main/java/Controllers/Caisse/FraisAjouterController.java create mode 100644 src/main/java/Controllers/Caisse/FraisDetailController.java create mode 100644 src/main/java/Controllers/Caisse/FraisGestionController.java create mode 100644 src/main/java/Controllers/Categorie/AjouterCategorieController.java create mode 100644 src/main/java/Controllers/ChequeClt/ChequeCltDetailController.java create mode 100644 src/main/java/Controllers/ChequeClt/ChequeCltGestionController.java create mode 100644 src/main/java/Controllers/ChequeClt/ChequeCltProvisionController.java create mode 100644 src/main/java/Controllers/ChequeClt/ChequeCltProvisionPrintController.java create mode 100644 src/main/java/Controllers/ChequeClt/ChequeCltVercerController.java create mode 100644 src/main/java/Controllers/Client/AjouterClientController.java create mode 100644 src/main/java/Controllers/Client/AjouterClientEntrepriseController.java create mode 100644 src/main/java/Controllers/Client/AjouterClientPersonneController.java create mode 100644 src/main/java/Controllers/Client/DetailClientController.java create mode 100644 src/main/java/Controllers/Client/GestionClientEntrepriseController.java create mode 100644 src/main/java/Controllers/Client/GestionClientPersonneController.java create mode 100644 src/main/java/Controllers/Client/ListeClient.java create mode 100644 src/main/java/Controllers/Client/ListeClientEntreprise.java create mode 100644 src/main/java/Controllers/Client/MenuClientController.java create mode 100644 src/main/java/Controllers/Client/RechercherClientEntrepriseController.java create mode 100644 src/main/java/Controllers/Client/RechercherClientPersonneController.java create mode 100644 src/main/java/Controllers/CommandeClt/CommandeCltDetail.java create mode 100644 src/main/java/Controllers/CommandeClt/CommandeCltDialogConfirmationController.java create mode 100644 src/main/java/Controllers/CommandeClt/CommandeCltGestionController.java create mode 100644 src/main/java/Controllers/CommandeClt/CommandeCltPasserController.java create mode 100644 src/main/java/Controllers/DevisClt/DevisAjouterController.java create mode 100644 src/main/java/Controllers/DevisClt/DevisCltGestionController.java create mode 100644 src/main/java/Controllers/DevisClt/DevisCltPrintController.java create mode 100644 src/main/java/Controllers/DevisClt/DevisDetailController.java create mode 100644 src/main/java/Controllers/DevisClt/DevisDialogConfirmationController.java create mode 100644 src/main/java/Controllers/DevisClt/DevisImporterController.java create mode 100644 src/main/java/Controllers/DevisClt/ListProduitDevis.java create mode 100644 src/main/java/Controllers/Dialog/Dialog.java create mode 100644 src/main/java/Controllers/Dialog/DialogSuccessController.java create mode 100644 src/main/java/Controllers/Dialog/MessageControle.java create mode 100644 src/main/java/Controllers/Dialog/Notification.java create mode 100644 src/main/java/Controllers/Dialog/ShowDialog.java create mode 100644 src/main/java/Controllers/FactureClt/FactureCltAjouterController.java create mode 100644 src/main/java/Controllers/FactureClt/FactureCltAjouterDetailSelectController.java create mode 100644 src/main/java/Controllers/FactureClt/FactureCltAjouterDetailTraiteController.java create mode 100644 src/main/java/Controllers/FactureClt/FactureCltAjouterPaiementComptentController.java create mode 100644 src/main/java/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController.java create mode 100644 src/main/java/Controllers/FactureClt/FactureCltDetailController.java create mode 100644 src/main/java/Controllers/FactureClt/FactureCltDialogConfirmationController.java create mode 100644 src/main/java/Controllers/FactureClt/FactureCltGestionController.java create mode 100644 src/main/java/Controllers/FactureClt/FactureCltPrintController.java create mode 100644 src/main/java/Controllers/FactureFrs/FactureFrsAjouterController.java create mode 100644 src/main/java/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController.java create mode 100644 src/main/java/Controllers/FactureFrs/FactureFrsDetailController.java create mode 100644 src/main/java/Controllers/FactureFrs/FactureFrsGestionController.java create mode 100644 src/main/java/Controllers/Fournisseur/FournisseurGererController.java create mode 100644 src/main/java/Controllers/Fournisseur/FournisseurGestionController.java create mode 100644 src/main/java/Controllers/Home/AideController.java create mode 100644 src/main/java/Controllers/Home/ContactController.java create mode 100644 src/main/java/Controllers/Home/DashboardController.java create mode 100644 src/main/java/Controllers/Home/LogicielController.java create mode 100644 src/main/java/Controllers/Home/MentionsController.java create mode 100644 src/main/java/Controllers/Main.java create mode 100644 src/main/java/Controllers/PrincipalController.java create mode 100644 src/main/java/Controllers/Produit/AjouterProduitController.java create mode 100644 src/main/java/Controllers/Produit/GestionProduitController.java create mode 100644 src/main/java/Controllers/Produit/ModifierProduitController.java create mode 100644 src/main/java/Controllers/Produit/RechercherProduitController.java create mode 100644 src/main/java/Controllers/Reglement/GestionReglementController.java create mode 100644 src/main/java/Controllers/Reglement/ReglementAjouter1Controller.java create mode 100644 src/main/java/Controllers/Reglement/ReglementAjouter2Controller.java create mode 100644 src/main/java/Controllers/Reglement/ReglementAjouter3Controller.java create mode 100644 src/main/java/Controllers/Reglement/ReglementDialogConfirmationController.java create mode 100644 src/main/java/Controllers/Reglement/ReglementDialogDetailController.java create mode 100644 src/main/java/Controllers/Reglement/TraiteFrsPrintController.java create mode 100644 src/main/java/Controllers/Stock/BondeEnterPrintController.java create mode 100644 src/main/java/Controllers/Stock/BondeEntrerController.java create mode 100644 src/main/java/Controllers/Stock/BondeEntrerDetailController.java create mode 100644 src/main/java/Controllers/Stock/BondeEntrerDialogConfirmation.java create mode 100644 src/main/java/Controllers/Stock/BondeSortieController.java create mode 100644 src/main/java/Controllers/Stock/BondeSortieDetailController.java create mode 100644 src/main/java/Controllers/Stock/BondeSortieDialogConfirmation.java create mode 100644 src/main/java/Controllers/Stock/EtatStockCategorieController.java create mode 100644 src/main/java/Controllers/Stock/ListProduitBon.java create mode 100644 src/main/java/Controllers/Stock/ListProduitRech.java create mode 100644 src/main/java/Controllers/Stock/MouvementStockController.java create mode 100644 src/main/java/Controllers/Stock/PrintAllCategorieController.java create mode 100644 src/main/java/Controllers/Stock/PrintAllProduitController.java create mode 100644 src/main/java/Controllers/Stock/PrintMouvementProduitController.java create mode 100644 src/main/java/Controllers/Stock/PrintSelProduitController.java create mode 100644 src/main/java/Controllers/TraiteClt/TraiteCltDetailController.java create mode 100644 src/main/java/Controllers/TraiteClt/TraiteCltGestionController.java create mode 100644 src/main/java/Controllers/TraiteClt/TraiteCltPrintController.java create mode 100644 src/main/java/Controllers/TraiteClt/TraiteCltPrintRetardController.java create mode 100644 src/main/java/Controllers/TraiteClt/TraiteCltRetardController.java create mode 100644 src/main/java/Controllers/Traitement/Adaptateur.java create mode 100644 src/main/java/Controllers/Traitement/MyWindow.java create mode 100644 src/main/java/Controllers/Traitement/ParametreSystem.java create mode 100644 src/main/java/Controllers/Traitement/TotalHeightTableColumn.java create mode 100644 src/main/java/Controllers/Traitement/contro.java create mode 100644 src/main/java/Controllers/User/AddUserController.java create mode 100644 src/main/java/Controllers/User/GestionUtilisateurController.java create mode 100644 src/main/java/Controllers/User/ProfileController.java create mode 100644 src/main/java/Controllers/VenteRapideClt/Step1CommandeCltController.java create mode 100644 src/main/java/Controllers/VenteRapideClt/Step2BonLivraisonCltController.java create mode 100644 src/main/java/Controllers/VenteRapideClt/Step3FactureCltController.java create mode 100644 src/main/java/Controllers/VenteRapideClt/Step4SaveVenteCltController.java create mode 100644 src/main/java/Controllers/VenteRapideClt/VenteRapideCltController.java create mode 100644 src/main/java/Controllers/VenteRapideClt/VenteSansFactureCltController.java create mode 100644 src/main/java/Controllers/VenteRapideClt/VenteSansFactureCltDetailController.java create mode 100644 src/main/java/Models/BonLivraisonClt/BonLivraisonClt.java create mode 100644 src/main/java/Models/BonLivraisonClt/BonLivraisonCltDB.java create mode 100644 src/main/java/Models/BonLivraisonClt/BonLivraisonCltGestionList.java create mode 100644 src/main/java/Models/BonLivraisonClt/BonLivraisonCltProduitList.java create mode 100644 src/main/java/Models/BonReceptionFrs/BonReceptionDB.java create mode 100644 src/main/java/Models/BonReceptionFrs/BonReceptionFrs.java create mode 100644 src/main/java/Models/BonReceptionFrs/BonReceptionGestionDB.java create mode 100644 src/main/java/Models/BonReceptionFrs/BonReceptionGestionList.java create mode 100644 src/main/java/Models/BonReceptionFrs/BonReceptionList.java create mode 100644 src/main/java/Models/BonReceptionFrs/BonReceptionProduitList.java create mode 100644 src/main/java/Models/Caisse/CaisseClt.java create mode 100644 src/main/java/Models/Caisse/CaisseDB.java create mode 100644 src/main/java/Models/Caisse/CaisseEntreListe.java create mode 100644 src/main/java/Models/Caisse/CaisseListe.java create mode 100644 src/main/java/Models/Caisse/CaisseSortieListe.java create mode 100644 src/main/java/Models/Caisse/CarteBancaireClt.java create mode 100644 src/main/java/Models/Caisse/CarteBancaireCltDB.java create mode 100644 src/main/java/Models/Caisse/Frais.java create mode 100644 src/main/java/Models/Caisse/FraisDB.java create mode 100644 src/main/java/Models/Categorie/Categorie.java create mode 100644 src/main/java/Models/Categorie/CategorieDB.java create mode 100644 src/main/java/Models/Categorie/CategorieListe.java create mode 100644 src/main/java/Models/ChequeClt/ChequeClt.java create mode 100644 src/main/java/Models/ChequeClt/ChequeCltDB.java create mode 100644 src/main/java/Models/ChequeClt/ChequeCltGestionListe.java create mode 100644 src/main/java/Models/ChequeClt/ChequeCltHistoriqueListe.java create mode 100644 src/main/java/Models/ChequeClt/ChequeList.java create mode 100644 src/main/java/Models/ChequeClt/DatePickerCellCheque.java create mode 100644 src/main/java/Models/Client/Client.java create mode 100644 src/main/java/Models/Client/ClientDB.java create mode 100644 src/main/java/Models/Client/ClientEntreprise.java create mode 100644 src/main/java/Models/Client/ClientEntrepriseContact.java create mode 100644 src/main/java/Models/Client/ClientEntrepriseContactDB.java create mode 100644 src/main/java/Models/Client/ClientEntrepriseDB.java create mode 100644 src/main/java/Models/Client/ClientPassager.java create mode 100644 src/main/java/Models/Client/ClientPassagerDB.java create mode 100644 src/main/java/Models/CommandeClt/CommandeClt.java create mode 100644 src/main/java/Models/CommandeClt/CommandeCltDB.java create mode 100644 src/main/java/Models/CommandeClt/CommandeCltListe.java create mode 100644 src/main/java/Models/CommandeFrs/CommandeFrs.java create mode 100644 src/main/java/Models/DevisClt/Devis.java create mode 100644 src/main/java/Models/DevisClt/DevisCltListe.java create mode 100644 src/main/java/Models/DevisClt/DevisDB.java create mode 100644 src/main/java/Models/FactureClt/FactureClt.java create mode 100644 src/main/java/Models/FactureClt/FactureCltChequeListe.java create mode 100644 src/main/java/Models/FactureClt/FactureCltDB.java create mode 100644 src/main/java/Models/FactureClt/FactureCltGestion.java create mode 100644 src/main/java/Models/FactureClt/FactureCltGestionList.java create mode 100644 src/main/java/Models/FactureClt/FactureCltTraiteListe.java create mode 100644 src/main/java/Models/FactureFrs/FactureFrs.java create mode 100644 src/main/java/Models/FactureFrs/FactureFrsDB.java create mode 100644 src/main/java/Models/FactureFrs/FactureFrsProduitList.java create mode 100644 src/main/java/Models/Fournisseur/Fournisseur.java create mode 100644 src/main/java/Models/Fournisseur/FournisseurContactDB.java create mode 100644 src/main/java/Models/Fournisseur/FournisseurContactList.java create mode 100644 src/main/java/Models/Fournisseur/FournisseurDB.java create mode 100644 src/main/java/Models/Fournisseur/FournisseurGestionList.java create mode 100644 src/main/java/Models/Home/HomeDB.java create mode 100644 src/main/java/Models/Produit/ListeProduit.java create mode 100644 src/main/java/Models/Produit/Produit.java create mode 100644 src/main/java/Models/Produit/ProduitDB.java create mode 100644 src/main/java/Models/Reglement/CarteElectroniqueFrs.java create mode 100644 src/main/java/Models/Reglement/ChequeFrs.java create mode 100644 src/main/java/Models/Reglement/Reglement.java create mode 100644 src/main/java/Models/Reglement/ReglementDB.java create mode 100644 src/main/java/Models/Reglement/TraiteFrs.java create mode 100644 src/main/java/Models/Stock/BonEntree.java create mode 100644 src/main/java/Models/Stock/BonEntreeListeProd.java create mode 100644 src/main/java/Models/Stock/BonSortie.java create mode 100644 src/main/java/Models/Stock/BondeEntrerDB.java create mode 100644 src/main/java/Models/Stock/BondeSortieDB.java create mode 100644 src/main/java/Models/Stock/ListeMouvement.java create mode 100644 src/main/java/Models/Stock/StockDB.java create mode 100644 src/main/java/Models/Stock/StockDetail.java create mode 100644 src/main/java/Models/Stock/StockDetailDB.java create mode 100644 src/main/java/Models/TraiteClt/DatePickerCell.java create mode 100644 src/main/java/Models/TraiteClt/TraiteClt.java create mode 100644 src/main/java/Models/TraiteClt/TraiteCltDB.java create mode 100644 src/main/java/Models/TraiteClt/TraiteCltGestionDB.java create mode 100644 src/main/java/Models/TraiteClt/TraiteCltGestionListe.java create mode 100644 src/main/java/Models/TraiteClt/TraiteCltPaiementListe.java create mode 100644 src/main/java/Models/TraiteClt/TraiteList.java create mode 100644 src/main/java/Models/User/Authentification.java create mode 100644 src/main/java/Models/User/ListUserDB.java create mode 100644 src/main/java/Models/User/ListUsers.java create mode 100644 src/main/java/Models/User/Profile.java create mode 100644 src/main/java/Models/User/ProfileDB.java create mode 100644 src/main/java/Models/User/User.java create mode 100644 src/main/java/Models/VenteRapideClt/ListeVenteSansFacture.java create mode 100644 src/main/java/Models/VenteRapideClt/VenteSansFacture.java create mode 100644 src/main/java/Models/VenteRapideClt/VenteSansFactureDB.java create mode 100644 src/main/java/Models/connexion.java create mode 100644 src/main/java/module-info.java create mode 100644 src/main/resources/Public/CSS/StylePrincipal.css create mode 100644 src/main/resources/Public/CSS/StyleSheetAccordion.css create mode 100644 src/main/resources/Public/CSS/StyleSheetPanelHaut.css create mode 100644 src/main/resources/Public/CSS/StyleSheetPrint.css create mode 100644 src/main/resources/Public/CSS/StyleSheetProfile.css create mode 100644 src/main/resources/Public/Fonts/Raleway-Medium.ttf create mode 100644 src/main/resources/Public/Fonts/Raleway-SemiBold.ttf create mode 100644 src/main/resources/Public/icon/Client.png create mode 100644 src/main/resources/Public/icon/IconUserBleu.png create mode 100644 src/main/resources/Public/icon/ImageMessage.png create mode 100644 src/main/resources/Public/icon/ImageNotification.png create mode 100644 src/main/resources/Public/icon/Logo.png create mode 100644 src/main/resources/Public/icon/NotifiMessa.png create mode 100644 src/main/resources/Public/icon/Shopping.png create mode 100644 src/main/resources/Public/icon/Stock.png create mode 100644 src/main/resources/Public/icon/Usericon.png create mode 100644 src/main/resources/Public/icon/achat.png create mode 100644 src/main/resources/Public/icon/cheque.png create mode 100644 src/main/resources/Public/icon/client_ajouter.png create mode 100644 src/main/resources/Public/icon/client_detail.png create mode 100644 src/main/resources/Public/icon/client_fidele.png create mode 100644 src/main/resources/Public/icon/client_retard.png create mode 100644 src/main/resources/Public/icon/dashboard.png create mode 100644 src/main/resources/Public/icon/detailbutton.png create mode 100644 src/main/resources/Public/icon/dialog_error.png create mode 100644 src/main/resources/Public/icon/dialog_notification.png create mode 100644 src/main/resources/Public/icon/dialoginform.png create mode 100644 src/main/resources/Public/icon/entropot_sortie72.png create mode 100644 src/main/resources/Public/icon/glyphicon-lock.png create mode 100644 src/main/resources/Public/icon/glyphicon-user.png create mode 100644 src/main/resources/Public/icon/icon-excel.png create mode 100644 src/main/resources/Public/icon/icon-pdf.png create mode 100644 src/main/resources/Public/icon/icon-print.png create mode 100644 src/main/resources/Public/icon/icon-relogin.png create mode 100644 src/main/resources/Public/icon/icon-success.png create mode 100644 src/main/resources/Public/icon/iconNotification.png create mode 100644 src/main/resources/Public/icon/iconadd.png create mode 100644 src/main/resources/Public/icon/iconaffecter.png create mode 100644 src/main/resources/Public/icon/iconalert.png create mode 100644 src/main/resources/Public/icon/icondelete.png create mode 100644 src/main/resources/Public/icon/iconedit.png create mode 100644 src/main/resources/Public/icon/iconsave.png create mode 100644 src/main/resources/Public/icon/logo1.png create mode 100644 src/main/resources/Public/icon/outil.png create mode 100644 src/main/resources/Public/icon/product.png create mode 100644 src/main/resources/Public/icon/profiluser.jpg create mode 100644 src/main/resources/Public/icon/search.png create mode 100644 src/main/resources/Public/icon/successfully.png create mode 100644 src/main/resources/Public/icon/uses.png create mode 100644 src/main/resources/Public/icon/vente.png create mode 100644 src/main/resources/Public/icon/vente_2.png create mode 100644 src/main/resources/Views/Authentification.fxml create mode 100644 src/main/resources/Views/BonLivraisonClt/BonLivraisonCltAjouter.fxml create mode 100644 src/main/resources/Views/BonLivraisonClt/BonLivraisonCltAjouterEtape2.fxml create mode 100644 src/main/resources/Views/BonLivraisonClt/BonLivraisonCltAjouterEtape3.fxml create mode 100644 src/main/resources/Views/BonLivraisonClt/BonLivraisonCltDetail.fxml create mode 100644 src/main/resources/Views/BonLivraisonClt/BonLivraisonCltGestion.fxml create mode 100644 src/main/resources/Views/BonLivraisonClt/BonLivraisonCltPrint.fxml create mode 100644 src/main/resources/Views/BonReceptionFrs/BonReceptionAjouterFrs.fxml create mode 100644 src/main/resources/Views/BonReceptionFrs/BonReceptionDetailFrs.fxml create mode 100644 src/main/resources/Views/BonReceptionFrs/BonReceptionGestionFrs.fxml create mode 100644 src/main/resources/Views/Caisse/CaisseEntre.fxml create mode 100644 src/main/resources/Views/Caisse/CaisseEntrePrint.fxml create mode 100644 src/main/resources/Views/Caisse/CaisseSortie.fxml create mode 100644 src/main/resources/Views/Caisse/CaisseSortiePrint.fxml create mode 100644 src/main/resources/Views/Caisse/FraisAjouter.fxml create mode 100644 src/main/resources/Views/Caisse/FraisDetail.fxml create mode 100644 src/main/resources/Views/Caisse/FraisGestion.fxml create mode 100644 src/main/resources/Views/Categorie/AjouterCategorie.fxml create mode 100644 src/main/resources/Views/ChequeClt/ChequeCltDetail.fxml create mode 100644 src/main/resources/Views/ChequeClt/ChequeCltGestion.fxml create mode 100644 src/main/resources/Views/ChequeClt/ChequeCltProvision.fxml create mode 100644 src/main/resources/Views/ChequeClt/ChequeCltProvisionPrint.fxml create mode 100644 src/main/resources/Views/ChequeClt/ChequeCltVercer.fxml create mode 100644 src/main/resources/Views/Client/AjouterClient.fxml create mode 100644 src/main/resources/Views/Client/AjouterClientEntreprise.fxml create mode 100644 src/main/resources/Views/Client/AjouterClientPersonne.fxml create mode 100644 src/main/resources/Views/Client/DetailClient.fxml create mode 100644 src/main/resources/Views/Client/GestionClientEntreprise.fxml create mode 100644 src/main/resources/Views/Client/GestionClientPersonne.fxml create mode 100644 src/main/resources/Views/Client/MenuClient.fxml create mode 100644 src/main/resources/Views/Client/RechercherClientEntreprise.fxml create mode 100644 src/main/resources/Views/Client/RechercherClientPersonne.fxml create mode 100644 src/main/resources/Views/CommandeClt/CommandeCltDetail.fxml create mode 100644 src/main/resources/Views/CommandeClt/CommandeCltDialogConfirmation.fxml create mode 100644 src/main/resources/Views/CommandeClt/CommandeCltGestion.fxml create mode 100644 src/main/resources/Views/CommandeClt/CommandeCltPasser.fxml create mode 100644 src/main/resources/Views/Devis/DevisAjouter.fxml create mode 100644 src/main/resources/Views/Devis/DevisCltGestion.fxml create mode 100644 src/main/resources/Views/Devis/DevisCltPrint.fxml create mode 100644 src/main/resources/Views/Devis/DevisDetail.fxml create mode 100644 src/main/resources/Views/Devis/DevisDialogConfirmation.fxml create mode 100644 src/main/resources/Views/Devis/DevisImporter.fxml create mode 100644 src/main/resources/Views/Dialog/DialogAlert.fxml create mode 100644 src/main/resources/Views/Dialog/DialogNotification.fxml create mode 100644 src/main/resources/Views/Dialog/DialogSuccess.fxml create mode 100644 src/main/resources/Views/FactureClt/FactureCltAjouter.fxml create mode 100644 src/main/resources/Views/FactureClt/FactureCltAjouterDetailSelect.fxml create mode 100644 src/main/resources/Views/FactureClt/FactureCltAjouterDetailTraite.fxml create mode 100644 src/main/resources/Views/FactureClt/FactureCltAjouterPaiementComptent.fxml create mode 100644 src/main/resources/Views/FactureClt/FactureCltAjouterPaiementFacilite.fxml create mode 100644 src/main/resources/Views/FactureClt/FactureCltDetail.fxml create mode 100644 src/main/resources/Views/FactureClt/FactureCltDialogConfirmation.fxml create mode 100644 src/main/resources/Views/FactureClt/FactureCltGestion.fxml create mode 100644 src/main/resources/Views/FactureClt/FactureCltPrint.fxml create mode 100644 src/main/resources/Views/FactureFrs/FactureFrsAjouter.fxml create mode 100644 src/main/resources/Views/FactureFrs/FactureFrsBonReceptionAjouter.fxml create mode 100644 src/main/resources/Views/FactureFrs/FactureFrsDetail.fxml create mode 100644 src/main/resources/Views/FactureFrs/FactureFrsGestion.fxml create mode 100644 src/main/resources/Views/Fournisseur/FournisseurGerer.fxml create mode 100644 src/main/resources/Views/Fournisseur/FournisseurGestion.fxml create mode 100644 src/main/resources/Views/Home/Aide.fxml create mode 100644 src/main/resources/Views/Home/Contact.fxml create mode 100644 src/main/resources/Views/Home/Dashboard.fxml create mode 100644 src/main/resources/Views/Home/Logiciel.fxml create mode 100644 src/main/resources/Views/Home/Mentions.fxml create mode 100644 src/main/resources/Views/Principal.fxml create mode 100644 src/main/resources/Views/Produit/AjouterProduit.fxml create mode 100644 src/main/resources/Views/Produit/GestionProduit.fxml create mode 100644 src/main/resources/Views/Produit/ModifierProduit.fxml create mode 100644 src/main/resources/Views/Produit/RechercherProduit.fxml create mode 100644 src/main/resources/Views/Reglement/ReglementAjouter1.fxml create mode 100644 src/main/resources/Views/Reglement/ReglementAjouter2.fxml create mode 100644 src/main/resources/Views/Reglement/ReglementAjouter3.fxml create mode 100644 src/main/resources/Views/Reglement/ReglementDialogConfirmation.fxml create mode 100644 src/main/resources/Views/Reglement/ReglementDialogDetail.fxml create mode 100644 src/main/resources/Views/Reglement/ReglementGestion.fxml create mode 100644 src/main/resources/Views/Reglement/TraiteFrsPrint.fxml create mode 100644 src/main/resources/Views/Stock/BondeEnterPrint.fxml create mode 100644 src/main/resources/Views/Stock/BondeEntrer.fxml create mode 100644 src/main/resources/Views/Stock/BondeEntrerDetail.fxml create mode 100644 src/main/resources/Views/Stock/BondeSortie.fxml create mode 100644 src/main/resources/Views/Stock/BondeSortieDetail.fxml create mode 100644 src/main/resources/Views/Stock/EtatStockCategorie.fxml create mode 100644 src/main/resources/Views/Stock/MouvementStock.fxml create mode 100644 src/main/resources/Views/Stock/PrintAllCategorie.fxml create mode 100644 src/main/resources/Views/Stock/PrintAllProduit.fxml create mode 100644 src/main/resources/Views/Stock/PrintMouvementProduit.fxml create mode 100644 src/main/resources/Views/Stock/PrintSelProduit.fxml create mode 100644 src/main/resources/Views/TraiteClt/TraiteCltDetail.fxml create mode 100644 src/main/resources/Views/TraiteClt/TraiteCltGestion.fxml create mode 100644 src/main/resources/Views/TraiteClt/TraiteCltPrint.fxml create mode 100644 src/main/resources/Views/TraiteClt/TraiteCltPrintRetard.fxml create mode 100644 src/main/resources/Views/TraiteClt/TraiteCltRetard.fxml create mode 100644 src/main/resources/Views/User/AddUser.fxml create mode 100644 src/main/resources/Views/User/GestionUtilisateur.fxml create mode 100644 src/main/resources/Views/User/Profile.fxml create mode 100644 src/main/resources/Views/VenteRapideClt/Step1CommandeClt.fxml create mode 100644 src/main/resources/Views/VenteRapideClt/Step2BonLivraisonClt.fxml create mode 100644 src/main/resources/Views/VenteRapideClt/Step3FactureClt.fxml create mode 100644 src/main/resources/Views/VenteRapideClt/Step4SaveVenteClt.fxml create mode 100644 src/main/resources/Views/VenteRapideClt/VenteRapideClt.fxml create mode 100644 src/main/resources/Views/VenteRapideClt/VenteSansFactureClt.fxml create mode 100644 src/main/resources/Views/VenteRapideClt/VenteSansFactureCltDetail.fxml create mode 100644 target/classes/Controllers/App.class create mode 100644 target/classes/Controllers/AuthentificationController$1.class create mode 100644 target/classes/Controllers/AuthentificationController$2$1.class create mode 100644 target/classes/Controllers/AuthentificationController$2.class create mode 100644 target/classes/Controllers/AuthentificationController$3.class create mode 100644 target/classes/Controllers/AuthentificationController.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$10.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$11.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$12.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$13.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$14.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$2.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$3.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$4.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$5.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$6$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$6.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$7.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$8$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$8.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$9.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$ButtonCell$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController$ButtonCell.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape2Controller$1$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape2Controller$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape2Controller$2.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape2Controller.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape3Controller$1$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape3Controller$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape3Controller$2.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape3Controller.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltDetailController$1$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltDetailController$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltDetailController$2.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltDetailController$3$1$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltDetailController$3$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltDetailController$3.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltDetailController.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$10.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$11.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$12.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$2.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$3.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$4$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$4.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$5.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$6$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$6.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$7.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$8.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$9.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$ButtonCell$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController$ButtonCell.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltGestionController.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltPrintController$1$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltPrintController$1.class create mode 100644 target/classes/Controllers/BonLivraisonClt/BonLivraisonCltPrintController.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$2.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$3.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$4.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$5.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$6$1$1$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$6$1$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$6$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$6.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$7.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$8.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$9$1$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$9$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$9.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$ButtonCell$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController$ButtonCell.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionDetailFrsController$1$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionDetailFrsController$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionDetailFrsController$2.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionDetailFrsController.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$10.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$11$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$11.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$12.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$13.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$14.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$15.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$16.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$17.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$2.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$3.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$4.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$5.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$6$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$6.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$7.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$8.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$9$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$9.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$ButtonCell$1.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController$ButtonCell.class create mode 100644 target/classes/Controllers/BonReceptionFrs/BonReceptionGestionFrsController.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$1.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$10.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$11$1.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$11.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$12.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$13.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$2.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$3.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$4.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$5.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$6.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$7.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$8.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController$9.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntreController.class create mode 100644 target/classes/Controllers/Caisse/CaisseEntrePrintController.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$1.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$10.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$11.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$2.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$3.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$4.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$5.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$6.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$7.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$8.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$9$1.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController$9.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortieController.class create mode 100644 target/classes/Controllers/Caisse/CaisseSortiePrintController.class create mode 100644 target/classes/Controllers/Caisse/FraisAjouterController$1$1.class create mode 100644 target/classes/Controllers/Caisse/FraisAjouterController$1.class create mode 100644 target/classes/Controllers/Caisse/FraisAjouterController$2$1.class create mode 100644 target/classes/Controllers/Caisse/FraisAjouterController$2.class create mode 100644 target/classes/Controllers/Caisse/FraisAjouterController$3.class create mode 100644 target/classes/Controllers/Caisse/FraisAjouterController$4.class create mode 100644 target/classes/Controllers/Caisse/FraisAjouterController$5.class create mode 100644 target/classes/Controllers/Caisse/FraisAjouterController$6.class create mode 100644 target/classes/Controllers/Caisse/FraisAjouterController.class create mode 100644 target/classes/Controllers/Caisse/FraisDetailController$1$1.class create mode 100644 target/classes/Controllers/Caisse/FraisDetailController$1.class create mode 100644 target/classes/Controllers/Caisse/FraisDetailController$2.class create mode 100644 target/classes/Controllers/Caisse/FraisDetailController.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$1.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$10.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$11.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$12.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$13.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$14.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$2$1.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$2.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$3.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$4.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$5.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$6$1.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$6.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$7.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$8$1.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$8.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$9.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$ButtonCell$1.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController$ButtonCell.class create mode 100644 target/classes/Controllers/Caisse/FraisGestionController.class create mode 100644 target/classes/Controllers/Categorie/AjouterCategorieController.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltDetailController$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltDetailController$2.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltDetailController$3$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltDetailController$3.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltDetailController$4$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltDetailController$4.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltDetailController$5.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltDetailController.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$1$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$10.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$11.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$12.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$13.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$2.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$3.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$4.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$5$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$5.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$6.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$7$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$7.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$8.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$9.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$ButtonCell$1$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$ButtonCell$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController$ButtonCell.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltGestionController.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$10.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$11.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$12.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$13.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$14.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$2.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$3.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$4$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$4.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$5.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$6$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$6.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$7.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$8$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$8.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController$9.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionController.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltProvisionPrintController.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$2$1$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$2$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$2.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$3.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$4.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$5.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$6.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$7.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$8$1.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController$8.class create mode 100644 target/classes/Controllers/ChequeClt/ChequeCltVercerController.class create mode 100644 target/classes/Controllers/Client/AjouterClientController.class create mode 100644 target/classes/Controllers/Client/AjouterClientEntrepriseController$1.class create mode 100644 target/classes/Controllers/Client/AjouterClientEntrepriseController$2$1.class create mode 100644 target/classes/Controllers/Client/AjouterClientEntrepriseController$2.class create mode 100644 target/classes/Controllers/Client/AjouterClientEntrepriseController$3.class create mode 100644 target/classes/Controllers/Client/AjouterClientEntrepriseController.class create mode 100644 target/classes/Controllers/Client/AjouterClientPersonneController$1$1.class create mode 100644 target/classes/Controllers/Client/AjouterClientPersonneController$1.class create mode 100644 target/classes/Controllers/Client/AjouterClientPersonneController$2.class create mode 100644 target/classes/Controllers/Client/AjouterClientPersonneController$3.class create mode 100644 target/classes/Controllers/Client/AjouterClientPersonneController.class create mode 100644 target/classes/Controllers/Client/DetailClientController$1.class create mode 100644 target/classes/Controllers/Client/DetailClientController$2.class create mode 100644 target/classes/Controllers/Client/DetailClientController.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$1.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$10.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$11.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$12.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$13.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$14.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$2.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$3.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$4.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$5.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$6$1.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$6.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$7.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$8$1.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$8.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$9.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$ButtonCell$1.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController$ButtonCell.class create mode 100644 target/classes/Controllers/Client/GestionClientEntrepriseController.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$1.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$10.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$11.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$12.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$13.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$2.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$3.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$4.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$5$1.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$5.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$6.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$7$1.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$7.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$8.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$9.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$ButtonCell$1.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController$ButtonCell.class create mode 100644 target/classes/Controllers/Client/GestionClientPersonneController.class create mode 100644 target/classes/Controllers/Client/ListeClient.class create mode 100644 target/classes/Controllers/Client/ListeClientEntreprise.class create mode 100644 target/classes/Controllers/Client/MenuClientController.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$1.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$10.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$11.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$2.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$3$1.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$3.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$4.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$5$1.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$5.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$6.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$7.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$8.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController$9.class create mode 100644 target/classes/Controllers/Client/RechercherClientEntrepriseController.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$1.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$10.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$11.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$2.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$3$1.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$3.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$4.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$5$1.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$5.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$6.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$7.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$8.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController$9.class create mode 100644 target/classes/Controllers/Client/RechercherClientPersonneController.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltDetail$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltDetail$2$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltDetail$2.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltDetail$3.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltDetail.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltDialogConfirmationController.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$1$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$10.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$11.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$12.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$13.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$14.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$15.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$2.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$3.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$4.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$5.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$6.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$7$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$7.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$8.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$9$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$9.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$ButtonCell$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController$ButtonCell.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltGestionController.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$10$1$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$10$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$10.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$11.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$12.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$13.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$14$1$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$14$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$14.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$2.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$3.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$4.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$5.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$6$1$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$6$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$6.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$7$1$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$7$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$7.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$8.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$9.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$ButtonCell$1.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController$ButtonCell.class create mode 100644 target/classes/Controllers/CommandeClt/CommandeCltPasserController.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$10.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$11.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$12.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$13$1$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$13$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$13.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$2.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$3.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$4.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$5.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$6$1$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$6$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$6.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$7.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$8.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$9$1$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$9$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$9.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$ButtonCell$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController$ButtonCell.class create mode 100644 target/classes/Controllers/DevisClt/DevisAjouterController.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$10.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$11.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$12.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$2.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$3.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$4$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$4.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$5.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$6$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$6.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$7.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$8.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$9.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$ButtonCell$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController$ButtonCell.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltGestionController.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltPrintController$1$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltPrintController$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltPrintController$ListProdDevis.class create mode 100644 target/classes/Controllers/DevisClt/DevisCltPrintController.class create mode 100644 target/classes/Controllers/DevisClt/DevisDetailController$1$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisDetailController$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisDetailController$2.class create mode 100644 target/classes/Controllers/DevisClt/DevisDetailController.class create mode 100644 target/classes/Controllers/DevisClt/DevisDialogConfirmationController.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$10.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$11.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$2.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$3$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$3.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$4.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$5$1.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$5.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$6.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$7.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$8.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController$9.class create mode 100644 target/classes/Controllers/DevisClt/DevisImporterController.class create mode 100644 target/classes/Controllers/DevisClt/ListProduitDevis.class create mode 100644 target/classes/Controllers/Dialog/Dialog$1.class create mode 100644 target/classes/Controllers/Dialog/Dialog.class create mode 100644 target/classes/Controllers/Dialog/DialogSuccessController.class create mode 100644 target/classes/Controllers/Dialog/MessageControle.class create mode 100644 target/classes/Controllers/Dialog/Notification$1.class create mode 100644 target/classes/Controllers/Dialog/Notification.class create mode 100644 target/classes/Controllers/Dialog/ShowDialog$1.class create mode 100644 target/classes/Controllers/Dialog/ShowDialog$2.class create mode 100644 target/classes/Controllers/Dialog/ShowDialog$3.class create mode 100644 target/classes/Controllers/Dialog/ShowDialog$4.class create mode 100644 target/classes/Controllers/Dialog/ShowDialog$5.class create mode 100644 target/classes/Controllers/Dialog/ShowDialog.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$10.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$11.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$12.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$13.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$14.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$2.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$3.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$4.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$5.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$6$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$6.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$7.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$8$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$8.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$9.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$ButtonCell$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController$ButtonCell.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterController.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterDetailSelectController.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterDetailTraiteController.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementComptentController.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$10.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$11.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$12.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$2.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$3.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$4.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$5.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$6.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$7.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$8.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController$9.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltAjouterPaiementFaciliteController.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltDetailController$1$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltDetailController$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltDetailController$2.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltDetailController$3.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltDetailController.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltDialogConfirmationController.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$1$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$10.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$11.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$12.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$13.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$14.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$15.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$2.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$3.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$4.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$5.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$6.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$7$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$7.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$8.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$9$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$9.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$ButtonCell$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController$ButtonCell.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltGestionController.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltPrintController$1$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltPrintController$1.class create mode 100644 target/classes/Controllers/FactureClt/FactureCltPrintController.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$10$1$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$10$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$10.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$2.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$3.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$4.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$5.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$6$1$1$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$6$1$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$6$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$6.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$7.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$8.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$9.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$ButtonCell$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController$ButtonCell.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsAjouterController.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$10.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$11.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$12.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$13.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$14.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$15.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$2.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$3.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$4.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$5$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$5.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$6.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$7.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$8.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$9$1$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$9$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$9.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$ButtonCell$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$ButtonCell.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$ButtonCellRemove$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController$ButtonCellRemove.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsDetailController$1$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsDetailController$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsDetailController$2.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsDetailController.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$10$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$10.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$11.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$12$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$12.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$13.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$14.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$15.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$16.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$17.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$18.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$2$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$2.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$3.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$4.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$5.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$6.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$7.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$8$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$8.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$9.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$ButtonCell$1.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController$ButtonCell.class create mode 100644 target/classes/Controllers/FactureFrs/FactureFrsGestionController.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGererController$1.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGererController$2$1.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGererController$2.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGererController$3.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGererController$4.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGererController.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$1.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$10.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$11.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$12.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$2.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$3.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$4$1.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$4.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$5.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$6$1.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$6.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$7.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$8.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$9.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$ButtonCell$1.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController$ButtonCell.class create mode 100644 target/classes/Controllers/Fournisseur/FournisseurGestionController.class create mode 100644 target/classes/Controllers/Home/AideController.class create mode 100644 target/classes/Controllers/Home/ContactController.class create mode 100644 target/classes/Controllers/Home/DashboardController$1$1.class create mode 100644 target/classes/Controllers/Home/DashboardController$1.class create mode 100644 target/classes/Controllers/Home/DashboardController$2.class create mode 100644 target/classes/Controllers/Home/DashboardController.class create mode 100644 target/classes/Controllers/Home/LogicielController.class create mode 100644 target/classes/Controllers/Home/MentionsController.class create mode 100644 target/classes/Controllers/Main.class create mode 100644 target/classes/Controllers/PrincipalController$1.class create mode 100644 target/classes/Controllers/PrincipalController$2.class create mode 100644 target/classes/Controllers/PrincipalController$3.class create mode 100644 target/classes/Controllers/PrincipalController.class create mode 100644 target/classes/Controllers/Produit/AjouterProduitController$1.class create mode 100644 target/classes/Controllers/Produit/AjouterProduitController$2.class create mode 100644 target/classes/Controllers/Produit/AjouterProduitController$3.class create mode 100644 target/classes/Controllers/Produit/AjouterProduitController$4.class create mode 100644 target/classes/Controllers/Produit/AjouterProduitController$5$1.class create mode 100644 target/classes/Controllers/Produit/AjouterProduitController$5.class create mode 100644 target/classes/Controllers/Produit/AjouterProduitController$6$1.class create mode 100644 target/classes/Controllers/Produit/AjouterProduitController$6.class create mode 100644 target/classes/Controllers/Produit/AjouterProduitController$7.class create mode 100644 target/classes/Controllers/Produit/AjouterProduitController.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$1.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$10.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$11$1.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$11.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$12.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$13$1.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$13.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$14.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$15.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$16.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$17.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$18.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$19.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$2.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$3.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$4.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$5.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$6$1.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$6.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$7.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$8.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$9.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$ButtonCell$1.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$ButtonCell.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController.class create mode 100644 target/classes/Controllers/Produit/ModifierProduitController$1.class create mode 100644 target/classes/Controllers/Produit/ModifierProduitController$2.class create mode 100644 target/classes/Controllers/Produit/ModifierProduitController$3.class create mode 100644 target/classes/Controllers/Produit/ModifierProduitController$4$1.class create mode 100644 target/classes/Controllers/Produit/ModifierProduitController$4.class create mode 100644 target/classes/Controllers/Produit/ModifierProduitController.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$1.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$10.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$11.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$12.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$13.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$2.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$3.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$4.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$5$1.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$5.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$6.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$7$1.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$7.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$8.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$9.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$ButtonCell$1.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController$ButtonCell.class create mode 100644 target/classes/Controllers/Produit/RechercherProduitController.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$1.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$10$1.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$10.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$11.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$12$1.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$12.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$13.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$14$1.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$14.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$15.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$16.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$17.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$18.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$19.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$2$1.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$2.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$20.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$3$1.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$3.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$4$1.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$4.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$5.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$6.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$7.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$8.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$9.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$ButtonCell$1.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController$ButtonCell.class create mode 100644 target/classes/Controllers/Reglement/GestionReglementController.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$1.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$10.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$11.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$12.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$13.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$14$1.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$14.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$2.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$3.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$4.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$5.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$6.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$7.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$8.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$9.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$ButtonCell$1.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$ButtonCell.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$ButtonCellRemove$1.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller$ButtonCellRemove.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter1Controller.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter2Controller$1.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter2Controller$2.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter2Controller$3.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter2Controller$4.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter2Controller$5.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter2Controller$6.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter2Controller$7.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter2Controller.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter3Controller$1.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter3Controller$2$1.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter3Controller$2.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter3Controller$3.class create mode 100644 target/classes/Controllers/Reglement/ReglementAjouter3Controller.class create mode 100644 target/classes/Controllers/Reglement/ReglementDialogConfirmationController.class create mode 100644 target/classes/Controllers/Reglement/ReglementDialogDetailController$1.class create mode 100644 target/classes/Controllers/Reglement/ReglementDialogDetailController$2$1.class create mode 100644 target/classes/Controllers/Reglement/ReglementDialogDetailController$2.class create mode 100644 target/classes/Controllers/Reglement/ReglementDialogDetailController$3$1.class create mode 100644 target/classes/Controllers/Reglement/ReglementDialogDetailController$3.class create mode 100644 target/classes/Controllers/Reglement/ReglementDialogDetailController$4.class create mode 100644 target/classes/Controllers/Reglement/ReglementDialogDetailController.class create mode 100644 target/classes/Controllers/Reglement/TraiteFrsPrintController.class create mode 100644 target/classes/Controllers/Stock/BondeEnterPrintController.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$1.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$10.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$11.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$12.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$13.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$14.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$15.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$16.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$2.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$3.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$4.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$5.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$6.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$7$1.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$7.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$8.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$9$1.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$9.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$ButtonCell$1.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$ButtonCell.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$ButtonCellBE$1.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController$ButtonCellBE.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerController.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerDetailController.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerDialogConfirmation$1.class create mode 100644 target/classes/Controllers/Stock/BondeEntrerDialogConfirmation.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$1.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$10.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$11.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$12$1.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$12.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$13.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$14.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$15.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$16.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$17.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$2.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$3.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$4.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$5$1.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$5.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$6.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$7.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$8$1.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$8.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$9.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$ButtonCell$1$1.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$ButtonCell$1.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$ButtonCell.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$ButtonCellBE$1.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController$ButtonCellBE.class create mode 100644 target/classes/Controllers/Stock/BondeSortieController.class create mode 100644 target/classes/Controllers/Stock/BondeSortieDetailController.class create mode 100644 target/classes/Controllers/Stock/BondeSortieDialogConfirmation$1.class create mode 100644 target/classes/Controllers/Stock/BondeSortieDialogConfirmation.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$1.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$10$1.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$10.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$11.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$12$1.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$12.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$13.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$2.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$3.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$4.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$5.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$6.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$7.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$8.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$9.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$ButtonCellCategorie$1.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$ButtonCellCategorie.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$ButtonCellProduit$1.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController$ButtonCellProduit.class create mode 100644 target/classes/Controllers/Stock/EtatStockCategorieController.class create mode 100644 target/classes/Controllers/Stock/ListProduitBon.class create mode 100644 target/classes/Controllers/Stock/ListProduitRech.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$1.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$10.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$2.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$3.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$4.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$5$1.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$5.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$6.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$7.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$8.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController$9.class create mode 100644 target/classes/Controllers/Stock/MouvementStockController.class create mode 100644 target/classes/Controllers/Stock/PrintAllCategorieController.class create mode 100644 target/classes/Controllers/Stock/PrintAllProduitController.class create mode 100644 target/classes/Controllers/Stock/PrintMouvementProduitController.class create mode 100644 target/classes/Controllers/Stock/PrintSelProduitController.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltDetailController$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltDetailController$2.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltDetailController$3.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltDetailController$4$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltDetailController$4.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltDetailController$5.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltDetailController$6.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltDetailController.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$1$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$10.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$11.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$12.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$13.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$2.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$3.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$4.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$5$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$5.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$6.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$7$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$7.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$8.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$9.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$ButtonCell$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController$ButtonCell.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltGestionController.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltPrintController.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltPrintRetardController.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$10.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$11.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$12.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$13.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$14.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$2.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$3.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$4$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$4.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$5.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$6$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$6.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$7.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$8$1.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$8.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController$9.class create mode 100644 target/classes/Controllers/TraiteClt/TraiteCltRetardController.class create mode 100644 target/classes/Controllers/Traitement/Adaptateur.class create mode 100644 target/classes/Controllers/Traitement/MyWindow.class create mode 100644 target/classes/Controllers/Traitement/ParametreSystem.class create mode 100644 target/classes/Controllers/Traitement/TotalHeightTableColumn$1$1.class create mode 100644 target/classes/Controllers/Traitement/TotalHeightTableColumn$1.class create mode 100644 target/classes/Controllers/Traitement/TotalHeightTableColumn.class create mode 100644 target/classes/Controllers/Traitement/contro.class create mode 100644 target/classes/Controllers/User/AddUserController.class create mode 100644 target/classes/Controllers/User/GestionUtilisateurController$1.class create mode 100644 target/classes/Controllers/User/GestionUtilisateurController.class create mode 100644 target/classes/Controllers/User/ProfileController$1.class create mode 100644 target/classes/Controllers/User/ProfileController$2.class create mode 100644 target/classes/Controllers/User/ProfileController$3.class create mode 100644 target/classes/Controllers/User/ProfileController$4.class create mode 100644 target/classes/Controllers/User/ProfileController.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$10.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$11.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$12.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$13.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$2.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$3.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$4$1$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$4$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$4.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$5$1$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$5$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$5.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$6$1$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$6$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$6.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$7.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$8.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$9$1$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$9$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$9.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$ButtonCell$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController$ButtonCell.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step1CommandeCltController.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step2BonLivraisonCltController.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$10.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$11.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$12.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$2.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$3.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$4.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$5.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$6.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$7.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$8.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController$9.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step3FactureCltController.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$2.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$3.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$4$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$4.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$5.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$6$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$6.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$7.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$8$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$8.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController$9.class create mode 100644 target/classes/Controllers/VenteRapideClt/Step4SaveVenteCltController.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteRapideCltController.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$10.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$11$1$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$11$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$11.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$12.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$13.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$14.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$15.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$16$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$16.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$17.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$18$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$18.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$19.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$2.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$20.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$21.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$22.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$23.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$24.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$3.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$4.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$5.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$6.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$7$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$7.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$8.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$9.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$ButtonCell$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$ButtonCell.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$ButtonCellOperation$1$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$ButtonCellOperation$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$ButtonCellOperation$2.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController$ButtonCellOperation.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltController.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltDetailController$1$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltDetailController$1.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltDetailController$2.class create mode 100644 target/classes/Controllers/VenteRapideClt/VenteSansFactureCltDetailController.class create mode 100644 target/classes/Models/BonLivraisonClt/BonLivraisonClt.class create mode 100644 target/classes/Models/BonLivraisonClt/BonLivraisonCltDB.class create mode 100644 target/classes/Models/BonLivraisonClt/BonLivraisonCltGestionList.class create mode 100644 target/classes/Models/BonLivraisonClt/BonLivraisonCltProduitList.class create mode 100644 target/classes/Models/BonReceptionFrs/BonReceptionDB.class create mode 100644 target/classes/Models/BonReceptionFrs/BonReceptionFrs.class create mode 100644 target/classes/Models/BonReceptionFrs/BonReceptionGestionDB.class create mode 100644 target/classes/Models/BonReceptionFrs/BonReceptionGestionList.class create mode 100644 target/classes/Models/BonReceptionFrs/BonReceptionList.class create mode 100644 target/classes/Models/BonReceptionFrs/BonReceptionProduitList.class create mode 100644 target/classes/Models/Caisse/CaisseClt.class create mode 100644 target/classes/Models/Caisse/CaisseDB.class create mode 100644 target/classes/Models/Caisse/CaisseEntreListe.class create mode 100644 target/classes/Models/Caisse/CaisseListe.class create mode 100644 target/classes/Models/Caisse/CaisseSortieListe.class create mode 100644 target/classes/Models/Caisse/CarteBancaireClt.class create mode 100644 target/classes/Models/Caisse/CarteBancaireCltDB.class create mode 100644 target/classes/Models/Caisse/Frais.class create mode 100644 target/classes/Models/Caisse/FraisDB.class create mode 100644 target/classes/Models/Categorie/Categorie.class create mode 100644 target/classes/Models/Categorie/CategorieDB.class create mode 100644 target/classes/Models/Categorie/CategorieListe.class create mode 100644 target/classes/Models/ChequeClt/ChequeClt.class create mode 100644 target/classes/Models/ChequeClt/ChequeCltDB.class create mode 100644 target/classes/Models/ChequeClt/ChequeCltGestionListe.class create mode 100644 target/classes/Models/ChequeClt/ChequeCltHistoriqueListe.class create mode 100644 target/classes/Models/ChequeClt/ChequeList.class create mode 100644 target/classes/Models/ChequeClt/DatePickerCellCheque$1.class create mode 100644 target/classes/Models/ChequeClt/DatePickerCellCheque$2.class create mode 100644 target/classes/Models/ChequeClt/DatePickerCellCheque.class create mode 100644 target/classes/Models/Client/Client.class create mode 100644 target/classes/Models/Client/ClientDB.class create mode 100644 target/classes/Models/Client/ClientEntreprise.class create mode 100644 target/classes/Models/Client/ClientEntrepriseContact.class create mode 100644 target/classes/Models/Client/ClientEntrepriseContactDB.class create mode 100644 target/classes/Models/Client/ClientEntrepriseDB.class create mode 100644 target/classes/Models/Client/ClientPassager.class create mode 100644 target/classes/Models/Client/ClientPassagerDB.class create mode 100644 target/classes/Models/CommandeClt/CommandeClt.class create mode 100644 target/classes/Models/CommandeClt/CommandeCltDB.class create mode 100644 target/classes/Models/CommandeClt/CommandeCltListe.class create mode 100644 target/classes/Models/CommandeFrs/CommandeFrs.class create mode 100644 target/classes/Models/DevisClt/Devis.class create mode 100644 target/classes/Models/DevisClt/DevisCltListe.class create mode 100644 target/classes/Models/DevisClt/DevisDB.class create mode 100644 target/classes/Models/FactureClt/FactureClt.class create mode 100644 target/classes/Models/FactureClt/FactureCltChequeListe.class create mode 100644 target/classes/Models/FactureClt/FactureCltDB.class create mode 100644 target/classes/Models/FactureClt/FactureCltGestion.class create mode 100644 target/classes/Models/FactureClt/FactureCltGestionList.class create mode 100644 target/classes/Models/FactureClt/FactureCltTraiteListe.class create mode 100644 target/classes/Models/FactureFrs/FactureFrs.class create mode 100644 target/classes/Models/FactureFrs/FactureFrsDB.class create mode 100644 target/classes/Models/FactureFrs/FactureFrsProduitList.class create mode 100644 target/classes/Models/Fournisseur/Fournisseur.class create mode 100644 target/classes/Models/Fournisseur/FournisseurContactDB.class create mode 100644 target/classes/Models/Fournisseur/FournisseurContactList.class create mode 100644 target/classes/Models/Fournisseur/FournisseurDB.class create mode 100644 target/classes/Models/Fournisseur/FournisseurGestionList.class create mode 100644 target/classes/Models/Home/HomeDB.class create mode 100644 target/classes/Models/Produit/ListeProduit.class create mode 100644 target/classes/Models/Produit/Produit.class create mode 100644 target/classes/Models/Produit/ProduitDB.class create mode 100644 target/classes/Models/Reglement/CarteElectroniqueFrs.class create mode 100644 target/classes/Models/Reglement/ChequeFrs.class create mode 100644 target/classes/Models/Reglement/Reglement.class create mode 100644 target/classes/Models/Reglement/ReglementDB.class create mode 100644 target/classes/Models/Reglement/TraiteFrs.class create mode 100644 target/classes/Models/Stock/BonEntree.class create mode 100644 target/classes/Models/Stock/BonEntreeListeProd.class create mode 100644 target/classes/Models/Stock/BonSortie.class create mode 100644 target/classes/Models/Stock/BondeEntrerDB.class create mode 100644 target/classes/Models/Stock/BondeSortieDB.class create mode 100644 target/classes/Models/Stock/ListeMouvement.class create mode 100644 target/classes/Models/Stock/StockDB.class create mode 100644 target/classes/Models/Stock/StockDetail.class create mode 100644 target/classes/Models/Stock/StockDetailDB.class create mode 100644 target/classes/Models/TraiteClt/DatePickerCell$1.class create mode 100644 target/classes/Models/TraiteClt/DatePickerCell$2.class create mode 100644 target/classes/Models/TraiteClt/DatePickerCell.class create mode 100644 target/classes/Models/TraiteClt/TraiteClt.class create mode 100644 target/classes/Models/TraiteClt/TraiteCltDB.class create mode 100644 target/classes/Models/TraiteClt/TraiteCltGestionDB.class create mode 100644 target/classes/Models/TraiteClt/TraiteCltGestionListe.class create mode 100644 target/classes/Models/TraiteClt/TraiteCltPaiementListe.class create mode 100644 target/classes/Models/TraiteClt/TraiteList.class create mode 100644 target/classes/Models/User/Authentification.class create mode 100644 target/classes/Models/User/ListUserDB.class create mode 100644 target/classes/Models/User/ListUsers.class create mode 100644 target/classes/Models/User/Profile.class create mode 100644 target/classes/Models/User/ProfileDB.class create mode 100644 target/classes/Models/User/User.class create mode 100644 target/classes/Models/VenteRapideClt/ListeVenteSansFacture.class create mode 100644 target/classes/Models/VenteRapideClt/VenteSansFacture.class create mode 100644 target/classes/Models/VenteRapideClt/VenteSansFactureDB.class create mode 100644 target/classes/Models/connexion.class create mode 100644 target/classes/Public/CSS/StylePrincipal.css create mode 100644 target/classes/Public/CSS/StyleSheetAccordion.css create mode 100644 target/classes/Public/CSS/StyleSheetPanelHaut.css create mode 100644 target/classes/Public/CSS/StyleSheetPrint.css create mode 100644 target/classes/Public/CSS/StyleSheetProfile.css create mode 100644 target/classes/Public/Fonts/Raleway-Medium.ttf create mode 100644 target/classes/Public/Fonts/Raleway-SemiBold.ttf create mode 100644 target/classes/Public/icon/Client.png create mode 100644 target/classes/Public/icon/IconUserBleu.png create mode 100644 target/classes/Public/icon/ImageMessage.png create mode 100644 target/classes/Public/icon/ImageNotification.png create mode 100644 target/classes/Public/icon/Logo.png create mode 100644 target/classes/Public/icon/NotifiMessa.png create mode 100644 target/classes/Public/icon/Shopping.png create mode 100644 target/classes/Public/icon/Stock.png create mode 100644 target/classes/Public/icon/Usericon.png create mode 100644 target/classes/Public/icon/achat.png create mode 100644 target/classes/Public/icon/cheque.png create mode 100644 target/classes/Public/icon/client_ajouter.png create mode 100644 target/classes/Public/icon/client_detail.png create mode 100644 target/classes/Public/icon/client_fidele.png create mode 100644 target/classes/Public/icon/client_retard.png create mode 100644 target/classes/Public/icon/dashboard.png create mode 100644 target/classes/Public/icon/detailbutton.png create mode 100644 target/classes/Public/icon/dialog_error.png create mode 100644 target/classes/Public/icon/dialog_notification.png create mode 100644 target/classes/Public/icon/dialoginform.png create mode 100644 target/classes/Public/icon/entropot_sortie72.png create mode 100644 target/classes/Public/icon/glyphicon-lock.png create mode 100644 target/classes/Public/icon/glyphicon-user.png create mode 100644 target/classes/Public/icon/icon-excel.png create mode 100644 target/classes/Public/icon/icon-pdf.png create mode 100644 target/classes/Public/icon/icon-print.png create mode 100644 target/classes/Public/icon/icon-relogin.png create mode 100644 target/classes/Public/icon/icon-success.png create mode 100644 target/classes/Public/icon/iconNotification.png create mode 100644 target/classes/Public/icon/iconadd.png create mode 100644 target/classes/Public/icon/iconaffecter.png create mode 100644 target/classes/Public/icon/iconalert.png create mode 100644 target/classes/Public/icon/icondelete.png create mode 100644 target/classes/Public/icon/iconedit.png create mode 100644 target/classes/Public/icon/iconsave.png create mode 100644 target/classes/Public/icon/logo1.png create mode 100644 target/classes/Public/icon/outil.png create mode 100644 target/classes/Public/icon/product.png create mode 100644 target/classes/Public/icon/profiluser.jpg create mode 100644 target/classes/Public/icon/search.png create mode 100644 target/classes/Public/icon/successfully.png create mode 100644 target/classes/Public/icon/uses.png create mode 100644 target/classes/Public/icon/vente.png create mode 100644 target/classes/Public/icon/vente_2.png create mode 100644 target/classes/Views/Authentification.fxml create mode 100644 target/classes/Views/BonLivraisonClt/BonLivraisonCltAjouter.fxml create mode 100644 target/classes/Views/BonLivraisonClt/BonLivraisonCltAjouterEtape2.fxml create mode 100644 target/classes/Views/BonLivraisonClt/BonLivraisonCltAjouterEtape3.fxml create mode 100644 target/classes/Views/BonLivraisonClt/BonLivraisonCltDetail.fxml create mode 100644 target/classes/Views/BonLivraisonClt/BonLivraisonCltGestion.fxml create mode 100644 target/classes/Views/BonLivraisonClt/BonLivraisonCltPrint.fxml create mode 100644 target/classes/Views/BonReceptionFrs/BonReceptionAjouterFrs.fxml create mode 100644 target/classes/Views/BonReceptionFrs/BonReceptionDetailFrs.fxml create mode 100644 target/classes/Views/BonReceptionFrs/BonReceptionGestionFrs.fxml create mode 100644 target/classes/Views/Caisse/CaisseEntre.fxml create mode 100644 target/classes/Views/Caisse/CaisseEntrePrint.fxml create mode 100644 target/classes/Views/Caisse/CaisseSortie.fxml create mode 100644 target/classes/Views/Caisse/CaisseSortiePrint.fxml create mode 100644 target/classes/Views/Caisse/FraisAjouter.fxml create mode 100644 target/classes/Views/Caisse/FraisDetail.fxml create mode 100644 target/classes/Views/Caisse/FraisGestion.fxml create mode 100644 target/classes/Views/Categorie/AjouterCategorie.fxml create mode 100644 target/classes/Views/ChequeClt/ChequeCltDetail.fxml create mode 100644 target/classes/Views/ChequeClt/ChequeCltGestion.fxml create mode 100644 target/classes/Views/ChequeClt/ChequeCltProvision.fxml create mode 100644 target/classes/Views/ChequeClt/ChequeCltProvisionPrint.fxml create mode 100644 target/classes/Views/ChequeClt/ChequeCltVercer.fxml create mode 100644 target/classes/Views/Client/AjouterClient.fxml create mode 100644 target/classes/Views/Client/AjouterClientEntreprise.fxml create mode 100644 target/classes/Views/Client/AjouterClientPersonne.fxml create mode 100644 target/classes/Views/Client/DetailClient.fxml create mode 100644 target/classes/Views/Client/GestionClientEntreprise.fxml create mode 100644 target/classes/Views/Client/GestionClientPersonne.fxml create mode 100644 target/classes/Views/Client/MenuClient.fxml create mode 100644 target/classes/Views/Client/RechercherClientEntreprise.fxml create mode 100644 target/classes/Views/Client/RechercherClientPersonne.fxml create mode 100644 target/classes/Views/CommandeClt/CommandeCltDetail.fxml create mode 100644 target/classes/Views/CommandeClt/CommandeCltDialogConfirmation.fxml create mode 100644 target/classes/Views/CommandeClt/CommandeCltGestion.fxml create mode 100644 target/classes/Views/CommandeClt/CommandeCltPasser.fxml create mode 100644 target/classes/Views/Devis/DevisAjouter.fxml create mode 100644 target/classes/Views/Devis/DevisCltGestion.fxml create mode 100644 target/classes/Views/Devis/DevisCltPrint.fxml create mode 100644 target/classes/Views/Devis/DevisDetail.fxml create mode 100644 target/classes/Views/Devis/DevisDialogConfirmation.fxml create mode 100644 target/classes/Views/Devis/DevisImporter.fxml create mode 100644 target/classes/Views/Dialog/DialogAlert.fxml create mode 100644 target/classes/Views/Dialog/DialogNotification.fxml create mode 100644 target/classes/Views/Dialog/DialogSuccess.fxml create mode 100644 target/classes/Views/FactureClt/FactureCltAjouter.fxml create mode 100644 target/classes/Views/FactureClt/FactureCltAjouterDetailSelect.fxml create mode 100644 target/classes/Views/FactureClt/FactureCltAjouterDetailTraite.fxml create mode 100644 target/classes/Views/FactureClt/FactureCltAjouterPaiementComptent.fxml create mode 100644 target/classes/Views/FactureClt/FactureCltAjouterPaiementFacilite.fxml create mode 100644 target/classes/Views/FactureClt/FactureCltDetail.fxml create mode 100644 target/classes/Views/FactureClt/FactureCltDialogConfirmation.fxml create mode 100644 target/classes/Views/FactureClt/FactureCltGestion.fxml create mode 100644 target/classes/Views/FactureClt/FactureCltPrint.fxml create mode 100644 target/classes/Views/FactureFrs/FactureFrsAjouter.fxml create mode 100644 target/classes/Views/FactureFrs/FactureFrsBonReceptionAjouter.fxml create mode 100644 target/classes/Views/FactureFrs/FactureFrsDetail.fxml create mode 100644 target/classes/Views/FactureFrs/FactureFrsGestion.fxml create mode 100644 target/classes/Views/Fournisseur/FournisseurGerer.fxml create mode 100644 target/classes/Views/Fournisseur/FournisseurGestion.fxml create mode 100644 target/classes/Views/Home/Aide.fxml create mode 100644 target/classes/Views/Home/Contact.fxml create mode 100644 target/classes/Views/Home/Dashboard.fxml create mode 100644 target/classes/Views/Home/Logiciel.fxml create mode 100644 target/classes/Views/Home/Mentions.fxml create mode 100644 target/classes/Views/Principal.fxml create mode 100644 target/classes/Views/Produit/AjouterProduit.fxml create mode 100644 target/classes/Views/Produit/GestionProduit.fxml create mode 100644 target/classes/Views/Produit/ModifierProduit.fxml create mode 100644 target/classes/Views/Produit/RechercherProduit.fxml create mode 100644 target/classes/Views/Reglement/ReglementAjouter1.fxml create mode 100644 target/classes/Views/Reglement/ReglementAjouter2.fxml create mode 100644 target/classes/Views/Reglement/ReglementAjouter3.fxml create mode 100644 target/classes/Views/Reglement/ReglementDialogConfirmation.fxml create mode 100644 target/classes/Views/Reglement/ReglementDialogDetail.fxml create mode 100644 target/classes/Views/Reglement/ReglementGestion.fxml create mode 100644 target/classes/Views/Reglement/TraiteFrsPrint.fxml create mode 100644 target/classes/Views/Stock/BondeEnterPrint.fxml create mode 100644 target/classes/Views/Stock/BondeEntrer.fxml create mode 100644 target/classes/Views/Stock/BondeEntrerDetail.fxml create mode 100644 target/classes/Views/Stock/BondeSortie.fxml create mode 100644 target/classes/Views/Stock/BondeSortieDetail.fxml create mode 100644 target/classes/Views/Stock/EtatStockCategorie.fxml create mode 100644 target/classes/Views/Stock/MouvementStock.fxml create mode 100644 target/classes/Views/Stock/PrintAllCategorie.fxml create mode 100644 target/classes/Views/Stock/PrintAllProduit.fxml create mode 100644 target/classes/Views/Stock/PrintMouvementProduit.fxml create mode 100644 target/classes/Views/Stock/PrintSelProduit.fxml create mode 100644 target/classes/Views/TraiteClt/TraiteCltDetail.fxml create mode 100644 target/classes/Views/TraiteClt/TraiteCltGestion.fxml create mode 100644 target/classes/Views/TraiteClt/TraiteCltPrint.fxml create mode 100644 target/classes/Views/TraiteClt/TraiteCltPrintRetard.fxml create mode 100644 target/classes/Views/TraiteClt/TraiteCltRetard.fxml create mode 100644 target/classes/Views/User/AddUser.fxml create mode 100644 target/classes/Views/User/GestionUtilisateur.fxml create mode 100644 target/classes/Views/User/Profile.fxml create mode 100644 target/classes/Views/VenteRapideClt/Step1CommandeClt.fxml create mode 100644 target/classes/Views/VenteRapideClt/Step2BonLivraisonClt.fxml create mode 100644 target/classes/Views/VenteRapideClt/Step3FactureClt.fxml create mode 100644 target/classes/Views/VenteRapideClt/Step4SaveVenteClt.fxml create mode 100644 target/classes/Views/VenteRapideClt/VenteRapideClt.fxml create mode 100644 target/classes/Views/VenteRapideClt/VenteSansFactureClt.fxml create mode 100644 target/classes/Views/VenteRapideClt/VenteSansFactureCltDetail.fxml create mode 100644 target/classes/module-info.class create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/conf/log4j.xml b/conf/log4j.xml new file mode 100644 index 0000000..954263e --- /dev/null +++ b/conf/log4j.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/conf/logo.xml b/conf/logo.xml new file mode 100644 index 0000000..a7e6901 --- /dev/null +++ b/conf/logo.xml @@ -0,0 +1,39 @@ + + + + ./conf/logo1.png + 110 + 108 + 40 + 80 + + + ./conf/logo2.png + 150 + 40 + 9 + 5 + + + ./conf/logo1.png + 92 + 82 + 358 + 8 + + + ./conf/logo1.png + 92 + 82 + 358 + 8 + + + ./conf/logo1.png + 84 + 87 + 345 + 35 + + + diff --git a/conf/logo1.png b/conf/logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..359c8f897d13f0b2c7f3bf9a38413b2855553ded GIT binary patch literal 17747 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 + + + jdbc:mysql://localhost:3306/powerpme?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC + powerpme + root + bentili + + + Societé X + Tunis +
2 rue elmouez mornaguia
+ 533 459 590 + 533 459 590 + 533 459 590 + 71 554 885 + 71 847 965 + contact@powerpme.com + www.power-pme.com +
+ + DT + dinar + millime + + + Banque Nationale Agricole en Tunisie + 18 145 1495872366763 08 + TN59 1700 1000 0002 3667 9587 + + Magasin I + 0.600 +
diff --git a/conf/print.xml b/conf/print.xml new file mode 100644 index 0000000..c92f24b --- /dev/null +++ b/conf/print.xml @@ -0,0 +1,95 @@ + + + + + 689 + 457 + + + true + 18 + 293 + + + true + 42 + 252 + + + true + 305 + 301 + 57 + 149 + + + true + 18 + 332 + + + true + 151 + 136 + + + true + 155 + 164 + + + true + 468 + 279 + 34 + 201 + + + true + 151 + 194 + + + true + 400 + 131 + + + true + 5 + 88 + + + + + 400 + 600 + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + + diff --git a/jshell.history b/jshell.history new file mode 100644 index 0000000..e69de29 diff --git a/nb-configuration.xml b/nb-configuration.xml new file mode 100644 index 0000000..174bf05 --- /dev/null +++ b/nb-configuration.xml @@ -0,0 +1,20 @@ + + + + + + all + true + JDK_21 + + diff --git a/nbactions.xml b/nbactions.xml new file mode 100644 index 0000000..a0cb38e --- /dev/null +++ b/nbactions.xml @@ -0,0 +1,40 @@ + + + + run + + jar + + + clean + javafx:run + + + + debug + + clean + javafx:run@ide-debug + + + true + + + + profile + + clean + javafx:run@ide-profile + + + + CUSTOM-jlink + jlink + + clean + + compile + javafx:jlink + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..3d12f29 --- /dev/null +++ b/pom.xml @@ -0,0 +1,151 @@ + + 4.0.0 + com.mycompany + PowerPMEmarven + 1.0-SNAPSHOT + + UTF-8 + 11 + 11 + + + + org.openjfx + javafx-controls + 13 + + + org.openjfx + javafx-fxml + 13 + + + com.gluonhq + charm-glisten + 6.2.3 + + + com.gluonhq.attach + share + 4.0.18 + + + org.openjfx + javafx-web + 17.0.7 + jar + + + com.ibm.icu + icu4j + 3.4.4 + + + com.mysql + mysql-connector-j + 9.0.0 + + + org.controlsfx + controlsfx + 11.2.1 + jar + + + log4j + log4j + 1.2.17 + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + Controllers.Main + + + + META-INF/spring.handlers + + + ${project.artifactId}-${project.version} + true + jar-with-dependencies + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 11 + + + + org.openjfx + javafx-maven-plugin + 0.0.4 + + Controllers.App + + + + + + + + + + default-cli + + + + + debug + + + + + + + + + ide-debug + + + + + + + + + ide-profile + + + + + + + + + + + + + + + diff --git a/src/logs/myStruts1App.log b/src/logs/myStruts1App.log new file mode 100644 index 0000000..afcedfe --- /dev/null +++ b/src/logs/myStruts1App.log @@ -0,0 +1 @@ +2024-12-25 17:20:33 ERROR App:26 - Error message diff --git a/src/main/java/Controllers/App.java b/src/main/java/Controllers/App.java new file mode 100644 index 0000000..2fecf01 --- /dev/null +++ b/src/main/java/Controllers/App.java @@ -0,0 +1,40 @@ +package Controllers; + +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.ParametreSystem; +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; +import java.io.IOException; +import org.apache.log4j.xml.DOMConfigurator; + +/** + * JavaFX App + */ +public class App extends Application { + + @Override + public void start(Stage stage) throws IOException { + + DOMConfigurator.configure("./conf/log4j.xml"); + + ParametreSystem parametre = new ParametreSystem(); + parametre.SetParametre(); + + MyWindow.NewMyStage(); + MyWindow.setMyParent((Parent) FXMLLoader.load(getClass().getResource("/Views/Authentification.fxml"))); + Scene scene = new Scene(MyWindow.myParent); + MyWindow.myStage.setScene(scene); + MyWindow.myStage.show(); + } + + + + public static void main(String[] args) { + + launch(); + } + +} \ No newline at end of file diff --git a/src/main/java/Controllers/AuthentificationController.java b/src/main/java/Controllers/AuthentificationController.java new file mode 100644 index 0000000..4c1fd35 --- /dev/null +++ b/src/main/java/Controllers/AuthentificationController.java @@ -0,0 +1,197 @@ +package Controllers; + +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.ParametreSystem; +import Models.User.Profile; +import Models.User.ProfileDB; +import Models.User.User; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Label; +import javafx.scene.control.PasswordField; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + + +public class AuthentificationController implements Initializable{ + + @FXML + private Text Erreurresult; + + @FXML + private Label label; + + @FXML + private TextField Login; + + @FXML + private PasswordField Password; + + @FXML + private AnchorPane Content; + + @FXML + private ImageView ImageViewLogo; + + @FXML + private ProgressBar ProgressBarAuthentification; + + private Service ThreadAuthentification; + + Profile profile; + + @Override + public void initialize(URL url, ResourceBundle rb) { + Content.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + Connexion(); + } + } + }); + setImageLogo(); + } + + + @FXML + private void handleButtonAction(ActionEvent event) throws IOException { + this.Connexion(); + } + + private void Connexion() + { + Erreurresult.setText(null); + Login.setStyle("-fx-border-color: transparent;"); + Login.setStyle("-fx-border-color: transparent;"); + + String login=Login.getText(); + String password=Password.getText(); + + if(login.length()==0){ + Erreurresult.setText(null); + Erreurresult.setText("champ login vide."); + Login.setStyle("-fx-border-color:#ff0000;"); + } + else if(password.length()==0){ + Erreurresult.setText(null); + Erreurresult.setText("champ password vide."); + Password.setStyle("-fx-border-color:#ff0000;"); + } + else{ + Login.setStyle("-fx-border-color: transparent;"); + Password.setStyle("-fx-border-color: transparent;"); + ProgressBarAuthentification.setVisible(true); + ThreadAuthentification = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + profile = new ProfileDB().getProfileByConnexion(login, password); + + return null; + } + }; + } + }; + ThreadAuthentification.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + if(profile.getIdprofile() > 0){ + User.idprofile= profile.getIdprofile(); + User.nom = profile.getNom(); + User.prenom=profile.getPrenom(); + User.UserLocal=profile.getAuthentification().getLocalNom(); + User.SotckNegatif= profile.getAuthentification().isStockNegatif(); + + if(ParametreSystem.NomLocalPC.equals(profile.getAuthentification().getLocalNom())){ + //Fermer la fenétre de authentification + //((Node)(event.getSource())).getScene().getWindow().hide(); + Content.getScene().getWindow().hide(); + MyWindow.NewMyStage(); + try { + MyWindow.setMyParent((Parent) FXMLLoader.load(getClass().getResource("/Views/Principal.fxml"))); + Scene scene = new Scene(MyWindow.myParent); + MyWindow.myStage.setScene(scene); + MyWindow.myStage.show(); + } catch (IOException ex) { + Logger.getLogger(AuthentificationController.class.getName()).log(Level.SEVERE, null, ex); + } + }else{ + //Fermer la fenétre de authentification else{ + Erreurresult.setText("Accès interdit a ce locale"); + } + }else{ + Erreurresult.setText("Login ou password est incorrect"); + } + ProgressBarAuthentification.setVisible(false); + } + }); + ThreadAuthentification.start(); + } + } + + + private void setImageLogo() + { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + try { + // optional, but recommended + // process XML securely, avoid attacks like XML External Entities (XXE) + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + + // parse XML file + DocumentBuilder db = dbf.newDocumentBuilder(); + + //PowerERP\conf\logo.xml + Document doc = db.parse(new File("./conf/logo.xml")); + + doc.getDocumentElement().normalize(); + + Element elementCNX = (Element) doc.getElementsByTagName("Connexion").item(0); + + String pathLogo = elementCNX.getElementsByTagName("PathImage").item(0).getTextContent(); + FileInputStream fis = new FileInputStream(pathLogo); + ImageViewLogo.setImage(new Image(fis)); + + ImageViewLogo.setFitWidth(Double.parseDouble(elementCNX.getElementsByTagName("FitWidth").item(0).getTextContent())); + ImageViewLogo.setFitHeight(Double.parseDouble(elementCNX.getElementsByTagName("FitHeight").item(0).getTextContent())); + ImageViewLogo.setLayoutX(Double.parseDouble(elementCNX.getElementsByTagName("LayoutX").item(0).getTextContent())); + ImageViewLogo.setLayoutY(Double.parseDouble(elementCNX.getElementsByTagName("LayoutY").item(0).getTextContent())); + } + catch (ParserConfigurationException | SAXException | IOException e) { + System.out.println("error AuthentificationController/setImageLogo "+e.getMessage()); + } + } + +} diff --git a/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController.java b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController.java new file mode 100644 index 0000000..0067f47 --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController.java @@ -0,0 +1,409 @@ +package Controllers.BonLivraisonClt; + +import Models.CommandeClt.CommandeCltDB; +import Models.CommandeClt.CommandeCltListe; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Callback; + + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class BonLivraisonCltAjouterController implements Initializable { + + @FXML private AnchorPane AnchorPaneBLCltAjouterEtape1; + + @FXML private ProgressBar ProgressBarBLCltAjouter; + + @FXML private Button ButtonSearchBLCltAjouter; + + @FXML public TableView TableViewCommande; + + @FXML public TableColumn TabColCodeCommande; + @FXML public TableColumn TabColModePaiement; + @FXML public TableColumn TabColTypeClient; + @FXML public TableColumn TabColCodeClient; + @FXML public TableColumn TabColTotalCommande; + @FXML public TableColumn TabColDateCreation ; + @FXML public TableColumn TabColCodeDevis; + @FXML public TableColumnTabColAction ; + + @FXML public TextField TextFieldCodeCommande; + @FXML public DatePicker DatePickerCreation; + @FXML public RadioButton RadioComptant; + @FXML public RadioButton RadioFacilite; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount; + @FXML private ChoiceBox NbrLigne ; + + private Service ThreadSearchBLCltAjouter; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TableViewCommande.setEditable(true); + + TabColCodeCommande.setStyle( "-fx-alignment: CENTER;");TabColCodeCommande.getStyleClass().add("Center"); + TabColCodeCommande.setCellValueFactory(new PropertyValueFactory("CodeCommande")); + + TabColTypeClient.setStyle( "-fx-alignment: CENTER;");TabColTypeClient.getStyleClass().add("Center"); + TabColTypeClient.setCellValueFactory(new PropertyValueFactory("TypeClient")); + + TabColCodeClient.setStyle( "-fx-alignment: CENTER;");TabColCodeClient.getStyleClass().add("Center"); + TabColCodeClient.setCellValueFactory(new PropertyValueFactory("CodeClient")); + + TabColModePaiement.setStyle( "-fx-alignment: CENTER;");TabColModePaiement.getStyleClass().add("Center"); + TabColModePaiement.setCellValueFactory(new PropertyValueFactory("ModePaiement")); + + TabColTotalCommande.setStyle( "-fx-alignment: CENTER;");TabColTotalCommande.getStyleClass().add("Center"); + TabColTotalCommande.setCellValueFactory(new PropertyValueFactory("TotalCommande")); + + TabColDateCreation.setStyle( "-fx-alignment: CENTER;");TabColDateCreation.getStyleClass().add("Center"); + TabColDateCreation.setCellValueFactory(new PropertyValueFactory("DateCreation")); + + TabColCodeDevis.setStyle( "-fx-alignment: CENTER;");TabColCodeDevis.getStyleClass().add("Center"); + TabColCodeDevis.setCellValueFactory(new PropertyValueFactory("CodeDevis")); + + + TabColAction.setSortable(true); + TabColAction.setStyle( "-fx-alignment: CENTER;");TabColAction.getStyleClass().add("Center"); + TabColAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new BonLivraisonCltAjouterController.ButtonCell(); + } + }); + + ButtonSearchBLCltAjouter.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchBLCltAjouter(); + } + }); + + AnchorPaneBLCltAjouterEtape1.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchBLCltAjouter(); + } + } + }); + + RadioComptant.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchBLCltAjouter(); + } + }); + + RadioFacilite.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchBLCltAjouter(); + } + }); + + GestionSearchBLCltAjouter(); + + } + + + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconedit.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + try { + CommandeCltListe current = (CommandeCltListe) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + String CodeCommande = current.getCodeCommande(); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltAjouterEtape2.fxml")); + Parent NodeBonLivraisonCltAjouterEtape2 = (Parent)fxmlLoader.load(); + BonLivraisonCltAjouterEtape2Controller BonLivraisonCltAjouterEtape2= fxmlLoader.getController(); + + AnchorPaneBLCltAjouterEtape1.getChildren().clear(); + AnchorPaneBLCltAjouterEtape1.getChildren().add(NodeBonLivraisonCltAjouterEtape2); + + BonLivraisonCltAjouterEtape2.SetDataCommandeClt(CodeCommande); + } catch (IOException ex) { + Logger.getLogger(BonLivraisonCltAjouterController.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchBLCltAjouter() + { + ProgressBarBLCltAjouter.setVisible(true); + + ButtonSearchBLCltAjouter.setDisable(true); + + ThreadSearchBLCltAjouter = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateCreation = ""; + if(DatePickerCreation.getValue() != null){ + DateCreation = DatePickerCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListBLCltAjouters = new CommandeCltDB().SearchCommandeCltNotBonLivrison( + position, + nbrligne, + TextFieldCodeCommande.getText(), + DateCreation, + TypeRegement); + + TableViewCommande.setItems(ListBLCltAjouters); + + totalcount = new CommandeCltDB().nbrCommandeCltNotBonLivrison(TextFieldCodeCommande.getText(), DateCreation, TypeRegement); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchBLCltAjouter.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarBLCltAjouter.setVisible(false); + ButtonSearchBLCltAjouter.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchBLCltAjouter.start(); + } + + + private void NextLastSearchBLCltAjouter(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarBLCltAjouter.setVisible(true); + + ButtonSearchBLCltAjouter.setDisable(true); + + ThreadSearchBLCltAjouter = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateCreation = ""; + if(DatePickerCreation.getValue() != null){ + DateCreation = DatePickerCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListBLCltAjouters = new CommandeCltDB().SearchCommandeCltNotBonLivrison(ParmPosition, ParamNbrligne, TextFieldCodeCommande.getText(), DateCreation, TypeRegement); + + TableViewCommande.setItems(ListBLCltAjouters); + + return null; + } + }; + } + }; + + ThreadSearchBLCltAjouter.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarBLCltAjouter.setVisible(false); + ButtonSearchBLCltAjouter.setDisable(false); + } + }); + ThreadSearchBLCltAjouter.start(); + } + + private void GestionSearchBLCltAjouter() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchBLCltAjouter(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchBLCltAjouter(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchBLCltAjouter(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } +} diff --git a/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape2Controller.java b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape2Controller.java new file mode 100644 index 0000000..21fcc0d --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape2Controller.java @@ -0,0 +1,299 @@ +/* + * 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 Controllers.BonLivraisonClt; + +import Controllers.Dialog.Dialog; +import Controllers.Traitement.Adaptateur; +import Models.Produit.ListeProduit; +import Controllers.Traitement.contro; +import Models.BonLivraisonClt.BonLivraisonClt; +import Models.BonLivraisonClt.BonLivraisonCltDB; +import Models.BonLivraisonClt.BonLivraisonCltProduitList; +import Models.CommandeClt.CommandeClt; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.text.Text; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.CommandeClt.CommandeCltDB; +import java.io.IOException; +import java.time.LocalDate; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXMLLoader; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.util.Callback; + + +/** + * FXML Controller class + * + * @author Maher + */ +public class BonLivraisonCltAjouterEtape2Controller implements Initializable { + + @FXML private AnchorPane AnchorPaneBLCltAjouterEtape2; + + @FXML private Text TextType; + @FXML private Text TextCode; + @FXML private Text TextNom; + @FXML private Text TextPrenom; + @FXML private Text TextAdresse; + @FXML private Text TextDateNaissance; + @FXML private Text TextTele1; + @FXML private Text TextTele2; + @FXML private Text TxtPrenom; + @FXML private Text TxtDateNaissance; + + @FXML public TableView TableViewBonLivraisonCltProduitList; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColDesignation ; + @FXML public TableColumn TabColMarque; + @FXML public TableColumn TabColCategorie; + @FXML public TableColumn TabColProdDisponible; + @FXML public TableColumn TabColQuantite; + @FXML public TableColumn TabColPrixTTC; + + @FXML private TextField TextFieldHeurLivraison ; + @FXML private TextField TextFieldNumTele1 ; + @FXML private TextField TextFieldNumTele2 ; + @FXML private TextField TextFieldTransporteur ; + @FXML private TextField TextFieldPoidProduit; + @FXML private DatePicker DatePickerDateLivraison; + @FXML private TextArea TextAreaAdressLivraison; + @FXML private TextField TextFieldFraisTransport ; + + ObservableList ObservableListBLCltPro = FXCollections.observableArrayList(); + BonLivraisonClt BonLivraison = new BonLivraisonClt(); + Text Txt = new Text(); + + contro clt = new contro(); + + public CommandeClt Commande; + + boolean DisponibleProduit = true; + + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColReference.setCellValueFactory(new PropertyValueFactory("Reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("Designation")); + TabColMarque.setCellValueFactory(new PropertyValueFactory("Marque")); + TabColCategorie.setCellValueFactory(new PropertyValueFactory("Categorie")); + + TabColProdDisponible.setCellValueFactory(new PropertyValueFactory("ProdDisponible")); + TabColProdDisponible.setStyle( "-fx-alignment: CENTER;"); + TabColProdDisponible.getStyleClass().add("Center"); + + TabColQuantite.setStyle( "-fx-alignment: CENTER;"); + TabColQuantite.getStyleClass().add("Center"); + TabColQuantite.setCellValueFactory(new PropertyValueFactory("QuantiteProd")); + + TabColPrixTTC.setStyle( "-fx-alignment: CENTER;"); + TabColPrixTTC.getStyleClass().add("Center"); + TabColPrixTTC.setCellValueFactory(new PropertyValueFactory("PrixTTC")); + + TabColProdDisponible.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if(item!= null && item.equals("1")){ + Text text = new Text("Oui"); + text.setFill(Color.web("#428BCA")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else if(item!= null && item.equals("0")){ + DisponibleProduit = false; + Text text = new Text("Non"); + text.setFill(Color.web("#EA4335")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TextFieldFraisTransport.setText("0"); + } + + @FXML + private void CreateBonLivraisonCltButtonAction(ActionEvent event) throws IOException { + if( clt.ContrNumerique(TextFieldNumTele1, Txt) && + clt.ContrNumerique(TextFieldNumTele2, Txt) && + clt.ContrNumerique(TextFieldPoidProduit, Txt) && + clt.ContrNull(TextAreaAdressLivraison, Txt)&& + clt.ContrHour(TextFieldHeurLivraison, Txt) ){ + if(DisponibleProduit){ + NextEtap(); + }else{ + final Dialog MyDialog= new Dialog(); + Node node = MyDialog.DialogNotification(); + MyDialog.Titre.setText("Attention produit non disponible en stock"); + MyDialog.Message.setText("Lorsque vous cliquez sur Valider votre stock sera négative"); + MyDialog.DefaultAnnuler(); + MyDialog.Valider.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + MyDialog.PaneDialog.setVisible(false); + NextEtap(); + } + }); + MyDialog.Show(node); + } + } + } + + public void SetBonLivraision(){ + BonLivraison.setTele1(TextFieldNumTele1.getText()); + BonLivraison.setTele2(TextFieldNumTele2.getText()); + BonLivraison.setHeurLivraison(TextFieldHeurLivraison.getText()); + if(DatePickerDateLivraison.getValue()!=null){ + BonLivraison.setDateLivraisonPreveu(DatePickerDateLivraison.getValue().toString()); + } + BonLivraison.setTransporteur(TextFieldTransporteur.getText()); + BonLivraison.setPoidProduit(TextFieldPoidProduit.getText()); + BonLivraison.setAdresseLivraison(TextAreaAdressLivraison.getText()); + BonLivraison.setFrais(TextFieldFraisTransport.getText()); + + if(clt.isNumericNotnull(TextFieldFraisTransport.getText())){ + float PayerAFraisT = Adaptateur.StringToFloat(BonLivraison.getNetAPayer()); + float FraisTransport = Adaptateur.StringToFloat(TextFieldFraisTransport.getText()); + float NetAPayer = PayerAFraisT + FraisTransport; + BonLivraison.setNetAPayer(Adaptateur.floatDeleZero(NetAPayer)); + } + + } + + + public void NextEtap(){ + try { + ConvertCommandeToBonLivraision(); + SetBonLivraision(); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltAjouterEtape3.fxml")); + Parent NodeBonLivraisonCltAjouterEtape3 = (Parent)fxmlLoader.load(); + + BonLivraisonCltAjouterEtape3Controller BonLivraisonCltAjouterEtape3= fxmlLoader.getController(); + BonLivraisonCltAjouterEtape3.BonLivraisonStep2ToStep3(BonLivraison, Commande.getCodecommandeclt()); + + AnchorPaneBLCltAjouterEtape2.getChildren().clear(); + AnchorPaneBLCltAjouterEtape2.getChildren().add(NodeBonLivraisonCltAjouterEtape3); + } catch (IOException ex) { + Logger.getLogger(BonLivraisonCltAjouterEtape2Controller.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public void ConvertCommandeToBonLivraision(){ + BonLivraison.setIdCommande(Commande.getCodecommandeclt()); + //0 Personne 1 Entreprise 2 Passager + Integer TypeClt = Commande.getTypeClient(); + BonLivraison.setTypeClient(TypeClt); + if(TypeClt == 0){ + BonLivraison.setCltPersonne(Commande.getCltPersonne()); + BonLivraison.setAdresseLivraison(Commande.CltPersonne.getAdresse()); + }else if(TypeClt == 1){ + BonLivraison.setCltEntreprise(Commande.getCltEntreprise()); + BonLivraison.setAdresseLivraison(Commande.CltEntreprise.getAdresse()); + }else if(TypeClt == 2){ + BonLivraison.setCltPassager(Commande.getCltPassager()); + BonLivraison.setAdresseLivraison(Commande.CltPassager.getAdresse()); + } + + BonLivraison.setListeproduit(Commande.getListeproduit()); + BonLivraison.setTotalHorsTaxNet(Commande.getTotalHorsTaxNet()); + BonLivraison.setTotalTVA(Commande.getTotalTVA()); + BonLivraison.setRemise(Commande.getRemise()); + BonLivraison.setNetAPayer(Commande.getNetAPayer()); + } + + + + public void SetDataCommandeClt(String CodeCommande){ + CommandeCltDB CommandeDB= new CommandeCltDB(); + Commande = CommandeDB.getCommandeClt(CodeCommande); + Integer TypeClient = Commande.getTypeClient(); + if(TypeClient == 0){ + Client Personne= Commande.getCltPersonne(); + TextType.setText("ancien client"); + TextCode.setText(Personne.getCodeclient()); + TextNom.setText(Personne.getNom()); + TextPrenom.setText(Personne.getPrenom()); + TextAdresse.setText(Personne.getAdresse()); + TextAreaAdressLivraison.setText(Personne.getAdresse()); + TextDateNaissance.setText(Adaptateur.NormalDateFormat(Personne.getNaissance().toString())); + TextTele1.setText(Personne.getTelefixString()); + TextTele2.setText(Personne.getTelemobileString()); + TextFieldNumTele1.setText(Personne.getTelefixString()); + TextFieldNumTele2.setText(Personne.getTelemobileString()); + }else if(TypeClient == 1){ + ClientEntreprise Entreprise = Commande.getCltEntreprise(); + TextType.setText("Entrepise"); + TextCode.setText(Entreprise.getCodeString()); + TxtPrenom.setText("Matricule"); + TextPrenom.setText(Entreprise.getMatricule()); + TxtDateNaissance.setText("E-Mail"); + TextDateNaissance.setText(Entreprise.getMail()); + TextNom.setText(Entreprise.getNom()); + TextAdresse.setText(Entreprise.getAdresse()); + TextAreaAdressLivraison.setText(Entreprise.getAdresse()); + TextTele1.setText(Entreprise.getTele1String()); + TextTele2.setText(Entreprise.getTele2String()); + TextFieldNumTele1.setText(Entreprise.getTele1String()); + TextFieldNumTele2.setText(Entreprise.getTele2String()); + }else if(TypeClient == 2){ + ClientPassager Passager = Commande.getCltPassager(); + TextType.setText("Passager"); + TextCode.setText(Passager.getCodeclient()); + TextNom.setText(Passager.getNom()); + TextPrenom.setText(Passager.getPrenom()); + TextAdresse.setText(Passager.getAdresse()); + TextAreaAdressLivraison.setText(Passager.getAdresse()); + TextDateNaissance.setText(Passager.getNaissance()); + TextTele1.setText(Passager.getTelefixString()); + TextTele2.setText(Passager.getTelemobileString()); + TextFieldNumTele1.setText(Passager.getTelefixString()); + TextFieldNumTele2.setText(Passager.getTelemobileString()); + } + + DatePickerDateLivraison.setValue(LocalDate.now()); + + SetDataListeproduit(); + } + + public void SetDataListeproduit(){ + ObservableList DataListeproduit = Commande.getListeproduit(); + + BonLivraisonCltDB BonLivraisonDB= new BonLivraisonCltDB(); + ObservableListBLCltPro = BonLivraisonDB.GetListBonLivraisonCltSotck(DataListeproduit); + + TableViewBonLivraisonCltProduitList.setItems(ObservableListBLCltPro); + + } +} diff --git a/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape3Controller.java b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape3Controller.java new file mode 100644 index 0000000..78bdf38 --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape3Controller.java @@ -0,0 +1,81 @@ +/* + * 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 Controllers.BonLivraisonClt; + +import Models.BonLivraisonClt.BonLivraisonClt; +import Models.BonLivraisonClt.BonLivraisonCltDB; +import Models.CommandeClt.CommandeCltDB; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.image.ImageView; +import javafx.scene.layout.GridPane; +import javafx.scene.text.Text; + +/** + * + * @author Maher + */ +public class BonLivraisonCltAjouterEtape3Controller implements Initializable { + + @FXML public ProgressIndicator ProgressBonLivraion; + @FXML public ImageView ImageBonLivraion; + @FXML public GridPane GridPaneBonLivraion; + @FXML public Text TextBonLivraion; + + BonLivraisonClt BonLivraison = new BonLivraisonClt(); + BonLivraisonCltDB BonLivraisonDB = new BonLivraisonCltDB(); + + private String IdBonLivraison; + private String CodeCommandeclt; + private Service ThreadBonLivraison; + + + @Override + public void initialize(URL url, ResourceBundle rb) { + + } + + public void BonLivraisonStep2ToStep3(BonLivraisonClt bon_livraison_clt, String code_commandeclt){ + BonLivraison = bon_livraison_clt; + CodeCommandeclt = code_commandeclt; + LanchSaveBonLivraison(); + } + + public void LanchSaveBonLivraison(){ + ThreadBonLivraison = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call(){ + IdBonLivraison = BonLivraisonDB.AddBonLivraisonClt(BonLivraison); + new CommandeCltDB().UpdateCommandeCltSetIdBonLivraison(CodeCommandeclt, IdBonLivraison); + return null; + } + }; + } + }; + ThreadBonLivraison.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBonLivraion.setVisible(false); + TextBonLivraion.setText("La bon livraison numéro "+IdBonLivraison+" a été enregistrés avec succès"); + ImageBonLivraion.setVisible(true); + //GridPaneBonLivraion.setVisible(true); + } + }); + ThreadBonLivraison.start(); + } + + +} diff --git a/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltDetailController.java b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltDetailController.java new file mode 100644 index 0000000..5edffd4 --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltDetailController.java @@ -0,0 +1,347 @@ +package Controllers.BonLivraisonClt; + +import Controllers.Traitement.MyWindow; +import Models.BonLivraisonClt.BonLivraisonClt; +import Models.BonLivraisonClt.BonLivraisonCltDB; +import Models.Produit.ListeProduit; +import Models.User.Profile; +import Models.User.ProfileDB; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.application.Platform; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.print.PageRange; +import javafx.print.PrinterJob; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Control; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class BonLivraisonCltDetailController{ + + @FXML private TableView TableViewListeProduit ; + @FXML private TableColumn TabColReference; + @FXML private TableColumn TabColDesignation; + @FXML private TableColumn TabColQuantite ; + @FXML private TableColumn TabColPrixHT; + @FXML private TableColumn TabColRemise; + @FXML private TableColumn TabColTotalHT; + @FXML private TableColumn TabColTVA; + @FXML private TableColumn TabColTotalTTC; + + @FXML private TableView TableViewListeProduitTempo ; + @FXML private TableColumn TabColReferenceTempo; + @FXML private TableColumn TabColDesignationTempo; + @FXML private TableColumn TabColQuantiteTempo ; + @FXML private TableColumn TabColPrixHTTempo; + @FXML private TableColumn TabColRemiseTempo; + @FXML private TableColumn TabColTotalHTTempo; + @FXML private TableColumn TabColTVATempo; + @FXML private TableColumn TabColTotalTTCTempo; + + + @FXML public AnchorPane AnchorPrincipal ; + @FXML public AnchorPane AnchorSecondaire ; + @FXML private ProgressIndicator ProgressBonLivraion ; + + @FXML public Text TextIdBonLivraison ; + + @FXML private Text TextTypeClt ; + @FXML private Text TextNom ; + @FXML private Text TextPrenom ; + @FXML private Text TextAdressClt ; + + @FXML private Text TextDateCreation ; + @FXML private Text TextLocale ; + @FXML private Text TextNomPrenomProfile ; + + @FXML private Text TextHeurLivraison ; + @FXML private Text TextDateLivraison ; + @FXML private Text TextTransporteur ; + @FXML private Text TextFraisLivraison ; + @FXML private Text TextAdressLivraison ; + + private Service ThreadBonLivraison; + public Node nodeFxml; + public String IdBonLivraison; + + ObservableList> items = FXCollections.>observableArrayList(); + int TotalHeightPage = 0; + + BonLivraisonClt BonLivraison = new BonLivraisonClt(); + Profile profile = new Profile(); + + public BonLivraisonCltDetailController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltDetail.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(BonLivraisonCltDetailController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public void SetIdBonLivraison(String id_bon_livraison){ + IdBonLivraison = id_bon_livraison; + + TableViewListeProduit.setEditable(true); + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColReference.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColQuantite.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColRemise.setCellFactory(TextFieldTableCell.forTableColumn()); + + initializeTempo(); + + LanchBonLivraison(); + } + + public void LanchBonLivraison(){ + ThreadBonLivraison = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + BonLivraison = new BonLivraisonCltDB().GetBonLivraisonClt(IdBonLivraison); + profile = new ProfileDB().getpro(Integer.parseInt(BonLivraison.getIdProfileEditeur())); + return null; + } + }; + } + }; + ThreadBonLivraison.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + TextIdBonLivraison.setText(BonLivraison.getIdBonLivrasionClt()); + + //0 Personne 1 Entreprise 2 Passager + if(BonLivraison.getTypeClient() == 0){ + TextTypeClt.setText("Ancien client") ; + TextNom.setText(BonLivraison.CltPersonne.getNom()) ; + TextPrenom.setText(BonLivraison.CltPersonne.getPrenom()) ; + TextAdressClt.setText(BonLivraison.CltPersonne.getAdresse()); + }else if(BonLivraison.getTypeClient() == 1){ + TextTypeClt.setText("Entreprise") ; + TextNom.setText(BonLivraison.CltEntreprise.getNom()) ; + TextPrenom.setText(BonLivraison.CltEntreprise.getMatricule()) ; + TextAdressClt.setText(BonLivraison.CltEntreprise.getAdresse()); + }else if(BonLivraison.getTypeClient() == 2){ + TextTypeClt.setText("Passager") ; + TextNom.setText(BonLivraison.CltPassager.getNom()) ; + TextPrenom.setText(BonLivraison.CltPassager.getPrenom()) ; + TextAdressClt.setText(BonLivraison.CltPassager.getAdresse()); + } + + TextNomPrenomProfile.setText(profile.getNom()+" "+profile.getPrenom()) ; + + TextDateCreation.setText(BonLivraison.getDateCreation()) ; + TextLocale.setText(BonLivraison.getLocalNom()) ; + + TextHeurLivraison.setText(BonLivraison.getHeurLivraison()) ; + TextDateLivraison.setText(BonLivraison.getDateLivraisonPreveu()) ; + TextTransporteur.setText(BonLivraison.getTransporteur()) ; + TextFraisLivraison.setText(BonLivraison.getFrais()) ; + TextAdressLivraison.setText(BonLivraison.getAdresseLivraison()) ; + + ObservableList DataListeProduit = BonLivraison.getListeproduit(); + TableViewListeProduit.setItems(DataListeProduit); + TableViewListeProduitTempo.setItems(DataListeProduit); + + ProgressBonLivraion.setVisible(false); + AnchorSecondaire.setVisible(true); + } + }); + ThreadBonLivraison.start(); + } + + + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Stage stage = MyWindow.myStage; + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + stage.setScene(scene); + stage.show(); + } + + @FXML + private void ExitButtonAction(ActionEvent event) throws IOException { + AnchorPrincipal.setVisible(false); + } + + + @FXML + private void PDFBonLivraisonCltButtonAction(ActionEvent event) throws IOException { + + } + + + private void initializeTempo() + { + TabColReferenceTempo.setCellValueFactory(new PropertyValueFactory("reference")); + TabColReferenceTempo.setStyle( "-fx-alignment: CENTER;"); + TabColReferenceTempo.getStyleClass().add("Center"); + + TabColDesignationTempo.setCellValueFactory(new PropertyValueFactory("designation")); + TabColDesignationTempo.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if (item == null) { + super.setText(null); + super.setGraphic(null); + } else { + String newItem = item.trim().toLowerCase(); + Text text = new Text(newItem); + super.setPrefHeight(Control.USE_COMPUTED_SIZE); + text.wrappingWidthProperty().bind(super.widthProperty()); + super.setGraphic(text); + Platform.runLater(new Runnable() { + @Override + public void run() { + int selectdIndex = getTableRow().getIndex(); + + if(selectdIndex>=0){ + Map item1 = new HashMap<>(); + item1.put("produit", (ListeProduit) getTableRow().getItem()); + item1.put("designation", newItem); + item1.put("height", text.getBoundsInLocal().getHeight()); + items.add(item1); + TotalHeightPage += text.getBoundsInLocal().getHeight(); + } + } + }); + } + } + }; + return cell; + } + }); + + + + TabColQuantiteTempo.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantiteTempo.setStyle( "-fx-alignment: CENTER;"); + TabColQuantiteTempo.getStyleClass().add("Center"); + + TabColPrixHTTempo.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHTTempo.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHTTempo.getStyleClass().add("Center"); + + TabColRemiseTempo.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemiseTempo.setStyle( "-fx-alignment: CENTER;"); + TabColRemiseTempo.getStyleClass().add("Center"); + + TabColTotalHTTempo.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHTTempo.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHTTempo.getStyleClass().add("Center"); + + TabColTVATempo.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVATempo.setStyle( "-fx-alignment: CENTER;"); + TabColTVATempo.getStyleClass().add("Center"); + + TabColTotalTTCTempo.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTCTempo.setStyle( "-fx-alignment: CENTER;"); + TabColTotalTTCTempo.getStyleClass().add("Center"); + + TabColReferenceTempo.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColQuantiteTempo.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColRemiseTempo.setCellFactory(TextFieldTableCell.forTableColumn()); + } + + + + @FXML + private void PrintBonLivraisonCltButtonAction(ActionEvent event) throws IOException { + + ObservableList ListProd = BonLivraison.getListeproduit(); + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + + try { + + jobPrint.getJobSettings().setPageRanges(new PageRange(1, 1)); + + if (jobPrint.showPrintDialog(null)) { + + FXMLLoader fxmlLoaderPrintLivraison = new FXMLLoader(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltPrint.fxml")); + final Node ParentFxmlPrintLivraison = (Node)fxmlLoaderPrintLivraison.load(); + BonLivraisonCltPrintController PrintLivraison = fxmlLoaderPrintLivraison.getController(); + + PrintLivraison.setBonLivraisonClt(BonLivraison, ListProd, "1/1", true); + + jobPrint.printPage(ParentFxmlPrintLivraison); + + jobPrint.endJob(); + } + } catch (IOException ex) { + System.err.println("BondeEntrerDetailController PrintBonEntreButtonAction ! \n"+ex.getMessage()); + } + + + } + + +} diff --git a/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltGestionController.java b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltGestionController.java new file mode 100644 index 0000000..bff51f0 --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltGestionController.java @@ -0,0 +1,379 @@ +package Controllers.BonLivraisonClt; + +import Models.BonLivraisonClt.BonLivraisonCltDB; +import Models.BonLivraisonClt.BonLivraisonCltGestionList; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; + +import java.net.URL; +import java.util.ResourceBundle; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * + * @author maher + */ +public class BonLivraisonCltGestionController implements Initializable { + + @FXML private AnchorPane PaneBonLivraisonCltGestion; + + @FXML private ProgressBar ProgressBarBonLivraisonClt; + + @FXML private Button ButtonSearchBonLivraisonClt; + + @FXML public TableView TableViewBonLivraisonCltListGestion; + @FXML public TableColumn TabColIdBonLivrasionClt; + @FXML public TableColumn TabColDateHeurLivraison ; + @FXML public TableColumn TabColAdresseLivraison; + @FXML public TableColumn TabColCodeClt; + @FXML public TableColumn TabColIdFactureClt ; + @FXML public TableColumn TabColTransporteur; + @FXML public TableColumnTabColBlDetail ; + + @FXML public TextField TextFieldIdBonLivrasionClt ; + @FXML public DatePicker DatePickerDateLivraison; + @FXML public TextField TextFieldCodeClt; + @FXML public TextField TextFieldIdFactureClt; + @FXML public TextField TextFieldTransporteur; + @FXML public TextField TextFieldAdresseLivraison; + + @FXML private AnchorPane ListerPages; + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + private Service ThreadSearchBonLivraisonClt; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + //comboboxnombre des lignes tableview + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TableViewBonLivraisonCltListGestion.setEditable(true); + + TabColIdBonLivrasionClt.setStyle( "-fx-alignment: CENTER;");TabColIdBonLivrasionClt.getStyleClass().add("Center"); + TabColIdBonLivrasionClt.setCellValueFactory(new PropertyValueFactory("IdBonLivrasionClt")); + + TabColDateHeurLivraison.setStyle( "-fx-alignment: CENTER;");TabColDateHeurLivraison.getStyleClass().add("Center"); + TabColDateHeurLivraison.setCellValueFactory(new PropertyValueFactory("DateHeurLivraison")); + + TabColAdresseLivraison.setStyle( "-fx-alignment: CENTER;");TabColAdresseLivraison.getStyleClass().add("Center"); + TabColAdresseLivraison.setCellValueFactory(new PropertyValueFactory("AdresseLivraison")); + + TabColCodeClt.setStyle( "-fx-alignment: CENTER;");TabColCodeClt.getStyleClass().add("Center"); + TabColCodeClt.setCellValueFactory(new PropertyValueFactory("CodeClt")); + + TabColIdFactureClt.setStyle( "-fx-alignment: CENTER;");TabColIdFactureClt.getStyleClass().add("Center"); + TabColIdFactureClt.setCellValueFactory(new PropertyValueFactory("IdFactureClt")); + + TabColTransporteur.setStyle( "-fx-alignment: CENTER;");TabColTransporteur.getStyleClass().add("Center"); + TabColTransporteur.setCellValueFactory(new PropertyValueFactory("Transporteur")); + + TabColBlDetail.setStyle( "-fx-alignment: CENTER;");TabColBlDetail.getStyleClass().add("Center"); + TabColBlDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + + ButtonSearchBonLivraisonClt.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchBonLivraisonClt(); + } + }); + + PaneBonLivraisonCltGestion.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchBonLivraisonClt(); + } + } + }); + + GestionSearchBonLivraisonClt(); + } + + + @FXML + private void AjouterBonLivraisonCltButtonAction(ActionEvent event) throws IOException { + PaneBonLivraisonCltGestion.getChildren().clear(); + PaneBonLivraisonCltGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltAjouter.fxml"))); + } + + + private class ButtonCell extends TableCell { + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + BonLivraisonCltGestionList current = (BonLivraisonCltGestionList) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + String IdBonLivrasionClt = current.getIdBonLivrasionClt(); + + BonLivraisonCltDetailController BonLivraisonCltDetail = new BonLivraisonCltDetailController(); + BonLivraisonCltDetail.Show(); + BonLivraisonCltDetail.SetIdBonLivraison(IdBonLivrasionClt); + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + + +/****************************************************************************** * + * * + * Methode last Next TableView client Entreprise * + * * * + ******************************************************************************/ + + private void SearchBonLivraisonClt() + { + ProgressBarBonLivraisonClt.setVisible(true); + + ButtonSearchBonLivraisonClt.setDisable(true); + + ThreadSearchBonLivraisonClt = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateLivraison = ""; + if(DatePickerDateLivraison.getValue() != null){ + DateLivraison = DatePickerDateLivraison.getValue().toString(); + } + + ObservableList ListBonLivraisonClts = new BonLivraisonCltDB().SearchBonLivraisonCltGestion( + position, + nbrligne, + TextFieldIdBonLivrasionClt.getText(), + DateLivraison, + TextFieldCodeClt.getText(), + TextFieldIdFactureClt.getText(), + TextFieldTransporteur.getText(), + TextFieldAdresseLivraison.getText()); + + TableViewBonLivraisonCltListGestion.setItems(ListBonLivraisonClts); + + totalcount = new BonLivraisonCltDB().nbrSearchBonLivraisonCltGestion(TextFieldIdBonLivrasionClt.getText(), DateLivraison, TextFieldCodeClt.getText(), TextFieldIdFactureClt.getText(), TextFieldTransporteur.getText(), TextFieldAdresseLivraison.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchBonLivraisonClt.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarBonLivraisonClt.setVisible(false); + ButtonSearchBonLivraisonClt.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchBonLivraisonClt.start(); + } + + + private void NextLastSearchBonLivraisonClt(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarBonLivraisonClt.setVisible(true); + + ButtonSearchBonLivraisonClt.setDisable(true); + + ThreadSearchBonLivraisonClt = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateLivraison = ""; + if(DatePickerDateLivraison.getValue() != null){ + DateLivraison = DatePickerDateLivraison.getValue().toString(); + } + + ObservableList ListBonLivraisonClts = new BonLivraisonCltDB().SearchBonLivraisonCltGestion(ParmPosition, ParamNbrligne, TextFieldIdBonLivrasionClt.getText(), DateLivraison, TextFieldCodeClt.getText(), TextFieldIdFactureClt.getText(), TextFieldTransporteur.getText(), TextFieldAdresseLivraison.getText()); + + TableViewBonLivraisonCltListGestion.setItems(ListBonLivraisonClts); + + return null; + } + }; + } + }; + + ThreadSearchBonLivraisonClt.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarBonLivraisonClt.setVisible(false); + ButtonSearchBonLivraisonClt.setDisable(false); + } + }); + ThreadSearchBonLivraisonClt.start(); + } + + private void GestionSearchBonLivraisonClt() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchBonLivraisonClt(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchBonLivraisonClt(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchBonLivraisonClt(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } +} diff --git a/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltPrintController.java b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltPrintController.java new file mode 100644 index 0000000..4477b89 --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltPrintController.java @@ -0,0 +1,242 @@ +/* + * 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 Controllers.BonLivraisonClt; + +import Controllers.Traitement.Adaptateur; +import static Controllers.Traitement.Adaptateur.StringToStringEspaceCurrency; +import static Controllers.Traitement.Adaptateur.StringToStringEspace; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.BonLivraisonClt.BonLivraisonClt; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.Produit.ListeProduit; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.Control; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Callback; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class BonLivraisonCltPrintController implements Initializable { + + @FXML private AnchorPane AnchorPaneTotal; + + @FXML public ImageView ImageViewLogo; + + @FXML private Text TextSteNom; + @FXML private Text TextSteAdress; + @FXML private Text TextSteTeleFax; + @FXML private Text TextSteIFCR; + @FXML private Text TextSteRIB; + @FXML private Text TextSteEmailSite; + + @FXML private Text TextNumBonLivraison; + @FXML private Text TextDateBonLivraison; + @FXML private Text TextNumCommande; + + @FXML private Text TextCltNomPrenom; + @FXML private Text TextCltTele; + @FXML private Text TextCltAdress; + + @FXML private TableView TableViewListeProduit ; + @FXML private TableColumn TabColReference; + @FXML private TableColumn TabColDesignation; + @FXML private TableColumn TabColQuantite ; + @FXML private TableColumn TabColPrixHT; + @FXML private TableColumn TabColRemise; + @FXML private TableColumn TabColTotalHT; + @FXML private TableColumn TabColTVA; + @FXML private TableColumn TabColTotalTTC; + + + @FXML private Text TextTotalRemise; + @FXML private Text TextTotalHT; + @FXML private Text TextTotalTVA; + @FXML private Text TexFraisTransport; + @FXML private Text TextNetPayer; + + @FXML private Text TextPagination; + + contro clt = new contro(); + + @Override + public void initialize(URL url, ResourceBundle rb) { + + setImageLogo(); + + TextSteNom.setText(ParametreSystem.CompanyName); + TextSteAdress.setText(ParametreSystem.CompanyAddress); + TextSteTeleFax.setText(ParametreSystem.CompanyTele+" | Fax: "+ParametreSystem.CompanyFax); + TextSteIFCR.setText(ParametreSystem.CompanyIF+" | M.F: "+ParametreSystem.CompanyMF); + TextSteRIB.setText(ParametreSystem.RIB); + TextSteEmailSite.setText(ParametreSystem.CompanyMail+" | Site:"+ParametreSystem.CompanySite); + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColReference.setStyle( "-fx-alignment: CENTER;"); + TabColReference.getStyleClass().add("Center"); + + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + TabColDesignation.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if (item == null) { + super.setText(null); + super.setGraphic(null); + } else { + String newItem = item.trim().toLowerCase(); + Text text = new Text(newItem); + super.setPrefHeight(Control.USE_COMPUTED_SIZE); + text.wrappingWidthProperty().bind(super.widthProperty()); + super.setGraphic(text); + } + } + }; + return cell; + } + }); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColReference.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColQuantite.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColRemise.setCellFactory(TextFieldTableCell.forTableColumn()); + } + + public void setBonLivraisonClt(BonLivraisonClt BonLivraison, ObservableList ListProd, String Pagination, boolean PaneTotalVisible) { + + TextNumBonLivraison.setText("N°"+BonLivraison.getIdBonLivrasionClt()); + TextNumCommande.setText(BonLivraison.getIdCommande()); + TextDateBonLivraison.setText(Adaptateur.NormalDateFormat(BonLivraison.getDateLivraisonPreveu())); + + TextPagination.setText(Pagination); + + String AdressClt = ""; + //0 Personne 1 Entreprise 2 Passager + if(BonLivraison.getTypeClient() == 0){ + Client CltPersonne = BonLivraison.getCltPersonne(); + TextCltNomPrenom.setText(CltPersonne.getCodeclient()+" - "+CltPersonne.getPrenom()+" "+CltPersonne.getNom()); + AdressClt = CltPersonne.getAdresse(); + if( (!clt.isStringNull(CltPersonne.getTelemobileString())) && (!clt.isStringNull(CltPersonne.getTelefixString())) ) { + TextCltTele.setText(CltPersonne.getTelemobile()+" | "+CltPersonne.getTelefix()); + }else if(!clt.isStringNull(CltPersonne.getTelemobileString())){ + TextCltTele.setText(CltPersonne.getTelemobileString()); + }else if(!clt.isStringNull(CltPersonne.getTelefixString())){ + TextCltTele.setText(CltPersonne.getTelefixString()); + } + }else if(BonLivraison.getTypeClient() == 1){ + ClientEntreprise CltEntreprise = BonLivraison.getCltEntreprise(); + TextCltNomPrenom.setText(CltEntreprise.getCodeString()+" - "+CltEntreprise.getNom()); + TextCltTele.setText(CltEntreprise.getTele1()+" | "+CltEntreprise.getTele2()); + AdressClt = CltEntreprise.getAdresse(); + }else if(BonLivraison.getTypeClient() == 2){ + ClientPassager CltPassager = BonLivraison.getCltPassager(); + TextCltNomPrenom.setText(CltPassager.getCodeclient()+" - "+CltPassager.getNom()+" "+CltPassager.getPrenom()); + TextCltTele.setText(CltPassager.getTelemobile()+" | "+CltPassager.getTelefix()); + AdressClt = CltPassager.getAdresse(); + } + + if(clt.isNumericNotnull(BonLivraison.getAdresseLivraison())){ + TextCltAdress.setText(BonLivraison.getAdresseLivraison()); + }else{ + TextCltAdress.setText(AdressClt); + } + + TextTotalHT.setText(StringToStringEspace(BonLivraison.getTotalHorsTaxNet())); + TextTotalTVA.setText(StringToStringEspace(BonLivraison.getTotalTVA())); + TextTotalRemise.setText(StringToStringEspace(BonLivraison.getRemise())); + TexFraisTransport.setText(StringToStringEspace(BonLivraison.getFrais())); + TextNetPayer.setText(StringToStringEspaceCurrency(BonLivraison.getNetAPayer())); + + TableViewListeProduit.setItems(ListProd); + + AnchorPaneTotal.setVisible(PaneTotalVisible); + } + + + private void setImageLogo() + { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + try { + // optional, but recommended + // process XML securely, avoid attacks like XML External Entities (XXE) + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + + // parse XML file + DocumentBuilder db = dbf.newDocumentBuilder(); + + //PowerERP\conf\logo.xml + Document doc = db.parse(new File("./conf/logo.xml")); + + doc.getDocumentElement().normalize(); + + Element elementCNX = (Element) doc.getElementsByTagName("BonLivraisonCltPrint").item(0); + + String pathLogo = elementCNX.getElementsByTagName("PathImage").item(0).getTextContent(); + FileInputStream fis = new FileInputStream(pathLogo); + ImageViewLogo.setImage(new Image(fis)); + + ImageViewLogo.setFitWidth(Double.parseDouble(elementCNX.getElementsByTagName("FitWidth").item(0).getTextContent())); + ImageViewLogo.setFitHeight(Double.parseDouble(elementCNX.getElementsByTagName("FitHeight").item(0).getTextContent())); + ImageViewLogo.setLayoutX(Double.parseDouble(elementCNX.getElementsByTagName("LayoutX").item(0).getTextContent())); + ImageViewLogo.setLayoutY(Double.parseDouble(elementCNX.getElementsByTagName("LayoutY").item(0).getTextContent())); + } + catch (ParserConfigurationException | SAXException | IOException e) { + System.out.println("error AuthentificationController/setImageLogo "+e.getMessage()); + } + } + +} diff --git a/src/main/java/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController.java b/src/main/java/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController.java new file mode 100644 index 0000000..d2de53e --- /dev/null +++ b/src/main/java/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController.java @@ -0,0 +1,624 @@ +/* + * 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 Controllers.BonReceptionFrs; + +import Controllers.CommandeClt.CommandeCltPasserController; +import Controllers.Dialog.MessageControle; +import Controllers.Produit.RechercherProduitController; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.contro; +import Models.BonReceptionFrs.BonReceptionDB; +import Models.BonReceptionFrs.BonReceptionFrs; +import Models.BonReceptionFrs.BonReceptionProduitList; +import Models.Fournisseur.Fournisseur; +import Models.Fournisseur.FournisseurDB; +import Models.Produit.ListeProduit; +import Models.Produit.Produit; +import Models.Produit.ProduitDB; +import Models.Stock.StockDB; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.application.Platform; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; +import org.controlsfx.control.textfield.TextFields; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class BonReceptionAjouterFrsController implements Initializable { + + @FXML public AnchorPane PaneBonReceptionAjouterFrs ; + @FXML public Text NetAPayer ; + @FXML public Button RechercheProduit ; + @FXML public Button ButtonBonReceptionAjouter; + + @FXML public TableView TableViewListeProduit ; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColDesignaton; + @FXML public TableColumn TabColQuantite ; + @FXML public TableColumn TabColPrixHT; + @FXML public TableColumn TabColTotalHT; + @FXML public TableColumn TabColTVA; + @FXML public TableColumn TabColTotalTTC; + @FXML public TableColumn TabColAddAction ; + + + @FXML public TextField TextFieldNumero ; + @FXML public TextField TextFieldTransporteur ; + @FXML public TextField TextFieldHeur ; + @FXML private TextField TextFieldFournisseur ; + @FXML public DatePicker DatePickerDateReception; + + + @FXML public ChoiceBox ChoiceBoxLocalReception ; + + @FXML public Text TextNumero ; + @FXML public Text TextHeur ; + @FXML public Text TextDateReception; + @FXML public Text TextFournisseur ; + @FXML public Text TextLocalReception ; + + @FXML public ProgressIndicator ProgressIndicatorSaveBonReception ; + + public ObservableList data = FXCollections.observableArrayList(); + Produit produit= new Produit(); + ProduitDB produitDB= new ProduitDB(); + contro Controle = new contro(); + + public ArrayList ListFournisseur = new ArrayList<>(); + public ArrayList ListLocale = new ArrayList<>(); + + @Override + public void initialize(URL url, ResourceBundle rb) { + + DatePickerDateReception.setValue(LocalDate.now()); + TextFieldHeur.setText(LocalDateTime.now().getHour()+":"+LocalDateTime.now().getMinute()); + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignaton.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColReference.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColQuantite.setCellFactory(TextFieldTableCell.forTableColumn()); + + TabColAddAction.setSortable(true); + TabColAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new BonReceptionAjouterFrsController.ButtonCell(); + } + }); + TabColAddAction.setStyle( "-fx-alignment: CENTER;"); + TabColAddAction.getStyleClass().add("Center"); + + StockDB Stock = new StockDB(); + ListLocale = Stock.getAllListLocal(); + ChoiceBoxLocalReception.getItems().addAll(ListLocale); + + ListFournisseur = new FournisseurDB().getAllFournisseur("CONCAT(`id_fourisseur`,' - ',`nom`)"); + TextFields.bindAutoCompletion(TextFieldFournisseur, ListFournisseur); + + this.ReferenceMouseClick(); + this.QantiteMouseClick(); + + + TabColAddAction.setSortable(true); + TabColAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new BonReceptionAjouterFrsController.ButtonCell(); + } + }); + + TableViewListeProduit.setItems(data); + + //Ajouter une ligne vide clors ce que en click sur la tableview + TableViewListeProduit.setOnMouseClicked(new EventHandler(){ + public void handle(MouseEvent event){ + int nbrligne = TableViewListeProduit.getItems().size() ; + if(nbrligne == 0){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + } + else{ + ListeProduit Liste = TableViewListeProduit.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + TableViewListeProduit.getSelectionModel().select(nbrligne); + } + } + } + }); + + + ButtonBonReceptionAjouter.setOnAction(new EventHandler() { //supprimer le message du suucés et reaficher les formulaires + @Override + public void handle(ActionEvent event) { + ButtonBonReceptionAjouter.setText(""); + ButtonBonReceptionAjouter.setDisable(true); + ProgressIndicatorSaveBonReception.setVisible(true); + if( Controle.ContrNull(TextFieldNumero, TextNumero) && + Controle.ContrNull(TextFieldFournisseur, TextFournisseur) && + Controle.ContrNullDatePicker(DatePickerDateReception, TextDateReception) && + Controle.ContrHour(TextFieldHeur, TextHeur) && + Controle.ContrNullValue(ChoiceBoxLocalReception, TextLocalReception) + ){ + + Runnable task = new Runnable(){// Create a Runnable + public void run(){ + Platform.runLater(new Runnable(){ + @Override + public void run(){ + if(data.size()>0){ + BonReceptionDB BonRecepDB= new BonReceptionDB(); + String Numero = TextFieldNumero.getText(); + String IdFournisseur = TextFieldFournisseur.getText().split(" - ", -1)[0]; + String IdBonReception = BonRecepDB.getBonReceptionFrs(null, Numero, IdFournisseur).getIdBonReception(); + if(IdBonReception != null){ + TextFieldNumero.setStyle("-fx-border-color:#f20606;"); + TextNumero.setText("Bon réception existe déja"); + }else{ + BonReceptionFrs BonReception = setBonReceptionFrs(); + BonReception = BonRecepDB.setBonReceptionFrsDB(BonReception); + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/BonReceptionFrs/BonReceptionDetailFrs.fxml")); + Parent ParentFxmlFournisseur = (Parent)fxmlLoader.load(); + + BonReceptionDetailFrsController BonReceptionDetailFrs = fxmlLoader.getController(); + BonReceptionDetailFrs.setDataBonReceptionDetailFrs(BonReception.getIdBonReception()); + BonReceptionDetailFrs.PaneSucessFrs.setVisible(true); + PaneBonReceptionAjouterFrs.getChildren().clear(); + PaneBonReceptionAjouterFrs.getChildren().add(ParentFxmlFournisseur); + + }catch (IOException ex) { + Logger.getLogger(BonReceptionDetailFrsController.class.getName()).log(Level.SEVERE, null, ex); + } + } + }else{ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Vous devez ajouter au moin un produit à la liste des produits"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + } + + } + }); + } + }; + Thread backgroundThread = new Thread(task);// Run the task in a background thread + backgroundThread.setDaemon(true);// Terminate the running thread if the application exits + backgroundThread.start();// Start the thread + } + + ButtonBonReceptionAjouter.setText("Enregister La Bon de Réception"); + ButtonBonReceptionAjouter.setDisable(false); + ProgressIndicatorSaveBonReception.setVisible(false); + + } + }); + + } + + + public void getBonReceptionFrs(BonReceptionFrs BonReception) + { + TextFieldNumero.setText(BonReception.getNumero()); + TextFieldHeur.setText(BonReception.getHeur()); + TextFieldTransporteur.setText(BonReception.getTransporteur()); + DatePickerDateReception.setValue(Adaptateur.StringToLocalDate(BonReception.getDate())); + + + Fournisseur Frs = BonReception.getFournisseur(); + if(Frs != null){ + TextFieldFournisseur.setText(Frs.getCode()+" - "+Frs.getNom()); + } + + String Local = BonReception.getLocal(); + if(Local != null){ + int indexLocale = ListLocale.indexOf(Local); + ChoiceBoxLocalReception.getSelectionModel().select(indexLocale); + } + } + + public BonReceptionFrs setBonReceptionFrs() + { + BonReceptionFrs BonReception = new BonReceptionFrs(); + + if(!TextFieldFournisseur.getText().equals("")){ + String[] Fournisseur = TextFieldFournisseur.getText().split(" - ", -1); + Fournisseur Frs = new Fournisseur(); + Frs.setCode(Fournisseur[0]); + Frs.setNom(Fournisseur[1]); + BonReception.setFournisseur(Frs); + } + + + if(DatePickerDateReception.getValue() != null){ + BonReception.setDate(DatePickerDateReception.getValue().toString()); + } + + if(ChoiceBoxLocalReception.getValue() != null){ + BonReception.setLocal(ChoiceBoxLocalReception.getValue().toString()); + } + + BonReception.setHeur(TextFieldHeur.getText()); + + BonReception.setNumero(Adaptateur.addSlashes(TextFieldNumero.getText())); + BonReception.setTransporteur(Adaptateur.addSlashes(TextFieldTransporteur.getText())); + BonReception.setNetPayer(NetAPayer.getText()); + + ObservableList ObservableListBonReceptionFrs = FXCollections.observableArrayList(); + for(ListeProduit liste : data){ + if(!liste.getReference().equals("")){ + ObservableListBonReceptionFrs.add(new BonReceptionProduitList("", "", liste.getReference(), "", liste.getQuantite(), liste.getPrixHT(), liste.getTotalHT(), liste.getTVA(), liste.getTotalTTC())); + } + + } + BonReception.setListProduit(ObservableListBonReceptionFrs); + + return BonReception; + } + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + cellButton.getStyleClass().add("btn-danger"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + int selectdIndex = getTableRow().getIndex(); + data.remove(selectdIndex); + CalculeListeProduit(); + TableViewListeProduit.setStyle(".table-row-cell:selected{ -fx-background-color:transparent ;}"); + + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + + + @FXML + private void AddLigneButtonAction(ActionEvent event) throws IOException { + int nbrligne = TableViewListeProduit.getItems().size() ; + if(nbrligne == 0){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + } + else{ + ListeProduit Liste = TableViewListeProduit.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + TableViewListeProduit.getSelectionModel().select(nbrligne); + } + } + } + + private void ReferenceMouseClick(){ + TabColReference.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + produit = produitDB.getProduit(t.getNewValue()); + if(produit.getReference() != null){ + ListeProduit Liste = new ListeProduit(produit.getReference(),produit.getDesignation(),"1", produit.getPrixachatht(), "0", "", produit.getTvaachat(),"0"); + AffectationTableView(Liste,t.getTablePosition().getRow()) ; + } + else{ + AffectationTableView(new ListeProduit("","","","","","","",""),t.getTablePosition().getRow()) ; + } + + } + }); + } + + private void QantiteMouseClick(){ + TabColQuantite.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newquantite = t.getNewValue() ; + try{ + newquantite = newquantite.replace(',','.'); + if(Float.parseFloat(newquantite)<1){ + newquantite = "1"; + } + } + catch(NumberFormatException nfe){ + newquantite = "1"; + } + + ListeProduit Liste = t.getRowValue() ; + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un quantité dans un ligne vide + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setQuantite(newquantite); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), newquantite,Liste.getPrixHT(), Liste.getRemise(),"",Liste.getTVA(),""); + //NewList = CalculeProduit(NewList); + AffectationTableView(NewList,t.getTablePosition().getRow()) ; + + } + } + }); + } + + + + private void AffectationTableView(ListeProduit ListeProd, int EmplacementLigne){ + boolean result = false ; + int indise=0; + int Position = 0; + + if(data.size()>0){ + do{ //Vérifier si le produit exsiste deja + if(data.get(indise).getReference().equals(ListeProd.getReference())){ + result = true ; + Position = indise ; + //System.out.println("existe Position:"+indise); + } + indise++; + }while(data.size()>indise && !result); + + if(result){ //si la ligne exsite déja + if(EmplacementLigne!= -1){ + if(Position == EmplacementLigne){ + data.set(Position, ListeProd); + } + else{ + data.set(EmplacementLigne, new ListeProduit("","","","","","","","")); + } + } + }else{ + if(EmplacementLigne!= -1){ + data.set(EmplacementLigne, ListeProd); + }else{ + data.add(ListeProd); + } + } + } + else{ + data.add(ListeProd); + } + + CalculeListeProduit(); + + TableViewListeProduit.setItems(data); + TableViewListeProduit.setVisible(false); + TableViewListeProduit.setVisible(true); + } + + private void CalculeListeProduit(){ //calculer et afficher la détail des produits + float netaPayer = 0; + float Remises = 0; + float totalTVA = 0; + float total_H_T_Net= 0; + NetAPayer.setText(""); + + //calcule + for(ListeProduit liste : data){ + float totaht = Adaptateur.StringToFloat(liste.getTotalHT()) ; + float prix_U_H_T = Adaptateur.StringToFloat(liste.getPrixHT()) ; + float remises = Adaptateur.StringToFloat(liste.getRemise().replace("%", "")) ; + float tva = Adaptateur.StringToFloat(liste.getTVA().replace("%", "")); + float qte = Adaptateur.StringToFloat(liste.getQuantite()); + + totalTVA = totalTVA + ((totaht * tva) /100) ; + Remises = Remises + (prix_U_H_T * remises)/100 ; + total_H_T_Net = total_H_T_Net + totaht ; + } + + if(total_H_T_Net>0){ + netaPayer = total_H_T_Net + totalTVA; + NetAPayer.setText(Adaptateur.ArrondFloatToString(netaPayer)); + } + } + + + public Object[] getDefaultSaveDataImport(){ + Object[] ArrayObject = new Object[10]; + ArrayObject[0] = this.data; + ArrayObject[1] = setBonReceptionFrs(); + return ArrayObject; + } + + public void SetDefaultSaveDataImport(Object[] ArrayObject){ + if(ArrayObject[0] != null){ + this.data = (ObservableList) ArrayObject[0]; + this.CalculeListeProduit(); + this.TableViewListeProduit.setItems(data); + } + if(ArrayObject[1] != null){ + BonReceptionFrs BonReception = (BonReceptionFrs) ArrayObject[1]; + getBonReceptionFrs(BonReception); + } + if(ArrayObject[6] != null){ + this.SetProduit( (Produit) ArrayObject[6] ); + } + } + + @FXML + private void RechercheProduitButtonAction(ActionEvent event) throws IOException { + + final RechercherProduitController rechercheproduit = new RechercherProduitController(false); + + rechercheproduit.ArrayObjectDataSave = this.getDefaultSaveDataImport(); + + rechercheproduit.Show(); + + rechercheproduit.TabColAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + // get Selected ItemButtonCell + rechercheproduit.ArrayObjectDataSave[6] = ((Produit)getTableRow().getItem()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/BonReceptionFrs/BonReceptionAjouterFrs.fxml")); + Parent ParentBonReceptionAjouterFXML = (Parent) fxmlLoader.load(); + + BonReceptionAjouterFrsController BonReceptionAjouterFrs = fxmlLoader.getController(); + + + BonReceptionAjouterFrs.SetDefaultSaveDataImport(rechercheproduit.ArrayObjectDataSave); + + + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(ParentBonReceptionAjouterFXML, 2); + + + } catch (IOException ex) { + Logger.getLogger(CommandeCltPasserController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + } + + public void SetProduit(Produit produit){ + + //Supprimer les igne vide + if((data.size()>0) && (data.get(data.size()-1).getReference().isEmpty())){ + data.remove(data.size()-1); + } + + if(produit != null){ + ListeProduit ListeProd = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixachatht(),"0",produit.getPrixachatttc(),produit.getTvaachat(),"0"); + AffectationTableView(ListeProd,-1); + } + + } + +} diff --git a/src/main/java/Controllers/BonReceptionFrs/BonReceptionDetailFrsController.java b/src/main/java/Controllers/BonReceptionFrs/BonReceptionDetailFrsController.java new file mode 100644 index 0000000..597f504 --- /dev/null +++ b/src/main/java/Controllers/BonReceptionFrs/BonReceptionDetailFrsController.java @@ -0,0 +1,150 @@ +package Controllers.BonReceptionFrs; + +import Controllers.Traitement.Adaptateur; +import Models.BonReceptionFrs.BonReceptionDB; +import Models.BonReceptionFrs.BonReceptionFrs; +import Models.BonReceptionFrs.BonReceptionProduitList; +import Models.Fournisseur.Fournisseur; +import Models.User.Profile; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class BonReceptionDetailFrsController implements Initializable { + + @FXML private AnchorPane PaneBonReceptionDetailFrs ; + + @FXML public AnchorPane PaneSucessFrs ; + + @FXML public AnchorPane AnchorPaneDetailInformation; + + @FXML private AnchorPane AnchorPaneLoading; + + @FXML private Text TextNumero; + @FXML private Text TextDateReception; + @FXML private Text TextHeurReception; + @FXML private Text TextLocalReception; + @FXML private Text TextTransporteur; + @FXML private Text TextProfile; + @FXML private Text TextNomFrs; + @FXML private Text TextSpecialiteFrs; + @FXML private Text TextFormesFrs; + @FXML private Text TextAdresseFrs; + @FXML private Text TextTele1Frs; + @FXML private Text TextTele2Frs; + @FXML private Text TextNetPayer; + + @FXML public TableView TableViewListeProduit ; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColDesignation; + @FXML public TableColumn TabColQuantite ; + @FXML public TableColumn TabColPrixHT; + @FXML public TableColumn TabColTotalHT; + @FXML public TableColumn TabColTVA; + @FXML public TableColumn TabColTotalTTC; + + private Service ThreadBonReceptionDetailFrs; + + BonReceptionFrs BonReception; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixUnitaireHorsTaxe")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("PrixUnitaireHorsTaxenNet")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("Tva")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("Montant")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + } + + + public void setDataBonReceptionDetailFrs(final String IdBonReceptionFrs){ + ThreadBonReceptionDetailFrs = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + BonReception = new BonReceptionDB().getBonReceptionFrs(IdBonReceptionFrs, null, null); + + return null; + } + }; + } + }; + ThreadBonReceptionDetailFrs.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + TextNumero.setText(BonReception.getNumero()); + TextDateReception.setText(BonReception.getDate()); + TextHeurReception.setText(BonReception.getHeur()); + TextLocalReception.setText(BonReception.getLocal()); + TextTransporteur.setText(BonReception.getTransporteur()); + + Profile profile = BonReception.getProfile(); + TextProfile.setText(profile.getNom()+" "+profile.getPrenom()); + + Fournisseur Frs = BonReception.getFournisseur(); + TextNomFrs.setText(Frs.getNom()); + TextSpecialiteFrs.setText(Frs.getSpecialite()); + TextFormesFrs.setText(Frs.getFormes()); + TextAdresseFrs.setText(Frs.getAdresse()); + TextTele1Frs.setText(Frs.getTele1()); + TextTele2Frs.setText(Frs.getTele2()); + ObservableList BRProduitList = BonReception.getListProduit(); + float NetPayer = 0; + for(int i=0; i TableViewBonReceptionGestion; + @FXML public TableColumn TabColNumero; + @FXML public TableColumn TabColFournisseur; + @FXML public TableColumn TabColDate; + @FXML public TableColumn TabColHeur; + @FXML public TableColumn TabColLocalReception; + @FXML public TableColumn TabColTransporteur; + @FXML public TableColumn TabColFacture; + @FXML public TableColumn TabColDetail; + + @FXML public TextField TextFieldNumero ; + @FXML public TextField TextFieldTransporteur ; + @FXML public TextField TextFieldFacture ; + @FXML public DatePicker DatePickerDateReception; + @FXML private TextField TextFieldFournisseur; + @FXML public ChoiceBox ChoiceBoxLocalReception ; + + @FXML public AnchorPane PaneProgressBonReception; + + @FXML private Button ButtonSearchBonReceptionFrs; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + private Service ThreadSearchBonReceptionGestionFrs; + + public static ArrayList ListFournisseur = new ArrayList<>(); + public static ArrayList ListLocale = new ArrayList<>(); + + String LocalReception = ""; + String IdFournisseur = ""; + + Logger logger = Logger.getLogger(BonReceptionGestionFrsController.class.getName()); + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TabColNumero.setStyle( "-fx-alignment: CENTER;"); + TabColNumero.getStyleClass().add("Center"); + TabColNumero.setCellValueFactory(new PropertyValueFactory("Numero")); + + TabColFournisseur.setStyle( "-fx-alignment: CENTER;"); + TabColFournisseur.getStyleClass().add("Center"); + TabColFournisseur.setCellValueFactory(new PropertyValueFactory("Fournisseur")); + + TabColDate.setStyle( "-fx-alignment: CENTER;"); + TabColDate.getStyleClass().add("Center"); + TabColDate.setCellValueFactory(new PropertyValueFactory("Date")); + + TabColHeur.setStyle( "-fx-alignment: CENTER;"); + TabColHeur.getStyleClass().add("Center"); + TabColHeur.setCellValueFactory(new PropertyValueFactory("Heur")); + + TabColLocalReception.setStyle( "-fx-alignment: CENTER;"); + TabColLocalReception.getStyleClass().add("Center"); + TabColLocalReception.setCellValueFactory(new PropertyValueFactory("LocalReception")); + + TabColTransporteur.setStyle( "-fx-alignment: CENTER;"); + TabColTransporteur.getStyleClass().add("Center"); + TabColTransporteur.setCellValueFactory(new PropertyValueFactory("Transporteur")); + + TabColFacture.setStyle( "-fx-alignment: CENTER;"); + TabColFacture.getStyleClass().add("Center"); + TabColFacture.setCellValueFactory(new PropertyValueFactory("Facture")); + + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + TabColDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + setDefaultFormData(); + + ChoiceBoxLocalReception.valueProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue ov, String t, String ValLocal) { + LocalReception = ValLocal; + } + }); + + + TextFieldFournisseur.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + if(newValue.contains(" - ")){ + String[] array = newValue.split(" - ", -1); + IdFournisseur = array[0]; + } + } + }); + + + ButtonSearchBonReceptionFrs.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchBonReceptionGestionFrs(); + } + }); + + PaneBonReceptionGestion.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchBonReceptionGestionFrs(); + } + } + }); + + GestionSearchBonReceptionFrs(); + + + + } + + + private class ButtonCell extends TableCell { + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + try { + BonReceptionGestionList BonReceptionGestion = (BonReceptionGestionList)getTableRow().getItem(); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/BonReceptionFrs/BonReceptionDetailFrs.fxml")); + Parent ParentFxmlFournisseur = (Parent)fxmlLoader.load(); + BonReceptionDetailFrsController BonReceptionDetailFrs = fxmlLoader.getController(); + BonReceptionDetailFrs.setDataBonReceptionDetailFrs(BonReceptionGestion.getCode()); + PaneBonReceptionGestion.getChildren().clear(); + PaneBonReceptionGestion.getChildren().add(ParentFxmlFournisseur); + BonReceptionDetailFrs.setContainsDetailInformation(); + }catch (IOException ex) { + logger.error(ex.getMessage()); + } + + + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + @FXML + private void BonReceptionAjouterFrsButtonAction(ActionEvent event) throws IOException { + PaneBonReceptionGestion.getChildren().clear(); + PaneBonReceptionGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/BonReceptionFrs/BonReceptionAjouterFrs.fxml"))); + } + + + private void setDefaultFormData() + { + ProgressBarBonReceptionFrs.setVisible(true); + + ThreadSearchBonReceptionGestionFrs = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + try{ + ListFournisseur = new FournisseurDB().getAllFournisseur("CONCAT(`id_fourisseur`,' - ',`nom`)"); + TextFields.bindAutoCompletion(TextFieldFournisseur, ListFournisseur); + + ListLocale = new StockDB().getAllListLocal(); + ChoiceBoxLocalReception.getItems().addAll(ListLocale); + }catch (Exception ex) { + logger.error(ex.getMessage()); + } + return null; + } + }; + } + }; + ThreadSearchBonReceptionGestionFrs.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarBonReceptionFrs.setVisible(false); + + } + }); + + ThreadSearchBonReceptionGestionFrs.setOnFailed(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + logger.error(ThreadSearchBonReceptionGestionFrs.getException()); + } + }); + + ThreadSearchBonReceptionGestionFrs.start(); + } + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchBonReceptionGestionFrs() + { + ProgressBarBonReceptionFrs.setVisible(true); + + ButtonSearchBonReceptionFrs.setDisable(true); + + ThreadSearchBonReceptionGestionFrs = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateReception = ""; + if(DatePickerDateReception.getValue() != null){ + DateReception = DatePickerDateReception.getValue().toString(); + } + + + + ObservableList ListBonReceptionGestionFrs = new BonReceptionGestionDB().SearchBonReceptionGestionFrs( + position, + nbrligne, + TextFieldNumero.getText(), + TextFieldTransporteur.getText(), + TextFieldFacture.getText(), + DateReception, + IdFournisseur, + LocalReception); + + TableViewBonReceptionGestion.setItems(ListBonReceptionGestionFrs); + + totalcount = new BonReceptionGestionDB().nbrBonReceptionGestionFrsGestion(TextFieldNumero.getText(), TextFieldTransporteur.getText(), TextFieldFacture.getText(), DateReception, IdFournisseur, LocalReception); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchBonReceptionGestionFrs.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarBonReceptionFrs.setVisible(false); + ButtonSearchBonReceptionFrs.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchBonReceptionGestionFrs.start(); + } + + + private void NextLastSearchBonReceptionGestionFrs(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarBonReceptionFrs.setVisible(true); + + ButtonSearchBonReceptionFrs.setDisable(true); + + ThreadSearchBonReceptionGestionFrs = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateReception = ""; + if(DatePickerDateReception.getValue() != null){ + DateReception = DatePickerDateReception.getValue().toString(); + } + + ObservableList ListBonReceptionGestionFrss = new BonReceptionGestionDB().SearchBonReceptionGestionFrs(ParmPosition, ParamNbrligne, TextFieldNumero.getText(), TextFieldTransporteur.getText(), TextFieldFacture.getText(), DateReception, IdFournisseur, LocalReception); + + TableViewBonReceptionGestion.setItems(ListBonReceptionGestionFrss); + + return null; + } + }; + } + }; + + ThreadSearchBonReceptionGestionFrs.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarBonReceptionFrs.setVisible(false); + ButtonSearchBonReceptionFrs.setDisable(false); + } + }); + ThreadSearchBonReceptionGestionFrs.start(); + } + + private void GestionSearchBonReceptionFrs() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchBonReceptionGestionFrs(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchBonReceptionGestionFrs(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchBonReceptionGestionFrs(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + +} diff --git a/src/main/java/Controllers/Caisse/CaisseEntreController.java b/src/main/java/Controllers/Caisse/CaisseEntreController.java new file mode 100644 index 0000000..dbfde0e --- /dev/null +++ b/src/main/java/Controllers/Caisse/CaisseEntreController.java @@ -0,0 +1,457 @@ +package Controllers.Caisse; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Caisse.CaisseDB; +import Models.Caisse.CaisseEntreListe; +import Models.Caisse.CaisseListe; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.print.PageLayout; +import javafx.print.PageOrientation; +import javafx.print.PageRange; +import javafx.print.Paper; +import javafx.print.Printer; +import javafx.print.PrinterJob; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class CaisseEntreController implements Initializable { + + @FXML private AnchorPane AnchorPaneCaisseClt; + + @FXML private ProgressBar ProgressBarCaisseEnterClt; + + @FXML private DatePicker DatePickerDebut; + @FXML private DatePicker DatePickerFin; + + @FXML private Text TotalEnter; + + @FXML private CheckBox CheckBoxChequeClt; + @FXML private CheckBox CheckBoxEspace; + @FXML private CheckBox CheckBoxCarteBancaire; + + @FXML private CheckBox CheckBoxPaiementTraite ; + @FXML private CheckBox CheckBoxVenteComptant ; + @FXML private CheckBox CheckBoxVenteCommandeAvance ; + @FXML private CheckBox CheckBoxVenteFaciliteAvance ; + @FXML private CheckBox CheckBoxVersementCheque ; //l’encaissement + + @FXML public TableView TableViewCaisseCltEnter ; + + @FXML private TableColumn TabColChequeClt; + @FXML private TableColumn TabColEspace; + @FXML private TableColumn TabColCarteBancaire; + + @FXML private TableColumn TabColIdCaisse; + @FXML private TableColumn TabColType; + @FXML private TableColumn TabColDate; + @FXML private TableColumn TabColMontant; + @FXML private TableColumn TabColChequeCltNumero; + @FXML private TableColumn TabColChequeCltBanque; + @FXML private TableColumn TabColEspaceNom; + @FXML private TableColumn TabColEspacePrenom; + @FXML private TableColumn TabColCateBancaireNumero; + @FXML private TableColumn TabColCateBancaireBanque; + + @FXML private Button ButtonEnter; + @FXML private Button ButtonPrintCaisseEntre; + + private Service ThreadCaisseEnter; + + CaisseDB CaisseDB= new CaisseDB(); + + ObservableList ObsListCaisseCltEnter; + ObservableList TempoObsListCaisseCltEnter; + private String DateDebut ; + private String DateFin; + + contro clt = new contro(); + + public void getDetailEnterCheck() + { + TempoObsListCaisseCltEnter = FXCollections.observableArrayList(); + + boolean CheckChequeClt = CheckBoxChequeClt.isSelected(); + boolean CheckEspace = CheckBoxEspace.isSelected(); + boolean CheckCarteBancaire= CheckBoxCarteBancaire.isSelected(); + + boolean CheckPaiementTraite = CheckBoxPaiementTraite.isSelected(); + boolean CheckVenteComptant = CheckBoxVenteComptant.isSelected(); + boolean CheckVenteCommandeAvance = CheckBoxVenteCommandeAvance.isSelected(); + boolean CheckVenteFaciliteAvance = CheckBoxVenteFaciliteAvance.isSelected(); + boolean CheckVersementCheque = CheckBoxVersementCheque.isSelected(); + + boolean SelectedCheck; + boolean SelectedCheckEspace; + boolean SelectedCheckChequeClt; + boolean SelectedCheckCarteBancaire; + + float FloatTotalEnter = 0; + + // 0-Vente Comptant | 1-Vente Facilité Avance | 2 Vente Commande Avance | 3 traite clt | 4 ChequeClt + if(ObsListCaisseCltEnter.size()>0){ + int indice = 0; + while(indice("IdCaisseClt")); + + TabColType.setStyle( "-fx-alignment: CENTER;");TabColType.getStyleClass().add("Center"); + TabColType.setCellValueFactory(new PropertyValueFactory("Type")); + + TabColDate.setStyle( "-fx-alignment: CENTER;");TabColDate.getStyleClass().add("Center"); + TabColDate.setCellValueFactory(new PropertyValueFactory("Date")); + + TabColMontant.setStyle( "-fx-alignment: CENTER;");TabColMontant.getStyleClass().add("Center"); + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + + TabColChequeCltNumero.setStyle( "-fx-alignment: CENTER;");TabColChequeCltNumero.getStyleClass().add("Center"); + TabColChequeCltNumero.setCellValueFactory(new PropertyValueFactory("ChequeCltNumero")); + + TabColChequeCltBanque.setStyle( "-fx-alignment: CENTER;");TabColChequeCltBanque.getStyleClass().add("Center"); + TabColChequeCltBanque.setCellValueFactory(new PropertyValueFactory("ChequeCltBanque")); + + TabColEspaceNom.setStyle( "-fx-alignment: CENTER;");TabColEspaceNom.getStyleClass().add("Center"); + TabColEspaceNom.setCellValueFactory(new PropertyValueFactory("EspaceNom")); + + TabColEspacePrenom.setStyle( "-fx-alignment: CENTER;");TabColEspacePrenom.getStyleClass().add("Center"); + TabColEspacePrenom.setCellValueFactory(new PropertyValueFactory("EspacePrenom")); + + TabColCateBancaireNumero.setStyle( "-fx-alignment: CENTER;");TabColCateBancaireNumero.getStyleClass().add("Center"); + TabColCateBancaireNumero.setCellValueFactory(new PropertyValueFactory("CateBancaireNumero")); + + TabColCateBancaireBanque.setStyle( "-fx-alignment: CENTER;");TabColCateBancaireBanque.getStyleClass().add("Center"); + TabColCateBancaireBanque.setCellValueFactory(new PropertyValueFactory("CateBancaireBanque")); + + ButtonEnter.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + try{ + DateDebut = DatePickerDebut.getConverter().fromString(DatePickerDebut.getEditor().getText()).toString(); + DateFin = DatePickerFin.getConverter().fromString(DatePickerFin.getEditor().getText()).toString(); + getCaisseEnterThread(); + }catch(Exception ex){} + + } + }); + + this.FiltreCaisse(); + + this.CaisseEntrePrintButton(); + } + + private void FiltreCaisse() + { + CheckBoxChequeClt.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailEnterCheck(); + } + }); + CheckBoxEspace.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailEnterCheck(); + } + }); + CheckBoxCarteBancaire.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailEnterCheck(); + } + }); + + CheckBoxPaiementTraite.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailEnterCheck(); + } + }); + CheckBoxVenteComptant.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailEnterCheck(); + } + }); + CheckBoxVenteCommandeAvance.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailEnterCheck(); + } + }); + CheckBoxVenteFaciliteAvance.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailEnterCheck(); + } + }); + + CheckBoxVersementCheque.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailEnterCheck(); + } + }); + CheckBoxVersementCheque.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailEnterCheck(); + } + }); + + + } + + + public void getCaisseEnterThread() + { + TotalEnter.setText("--"); + + DatePickerDebut.setDisable(true); + DatePickerFin.setDisable(true); + ButtonEnter.setDisable(true); + ButtonPrintCaisseEntre.setDisable(true); + + ProgressBarCaisseEnterClt.setVisible(true); + TableViewCaisseCltEnter.setItems(null); + + CheckBoxChequeClt.setSelected(true); + CheckBoxEspace.setSelected(true); + CheckBoxCarteBancaire.setSelected(true); + + CheckBoxPaiementTraite.setSelected(true); + CheckBoxVenteComptant.setSelected(true); + CheckBoxVenteCommandeAvance.setSelected(true); + CheckBoxVenteFaciliteAvance.setSelected(true); + CheckBoxVersementCheque.setSelected(true); + + + ThreadCaisseEnter = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + ObsListCaisseCltEnter = CaisseDB.GetDataCaisseCltEnter(DateDebut, DateFin); + int indice = 0; + float FloatTotalEnter = 0; + while(indice(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarCaisseEnterClt.setVisible(false); + DatePickerDebut.setDisable(false); + DatePickerFin.setDisable(false); + ButtonEnter.setDisable(false); + ButtonPrintCaisseEntre.setDisable(false); + } + }); + ThreadCaisseEnter.start(); + } + + + private void CaisseEntrePrintButton() + { + ButtonPrintCaisseEntre.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + String strPaiment = ""; + if(CheckBoxChequeClt.isSelected()){ strPaiment += "Chéque | "; } + if(CheckBoxEspace.isSelected()){ strPaiment += "Espéce | "; } + if(CheckBoxCarteBancaire.isSelected()){ strPaiment += "Carte Bancaire | "; } + strPaiment = strPaiment.substring(0, strPaiment.length() - 3); + + String strType = ""; + if(CheckBoxPaiementTraite.isSelected()){ strType += "Traite | "; } + if(CheckBoxVenteComptant.isSelected()){ strType += "Vente Comptant | "; } + if(CheckBoxVenteCommandeAvance.isSelected()){ strType += "Vente Commande Avance | "; } + if(CheckBoxVenteFaciliteAvance.isSelected()){ strType += "Vente Facilité Avance | "; } + if(CheckBoxVersementCheque.isSelected()){ strType += "Chèque | "; } + + strType = strType.substring(0, strType.length() - 3); + + int SizelistCaisseCltEntert = TempoObsListCaisseCltEnter.size(); + int total = SizelistCaisseCltEntert / 13 + 1 ; + int page = 0; + + String strEspace; String strCheque; String strCarteBancaire; + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + + jobPrint.getJobSettings().setPageRanges(new PageRange(1, total)); + + if (jobPrint.showPrintDialog(null)) + { + Printer printer = jobPrint.getPrinter(); + PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.LANDSCAPE, Printer.MarginType.DEFAULT); + + for (int i=0; i listTemp = FXCollections.observableArrayList(); + + for (int j=i; (j<(i+13)) && (j TableViewCaisseCltEnter ; + + @FXML private TableColumn TabColIdCaisse; + @FXML private TableColumn TabColType; + @FXML private TableColumn TabColDate; + @FXML private TableColumn TabColMontant; + @FXML private TableColumn TabColChequeClt; + @FXML private TableColumn TabColEspece; + @FXML private TableColumn TabColCateBancaire; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + TabColIdCaisse.setStyle( "-fx-alignment: CENTER;");TabColIdCaisse.getStyleClass().add("Center"); + TabColIdCaisse.setCellValueFactory(new PropertyValueFactory("IdCaisseClt")); + + TabColType.setCellValueFactory(new PropertyValueFactory("Type")); + + TabColDate.setCellValueFactory(new PropertyValueFactory("Date")); + + TabColMontant.setStyle( "-fx-alignment: CENTER;");TabColMontant.getStyleClass().add("Center"); + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + + TabColChequeClt.setCellValueFactory(new PropertyValueFactory("Cheque")); + + TabColEspece.setCellValueFactory(new PropertyValueFactory("Espece")); + + TabColCateBancaire.setCellValueFactory(new PropertyValueFactory("CateBancaire")); + } + + + public void setCaisseEntrePrint(String Date, + String Local, + String Montant, + String Paiement, + String Page, + String Type, + ObservableList obsListCaisseCltEnter ) + { + TextDate.setText(Date); + TextLocal.setText(Local); + TextMontant.setText(Montant); + TextPaiement.setText(Paiement); + TextPage.setText(Page); + TextType.setText(Type); + + TableViewCaisseCltEnter.setItems(obsListCaisseCltEnter); + } +} diff --git a/src/main/java/Controllers/Caisse/CaisseSortieController.java b/src/main/java/Controllers/Caisse/CaisseSortieController.java new file mode 100644 index 0000000..b188861 --- /dev/null +++ b/src/main/java/Controllers/Caisse/CaisseSortieController.java @@ -0,0 +1,437 @@ +package Controllers.Caisse; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Caisse.CaisseDB; +import Models.Caisse.CaisseSortieListe; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.print.PageLayout; +import javafx.print.PageOrientation; +import javafx.print.PageRange; +import javafx.print.Paper; +import javafx.print.Printer; +import javafx.print.PrinterJob; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.CheckBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class CaisseSortieController implements Initializable { + + @FXML private AnchorPane AnchorPaneCaisseClt; + + @FXML private DatePicker DatePickerDebut; + @FXML private DatePicker DatePickerFin; + + @FXML private Text TotalSortie; + + @FXML private CheckBox CheckBoxChequeClt; + @FXML private CheckBox CheckBoxEspace; + @FXML private CheckBox CheckBoxCarteBancaire; + + @FXML private CheckBox CheckBoxAchatFrs; + @FXML private CheckBox CheckBoxFraisFrs; + @FXML private CheckBox CheckBoxTraiteFrs; + @FXML private CheckBox CheckBoxAvoirV; + + @FXML private Button ButtonSortie; + @FXML private Button ButtonPrintCaisseSortie; + + @FXML private ProgressBar ProgressBarCaisseSortieFrs; + @FXML private TableView TableViewCaisseFrsSortie ; + + @FXML private TableColumn TabColIdCaisseFrs; + @FXML private TableColumn TabColTypeFrs; + @FXML private TableColumn TabColDateFrs; + @FXML private TableColumn TabColMontantFrs; + + @FXML private TableColumn TabColEspeceFrs; + @FXML private TableColumn TabColChequeFrs; + @FXML private TableColumn TabColCarteBancaireFrs; + + private Service ThreadCaisseSortie; + + CaisseDB CaisseDB= new CaisseDB(); + + ObservableList ObsListCaisseFrsSortie; + ObservableList TempoObsListCaisseFrsSortie; + + private String DateDebut ; + private String DateFin; + + contro clt = new contro(); + + @Override + public void initialize(URL url, ResourceBundle rb) { + + DatePickerDebut.setValue(LocalDate.now()); + DatePickerFin.setValue(LocalDate.now()); + + DateDebut = DatePickerDebut.getValue().toString(); + DateFin = DatePickerFin.getValue().toString(); + + + TabColIdCaisseFrs.setStyle( "-fx-alignment: CENTER;");TabColIdCaisseFrs.getStyleClass().add("Center"); + TabColIdCaisseFrs.setCellValueFactory(new PropertyValueFactory("IdCaisseClt")); + + TabColTypeFrs.setStyle( "-fx-alignment: CENTER;");TabColTypeFrs.getStyleClass().add("Center"); + TabColTypeFrs.setCellValueFactory(new PropertyValueFactory("Type")); + + TabColDateFrs.setStyle( "-fx-alignment: CENTER;");TabColDateFrs.getStyleClass().add("Center"); + TabColDateFrs.setCellValueFactory(new PropertyValueFactory("Date")); + + TabColMontantFrs.setStyle( "-fx-alignment: CENTER;");TabColMontantFrs.getStyleClass().add("Center"); + TabColMontantFrs.setCellValueFactory(new PropertyValueFactory("Montant")); + + TabColEspeceFrs.setStyle( "-fx-alignment: CENTER;");TabColEspeceFrs.getStyleClass().add("Center"); + TabColEspeceFrs.setCellValueFactory(new PropertyValueFactory("Espece")); + + TabColChequeFrs.setStyle( "-fx-alignment: CENTER;");TabColChequeFrs.getStyleClass().add("Center"); + TabColChequeFrs.setCellValueFactory(new PropertyValueFactory("Cheque")); + + TabColCarteBancaireFrs.setStyle( "-fx-alignment: CENTER;");TabColCarteBancaireFrs.getStyleClass().add("Center"); + TabColCarteBancaireFrs.setCellValueFactory(new PropertyValueFactory("CarteBancaire")); + + ButtonSortie.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + try{ + DateDebut = DatePickerDebut.getConverter().fromString(DatePickerDebut.getEditor().getText()).toString(); + DateFin = DatePickerFin.getConverter().fromString(DatePickerFin.getEditor().getText()).toString(); + getCaisseSortieThread(); + }catch(Exception ex){} + + } + }); + + this.FiltreCaisse(); + + this.CaisseSortiePrintButton(); + + } + + private void FiltreCaisse(){ + CheckBoxChequeClt.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailSortieCheck(); + } + }); + CheckBoxEspace.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailSortieCheck(); + } + }); + CheckBoxCarteBancaire.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailSortieCheck(); + } + }); + + CheckBoxAchatFrs.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailSortieCheck(); + } + }); + CheckBoxFraisFrs.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailSortieCheck(); + } + }); + CheckBoxTraiteFrs.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailSortieCheck(); + } + }); + + CheckBoxAvoirV.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + getDetailSortieCheck(); + } + }); + } + + + public void getCaisseSortieThread() + { + TotalSortie.setText("--"); + + DatePickerDebut.setDisable(true); + DatePickerFin.setDisable(true); + ButtonSortie.setDisable(true); + ButtonPrintCaisseSortie.setDisable(true); + + ProgressBarCaisseSortieFrs.setVisible(true); + TableViewCaisseFrsSortie.setItems(null); + + CheckBoxChequeClt.setSelected(true); + CheckBoxEspace.setSelected(true); + CheckBoxCarteBancaire.setSelected(true); + + //Sortie + CheckBoxAchatFrs.setSelected(true); + CheckBoxFraisFrs.setSelected(true); + + ThreadCaisseSortie = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + /*******************Sortie**********************/ + ObsListCaisseFrsSortie = CaisseDB.GetDataCaisseFrsSortie(DateDebut, DateFin); + System.out.println(ObsListCaisseFrsSortie.size()); + TempoObsListCaisseFrsSortie = ObsListCaisseFrsSortie; + + int indiceSortie = 0; + float FloatTotalSortie = 0; + while(indiceSortie(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarCaisseSortieFrs.setVisible(false); + DatePickerDebut.setDisable(false); + DatePickerFin.setDisable(false); + ButtonPrintCaisseSortie.setDisable(false); + ButtonSortie.setDisable(false); + } + }); + ThreadCaisseSortie.start(); + } + + + + + + + public void getDetailSortieCheck(){ + + TempoObsListCaisseFrsSortie = FXCollections.observableArrayList(); + + boolean CheckCheque = CheckBoxChequeClt.isSelected(); + boolean CheckEspace = CheckBoxEspace.isSelected(); + boolean CheckCarteBancaire= CheckBoxCarteBancaire.isSelected(); + + boolean CheckFrais = CheckBoxFraisFrs.isSelected(); + boolean CheckAchat = CheckBoxAchatFrs.isSelected(); + boolean CheckTraite = CheckBoxTraiteFrs.isSelected(); + boolean CheckAvoirV = CheckBoxAvoirV.isSelected(); + + float FloatTotalSortie = 0; + + // 0-Vente Comptant | 1-Vente Facilité Avance | 2 Vente Commande Avance | 3 traite clt | 4 ChequeClt + if(ObsListCaisseFrsSortie.size()>0){ + int indice = 0; + while(indice(){ + @Override + public void handle(ActionEvent t) { + String strPaiment = ""; + if(CheckBoxChequeClt.isSelected()){ strPaiment += "Chéque | "; } + if(CheckBoxEspace.isSelected()){ strPaiment += "Espéce | "; } + if(CheckBoxCarteBancaire.isSelected()){ strPaiment += "Carte Bancaire | "; } + strPaiment = strPaiment.substring(0, strPaiment.length() - 3); + + String strType = ""; + if(CheckBoxAchatFrs.isSelected()){ strType += "Achat | "; } + if(CheckBoxFraisFrs.isSelected()){ strType += "Frais | "; } + if(CheckBoxTraiteFrs.isSelected()){ strType += "Traite | "; } + if(CheckBoxAvoirV.isSelected()){ strType += "Avoir | "; } + strType = strType.substring(0, strType.length() - 3); + + int SizelistCaisseCltSortiet = TempoObsListCaisseFrsSortie.size(); + int total = SizelistCaisseCltSortiet / 13 + 1 ; + int page = 0; + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + + + + jobPrint.getJobSettings().setPageRanges(new PageRange(1, total)); + + if (jobPrint.showPrintDialog(null)) + { + Printer printer = jobPrint.getPrinter(); + PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.LANDSCAPE, Printer.MarginType.DEFAULT); + + for (int i=0; i listTemp = FXCollections.observableArrayList(); + + for (int j=i; (j<(i+13)) && (j TableViewCaisseCltSortie ; + + @FXML private TableColumn TabColIdCaisse; + @FXML private TableColumn TabColType; + @FXML private TableColumn TabColDate; + @FXML private TableColumn TabColMontant; + @FXML private TableColumn TabColChequeClt; + @FXML private TableColumn TabColEspece; + @FXML private TableColumn TabColCarteBancaire; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + TabColIdCaisse.setStyle( "-fx-alignment: CENTER;");TabColIdCaisse.getStyleClass().add("Center"); + TabColIdCaisse.setCellValueFactory(new PropertyValueFactory("IdCaisseClt")); + + TabColType.setCellValueFactory(new PropertyValueFactory("Type")); + + TabColDate.setCellValueFactory(new PropertyValueFactory("Date")); + + TabColMontant.setStyle( "-fx-alignment: CENTER;");TabColMontant.getStyleClass().add("Center"); + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + + TabColChequeClt.setCellValueFactory(new PropertyValueFactory("Cheque")); + + TabColEspece.setCellValueFactory(new PropertyValueFactory("Espece")); + + TabColCarteBancaire.setCellValueFactory(new PropertyValueFactory("CarteBancaire")); + } + + + public void setCaisseSortiePrint(String Date, + String Local, + String Montant, + String Paiement, + String Page, + String Type, + ObservableList obsListCaisseCltSortie ) + { + TextDate.setText(Date); + TextLocal.setText(Local); + TextMontant.setText(Montant); + TextPaiement.setText(Paiement); + TextPage.setText(Page); + TextType.setText(Type); + + TableViewCaisseCltSortie.setItems(obsListCaisseCltSortie); + } +} diff --git a/src/main/java/Controllers/Caisse/FraisAjouterController.java b/src/main/java/Controllers/Caisse/FraisAjouterController.java new file mode 100644 index 0000000..9c12b1e --- /dev/null +++ b/src/main/java/Controllers/Caisse/FraisAjouterController.java @@ -0,0 +1,220 @@ +package Controllers.Caisse; + +import Controllers.Traitement.contro; +import Models.Caisse.Frais; +import Models.Caisse.FraisDB; +import Models.User.User; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDateTime; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.animation.FadeTransition; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.DatePicker; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.util.Duration; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class FraisAjouterController implements Initializable { + + @FXML private AnchorPane PaneAjouterFrais ; + @FXML private AnchorPane AnchorPaneFrais ; + @FXML private StackPane StackPaneSucces; + + @FXML private ProgressIndicator ProgrssLoading; + @FXML private Button ButtonAjouterFrais; + + @FXML private TextField TextFieldMontant; + + @FXML private RadioButton RadioEspace; + + @FXML private RadioButton RadioCheque; + @FXML private GridPane GridPaneCheque; + @FXML private TextField TextFieldNumeroCheque; + @FXML private TextField TextFieldBanqueCheque; + @FXML private DatePicker DatePickerDateCheque; + + @FXML private RadioButton RadioCarte; + @FXML private GridPane GridPaneCarte; + @FXML private TextField TextFieldNumeroTransation; + @FXML private TextField TextFieldBanqueCarte; + + @FXML private TextField TextFieldObject; + @FXML private TextField TextFieldPersonne; + @FXML private TextArea TextAreaContenu; + + @FXML private Text ErreurMontant; + @FXML private Text ErreurNumeroCheque; + @FXML private Text ErreurBanqueCheque; + @FXML private Text ErreurDateCheque; + + @FXML private Text ErreurTransaction; + @FXML private Text ErreurBanqueCart; + @FXML private Text ErreurObject; + + private Service ThreadFrais; + + Frais frais = new Frais(); + FraisDB fraisDB = new FraisDB(); + contro ctl= new contro() ; + + + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + frais.setPaiement("0"); + this.TypePaiement(); + } + + @FXML + private void AjouterFraisButtonAction(ActionEvent event) throws IOException + { + if(this.ContoleFrais()) + { + ButtonAjouterFrais.setDisable(true); + ButtonAjouterFrais.setText(""); + ThreadFrais = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + ProgrssLoading.setVisible(true); + frais = fraisDB.setFrais(frais); + return null; + } + }; + } + }; + ThreadFrais.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneFrais); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.play(); + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) { + StackPaneSucces.setVisible(true); + } + }); + } + }); + ThreadFrais.start(); + } + } + + private Boolean ContoleFrais() + { + Boolean result = false; + + if( ctl.ContrReelNotNull(TextFieldMontant,ErreurMontant) && + ctl.ContrNull(TextFieldObject,ErreurObject) ){ + frais.setMontant(TextFieldMontant.getText()); + frais.setObject(TextFieldObject.getText()); + frais.setPersonne(TextFieldPersonne.getText()); + + frais.setDateCreation(LocalDateTime.now().toString()); + frais.setProfile(User.idprofile+""); + frais.setLocalNom(User.UserLocal); + + frais.setContext(TextAreaContenu.getText()); + + if( frais.getPaiement().equals("1") && + ctl.ContrNull(TextFieldNumeroCheque, ErreurNumeroCheque) && + ctl.ContrNull(TextFieldBanqueCheque, ErreurBanqueCheque) && + ctl.ContrNullDatePicker(DatePickerDateCheque, ErreurDateCheque)){ + frais.setNumero(TextFieldNumeroCheque.getText()); + frais.setBanque(TextFieldBanqueCheque.getText()); + frais.setDateCheque(DatePickerDateCheque.getValue().toString()); + result = true; + }else if(frais.getPaiement().equals("2") && + ctl.ContrNull(TextFieldNumeroTransation, ErreurTransaction) && + ctl.ContrNull(TextFieldBanqueCarte, ErreurBanqueCart) ){ + frais.setBanque(TextFieldBanqueCarte.getText()); + frais.setNumero(TextFieldNumeroTransation.getText()); + result = true; + }else if(frais.getPaiement().equals("0")){ + result = true; + } + } + return result; + } + + private void TypePaiement() + { + //0 :espèce 1:Chèque 2 :carte bancaire + RadioEspace.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + GridPaneCheque.setVisible(false); + GridPaneCarte.setVisible(false); + frais.setPaiement("0"); + } + }); + RadioCheque.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + GridPaneCheque.setVisible(true); + GridPaneCarte.setVisible(false); + frais.setPaiement("1"); + } + }); + RadioCarte.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + GridPaneCheque.setVisible(false); + GridPaneCarte.setVisible(true); + frais.setPaiement("2"); + } + }); + } + + //ajouter un nouvelle catégorie + @FXML + private void AfficherAjouterFraisButtonAction(ActionEvent event) throws IOException { + FadeTransition ft = new FadeTransition(Duration.millis(400), StackPaneSucces); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Caisse/FraisAjouter.fxml")); + Parent NodeDetail = (Parent)fxmlLoader.load(); + PaneAjouterFrais.getChildren().add(NodeDetail); + } catch (IOException ex) { + Logger.getLogger(FraisAjouterController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + ft.play(); + } + +} diff --git a/src/main/java/Controllers/Caisse/FraisDetailController.java b/src/main/java/Controllers/Caisse/FraisDetailController.java new file mode 100644 index 0000000..e7a0fa9 --- /dev/null +++ b/src/main/java/Controllers/Caisse/FraisDetailController.java @@ -0,0 +1,157 @@ +package Controllers.Caisse; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Models.Caisse.Frais; +import Models.Caisse.FraisDB; +import Models.Reglement.Reglement; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.scene.web.HTMLEditor; +import javafx.stage.Stage; + +/** + * FXML Controller class + * @author Maher + */ +public class FraisDetailController { + + public Node nodeFxml ; + + @FXML public AnchorPane AnchorPrincipal ; + + @FXML public AnchorPane PaneDetailFrais; + + @FXML private Text TextMontant; + @FXML private Text TextPaiement; + @FXML private Text TextChequeNumero; + @FXML private Text TextChequeBanque; + @FXML private Text TextChequeDate; + @FXML private Text TextCarteTransation; + @FXML private Text TextCarteBanque; + @FXML private Text TextPersonne; + @FXML private Text TextDateCreation; + @FXML private Text TextProfile; + @FXML private Text TextObject; + + @FXML private GridPane GridPaneCheque; + @FXML private GridPane GridPaneCarte; + + @FXML private HTMLEditor HTMLEditorContext ; + + @FXML private ProgressIndicator ProgressFrais; + + private Service ThreadFraisDetail; + + Frais frais = new Frais(); + + public FraisDetailController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Caisse/FraisDetail.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (Exception ex) { + System.err.println(ex.getMessage()); + } + } + + + public void setFrais(Frais frais){ + TextMontant.setText(frais.getMontant()); + TextPaiement.setText(frais.getPaiementString()); + + if(frais.getPaiement().equals("1")){ + GridPaneCheque.setVisible(true); + TextChequeNumero.setText(frais.getNumero()); + TextChequeBanque.setText(frais.getBanque()); + TextChequeDate.setText(frais.getDateCheque()); + } + + if(frais.getPaiement().equals("2")){ + GridPaneCarte.setVisible(true); + TextCarteTransation.setText(frais.getNumero()); + TextCarteBanque.setText(frais.getBanque()); + } + + TextPersonne.setText(frais.getPersonne()); + TextDateCreation.setText(frais.getDateCreation()); + TextProfile.setText(frais.getProfile()); + TextObject.setText(frais.getObject()); + if(frais.getContext() != null){ + if(!frais.getContext().equals("")){ + HTMLEditorContext.setHtmlText(frais.getContext()); + } + } + + } + + + public void LanchShowFrais(final String IdFrais){ + + ThreadFraisDetail = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + frais = new FraisDB().getFrais(IdFrais); + return null; + } + }; + } + }; + ThreadFraisDetail.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + setFrais(frais); + ProgressFrais.setVisible(false); + PaneDetailFrais.setVisible(true); + } + }); + ThreadFraisDetail.start(); + } + + + + + @FXML + private void ExitButtonAction(ActionEvent event) throws IOException { + AnchorPrincipal.setVisible(false); + } + + + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Stage stage = MyWindow.myStage; + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + stage.setScene(scene); + stage.show(); + } + +} diff --git a/src/main/java/Controllers/Caisse/FraisGestionController.java b/src/main/java/Controllers/Caisse/FraisGestionController.java new file mode 100644 index 0000000..f7d5556 --- /dev/null +++ b/src/main/java/Controllers/Caisse/FraisGestionController.java @@ -0,0 +1,424 @@ +package Controllers.Caisse; + +import Models.Caisse.Frais; +import Models.Caisse.FraisDB; +import Models.Stock.StockDB; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.ComboBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.fxml.FXMLLoader; +import javafx.scene.Node; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher + */ +public class FraisGestionController implements Initializable { + + @FXML private AnchorPane PaneGestionFrais ; + + @FXML private TextField TextFieldCodeFrais; + @FXML private TextField TextFieldObject; + @FXML private TextField TextFieldPresonne; + + @FXML private ComboBox ComboBoxLocale ; + @FXML private ComboBox ComboBoxPaiement; + @FXML private DatePicker DatePickerCreate; + + @FXML private ProgressBar ProgressBarFraisGestion; + @FXML private Button ButtonSearchFraisGestion; + + @FXML private TableView TableViewFrais; + @FXML private TableColumn TabColIdFrais; + @FXML private TableColumn TabColMontant; + @FXML private TableColumn TabColObject; + @FXML private TableColumn TabColDateCreation; + @FXML private TableColumn TabColPaiement; + @FXML private TableColumn TabColProfile; + @FXML private TableColumn TabColLocalNom; + @FXML private TableColumnTabColDetail ; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + private Service ThreadSearchFraisGestion; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + ComboBoxLocale.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent t) { + if(ComboBoxLocale.getItems().size() == 0){ + ComboBoxLocale.getItems().addAll(new StockDB().getAllListLocal()); + } + } + }); + + //0:Espèce 1:Chèque 2 :carte bancaire + ComboBoxPaiement.setItems(FXCollections.observableArrayList("Espèces","Chèque","Carte Bancaire")); + + TabColIdFrais.setStyle( "-fx-alignment: CENTER;");TabColIdFrais.getStyleClass().add("Center"); + TabColIdFrais.setCellValueFactory(new PropertyValueFactory("IdFrais")); + + TabColMontant.setStyle( "-fx-alignment: CENTER;");TabColMontant.getStyleClass().add("Center"); + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + + TabColObject.setStyle( "-fx-alignment: CENTER;");TabColObject.getStyleClass().add("Center"); + TabColObject.setCellValueFactory(new PropertyValueFactory("Object")); + + TabColDateCreation.setStyle( "-fx-alignment: CENTER;");TabColDateCreation.getStyleClass().add("Center"); + TabColDateCreation.setCellValueFactory(new PropertyValueFactory("DateCreation")); + + TabColPaiement.setStyle( "-fx-alignment: CENTER;");TabColPaiement.getStyleClass().add("Center"); + TabColPaiement.setCellValueFactory(new PropertyValueFactory("Paiement")); + TabColPaiement.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + ////0 :espace 1:Chèque 2 :carte bancaire + if(item!=null && item.equals("0")){ + Text text = new Text("Espèce"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else if(item!=null && item.equals("1")){ + Text text = new Text("Chèque"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else if(item!=null && item.equals("2")){ + Text text = new Text("Carte Bancaire"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TabColProfile.setStyle( "-fx-alignment: CENTER;");TabColProfile.getStyleClass().add("Center"); + TabColProfile.setCellValueFactory(new PropertyValueFactory("Profile")); + + TabColLocalNom.setStyle( "-fx-alignment: CENTER;");TabColLocalNom.getStyleClass().add("Center"); + TabColLocalNom.setCellValueFactory(new PropertyValueFactory("LocalNom")); + + TabColDetail.setSortable(true); + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + TabColDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + + ButtonSearchFraisGestion.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchFraisGestion(); + } + }); + + PaneGestionFrais.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchFraisGestion(); + } + } + }); + + GestionSearchFournisseur(); + + } + + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + Frais frais = ((Frais)getTableRow().getItem()); + FraisDetailController FraisDetail = new FraisDetailController(); + FraisDetail.LanchShowFrais(frais.getIdFrais()); + FraisDetail.Show(); + + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + @FXML + private void AjouterFraisButtonAction(ActionEvent event) throws IOException { + PaneGestionFrais.getChildren().clear(); + PaneGestionFrais.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Caisse/FraisAjouter.fxml"))); + } + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchFraisGestion() + { + ProgressBarFraisGestion.setVisible(true); + + ButtonSearchFraisGestion.setDisable(true); + + ThreadSearchFraisGestion = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateCreation = ""; + if(DatePickerCreate.getValue() != null){ + DateCreation = DatePickerCreate.getValue().toString(); + } + + ObservableList ListFraisGestions = new FraisDB().SearchFraisGestion( + position, + nbrligne, + TextFieldCodeFrais.getText(), + TextFieldObject.getText(), + TextFieldPresonne.getText(), + (String) ComboBoxLocale.getValue(), + (String) ComboBoxPaiement.getValue(), + DateCreation); + + TableViewFrais.setItems(ListFraisGestions); + + totalcount = new FraisDB().nbrFraisGestion(TextFieldCodeFrais.getText(), TextFieldObject.getText(), TextFieldPresonne.getText(), (String) ComboBoxLocale.getValue(), (String) ComboBoxPaiement.getValue(), DateCreation); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchFraisGestion.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFraisGestion.setVisible(false); + ButtonSearchFraisGestion.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchFraisGestion.start(); + } + + + private void NextLastSearchFraisGestion(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarFraisGestion.setVisible(true); + + ButtonSearchFraisGestion.setDisable(true); + + ThreadSearchFraisGestion = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateCreation = ""; + if(DatePickerCreate.getValue() != null){ + DateCreation = DatePickerCreate.getValue().toString(); + } + + ObservableList ListFraisGestions = new FraisDB().SearchFraisGestion(ParmPosition, ParamNbrligne, TextFieldCodeFrais.getText(), TextFieldObject.getText(), TextFieldPresonne.getText(), (String) ComboBoxLocale.getValue(), (String) ComboBoxPaiement.getValue(), DateCreation); + + TableViewFrais.setItems(ListFraisGestions); + + return null; + } + }; + } + }; + + ThreadSearchFraisGestion.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFraisGestion.setVisible(false); + ButtonSearchFraisGestion.setDisable(false); + } + }); + ThreadSearchFraisGestion.start(); + } + + private void GestionSearchFournisseur() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchFraisGestion(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchFraisGestion(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchFraisGestion(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } +} diff --git a/src/main/java/Controllers/Categorie/AjouterCategorieController.java b/src/main/java/Controllers/Categorie/AjouterCategorieController.java new file mode 100644 index 0000000..e24f9cf --- /dev/null +++ b/src/main/java/Controllers/Categorie/AjouterCategorieController.java @@ -0,0 +1,123 @@ +/* + * 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 Controllers.Categorie; + +import Controllers.Traitement.MyWindow; +import Models.Categorie.Categorie; +import Models.Categorie.CategorieDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; + +/** + * FXML Controller class + * + * @author PC-Maher + */ +public class AjouterCategorieController implements Initializable { + + public Node nodeFxml ; + + @FXML public AnchorPane AnchorPrincipal ; + + @FXML public TextField NomCategorie ; + @FXML private Text erreurCategorie ; + @FXML public ToggleGroup unite ; + @FXML private RadioButton piece ; + @FXML private RadioButton kilo; + @FXML private RadioButton metre; + @FXML private RadioButton litre; + @FXML public Button ButtonAjouterCategory ; + + Categorie categorie = new Categorie(); + CategorieDB dbcategorie = new CategorieDB(); + + + + @Override + public void initialize(URL url, ResourceBundle rb) { + piece.setUserData("0"); + kilo.setUserData("1"); + metre.setUserData("2"); + litre.setUserData("3"); + } + + + public AjouterCategorieController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Categorie/AjouterCategorie.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(AjouterCategorieController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + + public String AjouterCategorieTraitement(){ + if(NomCategorie.getText().length()==0){ //catégorie est vide + erreurCategorie.setText("catégorie vide"); + NomCategorie.setStyle("-fx-border-color:#f20606;"); + } + else if(dbcategorie.verifyCategorie(NomCategorie.getText())){ + erreurCategorie.setText("catégorie existe déjà"); + NomCategorie.setStyle("-fx-border-color:#f20606;"); + } + else{ + erreurCategorie.setText(""); + NomCategorie.setStyle("-fx-border-color: transparent;"); + categorie.setNomcategorie(NomCategorie.getText()); + categorie.setUnitemesure(Integer.parseInt(unite.getSelectedToggle().getUserData().toString())); + if(dbcategorie.addCategorie(categorie)){ + AnchorPrincipal.setVisible(false); + return NomCategorie.getText(); + } + } + return ""; + } + + + @FXML + private void AnnulerCategorieButtonAction(ActionEvent event) throws IOException { + AnchorPrincipal.setVisible(false); + } + + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Stage stage = MyWindow.myStage; + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + stage.setScene(scene); + stage.show(); + + } + +} diff --git a/src/main/java/Controllers/ChequeClt/ChequeCltDetailController.java b/src/main/java/Controllers/ChequeClt/ChequeCltDetailController.java new file mode 100644 index 0000000..7451bf7 --- /dev/null +++ b/src/main/java/Controllers/ChequeClt/ChequeCltDetailController.java @@ -0,0 +1,327 @@ +/* + * 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 Controllers.ChequeClt; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Models.ChequeClt.ChequeClt; +import Models.ChequeClt.ChequeCltDB; +import Models.ChequeClt.ChequeCltHistoriqueListe; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.application.Platform; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import javafx.util.Callback; + +/** + * FXML Controller class + * + * @author Maher + */ +public class ChequeCltDetailController { + + @FXML public AnchorPane AnchorPrincipal ; + @FXML private AnchorPane AnchorSecondaire; + + @FXML private ProgressIndicator ProgressCheque; + + @FXML private Text TextTypeClt; + @FXML private Text TextCode; + @FXML private Text TextNom; + @FXML private Text TextPrenom; + @FXML private Text TextTele1; + @FXML private Text TextTele2; + @FXML private Text TextAdress; + + @FXML private Text TextNumCheque1; + @FXML private Text TextNumCheque2; + @FXML private Text TextBanque; + @FXML private Text TextDateCheque; + @FXML private Text TextMontant; + @FXML private Text TextFacture; + @FXML private Text TextUtilisateur; + + @FXML private RadioButton RadioVerser; + @FXML private RadioButton RadioSansProvision; + @FXML private RadioButton RadioContreCheque; + + @FXML private Button UpdateEtatButton; + @FXML public Button ButtonExitChequeCltDetail; + + @FXML public TableView TableViewChequeCltHistorique; + + @FXML public TableColumn TabColDate; + @FXML public TableColumn TabColHeur; + @FXML public TableColumn TabColEtat; + @FXML public TableColumn TabColUtili; + + public Node nodeFxml; + public String IdChequeClt; + public String LastEtat; + public Integer Source; + ChequeClt Cheque = new ChequeClt(); + + public ChequeCltDetailController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/ChequeClt/ChequeCltDetail.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(ChequeCltDetailController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Stage stage = MyWindow.myStage; + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + stage.setScene(scene); + stage.show(); + } + + public void ControleUpdateEtatButton(){ + + if(Cheque.getLastEtat() != null){ + if(Cheque.getLastEtat() == 2){ + UpdateEtatButton.setDisable(true); + }else{ + RadioVerser.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + if(Cheque.getLastEtat() == 1){ + UpdateEtatButton.setDisable(true); + }else if((Cheque.getLastEtat() == 0) || (Cheque.getLastEtat() == 1)){ + UpdateEtatButton.setDisable(false); + } + } + }); + + + RadioSansProvision.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + if(Cheque.getLastEtat() == 0){ + UpdateEtatButton.setDisable(true); + }else if((Cheque.getLastEtat() == 1) || (Cheque.getLastEtat() == 2)){ + UpdateEtatButton.setDisable(false); + } + } + }); + } + } + + + + + } + + public void Initialize(String id_cheque, Integer source) { + IdChequeClt = id_cheque; + Source = source;// 0==>Cheque(table cheque_clt) 1==>Traite(table traite_paiement_cheque_clt) + + TabColDate.setStyle( "-fx-alignment: CENTER;"); + TabColDate.getStyleClass().add("Center"); + TabColDate.setCellValueFactory(new PropertyValueFactory("DateOperation")); + + TabColHeur.setStyle( "-fx-alignment: CENTER;"); + TabColHeur.getStyleClass().add("Center"); + TabColHeur.setCellValueFactory(new PropertyValueFactory("HeurOperation")); + + TabColEtat.setStyle( "-fx-alignment: CENTER;"); + TabColEtat.getStyleClass().add("Center"); + TabColEtat.setCellValueFactory(new PropertyValueFactory("Etat")); + TabColEtat.setCellValueFactory(new PropertyValueFactory("Etat")); + TabColEtat.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(Integer item, boolean empty) { + // 0 cheque sans provision 1 Verser (Valider) 2 Contre chéque(espace) + if(item!= null && item == 0){ + Text text = new Text("chèque sans provision"); + text.setFill(Color.web("#EA4335")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else if(item!= null && item == 1){ + Text text = new Text("verser"); + text.setFill(Color.web("#428BCA")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else if(item!= null && item == 2){ + Text text = new Text("contre chèque"); + text.setFill(Color.web("#34A853")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TabColUtili.setStyle( "-fx-alignment: CENTER;"); + TabColUtili.getStyleClass().add("Center"); + TabColUtili.setCellValueFactory(new PropertyValueFactory("Utilisateur")); + + ButtonUpdateEtatAction(); + + startTask(); + + } + + + public void startTask(){ + + ProgressCheque.setVisible(true); + AnchorSecondaire.setVisible(false); + + // Create a Runnable + Runnable task = new Runnable(){ + public void run(){ + Platform.runLater(new Runnable(){ + @Override + public void run(){ + SetIdChequeClt(); + ProgressCheque.setVisible(false); + AnchorSecondaire.setVisible(true); + } + }); + } + }; + Thread backgroundThread = new Thread(task);// Run the task in a background thread + backgroundThread.setDaemon(true);// Terminate the running thread if the application exits + backgroundThread.start();// Start the thread + } + + + + + + public void SetIdChequeClt(){ + ChequeCltDB ChequeDB = new ChequeCltDB(); + Cheque = ChequeDB.getChequeClt(IdChequeClt, Source); + + Integer TypeClt = Cheque.getTypeClient(); + if(TypeClt == 0){ + TextTypeClt.setText("Ancien"); + TextCode.setText(Cheque.getCltPersonne().getCodeclient()); + TextNom.setText(Cheque.getCltPersonne().getNom()); + TextPrenom.setText(Cheque.getCltPersonne().getPrenom()); + TextTele1.setText(Cheque.getCltPersonne().getTelefixString()); + TextTele2.setText(Cheque.getCltPersonne().getTelemobileString()); + TextAdress.setText(Cheque.getCltPersonne().getAdresse()); + }else if(TypeClt == 1){ + TextTypeClt.setText("Entreprise"); + TextCode.setText(Cheque.getCltEntreprise().getCodeString()); + TextNom.setText(Cheque.getCltEntreprise().getNom()); + TextPrenom.setText(Cheque.getCltEntreprise().getMatricule()); + TextTele1.setText(Cheque.getCltEntreprise().getTele1String()); + TextTele2.setText(Cheque.getCltEntreprise().getTele2String()); + TextAdress.setText(Cheque.getCltEntreprise().getAdresse()); + }else if(TypeClt == 2){ + TextTypeClt.setText("Passager"); + TextCode.setText(Cheque.getCltPassager().getCodeclient()); + TextNom.setText(Cheque.getCltPassager().getNom()); + TextPrenom.setText(Cheque.getCltPassager().getPrenom()); + TextTele1.setText(Cheque.getCltPassager().getTelefixString()); + TextTele2.setText(Cheque.getCltPassager().getTelemobileString()); + TextAdress.setText(Cheque.getCltPassager().getAdresse()); + } + + TextNumCheque1.setText(Cheque.getNumeroChequeClt()); + TextNumCheque2.setText(Cheque.getNumeroChequeClt()); + TextBanque.setText(Cheque.getBanqueChequeClt()); + TextDateCheque.setText(Cheque.getDatePaiement()); + TextMontant.setText(Adaptateur.FloatToStringEspaceCurrency(Cheque.getMontantFloatChequeClt())); + TextFacture.setText(Cheque.getCodeFactureClt()); + TextUtilisateur.setText(Cheque.getProfile().getNom()+" "+Cheque.getProfile().getPrenom()); + + //Etat 0 cheque sans provision 1 Verser (Valider) 2 Contre chéque(espace) + if(Cheque.getLastEtat() != null){ + if(Cheque.getLastEtat() == 1){ + RadioVerser.setSelected(true); + UpdateEtatButton.setDisable(true); + }else if(Cheque.getLastEtat() == 0){ + RadioSansProvision.setSelected(true); + UpdateEtatButton.setDisable(true); + }else if(Cheque.getLastEtat() == 2){ + RadioContreCheque.setSelected(true); + UpdateEtatButton.setDisable(true); + } + } + + ObservableList ObservableListHistChequeClt = Cheque.getHistoriqueListe(); + Integer LastListHistCheque = ObservableListHistChequeClt.size()-1; + if(LastListHistCheque>=0){ + LastEtat = ObservableListHistChequeClt.get(LastListHistCheque).getEtat().toString(); + } + + TableViewChequeCltHistorique.setItems(ObservableListHistChequeClt); + + ControleUpdateEtatButton(); + } + + + public void ButtonUpdateEtatAction(){ + UpdateEtatButton.setOnAction(new EventHandler() { //supprimer le message du suucés et reaficher les formulaires + @Override + public void handle(ActionEvent event) { + boolean isSelectedVerser = RadioVerser.isSelected(); + boolean isSelectedProvision = RadioSansProvision.isSelected(); + boolean isSelectedContre = RadioContreCheque.isSelected(); + + ChequeCltDB ChequeDB = new ChequeCltDB(); + + //Etat 0 cheque sans provision 1 Verser (Valider) 2 Contre chéque(espace) + //Source 0==>Cheque(table cheque_clt) 1==>Traite(table traite_paiement_cheque_clt) + if(isSelectedVerser == true){ + ChequeDB.setHistoriqueCheque(1, Source, Cheque); + }else if(isSelectedProvision == true){ + ChequeDB.setHistoriqueCheque(0, Source, Cheque); + }else if(isSelectedContre == true){ + ChequeDB.setHistoriqueCheque(2, Source, Cheque); + } + startTask(); + } + }); + } + + + + +} diff --git a/src/main/java/Controllers/ChequeClt/ChequeCltGestionController.java b/src/main/java/Controllers/ChequeClt/ChequeCltGestionController.java new file mode 100644 index 0000000..8529ed6 --- /dev/null +++ b/src/main/java/Controllers/ChequeClt/ChequeCltGestionController.java @@ -0,0 +1,482 @@ +package Controllers.ChequeClt; + +import Models.ChequeClt.ChequeCltDB; +import Models.ChequeClt.ChequeCltGestionListe; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class ChequeCltGestionController implements Initializable { + + @FXML private AnchorPane PaneChequeCltGestion; + + @FXML private ProgressBar ProgressBarChequeCltGestion; + + @FXML private Button ButtonSearchChequeCltGestion; + + @FXML public TableView TableViewChequeCltGestion ; + + @FXML private TableColumn TabColChequeClt; + @FXML private TableColumn TabColClient; + + @FXML private TableColumn TabColNumeroCheque; + @FXML private TableColumn TabColBanque; + @FXML private TableColumn TabColDateCheque; + @FXML private TableColumn TabColMontant; + @FXML private TableColumn TabColCodeClt; + @FXML private TableColumn TabColTypeClt; + @FXML private TableColumn TabColNomClt; + @FXML private TableColumn TabColPrenomClt; + @FXML private TableColumn TabColIdFacture; + @FXML private TableColumn TabColEtat; + @FXML private TableColumn TabColDetail; + + @FXML private TextField TextFieldNumeroCheque ; + @FXML private TextField TextFieldBanque ; + @FXML private TextField TextFieldCodeClt ; + @FXML private TextField TextFieldCINClt ; + @FXML private TextField TextFieldNomClt ; + @FXML private TextField TextFieldPrenomClt; + @FXML private TextField TextFieldIdFacture ; + + @FXML private DatePicker DatePickerCheque ; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount; + @FXML private ChoiceBox NbrLigne ; + + private Service ThreadSearchChequeCltGestion; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TabColChequeClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt; -fx-border-color: #4DAE4D;"); + TabColChequeClt.getStyleClass().add("Center"); + + TabColClient.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt; -fx-border-color:#428BCA;"); + TabColClient.getStyleClass().add("Center"); + + TabColNumeroCheque.setCellValueFactory(new PropertyValueFactory("NumeroCheque")); + TabColNumeroCheque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNumeroCheque.getStyleClass().add("Center"); + + TabColBanque.setCellValueFactory(new PropertyValueFactory("Banque")); + TabColBanque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColBanque.getStyleClass().add("Center"); + + TabColDateCheque.setCellValueFactory(new PropertyValueFactory("DateCheque")); + TabColDateCheque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateCheque.getStyleClass().add("Center"); + + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + TabColMontant.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColMontant.getStyleClass().add("Center"); + + TabColCodeClt.setCellValueFactory(new PropertyValueFactory("CodeClt")); + TabColCodeClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt; "); + TabColCodeClt.getStyleClass().add("Center"); + + TabColTypeClt.setCellValueFactory(new PropertyValueFactory("TypeClt")); + TabColTypeClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTypeClt.getStyleClass().add("Center"); + + TabColNomClt.setCellValueFactory(new PropertyValueFactory("NomClt")); + TabColNomClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNomClt.getStyleClass().add("Center"); + + TabColPrenomClt.setCellValueFactory(new PropertyValueFactory("PrenomClt")); + TabColPrenomClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColPrenomClt.getStyleClass().add("Center"); + + TabColIdFacture.setCellValueFactory(new PropertyValueFactory("IdFacture")); + TabColIdFacture.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColIdFacture.getStyleClass().add("Center"); + + TabColEtat.setCellValueFactory(new PropertyValueFactory("Etat")); + TabColEtat.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColEtat.getStyleClass().add("Center"); + + TabColEtat.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if(item!=null && item.equals("0")){ + Text text = new Text("sans provision"); + text.setFill(Color.web("#ff0000")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else if(item!=null && item.equals("1")){ + Text text = new Text("verser"); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else if(item!=null && item.equals("2")){ + Text text = new Text("contre chèque"); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + TabColDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + ButtonSearchChequeCltGestion.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchChequeCltGestion(); + } + }); + + PaneChequeCltGestion.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchChequeCltGestion(); + } + } + }); + + GestionSearchChequeClt(); + } + + @FXML + private void ChequeCltVerserButtonAction(ActionEvent event) throws IOException { + PaneChequeCltGestion.getChildren().clear(); + PaneChequeCltGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/ChequeClt/ChequeCltVercer.fxml"))); + } + + @FXML + private void ChequeCltProvisionButtonAction(ActionEvent event) throws IOException { + PaneChequeCltGestion.getChildren().clear(); + PaneChequeCltGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/ChequeClt/ChequeCltProvision.fxml"))); + } + + + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + final ChequeCltGestionListe current = (ChequeCltGestionListe) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + String IdChequeClt = current.getIdCheque(); + Integer Source = current.getSource(); + + final ChequeCltDetailController ChequeCltDetail = new ChequeCltDetailController(); + ChequeCltDetail.Show(); + ChequeCltDetail.Initialize(IdChequeClt, Source); + + ChequeCltDetail.ButtonExitChequeCltDetail.setOnAction(new EventHandler() { //supprimer le message du suucés et reaficher les formulaires + @Override + public void handle(ActionEvent event) { + ChequeCltDetail.AnchorPrincipal.setVisible(false); + if(ChequeCltDetail.LastEtat != null){ + ObservableList DataListChequeClt = ButtonCell.this.getTableView().getItems(); + DataListChequeClt.get(ButtonCell.this.getIndex()).setEtat(ChequeCltDetail.LastEtat); + TableViewChequeCltGestion.setItems(DataListChequeClt); + + //actualiser la ligne + TabColEtat.setVisible(false); + TabColEtat.setVisible(true); + } + } + }); + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchChequeCltGestion() + { + ProgressBarChequeCltGestion.setVisible(true); + + ButtonSearchChequeCltGestion.setDisable(true); + + ThreadSearchChequeCltGestion = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateCheque = ""; + if(DatePickerCheque.getValue() != null){ + DateCheque = DatePickerCheque.getValue().toString(); + } + + ObservableList ListChequeCltGestions = new ChequeCltDB().SearchChequeCltGestion( + position, + nbrligne, + TextFieldNumeroCheque.getText(), + TextFieldBanque.getText(), + DateCheque, + TextFieldCodeClt.getText(), + TextFieldCINClt.getText(), + TextFieldIdFacture.getText(), + TextFieldNomClt.getText(), + TextFieldPrenomClt.getText()); + + TableViewChequeCltGestion.setItems(ListChequeCltGestions); + + totalcount = new ChequeCltDB().nbrChequeCltGestion(TextFieldNumeroCheque.getText(), + TextFieldBanque.getText(), + DateCheque, + TextFieldCodeClt.getText(), + TextFieldCINClt.getText(), + TextFieldIdFacture.getText(), + TextFieldNomClt.getText(), + TextFieldPrenomClt.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchChequeCltGestion.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarChequeCltGestion.setVisible(false); + ButtonSearchChequeCltGestion.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchChequeCltGestion.start(); + } + + + private void NextLastSearchChequeCltGestion(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarChequeCltGestion.setVisible(true); + + ButtonSearchChequeCltGestion.setDisable(true); + + ThreadSearchChequeCltGestion = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateCheque = ""; + if(DatePickerCheque.getValue() != null){ + DateCheque = DatePickerCheque.getValue().toString(); + } + + ObservableList ListChequeCltGestions = new ChequeCltDB().SearchChequeCltGestion(ParmPosition, ParamNbrligne, TextFieldNumeroCheque.getText(), TextFieldBanque.getText(), DateCheque, TextFieldCodeClt.getText(), TextFieldCINClt.getText(), TextFieldIdFacture.getText(), TextFieldNomClt.getText(), TextFieldPrenomClt.getText()); + + TableViewChequeCltGestion.setItems(ListChequeCltGestions); + + return null; + } + }; + } + }; + + ThreadSearchChequeCltGestion.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarChequeCltGestion.setVisible(false); + ButtonSearchChequeCltGestion.setDisable(false); + } + }); + ThreadSearchChequeCltGestion.start(); + } + + private void GestionSearchChequeClt() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchChequeCltGestion(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchChequeCltGestion(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchChequeCltGestion(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + + +} + + + + diff --git a/src/main/java/Controllers/ChequeClt/ChequeCltProvisionController.java b/src/main/java/Controllers/ChequeClt/ChequeCltProvisionController.java new file mode 100644 index 0000000..eb12a54 --- /dev/null +++ b/src/main/java/Controllers/ChequeClt/ChequeCltProvisionController.java @@ -0,0 +1,466 @@ +package Controllers.ChequeClt; + +import Controllers.TraiteClt.TraiteCltPrintRetardController; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Models.ChequeClt.ChequeCltDB; +import Models.ChequeClt.ChequeCltGestionListe; +import Models.Stock.StockDB; +import Models.TraiteClt.TraiteCltDB; +import Models.TraiteClt.TraiteCltGestionListe; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.ResourceBundle; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.print.PageLayout; +import javafx.print.PageOrientation; +import javafx.print.PageRange; +import javafx.print.Paper; +import javafx.print.Printer; +import javafx.print.PrinterJob; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class ChequeCltProvisionController implements Initializable { + + @FXML private AnchorPane AnchorPaneChequeCltProvision; + + @FXML private ProgressBar ProgressBarChequeCltProvision; + + @FXML private Button ButtonSearchChequeCltProvision; + @FXML private Button ButtonPrintChequeCltProvision; + + @FXML private TableView TableViewChequeCltAvercer ; + + @FXML private TableColumn TabColNumeroCheque; + @FXML private TableColumn TabColBanque; + @FXML private TableColumn TabColDateCheque; + @FXML private TableColumn TabColMontant; + @FXML private TableColumn TabColTypeClt; + @FXML private TableColumn TabColNomClt; + @FXML private TableColumn TabColPrenomClt; + + @FXML private DatePicker DatePickerCheque ; + @FXML private ChoiceBox ChoiceBoxLocal ; + + @FXML private TextField TextFieldBanque ; + @FXML private TextField TextFieldCodeClt ; + @FXML private TextField TextFieldCINClt ; + @FXML private TextField TextFieldNomPrenomClt ; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount; + @FXML private ChoiceBox NbrLigne ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + ObservableList ListPrintChequeCltProvision; + + private Service ThreadSearchChequeCltProvision; + private Service ThreadPrintChequeCltProvision; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TabColNumeroCheque.setCellValueFactory(new PropertyValueFactory("NumeroCheque")); + TabColNumeroCheque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNumeroCheque.getStyleClass().add("Center"); + + TabColBanque.setCellValueFactory(new PropertyValueFactory("Banque")); + TabColBanque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColBanque.getStyleClass().add("Center"); + + TabColDateCheque.setCellValueFactory(new PropertyValueFactory("DateCheque")); + TabColDateCheque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateCheque.getStyleClass().add("Center"); + + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + TabColMontant.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColMontant.getStyleClass().add("Center"); + + TabColTypeClt.setCellValueFactory(new PropertyValueFactory("TypeClt")); + TabColTypeClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTypeClt.getStyleClass().add("Center"); + + + TabColNomClt.setCellValueFactory(new PropertyValueFactory("NomClt")); + TabColNomClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNomClt.getStyleClass().add("Center"); + + TabColPrenomClt.setCellValueFactory(new PropertyValueFactory("PrenomClt")); + TabColPrenomClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColPrenomClt.getStyleClass().add("Center"); + + ArrayList ListLocale = new StockDB().getAllListLocal(); + ChoiceBoxLocal.getItems().addAll(ListLocale); + + ButtonSearchChequeCltProvision.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchChequeCltProvision(); + } + }); + + AnchorPaneChequeCltProvision.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchChequeCltProvision(); + } + } + }); + + GestionSearchChequeCltProvision(); + + ButtonPrintChequeCltProvision.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + ImprimerChequeCltProvision(); + } + }); + } + + private void ImprimerChequeCltProvision() + { + ProgressBarChequeCltProvision.setVisible(true); + + ButtonPrintChequeCltProvision.setDisable(true); + + ThreadPrintChequeCltProvision = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateDebut = ""; + if(DatePickerCheque.getValue() != null){ + DateDebut = DatePickerCheque.getValue().toString(); + } + + ListPrintChequeCltProvision = new ChequeCltDB().SearchChequeCltProvision( + 0, + 0, + DateDebut, + (String) ChoiceBoxLocal.getValue(), + TextFieldBanque.getText(), + TextFieldCodeClt.getText(), + TextFieldCINClt.getText(), + TextFieldNomPrenomClt.getText(), + true); + + return null; + } + }; + } + }; + + ThreadPrintChequeCltProvision.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + + int SizeListeChequeCltProvision = ListPrintChequeCltProvision.size(); + + System.out.println(SizeListeChequeCltProvision); + + int total = SizeListeChequeCltProvision / 15 + 1 ; + int page = 0; + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + + jobPrint.getJobSettings().setPageRanges(new PageRange(1, total)); + + if (jobPrint.showPrintDialog(null)) + { + Printer printer = jobPrint.getPrinter(); + PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.LANDSCAPE, Printer.MarginType.DEFAULT); + + for (int i=0; i listTemp = FXCollections.observableArrayList(); + + for (int j=i; (j<(i+15)) && (j(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateDebut = ""; + if(DatePickerCheque.getValue() != null){ + DateDebut = DatePickerCheque.getValue().toString(); + } + + ObservableList ListChequeCltProvisions = new ChequeCltDB().SearchChequeCltProvision( + position, + nbrligne, + DateDebut, + (String) ChoiceBoxLocal.getValue(), + TextFieldBanque.getText(), + TextFieldCodeClt.getText(), + TextFieldCINClt.getText(), + TextFieldNomPrenomClt.getText(), + false); + + TableViewChequeCltAvercer.setItems(ListChequeCltProvisions); + + totalcount = new ChequeCltDB().nbrChequeCltProvision(DateDebut, + (String) ChoiceBoxLocal.getValue(), + TextFieldBanque.getText(), + TextFieldCodeClt.getText(), + TextFieldCINClt.getText(), + TextFieldNomPrenomClt.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchChequeCltProvision.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarChequeCltProvision.setVisible(false); + ButtonSearchChequeCltProvision.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchChequeCltProvision.start(); + } + + + private void NextLastSearchChequeCltProvision(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarChequeCltProvision.setVisible(true); + + ButtonSearchChequeCltProvision.setDisable(true); + + ThreadSearchChequeCltProvision = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateDebut = ""; + if(DatePickerCheque.getValue() != null){ + DateDebut = DatePickerCheque.getValue().toString(); + } + + ObservableList ListChequeCltProvisions = new ChequeCltDB().SearchChequeCltProvision(ParmPosition, ParamNbrligne, DateDebut, (String) ChoiceBoxLocal.getValue(), TextFieldBanque.getText(), TextFieldCodeClt.getText(), TextFieldCINClt.getText(), TextFieldNomPrenomClt.getText(), false); + + TableViewChequeCltAvercer.setItems(ListChequeCltProvisions); + + return null; + } + }; + } + }; + + ThreadSearchChequeCltProvision.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarChequeCltProvision.setVisible(false); + ButtonSearchChequeCltProvision.setDisable(false); + } + }); + ThreadSearchChequeCltProvision.start(); + } + + private void GestionSearchChequeCltProvision() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchChequeCltProvision(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchChequeCltProvision(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchChequeCltProvision(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + + +} diff --git a/src/main/java/Controllers/ChequeClt/ChequeCltProvisionPrintController.java b/src/main/java/Controllers/ChequeClt/ChequeCltProvisionPrintController.java new file mode 100644 index 0000000..4bad7d9 --- /dev/null +++ b/src/main/java/Controllers/ChequeClt/ChequeCltProvisionPrintController.java @@ -0,0 +1,77 @@ +package Controllers.ChequeClt; + +import Models.ChequeClt.ChequeCltGestionListe; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class ChequeCltProvisionPrintController implements Initializable { + + @FXML private Text TextNbr ; + @FXML private Text TextPage ; + + @FXML private TableView TableViewChequeCltProvision ; + + @FXML private TableColumn TabColNumeroCheque; + @FXML private TableColumn TabColBanque; + @FXML private TableColumn TabColDateCheque; + @FXML private TableColumn TabColMontant; + @FXML private TableColumn TabColNomClt; + @FXML private TableColumn TabColPrenomClt; + @FXML private TableColumn TabColLocal; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + TabColNumeroCheque.setCellValueFactory(new PropertyValueFactory("NumeroCheque")); + TabColNumeroCheque.setStyle( "-fx-alignment: CENTER; -fx-font-size: 10pt;"); + TabColNumeroCheque.getStyleClass().add("Center"); + + TabColBanque.setCellValueFactory(new PropertyValueFactory("Banque")); + TabColBanque.setStyle( "-fx-alignment: CENTER; -fx-font-size: 10pt;"); + TabColBanque.getStyleClass().add("Center"); + + TabColDateCheque.setCellValueFactory(new PropertyValueFactory("DateCheque")); + TabColDateCheque.setStyle( "-fx-alignment: CENTER; -fx-font-size: 10pt;"); + TabColDateCheque.getStyleClass().add("Center"); + + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + TabColMontant.setStyle( "-fx-alignment: CENTER; -fx-font-size: 10pt;"); + TabColMontant.getStyleClass().add("Center"); + + TabColNomClt.setCellValueFactory(new PropertyValueFactory("NomClt")); + TabColNomClt.setStyle( "-fx-alignment: CENTER; -fx-font-size: 10pt;"); + TabColNomClt.getStyleClass().add("Center"); + + TabColPrenomClt.setCellValueFactory(new PropertyValueFactory("PrenomClt")); + TabColPrenomClt.setStyle( "-fx-alignment: CENTER; -fx-font-size: 10pt;"); + TabColPrenomClt.getStyleClass().add("Center"); + + TabColLocal.setCellValueFactory(new PropertyValueFactory("etat")); + TabColLocal.setStyle( "-fx-alignment: CENTER; -fx-font-size: 10pt;"); + TabColLocal.getStyleClass().add("Center"); + } + + public void setChequeCltProvision( + String Nbr, + String Page, + ObservableList obsListChequeCltListe) + { + TextNbr.setText(Nbr); + TextPage.setText(Page); + TableViewChequeCltProvision.setItems(obsListChequeCltListe); + } +} diff --git a/src/main/java/Controllers/ChequeClt/ChequeCltVercerController.java b/src/main/java/Controllers/ChequeClt/ChequeCltVercerController.java new file mode 100644 index 0000000..5e0342e --- /dev/null +++ b/src/main/java/Controllers/ChequeClt/ChequeCltVercerController.java @@ -0,0 +1,274 @@ +/* + * 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 Controllers.ChequeClt; + +import Models.ChequeClt.ChequeCltDB; +import Models.ChequeClt.ChequeCltGestionListe; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.CheckBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import javafx.application.Platform; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.control.Button; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.KeyEvent; +import javafx.util.Callback; + + +/** + * FXML Controller class + * @author Maher + */ +public class ChequeCltVercerController implements Initializable { + + @FXML private ProgressBar ProgressBarVerser; + @FXML private CheckBox CheckboxSelectionner; + @FXML private Button ButtonVerserSelection; + + @FXML private Label LabelNbrSelectionner ; + + @FXML private DatePicker DatePickerDateDebut; + @FXML private DatePicker DatePickerDateFin; + + @FXML private TableView TableViewChequeCltVerser ; + + @FXML private TableColumn TabColSelectionner; + @FXML private TableColumn TabColNumeroCheque; + @FXML private TableColumn TabColBanque; + @FXML private TableColumn TabColDateCheque; + @FXML private TableColumn TabColMontant; + @FXML private TableColumn TabColTypeClt; + @FXML private TableColumn TabColNomClt; + @FXML private TableColumn TabColPrenomClt; + + ChequeCltDB ChequeDB= new ChequeCltDB(); + ObservableList DataListChequeClt; + + private String StrDateDebut; + private String StrDateFin; + private Integer NbrSelect; + private Integer NbrCount; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + DatePickerDateDebut.setValue(LocalDate.now()); + DatePickerDateFin.setValue(LocalDate.now()); + + StrDateDebut = DatePickerDateDebut.getValue().toString(); + StrDateFin = DatePickerDateFin.getValue().toString(); + + GetChequeCltAvercer(); + + CheckboxSelectionner.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + NbrSelect = 0; + ButtonVerserSelection.setDisable(true); + ButtonVerserSelection.setOpacity(0.82); + if(CheckboxSelectionner.isSelected()){ + for(ChequeCltGestionListe ListChequeClt : DataListChequeClt){ + ListChequeClt.setSelected(true); + NbrSelect++; + } + } else { + for(ChequeCltGestionListe ListChequeClt : DataListChequeClt){ + ListChequeClt.setSelected(false); + } + } + if(NbrSelect>0){ + ButtonVerserSelection.setDisable(false); + ButtonVerserSelection.setOpacity(1); + } + TableViewChequeCltVerser.setItems(DataListChequeClt); + LabelNbrSelectionner.setText(NbrSelect+"/"+NbrCount); + TabColSelectionner.setVisible(false); + TabColSelectionner.setVisible(true); + + } + }); + + TabColNumeroCheque.setCellValueFactory(new PropertyValueFactory("NumeroCheque")); + TabColNumeroCheque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNumeroCheque.getStyleClass().add("Center"); + + TabColBanque.setCellValueFactory(new PropertyValueFactory("Banque")); + TabColBanque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColBanque.getStyleClass().add("Center"); + + TabColDateCheque.setCellValueFactory(new PropertyValueFactory("DateCheque")); + TabColDateCheque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateCheque.getStyleClass().add("Center"); + + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + TabColMontant.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColMontant.getStyleClass().add("Center"); + + TabColTypeClt.setCellValueFactory(new PropertyValueFactory("TypeClt")); + TabColTypeClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTypeClt.getStyleClass().add("Center"); + + + TabColNomClt.setCellValueFactory(new PropertyValueFactory("NomClt")); + TabColNomClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNomClt.getStyleClass().add("Center"); + + TabColPrenomClt.setCellValueFactory(new PropertyValueFactory("PrenomClt")); + TabColPrenomClt.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColPrenomClt.getStyleClass().add("Center"); + + TabColSelectionner.setCellValueFactory(new PropertyValueFactory("Selected")); + TabColSelectionner.setStyle("-fx-alignment: CENTER;"); + TabColSelectionner.getStyleClass().add("Center"); + TabColSelectionner.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(Boolean item, boolean empty) { + if(item!=null){ + final CheckBox Check= new CheckBox(); + Check.setSelected(item); + Check.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + ChequeCltGestionListe DataListChequeClt = ((ChequeCltGestionListe)getTableRow().getItem()); + if(Check.isSelected()){ + DataListChequeClt.setSelected(true); + NbrSelect++; + } else { + DataListChequeClt.setSelected(true); + NbrSelect--; + } + LabelNbrSelectionner.setText(NbrSelect+"/"+NbrCount); + if(NbrSelect>0){ + ButtonVerserSelection.setDisable(false); + ButtonVerserSelection.setOpacity(1); + }else{ + ButtonVerserSelection.setDisable(true); + ButtonVerserSelection.setOpacity(0.82); + } + } + }); + setGraphic(Check); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + + + DatePickerDateDebut.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + try{ + StrDateDebut = DatePickerDateDebut.getConverter().fromString(DatePickerDateDebut.getEditor().getText()).toString(); + GetChequeCltAvercer(); + }catch(Exception ex){} + + } + }); + DatePickerDateDebut.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + try{ + StrDateDebut = DatePickerDateDebut.getConverter().fromString(DatePickerDateDebut.getEditor().getText()).toString(); + GetChequeCltAvercer(); + }catch(Exception ex){} + } + }); + + + DatePickerDateFin.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent actionEvent){ + try{ + StrDateFin = DatePickerDateFin.getConverter().fromString(DatePickerDateFin.getEditor().getText()).toString(); + GetChequeCltAvercer(); + }catch(Exception ex){} + } + }); + DatePickerDateFin.setOnKeyReleased(new EventHandler(){ + @Override + public void handle(KeyEvent ke){ + try{ + StrDateFin = DatePickerDateFin.getConverter().fromString(DatePickerDateFin.getEditor().getText()).toString(); + GetChequeCltAvercer(); + }catch(Exception ex){} + } + }); + + ButtonVerserSelection.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + List ArrayChequeClt = new ArrayList<>(); + List ArrayChequePaiementTraite = new ArrayList<>(); //traite_paiement_cheque_clt + for(ChequeCltGestionListe ListChequeClt : DataListChequeClt){ + if( (ListChequeClt.getSelected()) && (ListChequeClt.getSource() == 0) ){ + ArrayChequeClt.add(ListChequeClt.getIdCheque()); + } + if( (ListChequeClt.getSelected()) && (ListChequeClt.getSource() == 1) ){ + ArrayChequePaiementTraite.add(ListChequeClt.getIdCheque()); + } + } + Integer NbrUpdateChequeClt = ChequeDB.UpdateChequeCltVerser(ArrayChequeClt, ArrayChequePaiementTraite); + if(NbrUpdateChequeClt>0){ + GetChequeCltAvercer(); + } + } + }); + + } + + + public void GetChequeCltAvercer(){ + + ProgressBarVerser.setVisible(true); + + // Create a Runnable + Runnable task = new Runnable(){ + public void run(){ + Platform.runLater(new Runnable(){ + @Override + public void run(){ + DataListChequeClt = ChequeDB.GetDataChequeAverser(StrDateDebut, StrDateFin); + TableViewChequeCltVerser.setItems(DataListChequeClt); + NbrCount = DataListChequeClt.size(); + NbrSelect = 0; + LabelNbrSelectionner.setText(NbrSelect+"/"+NbrCount); + ProgressBarVerser.setVisible(false); + } + }); + } + }; + Thread backgroundThread = new Thread(task);// Run the task in a background thread + backgroundThread.setDaemon(true);// Terminate the running thread if the application exits + backgroundThread.start();// Start the thread + } + + + + + + +} diff --git a/src/main/java/Controllers/Client/AjouterClientController.java b/src/main/java/Controllers/Client/AjouterClientController.java new file mode 100644 index 0000000..69c345c --- /dev/null +++ b/src/main/java/Controllers/Client/AjouterClientController.java @@ -0,0 +1,54 @@ +/* + * 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 Controllers.Client; + +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; + + +public class AjouterClientController implements Initializable { + + @FXML private AnchorPane AnchorPaneCltBody ; + @FXML public StackPane typecompte ; + + @Override + public void initialize(URL url, ResourceBundle rb) { + try { + //AnchorPaneCltBody.getChildren().clear(); + AnchorPaneCltBody.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Client/AjouterClientPersonne.fxml"))); + } catch (IOException ex) { + Logger.getLogger(AjouterClientController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + + @FXML + public void AjouterClientEntrepriseRadioAction(ActionEvent event) throws IOException { + AnchorPaneCltBody.getChildren().clear(); + AnchorPaneCltBody.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Client/AjouterClientEntreprise.fxml"))); + } + + @FXML + public void AjouterClientPersonneRadioAction(ActionEvent event) throws IOException { + AnchorPaneCltBody.getChildren().clear(); + AnchorPaneCltBody.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Client/AjouterClientPersonne.fxml"))); + } + + public void delete(){ + typecompte.getChildren().clear(); + // System.out.println("dfgsdf"); + } +} diff --git a/src/main/java/Controllers/Client/AjouterClientEntrepriseController.java b/src/main/java/Controllers/Client/AjouterClientEntrepriseController.java new file mode 100644 index 0000000..e948702 --- /dev/null +++ b/src/main/java/Controllers/Client/AjouterClientEntrepriseController.java @@ -0,0 +1,448 @@ +/* + * 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 Controllers.Client; + +import Controllers.Dialog.Notification; +import Controllers.Traitement.contro; +import Models.Client.ClientEntreprise; +import Models.Client.ClientEntrepriseContact; +import Models.Client.ClientEntrepriseContactDB; +import Models.Client.ClientEntrepriseDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.animation.FadeTransition; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Duration; + +/** + * FXML Controller class + * + * @author Maher + */ +public class AjouterClientEntrepriseController implements Initializable { + + @FXML private AnchorPane AnchorPaneAjouterClientEntreprise ; + @FXML private AnchorPane AnchorPaneAjouterCltEntreprise ; + + @FXML private Text ErreurClientEntrepriseCode ; + @FXML private Text ErreurClientEntrepriseNom ; + @FXML private Text ErreurClientEntrepriseGerant ; + @FXML private Text ErreurClientEntrepriseMatricule ; + @FXML private Text ErreurClientEntrepriseAdresse ; + @FXML private Text ErreurClientEntreprisePostale ; + @FXML private Text ErreurClientEntrepriseTele1 ; + @FXML private Text ErreurClientEntrepriseTele2 ; + @FXML private Text ErreurClientEntrepriseMail ; + @FXML private Text ErreurClientEntrepriseFax ; + @FXML private Text ErreurClientEntrepriseContactNom ; + @FXML private Text ErreurClientEntrepriseContactPrenom ; + @FXML private Text ErreurClientEntrepriseContactCIN ; + @FXML private Text ErreurClientEntrepriseContactMail ; + @FXML private Text ErreurClientEntrepriseContactTele1 ; + @FXML private Text ErreurClientEntrepriseContactTele2 ; + + @FXML private TextField ChampClientEntrepriseCode; + @FXML private TextField ChampClientEntrepriseNom; + @FXML private TextField ChampClientEntrepriseGerant ; + @FXML private TextField ChampClientEntrepriseMatricule; + @FXML private TextField ChampClientEntrepriseAdresse; + @FXML private TextField ChampClientEntreprisePostale; + @FXML private TextField ChampClientEntrepriseTele1; + @FXML private TextField ChampClientEntrepriseTele2; + @FXML private TextField ChampClientEntrepriseMail; + @FXML private TextField ChampClientEntrepriseFax; + @FXML private TextField ChampClientEntrepriseContactNom; + @FXML private TextField ChampClientEntrepriseContactPrenom; + @FXML private TextField ChampClientEntrepriseContactCIN; + @FXML private TextField ChampClientEntrepriseContactMail; + @FXML private TextField ChampClientEntrepriseContactTele1; + @FXML private TextField ChampClientEntrepriseContactTele2; + + + + contro ctl= new contro() ; + ClientEntreprise MyClientEntreprise = new ClientEntreprise(); + ClientEntrepriseContact MyClientEntrepriseContact = new ClientEntrepriseContact(); + ClientEntrepriseDB MyCltEtrDB = new ClientEntrepriseDB(); + ClientEntrepriseContactDB MyCltEtrCta = new ClientEntrepriseContactDB(); + + + @Override + public void initialize(URL url, ResourceBundle rb) { + + //lors de clique sur le textfilde Code de l'entreprise + ChampClientEntrepriseCode.setOnKeyReleased(new EventHandler() { + public void handle(KeyEvent ke) { + try {// if is number + Integer.parseInt(ChampClientEntrepriseCode.getText()); + int cin =Integer.parseInt(ChampClientEntrepriseCode.getText()); + if(MyCltEtrDB.verifyCodeEntreprise(cin)){ + ErreurClientEntrepriseCode.setText("Code entreprise existe déja"); + ChampClientEntrepriseCode.setStyle("-fx-border-color:#f20606;"); + } + else{ + ErreurClientEntrepriseCode.setText(""); + ChampClientEntrepriseCode.setStyle("-fx-border-color: transparent;"); + } + } + catch (NumberFormatException e) { + ErreurClientEntrepriseCode.setText("Code doit être un numéro"); + ChampClientEntrepriseCode.setStyle("-fx-border-color:#f20606;"); + } + } + + }); + } + + + + + + @FXML + public void AjouterClientEntrepriseButtonAction(ActionEvent event) throws IOException { + if(!ControlesEtr()){ + if(!ControlesEtrContact()){ + //recupération des données dont l'objet + this.getClientEntreprise(); + //l'insertion des données dont la Base des données et afficher le message du succés + if(MyCltEtrDB.addEntreprise(MyClientEntreprise)){ + this.getClientEntrepriseContact(); + if(MyCltEtrCta.addClientEntrepriseContact(MyClientEntrepriseContact)){ + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneAjouterCltEntreprise); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.play(); + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) { + Image success = new Image(getClass().getResourceAsStream("/Public/icon/successfully.png")); + ImageView iv1 = new ImageView(); + iv1.setImage(success); + + Text text= new Text(); + text.setText("l'ajouter a été effectuée avec succès"); + text.setFont(Font.loadFont(getClass().getResourceAsStream("/Public/Fonts/Raleway-SemiBold.ttf"), 20)); + + Button AddClient = new Button("OK"); + AddClient.getStyleClass().add("btn-primary"); + AddClient.setPrefSize(100, 30); + + final StackPane stackpane = new StackPane(); + stackpane.setLayoutX(140); + stackpane.setLayoutY(100); + stackpane.setPrefHeight(200); + stackpane.setPrefWidth(200); + stackpane.getChildren().add(iv1); + stackpane.getChildren().add(text); + stackpane.getChildren().add(AddClient); + StackPane.setAlignment(iv1, Pos.BASELINE_CENTER); + StackPane.setAlignment(text, Pos.TOP_CENTER); + StackPane.setAlignment(AddClient, Pos.CENTER); + + AnchorPaneAjouterClientEntreprise.setLeftAnchor(stackpane, 83.0); + AnchorPaneAjouterClientEntreprise.setRightAnchor(stackpane, 83.0); + AnchorPaneAjouterClientEntreprise.setTopAnchor(stackpane,200.0); + AnchorPaneAjouterClientEntreprise.setBottomAnchor(stackpane,200.0); + AnchorPaneAjouterClientEntreprise.getChildren().add(stackpane); + + AddClient.setOnAction(new EventHandler() { //supprimer le message du suucés et reaficher les formulaires + @Override + public void handle(ActionEvent event) { + stackpane.setVisible(false); + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneAjouterCltEntreprise); + ft.setFromValue(0.0); + ft.setToValue(1.0); + ft.play(); + restechamp(); + } + }); + } + }); + } + } + } + } + } + + + private void restechamp(){ + ChampClientEntrepriseCode.setText(""); + ChampClientEntrepriseNom.setText(""); + ChampClientEntrepriseGerant.setText(""); + ChampClientEntrepriseMatricule.setText(""); + ChampClientEntrepriseAdresse.setText(""); + ChampClientEntreprisePostale.setText(""); + ChampClientEntrepriseTele1.setText(""); + ChampClientEntrepriseTele2.setText(""); + ChampClientEntrepriseMail.setText(""); + ChampClientEntrepriseFax.setText(""); + ChampClientEntrepriseContactNom.setText(""); + ChampClientEntrepriseContactPrenom.setText(""); + ChampClientEntrepriseContactCIN.setText(""); + ChampClientEntrepriseContactMail.setText(""); + ChampClientEntrepriseContactTele1.setText(""); + ChampClientEntrepriseContactTele2.setText(""); + } + + + private void getClientEntreprise(){ + MyClientEntreprise.setCodeString(ChampClientEntrepriseCode.getText()); + MyClientEntreprise.setNom(ChampClientEntrepriseNom.getText()); + MyClientEntreprise.setGerant(ChampClientEntrepriseGerant.getText()); + MyClientEntreprise.setMatricule(ChampClientEntrepriseMatricule.getText()); + MyClientEntreprise.setAdresse(ChampClientEntrepriseAdresse.getText()); + MyClientEntreprise.setPostaleString(ChampClientEntreprisePostale.getText()); + MyClientEntreprise.setTele1String(ChampClientEntrepriseTele1.getText()); + MyClientEntreprise.setTele2String(ChampClientEntrepriseTele2.getText()); + MyClientEntreprise.setMail(ChampClientEntrepriseMail.getText()); + MyClientEntreprise.setFaxString(ChampClientEntrepriseFax.getText()); + } + + private void getClientEntrepriseContact(){ + MyClientEntrepriseContact.setNom(ChampClientEntrepriseContactNom.getText()); + MyClientEntrepriseContact.setPrenom(ChampClientEntrepriseContactPrenom.getText()); + MyClientEntrepriseContact.setCINString(ChampClientEntrepriseContactCIN.getText()); + MyClientEntrepriseContact.setTele1String(ChampClientEntrepriseContactTele1.getText()); + MyClientEntrepriseContact.setTele2String(ChampClientEntrepriseContactTele2.getText()); + MyClientEntrepriseContact.setMail(ChampClientEntrepriseContactMail.getText()); + MyClientEntrepriseContact.setIdcltentreprise(MyClientEntreprise.getCode()); + } + + + + + + //methode qui afficher une fenêtre de notification "code client Etreprise générer par le systeme + private void getidcltEtr(){ + if(MyCltEtrDB.getidClientEtr()>=0){ + final Notification notification = new Notification(); + + notification.DetailMSG.getChildren().clear(); + + final String ch = String.valueOf(MyCltEtrDB.getidClientEtr()+1) ; + Text text1 = new Text(); + text1.setText("Code Entreprise vide \n \n"); + text1.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + text1.setFill(Color.web("#363a38")); + notification.DetailMSG.getChildren().add(text1); + + Text text2 = new Text(); + text2.setText("Voulez vous que system génére le code d'entreprise par le numéro suivant:"); + text2.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + text2.setFill(Color.web("#363a38")); + notification.DetailMSG.getChildren().add(text2); + + Text text3 = new Text(); + text3.setText(ch); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + text3.setFill(Color.web("#363a38")); + notification.DetailMSG.getChildren().add(text3); + + notification.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + notification.stackpane.setVisible(false); + ChampClientEntrepriseCode.setText(ch); + } + }); + notification.ShowNotification(); + } + + } + + + + + + + + + + private boolean ControlesEtr(){ + + boolean result=false ; + + if(ChampClientEntrepriseCode.getText().length()==0){ + this.getidcltEtr(); + result= true ; + } + else if(ctl.isNumericNotnull(ChampClientEntrepriseCode.getText())){ + ChampClientEntrepriseCode.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseCode.setText("Code doit être un numéro"); + result= true ; + } + else{ + if(ChampClientEntrepriseNom.getText().length()<3){ + ChampClientEntrepriseNom.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseNom.setText("Nom doit dépasser 3 caractère"); + result= true ; + } + else{ + ChampClientEntrepriseNom.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseNom.setText(""); + if(ChampClientEntrepriseGerant.getText().length()<3){ + ChampClientEntrepriseGerant.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseGerant.setText("Gérant doit dépasser 3 caractère"); + result= true ; + } + else{ + ChampClientEntrepriseGerant.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseGerant.setText(""); + if(ctl.isNumeric(ChampClientEntrepriseMatricule.getText())){ + ChampClientEntrepriseMatricule.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseMatricule.setText("Matricule doit être numéro"); + result= true ; + } + else{ + ChampClientEntrepriseMatricule.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseMatricule.setText(""); + if(ChampClientEntrepriseAdresse.getText().length()<3){ + ChampClientEntrepriseAdresse.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseAdresse.setText("L'adresse doit dépasser 3 caractère"); + result= true ; + } + else{ + ChampClientEntrepriseAdresse.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseAdresse.setText(""); + + if(ctl.isNumeric(ChampClientEntreprisePostale.getText())){ + ChampClientEntreprisePostale.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntreprisePostale.setText("code doit être numéro"); + result= true ; + } + else{ + ChampClientEntreprisePostale.setStyle("-fx-border-color:transparent;"); + ErreurClientEntreprisePostale.setText(""); + if(ctl.isNumericNotnull(ChampClientEntrepriseTele1.getText())){ + ChampClientEntrepriseTele1.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseTele1.setText("Tele doit être numéro"); + result= true ; + } + else{ + ChampClientEntrepriseTele1.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseTele1.setText(""); + if(ctl.isNumeric(ChampClientEntrepriseTele2.getText())){ + ChampClientEntrepriseTele2.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseTele2.setText("Tele2 doit être numéro"); + result= true ; + } + else{ + ChampClientEntrepriseTele2.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseTele2.setText(""); + if(ctl.isNumeric(ChampClientEntrepriseFax.getText())){ + ChampClientEntrepriseFax.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseFax.setText("Fax doit être numéro"); + result= true ; + } + else{ + ChampClientEntrepriseFax.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseFax.setText(""); + if(ChampClientEntrepriseMail.getText().length()>0 && ChampClientEntrepriseMail.getText().indexOf("@")< 0){ + ChampClientEntrepriseMail.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseMail.setText("invalide mail"); + result= true ; + } + else{ + ChampClientEntrepriseMail.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseMail.setText(""); + } + + } + } + } + } + } + } + } + } + } + + + return result ; + } + + + + private boolean ControlesEtrContact(){ + boolean result=false ; + if(ChampClientEntrepriseContactNom.getText().length()<4){ + ChampClientEntrepriseContactNom.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactNom.setText("Nom doit dépasser 4 caractère"); + result= true ; + } + else{ + ChampClientEntrepriseContactNom.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactNom.setText(""); + if(ChampClientEntrepriseContactPrenom.getText().length()<4){ + ChampClientEntrepriseContactPrenom.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactPrenom.setText("Prénom doit dépasser 4 caractère"); + result= true ; + } + else{ + ChampClientEntrepriseContactPrenom.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactPrenom.setText(""); + if(ctl.isNumeric(ChampClientEntrepriseContactCIN.getText())){ + ChampClientEntrepriseContactCIN.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactCIN.setText("CIN doit être un numéro"); + result= true ; + } + else{ + ChampClientEntrepriseContactCIN.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactCIN.setText(""); + if(ChampClientEntrepriseContactMail.getText().length()>0){ + if(ChampClientEntrepriseContactMail.getText().indexOf("@")< 0){ + ChampClientEntrepriseContactMail.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactMail.setText("invalide mail"); + result= true ; + } + else{ + ChampClientEntrepriseContactMail.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactMail.setText(""); + } + } + if(ctl.isNumericNotnull(ChampClientEntrepriseContactTele1.getText())){ + ChampClientEntrepriseContactTele1.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactTele1.setText("Tele doit être un numéro"); + result= true ; + } + else{ + ChampClientEntrepriseContactTele1.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactTele1.setText(""); + if(ctl.isNumeric(ChampClientEntrepriseContactTele2.getText())){ + ChampClientEntrepriseContactTele2.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactTele2.setText("Tele doit être un numéro"); + result= true ; + } + else{ + ChampClientEntrepriseContactTele2.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactTele2.setText(""); + } + } + } + + } + + } + return result ; + } +} diff --git a/src/main/java/Controllers/Client/AjouterClientPersonneController.java b/src/main/java/Controllers/Client/AjouterClientPersonneController.java new file mode 100644 index 0000000..8bb57d9 --- /dev/null +++ b/src/main/java/Controllers/Client/AjouterClientPersonneController.java @@ -0,0 +1,398 @@ +/* + * 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 Controllers.Client; + +import Controllers.Dialog.Notification; +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.contro; +import Models.Client.Client; +import Models.Client.ClientDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.animation.FadeTransition; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.DatePicker; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Duration; + +/** + * FXML Controller class + * + * @author Maher + */ +public class AjouterClientPersonneController implements Initializable { + + @FXML private AnchorPane AnchorPaneAjouterClientPersonne ; + @FXML private AnchorPane AnchorPaneAjouterCltPersonne ; + @FXML private TextField AjouterClientCode; + @FXML private TextField AjouterClientCIN; + @FXML private TextField AjouterClientNomComplet; + @FXML private TextField AjouterClientNom; + @FXML private TextField AjouterClientPrenom; + @FXML private DatePicker AjouterClientNaissance; + @FXML private TextField AjouterClientTeleFixe; + @FXML private TextField AjouterClientTeleMobile; + @FXML private TextField AjouterClientAdresse; + @FXML private TextField AjouterClientCodePostal; + @FXML private TextField AjouterClientMail; + @FXML public ToggleGroup groupesexe; + @FXML private RadioButton AjouterClientSexeHomme; + @FXML private RadioButton AjouterClientSexeFemme; + + + @FXML private Text ErreurCode ; + @FXML private Text ErreurCIN ; + @FXML private Text ErreurNomComplet ; + @FXML private Text ErreurNom ; + @FXML private Text ErreurPrenom ; + @FXML private Text ErreurNaissance ; + @FXML private Text ErreurTeleFixe ; + @FXML private Text ErreurTeleMobile ; + @FXML private Text ErreurAdresse ; + @FXML private Text ErreurCodePostal ; + @FXML private Text ErreurMail ; + @FXML private Text ErreurSexe ; + + contro ctl= new contro() ; + Client Myclient = new Client(); + ClientDB dbclient = new ClientDB(); + + + @FXML + public void AjouterClientPersonneButtonAction(ActionEvent event) throws IOException { + + if(!this.Controles()){ + + this.getclient(); //recupératiion des données dont l'objet Myclient + + if(dbclient.addClient(Myclient)){ //l'insertion des données dont la Base des données et afficher le message du succés + + + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneAjouterCltPersonne); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.play(); + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) { + //Image success = new Image(file.toURI().toString()+"successfully.png"); + Image success = new Image(getClass().getResourceAsStream("/Public/icon/successfully.png")); + ImageView iv1 = new ImageView(); + iv1.setImage(success); + + Text text= new Text(); + text.setText("l'ajouter a été effectuée avec succès"); + text.setFont(Font.loadFont(getClass().getResourceAsStream("/Public/Fonts/Raleway-SemiBold.ttf"), 20)); + + Button AddClient = new Button("OK"); + AddClient.getStyleClass().add("btn-success"); + AddClient.setPrefSize(100, 30); + + final StackPane stackpane = new StackPane(); + stackpane.setLayoutX(140); + stackpane.setLayoutY(100); + stackpane.setPrefHeight(200); + stackpane.setPrefWidth(200); + stackpane.getChildren().add(iv1); + stackpane.getChildren().add(text); + stackpane.getChildren().add(AddClient); + StackPane.setAlignment(iv1, Pos.BASELINE_CENTER); + StackPane.setAlignment(text, Pos.TOP_CENTER); + StackPane.setAlignment(AddClient, Pos.CENTER); + + AnchorPaneAjouterClientPersonne.setLeftAnchor(stackpane, 83.0); + AnchorPaneAjouterClientPersonne.setRightAnchor(stackpane, 83.0); + AnchorPaneAjouterClientPersonne.setTopAnchor(stackpane,220.0); + AnchorPaneAjouterClientPersonne.setBottomAnchor(stackpane,220.0); + AnchorPaneAjouterClientPersonne.getChildren().add(stackpane); + + AddClient.setOnAction(new EventHandler() { //supprimer le message du suucés et reaficher les formulaires + @Override + public void handle(ActionEvent event) { + stackpane.setVisible(false); + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneAjouterCltPersonne); + ft.setFromValue(0.0); + ft.setToValue(1.0); + ft.play(); + restechamp(); + } + }); + } + }); + + } + else{ + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + + } + + + } + + private void getclient(){ + Myclient.setCinString(AjouterClientCIN.getText()); + Myclient.setCodeclientString(AjouterClientCode.getText()); + Myclient.setNomcomplet(AjouterClientNomComplet.getText()); + Myclient.setNom(AjouterClientNom.getText()); + Myclient.setPrenom(AjouterClientPrenom.getText()); + Myclient.setNaissanceDatePicker(AjouterClientNaissance.getValue()); + Myclient.setTelefixString(AjouterClientTeleFixe.getText()); + Myclient.setTelemobileString(AjouterClientTeleMobile.getText()); + Myclient.setSexeString(groupesexe.getSelectedToggle().getUserData().toString()); + Myclient.setAdresse(AjouterClientAdresse.getText()); + Myclient.setCodepostal(AjouterClientCodePostal.getText()); + Myclient.setMail(AjouterClientMail.getText()); + } + + + //methode qui afficher une fenêtre de notification "code client générer par le systeme + private void getidclt(){ + final Notification notification = new Notification(); + + notification.DetailMSG.getChildren().clear(); + + final String ch = String.valueOf(dbclient.getidClient()+1) ; + Text text1 = new Text(); + text1.setText("Code client vide \n \n"); + text1.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + text1.setFill(Color.web("#363a38")); + notification.DetailMSG.getChildren().add(text1); + + Text text2 = new Text(); + text2.setText("Voulez vous que system génére le code client par le numéro suivant:"); + text2.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + text2.setFill(Color.web("#363a38")); + notification.DetailMSG.getChildren().add(text2); + + Text text3 = new Text(); + text3.setText(ch); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + text3.setFill(Color.web("#363a38")); + notification.DetailMSG.getChildren().add(text3); + + notification.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + notification.stackpane.setVisible(false); + AjouterClientCode.setText(ch); + } + }); + notification.ShowNotification(); + } + + + + //fider tous les champs du formulaires + private void restechamp(){ + AjouterClientCIN.setText(""); + AjouterClientCode.setText(""); + AjouterClientNomComplet.setText(""); + AjouterClientNom.setText(""); + AjouterClientPrenom.setText(""); + AjouterClientNaissance.setValue(null); + AjouterClientTeleFixe.setText(""); + AjouterClientTeleMobile.setText(""); + AjouterClientCodePostal.setText(""); + AjouterClientAdresse.setText(""); + AjouterClientMail.setText(""); + AjouterClientSexeHomme.setSelected(false); + AjouterClientSexeFemme.setSelected(false); + } + + + @Override + public void initialize(URL url, ResourceBundle rb) { + AjouterClientSexeHomme.setUserData("Homme"); + AjouterClientSexeFemme.setUserData("Femme"); + + //lors de clique sur le textfilde CIN + AjouterClientCIN.setOnKeyReleased(new EventHandler() { + public void handle(KeyEvent ke) { + try {// if is number + Integer.parseInt(AjouterClientCIN.getText()); + int cin =Integer.parseInt(AjouterClientCIN.getText()); + if(dbclient.verifyCinClient(cin)){ + ErreurCIN.setText("CIN existe déja"); + AjouterClientCIN.setStyle("-fx-border-color:#f20606;"); + } + else{ + ErreurCIN.setText(""); + AjouterClientCIN.setStyle("-fx-border-color: transparent;"); + } + } + catch (NumberFormatException e) { + ErreurCIN.setText("CIN doit être 8 numéro"); + AjouterClientCIN.setStyle("-fx-border-color:#f20606;"); + } + } + + }); + + + + } + + + + private boolean Controles(){ + boolean result ; + if(AjouterClientCode.getText().length()== 0){ //code client vide + this.getidclt(); + result= true ; + } + else if(ctl.isNumeric(AjouterClientCode.getText())){ //code client n'est pas un numero + AjouterClientCode.setStyle("-fx-border-color:#f20606;"); + ErreurCode.setText("code client doit être numéro"); + result= true ; + } + else if(dbclient.verifyIdClient(Integer.parseInt(AjouterClientCode.getText()))){ //code client existe déja + AjouterClientCode.setStyle("-fx-border-color:#f20606;"); + ErreurCode.setText("code client existe déja"); + result= true ; + } + else{ + AjouterClientCode.setStyle("-fx-border-color:transparent;"); + ErreurCode.setText(""); + if((AjouterClientCIN.getText().length()!= 8) || (ctl.isNumericNotnull(AjouterClientCIN.getText()))){ + ErreurCIN.setText("CIN doit être 8 numéro"); + AjouterClientCIN.setStyle("-fx-border-color:#f20606;"); + result= true ; + } + else{ + ErreurCIN.setText(""); + AjouterClientCIN.setStyle("-fx-border-color: transparent;"); + if(dbclient.verifyCinClient(Integer.parseInt(AjouterClientCIN.getText()))){ + ErreurCIN.setText("CIN existe déja"); + AjouterClientCIN.setStyle("-fx-border-color:#f20606;"); + result= true ; + } + else{ + ErreurCIN.setText(""); + AjouterClientCIN.setStyle("-fx-border-color: transparent;"); + if(AjouterClientNomComplet.getText().length()<10){ + ErreurNomComplet.setText("Client doit dépasser 10 catactaire"); + AjouterClientNomComplet.setStyle("-fx-border-color:#f20606;"); + result= true ; + } + else{ + ErreurNomComplet.setText(""); + AjouterClientNomComplet.setStyle("-fx-border-color: transparent;"); + if(AjouterClientPrenom.getText().length()<3){ + AjouterClientPrenom.setStyle("-fx-border-color:#f20606;"); + ErreurPrenom.setText("le prénom doit dépasser 3 caractaire"); + result= true ; + } + else{ + ErreurPrenom.setText(""); + AjouterClientPrenom.setStyle("-fx-border-color: transparent;"); + if(AjouterClientNom.getText().length()<3){ + AjouterClientNom.setStyle("-fx-border-color:#f20606;"); + ErreurNom.setText("Prénom doit dépasser 3 caractaire"); + result= true ; + } + else{ + AjouterClientNom.setStyle("-fx-border-color: transparent;"); + ErreurNom.setText(""); + if(AjouterClientNaissance.getValue()==null){ + AjouterClientNaissance.setStyle("-fx-border-color:#f20606;"); + ErreurNaissance.setText("Date de naissance vide"); + result= true ; + } + else{ + AjouterClientNaissance.setStyle("-fx-border-color: transparent;"); + ErreurNaissance.setText(""); + if(ctl.isNumericNotnull(AjouterClientTeleFixe.getText())){ + AjouterClientTeleFixe.setStyle("-fx-border-color:#f20606;"); + ErreurTeleFixe.setText("tele doit être numéro"); + result= true ; + } + else{ + AjouterClientTeleFixe.setStyle("-fx-border-color: transparent;"); + ErreurTeleFixe.setText(""); + if(AjouterClientTeleMobile.getText().length()>0){ + if(ctl.isNumeric(AjouterClientTeleMobile.getText())){ + AjouterClientTeleMobile.setStyle("-fx-border-color:#f20606;"); + ErreurTeleMobile.setText("tele doit être numéro"); + result= true ; + } + else{ + AjouterClientTeleMobile.setStyle("-fx-border-color: transparent;"); + ErreurTeleMobile.setText(""); + } + } + if(groupesexe.getSelectedToggle()== null){ + ErreurSexe.setText("Veuillez sélectionner le sexe"); + result= true ; + } + else{ + ErreurSexe.setText(""); + if(AjouterClientAdresse.getText().length()<4){ + AjouterClientAdresse.setStyle("-fx-border-color: #f20606;"); + ErreurAdresse.setText("Adresse doit dépasser 4 caractaire"); + result= true ; + } + else{ + AjouterClientAdresse.setStyle("-fx-border-color: transparent;"); + ErreurAdresse.setText(""); + if(ctl.isNumeric(AjouterClientCodePostal.getText())){ + AjouterClientCodePostal.setStyle("-fx-border-color: #f20606;"); + ErreurCodePostal.setText("code doit être numéro"); + result= true ; + } + else{ + AjouterClientCodePostal.setStyle("-fx-border-color: transparent;"); + ErreurCodePostal.setText(""); + if(AjouterClientMail.getText().length()> 0){ + if(AjouterClientMail.getText().indexOf("@")< 0){ + AjouterClientMail.setStyle("-fx-border-color: #f20606;"); + ErreurMail.setText("invalide mail"); + result= true ; + } + else{ + AjouterClientMail.setStyle("-fx-border-color: transparent;"); + ErreurMail.setText(""); + result= false ; + } + } + else{ + result= false ; + } + } + + } + } + } + } + } + } + } + } + } + } + return result ; + } + +} diff --git a/src/main/java/Controllers/Client/DetailClientController.java b/src/main/java/Controllers/Client/DetailClientController.java new file mode 100644 index 0000000..aa24707 --- /dev/null +++ b/src/main/java/Controllers/Client/DetailClientController.java @@ -0,0 +1,552 @@ +/* + * 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 Controllers.Client; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.contro; +import Models.Client.Client; +import Models.Client.ClientDB; +import Models.Client.ClientEntreprise; +import Models.Client.ClientEntrepriseContact; +import Models.Client.ClientEntrepriseDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.animation.FadeTransition; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.DatePicker; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.util.Duration; + + +/** + * FXML Controller class + * @author PC-Maher + */ +public class DetailClientController implements Initializable { + + @FXML private StackPane StackPaneSucessCltPersonne; + @FXML private AnchorPane AnchorPaneModifierCltPersonne; + @FXML private AnchorPane AnchorPaneModifierCltEntreprise; + + @FXML public Text Nomclt ; + @FXML public Text Codeclt ; + + @FXML private TextField AjouterClientCode; + @FXML private TextField AjouterClientCIN; + @FXML private TextField AjouterClientNomComplet; + @FXML private TextField AjouterClientNom; + @FXML private TextField AjouterClientPrenom; + @FXML private DatePicker AjouterClientNaissance; + @FXML private TextField AjouterClientTeleFixe; + @FXML private TextField AjouterClientTeleMobile; + @FXML private TextField AjouterClientAdresse; + @FXML private TextField AjouterClientCodePostal; + @FXML private TextField AjouterClientMail; + @FXML public ToggleGroup groupesexe; + @FXML private RadioButton RadioButtonSexeHomme; + @FXML private RadioButton RadioButtonSexeFemme; + + @FXML private Text ErreurCode ; + @FXML private Text ErreurCIN ; + @FXML private Text ErreurNomComplet ; + @FXML private Text ErreurNom ; + @FXML private Text ErreurPrenom ; + @FXML private Text ErreurNaissance ; + @FXML private Text ErreurTeleFixe ; + @FXML private Text ErreurTeleMobile ; + @FXML private Text ErreurAdresse ; + @FXML private Text ErreurCodePostal ; + @FXML private Text ErreurMail ; + @FXML private Text ErreurSexe ; + + @FXML private Text ErreurClientEntrepriseNom ; + @FXML private Text ErreurClientEntrepriseGerant ; + @FXML private Text ErreurClientEntrepriseMatricule ; + @FXML private Text ErreurClientEntrepriseAdresse ; + @FXML private Text ErreurClientEntreprisePostale ; + @FXML private Text ErreurClientEntrepriseTele1 ; + @FXML private Text ErreurClientEntrepriseTele2 ; + @FXML private Text ErreurClientEntrepriseMail ; + @FXML private Text ErreurClientEntrepriseFax ; + @FXML private Text ErreurClientEntrepriseContactNom ; + @FXML private Text ErreurClientEntrepriseContactPrenom ; + @FXML private Text ErreurClientEntrepriseContactCIN ; + @FXML private Text ErreurClientEntrepriseContactMail ; + @FXML private Text ErreurClientEntrepriseContactTele1 ; + @FXML private Text ErreurClientEntrepriseContactTele2 ; + + @FXML private TextField ChampClientEntrepriseNom; + @FXML private TextField ChampClientEntrepriseGerant ; + @FXML private TextField ChampClientEntrepriseMatricule; + @FXML private TextField ChampClientEntrepriseAdresse; + @FXML private TextField ChampClientEntreprisePostale; + @FXML private TextField ChampClientEntrepriseTele1; + @FXML private TextField ChampClientEntrepriseTele2; + @FXML private TextField ChampClientEntrepriseMail; + @FXML private TextField ChampClientEntrepriseFax; + @FXML private TextField ChampClientEntrepriseContactNom; + @FXML private TextField ChampClientEntrepriseContactPrenom; + @FXML private TextField ChampClientEntrepriseContactCIN; + @FXML private TextField ChampClientEntrepriseContactMail; + @FXML private TextField ChampClientEntrepriseContactTele1; + @FXML private TextField ChampClientEntrepriseContactTele2; + + + ClientDB clientDB = new ClientDB(); + ClientEntrepriseDB EntrepriseCltDB = new ClientEntrepriseDB(); + + ClientEntreprise entreprise = new ClientEntreprise(); + ClientEntrepriseContact contactEtr = new ClientEntrepriseContact(); + + contro ctl= new contro() ; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + RadioButtonSexeFemme.setUserData("0"); + RadioButtonSexeHomme.setUserData("1"); + + } + + + public void setDataClient(String codeclt) + { + AnchorPaneModifierCltEntreprise.setVisible(false); + AnchorPaneModifierCltPersonne.setVisible(true); + + Client client = clientDB.getClient(codeclt); + + Codeclt.setText(codeclt); + Nomclt.setText(client.getNom()+" "+client.getPrenom()); + + AjouterClientCode.setText(client.getCodeclient()); + AjouterClientCIN.setText(client.getCinString()); + AjouterClientNomComplet.setText(client.getNomcomplet()); + AjouterClientNom.setText(client.getNom()); + AjouterClientPrenom.setText(client.getPrenom()); + AjouterClientNaissance.setValue(Adaptateur.StringToLocalDate(client.getNaissance().toString())); + AjouterClientTeleFixe.setText(client.getTelefixString()); + AjouterClientTeleMobile.setText(client.getTelemobileString()); + AjouterClientAdresse.setText(client.getAdresse()); + AjouterClientCodePostal.setText(client.getCodepostal()); + AjouterClientMail.setText(client.getMail()); + if(client.getSexe() == 1){ RadioButtonSexeHomme.setSelected(true); } + if(client.getSexe() == 0){ RadioButtonSexeFemme.setSelected(true); } + } + + + + @FXML + private void UpdateClientButtonAction(ActionEvent event) throws IOException + { + Client client = new Client(); + if(!this.ControlesClient()) + { + client.setCinString(AjouterClientCIN.getText()); + client.setCodeclientString(AjouterClientCode.getText()); + client.setNomcomplet(AjouterClientNomComplet.getText()); + client.setNom(AjouterClientNom.getText()); + client.setPrenom(AjouterClientPrenom.getText()); + client.setNaissanceDatePicker(AjouterClientNaissance.getValue()); + client.setTelefixString(AjouterClientTeleFixe.getText()); + client.setTelemobileString(AjouterClientTeleMobile.getText()); + client.setSexeString(groupesexe.getSelectedToggle().getUserData().toString()); + client.setAdresse(AjouterClientAdresse.getText()); + client.setCodepostal(AjouterClientCodePostal.getText()); + client.setMail(AjouterClientMail.getText()); + + if(clientDB.updateClient(client)) + { + + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneModifierCltPersonne); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.play(); + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) { + StackPaneSucessCltPersonne.setVisible(true); + } + }); + + } + + } + + } + + private boolean ControlesClient() + { + boolean result ; + + AjouterClientCode.setStyle("-fx-border-color:transparent;"); + ErreurCode.setText(""); + if((AjouterClientCIN.getText().length()!= 8) || (ctl.isNumericNotnull(AjouterClientCIN.getText()))){ + ErreurCIN.setText("CIN doit être 8 numéro"); + AjouterClientCIN.setStyle("-fx-border-color:#f20606;"); + result= true ; + } + else{ + + ErreurCIN.setText(""); + AjouterClientCIN.setStyle("-fx-border-color: transparent;"); + if(AjouterClientNomComplet.getText().length()<10){ + ErreurNomComplet.setText("Client doit dépasser 10 catactaire"); + AjouterClientNomComplet.setStyle("-fx-border-color:#f20606;"); + result= true ; + } + else{ + ErreurNomComplet.setText(""); + AjouterClientNomComplet.setStyle("-fx-border-color: transparent;"); + if(AjouterClientPrenom.getText().length()<3){ + AjouterClientPrenom.setStyle("-fx-border-color:#f20606;"); + ErreurPrenom.setText("le prénom doit dépasser 3 caractaire"); + result= true ; + } + else{ + ErreurPrenom.setText(""); + AjouterClientPrenom.setStyle("-fx-border-color: transparent;"); + if(AjouterClientNom.getText().length()<3){ + AjouterClientNom.setStyle("-fx-border-color:#f20606;"); + ErreurNom.setText("Prénom doit dépasser 3 caractaire"); + result= true ; + } + else{ + AjouterClientNom.setStyle("-fx-border-color: transparent;"); + ErreurNom.setText(""); + if(AjouterClientNaissance.getValue()==null){ + AjouterClientNaissance.setStyle("-fx-border-color:#f20606;"); + ErreurNaissance.setText("Date de naissance vide"); + result= true ; + } + else{ + AjouterClientNaissance.setStyle("-fx-border-color: transparent;"); + ErreurNaissance.setText(""); + if(ctl.isNumericNotnull(AjouterClientTeleFixe.getText())){ + AjouterClientTeleFixe.setStyle("-fx-border-color:#f20606;"); + ErreurTeleFixe.setText("tele doit être numéro"); + result= true ; + } + else{ + AjouterClientTeleFixe.setStyle("-fx-border-color: transparent;"); + ErreurTeleFixe.setText(""); + if(AjouterClientTeleMobile.getText() != ""){ + if(ctl.isNumeric(AjouterClientTeleMobile.getText())){ + AjouterClientTeleMobile.setStyle("-fx-border-color:#f20606;"); + ErreurTeleMobile.setText("tele doit être numéro"); + result= true ; + } + else{ + AjouterClientTeleMobile.setStyle("-fx-border-color: transparent;"); + ErreurTeleMobile.setText(""); + } + } + if(groupesexe.getSelectedToggle()== null){ + ErreurSexe.setText("Veuillez sélectionner le sexe"); + result= true ; + } + else{ + ErreurSexe.setText(""); + if(AjouterClientAdresse.getText().length()<4){ + AjouterClientAdresse.setStyle("-fx-border-color: #f20606;"); + ErreurAdresse.setText("Adresse doit dépasser 4 caractaire"); + result= true ; + } + else{ + AjouterClientAdresse.setStyle("-fx-border-color: transparent;"); + ErreurAdresse.setText(""); + if(ctl.isNumeric(AjouterClientCodePostal.getText())){ + AjouterClientCodePostal.setStyle("-fx-border-color: #f20606;"); + ErreurCodePostal.setText("code doit être numéro"); + result= true ; + } + else{ + AjouterClientCodePostal.setStyle("-fx-border-color: transparent;"); + ErreurCodePostal.setText(""); + if(AjouterClientMail.getText().length()> 0){ + if(AjouterClientMail.getText().indexOf("@")< 0){ + AjouterClientMail.setStyle("-fx-border-color: #f20606;"); + ErreurMail.setText("invalide mail"); + result= true ; + } + else{ + AjouterClientMail.setStyle("-fx-border-color: transparent;"); + ErreurMail.setText(""); + result= false ; + } + } + else{ + result= false ; + } + } + + } + } + } + } + } + } + } + + } + + return result ; + } + + /**********************Clt Entreprise******************************/ + + public void setDataEntreprise(String codeEtr) + { + + AnchorPaneModifierCltPersonne.setVisible(false); + AnchorPaneModifierCltEntreprise.setVisible(true); + entreprise = EntrepriseCltDB.GetClientEtr(codeEtr); + + Codeclt.setText(codeEtr); + Nomclt.setText(entreprise.getNom()); + + ChampClientEntrepriseNom.setText(entreprise.getNom()); + ChampClientEntrepriseGerant.setText(entreprise.getGerant()) ; + ChampClientEntrepriseMatricule.setText(entreprise.getMatricule()); + ChampClientEntrepriseAdresse.setText(entreprise.getAdresse()); + ChampClientEntreprisePostale.setText(entreprise.getPostalString()); + ChampClientEntrepriseTele1.setText(entreprise.getTele1String()); + ChampClientEntrepriseTele2.setText(entreprise.getTele2String()); + ChampClientEntrepriseMail.setText(entreprise.getMail()); + ChampClientEntrepriseFax.setText(entreprise.getFaxString()); + + contactEtr = entreprise.getContact(); + ChampClientEntrepriseContactNom.setText(contactEtr.getNom()); + ChampClientEntrepriseContactPrenom.setText(contactEtr.getPrenom()); + ChampClientEntrepriseContactCIN.setText(contactEtr.getCINString()); + ChampClientEntrepriseContactMail.setText(contactEtr.getMail()); + ChampClientEntrepriseContactTele1.setText(contactEtr.getTele1String()); + ChampClientEntrepriseContactTele2.setText(contactEtr.getTele2String()); + + } + + @FXML + private void UpdateClientEntrepriseButtonAction(ActionEvent event) throws IOException + { + if(!ControlesEtr()){ + if(!ControlesEtrContact()){ + + entreprise.setNom(ChampClientEntrepriseNom.getText()); + entreprise.setGerant(ChampClientEntrepriseGerant.getText()); + entreprise.setMatricule(ChampClientEntrepriseMatricule.getText()); + entreprise.setAdresse(ChampClientEntrepriseAdresse.getText()); + entreprise.setPostaleString(ChampClientEntreprisePostale.getText()); + entreprise.setTele1String(ChampClientEntrepriseTele1.getText()); + entreprise.setTele2String(ChampClientEntrepriseTele2.getText()); + entreprise.setMail(ChampClientEntrepriseMail.getText()); + entreprise.setFaxString(ChampClientEntrepriseFax.getText()); + + contactEtr.setNom(ChampClientEntrepriseContactNom.getText()); + contactEtr.setPrenom(ChampClientEntrepriseContactPrenom.getText()); + contactEtr.setCINString(ChampClientEntrepriseContactCIN.getText()); + contactEtr.setTele1String(ChampClientEntrepriseContactTele1.getText()); + contactEtr.setTele2String(ChampClientEntrepriseContactTele2.getText()); + contactEtr.setMail(ChampClientEntrepriseContactMail.getText()); + + entreprise.setContact(contactEtr); + + if(EntrepriseCltDB.updateEntreprise(entreprise)) + { + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneModifierCltEntreprise); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.play(); + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) { + StackPaneSucessCltPersonne.setVisible(true); + } + }); + + } + } + } + } + + + + private boolean ControlesEtr() + { + + boolean result=false ; + + if(ChampClientEntrepriseNom.getText().length()<3){ + ChampClientEntrepriseNom.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseNom.setText("Nom doit dépasser 3 caractère"); + result= true ; + } + else{ + ChampClientEntrepriseNom.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseNom.setText(""); + if(ChampClientEntrepriseGerant.getText().length()<3){ + ChampClientEntrepriseGerant.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseGerant.setText("Gérant doit dépasser 3 caractère"); + result= true ; + } + else{ + ChampClientEntrepriseGerant.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseGerant.setText(""); + if(ctl.isNumeric(ChampClientEntrepriseMatricule.getText())){ + ChampClientEntrepriseMatricule.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseMatricule.setText("Matricule doit être numéro"); + result= true ; + } + else{ + ChampClientEntrepriseMatricule.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseMatricule.setText(""); + if(ChampClientEntrepriseAdresse.getText().length()<3){ + ChampClientEntrepriseAdresse.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseAdresse.setText("L'adresse doit dépasser 3 caractère"); + result= true ; + } + else{ + ChampClientEntrepriseAdresse.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseAdresse.setText(""); + + if(ctl.isNumeric(ChampClientEntreprisePostale.getText())){ + ChampClientEntreprisePostale.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntreprisePostale.setText("code doit être numéro"); + result= true ; + } + else{ + ChampClientEntreprisePostale.setStyle("-fx-border-color:transparent;"); + ErreurClientEntreprisePostale.setText(""); + if(ctl.isNumericNotnull(ChampClientEntrepriseTele1.getText())){ + ChampClientEntrepriseTele1.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseTele1.setText("Tele doit être numéro"); + result= true ; + } + else{ + ChampClientEntrepriseTele1.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseTele1.setText(""); + if(ctl.isNumeric(ChampClientEntrepriseTele2.getText())){ + ChampClientEntrepriseTele2.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseTele2.setText("Tele2 doit être numéro"); + result= true ; + } + else{ + ChampClientEntrepriseTele2.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseTele2.setText(""); + if(ctl.isNumeric(ChampClientEntrepriseFax.getText())){ + ChampClientEntrepriseFax.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseFax.setText("Fax doit être numéro"); + result= true ; + } + else{ + ChampClientEntrepriseFax.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseFax.setText(""); + if(ChampClientEntrepriseMail.getText().length()>0 && ChampClientEntrepriseMail.getText().indexOf("@")< 0){ + ChampClientEntrepriseMail.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseMail.setText("invalide mail"); + result= true ; + } + else{ + ChampClientEntrepriseMail.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseMail.setText(""); + } + + } + } + } + } + } + } + } + } + return result ; + } + + + + + + private boolean ControlesEtrContact(){ + boolean result=false ; + if(ChampClientEntrepriseContactNom.getText().length()<4){ + ChampClientEntrepriseContactNom.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactNom.setText("Nom doit dépasser 4 caractère"); + result= true ; + } + else{ + ChampClientEntrepriseContactNom.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactNom.setText(""); + if(ChampClientEntrepriseContactPrenom.getText().length()<4){ + ChampClientEntrepriseContactPrenom.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactPrenom.setText("Prénom doit dépasser 4 caractère"); + result= true ; + } + else{ + ChampClientEntrepriseContactPrenom.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactPrenom.setText(""); + if(ctl.isNumeric(ChampClientEntrepriseContactCIN.getText())){ + ChampClientEntrepriseContactCIN.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactCIN.setText("CIN doit être un numéro"); + result= true ; + } + else{ + ChampClientEntrepriseContactCIN.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactCIN.setText(""); + if(ChampClientEntrepriseContactMail.getText().length()>0){ + if(ChampClientEntrepriseContactMail.getText().indexOf("@")< 0){ + ChampClientEntrepriseContactMail.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactMail.setText("invalide mail"); + result= true ; + } + else{ + ChampClientEntrepriseContactMail.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactMail.setText(""); + } + } + if(ctl.isNumericNotnull(ChampClientEntrepriseContactTele1.getText())){ + ChampClientEntrepriseContactTele1.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactTele1.setText("Tele doit être un numéro"); + result= true ; + } + else{ + ChampClientEntrepriseContactTele1.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactTele1.setText(""); + if(ctl.isNumeric(ChampClientEntrepriseContactTele2.getText())){ + ChampClientEntrepriseContactTele2.setStyle("-fx-border-color:#f20606;"); + ErreurClientEntrepriseContactTele2.setText("Tele doit être un numéro"); + result= true ; + } + else{ + ChampClientEntrepriseContactTele2.setStyle("-fx-border-color:transparent;"); + ErreurClientEntrepriseContactTele2.setText(""); + } + } + } + + } + + } + return result ; + } + + + + + + +} diff --git a/src/main/java/Controllers/Client/GestionClientEntrepriseController.java b/src/main/java/Controllers/Client/GestionClientEntrepriseController.java new file mode 100644 index 0000000..0577420 --- /dev/null +++ b/src/main/java/Controllers/Client/GestionClientEntrepriseController.java @@ -0,0 +1,417 @@ +package Controllers.Client; + +import Models.Client.ClientEntrepriseDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.Label; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Callback; + + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class GestionClientEntrepriseController implements Initializable { + + @FXML private AnchorPane AnchorPaneGestionClt; + + @FXML private ProgressBar ProgressBarClientEntreprise; + + @FXML private Button ButtonSearchClientEntreprise; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + @FXML private TextField GestionClientCodeEtr; + @FXML private TextField GestionClientNomEtr; + @FXML private TextField GestionClientGerantEtr; + @FXML private TextField GestionClientMatriculeEtr; + @FXML private TextField GestionClientAdresseEtr; + @FXML private TextField GestionClientTelephoneEtr; + + @FXML private TableView TableViewListeClientEntreprise ; + + @FXML private TableColumn CodeClientEtr; + @FXML private TableColumn NomEntreprise; + @FXML private TableColumn Gerant ; + @FXML private TableColumn matricule; + @FXML private TableColumn Adresse; + @FXML private TableColumn Telephone; + @FXML private TableColumn Action ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + private Service ThreadSearchClientEntreprise; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + CodeClientEtr.setCellValueFactory(new PropertyValueFactory("code")); + NomEntreprise.setCellValueFactory(new PropertyValueFactory("NomEntreprise")); + Gerant.setCellValueFactory(new PropertyValueFactory("Gerant")); + matricule.setCellValueFactory(new PropertyValueFactory("matricule")); + Adresse.setCellValueFactory(new PropertyValueFactory("Adresse")); + Telephone.setCellValueFactory(new PropertyValueFactory("Telephone")); + + Action.setSortable(true); + Action.setStyle( "-fx-alignment: CENTER;");Action.getStyleClass().add("Center"); + Action.setCellValueFactory(new Callback,ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + Action.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + + //DOUBLE CLIQUE SUR UN CLIENT + TableViewListeClientEntreprise.setOnMouseClicked(new EventHandler(){ + public void handle(MouseEvent event){ + if(event.getClickCount()>1){ + if(TableViewListeClientEntreprise.getSelectionModel().getSelectedIndex()>=0){ + + try { + AnchorPaneGestionClt.getChildren().clear(); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Client/DetailClient.fxml")); + Parent root = (Parent)fxmlLoader.load(); + DetailClientController DcltCtl = fxmlLoader.getController(); + DcltCtl.setDataEntreprise(TableViewListeClientEntreprise.getSelectionModel().getSelectedItem().getCode()); + AnchorPaneGestionClt.getChildren().add(root); + // + //DcltCtl.setUser("sqdfqsdf"); + } catch (IOException ex) { + Logger.getLogger(GestionClientEntrepriseController.class.getName()).log(Level.SEVERE, null, ex); + } + + + } + } + + } + }); + + + ButtonSearchClientEntreprise.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchClientEntreprise(); + } + }); + + AnchorPaneGestionClt.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchClientEntreprise(); + } + } + }); + + GestionSearchClientEntreprise(); + + } + + @FXML + public void AjouterClientPersonneRadioAction(ActionEvent event) throws IOException { + AnchorPaneGestionClt.getChildren().clear(); + AnchorPaneGestionClt.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Client/GestionClientPersonne.fxml"))); + } + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + // get Selected Item + ListeClientEntreprise currentEntreprise = (ListeClientEntreprise) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + try { + AnchorPaneGestionClt.getChildren().clear(); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Client/DetailClient.fxml")); + Parent root = (Parent)fxmlLoader.load(); + DetailClientController DcltCtl = fxmlLoader.getController(); + DcltCtl.setDataEntreprise(currentEntreprise.getCode()); + + AnchorPaneGestionClt.getChildren().add(root); + } catch (IOException ex) { + Logger.getLogger(GestionClientEntrepriseController.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchClientEntreprise() + { + ProgressBarClientEntreprise.setVisible(true); + + ButtonSearchClientEntreprise.setDisable(true); + + ThreadSearchClientEntreprise = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + ObservableList ListeCltEntreprise = new ClientEntrepriseDB().SearchCltEntrepriseGestion( + position, + nbrligne, + GestionClientCodeEtr.getText(), + GestionClientNomEtr.getText(), + GestionClientGerantEtr.getText(), + GestionClientMatriculeEtr.getText(), + GestionClientAdresseEtr.getText(), + GestionClientTelephoneEtr.getText()); + + TableViewListeClientEntreprise.setItems(ListeCltEntreprise); + + totalcount = new ClientEntrepriseDB().nbrCltEntrepriseGestion(GestionClientCodeEtr.getText(), GestionClientNomEtr.getText(), GestionClientGerantEtr.getText(), GestionClientMatriculeEtr.getText(), GestionClientAdresseEtr.getText(), GestionClientTelephoneEtr.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchClientEntreprise.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarClientEntreprise.setVisible(false); + ButtonSearchClientEntreprise.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchClientEntreprise.start(); + } + + + + private void NextLastSearchClientEntreprise(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarClientEntreprise.setVisible(true); + + ButtonSearchClientEntreprise.setDisable(true); + + ThreadSearchClientEntreprise = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + ObservableList ListeCltEntreprise = new ClientEntrepriseDB().SearchCltEntrepriseGestion( + ParmPosition, + ParamNbrligne, + GestionClientCodeEtr.getText(), + GestionClientNomEtr.getText(), + GestionClientGerantEtr.getText(), + GestionClientMatriculeEtr.getText(), + GestionClientAdresseEtr.getText(), + GestionClientTelephoneEtr.getText()); + + TableViewListeClientEntreprise.setItems(ListeCltEntreprise); + + + return null; + } + }; + } + }; + + ThreadSearchClientEntreprise.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarClientEntreprise.setVisible(false); + ButtonSearchClientEntreprise.setDisable(false); + } + }); + ThreadSearchClientEntreprise.start(); + } + + private void GestionSearchClientEntreprise() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchClientEntreprise(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchClientEntreprise(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchClientEntreprise(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + + +} \ No newline at end of file diff --git a/src/main/java/Controllers/Client/GestionClientPersonneController.java b/src/main/java/Controllers/Client/GestionClientPersonneController.java new file mode 100644 index 0000000..5299542 --- /dev/null +++ b/src/main/java/Controllers/Client/GestionClientPersonneController.java @@ -0,0 +1,413 @@ +package Controllers.Client; + +import Models.Client.ClientDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class GestionClientPersonneController implements Initializable { + + @FXML private AnchorPane AnchorPaneGestionClt; + + @FXML private AnchorPane AnchorPaneCltBody ; + + @FXML private ProgressBar ProgressBarClientPersonne; + + @FXML private Button ButtonSearchClientPersonne; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + @FXML private TextField GestionClientcode; + @FXML private TextField GestionClientcin; + @FXML private TextField GestionClientnomcomplet; + @FXML private TextField GestionClientnom; + @FXML private TextField GestionClientprenom; + @FXML private DatePicker DatePickerNaissance; + + @FXML private TableView TableViewListeClient ; + + @FXML private TableColumn codeclient; + @FXML private TableColumn cin; + @FXML private TableColumn nomcomplet; + @FXML private TableColumn nom; + @FXML private TableColumn prenom; + @FXML private TableColumn tele; + @FXML private TableColumn Action ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + private Service ThreadSearchClientPersonne; + + + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + codeclient.setCellValueFactory(new PropertyValueFactory("code")); + + cin.setCellValueFactory(new PropertyValueFactory("cin")); + + nomcomplet.setCellValueFactory(new PropertyValueFactory("nomcomplet")); + + nom.setCellValueFactory(new PropertyValueFactory("nom")); + + prenom.setCellValueFactory(new PropertyValueFactory("prenom")); + + tele.setCellValueFactory(new PropertyValueFactory("tele")); + + Action.setSortable(true); + Action.setStyle( "-fx-alignment: CENTER;");Action.getStyleClass().add("Center"); + Action.setCellValueFactory(new Callback, ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + Action.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new GestionClientPersonneController.ButtonCell(); + } + }); + + ButtonSearchClientPersonne.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchClientPersonne(); + } + }); + + AnchorPaneGestionClt.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchClientPersonne(); + } + } + }); + + + GestionSearchClientPersonne(); + } + + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + // get Selected Item + ListeClient currentPerson = (ListeClient) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + try { + AnchorPaneGestionClt.getChildren().clear(); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Client/DetailClient.fxml")); + Parent root = (Parent)fxmlLoader.load(); + DetailClientController DcltCtl = fxmlLoader.getController(); + DcltCtl.setDataClient(currentPerson.getCode().toString()); + AnchorPaneGestionClt.getChildren().add(root); + } catch (IOException ex) { + Logger.getLogger(GestionClientEntrepriseController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + // modifer pour client entreprise + @FXML + public void AjouterClientEntrepriseRadioAction(ActionEvent event) throws IOException { + AnchorPaneGestionClt.getChildren().clear(); + AnchorPaneGestionClt.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Client/GestionClientEntreprise.fxml"))); + } + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchClientPersonne() + { + ProgressBarClientPersonne.setVisible(true); + + ButtonSearchClientPersonne.setDisable(true); + + ThreadSearchClientPersonne = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateNaissance = ""; + if(DatePickerNaissance.getValue() != null){ + DateNaissance = DatePickerNaissance.getValue().toString(); + } + + ObservableList ListeCltPersonne = new ClientDB().SearchCltPersonneGestion( + position, + nbrligne, + GestionClientcode.getText(), + GestionClientcin.getText(), + GestionClientnomcomplet.getText(), + GestionClientnom.getText(), + GestionClientprenom.getText(), + DateNaissance); + + TableViewListeClient.setItems(ListeCltPersonne); + + totalcount = new ClientDB().nbrCltPersonneGestion(GestionClientcode.getText(), GestionClientcin.getText(), GestionClientnomcomplet.getText(), GestionClientnom.getText(), GestionClientprenom.getText(), DateNaissance); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchClientPersonne.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarClientPersonne.setVisible(false); + ButtonSearchClientPersonne.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchClientPersonne.start(); + } + + + + private void NextLastSearchClientPersonne(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarClientPersonne.setVisible(true); + + ButtonSearchClientPersonne.setDisable(true); + + ThreadSearchClientPersonne = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateNaissance = ""; + if(DatePickerNaissance.getValue() != null){ + DateNaissance = DatePickerNaissance.getValue().toString(); + } + + ObservableList ListeCltPersonne = new ClientDB().SearchCltPersonneGestion( + ParmPosition, + ParamNbrligne, + GestionClientcode.getText(), + GestionClientcin.getText(), + GestionClientnomcomplet.getText(), + GestionClientnom.getText(), + GestionClientprenom.getText(), + DateNaissance); + + TableViewListeClient.setItems(ListeCltPersonne); + + + return null; + } + }; + } + }; + + ThreadSearchClientPersonne.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarClientPersonne.setVisible(false); + ButtonSearchClientPersonne.setDisable(false); + } + }); + ThreadSearchClientPersonne.start(); + } + + private void GestionSearchClientPersonne() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchClientPersonne(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchClientPersonne(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchClientPersonne(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + +} + + diff --git a/src/main/java/Controllers/Client/ListeClient.java b/src/main/java/Controllers/Client/ListeClient.java new file mode 100644 index 0000000..d0805da --- /dev/null +++ b/src/main/java/Controllers/Client/ListeClient.java @@ -0,0 +1,82 @@ +/* + * 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 Controllers.Client; + +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleLongProperty; +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author PC-Maher + */ +public class ListeClient { + private final SimpleStringProperty code; + private final SimpleStringProperty cin; + private final SimpleStringProperty nomcomplet; + private final SimpleStringProperty nom; + private final SimpleStringProperty prenom; + private final SimpleStringProperty naissance_str; + private final SimpleStringProperty adresse; + private final SimpleStringProperty tele; + private final SimpleStringProperty tele2; + private final SimpleIntegerProperty sexe; + + public ListeClient(String code, String cin, String nomcomplet, String nom, String prenom, String naissance_str, String adresse, String tele, String tele2, Integer sexe) { + this.code = new SimpleStringProperty(code); + this.cin = new SimpleStringProperty(cin); + this.nomcomplet = new SimpleStringProperty(nomcomplet); + this.nom = new SimpleStringProperty(nom); + this.prenom = new SimpleStringProperty(prenom); + this.naissance_str = new SimpleStringProperty(naissance_str); + this.adresse = new SimpleStringProperty(adresse); + this.tele = new SimpleStringProperty(tele); + this.tele2 = new SimpleStringProperty(tele2); + this.sexe = new SimpleIntegerProperty(sexe); + } + + + + public String getCode() { + return code.get(); + } + + public String getCin() { + return cin.get(); + } + + public String getNomcomplet() { + return nomcomplet.get(); + } + + public String getNom() { + return nom.get(); + } + + public String getPrenom() { + return prenom.get(); + } + + public String getNaissanceString() { + return naissance_str.get(); + } + + public String getAdresse() { + return adresse.get(); + } + + public String getTele() { + return tele.get(); + } + + public String getTele2() { + return tele2.get(); + } + + public Integer getSexe() { + return sexe.get(); + } +} diff --git a/src/main/java/Controllers/Client/ListeClientEntreprise.java b/src/main/java/Controllers/Client/ListeClientEntreprise.java new file mode 100644 index 0000000..2d6cc32 --- /dev/null +++ b/src/main/java/Controllers/Client/ListeClientEntreprise.java @@ -0,0 +1,66 @@ +/* + * 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 Controllers.Client; + + +import javafx.beans.property.SimpleLongProperty; +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class ListeClientEntreprise { + + private final SimpleStringProperty code; + private final SimpleStringProperty NomEntreprise; + private final SimpleStringProperty gerant; + private final SimpleStringProperty matricule; + private final SimpleStringProperty adresse; + private final SimpleStringProperty Telephone; + private final SimpleStringProperty Telephone2; + + public ListeClientEntreprise(String code, String nomEtr, String gerant, String matricule, String adresse, String Telephone, String Telephone2) { + this.code = new SimpleStringProperty(code); + this.NomEntreprise = new SimpleStringProperty(nomEtr); + this.gerant = new SimpleStringProperty(gerant); + this.matricule = new SimpleStringProperty(matricule); + this.adresse = new SimpleStringProperty(adresse); + this.Telephone = new SimpleStringProperty(Telephone); + this.Telephone2 = new SimpleStringProperty(Telephone2); + } + + + + public String getCode() { + return code.get(); + } + + public String getNomEntreprise() { + return NomEntreprise.get(); + } + + public String getGerant() { + return gerant.get(); + } + + public String getMatricule() { + return matricule.get(); + } + + public String getAdresse() { + return adresse.get(); + } + + public String getTelephone() { + return Telephone.get(); + } + + public String getTelephone2() { + return Telephone2.get(); + } + +} diff --git a/src/main/java/Controllers/Client/MenuClientController.java b/src/main/java/Controllers/Client/MenuClientController.java new file mode 100644 index 0000000..afa6507 --- /dev/null +++ b/src/main/java/Controllers/Client/MenuClientController.java @@ -0,0 +1,47 @@ +/* + * 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 Controllers.Client; + +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.layout.AnchorPane; + +/** + * FXML Controller class + * + * @author Maher + */ +public class MenuClientController implements Initializable { + + /** + * Initializes the controller class. + */ + + @FXML private AnchorPane AnchorPaneAjouterClient ; + + @FXML + private void AjouterClientButtonAction(ActionEvent event) throws IOException { + AnchorPaneAjouterClient.getChildren().clear(); + AnchorPaneAjouterClient.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Client/AjouterClient.fxml"))); + } + + @FXML + private void detailClientButtonAction(ActionEvent event) throws IOException { + AnchorPaneAjouterClient.getChildren().clear(); + AnchorPaneAjouterClient.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Client/GestionClientPersonne.fxml"))); + } + @Override + public void initialize(URL url, ResourceBundle rb) { + // TODO + } + +} diff --git a/src/main/java/Controllers/Client/RechercherClientEntrepriseController.java b/src/main/java/Controllers/Client/RechercherClientEntrepriseController.java new file mode 100644 index 0000000..95757a4 --- /dev/null +++ b/src/main/java/Controllers/Client/RechercherClientEntrepriseController.java @@ -0,0 +1,364 @@ + package Controllers.Client; + +import Controllers.Traitement.MyWindow; +import Models.Client.ClientEntrepriseDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class RechercherClientEntrepriseController implements Initializable { + + @FXML public AnchorPane AnchoreClientEntre ; + + public Node nodeFxmlEtr ; + + @FXML private ProgressBar ProgressBarClientEntreprise; + + @FXML public RadioButton cltPer ; + @FXML public RadioButton cltEtr ; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + @FXML private Button ButtonSearchClientEntreprise; + + @FXML private TextField RerchercheCodeEtr; + @FXML private TextField RerchercheNomEtr; + @FXML private TextField RerchercheGerantEtr; + @FXML private TextField RerchercheMatriculeEtr; + @FXML private TextField RerchercheAdresseEtr; + @FXML private TextField RerchercheTelephoneEtr; + + @FXML private TableView TableViewListeClientEntreprise ; + + @FXML private TableColumn TableColumnCodeClientEtr; + @FXML private TableColumn TableColumnNomEntreprise; + @FXML private TableColumn TableColumnGerant ; + @FXML private TableColumn TableColumnMatricule; + @FXML private TableColumn TableColumnAdresse; + @FXML private TableColumn TableColumnTelephone; + @FXML public TableColumn TableColumnActionEtre ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + private Service ThreadSearchRechercheClientEntreprise; + + public RechercherClientEntrepriseController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Client/RechercherClientEntreprise.fxml")); + fxmlLoader.setController(this); + nodeFxmlEtr = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(RechercherClientEntrepriseController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TableColumnCodeClientEtr.setCellValueFactory(new PropertyValueFactory("code")); + TableColumnNomEntreprise.setCellValueFactory(new PropertyValueFactory("NomEntreprise")); + TableColumnGerant.setCellValueFactory(new PropertyValueFactory("Gerant")); + TableColumnMatricule.setCellValueFactory(new PropertyValueFactory("matricule")); + TableColumnAdresse.setCellValueFactory(new PropertyValueFactory("Adresse")); + TableColumnTelephone.setCellValueFactory(new PropertyValueFactory("Telephone")); + + TableColumnActionEtre.setStyle( "-fx-alignment: CENTER;"); + TableColumnActionEtre.getStyleClass().add("Center"); + + //comboboxnombre des lignes tableview + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + ButtonSearchClientEntreprise.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchClientEntreprise(); + } + }); + + AnchoreClientEntre.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchClientEntreprise(); + } + } + }); + + GestionSearchClientEntreprise(); + + } + + + + + @FXML + private void QuiterButtonAction(ActionEvent event) throws IOException { + AnchoreClientEntre.setVisible(false); + } + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Stage stage = MyWindow.myStage; + + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxmlEtr); + + stage.setScene(scene); + stage.show(); + + cltEtr.setSelected(true); + } + + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchClientEntreprise() + { + ProgressBarClientEntreprise.setVisible(true); + + ButtonSearchClientEntreprise.setDisable(true); + + ThreadSearchRechercheClientEntreprise = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + ObservableList ListeCltEntreprise = new ClientEntrepriseDB().SearchCltEntrepriseGestion( + position, + nbrligne, + RerchercheCodeEtr.getText(), + RerchercheNomEtr.getText(), + RerchercheGerantEtr.getText(), + RerchercheMatriculeEtr.getText(), + RerchercheAdresseEtr.getText(), + RerchercheTelephoneEtr.getText()); + + TableViewListeClientEntreprise.setItems(ListeCltEntreprise); + + totalcount = new ClientEntrepriseDB().nbrCltEntrepriseGestion(RerchercheCodeEtr.getText(), RerchercheNomEtr.getText(), RerchercheGerantEtr.getText(), RerchercheMatriculeEtr.getText(), RerchercheAdresseEtr.getText(), RerchercheTelephoneEtr.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchRechercheClientEntreprise.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarClientEntreprise.setVisible(false); + ButtonSearchClientEntreprise.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchRechercheClientEntreprise.start(); + } + + + + private void NextLastSearchClientEntreprise(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarClientEntreprise.setVisible(true); + + ButtonSearchClientEntreprise.setDisable(true); + + ThreadSearchRechercheClientEntreprise = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + ObservableList ListeCltEntreprise = new ClientEntrepriseDB().SearchCltEntrepriseGestion( + ParmPosition, + ParamNbrligne, + RerchercheCodeEtr.getText(), + RerchercheNomEtr.getText(), + RerchercheGerantEtr.getText(), + RerchercheMatriculeEtr.getText(), + RerchercheAdresseEtr.getText(), + RerchercheTelephoneEtr.getText()); + + TableViewListeClientEntreprise.setItems(ListeCltEntreprise); + + + return null; + } + }; + } + }; + + ThreadSearchRechercheClientEntreprise.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarClientEntreprise.setVisible(false); + ButtonSearchClientEntreprise.setDisable(false); + } + }); + ThreadSearchRechercheClientEntreprise.start(); + } + + private void GestionSearchClientEntreprise() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchClientEntreprise(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchClientEntreprise(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchClientEntreprise(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + +} diff --git a/src/main/java/Controllers/Client/RechercherClientPersonneController.java b/src/main/java/Controllers/Client/RechercherClientPersonneController.java new file mode 100644 index 0000000..d460ea9 --- /dev/null +++ b/src/main/java/Controllers/Client/RechercherClientPersonneController.java @@ -0,0 +1,396 @@ +package Controllers.Client; + + +import Controllers.Traitement.MyWindow; +import Models.Client.Client; +import Models.Client.ClientDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class RechercherClientPersonneController implements Initializable { + + @FXML public AnchorPane AnchoreClientPerson ; + + @FXML public StackPane StackpaneClient ; + + @FXML private ProgressBar ProgressBarClientPersonne; + + @FXML private Button ButtonSearchClientPersonne; + + @FXML public RadioButton cltEntreprise ; + @FXML public RadioButton cltPersonne ; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + @FXML private TableView TableViewListeClient ; + + @FXML private TableColumn codeclient; + @FXML private TableColumn cin; + @FXML private TableColumn nomcomplet; + @FXML private TableColumn nom; + @FXML private TableColumn prenom; + @FXML private TableColumn tele; + @FXML public TableColumn Action ; + + @FXML private TextField GestionClientcode; + @FXML private TextField GestionClientcin; + @FXML private TextField GestionClientnomcomplet; + @FXML private TextField GestionClientnom; + @FXML private TextField GestionClientprenom; + @FXML private DatePicker DatePickerNaissance; + + public Node nodeFxml ; + + Client client = new Client(); + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + public Object[] ArrayObjectDataSave = new Object[10]; + + private Service ThreadSearchRerchecheClientPersonne; + + public RechercherClientPersonneController() { + + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Client/RechercherClientPersonne.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(RechercherClientPersonneController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + + NbrLigne.getSelectionModel().selectFirst(); + + codeclient.setCellValueFactory(new PropertyValueFactory("code")); + + cin.setCellValueFactory(new PropertyValueFactory("cin")); + + nomcomplet.setCellValueFactory(new PropertyValueFactory("nomcomplet")); + + nom.setCellValueFactory(new PropertyValueFactory("nom")); + + prenom.setCellValueFactory(new PropertyValueFactory("prenom")); + + tele.setCellValueFactory(new PropertyValueFactory("tele")); + + Action.setStyle( "-fx-alignment: CENTER;"); + Action.getStyleClass().add("Center"); + + ButtonSearchClientPersonne.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchClientPersonne(); + } + }); + + AnchoreClientPerson.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchClientPersonne(); + } + } + }); + + GestionSearchClientPersonne(); + + } + + + + + + @FXML + private void QuiterButtonAction(ActionEvent event) throws IOException { + AnchoreClientPerson.setVisible(false); + } + + + + public void ShowDialg() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + + cltPersonne.setSelected(true); + } + + + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchClientPersonne() + { + ProgressBarClientPersonne.setVisible(true); + + ButtonSearchClientPersonne.setDisable(true); + + ThreadSearchRerchecheClientPersonne = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateNaissance = ""; + if(DatePickerNaissance.getValue() != null){ + DateNaissance = DatePickerNaissance.getValue().toString(); + } + + ObservableList ListeCltPersonne = new ClientDB().SearchCltPersonneGestion( + position, + nbrligne, + GestionClientcode.getText(), + GestionClientcin.getText(), + GestionClientnomcomplet.getText(), + GestionClientnom.getText(), + GestionClientprenom.getText(), + DateNaissance); + + TableViewListeClient.setItems(ListeCltPersonne); + + totalcount = new ClientDB().nbrCltPersonneGestion(GestionClientcode.getText(), GestionClientcin.getText(), GestionClientnomcomplet.getText(), GestionClientnom.getText(), GestionClientprenom.getText(), DateNaissance); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchRerchecheClientPersonne.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarClientPersonne.setVisible(false); + ButtonSearchClientPersonne.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchRerchecheClientPersonne.start(); + } + + + + private void NextLastSearchClientPersonne(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarClientPersonne.setVisible(true); + + ButtonSearchClientPersonne.setDisable(true); + + ThreadSearchRerchecheClientPersonne = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateNaissance = ""; + if(DatePickerNaissance.getValue() != null){ + DateNaissance = DatePickerNaissance.getValue().toString(); + } + + ObservableList ListeCltPersonne = new ClientDB().SearchCltPersonneGestion( + ParmPosition, + ParamNbrligne, + GestionClientcode.getText(), + GestionClientcin.getText(), + GestionClientnomcomplet.getText(), + GestionClientnom.getText(), + GestionClientprenom.getText(), + DateNaissance); + + TableViewListeClient.setItems(ListeCltPersonne); + + + return null; + } + }; + } + }; + + ThreadSearchRerchecheClientPersonne.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarClientPersonne.setVisible(false); + ButtonSearchClientPersonne.setDisable(false); + } + }); + ThreadSearchRerchecheClientPersonne.start(); + } + + private void GestionSearchClientPersonne() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchClientPersonne(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchClientPersonne(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchClientPersonne(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + + + + + + +} diff --git a/src/main/java/Controllers/CommandeClt/CommandeCltDetail.java b/src/main/java/Controllers/CommandeClt/CommandeCltDetail.java new file mode 100644 index 0000000..a2c07eb --- /dev/null +++ b/src/main/java/Controllers/CommandeClt/CommandeCltDetail.java @@ -0,0 +1,196 @@ +package Controllers.CommandeClt; + +import Controllers.BonLivraisonClt.BonLivraisonCltAjouterEtape2Controller; +import Models.Produit.ListeProduit; +import Controllers.Traitement.Adaptateur; +import Models.CommandeClt.CommandeClt; +import Models.CommandeClt.CommandeCltDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + + +/** + * @author Maher Ben Tili + */ +public class CommandeCltDetail implements Initializable { + + @FXML private AnchorPane PaneAjouter ; + @FXML private AnchorPane AnchorPaneCommandeCltDetail ; + @FXML private AnchorPane AnchorPaneLoadingCommandeDetail ; + @FXML public AnchorPane AnchorPaneSucces ; + @FXML public AnchorPane AnchorPaneInfoCommandeClt; + @FXML private Text CodeCommande; + @FXML private Text DateCreation; + @FXML private Text Reglement; + @FXML private Text NetAPayer; + @FXML private Text TotalTVA; + @FXML private Text CodeDevis; + + @FXML private Text TypeClt; + @FXML private Text Nom; + @FXML private Text Prenom; + @FXML private Text Adresse; + @FXML private Text TELE1; + @FXML private Text TELE2; + + @FXML private Text TextPrenom ; + @FXML private Text TextMatricule ; + + @FXML private TableView TableViewListeProduit ; + @FXML private TableColumn TabColReference; + @FXML private TableColumn TabColDesignation; + @FXML private TableColumn TabColQuantite ; + @FXML private TableColumn TabColPrixHT; + @FXML private TableColumn TabColRemise; + @FXML private TableColumn TabColTotalHT; + @FXML private TableColumn TabColTVA; + @FXML private TableColumn TabColTotalTTC; + + @FXML private Button ButtonCreationBonLivraison; + + private Service ThreadCommandeCltDetail; + + CommandeClt commandeClt; + String idCommandeClt; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TableViewListeProduit.setEditable(false); + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + ButtonCreationBonLivraison.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltAjouterEtape2.fxml")); + Parent NodeBonLivraisonCltAjouterEtape2 = (Parent)fxmlLoader.load(); + BonLivraisonCltAjouterEtape2Controller BonLivraisonCltAjouterEtape2= fxmlLoader.getController(); + + PaneAjouter.getChildren().clear(); + PaneAjouter.getChildren().add(NodeBonLivraisonCltAjouterEtape2); + + BonLivraisonCltAjouterEtape2.SetDataCommandeClt(idCommandeClt); + } catch (IOException ex) { + Logger.getLogger(CommandeCltDetail.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + + } + + + public void SowDetailCommandeClt(String codeCommande){ + idCommandeClt = codeCommande; + ThreadCommandeCltDetail = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + commandeClt = new CommandeCltDB().getCommandeClt(codeCommande); + + return null; + } + }; + } + }; + + ThreadCommandeCltDetail.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + CodeCommande.setText(commandeClt.getCodecommandeclt()); + DateCreation.setText(Adaptateur.NormalDateFormat(commandeClt.getDate())); + Reglement.setText(commandeClt.getTypeRegementString()); + TotalTVA.setText(commandeClt.getTotalTVA()); + TypeClt.setText(commandeClt.getTypeClientString()); + CodeDevis.setText(commandeClt.getCodeDevis()); + + if(commandeClt.getTypeClient()==0){ + TextPrenom.setVisible(true); + TextMatricule.setVisible(false); + Nom.setText(commandeClt.CltPersonne.getNom()); + Prenom.setText(commandeClt.CltPersonne.getPrenom()); + Adresse.setText(commandeClt.CltPersonne.getAdresse()); + TELE1.setText(commandeClt.CltPersonne.getTelefixString()); + TELE2.setText(commandeClt.CltPersonne.getTelemobileString()); + } + + if(commandeClt.getTypeClient()==1){ + TextPrenom.setVisible(false); + TextMatricule.setVisible(true); + Nom.setText(commandeClt.CltEntreprise.getNom()); + Prenom.setText(commandeClt.CltEntreprise.getMatricule()); + Adresse.setText(commandeClt.CltEntreprise.getAdresse()); + TELE1.setText(commandeClt.CltEntreprise.getTele1String()); + TELE2.setText(commandeClt.CltEntreprise.getTele2String()); + } + + if(commandeClt.getTypeClient()==2){ + TextPrenom.setVisible(true); + TextMatricule.setVisible(false); + Nom.setText(commandeClt.CltPassager.getNom()); + Prenom.setText(commandeClt.CltPassager.getPrenom()); + Adresse.setText(commandeClt.CltPassager.getAdresse()); + TELE1.setText(commandeClt.CltPassager.getTelefixString()); + TELE2.setText(commandeClt.CltPassager.getTelemobileString()); + } + if(commandeClt.getCodeBonLivraison() == null){ + ButtonCreationBonLivraison.setVisible(true); + }else{ + ButtonCreationBonLivraison.setVisible(false); + } + + NetAPayer.setText(commandeClt.getNetAPayer()); + TableViewListeProduit.setItems(commandeClt.getListeproduit()); + AnchorPaneLoadingCommandeDetail.setVisible(false); + AnchorPaneCommandeCltDetail.setVisible(true); + } + }); + ThreadCommandeCltDetail.start(); + } +} diff --git a/src/main/java/Controllers/CommandeClt/CommandeCltDialogConfirmationController.java b/src/main/java/Controllers/CommandeClt/CommandeCltDialogConfirmationController.java new file mode 100644 index 0000000..e45cc05 --- /dev/null +++ b/src/main/java/Controllers/CommandeClt/CommandeCltDialogConfirmationController.java @@ -0,0 +1,203 @@ +/* + * 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 Controllers.CommandeClt; + +import Models.Produit.ListeProduit; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Models.CommandeClt.CommandeClt; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; + +/** + * + * @author PC-Maher + */ +public class CommandeCltDialogConfirmationController implements Initializable { + /** + * Initializes the controller class. + */ + public Node nodeFxml ; + + @FXML public AnchorPane AnchorPrincipal ; + @FXML public Button Enregister ; + @FXML private Text DateCreation; + @FXML private Text Reglement; + @FXML private Text NetAPayer; + @FXML private Text TotalHorsTaxNet; + @FXML private Text TotalTVA; + @FXML private Text CodeDevis; + + @FXML private Text TypeClt; + @FXML private Text Nom; + @FXML private Text Prenom; + @FXML private Text Adresse; + @FXML private Text TELE1; + @FXML private Text TELE2; + + @FXML private Text TextPrenom ; + @FXML private Text TextMatricule ; + @FXML private Text TextCodeDevis; + + @FXML public TableView TableViewListeProduitPassCommClt ; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColDesignation; + @FXML public TableColumn TabColQuantite ; + @FXML public TableColumn TabColPrixHT; + @FXML public TableColumn TabColRemise; + @FXML public TableColumn TabColTotalHT; + @FXML public TableColumn TabColTVA; + @FXML public TableColumn TabColTotalTTC; + + + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconsave.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + Enregister.setGraphic(buttonGraphic); + + + } + + + public void GetCommandeClt(CommandeClt commandeclt){ + DateCreation.setText(Adaptateur.NormalDateFormat(commandeclt.getDate())); + + + if(commandeclt.getTypeRegement().equals("0")){ + Reglement.setText("comptant"); + }else if(commandeclt.getTypeRegement().equals("1")){ + Reglement.setText("facilité"); + } + NetAPayer.setText(commandeclt.getNetAPayer()); + TotalHorsTaxNet.setText(commandeclt.getTotalHorsTaxNet()); + TotalTVA.setText(commandeclt.getTotalTVA()); + + if(commandeclt.getCodeDevis()!=null){ + CodeDevis.setVisible(true); + TextCodeDevis.setVisible(true); + CodeDevis.setText(commandeclt.getCodeDevis()); + } + + + TypeClt.setText(commandeclt.getTypeClientString()); + + if(commandeclt.getTypeClient()==0){ + TextPrenom.setVisible(true); + TextMatricule.setVisible(false); + Nom.setText(commandeclt.CltPersonne.getNom()); + Prenom.setText(commandeclt.CltPersonne.getPrenom()); + Adresse.setText(commandeclt.CltPersonne.getAdresse()); + TELE1.setText(commandeclt.CltPersonne.getTelefixString()); + TELE2.setText(commandeclt.CltPersonne.getTelemobileString()); + } + + if(commandeclt.getTypeClient()==1){ + TextPrenom.setVisible(false); + TextMatricule.setVisible(true); + Nom.setText(commandeclt.CltEntreprise.getNom()); + Prenom.setText(commandeclt.CltEntreprise.getMatricule()); + Adresse.setText(commandeclt.CltEntreprise.getAdresse()); + TELE1.setText(commandeclt.CltEntreprise.getTele1String()); + TELE2.setText(commandeclt.CltEntreprise.getTele2String()); + } + + if(commandeclt.getTypeClient()==2){ + TextPrenom.setVisible(true); + TextMatricule.setVisible(false); + Nom.setText(commandeclt.CltPassager.getNom()); + Prenom.setText(commandeclt.CltPassager.getPrenom()); + Adresse.setText(commandeclt.CltPassager.getAdresse()); + TELE1.setText(commandeclt.CltPassager.getTelefixString()); + TELE2.setText(commandeclt.CltPassager.getTelemobileString()); + } + + + + TableViewListeProduitPassCommClt.setItems(commandeclt.getListeproduit()); + } + + + public CommandeCltDialogConfirmationController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/CommandeClt/CommandeCltDialogConfirmation.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(CommandeCltDialogConfirmationController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + + @FXML + private void ExitButtonAction(ActionEvent event) throws IOException { + AnchorPrincipal.setVisible(false); + } +} diff --git a/src/main/java/Controllers/CommandeClt/CommandeCltGestionController.java b/src/main/java/Controllers/CommandeClt/CommandeCltGestionController.java new file mode 100644 index 0000000..63f4431 --- /dev/null +++ b/src/main/java/Controllers/CommandeClt/CommandeCltGestionController.java @@ -0,0 +1,466 @@ +package Controllers.CommandeClt; + +import Controllers.DevisClt.DevisCltGestionController; +import Controllers.Traitement.Adaptateur; +import Models.CommandeClt.CommandeClt; +import Models.CommandeClt.CommandeCltDB; +import Models.CommandeClt.CommandeCltListe; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class CommandeCltGestionController implements Initializable { + + @FXML private AnchorPane PaneGestion ; + + @FXML private ProgressBar ProgressBarCommande; + + @FXML private Button ButtonSearchCommande ; + + @FXML private AnchorPane ListerPages; + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount =0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + + private Service ThreadSearchCommande; + + @FXML public TableView TableViewGestionCommande; + + @FXML public TableColumn TabColCodeCommande; + @FXML public TableColumn TabColModePaiement; + @FXML public TableColumn TabColTypeClient; + @FXML public TableColumn TabColCodeClient; + @FXML public TableColumn TabColTotalCommande; + @FXML public TableColumn TabColDateCreation ; + @FXML public TableColumn TabColCodeDevis; + @FXML public TableColumn TabColFacture; + @FXML public TableColumn TabColBonLivraison; + @FXML public TableColumnTabColAction ; + + @FXML public TextField TextFieldCodeCommande; + @FXML public TextField TextFieldCodeClient; + @FXML public TextField TextFieldNameClient; + @FXML public TextField TextFieldCodeDevis; + @FXML public DatePicker DatePickerCreation; + @FXML public RadioButton RadioComptant; + @FXML public RadioButton RadioFacilite; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + //comboboxnombre des lignes tableview + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TableViewGestionCommande.setEditable(true); + + TabColCodeCommande.setStyle( "-fx-alignment: CENTER;");TabColCodeCommande.getStyleClass().add("Center"); + TabColCodeCommande.setCellValueFactory(new PropertyValueFactory("CodeCommande")); + + TabColTypeClient.setStyle( "-fx-alignment: CENTER;");TabColTypeClient.getStyleClass().add("Center"); + TabColTypeClient.setCellValueFactory(new PropertyValueFactory("TypeClient")); + + TabColCodeClient.setStyle( "-fx-alignment: CENTER;");TabColCodeClient.getStyleClass().add("Center"); + TabColCodeClient.setCellValueFactory(new PropertyValueFactory("CodeClient")); + + TabColModePaiement.setStyle( "-fx-alignment: CENTER;");TabColModePaiement.getStyleClass().add("Center"); + TabColModePaiement.setCellValueFactory(new PropertyValueFactory("ModePaiement")); + + TabColTotalCommande.setStyle( "-fx-alignment: CENTER;"); + TabColTotalCommande.getStyleClass().add("Center"); + TabColTotalCommande.setCellValueFactory(new PropertyValueFactory("TotalCommande")); + TabColTotalCommande.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if(item!= null){ + Text text = new Text(Adaptateur.StringToStringEspace(item)); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TabColDateCreation.setStyle( "-fx-alignment: CENTER;");TabColDateCreation.getStyleClass().add("Center"); + TabColDateCreation.setCellValueFactory(new PropertyValueFactory("DateCreation")); + + TabColCodeDevis.setStyle( "-fx-alignment: CENTER;");TabColCodeDevis.getStyleClass().add("Center"); + TabColCodeDevis.setCellValueFactory(new PropertyValueFactory("CodeDevis")); + + TabColFacture.setStyle( "-fx-alignment: CENTER;");TabColFacture.getStyleClass().add("Center"); + TabColFacture.setCellValueFactory(new PropertyValueFactory("CodeFacture")); + + TabColBonLivraison.setStyle( "-fx-alignment: CENTER;");TabColBonLivraison.getStyleClass().add("Center"); + TabColBonLivraison.setCellValueFactory(new PropertyValueFactory("CodeBonLivraison")); + + + TabColAction.setSortable(true); + TabColAction.setStyle( "-fx-alignment: CENTER;");TabColAction.getStyleClass().add("Center"); + TabColAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + + ButtonSearchCommande.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchCommande(); + } + }); + + PaneGestion.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchCommande(); + } + } + }); + + RadioComptant.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchCommande(); + } + }); + + RadioFacilite.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchCommande(); + } + }); + + GestionSearchCommande(); + } + + @FXML + private void PasserCommandeCltButtonAction(ActionEvent event) throws IOException { + + //inisialiser les données de Sauvgarde des opération + CommandeCltPasserController.TypeClient = 2 ; + CommandeCltPasserController.codeclient = null ; + CommandeCltPasserController.codecliententre = null ; + CommandeCltPasserController.Mode = null ; + CommandeCltPasserController.CodeDevis = null; + CommandeCltPasserController.data.clear(); + + PaneGestion.getChildren().clear(); + PaneGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/CommandeClt/CommandeCltPasser.fxml"))); + } + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconedit.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + // get Selected Item + CommandeCltListe current = (CommandeCltListe) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + String codeCommande = current.getCodeCommande(); + + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/CommandeClt/CommandeCltDetail.fxml")); + Parent NodeDetail = (Parent)fxmlLoader.load(); + CommandeCltDetail CommandeCltdetail = fxmlLoader.getController(); + CommandeCltdetail.AnchorPaneSucces.setVisible(false); + CommandeCltdetail.AnchorPaneInfoCommandeClt.setPrefHeight(574); + AnchorPane.setTopAnchor(CommandeCltdetail.AnchorPaneInfoCommandeClt, 5.0); + + CommandeCltdetail.SowDetailCommandeClt(codeCommande); + PaneGestion.getChildren().add(NodeDetail); + + } catch (IOException ex) { + Logger.getLogger(DevisCltGestionController.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + +/****************************************************************************** * + * * + * Methode last Next TableView client Entreprise * + * * * + ******************************************************************************/ + + private void SearchCommande() + { + ProgressBarCommande.setVisible(true); + + ButtonSearchCommande.setDisable(true); + + ThreadSearchCommande = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateCreation = ""; + if(DatePickerCreation.getValue() != null){ + DateCreation = DatePickerCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListCommandes = new CommandeCltDB().SearchCommande( + position, + nbrligne, + TypeRegement, + TextFieldCodeCommande.getText(), + TextFieldCodeClient.getText(), + TextFieldNameClient.getText(), + TextFieldCodeDevis.getText(), + DateCreation); + TableViewGestionCommande.setItems(ListCommandes); + + totalcount = new CommandeCltDB().nbrSearchCommande(TypeRegement, TextFieldCodeCommande.getText(), TextFieldCodeClient.getText(), TextFieldNameClient.getText(), TextFieldCodeDevis.getText(), DateCreation); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchCommande.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarCommande.setVisible(false); + ButtonSearchCommande.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchCommande.start(); + } + + + private void NextLastSearchCommande(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarCommande.setVisible(true); + + ButtonSearchCommande.setDisable(true); + + ThreadSearchCommande = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateCreation = ""; + if(DatePickerCreation.getValue() != null){ + DateCreation = DatePickerCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListCommandes = new CommandeCltDB().SearchCommande(ParmPosition, ParamNbrligne, TypeRegement, TextFieldCodeCommande.getText(), TextFieldCodeClient.getText(), TextFieldNameClient.getText(), TextFieldCodeDevis.getText(), DateCreation); + + TableViewGestionCommande.setItems(ListCommandes); + + return null; + } + }; + } + }; + + ThreadSearchCommande.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarCommande.setVisible(false); + ButtonSearchCommande.setDisable(false); + } + }); + ThreadSearchCommande.start(); + } + + private void GestionSearchCommande() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchCommande(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchCommande(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchCommande(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + +} diff --git a/src/main/java/Controllers/CommandeClt/CommandeCltPasserController.java b/src/main/java/Controllers/CommandeClt/CommandeCltPasserController.java new file mode 100644 index 0000000..f024c76 --- /dev/null +++ b/src/main/java/Controllers/CommandeClt/CommandeCltPasserController.java @@ -0,0 +1,1004 @@ +/* + * 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 Controllers.CommandeClt; + +import Controllers.Client.ListeClient; +import Controllers.Client.ListeClientEntreprise; +import Controllers.Client.RechercherClientEntrepriseController; +import Controllers.Client.RechercherClientPersonneController; +import Controllers.DevisClt.DevisImporterController; +import Controllers.Dialog.MessageControle; +import Models.Produit.ListeProduit; +import Controllers.Produit.RechercherProduitController; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Client.Client; +import Models.Client.ClientDB; +import Models.Client.ClientEntreprise; +import Models.Client.ClientEntrepriseDB; +import Models.Client.ClientPassager; +import Models.CommandeClt.CommandeClt; +import Models.CommandeClt.CommandeCltDB; +import Models.DevisClt.Devis; +import Models.DevisClt.DevisCltListe; +import Models.DevisClt.DevisDB; +import Models.Produit.Produit; +import Models.Produit.ProduitDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * + * @author PC-Maher + */ +public class CommandeCltPasserController implements Initializable { + + @FXML private AnchorPane PaneAjouter ; + + @FXML public Text TotalTVA ; + @FXML public Text Remise ; + @FXML public Text NetAPayer ; + @FXML public Text Timbre ; + @FXML public Text TotalHTNet ; + + @FXML public Button Enregister ; + @FXML public Button ClientExisteDejat ; + @FXML public Button ClientDefault ; + @FXML public Button RechercheProduit ; + + @FXML public TextField Nom ; + @FXML public TextField Prenom ; + @FXML public TextField Adresse ; + @FXML public TextField TELE1 ; + @FXML public TextField TELE2 ; + + @FXML public Text TextMatricule ; + @FXML public Text TextPrenom; + @FXML public Text TextSexe; + @FXML public Text TextDateNaisssance; + + @FXML public Text TextCltExistCode; + @FXML public Text CltExistCode; + @FXML public Text CltExistNom; + @FXML public Text CltExistPrenom; + @FXML public Text CltExistDateNaissance; + @FXML public Text CltExistAdresse; + @FXML public Text CltExistTELE1; + @FXML public Text CltExistTELE2; + + @FXML public DatePicker DateNaisssance ; + + @FXML public ComboBox ModeReglement ; + + @FXML public TableView TableViewListeProduit ; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColDesignaton; + @FXML public TableColumn TabColQuantite ; + @FXML public TableColumn TabColPrixHT; + @FXML public TableColumn TabColRemise; + @FXML public TableColumn TabColTotalHT; + @FXML public TableColumn TabColTVA; + @FXML public TableColumn TabColTotalTTC; + @FXML public TableColumn TabColAddAction ; + + @FXML private ToggleGroup ToggleGroupSexe; + @FXML private RadioButton SexeHomme; + @FXML private RadioButton SexeFemme; + + public static Integer TypeClient ; // 0Personne 1Entreprise 2Passeger + public static String codeclient ; + public static String codecliententre; + public static String Mode; // Comptant Facilité + public static String CodeDevis; + + public static ObservableList data=FXCollections.observableArrayList(); + + + CommandeClt commandeclt = new CommandeClt(); + Produit produit= new Produit(); + ProduitDB produitDB= new ProduitDB(); + + public void SauvgardeTraitement(){ + if(TypeClient != null){ + + if(TypeClient == 0){ + this.SetClient(codeclient); + } + if(TypeClient == 1){ + this.SetClientEntre(codecliententre); + } + } + } + + @Override + public void initialize(URL url, ResourceBundle rb) { + + this.SauvgardeTraitement(); + + TableViewListeProduit.setEditable(true); + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignaton.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColReference.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColQuantite.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColRemise.setCellFactory(TextFieldTableCell.forTableColumn()); + + ModeReglement.setValue(Mode); + + this.ReferenceMouseClick(); + this.QantiteMouseClick(); + this.RemiseMouseClick(); + + + TabColAddAction.setSortable(true); + TabColAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new CommandeCltPasserController.ButtonCell(); + } + }); + TabColAddAction.setStyle( "-fx-alignment: CENTER;"); + TabColAddAction.getStyleClass().add("Center"); + + TableViewListeProduit.setItems(data); + CalculeListeProduit(); + + //Ajouter une ligne vide clors ce que en click sur la tableview + TableViewListeProduit.setOnMouseClicked(new EventHandler(){ + public void handle(MouseEvent event){ + int nbrligne = TableViewListeProduit.getItems().size() ; + if(nbrligne == 0){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + } + else{ + ListeProduit Liste = TableViewListeProduit.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + TableViewListeProduit.getSelectionModel().select(nbrligne); + } + } + } + }); + + + } + + @FXML + private void SaveButtonAction(ActionEvent event) throws IOException { + final CommandeCltDialogConfirmationController CommandeCltDialogConfirmation = new CommandeCltDialogConfirmationController(); + if(ControleObject()){ + this.SetObject(); + CommandeCltDialogConfirmation.GetCommandeClt(commandeclt); + CommandeCltDialogConfirmation.Enregister.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + CommandeCltDialogConfirmation.AnchorPrincipal.setVisible(false); + CommandeCltDB commandecltDB = new CommandeCltDB(); + + commandeclt = commandecltDB.AddCommandeClt(commandeclt); + + if(!commandeclt.getCodecommandeclt().isEmpty()){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/CommandeClt/CommandeCltDetail.fxml")); + Parent NodeDetail = (Parent)fxmlLoader.load(); + CommandeCltDetail commandecltDetail = fxmlLoader.getController(); + commandecltDetail.SowDetailCommandeClt(commandeclt.getCodecommandeclt()); + PaneAjouter.getChildren().add(NodeDetail); + } catch (IOException ex) { + Logger.getLogger(CommandeCltDetail.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + }); + + CommandeCltDialogConfirmation.Show(); + } + } + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + cellButton.getStyleClass().add("btn-danger"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + int selectdIndex = getTableRow().getIndex(); + data.remove(selectdIndex); + CalculeListeProduit(); + TableViewListeProduit.setStyle(".table-row-cell:selected{ -fx-background-color:transparent ;}"); + + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + @FXML + private void AddLigneButtonAction(ActionEvent event) throws IOException { + int nbrligne = TableViewListeProduit.getItems().size() ; + if(nbrligne == 0){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + } + else{ + ListeProduit Liste = TableViewListeProduit.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + TableViewListeProduit.getSelectionModel().select(nbrligne); + } + } + } + + private boolean ControleObject(){ + boolean resulta = false ; + if(data.size()<1){ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Vous devez ajouter au moin un produit à la liste des produits"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + } + else if(ModeReglement.getValue()==null){ + ModeReglement.setStyle("-fx-border-color:#f20606;"); + } + else if(TypeClient == 2){ // 0Personne 1Entreprise 2Passeger + ModeReglement.setStyle("-fx-border-color:transparent;"); + contro clt =new contro(); + if(Nom.getText().isEmpty()){ + Nom.setStyle("-fx-border-color:#f20606;"); + } + else if(Prenom.getText().isEmpty()){ + Nom.setStyle("-fx-border-color:transparent;"); + Prenom.setStyle("-fx-border-color:#f20606;"); + + } + else if(Adresse.getText().isEmpty()){ + Prenom.setStyle("-fx-border-color:transparent;"); + Adresse.setStyle("-fx-border-color:#f20606;"); + + } + else if(clt.isNumericNotnull(TELE1.getText())){ + Adresse.setStyle("-fx-border-color:transparent;"); + TELE1.setStyle("-fx-border-color:#f20606;"); + } + else if(clt.isNumeric(TELE2.getText())){ + TELE1.setStyle("-fx-border-color:transparent;"); + TELE2.setStyle("-fx-border-color:#f20606;"); + } + else{ + TELE2.setStyle("-fx-border-color:transparent;"); + ModeReglement.setStyle("-fx-border-color:#b5b5b5;"); + resulta = true ; + } + } + else{ + ModeReglement.setStyle("-fx-border-color:#b5b5b5;"); + resulta = true ; + } + + return resulta ; + } + private void SetObject(){ + commandeclt.setTypeClient(TypeClient); + commandeclt.setTypeRegementString(ModeReglement.getValue().toString()); + commandeclt.setCodeDevis(CodeDevis); + commandeclt.setNetAPayer(NetAPayer.getText()); + commandeclt.setTotalTVA(TotalTVA.getText()); + commandeclt.setTotalHorsTaxNet(TotalHTNet.getText()); + commandeclt.setRemise(Remise.getText()); + + if(TypeClient == 0){ + Client CltPersonne = new Client(); + CltPersonne.setCodeclient(CltExistCode.getText()); + CltPersonne.setNom(CltExistNom.getText()); + CltPersonne.setPrenom(TextPrenom.getText()); + CltPersonne.setAdresse(CltExistAdresse.getText()); + CltPersonne.setTelefixString(CltExistTELE1.getText()); + CltPersonne.setTelemobileString(CltExistTELE2.getText()); + commandeclt.setCltPersonne(CltPersonne); + }else if(TypeClient == 1){ + //TextCltExistCode CltExistCode CltExistNom CltExistPrenom + ClientEntreprise CltEntreprise = new ClientEntreprise(); + CltEntreprise.setCodeString(CltExistCode.getText()); + CltEntreprise.setNom(CltExistNom.getText()); + CltEntreprise.setMatricule(CltExistPrenom.getText()); + CltEntreprise.setAdresse(CltExistAdresse.getText()); + CltEntreprise.setTele1String(CltExistTELE1.getText()); + CltEntreprise.setTele2String(CltExistTELE2.getText()); + commandeclt.setCltEntreprise(CltEntreprise); + }else if(TypeClient == 2){ + ClientPassager CltPassager = new ClientPassager(); + CltPassager.setNom(Nom.getText()); + CltPassager.setPrenom(Prenom.getText()); + CltPassager.setAdresse(Adresse.getText()); + CltPassager.setTelefixString(TELE1.getText()); + CltPassager.setTelemobileString(TELE2.getText()); + CltPassager.setNaissance(Adaptateur.DatabaseDateLocalDate(DateNaisssance.getValue())); + RadioButton SelectedRadioSexe = (RadioButton) ToggleGroupSexe.getSelectedToggle(); + CltPassager.setSexeString(SelectedRadioSexe.getEllipsisString()); + + commandeclt.setCltPassager(CltPassager); + } + + //controle le cas ou on a une ligne vide a la fin de la liste + if(data.get(data.size()-1).getTotalTTC().isEmpty()){ + data.remove(data.size()-1); + } + commandeclt.setListeproduit(data); + } + + @FXML + private void DevisCltImportButtonAction(ActionEvent event) throws IOException { + DevisImporterController DevisImporter = new DevisImporterController(); + DevisImporter.Show(); + + DevisImporter.TabColDetail.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(Boolean item, boolean empty) { + Button cellButton = new Button(); + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + try { + DevisCltListe current = ((DevisCltListe)getTableRow().getItem()); + Devis devis = new Devis(); + DevisDB devisDB = new DevisDB(); + + devis = devisDB.getDevis(current.getCodeDevis()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/CommandeClt/CommandeCltPasser.fxml")); + Parent ParentCommandeClt = (Parent) fxmlLoader.load(); + + CommandeCltPasserController CommandeCltPasser = fxmlLoader.getController(); + + CommandeCltPasserController.data.addAll(devis.getListeproduit()); + CommandeCltPasserController.TypeClient = devis.getTypeClient(); + CommandeCltPasserController.CodeDevis = devis.getCodeDevis(); + CommandeCltPasser.ModeReglement.setValue(devis.getTypeRegementString()); + + if(devis.getTypeClient() == 0 ){ + CommandeCltPasserController.codeclient = devis.getCodeClient(); + CommandeCltPasser.SetClient(devis.getCodeClient()); + }else if(devis.getTypeClient() == 1){ + CommandeCltPasserController.codecliententre = devis.getCodeClient(); + CommandeCltPasser.SetClientEntre(devis.getCodeClient()); + }else if(devis.getTypeClient() == 2){ + CommandeCltPasser.Nom.setText(devis.getNom()); + CommandeCltPasser.Prenom.setText(devis.getPrenom()); + CommandeCltPasser.Adresse.setText(devis.getAdresse()); + CommandeCltPasser.TELE1.setText(devis.getTele1()); + CommandeCltPasser.TELE2.setText(devis.getTele2()); + } + + CommandeCltPasser.TotalTVA.setText(devis.getTotalTVA()); + CommandeCltPasser.Remise.setText(devis.getRemise()); + CommandeCltPasser.NetAPayer.setText(devis.getNetAPayer()); + CommandeCltPasser.Timbre.setText(devis.getTimbre()); + CommandeCltPasser.TotalHTNet.setText(devis.getTotalHorsTaxNet()); + + //Refrechir le Panel + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(ParentCommandeClt, 3); + + } catch (IOException ex) { + Logger.getLogger(CommandeCltPasserController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + return cell; + } + }); + + + + + + } + //Methode qui pérmet de traite les recherche du client Personne + @FXML + private void ClientExisteDejatButtonAction(ActionEvent event) throws IOException { + + final RechercherClientPersonneController RechercheClient = new RechercherClientPersonneController(); + + RechercheClient.Action.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + // get Selected Item + ListeClient ClientPerson = ((ListeClient)getTableRow().getItem()); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/CommandeClt/CommandeCltPasser.fxml")); + Parent commandeclt = (Parent) fxmlLoader.load(); + + CommandeCltPasserController CommandeCltPasser = fxmlLoader.getController(); + CommandeCltPasser.SetClient(ClientPerson.getCode()); + + //Traitement de Sauvgarde + CommandeCltPasserController.TypeClient = 0 ; + CommandeCltPasserController.codeclient = ClientPerson.getCode(); + + //Refrechir le Panel + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(commandeclt, 3); + + } catch (IOException ex) { + Logger.getLogger(RechercherClientPersonneController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + + //afficher la fenaitre + RechercheClient.ShowDialg(); + + final RechercherClientEntrepriseController RechercheClientEntre = new RechercherClientEntrepriseController(); + + RechercheClient.cltEntreprise.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + RechercheClient.AnchoreClientPerson.setVisible(false); + RechercheClientEntre.AnchoreClientEntre.setVisible(true); + RechercheClientEntre.Show(); + } + }); + + //Action when the button is pressed + + + RechercheClientEntre.cltPer.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + RechercheClientEntre.AnchoreClientEntre.setVisible(false); + RechercheClient.AnchoreClientPerson.setVisible(true); + RechercheClient.ShowDialg(); + } + }); + + RechercheClientEntre.TableColumnActionEtre.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + // get Selected Item + ListeClientEntreprise currentPerson = ((ListeClientEntreprise)getTableRow().getItem()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/CommandeClt/CommandeCltPasser.fxml")); + Parent commandeclt = (Parent) fxmlLoader.load(); + + //Traitement de Sauvgarde + CommandeCltPasserController.TypeClient = 1 ; + CommandeCltPasserController.codecliententre = currentPerson.getCode(); + + CommandeCltPasserController CommandeCltPasser = fxmlLoader.getController(); + CommandeCltPasser.SetClientEntre(currentPerson.getCode()); + + //Refrechir le Panel + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(commandeclt, 3); + + } catch (IOException ex) { + Logger.getLogger(RechercherClientEntrepriseController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + + } + + private void QantiteMouseClick(){ + TabColQuantite.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newquantite = t.getNewValue() ; + try{ + newquantite = newquantite.replace(',','.'); + if(Float.parseFloat(newquantite)<1){ + newquantite = "1"; + } + } + catch(NumberFormatException nfe){ + newquantite = "1"; + } + + + ListeProduit Liste = t.getRowValue() ; + + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un quantité dans un ligne vide + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setQuantite(newquantite); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), newquantite,Liste.getPrixHT(), Liste.getRemise(),"",Liste.getTVA(),""); + //NewList = CalculeProduit(NewList); + AffectationTableView(NewList,t.getTablePosition().getRow()) ; + + } + } + }); + } + + private void RemiseMouseClick(){ + TabColRemise.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newRemise = t.getNewValue() ; + try{ + newRemise = newRemise.replace(',','.'); + if(Float.parseFloat(newRemise)<0){ + newRemise = "0"; + } + } + catch(NumberFormatException nfe){ + newRemise = "0"; + } + + ListeProduit Liste = t.getRowValue() ; + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un remise dans un ligne vide + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setRemise(newRemise); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), Liste.getQuantite(),Liste.getPrixHT(), newRemise, "", Liste.getTVA(), ""); + AffectationTableView(NewList, t.getTablePosition().getRow()); + } + + } + }); + } + + + + private void ReferenceMouseClick(){ + TabColReference.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + produit = produitDB.getProduit(t.getNewValue()); + if(produit.getReference() != null){ + ListeProduit Liste = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixventeht(),"0","",produit.getTvavente(),"0"); + AffectationTableView(Liste,t.getTablePosition().getRow()) ; + } + else{ + AffectationTableView(new ListeProduit("","","","","","","",""),t.getTablePosition().getRow()) ; + } + + } + }); + } + + + @FXML + private void RechercheProduitButtonAction(ActionEvent event) throws IOException { + final RechercherProduitController rechercheproduit = new RechercherProduitController(true); + + rechercheproduit.Show(); + + rechercheproduit.TabColAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + // get Selected ItemButtonCell + Produit currentPerson = ((Produit)getTableRow().getItem()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/CommandeClt/CommandeCltPasser.fxml")); + Parent commandeclt = (Parent) fxmlLoader.load(); + + CommandeCltPasserController CommandeCltPasser = fxmlLoader.getController(); + CommandeCltPasser.SetProduit(currentPerson.getReference()); + + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(commandeclt, 3); + + } catch (IOException ex) { + Logger.getLogger(CommandeCltPasserController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + + } + + private void AffectationTableView(ListeProduit ListeProd, int EmplacementLigne){ + boolean result = false ; + int indise=0; + int Position = 0; + + if(data.size()>0){ + do{ //Vérifier si le produit exsiste deja + if(data.get(indise).getReference().equals(ListeProd.getReference())){ + result = true ; + Position = indise ; + //System.out.println("existe Position:"+indise); + } + indise++; + }while(data.size()>indise && !result); + + if(result){ //si la ligne exsite déja + if(EmplacementLigne!= -1){ + if(Position == EmplacementLigne){ + data.set(Position, ListeProd); + } + else{ + data.set(EmplacementLigne, new ListeProduit("","","","","","","","")); + } + } + } + else{ + if(EmplacementLigne!= -1){ + data.set(EmplacementLigne, ListeProd); + } + else{ + data.add(ListeProd); + } + } + } + else{ + data.add(ListeProd); + } + + CalculeListeProduit(); + + + TableViewListeProduit.setItems(data); + TableViewListeProduit.setVisible(false); + TableViewListeProduit.setVisible(true); + } + + + + private void CalculeListeProduit(){ //calculer et afficher la détail des produits + float netaPayer = 0; + float Remises = 0; + float totalTVA = 0; + float total_H_T_Net= 0; + TotalTVA.setText(""); + Remise.setText(""); + NetAPayer.setText(""); + Timbre.setText(""); + TotalHTNet.setText(""); + + //calcule + for(ListeProduit liste : data){ + float totaht = Adaptateur.StringToFloat(liste.getTotalHT()) ; + float prix_U_H_T = Adaptateur.StringToFloat(liste.getPrixHT()) ; + float remises = Adaptateur.StringToFloat(liste.getRemise().replace("%", "")) ; + float tva = Adaptateur.StringToFloat(liste.getTVA().replace("%", "")); + float qte = Adaptateur.StringToFloat(liste.getQuantite()); + + totalTVA = totalTVA + ((totaht * tva) /100) ; + + Remises = Remises + (prix_U_H_T * remises)/100 ; + + total_H_T_Net = total_H_T_Net + totaht ; + + } + + if(total_H_T_Net>0){ + float timbre = Adaptateur.StringToFloat(ParametreSystem.Timbre); + netaPayer = total_H_T_Net + totalTVA + timbre ; + + TotalTVA.setText(Adaptateur.ArrondFloatToString(totalTVA)); + Remise.setText(Adaptateur.ArrondFloatToString(Remises)); + NetAPayer.setText(Adaptateur.ArrondFloatToString(netaPayer)); + Timbre.setText(ParametreSystem.Timbre); + TotalHTNet.setText(Adaptateur.ArrondFloatToString(total_H_T_Net)); + } + } + + @FXML + private void ClientRessetDefautButtonAction(ActionEvent event) throws IOException { + CommandeCltPasserController.TypeClient = 2 ; + ClientExisteDejat.setVisible(true); + Nom.setVisible(true); + Prenom.setVisible(true); + DateNaisssance.setVisible(true); + Adresse.setVisible(true); + TELE1.setVisible(true); + TELE2.setVisible(true); + TextSexe.setVisible(true); + SexeHomme.setVisible(true); + SexeFemme.setVisible(true); + TextDateNaisssance.setVisible(true); + + TextCltExistCode.setVisible(false); + ClientDefault.setVisible(false); + CltExistCode.setVisible(false); + CltExistNom.setVisible(false); + CltExistPrenom.setVisible(false); + CltExistAdresse.setVisible(false); + CltExistTELE1.setVisible(false); + CltExistTELE2.setVisible(false); + CltExistDateNaissance.setVisible(false); + } + + public void SetClient(String codeclt){ + Client client = new Client(); + ClientDB clientdb = new ClientDB(); + CommandeCltPasserController.TypeClient = 0 ; + client = clientdb.getClient(codeclt); + + ClientExisteDejat.setVisible(false); + Nom.setVisible(false); + Prenom.setVisible(false); + DateNaisssance.setVisible(false); + Adresse.setVisible(false); + TELE1.setVisible(false); + TELE2.setVisible(false); + TextSexe.setVisible(true); + SexeHomme.setVisible(true); + SexeFemme.setVisible(true); + + CltExistCode.setText(client.getCodeclient().toString()); + CltExistNom.setText(client.getNom()); + CltExistPrenom.setText(client.getPrenom()); + CltExistDateNaissance.setText(" "+client.getDateNaissanceString()); + CltExistAdresse.setText(client.getAdresse()); + CltExistTELE1.setText(client.getTelefix().toString()); + CltExistTELE2.setText(client.getTelemobileString()); + if(client.getSexe() == 1){ + SexeHomme.setSelected(true); + }else if(client.getSexe() == 0){ + SexeFemme.setSelected(true); + } + + + + TextDateNaisssance.setVisible(true); + TextCltExistCode.setVisible(true); + ClientDefault.setVisible(true); + CltExistCode.setVisible(true); + CltExistNom.setVisible(true); + CltExistPrenom.setVisible(true); + CltExistDateNaissance.setVisible(true); + CltExistAdresse.setVisible(true); + CltExistTELE1.setVisible(true); + CltExistTELE2.setVisible(true); + + } + + + public void SetProduit(String Refprod){ + produit = produitDB.getProduit(Refprod); + ListeProduit ListeProd = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixventeht(),"0",produit.getPrixventettc(),produit.getTvavente(),"0"); + //Supprimer les igne vide + if((data.size()>0) && (data.get(data.size()-1).getReference().isEmpty())){ + data.remove(data.size()-1); + } + + AffectationTableView(ListeProd,-1); + } + public void SetClientEntre(String codecliententre){ + + ClientEntreprise ClientEtr = new ClientEntreprise(); + ClientEntrepriseDB ClientEtrDB = new ClientEntrepriseDB(); + ClientEtr = ClientEtrDB.GetClientEtr(codecliententre); + CommandeCltPasserController.TypeClient = 1 ; + + TextMatricule.setVisible(true); + TextPrenom.setVisible(false); + TextSexe.setVisible(false); + SexeHomme.setVisible(false); + SexeFemme.setVisible(false); + DateNaisssance.setVisible(false); + + ClientExisteDejat.setVisible(false); + CltExistDateNaissance.setVisible(false); + TextDateNaisssance.setVisible(false); + Nom.setVisible(false); + Prenom.setVisible(false); + Adresse.setVisible(false); + TELE1.setVisible(false); + TELE2.setVisible(false); + + CltExistCode.setText(ClientEtr.getCode().toString()); + CltExistNom.setText(ClientEtr.getNom()); + CltExistPrenom.setText(ClientEtr.getMatricule()); + CltExistAdresse.setText(ClientEtr.getAdresse()); + CltExistTELE1.setText(ClientEtr.getTele1().toString()); + CltExistTELE2.setText(ClientEtr.getTele2().toString()); + + TextCltExistCode.setVisible(true); + ClientDefault.setVisible(true); + CltExistCode.setVisible(true); + CltExistNom.setVisible(true); + CltExistPrenom.setVisible(true); + CltExistAdresse.setVisible(true); + CltExistTELE1.setVisible(true); + CltExistTELE2.setVisible(true); + } +} diff --git a/src/main/java/Controllers/DevisClt/DevisAjouterController.java b/src/main/java/Controllers/DevisClt/DevisAjouterController.java new file mode 100644 index 0000000..29c9842 --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisAjouterController.java @@ -0,0 +1,911 @@ +/* + * 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 Controllers.DevisClt; + +import Controllers.Client.ListeClient; +import Controllers.Client.ListeClientEntreprise; +import Controllers.Client.RechercherClientEntrepriseController; +import Controllers.Client.RechercherClientPersonneController; +import Controllers.Dialog.MessageControle; +import Models.Produit.ListeProduit; +import Controllers.Produit.RechercherProduitController; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Client.Client; +import Models.Client.ClientDB; +import Models.Client.ClientEntreprise; +import Models.Client.ClientEntrepriseDB; +import Models.DevisClt.Devis; +import Models.DevisClt.DevisDB; +import Models.Produit.Produit; +import Models.Produit.ProduitDB; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * + * @author PC-Maher + */ +public class DevisAjouterController implements Initializable { + + @FXML private AnchorPane PaneDevisAjouter ; + + @FXML private Text DevisTotalTVA ; + @FXML private Text DevisRemise ; + @FXML private Text DevisNetAPayer ; + @FXML private Text DevisTimbre ; + @FXML private Text DevisTotalHTNet ; + + @FXML public Button EnregisterDevis ; + @FXML public Button ClientExisteDejat ; + @FXML public Button ClientDefault ; + @FXML public Button RechercheProduit ; + + @FXML public TextField DevisNom ; + @FXML public TextField DevisPrenom ; + @FXML public TextField DevisAdresse ; + @FXML public TextField DevisTELE1 ; + @FXML public TextField DevisTELE2 ; + + @FXML public Text TextMatricule ; + @FXML public Text TextPrenom; + + @FXML public Text TextCltExistCode; + @FXML public Text CltExistCode; + @FXML public Text CltExistNom; + @FXML public Text CltExistPrenom; + @FXML public Text CltExistAdresse; + @FXML public Text CltExistTELE1; + @FXML public Text CltExistTELE2; + + @FXML public DatePicker DateCreation ; + @FXML public DatePicker DateFinValidite ; + + @FXML public ComboBox ModeReglement ; + + @FXML public TableView TableViewListeProduitDevis ; + @FXML public TableColumn TabColDevisReference; + @FXML public TableColumn TabColDevisDesignaton; + @FXML public TableColumn TabColDevisQuantite ; + @FXML public TableColumn TabColDevisPrixHT; + @FXML public TableColumn TabColDevisRemise; + @FXML public TableColumn TabColDevisTotalHT; + @FXML public TableColumn TabColDevisTVA; + @FXML public TableColumn TabColDevisTotalTTC; + @FXML public TableColumn TabColDevisAddAction ; + + public static Integer TypeClient ; // 0Personne 1Entreprise 2Passeger + public static String codeclient ; + public static String codecliententre; + public static Object Mode; + public static LocalDate FinValidite; + + public static ObservableList data=FXCollections.observableArrayList(); + + Devis devis = new Devis(); + Produit produit= new Produit(); + ProduitDB produitDB= new ProduitDB(); + + + public void SauvgardeTraitement(){ + if(TypeClient != null){ + + if(TypeClient == 0){ + this.SetClient(codeclient); + } + if(TypeClient == 1){ + this.SetClientEntre(codecliententre); + } + } + } + + @Override + public void initialize(URL url, ResourceBundle rb) { + + this.SauvgardeTraitement(); + + DateCreation.setValue(LocalDate.now()); + + TableViewListeProduitDevis.setEditable(true); + TabColDevisReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDevisDesignaton.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColDevisQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColDevisQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDevisQuantite.getStyleClass().add("Center"); + + TabColDevisPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColDevisPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColDevisPrixHT.getStyleClass().add("Center"); + + TabColDevisRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColDevisRemise.setStyle( "-fx-alignment: CENTER;"); + TabColDevisRemise.getStyleClass().add("Center"); + + TabColDevisTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColDevisTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColDevisTotalHT.getStyleClass().add("Center"); + + TabColDevisTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColDevisTVA.setStyle( "-fx-alignment: CENTER;"); + TabColDevisTVA.getStyleClass().add("Center"); + + TabColDevisTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColDevisTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDevisTotalTTC.getStyleClass().add("Center"); + + TabColDevisReference.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColDevisQuantite.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColDevisRemise.setCellFactory(TextFieldTableCell.forTableColumn()); + + this.ReferenceMouseClick(); + this.QantiteMouseClick(); + this.RemiseMouseClick(); + + + + TabColDevisAddAction.setSortable(true); + TabColDevisAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColDevisAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new DevisAjouterController.ButtonCell(); + } + }); + + + TableViewListeProduitDevis.setItems(data); + CalculeListeProduit(); + + //Ajouter une ligne vide lorce ce que en click sur la tableview + TableViewListeProduitDevis.setOnMouseClicked(new EventHandler(){ + public void handle(MouseEvent event){ + int nbrligne = TableViewListeProduitDevis.getItems().size() ; + if(nbrligne == 0){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduitDevis.setItems(data); + } + else{ + ListeProduit Liste = TableViewListeProduitDevis.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduitDevis.setItems(data); + TableViewListeProduitDevis.getSelectionModel().select(nbrligne); + } + } + } + }); + + } + + @FXML + private void SaveDevisButtonAction(ActionEvent event) throws IOException { + final DevisDialogConfirmationController DevisDialogConfirmation = new DevisDialogConfirmationController(); + if(ControleDevis()){ + this.SetDevis(); + + DevisDialogConfirmation.Getdevis(devis); + DevisDialogConfirmation.DevisEnregister.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + DevisDialogConfirmation.AnchorPrincipal.setVisible(false); + DevisDB devisdb = new DevisDB(); + String codedevis = devisdb.AddDevis(devis); + if(!codedevis.isEmpty()){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Devis/DevisDetail.fxml")); + Parent NodeDetail = (Parent)fxmlLoader.load(); + DevisDetailController devisdetail = fxmlLoader.getController(); + devisdetail.SowDetailDevis(codedevis); + PaneDevisAjouter.getChildren().add(NodeDetail); + } catch (IOException ex) { + Logger.getLogger(DevisAjouterController.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + }); + + DevisDialogConfirmation.Show(); + } + } + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + cellButton.getStyleClass().add("btn-danger"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + int selectdIndex = getTableRow().getIndex(); + data.remove(selectdIndex); + CalculeListeProduit(); + TableViewListeProduitDevis.setStyle(".table-row-cell:selected{ -fx-background-color:transparent ;}"); + + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + @FXML + private void AddLigneButtonAction(ActionEvent event) throws IOException { + int nbrligne = TableViewListeProduitDevis.getItems().size() ; + if(nbrligne == 0){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduitDevis.setItems(data); + } + else{ + ListeProduit Liste = TableViewListeProduitDevis.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduitDevis.setItems(data); + TableViewListeProduitDevis.getSelectionModel().select(nbrligne); + } + } + } + + private boolean ControleDevis(){ + boolean resulta = false ; + if(data.size()<1){ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Vous devez ajouter au moin un produit à la liste des produits"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + } + //DateFinValidite ModeReglement + else if(DateFinValidite.getValue()==null){ + DateFinValidite.setStyle("-fx-border-color:#f20606;"); + } + else if(ModeReglement.getValue()==null){ + DateFinValidite.setStyle("-fx-border-color:#b5b5b5;"); + ModeReglement.setStyle("-fx-border-color:#f20606;"); + } + else if(TypeClient == 2){ // 0Personne 1Entreprise 2Passeger + ModeReglement.setStyle("-fx-border-color:transparent;"); + contro clt =new contro(); + if(DevisNom.getText().isEmpty()){ + DevisNom.setStyle("-fx-border-color:#f20606;"); + } + else if(DevisPrenom.getText().isEmpty()){ + DevisNom.setStyle("-fx-border-color:transparent;"); + DevisPrenom.setStyle("-fx-border-color:#f20606;"); + + } + else if(DevisAdresse.getText().isEmpty()){ + DevisPrenom.setStyle("-fx-border-color:transparent;"); + DevisAdresse.setStyle("-fx-border-color:#f20606;"); + + } + else if(clt.isNumericNotnull(DevisTELE1.getText())){ + DevisAdresse.setStyle("-fx-border-color:transparent;"); + DevisTELE1.setStyle("-fx-border-color:#f20606;"); + } + else if(clt.isNumeric(DevisTELE2.getText())){ + DevisTELE1.setStyle("-fx-border-color:transparent;"); + DevisTELE2.setStyle("-fx-border-color:#f20606;"); + } + else{ + DevisTELE2.setStyle("-fx-border-color:transparent;"); + DateFinValidite.setStyle("-fx-border-color:#b5b5b5;"); + ModeReglement.setStyle("-fx-border-color:#b5b5b5;"); + resulta = true ; + } + } + else{ + DateFinValidite.setStyle("-fx-border-color:#b5b5b5;"); + ModeReglement.setStyle("-fx-border-color:#b5b5b5;"); + resulta = true ; + } + + return resulta ; + } + private void SetDevis(){ + + devis.setDate(Adaptateur.NormalDateFormat(DateCreation.getValue())); + devis.setTypeClient(TypeClient); + devis.setTypeRegement(ModeReglement.getValue().toString()); + devis.setValidite(Adaptateur.NormalDateFormat(DateFinValidite.getValue())); + + devis.setNetAPayer(DevisNetAPayer.getText()); + devis.setTotalTVA(DevisTotalTVA.getText()); + devis.setTotalHorsTaxNet(DevisTotalHTNet.getText()); + + if(TypeClient == 0){ + devis.setCodeClient(CltExistCode.getText()); + devis.setNom(CltExistNom.getText()); + devis.setPrenom(CltExistPrenom.getText()); + devis.setAdresse(CltExistAdresse.getText()); + devis.setTele1(CltExistTELE1.getText()); + devis.setTele2(CltExistTELE2.getText()); + + } + else if(TypeClient == 1){ + //TextCltExistCode CltExistCode CltExistNom CltExistPrenom + devis.setCodeClient(CltExistCode.getText()); + devis.setNom(CltExistNom.getText()); + devis.setMatricule(CltExistPrenom.getText()); + devis.setAdresse(CltExistAdresse.getText()); + devis.setTele1(CltExistTELE1.getText()); + devis.setTele2(CltExistTELE2.getText()); + } + else if(TypeClient == 2){ + devis.setNom(DevisNom.getText()); + devis.setPrenom(DevisPrenom.getText()); + devis.setAdresse(DevisAdresse.getText()); + devis.setTele1(DevisTELE1.getText()); + devis.setTele2(DevisTELE2.getText()); + } + + //controle le cas ou on a une ligne vide a la fin de la liste + if(data.get(data.size()-1).getTotalTTC().isEmpty()){ + data.remove(data.size()-1); + } + devis.setListeproduit(data); + } + + + //Methode qui pérmet de traite les recherche du client Personne + @FXML + private void ClientExisteDejatButtonAction(ActionEvent event) throws IOException { + + final RechercherClientPersonneController RechercheClient = new RechercherClientPersonneController(); + + RechercheClient.Action.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + // get Selected Item + ListeClient ClientPerson = ((ListeClient)getTableRow().getItem()); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Devis/DevisAjouter.fxml")); + Parent devis = (Parent) fxmlLoader.load(); + + + //Traitement de Sauvgarde + DevisAjouterController.TypeClient = 0 ; + DevisAjouterController.codeclient = ClientPerson.getCode(); + DevisAjouterController.FinValidite = DateFinValidite.getValue(); + DevisAjouterController.Mode = ModeReglement.getValue(); + + DevisAjouterController devisajouter = fxmlLoader.getController(); + devisajouter.SetClient(ClientPerson.getCode()); + devisajouter.ModeReglement.setValue(DevisAjouterController.Mode); + devisajouter.DateFinValidite.setValue(DevisAjouterController.FinValidite); + + //Refrechir le Panel + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(devis, 3); + + } catch (IOException ex) { + Logger.getLogger(RechercherClientPersonneController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + + //afficher la fenaitre + RechercheClient.ShowDialg(); + + final RechercherClientEntrepriseController RechercheClientEntre = new RechercherClientEntrepriseController(); + + RechercheClient.cltEntreprise.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + RechercheClient.AnchoreClientPerson.setVisible(false); + RechercheClientEntre.AnchoreClientEntre.setVisible(true); + RechercheClientEntre.Show(); + } + }); + + //Action when the button is pressed + + + RechercheClientEntre.cltPer.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + RechercheClientEntre.AnchoreClientEntre.setVisible(false); + RechercheClient.AnchoreClientPerson.setVisible(true); + RechercheClient.ShowDialg(); + } + }); + + RechercheClientEntre.TableColumnActionEtre.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + // get Selected Item + ListeClientEntreprise currentPerson = ((ListeClientEntreprise)getTableRow().getItem()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Devis/DevisAjouter.fxml")); + Parent devis = (Parent) fxmlLoader.load(); + + //Traitement de Sauvgarde + DevisAjouterController.TypeClient = 1 ; + DevisAjouterController.codecliententre = currentPerson.getCode(); + DevisAjouterController.FinValidite = DateFinValidite.getValue(); + DevisAjouterController.Mode = ModeReglement.getValue(); + + DevisAjouterController devisajouter = fxmlLoader.getController(); + + devisajouter.SetClientEntre(currentPerson.getCode()); + devisajouter.ModeReglement.setValue(DevisAjouterController.Mode); + devisajouter.DateFinValidite.setValue(DevisAjouterController.FinValidite); + + //Refrechir le Panel + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(devis, 3); + + } catch (IOException ex) { + Logger.getLogger(RechercherClientEntrepriseController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + + } + + private void QantiteMouseClick(){ + TabColDevisQuantite.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newquantite = t.getNewValue() ; + try{ + newquantite = newquantite.replace(',','.'); + if(Float.parseFloat(newquantite)<1){ + newquantite = "1"; + } + } + catch(NumberFormatException nfe){ + newquantite = "1"; + } + + + ListeProduit Liste = t.getRowValue() ; + + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un quantité dans un ligne vide + TableViewListeProduitDevis.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduitDevis.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setQuantite(newquantite); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), newquantite,Liste.getPrixHT(), Liste.getRemise(),"",Liste.getTVA(),""); + //NewList = CalculeProduit(NewList); + AffectationTableView(NewList,t.getTablePosition().getRow()) ; + + } + } + }); + } + + private void RemiseMouseClick(){ + TabColDevisRemise.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newRemise = t.getNewValue() ; + try{ + newRemise = newRemise.replace(',','.'); + if(Float.parseFloat(newRemise)<0){ + newRemise = "0"; + } + } + catch(NumberFormatException nfe){ + newRemise = "0"; + } + + ListeProduit Liste = t.getRowValue() ; + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un remise dans un ligne vide + TableViewListeProduitDevis.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduitDevis.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setRemise(newRemise); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), Liste.getQuantite(),Liste.getPrixHT(), newRemise, "", Liste.getTVA(), ""); + AffectationTableView(NewList, t.getTablePosition().getRow()); + } + + } + }); + } + + + + private void ReferenceMouseClick(){ + TabColDevisReference.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + produit = produitDB.getProduit(t.getNewValue()); + if(produit.getReference() != null){ + ListeProduit Liste = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixventeht(),"0","",produit.getTvavente(),"0"); + AffectationTableView(Liste,t.getTablePosition().getRow()) ; + } + else{ + AffectationTableView(new ListeProduit("","","","","","","",""),t.getTablePosition().getRow()) ; + } + + } + }); + } + + + @FXML + private void RechercheProduitButtonAction(ActionEvent event) throws IOException { + + double PrefWidthPaneDevis = PaneDevisAjouter.getPrefWidth(); + double PrefHeightPaneDevis = PaneDevisAjouter.getPrefHeight(); + + System.out.println(PaneDevisAjouter.getPrefWidth()); + System.out.println(PaneDevisAjouter.getPrefHeight()); + + final RechercherProduitController rechercheproduit = new RechercherProduitController(true); + + rechercheproduit.Show(); + + rechercheproduit.TabColAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + DevisAjouterController.FinValidite = DateFinValidite.getValue(); + DevisAjouterController.Mode = ModeReglement.getValue(); + // get Selected ItemButtonCell + Produit currentPerson = ((Produit)getTableRow().getItem()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Devis/DevisAjouter.fxml")); + Parent devis = (Parent) fxmlLoader.load(); + + DevisAjouterController devisajouter = fxmlLoader.getController(); + devisajouter.SetProduit(currentPerson.getReference()); + + devisajouter.ModeReglement.setValue(DevisAjouterController.Mode); + devisajouter.DateFinValidite.setValue(DevisAjouterController.FinValidite); + + devisajouter.PaneDevisAjouter.setPrefSize(PrefWidthPaneDevis, PrefHeightPaneDevis); + + + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(devis, 3); + + } catch (IOException ex) { + Logger.getLogger(DevisAjouterController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + + } + + private void AffectationTableView(ListeProduit ListeProd, int EmplacementLigne){ + boolean result = false ; + int indise=0; + int Position = 0; + + if(data.size()>0){ + do{ //Vérifier si le produit exsiste deja + if(data.get(indise).getReference().equals(ListeProd.getReference())){ + result = true ; + Position = indise ; + //System.out.println("existe Position:"+indise); + } + indise++; + }while(data.size()>indise && !result); + + if(result){ //si la ligne exsite déja + if(EmplacementLigne!= -1){ + if(Position == EmplacementLigne){ + data.set(Position, ListeProd); + } + else{ + data.set(EmplacementLigne, new ListeProduit("","","","","","","","")); + } + } + } + else{ + if(EmplacementLigne!= -1){ + data.set(EmplacementLigne, ListeProd); + } + else{ + data.add(ListeProd); + } + } + } + else{ + data.add(ListeProd); + } + + CalculeListeProduit(); + + + TableViewListeProduitDevis.setItems(data); + TableViewListeProduitDevis.setVisible(false); + TableViewListeProduitDevis.setVisible(true); + } + + + + private void CalculeListeProduit(){ //calculer et afficher la détail des produits + float NetaPayer = 0; + float Remise = 0; + float TotalTVA = 0; + float Total_H_T_Net= 0; + DevisTotalTVA.setText(""); + DevisRemise.setText(""); + DevisNetAPayer.setText(""); + DevisTimbre.setText(""); + DevisTotalHTNet.setText(""); + + //calcule + for(ListeProduit liste : data){ + float totaht = Adaptateur.StringToFloat(liste.getTotalHT()) ; + float prix_U_H_T = Adaptateur.StringToFloat(liste.getPrixHT()) ; + float remise = Adaptateur.StringToFloat(liste.getRemise().replace("%", "")) ; + float tva = Adaptateur.StringToFloat(liste.getTVA().replace("%", "")); + float qte = Adaptateur.StringToFloat(liste.getQuantite()); + + TotalTVA = TotalTVA + ((totaht * tva) /100) ; + + Remise = Remise + (prix_U_H_T * remise)/100 ; + + Total_H_T_Net = Total_H_T_Net + totaht ; + + } + + if(Total_H_T_Net>0){ + float timbre = Adaptateur.StringToFloat(ParametreSystem.Timbre); + NetaPayer = Total_H_T_Net + TotalTVA + timbre ; + + DevisTotalTVA.setText(Adaptateur.ArrondFloatToString(TotalTVA)); + DevisRemise.setText(Adaptateur.ArrondFloatToString(Remise)); + devis.setRemise(Adaptateur.ArrondFloatToString(Remise)); + DevisNetAPayer.setText(Adaptateur.ArrondFloatToString(NetaPayer)); + DevisTimbre.setText(ParametreSystem.Timbre); + DevisTotalHTNet.setText(Adaptateur.ArrondFloatToString(Total_H_T_Net)); + } + } + + @FXML + private void ClientRessetDefautButtonAction(ActionEvent event) throws IOException { + DevisAjouterController.TypeClient = 2 ; + ClientExisteDejat.setVisible(true); + DevisNom.setVisible(true); + DevisPrenom.setVisible(true); + DevisAdresse.setVisible(true); + DevisTELE1.setVisible(true); + DevisTELE2.setVisible(true); + + TextCltExistCode.setVisible(false); + ClientDefault.setVisible(false); + CltExistCode.setVisible(false); + CltExistNom.setVisible(false); + CltExistPrenom.setVisible(false); + CltExistAdresse.setVisible(false); + CltExistTELE1.setVisible(false); + CltExistTELE2.setVisible(false); + } + + public void SetClient(String codeclt){ + Client client = new Client(); + ClientDB clientdb = new ClientDB(); + DevisAjouterController.TypeClient = 0 ; + client = clientdb.getClient(codeclt); + + ClientExisteDejat.setVisible(false); + DevisNom.setVisible(false); + DevisPrenom.setVisible(false); + DevisAdresse.setVisible(false); + DevisTELE1.setVisible(false); + DevisTELE2.setVisible(false); + + + CltExistCode.setText(client.getCodeclient().toString()); + CltExistNom.setText(client.getNom()); + CltExistPrenom.setText(client.getPrenom()); + CltExistAdresse.setText(client.getAdresse()); + CltExistTELE1.setText(client.getTelefix().toString()); + CltExistTELE2.setText(client.getTelemobileString()); + + TextCltExistCode.setVisible(true); + ClientDefault.setVisible(true); + CltExistCode.setVisible(true); + CltExistNom.setVisible(true); + CltExistPrenom.setVisible(true); + CltExistAdresse.setVisible(true); + CltExistTELE1.setVisible(true); + CltExistTELE2.setVisible(true); + + } + + + public void SetProduit(String Refprod){ + produit = produitDB.getProduit(Refprod); + ListeProduit ListeProd = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixventeht(),"0",produit.getPrixventettc(),produit.getTvavente(),"0"); + //Supprimer les igne vide + if((data.size()>0) && (data.get(data.size()-1).getReference().isEmpty())){ + data.remove(data.size()-1); + } + + AffectationTableView(ListeProd,-1); + } + public void SetClientEntre(String codecliententre){ + + ClientEntreprise ClientEtr = new ClientEntreprise(); + ClientEntrepriseDB ClientEtrDB = new ClientEntrepriseDB(); + ClientEtr = ClientEtrDB.GetClientEtr(codecliententre); + DevisAjouterController.TypeClient = 1 ; + + TextMatricule.setVisible(true); + TextPrenom.setVisible(false); + + ClientExisteDejat.setVisible(false); + DevisNom.setVisible(false); + DevisPrenom.setVisible(false); + DevisAdresse.setVisible(false); + DevisTELE1.setVisible(false); + DevisTELE2.setVisible(false); + + CltExistCode.setText(ClientEtr.getCode().toString()); + CltExistNom.setText(ClientEtr.getNom()); + CltExistPrenom.setText(ClientEtr.getMatricule()); + CltExistAdresse.setText(ClientEtr.getAdresse()); + CltExistTELE1.setText(ClientEtr.getTele1().toString()); + CltExistTELE2.setText(ClientEtr.getTele2().toString()); + + TextCltExistCode.setVisible(true); + ClientDefault.setVisible(true); + CltExistCode.setVisible(true); + CltExistNom.setVisible(true); + CltExistPrenom.setVisible(true); + CltExistAdresse.setVisible(true); + CltExistTELE1.setVisible(true); + CltExistTELE2.setVisible(true); + } +} diff --git a/src/main/java/Controllers/DevisClt/DevisCltGestionController.java b/src/main/java/Controllers/DevisClt/DevisCltGestionController.java new file mode 100644 index 0000000..74202ba --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisCltGestionController.java @@ -0,0 +1,425 @@ +package Controllers.DevisClt; + +import Models.DevisClt.DevisCltListe; +import Models.DevisClt.DevisDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author PC-Maher + */ +public class DevisCltGestionController implements Initializable { + + @FXML private AnchorPane PaneDevisGestion ; + + @FXML private ProgressBar ProgressBarDevisClt; + + @FXML private Button ButtonSearchDevisClt; + + @FXML private AnchorPane ListerPages; + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + @FXML public TableView TableViewGestionDevis; + + @FXML public TableColumn TabColCodeDevis; + @FXML public TableColumn TabColModePaiement; + @FXML public TableColumn TabColTypeClient; + @FXML public TableColumn TabColCodeClient; + @FXML public TableColumn TabColTotalDevis; + @FXML public TableColumn TabColDateCreation ; + @FXML public TableColumn TabColDateFinValidite; + @FXML public TableColumnTabColDetail ; + + @FXML public TextField TextFieldCodeDevis ; + @FXML public TextField TextFieldCodeClient ; + @FXML public TextField TextFieldNomPrenomClient ; + @FXML public TextField TextFieldCinClient; + @FXML public DatePicker DatePickerCreation ; + @FXML public RadioButton RadioComptant; + @FXML public RadioButton RadioFacilite; + + private Service ThreadSearchDevisClt; + + @FXML + private void AddDevisButtonAction(ActionEvent event) throws IOException { + + //inisialiser les données de Sauvgarde des opération + DevisAjouterController.TypeClient = 2 ; + DevisAjouterController.codeclient = null ; + DevisAjouterController.codecliententre = null ; + DevisAjouterController.data.clear(); + DevisAjouterController.FinValidite = null; + DevisAjouterController.Mode = null; + + PaneDevisGestion.getChildren().clear(); + PaneDevisGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Devis/DevisAjouter.fxml"))); + } + + @Override + public void initialize(URL url, ResourceBundle rb) { + + //comboboxnombre des lignes tableview + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TableViewGestionDevis.setEditable(true); + + TabColCodeDevis.setStyle( "-fx-alignment: CENTER;");TabColCodeDevis.getStyleClass().add("Center"); + TabColCodeDevis.setCellValueFactory(new PropertyValueFactory("CodeDevis")); + + TabColTypeClient.setStyle( "-fx-alignment: CENTER;");TabColTypeClient.getStyleClass().add("Center"); + TabColTypeClient.setCellValueFactory(new PropertyValueFactory("TypeClient")); + + TabColCodeClient.setStyle( "-fx-alignment: CENTER;");TabColCodeClient.getStyleClass().add("Center"); + TabColCodeClient.setCellValueFactory(new PropertyValueFactory("CodeClient")); + + TabColModePaiement.setStyle( "-fx-alignment: CENTER;");TabColModePaiement.getStyleClass().add("Center"); + TabColModePaiement.setCellValueFactory(new PropertyValueFactory("ModePaiement")); + + TabColTotalDevis.setStyle( "-fx-alignment: CENTER;");TabColTotalDevis.getStyleClass().add("Center"); + TabColTotalDevis.setCellValueFactory(new PropertyValueFactory("TotalDevis")); + + TabColDateCreation.setStyle( "-fx-alignment: CENTER;");TabColDateCreation.getStyleClass().add("Center"); + TabColDateCreation.setCellValueFactory(new PropertyValueFactory("DateCreation")); + + TabColDateFinValidite.setStyle( "-fx-alignment: CENTER;");TabColDateFinValidite.getStyleClass().add("Center"); + TabColDateFinValidite.setCellValueFactory(new PropertyValueFactory("FinValidite")); + + TabColDetail.setSortable(true); + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + TabColDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + ButtonSearchDevisClt.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchDevisClt(); + } + }); + + PaneDevisGestion.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchDevisClt(); + } + } + }); + + GestionSearchDevisClt(); + } + + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconedit.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + // get Selected Item + DevisCltListe current = (DevisCltListe) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + String codedevis = current.getCodeDevis(); + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Devis/DevisDetail.fxml")); + Parent NodeDetail = (Parent)fxmlLoader.load(); + DevisDetailController devisdetail = fxmlLoader.getController(); + devisdetail.AnchorPaneSucces.setVisible(false); + devisdetail.TextSucces.setText("Information Devis"); + devisdetail.TextSucces.setLayoutX(30); + devisdetail.TextSucces.setFont(Font.font("Arial", FontWeight.NORMAL, 21)); + devisdetail.TextDescSucces.setVisible(false); + devisdetail.SowDetailDevis(codedevis); + PaneDevisGestion.getChildren().add(NodeDetail); + + } catch (IOException ex) { + Logger.getLogger(DevisCltGestionController.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + +/****************************************************************************** * + * * + * Methode last Next TableView client Entreprise * + * * * + ******************************************************************************/ + + private void SearchDevisClt() + { + ProgressBarDevisClt.setVisible(true); + + ButtonSearchDevisClt.setDisable(true); + + ThreadSearchDevisClt = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateCreation = ""; + if(DatePickerCreation.getValue() != null){ + DateCreation = DatePickerCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListDevisClts = new DevisDB().SearchDevisCltGestion( + position, + nbrligne, + TextFieldCodeDevis.getText(), + TextFieldCodeClient.getText(), + TypeRegement, + DateCreation, + TextFieldNomPrenomClient.getText(), + TextFieldCinClient.getText()); + + TableViewGestionDevis.setItems(ListDevisClts); + + totalcount = new DevisDB().nbrDevisCltGestion(TextFieldCodeDevis.getText(), TextFieldCodeClient.getText(), TypeRegement, DateCreation, TextFieldNomPrenomClient.getText(), TextFieldCinClient.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchDevisClt.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarDevisClt.setVisible(false); + ButtonSearchDevisClt.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchDevisClt.start(); + } + + + private void NextLastSearchDevisClt(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarDevisClt.setVisible(true); + + ButtonSearchDevisClt.setDisable(true); + + ThreadSearchDevisClt = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateCreation = ""; + if(DatePickerCreation.getValue() != null){ + DateCreation = DatePickerCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListDevisClts = new DevisDB().SearchDevisCltGestion(ParmPosition, ParamNbrligne, TextFieldCodeDevis.getText(), TextFieldCodeClient.getText(), TypeRegement, DateCreation, TextFieldNomPrenomClient.getText(), TextFieldCinClient.getText()); + + TableViewGestionDevis.setItems(ListDevisClts); + + return null; + } + }; + } + }; + + ThreadSearchDevisClt.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarDevisClt.setVisible(false); + ButtonSearchDevisClt.setDisable(false); + } + }); + ThreadSearchDevisClt.start(); + } + + private void GestionSearchDevisClt() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchDevisClt(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchDevisClt(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchDevisClt(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + +} diff --git a/src/main/java/Controllers/DevisClt/DevisCltPrintController.java b/src/main/java/Controllers/DevisClt/DevisCltPrintController.java new file mode 100644 index 0000000..bc1b736 --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisCltPrintController.java @@ -0,0 +1,240 @@ +package Controllers.DevisClt; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Models.DevisClt.Devis; +import Models.Produit.ListeProduit; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.beans.property.SimpleStringProperty; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.Control; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.text.Text; +import javafx.util.Callback; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class DevisCltPrintController implements Initializable { + + @FXML public ImageView ImageViewLogo; + + @FXML private Text TextSteNom1; + @FXML private Text TextReference; + @FXML private Text TextDate; + @FXML private Text TextEcheance; + @FXML private Text TextClient; + + @FXML private Text TextNumDevie; + @FXML private Text TextTotalHT; + @FXML private Text TextTVA; + @FXML private Text TextTotalTTC; + + @FXML private Text TextSteNom2; + @FXML private Text TextSteContact; + @FXML private Text TextSteSIREN; + + + @FXML private TableView TableViewProdDevis ; + @FXML private TableColumn TabColDevisReference; + @FXML private TableColumn TabColDevisDesignation; + @FXML private TableColumn TabColDevisQuantite ; + @FXML private TableColumn TabColDevisPrix; + @FXML private TableColumn TabColDevisMontant; + + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + setImageLogo(); + + TabColDevisReference.setCellValueFactory(new PropertyValueFactory("Reference")); + + TabColDevisDesignation.setCellValueFactory(new PropertyValueFactory("Description")); + TabColDevisDesignation.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if (item == null) { + super.setText(null); + super.setGraphic(null); + } else { + String newItem = item.trim().toLowerCase(); + Text text = new Text(newItem); + super.setPrefHeight(Control.USE_COMPUTED_SIZE); + text.wrappingWidthProperty().bind(super.widthProperty()); + super.setGraphic(text); + } + } + }; + return cell; + } + }); + + + TabColDevisQuantite.setCellValueFactory(new PropertyValueFactory("Quantite")); + TabColDevisQuantite.setStyle( "-fx-alignment: CENTER;"); + TabColDevisQuantite.getStyleClass().add("Center"); + + TabColDevisPrix.setCellValueFactory(new PropertyValueFactory("Prix")); + TabColDevisPrix.setStyle( "-fx-alignment: CENTER;"); + TabColDevisPrix.getStyleClass().add("Center"); + + TabColDevisMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + TabColDevisMontant.setStyle( "-fx-alignment: CENTER;"); + TabColDevisMontant.getStyleClass().add("Center"); + + + TextSteNom1.setText(ParametreSystem.CompanyName); + TextSteNom2.setText("Ste:"+ParametreSystem.CompanyName+" | Adress:"+ParametreSystem.CompanyAddress+" | Tele: "+ParametreSystem.CompanyTele); + TextSteContact.setText("Fax:"+ParametreSystem.CompanyFax+" | Mail:"+ParametreSystem.CompanyMail+" | Site:"+ParametreSystem.CompanySite); + TextSteSIREN.setText(ParametreSystem.CompanySIREN); + } + + public void SetDevis(Devis devis) + { + TextReference.setText(devis.getCodeDevis()); + TextDate.setText(Adaptateur.NormalDateFormat(devis.getDate())); + TextEcheance.setText(devis.getValidite()); + TextClient.setText(devis.getCodeClient()+" - "+devis.getNom()+" - "+devis.getPrenom()); + TextNumDevie.setText(devis.getCodeDevis()); + + ObservableList PodDevis = FXCollections.observableArrayList(); + + for(ListeProduit liste : devis.getListeproduit()){ + if(!liste.getReference().equals("")){ + float remise = Adaptateur.ArrondStringToFloat(liste.getRemise().replace("%", "")) ; + float prixht = Adaptateur.ArrondStringToFloat(liste.getPrixHT()) ; + float tva = Adaptateur.StringToFloat(liste.getTVA().replace("%", "")) ; + float qte = Adaptateur.StringToFloat(liste.getQuantite()) ; + + float totalht = (prixht - ((prixht * remise)/100)) ; + float prixttc = totalht + ((totalht * tva)/100) ; + + float montant = prixttc * qte; + + PodDevis.add(new ListProdDevis(liste.getReference(), liste.getDesignation(), liste.getQuantite(), Adaptateur.FloatToStringEspace(prixttc), Adaptateur.FloatToStringEspace(montant))); + } + } + + TextTVA.setText(Adaptateur.StringToStringEspaceCurrency(devis.getTotalTVA())); + TextTotalHT.setText(Adaptateur.StringToStringEspaceCurrency(devis.getTotalHorsTaxNet())); + TextTotalTTC.setText(Adaptateur.StringToStringEspaceCurrency(devis.getNetAPayer())); + + TableViewProdDevis.setItems(PodDevis); + } + + private void setImageLogo() + { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + try { + // optional, but recommended + // process XML securely, avoid attacks like XML External Entities (XXE) + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + + // parse XML file + DocumentBuilder db = dbf.newDocumentBuilder(); + + //PowerERP\conf\logo.xml + Document doc = db.parse(new File("./conf/logo.xml")); + + doc.getDocumentElement().normalize(); + + Element elementCNX = (Element) doc.getElementsByTagName("DevisCltPrint").item(0); + + String pathLogo = elementCNX.getElementsByTagName("PathImage").item(0).getTextContent(); + FileInputStream fis = new FileInputStream(pathLogo); + ImageViewLogo.setImage(new Image(fis)); + + ImageViewLogo.setFitWidth(Double.parseDouble(elementCNX.getElementsByTagName("FitWidth").item(0).getTextContent())); + ImageViewLogo.setFitHeight(Double.parseDouble(elementCNX.getElementsByTagName("FitHeight").item(0).getTextContent())); + ImageViewLogo.setLayoutX(Double.parseDouble(elementCNX.getElementsByTagName("LayoutX").item(0).getTextContent())); + ImageViewLogo.setLayoutY(Double.parseDouble(elementCNX.getElementsByTagName("LayoutY").item(0).getTextContent())); + } + catch (ParserConfigurationException | SAXException | IOException e) { + System.out.println("error AuthentificationController/setImageLogo "+e.getMessage()); + } + } + + public static class ListProdDevis { + + private final SimpleStringProperty Reference; + private final SimpleStringProperty Description; + private final SimpleStringProperty Quantite; + private final SimpleStringProperty Prix; + private final SimpleStringProperty Montant; + + private ListProdDevis(String reference, String description, String quantite, String prix, String montant) { + this.Reference = new SimpleStringProperty(reference); + this.Description = new SimpleStringProperty(description); + this.Quantite = new SimpleStringProperty(quantite); + this.Prix = new SimpleStringProperty(prix); + this.Montant = new SimpleStringProperty(montant); + } + + public String getReference() { + return Reference.get(); + } + + public void setReference(String reference) { + Reference.set(reference); + } + + public String getDescription() { + return Description.get(); + } + + public void setDescription(String description) { + Description.set(description); + } + + public String getQuantite() { + return Quantite.get(); + } + + public void setQuantite(String quantite) { + Quantite.set(quantite); + } + + public String getPrix() { + return Prix.get(); + } + + public void setPrix(String prix) { + Prix.set(prix); + } + + public String getMontant() { + return Montant.get(); + } + + public void setMontant(String montant) { + Montant.set(montant); + } + } +} diff --git a/src/main/java/Controllers/DevisClt/DevisDetailController.java b/src/main/java/Controllers/DevisClt/DevisDetailController.java new file mode 100644 index 0000000..04fb7bb --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisDetailController.java @@ -0,0 +1,174 @@ +package Controllers.DevisClt; + +import Models.Produit.ListeProduit; +import Controllers.Traitement.Adaptateur; +import Models.DevisClt.Devis; +import Models.DevisClt.DevisDB; +import Models.Fournisseur.FournisseurDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.print.PageRange; +import javafx.print.PrinterJob; +import javafx.scene.Node; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class DevisDetailController implements Initializable { + + @FXML public AnchorPane AnchorPaneSucces; + @FXML public AnchorPane AnchorPaneDevisDetail; + @FXML public AnchorPane AnchorPaneLoadingDevisDetail; + + @FXML public Text TextSucces; + @FXML public Text TextDescSucces; + + @FXML private Text DevisDateCreation; + @FXML private Text DevisFinValidite; + @FXML private Text DevisReglement; + @FXML private Text DevisNetAPayer; + @FXML private Text DevisTotalHorsTaxNet; + @FXML private Text DevisCode; + + @FXML private Text DevisTypeClt; + @FXML private Text DevisNom; + @FXML private Text DevisPrenom; + @FXML private Text DevisAdresse; + @FXML private Text DevisTELE1; + @FXML private Text DevisTELE2; + + @FXML private Text DevisTextPrenom ; + @FXML private Text DevisTextMatricule ; + + @FXML private TableView TableViewListeProduitDevis ; + @FXML private TableColumn TabColDevisReference; + @FXML private TableColumn TabColDevisDesignaton; + @FXML private TableColumn TabColDevisQuantite ; + @FXML private TableColumn TabColDevisPrixHT; + @FXML private TableColumn TabColDevisRemise; + @FXML private TableColumn TabColDevisTotalHT; + @FXML private TableColumn TabColDevisTVA; + @FXML private TableColumn TabColDevisTotalTTC; + + Devis devis = new Devis(); + + private Service ThreadDevisDetail; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TabColDevisReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDevisDesignaton.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColDevisQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColDevisQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDevisQuantite.getStyleClass().add("Center"); + + TabColDevisPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColDevisPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColDevisPrixHT.getStyleClass().add("Center"); + + TabColDevisRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColDevisRemise.setStyle( "-fx-alignment: CENTER;"); + TabColDevisRemise.getStyleClass().add("Center"); + + TabColDevisTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColDevisTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColDevisTotalHT.getStyleClass().add("Center"); + + TabColDevisTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColDevisTVA.setStyle( "-fx-alignment: CENTER;"); + TabColDevisTVA.getStyleClass().add("Center"); + + TabColDevisTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColDevisTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDevisTotalTTC.getStyleClass().add("Center"); + } + + public void SowDetailDevis(String codedevis) + { + ThreadDevisDetail = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + devis = new DevisDB().getDevis(codedevis); + + return null; + } + }; + } + }; + ThreadDevisDetail.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + DevisDateCreation.setText(Adaptateur.NormalDateFormat(devis.getDate())); + DevisFinValidite.setText(devis.getValidite()); + DevisReglement.setText(devis.getTypeRegementString()); + DevisTotalHorsTaxNet.setText(Adaptateur.StringToStringEspace(devis.getTotalHorsTaxNet())); + DevisCode.setText(codedevis); + DevisTypeClt.setText(devis.getTypeClientString()); + DevisNom.setText(devis.getNom()); + + if(devis.getTypeClient()==0 || devis.getTypeClient()==2){ + DevisTextPrenom.setVisible(true); + DevisTextMatricule.setVisible(false); + DevisPrenom.setText(devis.getPrenom()); + } + if(devis.getTypeClient()==1){ + DevisTextPrenom.setVisible(false); + DevisTextMatricule.setVisible(true); + DevisPrenom.setText(devis.getMatricule()); + } + + DevisAdresse.setText(devis.getAdresse()); + DevisTELE1.setText(devis.getTele1()); + DevisTELE2.setText(devis.getTele2()); + DevisNetAPayer.setText(Adaptateur.StringToStringEspaceCurrency(devis.getNetAPayer())); + + TableViewListeProduitDevis.setItems(devis.getListeproduit()); + AnchorPaneDevisDetail.setVisible(true); + AnchorPaneLoadingDevisDetail.setVisible(false); + } + }); + ThreadDevisDetail.start(); + } + + @FXML + private void DevisPrintButtonAction(ActionEvent event) throws IOException { + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + jobPrint.getJobSettings().setPageRanges(new PageRange(1, 1)); + + if (jobPrint.showPrintDialog(null)) { + + FXMLLoader fxmlLoaderPrintDevis = new FXMLLoader(getClass().getResource("/Views/Devis/DevisCltPrint.fxml")); + final Node ParentFxmlPrintDevis = (Node)fxmlLoaderPrintDevis.load(); + DevisCltPrintController PrintDevis = fxmlLoaderPrintDevis.getController(); + + PrintDevis.SetDevis(devis); + + jobPrint.printPage(ParentFxmlPrintDevis); + + jobPrint.endJob(); + } + + } + +} diff --git a/src/main/java/Controllers/DevisClt/DevisDialogConfirmationController.java b/src/main/java/Controllers/DevisClt/DevisDialogConfirmationController.java new file mode 100644 index 0000000..d5d6b4a --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisDialogConfirmationController.java @@ -0,0 +1,167 @@ +/* + * 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 Controllers.DevisClt; + +import Models.Produit.ListeProduit; +import Controllers.Traitement.MyWindow; +import Models.DevisClt.Devis; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; + +/** + * FXML Controller class + * + * @author PC-Maher + */ +public class DevisDialogConfirmationController implements Initializable { + + /** + * Initializes the controller class. + */ + public Node nodeFxml ; + + @FXML public AnchorPane AnchorPrincipal ; + @FXML public Button DevisEnregister ; + @FXML private Text DevisDateCreation; + @FXML private Text DevisFinValidite; + @FXML private Text DevisReglement; + @FXML private Text DevisNetAPayer; + @FXML private Text DevisTotalHorsTaxNet; + @FXML private Text DevisTotalTVA; + + @FXML private Text DevisTypeClt; + @FXML private Text DevisNom; + @FXML private Text DevisPrenom; + @FXML private Text DevisAdresse; + @FXML private Text DevisTELE1; + @FXML private Text DevisTELE2; + + @FXML private Text DevisTextPrenom ; + @FXML private Text DevisTextMatricule ; + + @FXML public TableView TableViewListeProduitDevis ; + @FXML public TableColumn TabColDevisReference; + @FXML public TableColumn TabColDevisDesignaton; + @FXML public TableColumn TabColDevisQuantite ; + @FXML public TableColumn TabColDevisPrixHT; + @FXML public TableColumn TabColDevisRemise; + @FXML public TableColumn TabColDevisTotalHT; + @FXML public TableColumn TabColDevisTVA; + @FXML public TableColumn TabColDevisTotalTTC; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TabColDevisReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDevisDesignaton.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColDevisQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColDevisQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDevisQuantite.getStyleClass().add("Center"); + + TabColDevisPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColDevisPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColDevisPrixHT.getStyleClass().add("Center"); + + TabColDevisRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColDevisRemise.setStyle( "-fx-alignment: CENTER;"); + TabColDevisRemise.getStyleClass().add("Center"); + + TabColDevisTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColDevisTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColDevisTotalHT.getStyleClass().add("Center"); + + TabColDevisTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColDevisTVA.setStyle( "-fx-alignment: CENTER;"); + TabColDevisTVA.getStyleClass().add("Center"); + + TabColDevisTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColDevisTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDevisTotalTTC.getStyleClass().add("Center"); + + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconsave.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + DevisEnregister.setGraphic(buttonGraphic); + } + + public void Getdevis(Devis devis){ + DevisDateCreation.setText(devis.getDate()); + DevisFinValidite.setText(devis.getValidite()); + DevisReglement.setText(devis.getTypeRegement()); + + DevisNetAPayer.setText(devis.getNetAPayer()); + DevisTotalHorsTaxNet.setText(devis.getTotalHorsTaxNet()); + DevisTotalTVA.setText(devis.getTotalTVA()); + + + DevisTypeClt.setText(devis.getTypeClientString()); + DevisNom.setText(devis.getNom()); + DevisPrenom.setText(devis.getPrenom()); + if(DevisAjouterController.TypeClient == 1){ + DevisTextPrenom.setVisible(false); + DevisTextMatricule.setVisible(true); + DevisPrenom.setText(devis.getMatricule()); + } + DevisAdresse.setText(devis.getAdresse()); + DevisTELE1.setText(devis.getTele1()); + DevisTELE2.setText(devis.getTele2()); + + TableViewListeProduitDevis.setItems(devis.getListeproduit()); + } + + + public DevisDialogConfirmationController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Devis/DevisDialogConfirmation.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(DevisDialogConfirmationController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + + @FXML + private void ExitButtonAction(ActionEvent event) throws IOException { + AnchorPrincipal.setVisible(false); + } + +} diff --git a/src/main/java/Controllers/DevisClt/DevisImporterController.java b/src/main/java/Controllers/DevisClt/DevisImporterController.java new file mode 100644 index 0000000..27c6ea2 --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisImporterController.java @@ -0,0 +1,396 @@ +package Controllers.DevisClt; + +import Controllers.Traitement.MyWindow; +import Models.DevisClt.DevisCltListe; +import Models.DevisClt.DevisDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; + + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class DevisImporterController implements Initializable { + + @FXML private AnchorPane anchorpane ; + + @FXML private ProgressBar ProgressBarDevisClt; + + @FXML private Button ButtonSearchDevisClt; + + @FXML public TableView TableViewGestionDevis; + + @FXML public TableColumn TabColCodeDevis; + @FXML public TableColumn TabColModePaiement; + @FXML public TableColumn TabColTypeClient; + @FXML public TableColumn TabColCodeClient; + @FXML public TableColumn TabColTotalDevis; + @FXML public TableColumn TabColDateCreation ; + @FXML public TableColumn TabColDateFinValidite; + @FXML public TableColumnTabColDetail ; + + @FXML public TextField TextFieldCodeDevis ; + @FXML public TextField TextFieldCodeClient ; + @FXML public DatePicker DatePickerCreation ; + @FXML public TextField TextFieldNomPrenomClient ; + @FXML public TextField TextFieldCinClient; + @FXML public RadioButton RadioComptant; + @FXML public RadioButton RadioFacilite; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + public Node node; + + private Service ThreadSearchDevisCltRechercher; + + public DevisImporterController() { + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Devis/DevisImporter.fxml")); + fxmlLoader.setController(this); + node = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(DevisImporterController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(node); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + + + @Override + public void initialize(URL url, ResourceBundle rb) { + + //comboboxnombre des lignes tableview + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TableViewGestionDevis.setEditable(true); + + TabColCodeDevis.setStyle( "-fx-alignment: CENTER;");TabColCodeDevis.getStyleClass().add("Center"); + TabColCodeDevis.setCellValueFactory(new PropertyValueFactory("CodeDevis")); + + TabColTypeClient.setStyle( "-fx-alignment: CENTER;");TabColTypeClient.getStyleClass().add("Center"); + TabColTypeClient.setCellValueFactory(new PropertyValueFactory("TypeClient")); + + TabColCodeClient.setStyle( "-fx-alignment: CENTER;");TabColCodeClient.getStyleClass().add("Center"); + TabColCodeClient.setCellValueFactory(new PropertyValueFactory("CodeClient")); + + TabColModePaiement.setStyle( "-fx-alignment: CENTER;");TabColModePaiement.getStyleClass().add("Center"); + TabColModePaiement.setCellValueFactory(new PropertyValueFactory("ModePaiement")); + + TabColTotalDevis.setStyle( "-fx-alignment: CENTER;");TabColTotalDevis.getStyleClass().add("Center"); + TabColTotalDevis.setCellValueFactory(new PropertyValueFactory("TotalDevis")); + + TabColDateCreation.setStyle( "-fx-alignment: CENTER;");TabColDateCreation.getStyleClass().add("Center"); + TabColDateCreation.setCellValueFactory(new PropertyValueFactory("DateCreation")); + + TabColDateFinValidite.setStyle( "-fx-alignment: CENTER;");TabColDateFinValidite.getStyleClass().add("Center"); + TabColDateFinValidite.setCellValueFactory(new PropertyValueFactory("FinValidite")); + + TabColDetail.setSortable(true); + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + + ButtonSearchDevisClt.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchDevisClt(); + } + }); + + anchorpane.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchDevisClt(); + } + } + }); + + GestionSearchDevisClt(); + } + + @FXML + private void QuiterButtonAction(ActionEvent event) throws IOException { + anchorpane.setVisible(false); + } + + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchDevisClt() + { + ProgressBarDevisClt.setVisible(true); + + ButtonSearchDevisClt.setDisable(true); + + ThreadSearchDevisCltRechercher = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateCreation = ""; + if(DatePickerCreation.getValue() != null){ + DateCreation = DatePickerCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListDevisClts = new DevisDB().SearchDevisCltGestion( + position, + nbrligne, + TextFieldCodeDevis.getText(), + TextFieldCodeClient.getText(), + TypeRegement, + DateCreation, + TextFieldNomPrenomClient.getText(), + TextFieldCinClient.getText()); + + TableViewGestionDevis.setItems(ListDevisClts); + + totalcount = new DevisDB().nbrDevisCltGestion(TextFieldCodeDevis.getText(), TextFieldCodeClient.getText(), TypeRegement, DateCreation, TextFieldNomPrenomClient.getText(), TextFieldCinClient.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchDevisCltRechercher.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarDevisClt.setVisible(false); + ButtonSearchDevisClt.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchDevisCltRechercher.start(); + } + + + private void NextLastSearchDevisClt(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarDevisClt.setVisible(true); + + ButtonSearchDevisClt.setDisable(true); + + ThreadSearchDevisCltRechercher = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateCreation = ""; + if(DatePickerCreation.getValue() != null){ + DateCreation = DatePickerCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListDevisClts = new DevisDB().SearchDevisCltGestion(ParmPosition, ParamNbrligne, TextFieldCodeDevis.getText(), TextFieldCodeClient.getText(), TypeRegement, DateCreation, TextFieldNomPrenomClient.getText(), TextFieldCinClient.getText()); + + TableViewGestionDevis.setItems(ListDevisClts); + + return null; + } + }; + } + }; + + ThreadSearchDevisCltRechercher.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarDevisClt.setVisible(false); + ButtonSearchDevisClt.setDisable(false); + } + }); + ThreadSearchDevisCltRechercher.start(); + } + + private void GestionSearchDevisClt() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchDevisClt(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchDevisClt(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchDevisClt(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + + + + +} diff --git a/src/main/java/Controllers/DevisClt/ListProduitDevis.java b/src/main/java/Controllers/DevisClt/ListProduitDevis.java new file mode 100644 index 0000000..2f561dd --- /dev/null +++ b/src/main/java/Controllers/DevisClt/ListProduitDevis.java @@ -0,0 +1,118 @@ +/* + * 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 Controllers.DevisClt; + +import Controllers.Traitement.Adaptateur; +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author PC-Maher + */ +public class ListProduitDevis { + + + private final SimpleStringProperty reference; + private final SimpleStringProperty designaton; + private final SimpleStringProperty quantite; + private final SimpleStringProperty PrixHT; + private final SimpleStringProperty Remise; + private final SimpleStringProperty TotalHT; + private final SimpleStringProperty TVA; + private final SimpleStringProperty TotalTTC; + + public ListProduitDevis(String reference, String designaton, String quantite, String PrixHT, String Remise, String TotalHT, String TVA, String TotalTTC) { + + if(!reference.isEmpty()){ + + float remise = Adaptateur.ArrondStringToFloat(Remise.replace("%", "")) ; + float prixht = Adaptateur.ArrondStringToFloat(PrixHT) ; + float tva = Adaptateur.StringToFloat(TVA) ; + float qte = Adaptateur.StringToFloat(quantite) ; + float totalht = (prixht - ((prixht * remise)/100))* qte ; + float totalttc = totalht + ((totalht * tva)/100) ; + if(!Remise.contains("%")){ Remise=Remise+"%"; } + if(!TVA.contains("%")){ TVA=TVA+"%"; } + TotalHT = Adaptateur.ArrondFloatToString(totalht); + TotalTTC= Adaptateur.ArrondFloatToString(totalttc); + } + + + this.reference = new SimpleStringProperty(reference); + this.designaton = new SimpleStringProperty(designaton); + this.quantite = new SimpleStringProperty(quantite); + this.PrixHT = new SimpleStringProperty(PrixHT); + this.Remise = new SimpleStringProperty(Remise); + this.TotalHT = new SimpleStringProperty(TotalHT); + this.TVA = new SimpleStringProperty(TVA); + this.TotalTTC = new SimpleStringProperty(TotalTTC); + } + + + + public String getReference() { + return reference.get(); + } + + public void setReference(String Reference) { + reference.set(Reference); + } + + public String getDesignaton() { + return designaton.get(); + } + + public void setDesignaton(String Designaton) { + designaton.set(Designaton); + } + + public String getQuantite() { + return quantite.get(); + } + public void setQuantite(String Quantite) { + quantite.set(Quantite); + } + + public String getPrixHT() { + return PrixHT.get(); + + } + public void setPrixHT(String prixHT) { + PrixHT.set(prixHT); + } + + public String getRemise() { + return Remise.get(); + } + public void setRemise(String remise) { + Remise.set(remise); + } + + public String getTotalHT() { + return TotalHT.get(); + + } + public void setTotalHT(String totalHT) { + TotalHT.set(totalHT); + } + + public String getTVA() { + return TVA.get(); + + } + public void setTVA(String tva) { + TVA.set(tva); + } + + public String getTotalTTC() { + return TotalTTC.get(); + } + + public void setTotalTTC(String totalTTC) { + TotalTTC.set(totalTTC); + } + +} diff --git a/src/main/java/Controllers/Dialog/Dialog.java b/src/main/java/Controllers/Dialog/Dialog.java new file mode 100644 index 0000000..84ccf60 --- /dev/null +++ b/src/main/java/Controllers/Dialog/Dialog.java @@ -0,0 +1,87 @@ +/* + * 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 Controllers.Dialog; + +import Controllers.Traitement.MyWindow; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; + +import javafx.stage.Stage; + +/** + * + * @author Maher + */ +public class Dialog { + + public double Height = MyWindow.myStage.getHeight() ; + public double Width = MyWindow.myStage.getWidth() ; + + @FXML public Text Titre; + @FXML public Text Message; + @FXML public Button Valider; + @FXML public Button Annuler; + @FXML public AnchorPane PaneDialog; + + + public Node DialogNotification() throws IOException{ + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Dialog/DialogNotification.fxml")); + fxmlLoader.setController(this); + Node node = (Node)fxmlLoader.load(); + return node; + } + + public Node DialogAlert() { + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Dialog/DialogAlert.fxml")); + fxmlLoader.setController(this); + Node node; + node = (Node)fxmlLoader.load(); + return node; + } catch (IOException ex) { + Logger.getLogger(Dialog.class.getName()).log(Level.SEVERE, null, ex); + } + return null; + } + + public void DefaultAnnuler(){ + Annuler.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + PaneDialog.setVisible(false); + } + }); + } + + + public void Show(Node node) + { + StackPane Sp = new StackPane(); + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(node); + + Scene scene = new Scene(Sp); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + + +} diff --git a/src/main/java/Controllers/Dialog/DialogSuccessController.java b/src/main/java/Controllers/Dialog/DialogSuccessController.java new file mode 100644 index 0000000..5f698b7 --- /dev/null +++ b/src/main/java/Controllers/Dialog/DialogSuccessController.java @@ -0,0 +1,62 @@ +/* + * 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 Controllers.Dialog; + +import Controllers.Traitement.MyWindow; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class DialogSuccessController { + + public Node nodeFxml ; + + @FXML public Button Valider; + @FXML public Text Message; + @FXML public AnchorPane PaneDialog; + + + public DialogSuccessController() { + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Dialog/DialogSuccess.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(DialogSuccessController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + +} diff --git a/src/main/java/Controllers/Dialog/MessageControle.java b/src/main/java/Controllers/Dialog/MessageControle.java new file mode 100644 index 0000000..7c2468b --- /dev/null +++ b/src/main/java/Controllers/Dialog/MessageControle.java @@ -0,0 +1,123 @@ +/* + * 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 Controllers.Dialog; + +import Controllers.Traitement.MyWindow; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.Pane; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.scene.text.TextFlow; +import javafx.stage.Stage; + +/** + * + * @author Maher + */ +public class MessageControle { + + public double Height = MyWindow.myStage.getHeight() ; + public double Width = MyWindow.myStage.getWidth() ; + public Button bouttonNo = new Button(); + public Button bouttonOK = new Button(); + public Text titre = new Text(); + public TextFlow DetailMSG = new TextFlow(); + public Text titreMSG = new Text(); + public Text detail = new Text(); + public StackPane stackpane = new StackPane(); + + + public Node Setnotification(){ + + + Group group = new Group(); + + AnchorPane Ap = new AnchorPane(); + Ap.setStyle("-fx-background-color: rgba(0,0,0,0.6);"); + + Pane pa1 = new Pane(); + pa1.setStyle("-fx-background-color:#ffffff; -fx-border-color: #212121; -fx-border-radius: 10 10 0 0; -fx-background-radius: 10 10 0 0;"); + pa1.setPrefHeight(200); + pa1.setPrefWidth(497); + + Pane pa2 = new Pane(); + pa2.setStyle("-fx-background-color:linear-gradient(to bottom, #585858, #333333); -fx-background-radius: 10 10 0 0;"); + pa2.setPrefHeight(30); + pa2.setPrefWidth(497); + + Pane pa3 = new Pane(); + pa3.setStyle("-fx-background-color:linear-gradient(to bottom, #E2E2E2, #EDEDED); -fx-border-color: #B4B4B4;"); + pa3.setLayoutY(30); + pa3.setPrefHeight(100); + pa3.setPrefWidth(497); + + titre.setText("Alert Dialog"); + titre.setFont(Font.font("System", FontWeight.BOLD, 13)); + titre.setFill(Color.web("#ffffff")); + titre.setLayoutX(17); + titre.setLayoutY(22); + + Image imgicon = new Image(getClass().getResourceAsStream("/Public/icon/iconalert.png")); + ImageView icon = new ImageView(imgicon); + icon.setLayoutX(410); + icon.setLayoutY(50); + icon.setFitWidth(64); + icon.setFitHeight(64); + + + DetailMSG.setPrefHeight(120); + DetailMSG.setPrefWidth(400); + DetailMSG.setLayoutX(20); + DetailMSG.setLayoutY(60); + + + bouttonOK.setText("Ok"); + bouttonOK.setFont(Font.font ("System", FontWeight.BOLD, 12)); + bouttonOK.setPrefWidth(73); + bouttonOK.setPrefHeight(30); + bouttonOK.setLayoutX(210); + bouttonOK.setLayoutY(150); + + group.getChildren().addAll(pa1, pa2, pa3, titre, icon, DetailMSG, bouttonOK); + + stackpane.setVisible(true); + stackpane.getChildren().add(Ap); + stackpane.getChildren().add(group); + + return stackpane; + + } + + public void ShowNotification() + { + Node node = this.Setnotification(); + + StackPane Sp = new StackPane(); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(node); + + Scene scene = new Scene(Sp); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + +} diff --git a/src/main/java/Controllers/Dialog/Notification.java b/src/main/java/Controllers/Dialog/Notification.java new file mode 100644 index 0000000..5139ac5 --- /dev/null +++ b/src/main/java/Controllers/Dialog/Notification.java @@ -0,0 +1,125 @@ +/* + * 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 Controllers.Dialog; + +import Controllers.Traitement.MyWindow; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.Pane; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.scene.text.TextFlow; +import javafx.stage.Stage; + +/** + * + * @author PC-Maher + */ +public class Notification { + public double Height = MyWindow.myStage.getHeight() ; + public double Width = MyWindow.myStage.getWidth() ; + public Button bouttonNo = new Button(); + public Button bouttonOK = new Button(); + public Text titre = new Text(); + public TextFlow DetailMSG = new TextFlow(); + public Text titreMSG = new Text(); + public Text detail = new Text(); + public StackPane stackpane = new StackPane(); + + + + public Node Setnotification(){ + + Group group = new Group(); + + AnchorPane Ap = new AnchorPane(); + Ap.setStyle("-fx-background-color: rgba(0,0,0,0.6);"); + + Pane pa1 = new Pane(); + pa1.setStyle("-fx-background-color:#ffffff; -fx-border-color: #212121; -fx-border-radius: 10 10 0 0; -fx-background-radius: 10 10 0 0;"); + pa1.setPrefHeight(200); + pa1.setPrefWidth(497); + + Pane pa2 = new Pane(); + pa2.setStyle("-fx-background-color:linear-gradient(to bottom, #585858, #333333); -fx-background-radius: 10 10 0 0;"); + pa2.setPrefHeight(30); + pa2.setPrefWidth(497); + + titre.setText("Dialog de notification"); + titre.setFont(Font.font("System", FontWeight.BOLD, 13)); + titre.setFill(Color.web("#ffffff")); + titre.setLayoutX(17); + titre.setLayoutY(22); + + Image imgicon = new Image(getClass().getResourceAsStream("/Public/icon/dialoginform.png")); + ImageView icon = new ImageView(imgicon); + icon.setLayoutX(20); + icon.setLayoutY(60); + icon.setFitWidth(46); + icon.setFitHeight(50); + + DetailMSG.setPrefHeight(120); + DetailMSG.setPrefWidth(400); + DetailMSG.setLayoutX(80); + DetailMSG.setLayoutY(55); + + bouttonOK.setText("Valider"); + bouttonOK.setFont(Font.font ("System", FontWeight.BOLD, 12)); + bouttonOK.setStyle("{-fx-background-color:#EFEFEF; -fx-border-color: #959595; -fx-border-radius: 5 5 5 5;} hover:{-fx-background-color:#E6E6E6;}"); + bouttonOK.setPrefWidth(73); + bouttonOK.setPrefHeight(30); + bouttonOK.setLayoutX(320); + bouttonOK.setLayoutY(160); + + bouttonNo.setText("Annuler"); + bouttonNo.setFont(Font.font ("System", FontWeight.BOLD, 12)); + bouttonNo.setStyle("{-fx-background-color:#EFEFEF; -fx-border-color: #959595; -fx-border-radius: 5 5 5 5;} hover:{-fx-background-color:#E6E6E6;}"); + bouttonNo.setPrefWidth(73); + bouttonNo.setPrefHeight(30); + bouttonNo.setLayoutX(410); + bouttonNo.setLayoutY(160); + bouttonNo.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + stackpane.setVisible(false); + } + }); + + group.getChildren().addAll(pa1, pa2, titre, icon, DetailMSG, bouttonOK, bouttonNo); + + stackpane.setVisible(true); + stackpane.getChildren().add(Ap); + stackpane.getChildren().add(group); + + return stackpane; + } + + public void ShowNotification() + { + Node node = this.Setnotification(); + + StackPane Sp = new StackPane(); + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(node); + + Scene scene = new Scene(Sp); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } +} diff --git a/src/main/java/Controllers/Dialog/ShowDialog.java b/src/main/java/Controllers/Dialog/ShowDialog.java new file mode 100644 index 0000000..6bf1159 --- /dev/null +++ b/src/main/java/Controllers/Dialog/ShowDialog.java @@ -0,0 +1,306 @@ +/* + * 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 Controllers.Dialog; + +import Controllers.Traitement.MyWindow; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.Pane; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.scene.text.TextFlow; +import javafx.stage.Stage; + +/** + * + * @author Maher + */ +public class ShowDialog{ + + public static String titre ; + public static String detail ; + + public static String getTitre() { + return titre; + } + + public static String getDetail() { + return detail; + } + + public static void setTitre(String titre) { + ShowDialog.titre = titre; + } + + public static void setDetail(String detail) { + ShowDialog.detail = detail; + } + + + public Node DialogAlert(String MsgTitre, String MsgDetail){ + + final StackPane stackpane = new StackPane(); + Group group = new Group(); + + AnchorPane Ap = new AnchorPane(); + Ap.setStyle("-fx-background-color: rgba(0,0,0,0.6);"); + Ap.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler() { + @Override + public void handle(MouseEvent mouseEvent) { + System.out.println("mouse click detected! "); + } + }); + + + Pane pa1 = new Pane(); + pa1.setStyle("-fx-background-color:#ffffff; -fx-border-color: #212121; -fx-border-radius: 10 10 0 0; -fx-background-radius: 10 10 0 0;"); + pa1.setPrefHeight(231); + pa1.setPrefWidth(497); + + Pane pa2 = new Pane(); + pa2.setStyle("-fx-background-color:linear-gradient(to bottom, #585858, #333333); -fx-background-radius: 10 10 0 0;"); + pa2.setPrefHeight(36); + pa2.setPrefWidth(497); + + Text titre = new Text(); + titre.setText("Exception Dialog"); + titre.setFont(Font.font("System", FontWeight.BOLD, 13)); + titre.setFill(Color.web("#ffffff")); + titre.setLayoutX(17); + titre.setLayoutY(22); + + Pane pa3 = new Pane(); + pa3.setStyle("-fx-background-color:linear-gradient(to bottom, #E2E2E2, #EDEDED); -fx-border-color: #B4B4B4;"); + pa3.setLayoutY(36); + pa3.setPrefHeight(48); + pa3.setPrefWidth(497); + + //Image imgicon = new Image(getClass().getResourceAsStream("/Public/icon/dialoginform.png")); + //ImageView icon = new ImageView(imgicon); + Image image = new Image(getClass().getResourceAsStream("/Public/icon/dialog_error.png")); + ImageView icon = new ImageView(image); + icon.setLayoutX(440); + icon.setLayoutY(40); + icon.setFitWidth(38); + icon.setFitHeight(38); + + Text titreMSG = new Text(); + titreMSG.setText(MsgTitre); + titreMSG.setFont(Font.font("System", FontWeight.NORMAL, 13)); + titreMSG.setFill(Color.web("#000000")); + titreMSG.setLayoutX(27); + titreMSG.setLayoutY(65); + + Text detail = new Text(); + detail.setText(MsgDetail); + detail.setFont(Font.font("System", FontWeight.NORMAL, 12)); + detail.setFill(Color.web("#000000")); + TextFlow DetailMSG = new TextFlow(detail); + DetailMSG.setPrefHeight(92); + DetailMSG.setPrefWidth(344); + DetailMSG.setLayoutX(28); + DetailMSG.setLayoutY(95); + + + Button boutton = new Button(); + boutton.setText("Valider"); + boutton.setFont(Font.font ("System", FontWeight.BOLD, 12)); + boutton.setStyle("{-fx-background-color:#EFEFEF; -fx-border-color: #959595; -fx-border-radius: 5 5 5 5;} hover:{-fx-background-color:#E6E6E6;}"); + boutton.setPrefWidth(84); + boutton.setPrefHeight(31); + boutton.setLayoutX(388); + boutton.setLayoutY(186); + boutton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + stackpane.setVisible(false); + } + }); + + + group.getChildren().addAll(pa1, pa2, titre, pa3, titreMSG, icon, DetailMSG, boutton); + + + + + stackpane.getChildren().add(Ap); + stackpane.getChildren().add(group); + + + + + return stackpane ; + } + + + public Node DialogNotification(String MsgTitre, String MsgDetail){ + + final StackPane stackpane = new StackPane(); + Group group = new Group(); + + AnchorPane Ap = new AnchorPane(); + Ap.setStyle("-fx-background-color: rgba(0,0,0,0.6);"); + Ap.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler() { + @Override + public void handle(MouseEvent mouseEvent) { + System.out.println("mouse click detected! "); + } + }); + + + Pane pa1 = new Pane(); + pa1.setStyle("-fx-background-color:#ffffff; -fx-border-color: #212121; -fx-border-radius: 10 10 0 0; -fx-background-radius: 10 10 0 0;"); + pa1.setPrefHeight(231); + pa1.setPrefWidth(497); + + Pane pa2 = new Pane(); + pa2.setStyle("-fx-background-color:linear-gradient(to bottom, #585858, #333333); -fx-background-radius: 10 10 0 0;"); + pa2.setPrefHeight(36); + pa2.setPrefWidth(497); + + Text titre = new Text(); + titre.setText("Dialog de notification"); + titre.setFont(Font.font("System", FontWeight.BOLD, 13)); + titre.setFill(Color.web("#ffffff")); + titre.setLayoutX(17); + titre.setLayoutY(22); + + Pane pa3 = new Pane(); + pa3.setStyle("-fx-background-color:linear-gradient(to bottom, #E2E2E2, #EDEDED); -fx-border-color: #B4B4B4;"); + pa3.setLayoutY(36); + pa3.setPrefHeight(48); + pa3.setPrefWidth(497); + + Image image = new Image(getClass().getResourceAsStream("/Public/icon/dialog_notification.png")); + ImageView icon = new ImageView(image); + icon.setLayoutX(440); + icon.setLayoutY(40); + icon.setFitWidth(40); + icon.setFitHeight(40); + + Text titreMSG = new Text(); + titreMSG.setText(MsgTitre); + titreMSG.setFont(Font.font("System", FontWeight.NORMAL, 16)); + titreMSG.setFill(Color.web("#000000")); + titreMSG.setLayoutX(27); + titreMSG.setLayoutY(65); + + Text detail = new Text(); + detail.setText(MsgDetail); + detail.setFont(Font.font("System", FontWeight.NORMAL, 15)); + detail.setFill(Color.web("#000000")); + TextFlow DetailMSG = new TextFlow(detail); + DetailMSG.setPrefHeight(92); + DetailMSG.setPrefWidth(344); + DetailMSG.setLayoutX(28); + DetailMSG.setLayoutY(95); + + + + Button bouttonOK = new Button(); + bouttonOK.setText("Valider"); + bouttonOK.setFont(Font.font ("System", FontWeight.BOLD, 12)); + bouttonOK.setStyle("{-fx-background-color:#EFEFEF; -fx-border-color: #959595; -fx-border-radius: 5 5 5 5;} hover:{-fx-background-color:#E6E6E6;}"); + bouttonOK.setPrefWidth(73); + bouttonOK.setPrefHeight(28); + bouttonOK.setLayoutX(300); + bouttonOK.setLayoutY(186); + bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + stackpane.setVisible(false); + } + }); + + + Button bouttonNo = new Button(); + bouttonNo.setText("Annuler"); + bouttonNo.setFont(Font.font ("System", FontWeight.BOLD, 12)); + bouttonNo.setStyle("{-fx-background-color:#EFEFEF; -fx-border-color: #959595; -fx-border-radius: 5 5 5 5;} hover:{-fx-background-color:#E6E6E6;}"); + bouttonNo.setPrefWidth(73); + bouttonNo.setPrefHeight(28); + bouttonNo.setLayoutX(400); + bouttonNo.setLayoutY(186); + bouttonNo.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + stackpane.setVisible(false); + } + }); + + group.getChildren().addAll(pa1, pa2, titre, pa3, titreMSG, icon, DetailMSG, bouttonOK, bouttonNo); + + + + + stackpane.getChildren().add(Ap); + stackpane.getChildren().add(group); + + + + + return stackpane ; + } + + public void ShowAletDialog() + { + Node node = DialogAlert(titre, detail); + + StackPane Sp = new StackPane(); + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(node); + + Scene scene = new Scene(Sp); + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + + public void ShowNotificationDialog(String Titre, String Detail) + { + Node node = DialogNotification(Titre, Detail); + + StackPane Sp = new StackPane(); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(node); + + Scene scene = new Scene(Sp); + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + + public void Show(Node node) + { + StackPane Sp = new StackPane(); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(node); + + Scene scene = new Scene(Sp); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } +} diff --git a/src/main/java/Controllers/FactureClt/FactureCltAjouterController.java b/src/main/java/Controllers/FactureClt/FactureCltAjouterController.java new file mode 100644 index 0000000..2d455aa --- /dev/null +++ b/src/main/java/Controllers/FactureClt/FactureCltAjouterController.java @@ -0,0 +1,416 @@ +package Controllers.FactureClt; + + +import Models.CommandeClt.CommandeCltDB; +import Models.CommandeClt.CommandeCltListe; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class FactureCltAjouterController implements Initializable { + + @FXML private AnchorPane PaneFactCltAjouter ; + + @FXML private ProgressBar ProgressBarFactureCltCommande; + + @FXML private Button ButtonSearchFactureCltCommande ; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount; + @FXML private ChoiceBox NbrLigne ; + + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0 ; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + @FXML public TableView TableViewGestionCommande; + + @FXML public TableColumn TabColCodeCommande; + @FXML public TableColumn TabColModePaiement; + @FXML public TableColumn TabColTypeClient; + @FXML public TableColumn TabColCodeClient; + @FXML public TableColumn TabColTotalCommande; + @FXML public TableColumn TabColDateCreation ; + @FXML public TableColumnTabColAction ; + + @FXML public TextField TextFieldCodeCommande; + @FXML public TextField TextFieldCodeClient; + @FXML public TextField TextFieldNameClient; + @FXML public TextField TextFieldCodeDevis; + @FXML public DatePicker DatePickerCreation; + @FXML public RadioButton RadioComptant; + @FXML public RadioButton RadioFacilite; + + private Service ThreadSearchFactureCltCommande; + + @Override + public void initialize(URL url, ResourceBundle rb) { + //comboboxnombre des lignes tableview + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TableViewGestionCommande.setEditable(true); + + TabColCodeCommande.setStyle( "-fx-alignment: CENTER;");TabColCodeCommande.getStyleClass().add("Center"); + TabColCodeCommande.setCellValueFactory(new PropertyValueFactory("CodeCommande")); + + TabColTypeClient.setStyle( "-fx-alignment: CENTER;");TabColTypeClient.getStyleClass().add("Center"); + TabColTypeClient.setCellValueFactory(new PropertyValueFactory("TypeClient")); + + TabColCodeClient.setStyle( "-fx-alignment: CENTER;");TabColCodeClient.getStyleClass().add("Center"); + TabColCodeClient.setCellValueFactory(new PropertyValueFactory("CodeClient")); + + TabColModePaiement.setStyle( "-fx-alignment: CENTER;");TabColModePaiement.getStyleClass().add("Center"); + TabColModePaiement.setCellValueFactory(new PropertyValueFactory("ModePaiement")); + + TabColTotalCommande.setStyle( "-fx-alignment: CENTER;");TabColTotalCommande.getStyleClass().add("Center"); + TabColTotalCommande.setCellValueFactory(new PropertyValueFactory("TotalCommande")); + + TabColDateCreation.setStyle( "-fx-alignment: CENTER;");TabColDateCreation.getStyleClass().add("Center"); + TabColDateCreation.setCellValueFactory(new PropertyValueFactory("DateCreation")); + + TabColAction.setSortable(true); + TabColAction.setStyle( "-fx-alignment: CENTER;");TabColAction.getStyleClass().add("Center"); + TabColAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + ButtonSearchFactureCltCommande.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchFactureCltCommande(); + } + }); + + PaneFactCltAjouter.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchFactureCltCommande(); + } + } + }); + + RadioComptant.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchFactureCltCommande(); + } + }); + + RadioFacilite.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchFactureCltCommande(); + } + }); + + GestionSearchFactureCltCommande(); + + } + + + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconedit.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + try { + // get Selected Item + CommandeCltListe current = (CommandeCltListe) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + String codeCommande = current.getCodeCommande(); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureClt/FactureCltAjouterDetailSelect.fxml")); + Parent NodeDetailSelect = (Parent)fxmlLoader.load(); + FactureCltAjouterDetailSelectController FactureCltAjouterDetailSelect = fxmlLoader.getController(); + FactureCltAjouterDetailSelect.setDataCommande(codeCommande); + PaneFactCltAjouter.getChildren().clear(); + PaneFactCltAjouter.getChildren().add(NodeDetailSelect); + } catch (IOException ex) { + Logger.getLogger(FactureCltAjouterController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchFactureCltCommande() + { + ProgressBarFactureCltCommande.setVisible(true); + + ButtonSearchFactureCltCommande.setDisable(true); + + ThreadSearchFactureCltCommande = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateCreation = ""; + if(DatePickerCreation.getValue() != null){ + DateCreation = DatePickerCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListFactureCltCommandes = new CommandeCltDB().SearchCommande( + position, + nbrligne, + TypeRegement, + TextFieldCodeCommande.getText(), + TextFieldCodeClient.getText(), + TextFieldNameClient.getText(), + TextFieldCodeDevis.getText(), + DateCreation); + + TableViewGestionCommande.setItems(ListFactureCltCommandes); + + totalcount = new CommandeCltDB().nbrSearchCommande(TypeRegement, TextFieldCodeCommande.getText(), TextFieldCodeClient.getText(), TextFieldNameClient.getText(), TextFieldCodeDevis.getText(), DateCreation); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchFactureCltCommande.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFactureCltCommande.setVisible(false); + ButtonSearchFactureCltCommande.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchFactureCltCommande.start(); + } + + + private void NextLastSearchFactureCltCommande(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarFactureCltCommande.setVisible(true); + + ButtonSearchFactureCltCommande.setDisable(true); + + ThreadSearchFactureCltCommande = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateCreation = ""; + if(DatePickerCreation.getValue() != null){ + DateCreation = DatePickerCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListFactureCltCommandes = new CommandeCltDB().SearchCommande(ParmPosition, ParamNbrligne, TypeRegement, TextFieldCodeCommande.getText(), TextFieldCodeClient.getText(), TextFieldNameClient.getText(), TextFieldCodeDevis.getText(), DateCreation); + + TableViewGestionCommande.setItems(ListFactureCltCommandes); + + return null; + } + }; + } + }; + + ThreadSearchFactureCltCommande.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFactureCltCommande.setVisible(false); + ButtonSearchFactureCltCommande.setDisable(false); + } + }); + ThreadSearchFactureCltCommande.start(); + } + + private void GestionSearchFactureCltCommande() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchFactureCltCommande(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchFactureCltCommande(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchFactureCltCommande(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + +} diff --git a/src/main/java/Controllers/FactureClt/FactureCltAjouterDetailSelectController.java b/src/main/java/Controllers/FactureClt/FactureCltAjouterDetailSelectController.java new file mode 100644 index 0000000..9c9aec3 --- /dev/null +++ b/src/main/java/Controllers/FactureClt/FactureCltAjouterDetailSelectController.java @@ -0,0 +1,184 @@ +package Controllers.FactureClt; + +import Controllers.Traitement.Adaptateur; +import Models.Produit.ListeProduit; +import Controllers.Traitement.ParametreSystem; +import Models.CommandeClt.CommandeClt; +import Models.CommandeClt.CommandeCltDB; +import Models.FactureClt.FactureClt; +import Models.User.User; +import java.io.IOException; +import java.net.URL; +import java.util.Date; +import java.util.ResourceBundle; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class FactureCltAjouterDetailSelectController implements Initializable { + + @FXML private AnchorPane AnchorPaneFactAddDetailSelect ; + + private String TypeRegement; + public CommandeClt Commande; + public FactureClt Facture = new FactureClt(); + @FXML private Text InfoCltNom ; + @FXML private Text InfoCltPrenom ; + @FXML private Text InfoCltAdress ; + @FXML private Text InfoCommCode ; + @FXML private Text InfoCommDateCreation ; + @FXML private Text InfoCommTypeReglement ; + @FXML private Text InfoCommTotalTVA ; + @FXML private Text InfoCommRemise ; + @FXML private Text InfoCommTotalHTNet ; + @FXML private Text InfoCommNetAPayer ; + @FXML private Text TextPrenomMatricule; + + @FXML private TableView TableViewListeProduitCommClt ; + @FXML private TableColumn TabColReference; + @FXML private TableColumn TabColDesignaton; + @FXML private TableColumn TabColQuantite ; + @FXML private TableColumn TabColPrixHT; + @FXML private TableColumn TabColRemise; + @FXML private TableColumn TabColTotalHT; + @FXML private TableColumn TabColTVA; + @FXML private TableColumn TabColTotalTTC; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TableViewListeProduitCommClt.setEditable(false); + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignaton.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + } + + public void setDataCommande(String CodeCommande){ + CommandeCltDB CommandeDB = new CommandeCltDB(); + Commande = CommandeDB.getCommandeClt(CodeCommande); + + if(Commande.getTypeClient()==0){ + InfoCltNom.setText(Commande.CltPersonne.getNom()); + InfoCltPrenom.setText(Commande.CltPersonne.getPrenom()); + InfoCltAdress.setText(Commande.CltPersonne.getAdresse()); + } + + if(Commande.getTypeClient()==1){ + InfoCltNom.setText(Commande.CltEntreprise.getNom()); + InfoCltPrenom.setText(Commande.CltEntreprise.getMatricule()); + InfoCltAdress.setText(Commande.CltEntreprise.getAdresse()); + TextPrenomMatricule.setText("Matricule"); + } + + if(Commande.getTypeClient()==2){ + InfoCltNom.setText(Commande.CltPassager.getNom()); + InfoCltPrenom.setText(Commande.CltPassager.getPrenom()); + InfoCltAdress.setText(Commande.CltPassager.getAdresse()); + } + + //Adaptateur.StringToStringEspaceCurrency() + InfoCommCode.setText(Commande.getCodecommandeclt()); + InfoCommDateCreation.setText(Adaptateur.NormalDateFormat(Commande.getDate())); + InfoCommTypeReglement.setText(Commande.getTypeRegementString()); + TypeRegement = Commande.getTypeRegement(); + InfoCommTotalTVA.setText(Adaptateur.StringToStringEspaceCurrency(Commande.getTotalTVA())); + InfoCommRemise.setText(Adaptateur.StringToStringEspaceCurrency(Commande.getRemise())); + InfoCommTotalHTNet.setText(Adaptateur.StringToStringEspaceCurrency(Commande.getTotalHorsTaxNet())); + InfoCommNetAPayer.setText(Adaptateur.StringToStringEspaceCurrency(Commande.getNetAPayer())); + TableViewListeProduitCommClt.setItems(Commande.getListeproduit()); + this.SetDataFacture(); + } + + public void SetDataFacture(){ + Facture.setIdCommandeClt(Commande.getCodecommandeclt()); + Facture.setIdBonLivraisonClt(Commande.getCodeBonLivraison()); + + Facture.setTypeClient(Commande.getTypeClient()); + + if(Commande.getTypeClient() == 0){ + Facture.setCltPersonne(Commande.getCltPersonne()); + }else if(Commande.getTypeClient() == 1){ + Facture.setCltEntreprise(Commande.getCltEntreprise()); + }else if(Commande.getTypeClient() == 2){ + Facture.setCltPassager(Commande.getCltPassager()); + } + Facture.setDateFacture(new Date().toString()); + Facture.setTypeRegement(Commande.getTypeRegement()); + Facture.setNetAPayer(Commande.getNetAPayer()); + Facture.setTotalTVA(Commande.getTotalTVA()); + Facture.setTotalHorsTaxNet(Commande.getTotalHorsTaxNet()); + Facture.setRemise(Commande.getRemise()); + Facture.setTimbre(Commande.getTimbre()); + Facture.setDevise(Commande.getCodeDevis()); + Facture.setCodeUser(User.idprofile); + } + + + //Boutton Présédent + @FXML + private void FactureCltAjouterButtonAction(ActionEvent event) throws IOException { + AnchorPaneFactAddDetailSelect.getChildren().clear(); + AnchorPaneFactAddDetailSelect.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/FactureClt/FactureCltAjouter.fxml"))); + } + + //Boutton Suivant + @FXML + private void FactureCltPaiementButtonAction(ActionEvent event) throws IOException { + AnchorPaneFactAddDetailSelect.getChildren().clear(); + if(TypeRegement.equals("0")){ + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureClt/FactureCltAjouterPaiementComptent.fxml")); + Parent NodeAjouterPaiementComptent = (Parent)fxmlLoader.load(); + FactureCltAjouterPaiementComptentController FactureCltAjouterPaiementComptent = fxmlLoader.getController(); + FactureCltAjouterPaiementComptent.commande = Commande; + FactureCltAjouterPaiementComptent.TextNetaPayer.setText(Adaptateur.StringToStringEspaceCurrency(Commande.getNetAPayer())); + AnchorPaneFactAddDetailSelect.getChildren().add(NodeAjouterPaiementComptent); + } + else if(TypeRegement.equals("1")){ + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureClt/FactureCltAjouterPaiementFacilite.fxml")); + Parent NodeAjouterPaiementFacilite= (Parent)fxmlLoader.load(); + FactureCltAjouterPaiementFaciliteController FactureCltAjouterPaiementFacilite= fxmlLoader.getController(); + FactureCltAjouterPaiementFacilite.commande = Commande; + FactureCltAjouterPaiementFacilite.Facture = Facture; + FactureCltAjouterPaiementFacilite.TextNetaPayer.setText(Adaptateur.StringToStringEspaceCurrency(Commande.getNetAPayer())); + AnchorPaneFactAddDetailSelect.getChildren().add(NodeAjouterPaiementFacilite); + } + } + +} \ No newline at end of file diff --git a/src/main/java/Controllers/FactureClt/FactureCltAjouterDetailTraiteController.java b/src/main/java/Controllers/FactureClt/FactureCltAjouterDetailTraiteController.java new file mode 100644 index 0000000..95594d4 --- /dev/null +++ b/src/main/java/Controllers/FactureClt/FactureCltAjouterDetailTraiteController.java @@ -0,0 +1,209 @@ +/* + * 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 Controllers.FactureClt; + +import Controllers.Traitement.ParametreSystem; +import Models.CommandeClt.CommandeClt; +import Models.FactureClt.FactureClt; +import Models.ChequeClt.ChequeList; +import Models.FactureClt.FactureCltChequeListe; +import Models.FactureClt.FactureCltDB; +import Models.TraiteClt.TraiteList; +import Models.FactureClt.FactureCltTraiteListe; +import Models.ChequeClt.ChequeClt; +import Models.TraiteClt.TraiteClt; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.ResourceBundle; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * + * @author PC-Maher + */ +public class FactureCltAjouterDetailTraiteController implements Initializable { + + @FXML private AnchorPane PaneFactureCltAjouterDetailTraite; + + @FXML public AnchorPane PaneTableViewTraites ; + @FXML public AnchorPane PaneTableViewCheques; + + @FXML public Text TextNom ; + @FXML public Text TextPrenomMatricule; + @FXML public Text TextPrenom ; + @FXML public Text TextAdress ; + + @FXML public Text TextAvance ; + @FXML public Text TextTypeReglement ; // Traite | Cheque + @FXML public Text TextMontantInteret ; + + + @FXML public Text TextDetail ; + @FXML public Text TextNbrTraite ; + @FXML public Text TextBanque ; + @FXML public Text Banque ; + @FXML public Text TextMontantTraite ; + @FXML public Text ValMontantTraite; + @FXML public TableView TableViewListeTraites ; + @FXML public TableColumn TabColDateTraites; + @FXML public TableColumn TabColMontantTraites; + + @FXML public TableView TableViewListeCheques ; + @FXML public TableColumn TabColDateCheques; + @FXML public TableColumn TabColNumeroCheques; + @FXML public TableColumn TabColBanqueCheques; + @FXML public TableColumn TabColMontantCheques; + + final ObservableList dataListe = FXCollections.observableArrayList(); + final ObservableList dataListeCheque = FXCollections.observableArrayList(); + + public ObservableList data_List_Traite = FXCollections.observableArrayList(); + public ObservableList data_List_Cheque = FXCollections.observableArrayList(); + + public boolean TypeFacilite = true; // True Traite | False Cheque + + public CommandeClt commande; + public FactureClt Facture ; + public String TextTauxInteret; + public String Net_A_Payer; + public String Avance ; + + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColDateTraites.setStyle( "-fx-alignment: CENTER;"); + TabColDateTraites.getStyleClass().add("Center"); + TabColDateTraites.setCellValueFactory(new PropertyValueFactory("DateTraites")); + + TabColMontantTraites.setStyle( "-fx-alignment: CENTER;"); + TabColMontantTraites.getStyleClass().add("Center"); + TabColMontantTraites.setCellValueFactory(new PropertyValueFactory("MontantTraites")); + + TabColDateCheques.setStyle( "-fx-alignment: CENTER;"); + TabColDateCheques.getStyleClass().add("Center"); + TabColDateCheques.setCellValueFactory(new PropertyValueFactory("DateCheques")); + + TabColNumeroCheques.setStyle( "-fx-alignment: CENTER;"); + TabColNumeroCheques.getStyleClass().add("Center"); + TabColNumeroCheques.setCellValueFactory(new PropertyValueFactory("NumeroCheques")); + + TabColBanqueCheques.setStyle( "-fx-alignment: CENTER;"); + TabColBanqueCheques.getStyleClass().add("Center"); + TabColBanqueCheques.setCellValueFactory(new PropertyValueFactory("BanqueCheques")); + + TabColMontantCheques.setStyle( "-fx-alignment: CENTER;"); + TabColMontantCheques.getStyleClass().add("Center"); + TabColMontantCheques.setCellValueFactory(new PropertyValueFactory("MontantCheques")); + + + } + public void SetDataTraiteFacilite(FactureClt facture){ + this.Facture = facture; + TextAvance.setText(Facture.getAvance()+" "+ParametreSystem.CurrencySign); + TextMontantInteret.setText(Facture.getMontantInteret()); + ValMontantTraite.setText(Facture.getTotalMontantTraite()+" "+ParametreSystem.CurrencySign); + TextNbrTraite.setText(Facture.getNbrTraite()); + TextTauxInteret = Facture.getTauxInteret(); + Net_A_Payer = Facture.getNetAPayer(); + TypeFacilite = Facture.getTypeFaciliteBoolean(); + if(TypeFacilite == true){ + TextTypeReglement.setText("Traite"); + PaneTableViewCheques.setVisible(false); + PaneTableViewTraites.setVisible(true); + TextMontantTraite.setText("Montant Traite:"); + ArrayList ListTraites = Facture.getListeTraites(); + for(int i=0; i dataListCheque = Facture.getListeCheques(); + TextBanque.setText( dataListCheque.get(0).getBanqueChequeClt()); + for(int i=0; i TableViewListeTraite ; + @FXML public TableColumn TabColDateTraite; + @FXML public TableColumn TabColMontantTraite; + + @FXML public TableView TableViewListeCheque ; + @FXML public TableColumn TabColDateCheque; + @FXML public TableColumn TabColNumeroCheque; + @FXML public TableColumn TabColBanqueCheque; + @FXML public TableColumn TabColMontantCheque; + + public CommandeClt commande; + public FactureClt Facture ; + public boolean TypeSelect = true; // True Traite | False Cheque + + float NetaPayer, TotalMontantTraite, MontantInteret, Avance, NbrTraite, TauxIntere; + + public ObservableList dataList = FXCollections.observableArrayList(); + public ObservableList dataListCheque = FXCollections.observableArrayList(); + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TableViewListeTraite.setEditable(true); + + TabColMontantTraite.setStyle( "-fx-alignment: CENTER;"); + TabColMontantTraite.getStyleClass().add("Center"); + TabColMontantTraite.setCellValueFactory(new PropertyValueFactory("MontantTraite")); + TabColMontantTraite.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColMontantTraite.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewQuantite = t.getNewValue(); + ((TraiteList) t.getTableView().getItems().get(t.getTablePosition().getRow())).setMontantTraite(NewQuantite); + } + }); + + TabColDateTraite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateTraite.getStyleClass().add("Center"); + TabColDateTraite.setCellValueFactory(new PropertyValueFactory("date")); + TabColDateTraite.setEditable(true); + + TabColDateTraite.setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn p) { + DatePickerCell datePick = new DatePickerCell(dataList); + return datePick; + } + }); + TableViewListeTraite.setItems(dataList); + + + //Cheque + TabColNumeroCheque.setStyle( "-fx-alignment: CENTER;"); + TabColNumeroCheque.getStyleClass().add("Center"); + TabColNumeroCheque.setCellValueFactory(new PropertyValueFactory("NumeroCheque")); + TabColNumeroCheque.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColNumeroCheque.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewNumeroCheque = t.getNewValue(); + contro clt = new contro(); + if(!clt.isNumeric(NewNumeroCheque)){ + if(t.getTablePosition().getRow() == 0){ + Integer NumeroCheque = Integer.valueOf(NewNumeroCheque); + int indise = 0; + while(indise("BanqueCheque")); + TabColBanqueCheque.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColBanqueCheque.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewBanque = t.getNewValue(); + if(t.getTablePosition().getRow() == 0){ + int indise = 0; + while(indise("MontantCheque")); + TabColMontantCheque.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColMontantCheque.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewQuantite = t.getNewValue(); + ((ChequeList) t.getTableView().getItems().get(t.getTablePosition().getRow())).setMontantCheque(NewQuantite); + } + }); + + TabColDateCheque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateCheque.getStyleClass().add("Center"); + TabColDateCheque.setCellValueFactory(new PropertyValueFactory("date")); + TabColDateCheque.setEditable(true); + TabColDateCheque.setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn p) { + DatePickerCellCheque datePick = new DatePickerCellCheque(dataListCheque); + return datePick; + } + }); + + TableViewListeCheque.setItems(dataListCheque); + + } + + + + + private void CalculeTraite(){ + dataList.clear(); + PaneTableViewCheque.setVisible(false); + PaneTableViewTraite.setVisible(true); + + NbrTraite = Adaptateur.StringToFloat(TextFieldNbrTraite.getText()); + TauxIntere = Adaptateur.StringToFloat(TextFieldTauxIntere.getText()); + + MontantInteret = ((NetaPayer - Avance) * TauxIntere) / 100 ; + TotalMontantTraite = (NetaPayer - Avance) + MontantInteret ; + + TextMontantInteret.setText(Adaptateur.ArrondFloatToString(MontantInteret)+" "+ParametreSystem.CurrencySign); + TextMontantTraite.setText(Adaptateur.ArrondFloatToString(TotalMontantTraite)+" "+ParametreSystem.CurrencySign); + + Integer divTotal = Adaptateur.Diviseur(TotalMontantTraite); + float modeTotal = Adaptateur.Modulo(TotalMontantTraite); + + float Value = (float) TotalMontantTraite / NbrTraite; + Integer div = Adaptateur.Diviseur(Value); + + + Date date= new Date(); + Calendar cal = Calendar.getInstance(); + + Integer Somme = 0; + + for(int i=0; i ListTraites = new ArrayList(); + for(int i=0; i ListCheque = new ArrayList(); + for(int i=0; i() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + Resulta = false; + } + else if(Adaptateur.ArrondFloatToFloat(Somme) != Adaptateur.ArrondFloatToFloat(TotalMontantTraite)){ + final MessageControle messagecontrol = new MessageControle(); + + Text text3 = new Text(); + text3.setText("La sommes des traites est différent à la montant de TotalMontantTraite"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + + messagecontrol.ShowNotification(); + + Resulta = false; + } + + return Resulta; + } + + private Boolean ControleListCheque(){ + boolean Resulta = true; + boolean NumeroCheque = true; + boolean MontantCheque = true; + boolean Banque = true; + int indise = 0; + float Somme = 0; + contro clt = new contro(); + + while(indise() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + Resulta = false; + } + else if(!Banque){ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Le nom de la banque est vide"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + Resulta = false; + } + else if(!MontantCheque){ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Incorrect montant chéque"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + Resulta = false; + } + else if(Adaptateur.ArrondFloatToFloat(Somme) != Adaptateur.ArrondFloatToFloat(TotalMontantTraite)){ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("La sommes des chéques est différent à la montant de TotalMontantTraite"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + Resulta = false; + } + + return Resulta; + } + + + private Boolean Controle(){ + contro clt = new contro(); + + if(clt.ContrNumeriqueNotnull(TextFieldAvance, TextAvance) && + clt.ContrNumeriqueNotnull(TextFieldNbrTraite, TextNbrTraite) && + clt.ContrNumeriqueNotnull(TextFieldTauxIntere, TextTauxIntere)){ + + NetaPayer = Adaptateur.StringToFloat(commande.getNetAPayer()); + Avance = Adaptateur.StringToFloat(TextFieldAvance.getText()); + if(NetaPayer< Avance){ + TextFieldAvance.setStyle("-fx-border-color:#f20606;"); + TextAvance.setText("doit être inférieur a Net A payer"); + return false ; + }else if(Adaptateur.StringToFloat(TextFieldNbrTraite.getText())<= 0){ + TextFieldNbrTraite.setStyle("-fx-border-color:#f20606;"); + TextNbrTraite.setText("doit être supérieur a 0"); + return false ; + }else{ + TextAvance.setText(""); + TextFieldAvance.setStyle("-fx-border-color: transparent;"); + return true; + } + } + else{ + return false; + } + } +} diff --git a/src/main/java/Controllers/FactureClt/FactureCltDetailController.java b/src/main/java/Controllers/FactureClt/FactureCltDetailController.java new file mode 100644 index 0000000..49bc743 --- /dev/null +++ b/src/main/java/Controllers/FactureClt/FactureCltDetailController.java @@ -0,0 +1,363 @@ +package Controllers.FactureClt; + +import Controllers.TraiteClt.TraiteCltPrintController; +import Controllers.Traitement.Adaptateur; +import Models.Produit.ListeProduit; +import Models.FactureClt.FactureClt; +import Models.FactureClt.FactureCltChequeListe; +import Models.FactureClt.FactureCltDB; +import Models.FactureClt.FactureCltTraiteListe; +import Models.ChequeClt.ChequeClt; +import Models.TraiteClt.TraiteClt; +import java.io.IOException; +import java.math.BigDecimal; +import java.net.URL; +import java.util.ArrayList; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.print.JobSettings; +import javafx.print.PageLayout; +import javafx.print.PageOrientation; +import javafx.print.PageRange; +import javafx.print.Paper; +import javafx.print.Printer; +import javafx.print.PrinterJob; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.Tab; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author PC-Maher + */ +public class FactureCltDetailController implements Initializable{ + + @FXML public AnchorPane PaneSucces; + + @FXML public AnchorPane AnchorPaneLoading; + @FXML public AnchorPane AnchorPaneDetailFactureClt; + + @FXML private Text DateCreation; + @FXML private Text Reglement; + @FXML private Text NetAPayer; + @FXML private Text TotalHorsTaxNet; + @FXML private Text TotalTVA; + @FXML private Text CodeFactClt; + + @FXML private Text TypeClt; + @FXML private Text Nom; + @FXML private Text Prenom; + @FXML private Text Adresse; + @FXML private Text TELE1; + @FXML private Text TELE2; + + @FXML private Text TextPrenom ; + @FXML private Text TextMatricule ; + + @FXML private Text TextMontant; + @FXML private Text ValMontant; + + + @FXML private TableView TableViewListeProduit ; + @FXML private TableColumn TabColReference; + @FXML private TableColumn TabColDesignation; + @FXML private TableColumn TabColQuantite ; + @FXML private TableColumn TabColPrixHT; + @FXML private TableColumn TabColRemise; + @FXML private TableColumn TabColTotalHT; + @FXML private TableColumn TabColTVA; + @FXML private TableColumn TabColTotalTTC; + + + @FXML private TableView TableViewListeTraites ; + @FXML private TableColumn TabColDateTraites; + @FXML private TableColumn TabColMontantTraites; + + @FXML private TableView TableViewListeCheques ; + @FXML private TableColumn TabColDateCheques; + @FXML private TableColumn TabColNumeroCheques; + @FXML private TableColumn TabColBanqueCheques; + @FXML private TableColumn TabColMontantCheques; + + @FXML public Button ButtonImprimerTraite; + @FXML private Tab TabTypeRegement; + + private Service ThreadFactureCltDetail; + + FactureClt factureClt; + + public String codeFactClt; + + public boolean NewFacture; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TableViewListeProduit.setEditable(false); + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColDateTraites.setStyle( "-fx-alignment: CENTER;"); + TabColDateTraites.getStyleClass().add("Center"); + TabColDateTraites.setCellValueFactory(new PropertyValueFactory("DateTraites")); + + TabColMontantTraites.setStyle( "-fx-alignment: CENTER;"); + TabColMontantTraites.getStyleClass().add("Center"); + TabColMontantTraites.setCellValueFactory(new PropertyValueFactory("MontantTraites")); + + TabColDateCheques.setStyle( "-fx-alignment: CENTER;"); + TabColDateCheques.getStyleClass().add("Center"); + TabColDateCheques.setCellValueFactory(new PropertyValueFactory("DateCheques")); + + TabColNumeroCheques.setStyle( "-fx-alignment: CENTER;"); + TabColNumeroCheques.getStyleClass().add("Center"); + TabColNumeroCheques.setCellValueFactory(new PropertyValueFactory("NumeroCheques")); + + TabColBanqueCheques.setStyle( "-fx-alignment: CENTER;"); + TabColBanqueCheques.getStyleClass().add("Center"); + TabColBanqueCheques.setCellValueFactory(new PropertyValueFactory("BanqueCheques")); + + TabColMontantCheques.setStyle( "-fx-alignment: CENTER;"); + TabColMontantCheques.getStyleClass().add("Center"); + TabColMontantCheques.setCellValueFactory(new PropertyValueFactory("MontantCheques")); + + + ButtonPrintTraite(); + + + } + + + @FXML + private void FactureCltPrintButtonAction(ActionEvent event) throws IOException { + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + + try { + + jobPrint.getJobSettings().setPageRanges(new PageRange(1, 1)); + + if (jobPrint.showPrintDialog(null)) { + + FXMLLoader fxmlLoaderPrintFactureClt = new FXMLLoader(getClass().getResource("/Views/FactureClt/FactureCltPrint.fxml")); + final Node ParentFxmlPrintFactureClt = (Node)fxmlLoaderPrintFactureClt.load(); + FactureCltPrintController PrintFactureClt = fxmlLoaderPrintFactureClt.getController(); + + if(NewFacture){ + PrintFactureClt.setFactureClt(factureClt, false); + }else{ + PrintFactureClt.setFactureClt(factureClt, true); + } + + jobPrint.printPage(ParentFxmlPrintFactureClt); + + jobPrint.endJob(); + } + } catch (IOException ex) { + System.err.println("Erreur dans: Controllers.FactureClt.FactureCltDetailController.FactureCltPrintButtonAction "); + System.err.println(ex.getMessage()); + } + } + + public void SowDetailFactureClt(boolean newFacture) + { + ThreadFactureCltDetail = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + NewFacture = newFacture; + FactureCltDB factureCltDB = new FactureCltDB(); + + factureClt = factureCltDB.getFactureClt(codeFactClt); + + + return null; + } + }; + } + }; + + ThreadFactureCltDetail.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + CodeFactClt.setText(factureClt.getCodeFactureClt()); + DateCreation.setText(Adaptateur.NormalDateFormat(factureClt.getDateFacture())); + Reglement.setText(factureClt.getTypeRegementString()); + TotalHorsTaxNet.setText(Adaptateur.StringToStringEspaceCurrency(factureClt.getTotalHorsTaxNet())); + TotalTVA.setText(Adaptateur.StringToStringEspaceCurrency(factureClt.getTotalTVA())); + TypeClt.setText(factureClt.getTypeClientString()); + NetAPayer.setText(Adaptateur.StringToStringEspaceCurrency(factureClt.getNetAPayer())); + + if(factureClt.getTypeClient()==0 ){ + TextPrenom.setVisible(true); + TextMatricule.setVisible(false); + + Nom.setText(factureClt.CltPersonne.getNom()); + Prenom.setText(factureClt.CltPersonne.getPrenom()); + Adresse.setText(factureClt.CltPersonne.getAdresse()); + TELE1.setText(factureClt.CltPersonne.getTelemobileString()); + TELE2.setText(factureClt.CltPersonne.getTelefixString()); + } + + if(factureClt.getTypeClient()==1){ + TextPrenom.setVisible(false); + TextMatricule.setVisible(true); + + Nom.setText(factureClt.CltEntreprise.getNom()); + Prenom.setText(factureClt.CltEntreprise.getMatricule()); + Adresse.setText(factureClt.CltEntreprise.getAdresse()); + TELE1.setText(factureClt.CltEntreprise.getTele1String()); + TELE2.setText(factureClt.CltEntreprise.getTele2String()); + } + + if(factureClt.getTypeClient()==2 ){ + TextPrenom.setVisible(true); + TextMatricule.setVisible(false); + + Nom.setText(factureClt.CltPassager.getNom()); + Prenom.setText(factureClt.CltPassager.getPrenom()); + Adresse.setText(factureClt.CltPassager.getAdresse()); + TELE1.setText(factureClt.CltPassager.getTelefixString()); + TELE2.setText(factureClt.CltPassager.getTelemobileString()); + } + TableViewListeProduit.setItems(factureClt.getListeproduit()); + + if(factureClt.getTypeRegementInteger() == 1) + { + ValMontant.setText(Adaptateur.StringToStringEspaceCurrency(factureClt.getTotalMontantTraite())); + TabTypeRegement.setClosable(false); + TabTypeRegement.setDisable(false); + if(factureClt.getTypeFaciliteBoolean()){ //true Traite | false Cheque + TabTypeRegement.setText("Liste des traites"); + TextMontant.setText("Total Montant Traites:"); + TableViewListeTraites.setVisible(true); + //ButtonImprimerTraite.setVisible(true); + ObservableList dataListe = FXCollections.observableArrayList(); + ArrayList ListTraites = factureClt.getListeTraites(); + for(int i=0; i dataListCheque = factureClt.getListeCheques(); + ObservableList dataListeCheque = FXCollections.observableArrayList(); + for(int i=0; i() { + @Override + public void handle(ActionEvent e) { + ArrayList ListTraites = factureClt.getListeTraites(); + String strCIN= ""; + String strNomComplet = ""; + + if(factureClt.getTypeClient() == 0){ + strCIN = factureClt.getCltPersonne().getCinString(); + strNomComplet = factureClt.getCltPersonne().getNomcomplet(); + }else if(factureClt.getTypeClient() == 1){ + strCIN = factureClt.getCltEntreprise().getMatricule(); + strNomComplet = factureClt.getCltEntreprise().getNom(); + } + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/TraiteClt/TraiteCltPrint.fxml")); + try { + Parent FxmlPrintTraite = (Parent)fxmlLoader.load(); + TraiteCltPrintController TraiteCltPrint = fxmlLoader.getController(); + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + + Printer printer = Printer.getDefaultPrinter(); + PageLayout pageLayout = printer.createPageLayout(Paper.NA_LETTER,PageOrientation.PORTRAIT, 0, 0, 0, 0); + JobSettings jobSettings = jobPrint.getJobSettings(); + jobSettings.setPageLayout(pageLayout); + + jobPrint.getJobSettings().setPageRanges(new PageRange(1, ListTraites.size())); + if (jobPrint.showPrintDialog(null)) + { + for(int i=0; i TableViewListeProduitPassCommClt ; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColDesignaton; + @FXML public TableColumn TabColQuantite ; + @FXML public TableColumn TabColPrixHT; + @FXML public TableColumn TabColRemise; + @FXML public TableColumn TabColTotalHT; + @FXML public TableColumn TabColTVA; + @FXML public TableColumn TabColTotalTTC; + + + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignaton.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconsave.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + Enregister.setGraphic(buttonGraphic); + + + } + + + public void GetFactureClt(FactureClt factureclt){ + DateCreation.setText(factureclt.getDateFacture()); + Reglement.setText(factureclt.getTypeRegement()); + + NetAPayer.setText(factureclt.getNetAPayer()); + TotalHorsTaxNet.setText(factureclt.getTotalHorsTaxNet()); + TotalTVA.setText(factureclt.getTotalTVA()); + + TypeClt.setText(factureclt.getTypeClientString()); + + /* + if(FactureCltAjouterController.TypeClient == 0){ + TextPrenom.setVisible(true); + TextMatricule.setVisible(false); + Nom.setText(factureclt.CltPersonne.getNom()); + Prenom.setText(factureclt.CltPersonne.getPrenom()); + Adresse.setText(factureclt.CltPersonne.getAdresse()); + TELE1.setText(factureclt.CltPersonne.getTelefixString()); + TELE2.setText(factureclt.CltPersonne.getTelemobileString()); + } + else if(FactureCltAjouterController.TypeClient == 1){ + TextPrenom.setVisible(false); + TextMatricule.setVisible(true); + Prenom.setText(factureclt.CltEntreprise.getMatricule()); + Adresse.setText(factureclt.CltEntreprise.getAdresse()); + TELE1.setText(factureclt.CltEntreprise.getTele1().toString()); + TELE2.setText(factureclt.CltEntreprise.getTele2().toString()); + } + else if(FactureCltAjouterController.TypeClient == 2){ + TextPrenom.setVisible(true); + TextMatricule.setVisible(false); + Nom.setText(factureclt.CltPassager.getNom()); + Prenom.setText(factureclt.CltPassager.getPrenom()); + Adresse.setText(factureclt.CltPassager.getAdresse()); + TELE1.setText(factureclt.CltPassager.getTelefix().toString()); + TELE2.setText(factureclt.CltPassager.getTelemobile().toString()); + } + */ + TableViewListeProduitPassCommClt.setItems(factureclt.getListeproduit()); + } + + + public FactureCltDialogConfirmationController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureClt/FactureCltDialogConfirmation.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(FactureCltDialogConfirmationController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + + @FXML + private void ExitButtonAction(ActionEvent event) throws IOException { + AnchorPrincipal.setVisible(false); + } +} diff --git a/src/main/java/Controllers/FactureClt/FactureCltGestionController.java b/src/main/java/Controllers/FactureClt/FactureCltGestionController.java new file mode 100644 index 0000000..1f936af --- /dev/null +++ b/src/main/java/Controllers/FactureClt/FactureCltGestionController.java @@ -0,0 +1,454 @@ +package Controllers.FactureClt; + +import Models.FactureClt.FactureCltDB; +import javafx.collections.FXCollections; +import Models.FactureClt.FactureCltGestionList; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class FactureCltGestionController implements Initializable { + + @FXML private AnchorPane PaneFactureGestion ; + + @FXML private ProgressBar ProgressBarFactureClt; + + @FXML private Button ButtonSearchFactureClt; + + @FXML public TableView TableViewFactureCltListGestion; + + @FXML public TableColumn TabColCodeFacture; + @FXML public TableColumn TabColTypeClient; + @FXML public TableColumn TabColCodeClient; + @FXML public TableColumn TabColMode ; + @FXML public TableColumn TabColTotal; + @FXML public TableColumn TabColCodeCommande; + @FXML public TableColumn TabColCreation; + @FXML public TableColumnTabColDetail ; + + @FXML public TextField TextFieldCodeFacture ; + @FXML public TextField TextFieldCodeClient ; + @FXML public TextField TextFieldCodeCommande ; + @FXML public DatePicker PickerDateCreation; + + @FXML public RadioButton RadioComptant; + @FXML public RadioButton RadioFacilite; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount; + @FXML private ChoiceBox NbrLigne ; + + private Service ThreadSearchFactureClt; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + + @Override + public void initialize(URL url, ResourceBundle rb) { + + //comboboxnombre des lignes tableview + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TableViewFactureCltListGestion.setEditable(true); + + TabColCodeFacture.setStyle( "-fx-alignment: CENTER;");TabColCodeFacture.getStyleClass().add("Center"); + TabColCodeFacture.setCellValueFactory(new PropertyValueFactory("CodeFacture")); + + TabColTypeClient.setStyle( "-fx-alignment: CENTER;");TabColTypeClient.getStyleClass().add("Center"); + TabColTypeClient.setCellValueFactory(new PropertyValueFactory("TypeClient")); + + TabColCodeClient.setStyle( "-fx-alignment: CENTER;");TabColCodeClient.getStyleClass().add("Center"); + TabColCodeClient.setCellValueFactory(new PropertyValueFactory("CodeClient")); + + TabColMode.setStyle( "-fx-alignment: CENTER;");TabColMode.getStyleClass().add("Center"); + TabColMode.setCellValueFactory(new PropertyValueFactory("Mode")); + TabColMode.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if(item!= null && item.equals("Comptant")){ + Text text = new Text(item); + text.setFill(Color.web("#428BCA")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else if(item!= null && item.equals("Facilité")){ + Text text = new Text(item); + text.setFill(Color.web("#000000")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TabColTotal.setStyle( "-fx-alignment: CENTER;");TabColTotal.getStyleClass().add("Center"); + TabColTotal.setCellValueFactory(new PropertyValueFactory("Total")); + + TabColCodeCommande.setStyle( "-fx-alignment: CENTER;");TabColCodeCommande.getStyleClass().add("Center"); + TabColCodeCommande.setCellValueFactory(new PropertyValueFactory("CodeCommande")); + + TabColCreation.setStyle( "-fx-alignment: CENTER;");TabColCreation.getStyleClass().add("Center"); + TabColCreation.setCellValueFactory(new PropertyValueFactory("DateCreation")); + + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + TabColDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + ButtonSearchFactureClt.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchFactureClt(); + } + }); + + PaneFactureGestion.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchFactureClt(); + } + } + }); + + RadioComptant.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchFactureClt(); + } + }); + + RadioFacilite.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchFactureClt(); + } + }); + + GestionSearchFactureClt(); + + } + + + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + try { + // get Selected Item + FactureCltGestionList current = (FactureCltGestionList) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + String code_facture = current.getCodeFacture(); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureClt/FactureCltDetail.fxml")); + Parent NodeFactureCltDetail = (Parent)fxmlLoader.load(); + FactureCltDetailController FactureCltDetail= fxmlLoader.getController(); + FactureCltDetail.PaneSucces.setVisible(false); + + FactureCltDetail.codeFactClt = code_facture; + FactureCltDetail.SowDetailFactureClt(false); + PaneFactureGestion.getChildren().clear(); + PaneFactureGestion.getChildren().add(NodeFactureCltDetail); + FactureCltDetail.ButtonImprimerTraite.setVisible(false); + } catch (IOException ex) { + Logger.getLogger(FactureCltAjouterController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + @FXML + private void FactureCltAjouterButtonAction(ActionEvent event) throws IOException { + PaneFactureGestion.getChildren().clear(); + PaneFactureGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/FactureClt/FactureCltAjouter.fxml"))); + } + + + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchFactureClt() + { + ProgressBarFactureClt.setVisible(true); + + ButtonSearchFactureClt.setDisable(true); + + ThreadSearchFactureClt = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateCreation = ""; + if(PickerDateCreation.getValue() != null){ + DateCreation = PickerDateCreation.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListFactureClts = new FactureCltDB().SearchFactureCltGestion( + position, + nbrligne, + TextFieldCodeFacture.getText(), + TextFieldCodeClient.getText(), + TypeRegement, + TextFieldCodeCommande.getText(), + DateCreation); + + TableViewFactureCltListGestion.setItems(ListFactureClts); + + totalcount = new FactureCltDB().nbrFactureCltGestion(TextFieldCodeFacture.getText(), + TextFieldCodeClient.getText(), + TypeRegement, + TextFieldCodeCommande.getText(), + DateCreation); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchFactureClt.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFactureClt.setVisible(false); + ButtonSearchFactureClt.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchFactureClt.start(); + } + + + private void NextLastSearchFactureClt(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarFactureClt.setVisible(true); + + ButtonSearchFactureClt.setDisable(true); + + ThreadSearchFactureClt = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateCreation = ""; + if(PickerDateCreation.getValue() != null){ + DateCreation = PickerDateCreation.getValue().toString(); + } + + ObservableList ListFactureClts = new FactureCltDB().SearchFactureCltGestion(ParmPosition, ParamNbrligne, TextFieldCodeFacture.getText(), TextFieldCodeClient.getText(), "", TextFieldCodeCommande.getText(), DateCreation); + + TableViewFactureCltListGestion.setItems(ListFactureClts); + + return null; + } + }; + } + }; + + ThreadSearchFactureClt.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFactureClt.setVisible(false); + ButtonSearchFactureClt.setDisable(false); + } + }); + ThreadSearchFactureClt.start(); + } + + private void GestionSearchFactureClt() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchFactureClt(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchFactureClt(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchFactureClt(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + + + + +} diff --git a/src/main/java/Controllers/FactureClt/FactureCltPrintController.java b/src/main/java/Controllers/FactureClt/FactureCltPrintController.java new file mode 100644 index 0000000..37a1639 --- /dev/null +++ b/src/main/java/Controllers/FactureClt/FactureCltPrintController.java @@ -0,0 +1,228 @@ +package Controllers.FactureClt; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.FactureClt.FactureClt; +import Models.Produit.ListeProduit; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.print.PageRange; +import javafx.print.PrinterJob; +import javafx.scene.control.Control; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Callback; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class FactureCltPrintController implements Initializable { + + @FXML private AnchorPane AnchorPaneTotal; + + @FXML public ImageView ImageViewLogo; + + @FXML private Text TextSteNom; + @FXML private Text TextSteAdress; + @FXML private Text TextSteTeleFax; + @FXML private Text TextSteIFCR; + @FXML private Text TextSteRIB; + @FXML private Text TextSteEmailSite; + + @FXML private Text TextNumFacture; + @FXML private Text TextDateFacture; + @FXML private Text TextNumCommande; + @FXML private Text TextPagination; + + @FXML private Text TextCltNomPrenom; + @FXML private Text TextCltTele; + @FXML private Text TextCltAdress; + + @FXML private Text TextDuplicata; + + @FXML private TableView TableViewListeProduit ; + @FXML private TableColumn TabColReference; + @FXML private TableColumn TabColDesignation; + @FXML private TableColumn TabColQuantite ; + @FXML private TableColumn TabColPrixHT; + @FXML private TableColumn TabColRemise; + @FXML private TableColumn TabColTotalHT; + @FXML private TableColumn TabColTVA; + @FXML private TableColumn TabColTotalTTC; + + @FXML private Text TextTotalRemise; + @FXML private Text TextTotalHT; + @FXML private Text TextTotalTVA; + @FXML private Text TextTimbre; + @FXML private Text TextNetPayer; + + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + setImageLogo(); + + TextSteNom.setText(ParametreSystem.CompanyName); + TextSteAdress.setText(ParametreSystem.CompanyAddress); + TextSteTeleFax.setText(ParametreSystem.CompanyTele+" | Fax: "+ParametreSystem.CompanyFax); + TextSteIFCR.setText(ParametreSystem.CompanyIF+" | M.F: "+ParametreSystem.CompanyMF); + TextSteRIB.setText(ParametreSystem.RIB); + TextSteEmailSite.setText(ParametreSystem.CompanyMail+" | Site:"+ParametreSystem.CompanySite); + + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColReference.setStyle( "-fx-alignment: CENTER;"); + TabColReference.getStyleClass().add("Center"); + + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + TabColDesignation.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if (item == null) { + super.setText(null); + super.setGraphic(null); + } else { + String newItem = item.trim().toLowerCase(); + Text text = new Text(newItem); + super.setPrefHeight(Control.USE_COMPUTED_SIZE); + text.wrappingWidthProperty().bind(super.widthProperty()); + super.setGraphic(text); + } + } + }; + return cell; + } + }); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColReference.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColQuantite.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColRemise.setCellFactory(TextFieldTableCell.forTableColumn()); + } + + + public void setFactureClt(FactureClt factureClt, boolean duplicata) + { + if(duplicata){ + TextDuplicata.setVisible(true); + }else{ + TextDuplicata.setVisible(false); + } + + TableViewListeProduit.setItems(factureClt.getListeproduit()); + + TextNumFacture.setText(factureClt.getCodeFactureClt()); + TextDateFacture.setText(Adaptateur.NormalDateFormat(factureClt.getDateFacture())); + TextNumCommande.setText(factureClt.getIdCommandeClt()); + TextPagination.setText("1/1"); + + //0 Personne 1 Entreprise 2 Passager + if(factureClt.getTypeClient() == 0){ + Client client = factureClt.getCltPersonne(); + TextCltNomPrenom.setText(client.getNom()+" "+client.getPrenom()); + TextCltTele.setText(client.getTelefixString()); + TextCltAdress.setText(client.getAdresse()); + }else if(factureClt.getTypeClient() == 1){ + ClientEntreprise entreprise = factureClt.getCltEntreprise(); + TextCltNomPrenom.setText(entreprise.getNom()); + TextCltTele.setText(entreprise.getTele1String()); + TextCltAdress.setText(entreprise.getAdresse()); + }else if(factureClt.getTypeClient() == 2){ + ClientPassager passager = factureClt.getCltPassager(); + TextCltNomPrenom.setText(passager.getNom()+" "+passager.getPrenom()); + TextCltTele.setText(passager.getTelefixString()); + TextCltAdress.setText(passager.adresse); + } + + TextTotalRemise.setText(Adaptateur.StringToStringEspace(factureClt.getRemise())); + TextTotalHT.setText(Adaptateur.StringToStringEspace(factureClt.getTotalHorsTaxNet())); + TextTotalTVA.setText(Adaptateur.StringToStringEspace(factureClt.getTotalTVA())); + TextTimbre.setText(Adaptateur.StringToStringEspace(factureClt.getTimbre())); + TextNetPayer.setText(Adaptateur.StringToStringEspace(factureClt.getNetAPayer())); + + } + + private void setImageLogo() + { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + try { + // optional, but recommended + // process XML securely, avoid attacks like XML External Entities (XXE) + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + + // parse XML file + DocumentBuilder db = dbf.newDocumentBuilder(); + + //PowerERP\conf\logo.xml + Document doc = db.parse(new File("./conf/logo.xml")); + + doc.getDocumentElement().normalize(); + + Element elementCNX = (Element) doc.getElementsByTagName("FactureCltPrint").item(0); + + String pathLogo = elementCNX.getElementsByTagName("PathImage").item(0).getTextContent(); + FileInputStream fis = new FileInputStream(pathLogo); + ImageViewLogo.setImage(new Image(fis)); + + ImageViewLogo.setFitWidth(Double.parseDouble(elementCNX.getElementsByTagName("FitWidth").item(0).getTextContent())); + ImageViewLogo.setFitHeight(Double.parseDouble(elementCNX.getElementsByTagName("FitHeight").item(0).getTextContent())); + ImageViewLogo.setLayoutX(Double.parseDouble(elementCNX.getElementsByTagName("LayoutX").item(0).getTextContent())); + ImageViewLogo.setLayoutY(Double.parseDouble(elementCNX.getElementsByTagName("LayoutY").item(0).getTextContent())); + } + catch (ParserConfigurationException | SAXException | IOException e) { + System.out.println("error AuthentificationController/setImageLogo "+e.getMessage()); + } + } +} diff --git a/src/main/java/Controllers/FactureFrs/FactureFrsAjouterController.java b/src/main/java/Controllers/FactureFrs/FactureFrsAjouterController.java new file mode 100644 index 0000000..aaeb96b --- /dev/null +++ b/src/main/java/Controllers/FactureFrs/FactureFrsAjouterController.java @@ -0,0 +1,685 @@ +/* + * 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 Controllers.FactureFrs; + +import Controllers.CommandeClt.CommandeCltPasserController; +import Controllers.Dialog.MessageControle; +import Controllers.Produit.RechercherProduitController; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.FactureFrs.FactureFrs; +import Models.FactureFrs.FactureFrsDB; +import Models.Fournisseur.Fournisseur; +import Models.Fournisseur.FournisseurDB; +import Models.Produit.ListeProduit; +import Models.Produit.Produit; +import Models.Produit.ProduitDB; +import Models.Stock.StockDB; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.time.LocalDateTime; +import javafx.application.Platform; +import java.util.ArrayList; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; +import org.controlsfx.control.textfield.TextFields; + +/** + * FXML Controller class + * + * @author Maher + */ +public class FactureFrsAjouterController implements Initializable { + + @FXML public AnchorPane PaneFactureFrsAjouter ; + + @FXML public Text TotalTVA ; + @FXML public Text Remise ; + @FXML public Text NetAPayer ; + @FXML public Text Timbre ; + @FXML public Text TotalHTNet ; + + @FXML public Button RechercheProduit ; + @FXML public Button ButtonFactureFrsAjouter; + + @FXML public TableView TableViewListeProduit ; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColDesignaton; + @FXML public TableColumn TabColQuantite ; + @FXML public TableColumn TabColPrixHT; + @FXML public TableColumn TabColTotalHT; + @FXML public TableColumn TabColRemise; + @FXML public TableColumn TabColTVA; + @FXML public TableColumn TabColTotalTTC; + @FXML public TableColumn TabColAddAction ; + + + @FXML public TextField TextFieldNumero ; + @FXML public TextField TextFieldTransporteur ; + @FXML public TextField TextFieldHeur ; + @FXML private TextField TextFieldFournisseur ; + @FXML public DatePicker DatePickerDateReception; + + + + @FXML public ChoiceBox ChoiceBoxLocalReception ; + + @FXML public Text TextNumero ; + @FXML public Text TextHeur ; + @FXML public Text TextDateReception; + @FXML public Text TextFournisseur ; + @FXML public Text TextLocalReception ; + + @FXML public ProgressIndicator ProgressIndicatorSaveFactureFrs ; + + + public ObservableList ListProd = FXCollections.observableArrayList(); + Produit produit= new Produit(); + ProduitDB produitDB= new ProduitDB(); + contro Controle = new contro(); + + public ArrayList ListFournisseur = new ArrayList<>(); + public ArrayList ListLocale = new ArrayList<>(); + + float netaPayer = 0; + float Remises = 0; + float totalTVA = 0; + float total_H_T_Net= 0; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + DatePickerDateReception.setValue(LocalDate.now()); + TextFieldHeur.setText(LocalDateTime.now().getHour()+":"+LocalDateTime.now().getMinute()); + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignaton.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColReference.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColQuantite.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColRemise.setCellFactory(TextFieldTableCell.forTableColumn()); + + TabColAddAction.setSortable(true); + TabColAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new FactureFrsAjouterController.ButtonCell(); + } + }); + TabColAddAction.setStyle( "-fx-alignment: CENTER;"); + TabColAddAction.getStyleClass().add("Center"); + + StockDB Stock = new StockDB(); + ListLocale = Stock.getAllListLocal(); + ChoiceBoxLocalReception.getItems().addAll(ListLocale); + + ListFournisseur = new FournisseurDB().getAllFournisseur("CONCAT(`id_fourisseur`,' - ',`nom`)"); + TextFields.bindAutoCompletion(TextFieldFournisseur, ListFournisseur); + + + this.ReferenceMouseClick(); + this.QantiteMouseClick(); + this.RemiseMouseClick(); + + TabColAddAction.setSortable(true); + TabColAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new FactureFrsAjouterController.ButtonCell(); + } + }); + + + TableViewListeProduit.setItems(ListProd); + + + //Ajouter une ligne vide clors ce que en click sur la tableview + TableViewListeProduit.setOnMouseClicked(new EventHandler(){ + public void handle(MouseEvent event){ + int nbrligne = TableViewListeProduit.getItems().size() ; + if(nbrligne == 0){ + ListProd.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(ListProd); + } + else{ + ListeProduit Liste = TableViewListeProduit.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + ListProd.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(ListProd); + TableViewListeProduit.getSelectionModel().select(nbrligne); + } + } + } + }); + + + ButtonFactureFrsAjouter.setOnAction(new EventHandler() { //supprimer le message du suucés et reaficher les formulaires + @Override + public void handle(ActionEvent event) { + + ButtonFactureFrsAjouter.setText(""); + ButtonFactureFrsAjouter.setDisable(true); + ProgressIndicatorSaveFactureFrs.setVisible(true); + + if( Controle.ContrNumeriqueNotnull(TextFieldNumero, TextNumero) && + Controle.ContrNull(TextFieldFournisseur, TextFournisseur) && + Controle.ContrNullDatePicker(DatePickerDateReception, TextDateReception) && + Controle.ContrHour(TextFieldHeur, TextHeur) && + Controle.ContrNullValue(ChoiceBoxLocalReception, TextLocalReception) + ){ + + Runnable task = new Runnable(){// Create a Runnable + public void run(){ + Platform.runLater(new Runnable(){ + @Override + public void run(){ + String Numero = TextFieldNumero.getText(); + String IdFournisseur = TextFieldFournisseur.getText().split(" - ", -1)[0]; + FactureFrsDB FactureDB = new FactureFrsDB(); + String IdFactureFrs = FactureDB.getFactureFrs(null, Numero, IdFournisseur).getIdFactureFrs(); + if(IdFactureFrs != null){ + TextFieldNumero.setStyle("-fx-border-color:#f20606;"); + TextNumero.setText("Facture Fournisseur existe déja"); + }else{ + if(ListProd.size()>0){ + FactureFrs FactureFrs = SetFacture(); + FactureDB.setFactureFrsDB(FactureFrs); + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureFrs/FactureFrsDetail.fxml")); + Parent ParentFxmlFournisseur = (Parent)fxmlLoader.load(); + + FactureFrsDetailController FactureFrsDetail = fxmlLoader.getController(); + FactureFrsDetail.setDataFactureDetailFrs(FactureFrs.getIdFactureFrs()); + FactureFrsDetail.PaneSucessFrs.setVisible(true); + PaneFactureFrsAjouter.getChildren().clear(); + PaneFactureFrsAjouter.getChildren().add(ParentFxmlFournisseur); + + }catch (IOException ex) { + Logger.getLogger(FactureFrsDetailController.class.getName()).log(Level.SEVERE, null, ex); + } + }else{ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Vous devez ajouter au moin un produit à la liste des produits"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + } + + } + } + }); + } + }; + Thread backgroundThread = new Thread(task);// Run the task in a background thread + backgroundThread.setDaemon(true);// Terminate the running thread if the application exits + backgroundThread.start();// Start the thread + } + + ButtonFactureFrsAjouter.setText("Enregister La Facture"); + ButtonFactureFrsAjouter.setDisable(false); + ProgressIndicatorSaveFactureFrs.setVisible(false); + + } + }); + } + + public FactureFrs SetFacture(){ + FactureFrs Facture = new FactureFrs(); + + if(!TextFieldFournisseur.getText().equals("")){ + String[] Fournisseur = TextFieldFournisseur.getText().split(" - ", -1); + Fournisseur Frs = new Fournisseur(); + Frs.setCode(Fournisseur[0]); + Frs.setNom(Fournisseur[1]); + Facture.setFournisseur(Frs); + } + + if(ChoiceBoxLocalReception.getValue() != null){ + Facture.setLocal(ChoiceBoxLocalReception.getValue().toString()); + } + + if(DatePickerDateReception.getValue() != null){ + Facture.setDateCreation(DatePickerDateReception.getValue().toString()); + } + + Facture.setNumero(TextFieldNumero.getText()); + Facture.setHeurCreation(TextFieldHeur.getText()); + Facture.setTotalHorsTaxNet(Adaptateur.floatDeleZero(total_H_T_Net)); + Facture.setTotalTVA(Adaptateur.floatDeleZero(totalTVA)); + Facture.setRemise(Adaptateur.floatDeleZero(Remises)); + Facture.setNetAPayer(Adaptateur.floatDeleZero(netaPayer)); + Facture.setTimbre(Timbre.getText()); + Facture.setListProduit(ListProd); + Facture.setTypeReglement(null); + Facture.setEtatReglement(null); + + + return Facture; + } + + + public void getFacture(FactureFrs Facture){ + + TextFieldNumero.setText(Facture.getNumero()); + TextFieldHeur.setText(Facture.getHeurCreation()); + DatePickerDateReception.setValue(Adaptateur.StringToLocalDate(Facture.getDateCreation())); + + Fournisseur Frs = Facture.getFournisseur(); + if(Frs != null){ + TextFieldFournisseur.setText(Frs.getCode()+" - "+Frs.getNom()); + } + + String Local = Facture.getLocal(); + if(Local != null){ + int indexLocale = ListLocale.indexOf(Local); + ChoiceBoxLocalReception.getSelectionModel().select(indexLocale); + } + } + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + cellButton.getStyleClass().add("btn-danger"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + int selectdIndex = getTableRow().getIndex(); + ListProd.remove(selectdIndex); + CalculeListeProduit(); + TableViewListeProduit.setStyle(".table-row-cell:selected{ -fx-background-color:transparent ;}"); + + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + + + @FXML + private void AddLigneButtonAction(ActionEvent event) throws IOException { + int nbrligne = TableViewListeProduit.getItems().size() ; + if(nbrligne == 0){ + ListProd.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(ListProd); + } + else{ + ListeProduit Liste = TableViewListeProduit.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + ListProd.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(ListProd); + TableViewListeProduit.getSelectionModel().select(nbrligne); + } + } + } + + private void ReferenceMouseClick(){ + TabColReference.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + produit = produitDB.getProduit(t.getNewValue()); + if(produit.getReference() != null){ + ListeProduit Liste = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixachatht(),"0","",produit.getTvaachat(),"0"); + AffectationTableView(Liste,t.getTablePosition().getRow()) ; + } + else{ + AffectationTableView(new ListeProduit("","","","","","","",""),t.getTablePosition().getRow()) ; + } + + } + }); + } + + private void QantiteMouseClick(){ + TabColQuantite.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newquantite = t.getNewValue() ; + try{ + newquantite = newquantite.replace(',','.'); + if(Float.parseFloat(newquantite)<1){ + newquantite = "1"; + } + } + catch(NumberFormatException nfe){ + newquantite = "1"; + } + + ListeProduit Liste = t.getRowValue() ; + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un quantité dans un ligne vide + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setQuantite(newquantite); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), newquantite,Liste.getPrixHT(), Liste.getRemise(),"",Liste.getTVA(),""); + //NewList = CalculeProduit(NewList); + AffectationTableView(NewList,t.getTablePosition().getRow()) ; + + } + } + }); + } + + + private void RemiseMouseClick(){ + TabColRemise.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newRemise = t.getNewValue() ; + try{ + newRemise = newRemise.replace(',','.'); + if(Float.parseFloat(newRemise)<0){ + newRemise = "0"; + } + } + catch(NumberFormatException nfe){ + newRemise = "0"; + } + + ListeProduit Liste = t.getRowValue() ; + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un remise dans un ligne vide + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setRemise(newRemise); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), Liste.getQuantite(),Liste.getPrixHT(), newRemise, "", Liste.getTVA(), ""); + AffectationTableView(NewList, t.getTablePosition().getRow()); + } + + } + }); + } + private void AffectationTableView(ListeProduit ListeProd, int EmplacementLigne){ + boolean result = false ; + int indise=0; + int Position = 0; + + if(ListProd.size()>0){ + do{ //Vérifier si le produit exsiste deja + if(ListProd.get(indise).getReference().equals(ListeProd.getReference())){ + result = true ; + Position = indise ; + //System.out.println("existe Position:"+indise); + } + indise++; + }while(ListProd.size()>indise && !result); + + if(result){ //si la ligne exsite déja + if(EmplacementLigne!= -1){ + if(Position == EmplacementLigne){ + ListProd.set(Position, ListeProd); + } + else{ + ListProd.set(EmplacementLigne, new ListeProduit("","","","","","","","")); + } + } + }else{ + if(EmplacementLigne!= -1){ + ListProd.set(EmplacementLigne, ListeProd); + }else{ + ListProd.add(ListeProd); + } + } + } + else{ + ListProd.add(ListeProd); + } + + CalculeListeProduit(); + + TableViewListeProduit.setItems(ListProd); + TableViewListeProduit.setVisible(false); + TableViewListeProduit.setVisible(true); + } + + private void CalculeListeProduit(){ //calculer et afficher la détail des produits + netaPayer = 0; + Remises = 0; + totalTVA = 0; + total_H_T_Net= 0; + + TotalTVA.setText(""); + Remise.setText(""); + NetAPayer.setText(""); + Timbre.setText(""); + TotalHTNet.setText(""); + + //calcule + for(ListeProduit liste : ListProd){ + float totaht = Adaptateur.StringToFloat(liste.getTotalHT()) ; + float prix_U_H_T = Adaptateur.StringToFloat(liste.getPrixHT()) ; + float remises = Adaptateur.StringToFloat(liste.getRemise().replace("%", "")) ; + float tva = Adaptateur.StringToFloat(liste.getTVA().replace("%", "")); + float qte = Adaptateur.StringToFloat(liste.getQuantite()); + + totalTVA = totalTVA + ((totaht * tva) /100) ; + Remises = Remises + (prix_U_H_T * remises)/100 ; + total_H_T_Net = total_H_T_Net + totaht ; + } + + if(total_H_T_Net>0){ + float timbre = Adaptateur.StringToFloat(ParametreSystem.Timbre); + netaPayer = total_H_T_Net + totalTVA + timbre ; + TotalTVA.setText(Adaptateur.FloatToStringEspace(totalTVA)); + Remise.setText(Adaptateur.FloatToStringEspace(Remises)); + NetAPayer.setText(Adaptateur.FloatToStringEspaceCurrency(netaPayer)); + Timbre.setText(ParametreSystem.Timbre); + TotalHTNet.setText(Adaptateur.FloatToStringEspace(total_H_T_Net)); + } + } + + + public Object[] getDefaultSaveDataImport(){ + Object[] ArrayObject = new Object[10]; + ArrayObject[0] = this.ListProd; + ArrayObject[1] = SetFacture(); + return ArrayObject; + } + + + + public void SetDefaultSaveDataImport(Object[] ArrayObject){ + if(ArrayObject[0] != null){ + this.ListProd = (ObservableList) ArrayObject[0]; + this.CalculeListeProduit(); + this.TableViewListeProduit.setItems(ListProd); + } + if(ArrayObject[1] != null){ + FactureFrs Facture = (FactureFrs) ArrayObject[1]; + getFacture(Facture); + } + + if(ArrayObject[6] != null){ + this.SetProduit( (Produit) ArrayObject[6] ); + } + } + + @FXML + private void RechercheProduitButtonAction(ActionEvent event) throws IOException { + + final RechercherProduitController rechercheproduit = new RechercherProduitController(false); + + rechercheproduit.ArrayObjectDataSave = this.getDefaultSaveDataImport(); + + rechercheproduit.Show(); + + rechercheproduit.TabColAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + // get Selected ItemButtonCell + rechercheproduit.ArrayObjectDataSave[6] = ((Produit)getTableRow().getItem()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureFrs/FactureFrsAjouter.fxml")); + Parent ParentBonReceptionAjouterFXML = (Parent) fxmlLoader.load(); + + FactureFrsAjouterController FactureFrsAjouter = fxmlLoader.getController(); + + FactureFrsAjouter.SetDefaultSaveDataImport(rechercheproduit.ArrayObjectDataSave); + + + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(ParentBonReceptionAjouterFXML, 2); + + + } catch (IOException ex) { + Logger.getLogger(CommandeCltPasserController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + } + + public void SetProduit(Produit produit){ + + //Supprimer les igne vide + if((ListProd.size()>0) && (ListProd.get(ListProd.size()-1).getReference().isEmpty())){ + ListProd.remove(ListProd.size()-1); + } + + if(produit != null){ + ListeProduit ListeProd = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixachatht(),"0",produit.getPrixachatttc(),produit.getTvaachat(),"0"); + AffectationTableView(ListeProd,-1); + } + + } + + +} diff --git a/src/main/java/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController.java b/src/main/java/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController.java new file mode 100644 index 0000000..9cafe31 --- /dev/null +++ b/src/main/java/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController.java @@ -0,0 +1,633 @@ +/* + * 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 Controllers.FactureFrs; + +import Controllers.Dialog.MessageControle; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.BonReceptionFrs.BonReceptionDB; +import Models.BonReceptionFrs.BonReceptionFrs; +import Models.BonReceptionFrs.BonReceptionList; +import Models.BonReceptionFrs.BonReceptionProduitList; +import Models.FactureFrs.FactureFrs; +import Models.FactureFrs.FactureFrsDB; +import Models.Fournisseur.Fournisseur; +import Models.Fournisseur.FournisseurDB; +import Models.Produit.ListeProduit; +import Models.Stock.StockDB; +import Models.User.Profile; +import Models.User.User; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.stream.Collectors; +import javafx.application.Platform; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; +import org.controlsfx.control.textfield.TextFields; + +/** + * FXML Controller class + * + * @author Maher + */ +public class FactureFrsBonReceptionAjouterController implements Initializable { + + @FXML public AnchorPane PaneFactureBRFrsAjouter ; + + @FXML public TableView TableViewBonReception ; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColFournisseur; + @FXML public TableColumn TabColDate; + @FXML public TableColumn TabColLocalReception; + @FXML public TableColumn TabColNetPayer; + @FXML public TableColumn TabColRechAddAction; + + + @FXML public TableView TableViewBonReceptionSelected; + @FXML public TableColumn TabColReferenceSelected; + @FXML public TableColumn TabColFournisseurSelected; + @FXML public TableColumn TabColDateSelected; + @FXML public TableColumn TabColLocalReceptionSelected; + @FXML public TableColumn TabColNetPayerSelected; + @FXML public TableColumn TabColSupprimer; + + @FXML public TextField TextFieldNumero ; + @FXML public TextField TextFieldNetPayer ; + @FXML private TextField TextFieldFournisseur ; + @FXML public ChoiceBox ChoiceBoxLocalReception ; + @FXML public DatePicker DatePickerDateReception; + + @FXML public TextField TextFieldNumeroFac ; + @FXML public TextField TextFieldHeurFac ; + @FXML public DatePicker DatePickerDateFac; + @FXML public Text TextCltNumeroFac ; + @FXML public Text TextCltHeurFac ; + @FXML public Text TextCltDateFac ; + + @FXML public Text TextTotalFacture; + + + @FXML public Button ButtonFactureBLAjouter; + @FXML public ProgressIndicator ProgressIndicatorBonReception; + @FXML public ProgressIndicator ProgressIndicatorSaveFactureBLAjouter; + + public ArrayList ListFournisseur = new ArrayList<>(); + public ArrayList ListLocale = new ArrayList<>(); + + ObservableList ObservableListBonReception = FXCollections.observableArrayList(); + + BonReceptionDB BonRecepDB= new BonReceptionDB(); + + contro Controle = new contro(); + + String StringSeleFournissuer ; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TabColReference.setCellValueFactory(new PropertyValueFactory("Numero")); + + TabColFournisseur.setCellValueFactory(new PropertyValueFactory("Fournisseur")); + TabColFournisseur.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColFournisseur.getStyleClass().add("Center"); + + TabColDate.setCellValueFactory(new PropertyValueFactory("Date")); + TabColDate.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDate.getStyleClass().add("Center"); + + TabColNetPayer.setCellValueFactory(new PropertyValueFactory("NetPayer")); + TabColNetPayer.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNetPayer.getStyleClass().add("Center"); + + TabColLocalReception.setCellValueFactory(new PropertyValueFactory("LocalReception")); + TabColLocalReception.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColLocalReception.getStyleClass().add("Center"); + + TabColRechAddAction.setSortable(true); + TabColRechAddAction.setStyle( "-fx-alignment: CENTER;"); + + TabColRechAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColRechAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new FactureFrsBonReceptionAjouterController.ButtonCell(); + } + }); + + + TabColReferenceSelected.setCellValueFactory(new PropertyValueFactory("Numero")); + + TabColFournisseurSelected.setCellValueFactory(new PropertyValueFactory("Fournisseur")); + TabColFournisseurSelected.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColFournisseurSelected.getStyleClass().add("Center"); + + TabColDateSelected.setCellValueFactory(new PropertyValueFactory("Date")); + TabColDateSelected.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateSelected.getStyleClass().add("Center"); + + TabColNetPayerSelected.setCellValueFactory(new PropertyValueFactory("NetPayer")); + TabColNetPayerSelected.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNetPayerSelected.getStyleClass().add("Center"); + + TabColLocalReceptionSelected.setCellValueFactory(new PropertyValueFactory("LocalReception")); + TabColLocalReceptionSelected.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColLocalReceptionSelected.getStyleClass().add("Center"); + + TabColSupprimer.setSortable(true); + TabColSupprimer.setStyle( "-fx-alignment: CENTER;"); + + TabColSupprimer.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColSupprimer.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new FactureFrsBonReceptionAjouterController.ButtonCellRemove(); + } + }); + + ListFournisseur = new FournisseurDB().getAllFournisseur("CONCAT(`id_fourisseur`,' - ',`nom`)"); + TextFields.bindAutoCompletion(TextFieldFournisseur, ListFournisseur); + + StockDB Stock = new StockDB(); + ListLocale = Stock.getAllListLocal(); + ChoiceBoxLocalReception.getItems().addAll(ListLocale); + + DatePickerDateFac.setValue(LocalDate.now()); + TextFieldHeurFac.setText(LocalDateTime.now().getHour()+":"+LocalDateTime.now().getMinute()); + + RechecheBonReception(); + + getRechecheBonReception(""); + + AjouterFactureBL(); + } + + + + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + BonReceptionList BonReceptionListSelect = (BonReceptionList)getTableRow().getItem(); + AffectBonReception(BonReceptionListSelect); + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + //Define the button cell + private class ButtonCellRemove extends TableCell { + + final Button cellButton = new Button(); + + ButtonCellRemove(){ + cellButton.getStyleClass().add("btn-danger"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + int selectdIndex = getTableRow().getIndex(); + ObservableListBonReception.remove(selectdIndex); + CalculeFacture(); + TableViewBonReceptionSelected.setItems(ObservableListBonReception); + TableViewBonReceptionSelected.refresh(); + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + private void getRechecheBonReception(final String KeyWordSearch ) + { + try { + ProgressIndicatorBonReception.setVisible(true); + TableViewBonReception.setVisible(false); + + // Create a Runnable + Runnable task = new Runnable(){ + public void run(){ + Platform.runLater(new Runnable(){ + @Override + public void run(){ + + TableViewBonReception.setItems(BonRecepDB.getBonReceptionNotFact(KeyWordSearch)); + ProgressIndicatorBonReception.setVisible(false); + TableViewBonReception.setVisible(true); + } + }); + } + }; + + + Thread backgroundThread = new Thread(task); // Run the task in a background thread + backgroundThread.setDaemon(true); // Terminate the running thread if the application exits + backgroundThread.start(); // Start the thread + + }catch (Exception ex) { + System.err.println("Exception getRechecheBonReception \n"+ex.getMessage()); + } + + } + + + private boolean ContrFournissuer() + { + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + if(ObservableListBonReception.size()>0){ + boolean result = true ; + StringSeleFournissuer = ObservableListBonReception.get(0).getFournisseur(); + int indise = 1; + //Verifier si la produit exsiste déja + while(indise<=ObservableListBonReception.size() && result){ + result = ObservableListBonReception.get(indise-1).getFournisseur().equals(StringSeleFournissuer); + indise++; + } + + //si le fournisseur n'exsiste pas + if(!result){ + text3.setText("Les fournisseurs sélectionnés sont différents"); + messagecontrol.DetailMSG.getChildren().add(text3); + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + return false; + } + + + //si la facture existe déja + String IdFournisseur = StringSeleFournissuer.split(" - ", -1)[0]; + FactureFrsDB FactureDB = new FactureFrsDB(); + FactureFrs Facture = FactureDB.getFactureFrs(null, TextFieldNumeroFac.getText(), IdFournisseur); + if(Facture.getIdFactureFrs() != null){ + text3.setText("Cette facture existe déja"); + messagecontrol.DetailMSG.getChildren().add(text3); + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + return false; + } + + return true; + } + else{ + //si la liste est vide + text3.setText("Vous devez ajouter au moin un Bon Réception à la liste"); + messagecontrol.DetailMSG.getChildren().add(text3); + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + return false; + } + + } + + private void AjouterFactureBL(){ + ButtonFactureBLAjouter.setOnAction(new EventHandler() { //supprimer le message du suucés et reaficher les formulaires + @Override + public void handle(ActionEvent event) { + + if( Controle.ContrNumeriqueNotnull(TextFieldNumeroFac, TextCltNumeroFac) && + ContrFournissuer() && + Controle.ContrHour(TextFieldHeurFac, TextCltHeurFac) && + Controle.ContrNullDatePicker(DatePickerDateFac, TextCltDateFac)){ + + + ButtonFactureBLAjouter.setText(""); + ButtonFactureBLAjouter.setDisable(true); + ProgressIndicatorSaveFactureBLAjouter.setVisible(true); + + Runnable task = new Runnable(){// Create a Runnable + public void run(){ + Platform.runLater(new Runnable(){ + @Override + public void run(){ + + FactureFrs Facture = setFactureBRFrs(); + FactureFrsDB FactureDB = new FactureFrsDB(); + FactureDB.setFactureBRDB(Facture); + + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureFrs/FactureFrsDetail.fxml")); + Parent ParentFxmlFournisseur = (Parent)fxmlLoader.load(); + + FactureFrsDetailController FactureFrsDetail = fxmlLoader.getController(); + FactureFrsDetail.setDataFactureDetailFrs(Facture.getIdFactureFrs()); + FactureFrsDetail.PaneSucessFrs.setVisible(true); + PaneFactureBRFrsAjouter.getChildren().clear(); + PaneFactureBRFrsAjouter.getChildren().add(ParentFxmlFournisseur); + + }catch (IOException ex) { + Logger.getLogger(FactureFrsDetailController.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + } + }; + + Thread backgroundThread = new Thread(task);// Run the task in a background thread + backgroundThread.setDaemon(true);// Terminate the running thread if the application exits + backgroundThread.start(); + } + + ButtonFactureBLAjouter.setText("Enregister Facture BR"); + ButtonFactureBLAjouter.setDisable(false); + ProgressIndicatorSaveFactureBLAjouter.setVisible(false); + + } + }); + + } + + public FactureFrs setFactureBRFrs(){ + + FactureFrs FactureBRFrs = new FactureFrs(); + FactureBRFrs.setNumero(TextFieldNumeroFac.getText()); + FactureBRFrs.setHeurCreation(TextFieldHeurFac.getText()); + FactureBRFrs.setDateCreation(DatePickerDateFac.getValue().toString()); + + String IdFournisseur = StringSeleFournissuer.split(" - ", -1)[0]; + Fournisseur Frs = new Fournisseur(); + Frs.setCode(IdFournisseur); + FactureBRFrs.setFournisseur(Frs); + + FactureBRFrs.setDevise(ParametreSystem.CurrencySign); + + Profile profile= new Profile(); + profile.setIdprofile(User.idprofile); + FactureBRFrs.setProfile(profile); + + FactureBRFrs.setLocal(ParametreSystem.NomLocalPC); + + float total_hors_tax_net = 0; + float total_tva = 0; + float net_a_payer = 0; + + ArrayList listRefeProduct = new ArrayList<>(); + ArrayList listProd = new ArrayList<>(); + ObservableList ListProduit = FXCollections.observableArrayList() ; + + ObservableList ListeBonReception = FXCollections.observableArrayList() ; + for(int i=0; i ObservableListProduit = BonReception.getListProduit(); + for(int j=0; j0){ + boolean result = false ; + int indise = 1; + //Verifier si la produit exsiste déja + while(indise<=ObservableListBonReception.size() && !result){ + result = ObservableListBonReception.get(indise-1).getCode().equals(BRList.getCode()); + indise++; + } + //si le produit n'exsiste pas on la joute à la table view + if(!result){ + ObservableListBonReception.add(BRList); + } + } + else{ + ObservableListBonReception.add(BRList); + } + CalculeFacture(); + TableViewBonReceptionSelected.setItems(ObservableListBonReception); + TableViewBonReceptionSelected.refresh(); + } + + + private void CalculeFacture(){ + float somme = 0; + + for(int i=0; i 0){ + somme += Adaptateur.ArrondStringToFloat(ParametreSystem.Timbre); + TextTotalFacture.setText(Adaptateur.ArrondFloatToString(somme)+" "+ParametreSystem.CurrencySign); + }else{ + TextTotalFacture.setText(""); + } + + + } + + + private void RechecheBonReception(){ + TextFieldNumero.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + String numero = Adaptateur.addSlashes(TextFieldNumero.getText()); + if(numero.isEmpty()){ + TableViewBonReception.setItems(null); + } + else{ + getRechecheBonReception(" AND (BR.numero LIKE '"+numero+"%') "); + } + + } + }); + + TextFieldNetPayer.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + String netpayer = TextFieldNetPayer.getText(); + if(netpayer.isEmpty()){ + TableViewBonReception.setItems(null); + } + else{ + getRechecheBonReception(" AND (BR.net_a_payer LIKE '"+netpayer+"%') "); + } + } + }); + + + DatePickerDateReception.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + try{ + getRechecheBonReception(" AND (DATE(BR.date_reception) = "+"'"+DatePickerDateReception.getValue().toString()+"')"); + }catch(Exception ex){} + } + }); + DatePickerDateReception.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + try{ + String DateReception = DatePickerDateReception.getConverter().fromString(DatePickerDateReception.getEditor().getText()).toString(); + getRechecheBonReception(" AND (DATE(BR.date_reception) = "+"'"+DateReception+"')"); + }catch(Exception ex){} + } + }); + + + TextFieldFournisseur.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + if(newValue.contains(" - ")){ + String[] array = newValue.split(" - ", -1); + getRechecheBonReception(" AND (BR.id_fournisseur = '"+array[0]+"') "); + } + } + }); + + + ChoiceBoxLocalReception.valueProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue ov, String t, String ValLocal) { + getRechecheBonReception(" AND (BR.local_reception LIKE '"+ValLocal+"%') "); + } + }); + } + +} diff --git a/src/main/java/Controllers/FactureFrs/FactureFrsDetailController.java b/src/main/java/Controllers/FactureFrs/FactureFrsDetailController.java new file mode 100644 index 0000000..bd82d8c --- /dev/null +++ b/src/main/java/Controllers/FactureFrs/FactureFrsDetailController.java @@ -0,0 +1,205 @@ +/* + * 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 Controllers.FactureFrs; + +import Controllers.Traitement.Adaptateur; +import Models.BonReceptionFrs.BonReceptionFrs; +import Models.FactureFrs.FactureFrs; +import Models.FactureFrs.FactureFrsDB; +import Models.Fournisseur.Fournisseur; +import Models.Produit.ListeProduit; +import Models.User.Profile; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.application.Platform; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.Tab; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * + * @author Maher + */ +public class FactureFrsDetailController implements Initializable { + + @FXML private AnchorPane PaneFactureFrsDetail ; + @FXML private AnchorPane AnchorPaneLoading; + + @FXML public AnchorPane PaneSucessFrs ; + + @FXML private Tab TabBonReception; + + @FXML private Text TextNumero; + @FXML private Text TextDateReception; + @FXML private Text TextTypeReglement; //type reglement: 0 comptant 1 facilité + @FXML private Text TextLocalReception; + @FXML private Text TextEtatReglement; //0 :payer 1 :en cour 3: non pays + @FXML private Text TextProfile; + @FXML private Text TextNomFrs; + @FXML private Text TextSpecialiteFrs; + @FXML private Text TextFormesFrs; + @FXML private Text TextAdresseFrs; + @FXML private Text TextTele1Frs; + @FXML private Text TextTele2Frs; + + + @FXML private Text TotalTVA ; + @FXML private Text Remise ; + @FXML private Text NetAPayer ; + @FXML private Text Timbre ; + @FXML private Text TotalHTNet ; + + @FXML public TableView TableViewListeProduit ; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColDesignation; + @FXML public TableColumn TabColQuantite ; + @FXML public TableColumn TabColPrixHT; + @FXML public TableColumn TabColRemise; + @FXML public TableColumn TabColTotalHT; + @FXML public TableColumn TabColTVA; + @FXML public TableColumn TabColTotalTTC; + + @FXML public TableView TableViewBonReception; + @FXML public TableColumn TabColNumero; + @FXML public TableColumn TabColDate; + @FXML public TableColumn TabColHeur; + @FXML public TableColumn TabColLocalReception; + @FXML public TableColumn TabColTransporteur; + @FXML public TableColumn TabColNetPayer; + + private Service ThreadFactureFrsDetail; + + FactureFrs Facture ; + + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColNumero.setCellValueFactory(new PropertyValueFactory("Numero")); + + TabColDate.setCellValueFactory(new PropertyValueFactory("Date")); + TabColDate.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDate.getStyleClass().add("Center"); + + TabColHeur.setCellValueFactory(new PropertyValueFactory("Heur")); + TabColHeur.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColHeur.getStyleClass().add("Center"); + + + TabColLocalReception.setCellValueFactory(new PropertyValueFactory("Local")); + TabColLocalReception.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColLocalReception.getStyleClass().add("Center"); + + + TabColTransporteur.setCellValueFactory(new PropertyValueFactory("Transporteur")); + TabColTransporteur.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTransporteur.getStyleClass().add("Center"); + + TabColNetPayer.setCellValueFactory(new PropertyValueFactory("NetPayer")); + TabColNetPayer.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNetPayer.getStyleClass().add("Center"); + } + + + public void setDataFactureDetailFrs(final String IdFactureFrs){ + ThreadFactureFrsDetail = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + Facture = new FactureFrsDB().getFactureFrs(IdFactureFrs, null, null); + + return null; + } + }; + } + }; + ThreadFactureFrsDetail.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + TextNumero.setText(Facture.getNumero()); + TextDateReception.setText(Facture.getDateCreation()+" "+Facture.getHeurCreation()); + TextTypeReglement.setText(Facture.getTypeReglementString()); + TextLocalReception.setText(Facture.getLocal()); + TextEtatReglement.setText(Facture.getEtatReglementString()); + + Profile profile = Facture.getProfile(); + TextProfile.setText(profile.getNom()+" "+profile.getPrenom()); + + TotalTVA.setText(Adaptateur.FloatToStringEspaceCurrency(Facture.getFTotalTVA())); + Remise.setText(Adaptateur.FloatToStringEspaceCurrency(Facture.getFRemise())); + NetAPayer.setText(Adaptateur.FloatToStringEspaceCurrency(Facture.getFNetAPayer())); + Timbre.setText(Adaptateur.FloatToStringEspaceCurrency(Facture.getFTimbre())); + TotalHTNet.setText(Adaptateur.FloatToStringEspaceCurrency(Facture.getFTotalHorsTaxNet())); + + Fournisseur Frs = Facture.getFournisseur(); + TextNomFrs.setText(Frs.getNom()); + TextSpecialiteFrs.setText(Frs.getSpecialite()); + TextFormesFrs.setText(Frs.getFormes()); + TextAdresseFrs.setText(Frs.getAdresse()); + TextTele1Frs.setText(Frs.getTele1()); + TextTele2Frs.setText(Frs.getTele2()); + + ObservableList ProduitList = Facture.getListProduit(); + TableViewListeProduit.setItems(ProduitList); + TableViewListeProduit.refresh(); + + if(Facture.getBonReception() == null){ + TabBonReception.setText(""); + TabBonReception.setDisable(true); + }else{ + ObservableList ListBonReception = Facture.getListeBonReception(); + TableViewBonReception.setItems(ListBonReception); + TableViewBonReception.refresh(); + } + + PaneFactureFrsDetail.setVisible(true); + AnchorPaneLoading.setVisible(false); + } + }); + ThreadFactureFrsDetail.start(); + } + +} diff --git a/src/main/java/Controllers/FactureFrs/FactureFrsGestionController.java b/src/main/java/Controllers/FactureFrs/FactureFrsGestionController.java new file mode 100644 index 0000000..bb60e09 --- /dev/null +++ b/src/main/java/Controllers/FactureFrs/FactureFrsGestionController.java @@ -0,0 +1,487 @@ +/* + * 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 Controllers.FactureFrs; + + +import Models.FactureFrs.FactureFrs; +import Models.FactureFrs.FactureFrsDB; +import Models.Fournisseur.FournisseurDB; +import Models.Stock.StockDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.ResourceBundle; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableColumn.CellDataFeatures; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Callback; +import org.controlsfx.control.textfield.TextFields; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class FactureFrsGestionController implements Initializable { + + @FXML private AnchorPane AnchorPaneFactureFrsGestion ; + + @FXML private ProgressBar ProgressBarFactureFrs; + + @FXML private Button ButtonSearchFactureFrs; + + @FXML public TableView TableViewBonReception; + @FXML public TableColumn TabColNumero; + @FXML public TableColumn TabColFrs; + @FXML public TableColumn TabColDate; + @FXML public TableColumn TabColHeur; + @FXML public TableColumn TabColLocalReception; + @FXML public TableColumn TabColNetPayer; + @FXML public TableColumnTabColDetail ; + + @FXML public TextField TextFieldNumero ; + @FXML public TextField TextFieldFournisseur ; + @FXML public DatePicker DatePickerDateReception; + @FXML public ChoiceBox ChoiceBoxLocalReception ; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount; + @FXML private ChoiceBox NbrLigne ; + + private Service ThreadSearchFactureFrs; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + String LocalReception = ""; + String IdFournisseur = ""; + + public ArrayList ListFournisseur = new ArrayList<>(); + public ArrayList ListLocale = new ArrayList<>(); + + DecimalFormat Formatter = new DecimalFormat("##,###.## "); + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + setDefaultFormData(); + + TabColNumero.setCellValueFactory(new PropertyValueFactory("Numero")); + + TabColFrs.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColFrs.getStyleClass().add("Center"); + TabColFrs.setCellValueFactory(new Callback, ObservableValue>() { + @Override + public ObservableValue call(CellDataFeatures data) { + return new SimpleStringProperty(data.getValue().getFournisseur().getNom()); + } + }); + + TabColDate.setCellValueFactory(new PropertyValueFactory("DateCreation")); + TabColDate.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDate.getStyleClass().add("Center"); + + TabColHeur.setCellValueFactory(new PropertyValueFactory("HeurCreation")); + TabColHeur.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColHeur.getStyleClass().add("Center"); + + TabColLocalReception.setCellValueFactory(new PropertyValueFactory("Local")); + TabColLocalReception.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColLocalReception.getStyleClass().add("Center"); + + TabColNetPayer.setCellValueFactory(new PropertyValueFactory("NetAPayer")); + TabColNetPayer.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNetPayer.getStyleClass().add("Center"); + TabColNetPayer.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if(item!= null){ + Text text = new Text(Formatter.format(Float.parseFloat(item))); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + TabColDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + TextFieldFournisseur.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + if(newValue.contains(" - ")){ + String[] array = newValue.split(" - ", -1); + IdFournisseur = array[0]; + } + } + }); + + ChoiceBoxLocalReception.valueProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue ov, String t, String ValLocal) { + LocalReception = ValLocal; + } + }); + + ButtonSearchFactureFrs.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchFactureFrs(); + } + }); + + AnchorPaneFactureFrsGestion.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchFactureFrs(); + } + } + }); + + GestionSearchFactureFrs(); + } + + + + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureFrs/FactureFrsDetail.fxml")); + Parent ParentFxmlFournisseur = (Parent)fxmlLoader.load(); + + FactureFrs FournisseurList = ((FactureFrs)getTableRow().getItem()); + + FactureFrsDetailController FactureFrsDetail = fxmlLoader.getController(); + FactureFrsDetail.setDataFactureDetailFrs(FournisseurList.getIdFactureFrs()); + FactureFrsDetail.PaneSucessFrs.setVisible(false); + + AnchorPaneFactureFrsGestion.getChildren().clear(); + AnchorPaneFactureFrsGestion.getChildren().add(ParentFxmlFournisseur); + } catch (Exception ex) { + System.err.println("FactureFrsGestionController ButtonCell ! \n"+ex.getMessage()); + } + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + @FXML + private void FactureFrsBonReceptionAjouterButtonAction(ActionEvent event) throws IOException { + AnchorPaneFactureFrsGestion.getChildren().clear(); + AnchorPaneFactureFrsGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/FactureFrs/FactureFrsBonReceptionAjouter.fxml"))); + } + + + @FXML + private void FactureFrsAjouterButtonAction(ActionEvent event) throws IOException { + AnchorPaneFactureFrsGestion.getChildren().clear(); + AnchorPaneFactureFrsGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/FactureFrs/FactureFrsAjouter.fxml"))); + } + + private void setDefaultFormData() + { + ProgressBarFactureFrs.setVisible(true); + + ThreadSearchFactureFrs = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + ListFournisseur = new FournisseurDB().getAllFournisseur("CONCAT(`id_fourisseur`,' - ',`nom`)"); + TextFields.bindAutoCompletion(TextFieldFournisseur, ListFournisseur); + + ListLocale = new StockDB().getAllListLocal(); + ChoiceBoxLocalReception.getItems().addAll(ListLocale); + return null; + } + }; + } + }; + ThreadSearchFactureFrs.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFactureFrs.setVisible(false); + + } + }); + ThreadSearchFactureFrs.start(); + } + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchFactureFrs() + { + ProgressBarFactureFrs.setVisible(true); + + ButtonSearchFactureFrs.setDisable(true); + + ThreadSearchFactureFrs = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateReception = ""; + if(DatePickerDateReception.getValue() != null){ + DateReception = DatePickerDateReception.getValue().toString(); + } + + + ObservableList ListFactureFrss = new FactureFrsDB().SearchFactureFrsGestion( + position, + nbrligne, + TextFieldNumero.getText(), + IdFournisseur, + LocalReception, + DateReception); + + TableViewBonReception.setItems(ListFactureFrss); + + totalcount = new FactureFrsDB().nbrFactureFrsGestion(TextFieldNumero.getText(), IdFournisseur, LocalReception, DateReception); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchFactureFrs.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFactureFrs.setVisible(false); + ButtonSearchFactureFrs.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchFactureFrs.start(); + } + + + private void NextLastSearchFactureFrs(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarFactureFrs.setVisible(true); + + ButtonSearchFactureFrs.setDisable(true); + + ThreadSearchFactureFrs = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateReception = ""; + if(DatePickerDateReception.getValue() != null){ + DateReception = DatePickerDateReception.getValue().toString(); + } + + ObservableList ListFactureFrs = new FactureFrsDB().SearchFactureFrsGestion(ParmPosition, ParamNbrligne, TextFieldNumero.getText(), IdFournisseur, LocalReception, DateReception); + + TableViewBonReception.setItems(ListFactureFrs); + + return null; + } + }; + } + }; + + ThreadSearchFactureFrs.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFactureFrs.setVisible(false); + ButtonSearchFactureFrs.setDisable(false); + } + }); + ThreadSearchFactureFrs.start(); + } + + private void GestionSearchFactureFrs() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchFactureFrs(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchFactureFrs(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchFactureFrs(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + + +} diff --git a/src/main/java/Controllers/Fournisseur/FournisseurGererController.java b/src/main/java/Controllers/Fournisseur/FournisseurGererController.java new file mode 100644 index 0000000..77d1c29 --- /dev/null +++ b/src/main/java/Controllers/Fournisseur/FournisseurGererController.java @@ -0,0 +1,344 @@ +package Controllers.Fournisseur; + +import Controllers.Traitement.contro; +import Models.Fournisseur.Fournisseur; +import Models.Fournisseur.FournisseurContactDB; +import Models.Fournisseur.FournisseurContactList; +import Models.Fournisseur.FournisseurDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class FournisseurGererController implements Initializable { + + @FXML public AnchorPane PanePrincipalFournisseur; + @FXML public AnchorPane AnchorPaneLoadingFournisseur; + + @FXML public Text TitreSecondaire; + + @FXML private AnchorPane PaneFournisseurAjouter; + + @FXML public Button AjouterContactFrsButton; + @FXML public Button ButtonGererAjouterFrs; + @FXML public Button ButtonGererModifierFrs; + + @FXML public TextField TextFieldNomFrs ; + @FXML public TextField TextFieldSpecialiteFrs ; + @FXML public TextField TextFieldTele1Frs ; + @FXML public TextField TextFieldTele2Frs ; + @FXML public TextField TextFieldFaxFrs ; + @FXML public TextField TextFieldMailFrs ; + @FXML public TextField TextFieldSiteWebFrs ; + @FXML public TextField TextFieldAdresseFrs ; + @FXML public ChoiceBox ChoiceBoxFormes; + + + @FXML public Text TextNomFrs ; + @FXML public Text TextSpecialiteFrs ; + @FXML public Text TextTele1Frs ; + @FXML public Text TextTele2Frs ; + @FXML public Text TextFaxFrs ; + @FXML public Text TextMailFrs ; + @FXML public Text TextSiteWebFrs ; + @FXML public Text TextAdresseFrs ; + + @FXML public TableView TableViewFournisseurContactFrs; + @FXML public TableColumn TabColCodeContactFrs; + @FXML public TableColumn TabColNomContactFrs; + @FXML public TableColumn TabColPrenomContactFrs; + @FXML public TableColumn TabColTele1ContactFrs; + @FXML public TableColumn TabColTele2ContactFrs; + @FXML public TableColumn TabColEmailContactFrs; + + @FXML public TextField TextFieldNomContactFrs ; + @FXML public TextField TextFieldPrenomContactFrs ; + @FXML public TextField TextFieldTele1ContactFrs ; + @FXML public TextField TextFieldTele2ContactFrs ; + @FXML public TextField TextFieldMailContactFrs ; + + @FXML public Text TextNomCltContactFrs ; + @FXML public Text TextPrenomCltContactFrs ; + @FXML public Text TextTele1CltContactFrs ; + @FXML public Text TextTele2CltContactFrs ; + @FXML public Text TextMailCltContactFrs ; + + public ObservableList ObservableListContactFrs = FXCollections.observableArrayList(); + + private Service ThreadFournisseurGerer; + + contro Controle = new contro(); + + Fournisseur Frs; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + ChoiceBoxFormes.setItems(FXCollections.observableArrayList("SARL","EURL","SAS","SASU","SA","SNC")); + ChoiceBoxFormes.getSelectionModel().selectFirst(); + + TabColCodeContactFrs.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColCodeContactFrs.getStyleClass().add("Center"); + TabColCodeContactFrs.setCellValueFactory(new PropertyValueFactory("Code")); + + TabColNomContactFrs.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNomContactFrs.getStyleClass().add("Center"); + TabColNomContactFrs.setCellValueFactory(new PropertyValueFactory("Nom")); + + + TabColPrenomContactFrs.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColPrenomContactFrs.getStyleClass().add("Center"); + TabColPrenomContactFrs.setCellValueFactory(new PropertyValueFactory("Prenom")); + + + TabColTele1ContactFrs.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTele1ContactFrs.getStyleClass().add("Center"); + TabColTele1ContactFrs.setCellValueFactory(new PropertyValueFactory("Tele1")); + + TabColTele2ContactFrs.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTele2ContactFrs.getStyleClass().add("Center"); + TabColTele2ContactFrs.setCellValueFactory(new PropertyValueFactory("Tele2")); + + + TabColEmailContactFrs.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColEmailContactFrs.getStyleClass().add("Center"); + TabColEmailContactFrs.setCellValueFactory(new PropertyValueFactory("Mail")); + + + AjouterContactFrsButton.getStyleClass().add("btn-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + AjouterContactFrsButton.setGraphic(buttonGraphic); + + + //Bouton Ajouter + ButtonGererAjouterFrs.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent e) { + if( Controle.ContrNull(TextFieldNomFrs, TextNomFrs) && + Controle.ContrNull(TextFieldSpecialiteFrs, TextSpecialiteFrs) && + Controle.ContrNumeriqueNotnull(TextFieldTele1Frs, TextTele1Frs) && + Controle.ContrNumerique(TextFieldTele2Frs, TextTele2Frs) && + Controle.ContrNumerique(TextFieldFaxFrs, TextFaxFrs) && + Controle.ContrNull(TextFieldAdresseFrs, TextAdresseFrs) + ){ + + + Fournisseur fournisseur = SetDataFournissuer(); + FournisseurDB FrsDB = new FournisseurDB(); + fournisseur = FrsDB.SetFournisseurDB(fournisseur); + + if(fournisseur.getCode()!= null){ + PaneFournisseurAjouter.getChildren().clear(); + try { + PaneFournisseurAjouter.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Fournisseur/FournisseurGestion.fxml"))); + } catch (IOException ex) { + Logger.getLogger(FournisseurGererController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + } + } + }); + + } + + + @FXML + public void clickItem(MouseEvent event) + { + if (event.getClickCount() == 2) //Checking double click + { + FournisseurContactList FrsContact = TableViewFournisseurContactFrs.getSelectionModel().getSelectedItem(); + TextFieldNomContactFrs.setText(FrsContact.getNom()); + TextFieldPrenomContactFrs.setText(FrsContact.getPrenom()); + TextFieldTele1ContactFrs.setText(FrsContact.getTele1()); + TextFieldTele2ContactFrs.setText(FrsContact.getTele2()); + TextFieldMailContactFrs.setText(FrsContact.getMail()); + + } + } + + public Fournisseur SetDataFournissuer(){ + Fournisseur fournisseur= new Fournisseur(); + fournisseur.setNom(TextFieldNomFrs.getText()); + fournisseur.setSpecialite(TextFieldSpecialiteFrs.getText()); + fournisseur.setFormes(ChoiceBoxFormes.getValue().toString()); + fournisseur.setTele1(TextFieldTele1Frs.getText()); + fournisseur.setTele2(TextFieldTele2Frs.getText()); + fournisseur.setFax(TextFieldFaxFrs.getText()); + fournisseur.setMail(TextFieldMailFrs.getText()); + fournisseur.setSiteWeb(TextFieldSiteWebFrs.getText()); + fournisseur.setAdresse(TextFieldAdresseFrs.getText()); + fournisseur.setContactFrs(ObservableListContactFrs); + return fournisseur; + } + + @FXML + private void AjouterContactFrsButtonAction(ActionEvent event) throws IOException { + + if( Controle.ContrNull(TextFieldNomContactFrs, TextNomCltContactFrs) && + Controle.ContrNull(TextFieldPrenomContactFrs, TextPrenomCltContactFrs) && + Controle.ContrNumeriqueNotnull(TextFieldTele1ContactFrs, TextTele1CltContactFrs) && + Controle.ContrNumerique(TextFieldTele2ContactFrs, TextTele2CltContactFrs) ){ + int indise = 0; + boolean notexiste = true; + while(indise(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + Frs = new FournisseurDB().GetFournisseurDB(CodeFrs); + + return null; + } + }; + } + }; + ThreadFournisseurGerer.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ObservableListContactFrs = Frs.getContactFrs(); + TableViewFournisseurContactFrs.setItems(Frs.getContactFrs()); + + TextFieldNomFrs.setText(Frs.getNom()); + TextFieldSpecialiteFrs.setText(Frs.getSpecialite()) ; + TextFieldTele1Frs.setText(Frs.getTele1()) ; + TextFieldTele2Frs.setText(Frs.getTele2()) ; + TextFieldFaxFrs.setText(Frs.getFax()) ; + TextFieldMailFrs.setText(Frs.getMail()) ; + TextFieldSiteWebFrs.setText(Frs.getSiteWeb()) ; + TextFieldAdresseFrs.setText(Frs.getAdresse()) ; + + if(Frs.getFormes() != null){ + if(Frs.getFormes().equals("SARL")){ + ChoiceBoxFormes.getSelectionModel().select(0); + }else if(Frs.getFormes().equals("EURL")){ + ChoiceBoxFormes.getSelectionModel().select(1); + }else if(Frs.getFormes().equals("SAS")){ + ChoiceBoxFormes.getSelectionModel().select(2); + }else if(Frs.getFormes().equals("SASU")){ + ChoiceBoxFormes.getSelectionModel().select(3); + }else if(Frs.getFormes().equals("SA")){ + ChoiceBoxFormes.getSelectionModel().select(4); + }else if(Frs.getFormes().equals("SNC")){ + ChoiceBoxFormes.getSelectionModel().select(5); + } + } + + PanePrincipalFournisseur.setVisible(true); + AnchorPaneLoadingFournisseur.setVisible(false); + + } + }); + ThreadFournisseurGerer.start(); + + + ButtonGererModifierFrs.setOnAction(new EventHandler() { + + @Override + public void handle(ActionEvent e) { + + if( Controle.ContrNull(TextFieldNomFrs, TextNomFrs) && + Controle.ContrNull(TextFieldSpecialiteFrs, TextSpecialiteFrs) && + Controle.ContrNumeriqueNotnull(TextFieldTele1Frs, TextTele1Frs) && + Controle.ContrNumerique(TextFieldTele2Frs, TextTele2Frs) && + Controle.ContrNumerique(TextFieldFaxFrs, TextFaxFrs) && + Controle.ContrNull(TextFieldAdresseFrs, TextAdresseFrs) + ){ + Fournisseur fournisseur = SetDataFournissuer(); + fournisseur.setCode(CodeFrs); + FournisseurDB FrourDB= new FournisseurDB(); + boolean ResultUpdate = FrourDB.UpdFournisseurDB(fournisseur); + if(ResultUpdate){ + FournisseurContactDB FrsContactDB= new FournisseurContactDB(); + ObservableList ObservableNewListContactFrs = FXCollections.observableArrayList(); + for(FournisseurContactList ContactList : ObservableListContactFrs){ + if(ContactList.getCode().length()>0){ + FrsContactDB.UpdListFournisseurContact(ContactList.getCode(), ContactList.getNom(), ContactList.getPrenom(), ContactList.getTele1(), ContactList.getTele2(), ContactList.getMail()); + }else{ + ObservableNewListContactFrs.add(ContactList); + } + } + if(ObservableNewListContactFrs.size()>0){ + FrsContactDB.SetListFournisseurContact(ObservableNewListContactFrs, CodeFrs); + PaneFournisseurAjouter.getChildren().clear(); + } + try { + PaneFournisseurAjouter.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Fournisseur/FournisseurGestion.fxml"))); + } catch (IOException ex) { + Logger.getLogger(FournisseurGererController.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + } + }); + } + + +} diff --git a/src/main/java/Controllers/Fournisseur/FournisseurGestionController.java b/src/main/java/Controllers/Fournisseur/FournisseurGestionController.java new file mode 100644 index 0000000..bbe2b8f --- /dev/null +++ b/src/main/java/Controllers/Fournisseur/FournisseurGestionController.java @@ -0,0 +1,395 @@ +package Controllers.Fournisseur; + + +import Models.Fournisseur.FournisseurDB; +import Models.Fournisseur.FournisseurGestionList; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.Label; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class FournisseurGestionController implements Initializable { + + @FXML private AnchorPane PaneFournisseurGestion ; + + @FXML private ProgressBar ProgressBarFournisseurGestion; + + @FXML public TableView TableViewFournisseurGestion; + @FXML public TableColumn TabColCodeFournisseur; + @FXML public TableColumn TabColNomFournisseur; + @FXML public TableColumn TabColTele1Fournisseur; + @FXML public TableColumn TabColTele2Fournisseur; + @FXML public TableColumn TabColFaxFournisseur; + @FXML public TableColumn TabColMailFournisseur; + @FXML public TableColumn TabColAdresseFournisseur; + @FXML public TableColumnTabColDetail ; + + @FXML public TextField TextFieldCodeFournisseur ; + @FXML public TextField TextFieldNomFournisseur ; + @FXML public TextField TextFieldAdresseFournisseur ; + @FXML public TextField TextFieldTeleFournisseur ; + @FXML public TextField TextFieldFaxFournisseur ; + @FXML public TextField TextFieldMailFournisseur ; + + @FXML private Button ButtonSearchFournisseurGestion; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + + private Service ThreadSearchFournisseurGestion; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + //comboboxnombre des lignes tableview + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TableViewFournisseurGestion.setEditable(true); + + TabColCodeFournisseur.setStyle( "-fx-alignment: CENTER;");TabColCodeFournisseur.getStyleClass().add("Center"); + TabColCodeFournisseur.setCellValueFactory(new PropertyValueFactory("Code")); + + TabColNomFournisseur.setStyle( "-fx-alignment: CENTER;");TabColNomFournisseur.getStyleClass().add("Center"); + TabColNomFournisseur.setCellValueFactory(new PropertyValueFactory("Nom")); + + TabColTele1Fournisseur.setStyle( "-fx-alignment: CENTER;");TabColTele1Fournisseur.getStyleClass().add("Center"); + TabColTele1Fournisseur.setCellValueFactory(new PropertyValueFactory("Tele1")); + + TabColTele2Fournisseur.setStyle( "-fx-alignment: CENTER;");TabColTele2Fournisseur.getStyleClass().add("Center"); + TabColTele2Fournisseur.setCellValueFactory(new PropertyValueFactory("Tele2")); + + TabColFaxFournisseur.setStyle( "-fx-alignment: CENTER;");TabColFaxFournisseur.getStyleClass().add("Center"); + TabColFaxFournisseur.setCellValueFactory(new PropertyValueFactory("Fax")); + + TabColMailFournisseur.setStyle( "-fx-alignment: CENTER;");TabColMailFournisseur.getStyleClass().add("Center"); + TabColMailFournisseur.setCellValueFactory(new PropertyValueFactory("Mail")); + + TabColAdresseFournisseur.setStyle( "-fx-alignment: CENTER;");TabColAdresseFournisseur.getStyleClass().add("Center"); + TabColAdresseFournisseur.setCellValueFactory(new PropertyValueFactory("Adresse")); + + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + TabColDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + ButtonSearchFournisseurGestion.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchFournisseurGestion(); + } + }); + + PaneFournisseurGestion.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchFournisseurGestion(); + } + } + }); + + GestionSearchFournisseur(); + + + } + + + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + + + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Fournisseur/FournisseurGerer.fxml")); + Parent ParentFxmlFournisseur = (Parent)fxmlLoader.load(); + + FournisseurGererController FournisseurGerer = fxmlLoader.getController(); + + FournisseurGestionList FournisseurList = ((FournisseurGestionList)getTableRow().getItem()); + FournisseurGerer.SetDataFournissuer(FournisseurList.getCode()); + + + PaneFournisseurGestion.getChildren().clear(); + PaneFournisseurGestion.getChildren().add(ParentFxmlFournisseur); + } catch (IOException ex) { + Logger.getLogger(FournisseurGestionController.class.getName()).log(Level.SEVERE, null, ex); + } + + + + + + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + @FXML + private void FournisseurAjouterButtonAction(ActionEvent event) throws IOException { + PaneFournisseurGestion.getChildren().clear(); + PaneFournisseurGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Fournisseur/FournisseurGerer.fxml"))); + } + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchFournisseurGestion() + { + ProgressBarFournisseurGestion.setVisible(true); + + ButtonSearchFournisseurGestion.setDisable(true); + + ThreadSearchFournisseurGestion = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + ObservableList ListFournisseurGestions = new FournisseurDB().SearchFournisseurGestion( + position, + nbrligne, + TextFieldCodeFournisseur.getText(), + TextFieldNomFournisseur.getText(), + TextFieldAdresseFournisseur.getText(), + TextFieldTeleFournisseur.getText(), + TextFieldFaxFournisseur.getText(), + TextFieldMailFournisseur.getText()); + + TableViewFournisseurGestion.setItems(ListFournisseurGestions); + + totalcount = new FournisseurDB().nbrFournisseurGestion(TextFieldCodeFournisseur.getText(), TextFieldNomFournisseur.getText(), TextFieldAdresseFournisseur.getText(), TextFieldTeleFournisseur.getText(), TextFieldFaxFournisseur.getText(), TextFieldMailFournisseur.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchFournisseurGestion.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFournisseurGestion.setVisible(false); + ButtonSearchFournisseurGestion.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchFournisseurGestion.start(); + } + + + private void NextLastSearchFournisseurGestion(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarFournisseurGestion.setVisible(true); + + ButtonSearchFournisseurGestion.setDisable(true); + + ThreadSearchFournisseurGestion = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + ObservableList ListFournisseurGestions = new FournisseurDB().SearchFournisseurGestion(ParmPosition, ParamNbrligne, TextFieldCodeFournisseur.getText(), TextFieldNomFournisseur.getText(), TextFieldAdresseFournisseur.getText(), TextFieldTeleFournisseur.getText(), TextFieldFaxFournisseur.getText(), TextFieldMailFournisseur.getText()); + + TableViewFournisseurGestion.setItems(ListFournisseurGestions); + + return null; + } + }; + } + }; + + ThreadSearchFournisseurGestion.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarFournisseurGestion.setVisible(false); + ButtonSearchFournisseurGestion.setDisable(false); + } + }); + ThreadSearchFournisseurGestion.start(); + } + + private void GestionSearchFournisseur() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchFournisseurGestion(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchFournisseurGestion(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchFournisseurGestion(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + +} diff --git a/src/main/java/Controllers/Home/AideController.java b/src/main/java/Controllers/Home/AideController.java new file mode 100644 index 0000000..6866653 --- /dev/null +++ b/src/main/java/Controllers/Home/AideController.java @@ -0,0 +1,38 @@ +package Controllers.Home; + +import java.net.URL; +import java.util.ResourceBundle; +import javafx.animation.FadeTransition; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.layout.AnchorPane; +import javafx.util.Duration; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class AideController implements Initializable { + + @FXML private AnchorPane AnchorPaneAide ; + + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + FadeTransitionNode(AnchorPaneAide); + + } + + public void FadeTransitionNode(Node AnchorPane){ + FadeTransition ft = new FadeTransition(Duration.millis(200), AnchorPane); + ft.setFromValue(0); + ft.setToValue(1.0); + ft.play(); + } + +} diff --git a/src/main/java/Controllers/Home/ContactController.java b/src/main/java/Controllers/Home/ContactController.java new file mode 100644 index 0000000..4f95564 --- /dev/null +++ b/src/main/java/Controllers/Home/ContactController.java @@ -0,0 +1,44 @@ +package Controllers.Home; + +import java.net.URL; +import java.util.ResourceBundle; +import javafx.animation.FadeTransition; +import javafx.collections.FXCollections; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.control.ChoiceBox; +import javafx.scene.layout.AnchorPane; +import javafx.util.Duration; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class ContactController implements Initializable { + + @FXML private AnchorPane AnchorPaneContact ; + + @FXML public ChoiceBox ChoiceBoxMsgSujet; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + ChoiceBoxMsgSujet.setItems(FXCollections.observableArrayList("Une question relative à un problème technique.", + "Besoin d'une nouvelle fonctionnalité.")); + + FadeTransitionNode(AnchorPaneContact); + + } + + public void FadeTransitionNode(Node AnchorPane){ + FadeTransition ft = new FadeTransition(Duration.millis(200), AnchorPane); + ft.setFromValue(0); + ft.setToValue(1.0); + ft.play(); + } + +} diff --git a/src/main/java/Controllers/Home/DashboardController.java b/src/main/java/Controllers/Home/DashboardController.java new file mode 100644 index 0000000..d2a1abb --- /dev/null +++ b/src/main/java/Controllers/Home/DashboardController.java @@ -0,0 +1,119 @@ +package Controllers.Home; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Models.Home.HomeDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.net.URL; +import java.util.Map; +import java.util.ResourceBundle; +import javafx.animation.FadeTransition; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.EventHandler; +import javafx.scene.Node; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.chart.BarChart; +import javafx.scene.chart.PieChart; +import javafx.scene.chart.XYChart; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Duration; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class DashboardController implements Initializable { + + @FXML private AnchorPane AnchorPaneDashboard ; + + @FXML private Text TextYearDashboard; + @FXML private Text TextNbrClient; + @FXML private Text TextNbrVente; + @FXML private Text TextNbrCheque; + + @FXML public BarChart BarChartVente; + @FXML private PieChart PieChartVente; + + @FXML private ProgressBar ProgressBarLoading; + + private Service ThreadDashboard; + + String Year = Adaptateur.getDefaultCurrentDate("yyyy"); + + HomeDB Homedb = new HomeDB(); + + XYChart.Series series1 = new XYChart.Series(); + ObservableList pieChartData = FXCollections.observableArrayList(); + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + TextYearDashboard.setText("L'année "+Year); + + FadeTransitionNode(AnchorPaneDashboard); + + ProgressBarLoading.setVisible(true); + ThreadDashboard = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + series1 = Homedb.HomeChiffreAffaireByMois(); + series1.setName(ParametreSystem.NomLocalPC); + + pieChartData = Homedb.HomeVente(Year); + + NombreVCV(); + + return null; + } + }; + } + }; + ThreadDashboard.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + BarChartVente.getData().addAll(series1); + PieChartVente.setData(pieChartData); + ProgressBarLoading.setVisible(false); + + } + }); + ThreadDashboard.start(); + + + + } + + public void FadeTransitionNode(Node AnchorPane){ + FadeTransition ft = new FadeTransition(Duration.millis(200), AnchorPane); + ft.setFromValue(0); + ft.setToValue(1.0); + ft.play(); + } + + + + + + + private void NombreVCV() + { + Map map = Homedb.HomeNbr(); + TextNbrClient.setText(map.get("client").toString()); + TextNbrVente.setText(map.get("factureclt").toString()); + TextNbrCheque.setText(map.get("cheque").toString()); + } + + +} diff --git a/src/main/java/Controllers/Home/LogicielController.java b/src/main/java/Controllers/Home/LogicielController.java new file mode 100644 index 0000000..c926453 --- /dev/null +++ b/src/main/java/Controllers/Home/LogicielController.java @@ -0,0 +1,35 @@ +package Controllers.Home; + +import java.net.URL; +import java.util.ResourceBundle; +import javafx.animation.FadeTransition; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.layout.AnchorPane; +import javafx.util.Duration; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class LogicielController implements Initializable { + + @FXML private AnchorPane AnchorPaneLogiciel ; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + FadeTransitionNode(AnchorPaneLogiciel); + } + + public void FadeTransitionNode(Node AnchorPane){ + FadeTransition ft = new FadeTransition(Duration.millis(200), AnchorPane); + ft.setFromValue(0); + ft.setToValue(1.0); + ft.play(); + } + +} diff --git a/src/main/java/Controllers/Home/MentionsController.java b/src/main/java/Controllers/Home/MentionsController.java new file mode 100644 index 0000000..d8fe655 --- /dev/null +++ b/src/main/java/Controllers/Home/MentionsController.java @@ -0,0 +1,35 @@ +package Controllers.Home; + +import java.net.URL; +import java.util.ResourceBundle; +import javafx.animation.FadeTransition; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.layout.AnchorPane; +import javafx.util.Duration; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class MentionsController implements Initializable { + + @FXML private AnchorPane AnchorPaneMentions ; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + FadeTransitionNode(AnchorPaneMentions); + } + + public void FadeTransitionNode(Node AnchorPane){ + FadeTransition ft = new FadeTransition(Duration.millis(200), AnchorPane); + ft.setFromValue(0); + ft.setToValue(1.0); + ft.play(); + } + +} diff --git a/src/main/java/Controllers/Main.java b/src/main/java/Controllers/Main.java new file mode 100644 index 0000000..f1bb36a --- /dev/null +++ b/src/main/java/Controllers/Main.java @@ -0,0 +1,11 @@ +package Controllers; + +/** + * @author Maher Ben Tili + */ +public class Main { + + public static void main(String[] args) { + App.main(args); + } +} diff --git a/src/main/java/Controllers/PrincipalController.java b/src/main/java/Controllers/PrincipalController.java new file mode 100644 index 0000000..a8e9bbf --- /dev/null +++ b/src/main/java/Controllers/PrincipalController.java @@ -0,0 +1,335 @@ +package Controllers; + +import Controllers.Traitement.MyWindow; +import Models.User.User; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.control.Accordion; +import javafx.scene.control.Label; +import javafx.scene.control.TitledPane; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.Pane; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + + + +public class PrincipalController implements Initializable{ + + @FXML public AnchorPane window ; + @FXML public AnchorPane Content ; + @FXML public Pane TitrePane; + @FXML public Label UsernomprenomBlad; + @FXML public Label LabelDefaultLocal; + + @FXML public ImageView ImageViewLogoPrincipal; + @FXML public ImageView ImageViewProfile; + + @FXML public Accordion accord; + @FXML public TitledPane TitledPaneAccueil; + @FXML public TitledPane TitledPaneAchat; + @FXML public TitledPane TitledPaneVente; + @FXML public TitledPane TitledPaneStock; + @FXML public TitledPane TitledPaneDiver; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + setImageLogo(); + + UsernomprenomBlad.setText(User.nom+" "+User.prenom); + + LabelDefaultLocal.setText(User.UserLocal); + + ImageViewProfile.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + try { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/User/Profile.fxml"))); + } catch (IOException ex) { + Logger.getLogger(PrincipalController.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + + + /**********************Accueil************************/ + try { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Home/Dashboard.fxml"))); + } catch (IOException ex) { + Logger.getLogger(PrincipalController.class.getName()).log(Level.SEVERE, null, ex); + } + accord.setExpandedPane(TitledPaneAccueil); + + + + /********************get Width and Height Content **************************/ + + Content.widthProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, Number oldSceneWidth, Number newSceneWidth) { + MyWindow.PrincipalContentWidth = newSceneWidth; + } + }); + + Content.heightProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, Number oldSceneHeight, Number newSceneHeight) { + MyWindow.PrincipalContentHeight = newSceneHeight; + } + }); + + } + + + public void DefaultSelectedTitledPane(Integer number_titled_Pane){ + if(number_titled_Pane == 1){ + accord.setExpandedPane(TitledPaneAccueil); + }else if(number_titled_Pane == 2){ + accord.setExpandedPane(TitledPaneAchat); + }else if(number_titled_Pane == 3){ + accord.setExpandedPane(TitledPaneVente); + }else if(number_titled_Pane == 4){ + accord.setExpandedPane(TitledPaneStock); + }else if(number_titled_Pane == 5){ + accord.setExpandedPane(TitledPaneDiver); + } + } + + /*********************************Accueil****************************************/ + @FXML + private void DashbordButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Home/Dashboard.fxml"))); + } + + @FXML + private void AideButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Home/Aide.fxml"))); + } + + @FXML + private void ContactButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Home/Contact.fxml"))); + } + + @FXML + private void LogicielButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Home/Logiciel.fxml"))); + } + + @FXML + private void MentionsButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Home/Mentions.fxml"))); + } + + /*********************************Pour l'Achat************************************/ + @FXML + private void FournisseurButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Fournisseur/FournisseurGestion.fxml"))); + } + + @FXML + private void BonReceptionButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/BonReceptionFrs/BonReceptionGestionFrs.fxml"))); + } + + @FXML + private void FactureFrsButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/FactureFrs/FactureFrsGestion.fxml"))); + } + + @FXML + private void ReglementButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Reglement/ReglementGestion.fxml"))); + } + /*********************************Pour la Vente***********************************/ + + @FXML + private void VenteRapideCltButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/VenteRapideClt/VenteRapideClt.fxml"))); + } + + @FXML + private void PasserCommandeCltButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/CommandeClt/CommandeCltGestion.fxml"))); + } + + @FXML + private void BonLivraisonCltButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltGestion.fxml"))); + } + + @FXML + private void FactureCltButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/FactureClt/FactureCltGestion.fxml"))); + } + + @FXML + private void MenuClientButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Client/MenuClient.fxml"))); + } + + @FXML + private void DevisCltButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Devis/DevisCltGestion.fxml"))); + } + + @FXML + private void TraiteCltButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/TraiteClt/TraiteCltGestion.fxml"))); + } + + + + /*********************************Pour Produit**********************************/ + @FXML + private void AjouterProduitButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Produit/AjouterProduit.fxml"))); + } + + + @FXML + private void GestionProduitButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Produit/GestionProduit.fxml"))); + } + + + + + /*********************************Pour l'utilisateur***********************************/ + @FXML + private void AddUserButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/User/AddUser.fxml"))); + + } + + @FXML + private void GestionUtilisateurButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/User/GestionUtilisateur.fxml"))); + + } + + + + /********************************* Stock ***********************************/ + + @FXML + private void BondeSortieButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Stock/BondeSortie.fxml"))); + } + + @FXML + private void BondeEntrerButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Stock/BondeEntrer.fxml"))); + } + + @FXML + private void EtatStockButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Stock/EtatStockCategorie.fxml"))); + } + + /********************************* Diver ***********************************/ + + @FXML + private void ChequeCltButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/ChequeClt/ChequeCltGestion.fxml"))); + } + + @FXML + private void CaisseEntreButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Caisse/CaisseEntre.fxml"))); + } + + @FXML + private void CaisseSortieButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Caisse/CaisseSortie.fxml"))); + } + + + @FXML + private void FraisButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Caisse/FraisGestion.fxml"))); + } + + + private void setImageLogo() + { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + try { + // optional, but recommended + // process XML securely, avoid attacks like XML External Entities (XXE) + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + + // parse XML file + DocumentBuilder db = dbf.newDocumentBuilder(); + + //PowerERP\conf\logo.xml + Document doc = db.parse(new File("./conf/logo.xml")); + + doc.getDocumentElement().normalize(); + + Element elementCNX = (Element) doc.getElementsByTagName("Principal").item(0); + + String pathLogo = elementCNX.getElementsByTagName("PathImage").item(0).getTextContent(); + FileInputStream fis = new FileInputStream(pathLogo); + ImageViewLogoPrincipal.setImage(new Image(fis)); + + ImageViewLogoPrincipal.setFitWidth(Double.parseDouble(elementCNX.getElementsByTagName("FitWidth").item(0).getTextContent())); + ImageViewLogoPrincipal.setFitHeight(Double.parseDouble(elementCNX.getElementsByTagName("FitHeight").item(0).getTextContent())); + ImageViewLogoPrincipal.setLayoutX(Double.parseDouble(elementCNX.getElementsByTagName("LayoutX").item(0).getTextContent())); + ImageViewLogoPrincipal.setLayoutY(Double.parseDouble(elementCNX.getElementsByTagName("LayoutY").item(0).getTextContent())); + } + catch (ParserConfigurationException | SAXException | IOException e) { + System.out.println("error AuthentificationController/setImageLogo "+e.getMessage()); + } + } +} diff --git a/src/main/java/Controllers/Produit/AjouterProduitController.java b/src/main/java/Controllers/Produit/AjouterProduitController.java new file mode 100644 index 0000000..033b890 --- /dev/null +++ b/src/main/java/Controllers/Produit/AjouterProduitController.java @@ -0,0 +1,349 @@ +package Controllers.Produit; + +import Controllers.Categorie.AjouterCategorieController; +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Categorie.CategorieDB; +import Models.Produit.Produit; +import Models.Produit.ProduitDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.animation.FadeTransition; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.Button; +import javafx.scene.control.ColorPicker; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.Text; +import javafx.util.Duration; +import org.controlsfx.control.textfield.TextFields; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class AjouterProduitController implements Initializable { + + @FXML private ProgressBar ProgressBarAjouterProduit; + + //private AnchorPane Content ; + @FXML private AnchorPane AnchorPaneAjouterprod ; + @FXML private AnchorPane AnchorPaneAjouterProduit ; + + @FXML private TextField AjouterProduitReference; + @FXML private TextField AjouterProduitCodeBarre; + @FXML private TextField AjouterProduitdesignation ; + @FXML private TextField AjouterProduitGarantie ; + @FXML private TextField AjouterProduitMarque ; + + @FXML private TextField AjouterProduitPrixAchatTTC ; + @FXML private TextField AjouterProduittvaAchat ; + @FXML private TextField AjouterProduitPrixAchatHT ; + + @FXML private TextField AjouterProduitMarge ; + + @FXML private TextField AjouterProduitPrixVenteTTC ; + @FXML private TextField AjouterProduittvaVente ; + @FXML private TextField AjouterProduitPrixVenteHT ; + + @FXML private TextField AjouterProduitPoids ; + @FXML private TextField AjouterProduitDimensions; + @FXML private TextField AjouterProduitVitesse; + @FXML private TextField AjouterProduitPuissance; + @FXML private TextField AjouterProduitCapacite; + + @FXML public TextField AjouterProduitcategorie ; + @FXML private ColorPicker AjouterProduitCouleur ; + @FXML private TextArea TextAreaDescription ; + + + @FXML private Text ErreurReference ; + @FXML private Text ErreurDesignation ; + @FXML private Text ErreurPrixVenteHT; + @FXML private Text ErreurtvaVente ; + @FXML private Text ErreurPrixVenteTTC; + + @FXML private Text ErreurGarantie ; + @FXML private Text Erreurcategorie ; + @FXML private Text ErreurMarque ; + @FXML private Text ErreurCodeBarre; + @FXML private Text ErreurPrixAchatHT; + @FXML private Text ErreurtvaAchat ; + @FXML private Text ErreurPrixAchatTTC; + + @FXML private Text ErreurMarge; + + @FXML private Text TextCurrencySign; + + @FXML private GridPane GridPaneSuccessAddProd; + @FXML private Button ButtonResetFormProduit; + @FXML private Text TextSuccessAddProd; + + private Service ThreadAjouterProduit; + + String address = " "; + contro ctl= new contro() ; + Produit prod = new Produit(); + ProduitDB dbproduit = new ProduitDB(); + CategorieDB dbcategorie = new CategorieDB(); + + + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TextSuccessAddProd.setFont(Font.loadFont(getClass().getResourceAsStream("/Public/Fonts/Raleway-SemiBold.ttf"), 20)); + + setCategorieFormData(); + + TextCurrencySign.setText(ParametreSystem.CurrencySign); + + + AjouterProduittvaAchat.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke){ + + if(!ctl.isFloatNotnull(AjouterProduitPrixAchatHT.getText()) && !ctl.isFloatNotnull(AjouterProduittvaAchat.getText())){ + float prixachatht = Adaptateur.StringToFloat(AjouterProduitPrixAchatHT.getText()); + float tvavente = Adaptateur.StringToFloat(AjouterProduittvaAchat.getText()); + float prixachatttc = prixachatht + (prixachatht*tvavente)/100 ; + AjouterProduitPrixAchatTTC.setText(Adaptateur.ArrondFloatToString(prixachatttc)); + } + } + }); + + AjouterProduitMarge.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke){ + if(!ctl.isFloatNotnull(AjouterProduitPrixAchatTTC.getText().replace(',','.')) && !ctl.isFloatNotnull(AjouterProduitMarge.getText().replace(',','.')) ){ + float marge = Adaptateur.StringToFloat(AjouterProduitMarge.getText()); + float prixachatttc = Adaptateur.StringToFloat(AjouterProduitPrixAchatTTC.getText()); + float prixventht = prixachatttc + (prixachatttc*marge)/100 ; + AjouterProduitPrixVenteHT.setText(Adaptateur.ArrondFloatToString(prixventht)); + } + } + }); + + AjouterProduittvaVente.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke){ + if(!ctl.isFloatNotnull(AjouterProduitPrixVenteHT.getText().replace(',','.')) && !ctl.isFloatNotnull(AjouterProduittvaVente.getText().replace(',','.'))){ + float prixventht = Adaptateur.StringToFloat(AjouterProduitPrixVenteHT.getText()); + float tvavente = Adaptateur.StringToFloat(AjouterProduittvaVente.getText()); + + float prixventttc = prixventht + ((prixventht*tvavente)/100) ; + //System.out.println("Prix H.T: "+prixventht*6+" TVA: "+((prixventht*tvavente)/100)*6+" PrixTTC"+prixventttc*6); + AjouterProduitPrixVenteTTC.setText(Adaptateur.ArrondFloatToString(prixventttc)); + } + } + }); + } + + + + //ajouter un nouvelle catégorie + @FXML + private void AjouterCategorieButtonAction(ActionEvent event) throws IOException { + final AjouterCategorieController AjouterCategorie = new AjouterCategorieController(); + AjouterCategorie.Show(); + AjouterCategorie.ButtonAjouterCategory.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent e) { + String NewCategory = AjouterCategorie.AjouterCategorieTraitement(); + AjouterProduitcategorie.setText(NewCategory); + } + }); + } + + + @FXML + private void AjouterProduitButtonAction(ActionEvent event) throws IOException { + + if( ctl.ContrNull(AjouterProduitReference,ErreurReference) && + ctl.ContrNull(AjouterProduitdesignation, ErreurDesignation)&& + ctl.ContrNull(AjouterProduitcategorie, Erreurcategorie)&& + ctl.ContrNull(AjouterProduitMarque, ErreurMarque)&& + ctl.ContrNumerique(AjouterProduitGarantie, ErreurGarantie)&& + ctl.ContrReelNotNull(AjouterProduitPrixAchatHT, ErreurPrixAchatHT)&& + ctl.ContrReelNotNull(AjouterProduittvaAchat, ErreurtvaAchat)&& + ctl.ContrReelNotNull(AjouterProduitPrixAchatTTC, ErreurPrixAchatTTC)&& + ctl.ContrReelNotNull(AjouterProduitMarge, ErreurMarge) && + ctl.ContrReelNotNull(AjouterProduitPrixVenteHT, ErreurPrixVenteHT)&& + ctl.ContrReelNotNull(AjouterProduittvaVente, ErreurtvaVente)&& + ctl.ContrReelNotNull(AjouterProduitPrixVenteTTC, ErreurPrixVenteTTC) && + ControleReferenceDB() && ControleCodeBarreDB()){ + + if(!new CategorieDB().verifyCategorie(AjouterProduitcategorie.getText())){ + Erreurcategorie.setText("categorie n'existe pas"); + Erreurcategorie.setStyle("-fx-border-color:#f20606;"); + }else{ + this.getProduit(); + if(dbproduit.addProduit(prod)){ //l'insertion des données dont la Base des données et afficher le message du succés + + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneAjouterProduit); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.play(); + + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) + { + GridPaneSuccessAddProd.setVisible(true); + ButtonResetFormProduit.setOnAction(new EventHandler() { //supprimer le message du suucés et reaficher les formulaires + @Override + public void handle(ActionEvent event) { + GridPaneSuccessAddProd.setVisible(false); + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneAjouterProduit); + ft.setFromValue(0.0); + ft.setToValue(1.0); + ft.play(); + restechamp(); + } + }); + } + }); + } + else{ + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + } + } + } + + private boolean ControleReferenceDB() + { + if(dbproduit.verifyReferenceProduit(AjouterProduitReference.getText())) + { + ErreurReference.setText("référence existe déja"); + AjouterProduitReference.setStyle("-fx-border-color:#f20606;"); + return false; + }else{ + ErreurReference.setText(""); + AjouterProduitReference.setStyle(null); + return true; + } + } + + private boolean ControleCodeBarreDB() + { + if(!ctl.isStringNull(AjouterProduitCodeBarre.getText())) + { + if(dbproduit.verifyCodeBarreProduit(AjouterProduitCodeBarre.getText())) + { + ErreurCodeBarre.setText("Code Barre existe déja"); + AjouterProduitCodeBarre.setStyle("-fx-border-color:#f20606;"); + return false; + }else{ + ErreurCodeBarre.setText(""); + AjouterProduitCodeBarre.setStyle(null); + return true; + } + } + ErreurCodeBarre.setText(""); + AjouterProduitCodeBarre.setStyle(null); + return true; + } + + //récuperation des formulaire dans l'objet Produit + private void getProduit() + { + prod.setReference(AjouterProduitReference.getText()); + prod.setCodebarre(AjouterProduitCodeBarre.getText()); + prod.setDesignation(AjouterProduitdesignation.getText()); + prod.setCategorie(AjouterProduitcategorie.getText()); + + prod.setGarantieString(AjouterProduitGarantie.getText()); + prod.setMarque(AjouterProduitMarque.getText()); + + prod.setPrixachatttc(AjouterProduitPrixAchatTTC.getText()); + prod.setPrixachatht(AjouterProduitPrixAchatHT.getText()); + prod.setTvaachat(AjouterProduittvaAchat.getText()); + + prod.setMarge(AjouterProduitMarge.getText()); + + prod.setPrixventettc(AjouterProduitPrixVenteTTC.getText()); + prod.setPrixventeht(AjouterProduitPrixVenteHT.getText()); + prod.setTvavente(AjouterProduittvaVente.getText()); + + prod.setPoids(AjouterProduitPoids.getText()); + prod.setCapacite(AjouterProduitCapacite.getText()); + prod.setDimensions(AjouterProduitDimensions.getText()); + prod.setVitesse(AjouterProduitVitesse.getText()); + prod.setPuissance(AjouterProduitPuissance.getText()); + prod.setCouleur(AjouterProduitCouleur.getValue().toString()); + prod.setDescription(TextAreaDescription.getText()); + + } + + + private void restechamp() + { + AjouterProduitReference.setText(""); + AjouterProduitCodeBarre.setText(""); + AjouterProduitdesignation.setText(""); + AjouterProduitGarantie.setText(""); + AjouterProduitcategorie.setText(""); + AjouterProduittvaAchat.setText(""); + AjouterProduitPrixAchatHT.setText(""); + AjouterProduitPrixVenteHT.setText(""); + AjouterProduittvaVente.setText(""); + AjouterProduitGarantie.setText(""); + AjouterProduitMarque.setText(""); + AjouterProduitPoids.setText(""); + AjouterProduitPrixAchatTTC.setText(""); + AjouterProduitPrixVenteTTC.setText(""); + AjouterProduitMarge.setText(""); + AjouterProduitDimensions.setText(""); + AjouterProduitVitesse.setText(""); + AjouterProduitPuissance.setText(""); + AjouterProduitCapacite.setText(""); + AjouterProduitCouleur.setValue(Color.TRANSPARENT); + TextAreaDescription.setText(""); + + } + + private void setCategorieFormData() + { + ProgressBarAjouterProduit.setVisible(true); + + ThreadAjouterProduit = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + TextFields.bindAutoCompletion(AjouterProduitcategorie, new CategorieDB().getListCategorie()); + + return null; + } + }; + } + }; + ThreadAjouterProduit.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarAjouterProduit.setVisible(false); + } + }); + ThreadAjouterProduit.start(); + } +} diff --git a/src/main/java/Controllers/Produit/GestionProduitController.java b/src/main/java/Controllers/Produit/GestionProduitController.java new file mode 100644 index 0000000..0114166 --- /dev/null +++ b/src/main/java/Controllers/Produit/GestionProduitController.java @@ -0,0 +1,487 @@ +package Controllers.Produit; + +import Models.Categorie.CategorieDB; +import Models.Produit.Produit; +import Models.Produit.ProduitDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.Label; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; +import javafx.util.Callback; +import org.controlsfx.control.textfield.TextFields; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class GestionProduitController implements Initializable { + + @FXML private Button addProduit ; + @FXML private Button ButtonSearchProduit ; + @FXML private Label LabelCount ; + + @FXML private ChoiceBox NbrLigne ; + + @FXML private AnchorPane AnchorPaneGestionClt; + @FXML private AnchorPane ListerPages; + + @FXML private ProgressBar ProgressBarProduit; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + + @FXML private AnchorPane AnchorPaneProduit; + @FXML private TextField GestionProduitReference ; + @FXML private TextField GestionProduitCodeBarre; + @FXML private TextField GestionProduitCategorie; + @FXML private TextField GestionProduitDesignation; + + @FXML private TableView TableViewListeGestionProduit ; + + @FXML private TableColumn TabColReference; + @FXML private TableColumn TabColDesignation; + @FXML private TableColumn TabColMarque ; + @FXML private TableColumn TabColCategorie; + @FXML private TableColumn TabColPrixTTC; + @FXML private TableColumn TabColQuantite; + @FXML private TableColumn TabColAction ; + + private Service ThreadSearchProduit; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0 ; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + public static String refprod ; + + ProduitDB ProdDB =new ProduitDB(); + + @Override + public void initialize(URL url, ResourceBundle rb) { + + getCategorie(); + + + //comboboxnombre des lignes tableview + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + this.AjouterProduit(); + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + TabColMarque.setCellValueFactory(new PropertyValueFactory("marque")); + TabColCategorie.setCellValueFactory(new PropertyValueFactory("categorie")); + TabColPrixTTC.setCellValueFactory(new PropertyValueFactory("prixventettc")); + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + + TabColAction.setSortable(true); + TabColAction.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColAction.getStyleClass().add("Center"); + TabColAction.setCellValueFactory(new Callback,ObservableValue>(){ + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + + + //double clique sur une ligne + TableViewListeGestionProduit.setOnMouseClicked(new EventHandler(){ + public void handle(MouseEvent event){ + if(event.getClickCount()>1){ + if(TableViewListeGestionProduit.getSelectionModel().getSelectedIndex()>=0){ + //System.out.println(getCode()); + GestionProduitController.refprod=TableViewListeGestionProduit.getSelectionModel().getSelectedItem().getReference(); + AnchorPaneProduit.getChildren().clear(); + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Produit/ModifierProduit.fxml")); + Parent root = (Parent)fxmlLoader.load(); + AnchorPaneProduit.getChildren().add(root); + } catch (IOException ex) { + Logger.getLogger(GestionProduitController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + } + + } + }); + + + GestionSearchProduit(); + + ButtonSearchProduit.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchProduit(); + } + }); + + AnchorPaneProduit.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + }); + + } + + + private void getCategorie() + { + ProgressBarProduit.setVisible(true); + + ThreadSearchProduit = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + TextFields.bindAutoCompletion(GestionProduitCategorie, new CategorieDB().getListCategorie()); + + return null; + } + }; + } + }; + + ThreadSearchProduit.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarProduit.setVisible(false); + } + }); + ThreadSearchProduit.start(); + } + + + private void AjouterProduit() + { + addProduit.getStyleClass().add("btn-success"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconadd.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + addProduit.setGraphic(buttonGraphic); + + addProduit.setOnAction(new EventHandler() { + @Override public void handle(ActionEvent e) { + try { + AnchorPaneProduit.getChildren().clear(); + AnchorPaneProduit.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Produit/AjouterProduit.fxml"))); + } catch (IOException ex) { + Logger.getLogger(GestionProduitController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconedit.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + // get Selected Item + Produit currentPerson = (Produit) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + GestionProduitController.refprod=currentPerson.getReference(); + AnchorPaneProduit.getChildren().clear(); + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Produit/ModifierProduit.fxml")); + Parent root = (Parent)fxmlLoader.load(); + AnchorPaneProduit.getChildren().add(root); + } catch (IOException ex) { + Logger.getLogger(GestionProduitController.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + + + + + private void getCategorieProduitOnclick() + { + GestionProduitCategorie.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if(totalcount<10){ + ListerPages.setVisible(false); + } + else{ + ListerPages.setVisible(true); + } + SearchProduit(); + } + }); + GestionProduitCategorie.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + SearchProduit(); + } + }); + } + + + + + + + + + + + + /****************************************************************************** * + * * + * Methode last Next TableView client Entreprise * + * * * + ******************************************************************************/ + + private void SearchProduit() + { + ProgressBarProduit.setVisible(true); + + ButtonSearchProduit.setDisable(true); + + ThreadSearchProduit = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + ObservableList ListProduits = new ProduitDB().SearchProduit(position, nbrligne, true, GestionProduitReference.getText(), GestionProduitCategorie.getText(), GestionProduitCodeBarre.getText(), GestionProduitDesignation.getText()); + TableViewListeGestionProduit.setItems(ListProduits); + + totalcount = new ProduitDB().nbrSearchProduit(true, GestionProduitReference.getText(), GestionProduitCategorie.getText(), GestionProduitCodeBarre.getText(), GestionProduitDesignation.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchProduit.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarProduit.setVisible(false); + ButtonSearchProduit.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchProduit.start(); + } + + + private void NextLastSearchProduit(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarProduit.setVisible(true); + + ButtonSearchProduit.setDisable(true); + + ThreadSearchProduit = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{// + + ObservableList ListProduits = new ProduitDB().SearchProduit(ParmPosition, ParamNbrligne, true, GestionProduitReference.getText(), GestionProduitCategorie.getText(), GestionProduitCodeBarre.getText(), GestionProduitDesignation.getText()); + + TableViewListeGestionProduit.setItems(ListProduits); + + return null; + } + }; + } + }; + + ThreadSearchProduit.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarProduit.setVisible(false); + ButtonSearchProduit.setDisable(false); + } + }); + ThreadSearchProduit.start(); + } + + private void GestionSearchProduit() + { + + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchProduit(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchProduit(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchProduit(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } +} + diff --git a/src/main/java/Controllers/Produit/ModifierProduitController.java b/src/main/java/Controllers/Produit/ModifierProduitController.java new file mode 100644 index 0000000..a59b8d8 --- /dev/null +++ b/src/main/java/Controllers/Produit/ModifierProduitController.java @@ -0,0 +1,297 @@ +package Controllers.Produit; + +import Controllers.Traitement.contro; +import Models.Categorie.CategorieDB; +import Models.Produit.Produit; +import Models.Produit.ProduitDB; +import java.io.IOException; +import java.math.RoundingMode; +import java.net.URL; +import java.text.DecimalFormat; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.animation.FadeTransition; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.ColorPicker; +import javafx.scene.control.ComboBox; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.Text; + +import javafx.util.Duration; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class ModifierProduitController implements Initializable { + + /** + * Initializes the controller class. + */ + public String Reference = GestionProduitController.refprod; + + //private AnchorPane Content ; + @FXML private AnchorPane AnchorPaneModifierprod ; + @FXML private AnchorPane AnchorPaneModifierProduit ; + @FXML private TextField ModifierProduitReference; + @FXML private TextField ModifierProduitCodeBarre; + @FXML private TextField ModifierProduitdesignation ; + @FXML private TextField ModifierProduitGarantie ; + @FXML private TextField ModifierProduitMarque ; + @FXML private ComboBox ModifierProduitcategorie ; + @FXML private ColorPicker ModifierProduitCouleur ; + @FXML private TextArea ModifierProduitDescription ; + + @FXML private TextField ModifierProduitPrixAchatTTC ; + @FXML private TextField ModifierProduittvaAchat ; + @FXML private TextField ModifierProduitPrixAchatHT ; + + @FXML private TextField ModifierProduitMarge ; + + @FXML private TextField ModifierProduitPrixVenteTTC ; + @FXML private TextField ModifierProduittvaVente ; + @FXML private TextField ModifierProduitPrixVenteHT ; + + + @FXML private TextField ModifierProduitPoids ; + @FXML private TextField ModifierProduitDimensions; + @FXML private TextField ModifierProduitVitesse; + @FXML private TextField ModifierProduitPuissance; + @FXML private TextField ModifierProduitCapacite; + + @FXML private Text ErreurReference ; + @FXML private Text ErreurCodeBarre ; + @FXML private Text ErreurDesignation ; + + @FXML private Text ErreurGarantie ; + @FXML private Text Erreurcategorie ; + @FXML private Text ErreurMarque ; + + @FXML private Text ErreurPrixAchatHT ; + @FXML private Text ErreurtvaAchat ; + @FXML private Text ErreurPrixAchatTTC ; + + @FXML private Text ErreurMarge ; + + @FXML private Text ErreurPrixVenteHT ; + @FXML private Text ErreurtvaVente ; + @FXML private Text ErreurPrixVenteTTC ; + + contro ctl= new contro() ; + Produit prod = new Produit(); + ProduitDB dbproduit = new ProduitDB(); + CategorieDB dbcategorie = new CategorieDB(); + DecimalFormat df = new DecimalFormat("#.000"); + + + @Override + public void initialize(URL url, ResourceBundle rb) { + //liste categorie + ModifierProduitcategorie.getItems().addAll(dbcategorie.getListCategorie()); + + prod = dbproduit.getProduit(Reference); + + ModifierProduitReference.setText(prod.getReference()); + ModifierProduitMarque.setText(prod.getMarque()) ; + ModifierProduitGarantie.setText(String.valueOf(prod.getGarantie())) ; + ModifierProduitdesignation.setText(prod.getDesignation()) ; + ModifierProduitcategorie.setValue(prod.getCategorie()) ; + + df.setMaximumFractionDigits(3); + + ModifierProduitPrixAchatHT.setText(prod.getPrixachatht()); + ModifierProduittvaAchat.setText(prod.getTvaachat()) ; + ModifierProduitPrixAchatTTC.setText(prod.getPrixachatttc()); + + ModifierProduitMarge.setText(prod.getMarge()) ; + + ModifierProduitPrixVenteHT.setText(prod.getPrixventeht()) ; + ModifierProduittvaVente.setText(prod.getTvavente()); + ModifierProduitPrixVenteTTC.setText(prod.getPrixventettc()) ; + + Color c = Color.web(prod.getCouleur()); + ModifierProduitCouleur.setValue(c) ; + ModifierProduitDescription.setText(prod.getDescription()) ; + ModifierProduitCodeBarre.setText(prod.getCodebarre()); + ModifierProduitPoids.setText(prod.getPoids()) ; + ModifierProduitDimensions.setText(prod.getDimensions()); + ModifierProduitVitesse.setText(prod.getVitesse()); + ModifierProduitPuissance.setText(prod.getPuissance()); + ModifierProduitCapacite.setText(prod.getCapacite()); + + ModifierProduittvaAchat.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke){ + + if(!ctl.isFloatNotnull(ModifierProduitPrixAchatHT.getText()) && !ctl.isFloatNotnull(ModifierProduittvaAchat.getText())){ + float prixachatht = Float.parseFloat(ModifierProduitPrixAchatHT.getText().replace(',','.')); + float tvavente = Float.parseFloat(ModifierProduittvaAchat.getText().replace(',','.')); + float prixachatttc = prixachatht + (prixachatht*tvavente)/100 ; + df.setRoundingMode(RoundingMode.DOWN); + ModifierProduitPrixAchatTTC.setText(df.format(prixachatttc).replace(',','.')); + } + } + }); + + ModifierProduitMarge.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke){ + if(!ctl.isFloatNotnull(ModifierProduitPrixAchatTTC.getText()) && !ctl.isFloatNotnull(ModifierProduitMarge.getText()) ){ + float marge = Float.parseFloat(ModifierProduitMarge.getText().replace(',','.')); + float prixachatttc = Float.parseFloat(ModifierProduitPrixAchatTTC.getText().replace(',','.')); + float prixventht = prixachatttc + (prixachatttc*marge)/100 ; + df.setRoundingMode(RoundingMode.DOWN); + ModifierProduitPrixVenteHT.setText(df.format(prixventht).replace(',','.')); + } + } + }); + + ModifierProduittvaVente.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke){ + if(!ctl.isFloatNotnull(ModifierProduitPrixVenteHT.getText()) && !ctl.isFloatNotnull(ModifierProduittvaVente.getText())){ + float prixventht = Float.parseFloat(ModifierProduitPrixVenteHT.getText().replace(',','.')); + float tvavente = Float.parseFloat(ModifierProduittvaVente.getText().replace(',','.')); + float prixventttc = prixventht + (prixventht*tvavente)/100 ; + df.setRoundingMode(RoundingMode.DOWN); + ModifierProduitPrixVenteTTC.setText(df.format(prixventttc).replace(',','.')); + } + } + }); + + + + } + + @FXML + private void ModifierProduitButtonAction(ActionEvent event) throws IOException { + if( ctl.ContrNull(ModifierProduitReference,ErreurReference) && + ctl.ContrNull(ModifierProduitdesignation, ErreurDesignation)&& + ctl.ContrNullValue(ModifierProduitcategorie, Erreurcategorie)&& + ctl.ContrNull(ModifierProduitMarque, ErreurMarque)&& + ctl.ContrNumerique(ModifierProduitGarantie, ErreurGarantie)&& + ctl.ContrNumerique(ModifierProduitCodeBarre, ErreurCodeBarre)&& + ctl.ContrReelNotNull(ModifierProduitPrixAchatHT, ErreurPrixAchatHT)&& + ctl.ContrReelNotNull(ModifierProduittvaAchat, ErreurtvaAchat)&& + ctl.ContrReelNotNull(ModifierProduitPrixAchatTTC, ErreurPrixAchatTTC)&& + ctl.ContrReelNotNull(ModifierProduitMarge, ErreurMarge) && + ctl.ContrReelNotNull(ModifierProduitPrixVenteHT, ErreurPrixVenteHT)&& + ctl.ContrReelNotNull(ModifierProduittvaVente, ErreurtvaVente)&& + ctl.ContrReelNotNull(ModifierProduitPrixVenteTTC, ErreurPrixVenteTTC) ){ + + if(dbproduit.UpdateProduit(getProduit(),Reference)==1){ + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneModifierProduit); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.play(); + + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) { + Image success = new Image(getClass().getResourceAsStream("/Public/icon/successfully.png")); + ImageView iv1 = new ImageView(); + iv1.setImage(success); + + Text text= new Text(); + text.setText("La modification a été effectuée avec succès"); + text.setFont(Font.loadFont(getClass().getResourceAsStream("/Public/Fonts/Raleway-SemiBold.ttf"), 20)); + + Button buttonOk = new Button("OK"); + buttonOk.getStyleClass().add("btn-primary"); + buttonOk.setPrefSize(100, 30); + + final StackPane stackpane = new StackPane(); + stackpane.setLayoutX(140); + stackpane.setLayoutY(100); + stackpane.setPrefHeight(200); + stackpane.setPrefWidth(200); + stackpane.getChildren().add(iv1); + stackpane.getChildren().add(text); + stackpane.getChildren().add(buttonOk); + StackPane.setAlignment(iv1, Pos.BASELINE_CENTER); + StackPane.setAlignment(text, Pos.TOP_CENTER); + StackPane.setAlignment(buttonOk, Pos.CENTER); + + AnchorPaneModifierprod.setLeftAnchor(stackpane, 83.0); + AnchorPaneModifierprod.setRightAnchor(stackpane, 83.0); + AnchorPaneModifierprod.setTopAnchor(stackpane,220.0); + AnchorPaneModifierprod.setBottomAnchor(stackpane,220.0); + AnchorPaneModifierprod.getChildren().add(stackpane); + + buttonOk.setOnAction(new EventHandler() { //supprimer le message du suucés et reaficher les formulaires + @Override + public void handle(ActionEvent event) { + stackpane.setVisible(false); + try { + AnchorPaneModifierprod.getChildren().clear(); + AnchorPaneModifierprod.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Produit/GestionProduit.fxml"))); + } catch (IOException ex) { + Logger.getLogger(GestionProduitController.class.getName()).log(Level.SEVERE, null, ex); + } + FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneModifierprod); + ft.setFromValue(0.0); + ft.setToValue(1.0); + ft.play(); + + } + }); + + } + }); + } + } + } + private Produit getProduit() + { + Produit prodUpdate = new Produit(); + + prodUpdate.setReference(ModifierProduitReference.getText()); + prodUpdate.setCodebarre(ModifierProduitCodeBarre.getText()); + prodUpdate.setDesignation(ModifierProduitdesignation.getText()); + prodUpdate.setCategorie(ModifierProduitcategorie.getValue().toString()); + prodUpdate.setGarantieString(ModifierProduitGarantie.getText()); + prodUpdate.setMarque(ModifierProduitMarque.getText()); + + prodUpdate.setPrixachatttc(ModifierProduitPrixAchatTTC.getText().replace(',','.')); + prodUpdate.setPrixachatht(ModifierProduitPrixAchatHT.getText().replace(',','.')); + prodUpdate.setTvaachat(ModifierProduittvaAchat.getText().replace(',','.')); + + prodUpdate.setMarge(ModifierProduitMarge.getText().replace(',','.')); + + prodUpdate.setPrixventettc(ModifierProduitPrixVenteTTC.getText().replace(',','.')); + prodUpdate.setPrixventeht(ModifierProduitPrixVenteHT.getText().replace(',','.')); + prodUpdate.setTvavente(ModifierProduittvaVente.getText().replace(',','.')); + + prodUpdate.setPoids(ModifierProduitPoids.getText()); + prodUpdate.setCapacite(ModifierProduitCapacite.getText()); + prodUpdate.setDimensions(ModifierProduitDimensions.getText()); + prodUpdate.setVitesse(ModifierProduitVitesse.getText()); + prodUpdate.setPuissance(ModifierProduitPuissance.getText()); + prodUpdate.setCouleur(ModifierProduitCouleur.getValue().toString()); + prodUpdate.setDescription(ModifierProduitDescription.getText()); + + return prodUpdate ; + } + + + + + +} diff --git a/src/main/java/Controllers/Produit/RechercherProduitController.java b/src/main/java/Controllers/Produit/RechercherProduitController.java new file mode 100644 index 0000000..9df6808 --- /dev/null +++ b/src/main/java/Controllers/Produit/RechercherProduitController.java @@ -0,0 +1,470 @@ +package Controllers.Produit; + +import Models.Produit.Produit; +import Controllers.DevisClt.DevisAjouterController; +import Controllers.Traitement.MyWindow; +import Models.Categorie.CategorieDB; +import Models.Produit.ProduitDB; +import Models.User.User; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import org.controlsfx.control.textfield.TextFields; + + + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class RechercherProduitController { + + @FXML public AnchorPane anchorpane ; + + @FXML private ProgressBar ProgressBarProduit; + + @FXML private Button ButtonSearchProduit; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount ; + @FXML private ChoiceBox NbrLigne ; + + @FXML private TextField GestionProduitReference ; + @FXML private TextField GestionProduitDesignation; + @FXML private TextField GestionProduitCodeBarre; + @FXML private TextField GestionProduitCategorie; + + @FXML private TableView TableViewListeGestionProduit ; + + @FXML private TableColumn TabColReference; + @FXML private TableColumn TabColDesignaton; + @FXML private TableColumn TabColMarque ; + @FXML private TableColumn TabColCategorie; + @FXML private TableColumn TabColPrixAchatTTC; + @FXML private TableColumn TabColPrixVenteTTC; + @FXML private TableColumn TabColQuantite; + @FXML public TableColumn TabColAction ; + + @FXML private AnchorPane PaneStockNegaNon; + @FXML private Text TextEnStock; + @FXML private RadioButton StockNegaOui; + @FXML private RadioButton StockNegaNon; + + public Node nodeFxml ; + + private Boolean StockNegatif = false; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + public static String refprod ; + + public Object[] ArrayObjectDataSave = new Object[10]; + + private Service ThreadSearchRerchecheProduit; + + + public RechercherProduitController(Boolean TypePrixTTC) { //TypePrixTTC true Vente | false Achat + + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Produit/RechercherProduit.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + + TextFields.bindAutoCompletion(GestionProduitCategorie, new CategorieDB().getListCategorie()); + + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignaton.setCellValueFactory(new PropertyValueFactory("designation")); + TabColMarque.setCellValueFactory(new PropertyValueFactory("marque")); + TabColCategorie.setCellValueFactory(new PropertyValueFactory("categorie")); + + TabColPrixAchatTTC.setCellValueFactory(new PropertyValueFactory("prixachatttc")); + TabColPrixAchatTTC.setStyle( "-fx-alignment: CENTER;"); + TabColPrixAchatTTC.getStyleClass().add("Center"); + + TabColPrixVenteTTC.setCellValueFactory(new PropertyValueFactory("prixventettc")); + TabColPrixVenteTTC.setStyle( "-fx-alignment: CENTER;"); + TabColPrixVenteTTC.getStyleClass().add("Center"); + + if(TypePrixTTC){ + TabColPrixVenteTTC.setVisible(true); + TabColPrixAchatTTC.setVisible(false); + }else{ + TabColPrixAchatTTC.setVisible(true); + TabColPrixVenteTTC.setVisible(false); + } + + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColAction.setStyle( "-fx-alignment: CENTER;"); + TabColAction.getStyleClass().add("Center"); + + if(TypePrixTTC){//Vente Stock peux être négatif table produit + if(User.SotckNegatif){ //L'utilisateur à le droit de vente en négative + PaneStockNegaNon.setVisible(true); + TextEnStock.setVisible(true); + } + }else{ //Achat table produit + PaneStockNegaNon.setVisible(true); + TextEnStock.setVisible(true); + } + + //table stock + StockNegaOui.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + StockNegatif = false; + SearchProduit(); + } + }); + + //table produit + StockNegaNon.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + StockNegatif = true; + SearchProduit(); + } + }); + + + ButtonSearchProduit.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchProduit(); + } + }); + + anchorpane.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + }); + + GestionSearchProduit(); + + } catch (IOException ex) { + Logger.getLogger(RechercherProduitController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Stage stage = MyWindow.myStage; + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + stage.setScene(scene); + stage.show(); + } + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + try { + // get Selected ItemButtonCell + Produit currentPerson = (Produit) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Devis/DevisAjouter.fxml")); + Parent devis = (Parent) fxmlLoader.load(); + + DevisAjouterController devisajouter = fxmlLoader.getController(); + devisajouter.SetProduit(currentPerson.getReference()); + + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(devis, 3); + } catch (IOException ex) { + Logger.getLogger(RechercherProduitController.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + + + + } + + + @FXML + private void QuiterButtonAction(ActionEvent event) throws IOException { + anchorpane.setVisible(false); + } + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchProduit() + { + ProgressBarProduit.setVisible(true); + + ButtonSearchProduit.setDisable(true); + + ThreadSearchRerchecheProduit = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + ObservableList ListeCltPersonne = new ProduitDB().SearchProduit( + position, + nbrligne, + StockNegatif, + GestionProduitReference.getText(), + GestionProduitCategorie.getText(), + GestionProduitCodeBarre.getText(), + GestionProduitDesignation.getText()); + + TableViewListeGestionProduit.setItems(null); + TableViewListeGestionProduit.refresh(); + TableViewListeGestionProduit.setItems(ListeCltPersonne); + + totalcount = new ProduitDB().nbrSearchProduit(StockNegatif, GestionProduitReference.getText(), GestionProduitCategorie.getText(), GestionProduitCategorie.getText(), GestionProduitDesignation.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchRerchecheProduit.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarProduit.setVisible(false); + ButtonSearchProduit.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchRerchecheProduit.start(); + } + + + + private void NextLastSearchProduit(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarProduit.setVisible(true); + + ButtonSearchProduit.setDisable(true); + + ThreadSearchRerchecheProduit = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + ObservableList ListeCltPersonne = new ProduitDB().SearchProduit( + ParmPosition, + ParamNbrligne, + StockNegatif, + GestionProduitReference.getText(), + GestionProduitCategorie.getText(), + GestionProduitCodeBarre.getText(), + GestionProduitDesignation.getText()); + + TableViewListeGestionProduit.setItems(ListeCltPersonne); + + return null; + } + }; + } + }; + + ThreadSearchRerchecheProduit.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarProduit.setVisible(false); + ButtonSearchProduit.setDisable(false); + } + }); + ThreadSearchRerchecheProduit.start(); + } + + private void GestionSearchProduit() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchProduit(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchProduit(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchProduit(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + +} diff --git a/src/main/java/Controllers/Reglement/GestionReglementController.java b/src/main/java/Controllers/Reglement/GestionReglementController.java new file mode 100644 index 0000000..e5de5aa --- /dev/null +++ b/src/main/java/Controllers/Reglement/GestionReglementController.java @@ -0,0 +1,564 @@ +package Controllers.Reglement; + +import Models.Fournisseur.FournisseurDB; +import Models.Reglement.Reglement; +import Models.Reglement.ReglementDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import org.controlsfx.control.textfield.TextFields; +import java.net.URL; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.ResourceBundle; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.ComboBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + + + + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class GestionReglementController implements Initializable { + + @FXML private ProgressBar ProgressBarGestionReglement; + + @FXML private Button ButtonSearchGestionReglement; + + @FXML private AnchorPane AnchorPaneGestionReglement; + + @FXML private TextField TextFieldFournisseur ; + @FXML public TextField TextFieldNumero ; + @FXML public TextField TextFieldMontant ; + + @FXML private ComboBox ComboBoxModePaiement; + @FXML private DatePicker DatePickerDatePayer; + @FXML private RadioButton RadioComptant; + @FXML private RadioButton RadioFacilite; + + @FXML public TableView TableViewReglementFrs; + @FXML public TableColumn TabColNumero; + @FXML public TableColumn TabColMontant; + @FXML public TableColumn TabColModePaiement; + @FXML public TableColumn TabColFournisseur; + @FXML public TableColumn TabColTypePaiement; + @FXML public TableColumn TabColDatePayement; + @FXML public TableColumn TabColDetail; + + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount; + @FXML private ChoiceBox NbrLigne ; + + private Service ThreadSearchGestionReglement; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + public ArrayList ListFournisseur = new ArrayList<>(); + + ReglementDB reglementDB= new ReglementDB(); + + DecimalFormat Formatter = new DecimalFormat("##,###.## "); + + ObservableList ListPaiement = FXCollections.observableArrayList("Espace", "Chèque", "Carte bancaire", "Traite"); + + String IdFournisseur = ""; + String Paiement = ""; + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + setFournisseurFormData(); + + ComboBoxModePaiement.setItems(ListPaiement); + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TabColNumero.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNumero.getStyleClass().add("Center"); + TabColNumero.setCellValueFactory(new PropertyValueFactory("Numero")); + + TabColFournisseur.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColFournisseur.getStyleClass().add("Center"); + TabColFournisseur.setCellValueFactory(new Callback, ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures data) { + return new SimpleStringProperty(data.getValue().getFournisseur().getNom()); + } + }); + + TabColModePaiement.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColModePaiement.getStyleClass().add("Center"); + TabColModePaiement.setCellValueFactory(new PropertyValueFactory("ModePaiement")); + TabColModePaiement.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + //0 :espace | 1:Chèque | 2 :carte bancaire | 3: Traite + if(item!= null && item.equals("0")){ + Text text = new Text("Espace"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else if(item!= null && item.equals("1")){ + Text text = new Text("Chèque"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else if(item!= null && item.equals("2")){ + Text text = new Text("Carte Bancaire"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else if(item!= null && item.equals("3")){ + Text text = new Text("Traite"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + + TabColMontant.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColMontant.getStyleClass().add("Center"); + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + TabColMontant.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if(item!= null){ + Text text = new Text(Formatter.format(Float.parseFloat(item))); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TabColTypePaiement.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTypePaiement.getStyleClass().add("Center"); + TabColTypePaiement.setCellValueFactory(new PropertyValueFactory("TypePaiement")); + TabColTypePaiement.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if(item!= null && item.equals("0")){ + Text text = new Text("Comptant"); + text.setFill(Color.web("#428BCA")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else if(item!= null && item.equals("1")){ + Text text = new Text("Facilité"); + text.setFill(Color.web("#000000")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TabColDatePayement.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDatePayement.getStyleClass().add("Center"); + TabColDatePayement.setCellValueFactory(new PropertyValueFactory("DateTimeCreation")); + + + + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + TabColDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + TextFieldFournisseur.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + if(newValue.contains(" - ")){ + String[] array = newValue.split(" - ", -1); + IdFournisseur = array[0]; + } + } + }); + + ComboBoxModePaiement.valueProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue ov, String t, String ValLocal) { + //0 :espace | 1:Chèque | 2 :carte bancaire | 3: Traite + if(ValLocal.equals("Espace")){ + Paiement = "0"; + }else if(ValLocal.equals("Chèque")){ + Paiement = "1"; + }else if(ValLocal.equals("Carte bancaire")){ + Paiement = "2"; + }else if(ValLocal.equals("Traite")){ + Paiement = "3"; + } + } + }); + + + + ButtonSearchGestionReglement.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchGestionReglement(); + } + }); + + AnchorPaneGestionReglement.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchGestionReglement(); + } + } + }); + + GestionSearchGestionReglement(); + } + + + @FXML + private void ReglementAjouterButtonAction(ActionEvent event) throws IOException { + AnchorPaneGestionReglement.getChildren().clear(); + AnchorPaneGestionReglement.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Reglement/ReglementAjouter1.fxml"))); + } + + + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + Reglement reglement = ((Reglement)getTableRow().getItem()); + ReglementDialogDetailController ReglementDialogDetail = new ReglementDialogDetailController(); + ReglementDialogDetail.Show(); + ReglementDialogDetail.LanchShowReglement(reglement.getNumero()); + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + private void setFournisseurFormData() + { + ProgressBarGestionReglement.setVisible(true); + + ThreadSearchGestionReglement = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + ListFournisseur = new FournisseurDB().getAllFournisseur("CONCAT(`id_fourisseur`,' - ',`nom`)"); + TextFields.bindAutoCompletion(TextFieldFournisseur, ListFournisseur); + + return null; + } + }; + } + }; + ThreadSearchGestionReglement.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarGestionReglement.setVisible(false); + } + }); + ThreadSearchGestionReglement.start(); + } + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchGestionReglement() + { + ProgressBarGestionReglement.setVisible(true); + + ButtonSearchGestionReglement.setDisable(true); + + ThreadSearchGestionReglement = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DatePayer = ""; + if(DatePickerDatePayer.getValue() != null){ + DatePayer = DatePickerDatePayer.getValue().toString(); + } + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListGestionReglements = new ReglementDB().SearchGestionReglementGestion( + position, + nbrligne, + TextFieldNumero.getText(), + IdFournisseur, + TextFieldMontant.getText(), + DatePayer, + TypeRegement, + Paiement); + + TableViewReglementFrs.setItems(ListGestionReglements); + + totalcount = new ReglementDB().nbrGestionReglementGestion(TextFieldNumero.getText(), IdFournisseur, TextFieldMontant.getText(), DatePayer, TypeRegement, Paiement); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchGestionReglement.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarGestionReglement.setVisible(false); + ButtonSearchGestionReglement.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchGestionReglement.start(); + } + + + private void NextLastSearchGestionReglement(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarGestionReglement.setVisible(true); + + ButtonSearchGestionReglement.setDisable(true); + + ThreadSearchGestionReglement = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DatePayer = ""; + if(DatePickerDatePayer.getValue() != null){ + DatePayer = DatePickerDatePayer.getValue().toString(); + } + + + // 0comptant 1facilité + String TypeRegement = ""; + if(RadioComptant.isSelected()){ + TypeRegement = "0"; + }else if(RadioFacilite.isSelected()){ + TypeRegement = "1"; + } + + ObservableList ListGestionReglement = new ReglementDB().SearchGestionReglementGestion(ParmPosition, ParamNbrligne, TextFieldNumero.getText(), IdFournisseur, TextFieldMontant.getText(), DatePayer, TypeRegement, Paiement); + + TableViewReglementFrs.setItems(ListGestionReglement); + + return null; + } + }; + } + }; + + ThreadSearchGestionReglement.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarGestionReglement.setVisible(false); + ButtonSearchGestionReglement.setDisable(false); + } + }); + ThreadSearchGestionReglement.start(); + } + + private void GestionSearchGestionReglement() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchGestionReglement(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchGestionReglement(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchGestionReglement(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + +} diff --git a/src/main/java/Controllers/Reglement/ReglementAjouter1Controller.java b/src/main/java/Controllers/Reglement/ReglementAjouter1Controller.java new file mode 100644 index 0000000..d4e599e --- /dev/null +++ b/src/main/java/Controllers/Reglement/ReglementAjouter1Controller.java @@ -0,0 +1,418 @@ +package Controllers.Reglement; + +import Controllers.Dialog.MessageControle; +import Models.FactureFrs.FactureFrs; +import Models.FactureFrs.FactureFrsDB; +import Models.Fournisseur.FournisseurDB; +import Models.Stock.StockDB; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.ResourceBundle; +import javafx.application.Platform; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; +import org.controlsfx.control.textfield.TextFields; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class ReglementAjouter1Controller implements Initializable { + + @FXML private AnchorPane AnchorPaneReglementAjouter1; + + @FXML private ProgressIndicator ProgressFactureFrs; + + @FXML public TableView TableViewFactureFrs; + @FXML public TableColumn TabColNumero; + @FXML public TableColumn TabColFrs; + @FXML public TableColumn TabColDate; + @FXML public TableColumn TabColLocalReception; + @FXML public TableColumn TabColNetPayer; + @FXML public TableColumnTabColDetail ; + + @FXML public TableView TableViewSeleFactureFrs; + @FXML public TableColumn TabColSeleNumero; + @FXML public TableColumn TabColSeleFrs; + @FXML public TableColumn TabColSeleDate; + @FXML public TableColumn TabColSeleHeur; + @FXML public TableColumn TabColSeleLocalReception; + @FXML public TableColumn TabColSeleNetPayer; + @FXML public TableColumnTabColSeleSupprimer ; + + @FXML public TextField TextFieldNumero ; + @FXML private TextField TextFieldFournisseu ; + @FXML public TextField TextFieldNetAPayer ; + @FXML public DatePicker DatePickerDateReception; + + @FXML public ChoiceBox ChoiceBoxLocalReception ; + + public ArrayList ListFournisseur = new ArrayList<>(); + public ArrayList ListLocale = new ArrayList<>(); + + ObservableList DataSelectFacture = FXCollections.observableArrayList(); + + public FactureFrsDB FactureDB = new FactureFrsDB(); + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + StockDB Stock = new StockDB(); + ListLocale = Stock.getAllListLocal(); + ChoiceBoxLocalReception.getItems().addAll(ListLocale); + + FournisseurDB FrsDB = new FournisseurDB(); + ListFournisseur = FrsDB.getAllFournisseur("CONCAT(`id_fourisseur`,' - ',`nom`)"); + TextFields.bindAutoCompletion(TextFieldFournisseu, ListFournisseur); + + TabColNumero.setCellValueFactory(new PropertyValueFactory("Numero")); + + TabColFrs.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColFrs.getStyleClass().add("Center"); + TabColFrs.setCellValueFactory(new Callback, ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures data) { + return new SimpleStringProperty(data.getValue().getFournisseur().getNom()); + } + }); + + TabColDate.setCellValueFactory(new PropertyValueFactory("DateCreation")); + TabColDate.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDate.getStyleClass().add("Center"); + + + TabColLocalReception.setCellValueFactory(new PropertyValueFactory("Local")); + TabColLocalReception.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColLocalReception.getStyleClass().add("Center"); + + TabColNetPayer.setCellValueFactory(new PropertyValueFactory("NetAPayer")); + TabColNetPayer.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNetPayer.getStyleClass().add("Center"); + + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + TabColDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ReglementAjouter1Controller.ButtonCell(); + } + }); + + + + TabColSeleNumero.setCellValueFactory(new PropertyValueFactory("Numero")); + + TabColSeleFrs.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColSeleFrs.getStyleClass().add("Center"); + TabColSeleFrs.setCellValueFactory(new Callback, ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures data) { + return new SimpleStringProperty(data.getValue().getFournisseur().getNom()); + } + }); + + TabColSeleDate.setCellValueFactory(new PropertyValueFactory("DateCreation")); + TabColSeleDate.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColSeleDate.getStyleClass().add("Center"); + + TabColSeleHeur.setCellValueFactory(new PropertyValueFactory("HeurCreation")); + TabColSeleHeur.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColSeleHeur.getStyleClass().add("Center"); + + TabColSeleLocalReception.setCellValueFactory(new PropertyValueFactory("Local")); + TabColSeleLocalReception.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColSeleLocalReception.getStyleClass().add("Center"); + + TabColSeleNetPayer.setCellValueFactory(new PropertyValueFactory("NetAPayer")); + TabColSeleNetPayer.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColSeleNetPayer.getStyleClass().add("Center"); + + TabColSeleSupprimer.setStyle( "-fx-alignment: CENTER;"); + TabColSeleSupprimer.getStyleClass().add("Center"); + TabColSeleSupprimer.setSortable(true); + + TabColSeleSupprimer.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColSeleSupprimer.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ReglementAjouter1Controller.ButtonCellRemove(); + } + }); + + + + getChercherFactureFrs(); + } + + @FXML + private void DetailReglementButtonAction(ActionEvent event) throws IOException { + if(DataSelectFacture.size()>0){ + if(ControleListFacture()){ + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Reglement/ReglementAjouter2.fxml")); + Parent NodeReglementAjouter2 = (Parent)fxmlLoader.load(); + + ReglementAjouter2Controller ReglementAjouter2 = fxmlLoader.getController(); + ReglementAjouter2.SetDataFactureFrs(DataSelectFacture); + + AnchorPaneReglementAjouter1.getChildren().clear(); + AnchorPaneReglementAjouter1.getChildren().add(NodeReglementAjouter2); + }else{ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Les fournisseurs sélectionnés sont différents"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + + } + + }else{ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Vous devez ajouter au moin une facture à la liste des factures"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + } + + } + + + private void getChercherFactureFrs() + { + TextFieldNumero.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + getDataFactureFrs("numero", " LIKE '"+TextFieldNumero.getText()+"%'"); + } + }); + DatePickerDateReception.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + try{ + getDataFactureFrs("DATE(date_creation)", " = '"+DatePickerDateReception.getValue().toString()+"'"); + }catch(Exception ex){} + } + }); + DatePickerDateReception.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + try{ + String DateReception = DatePickerDateReception.getConverter().fromString(DatePickerDateReception.getEditor().getText()).toString(); + getDataFactureFrs("DATE(date_creation)", " = '"+DateReception+"'"); + }catch(Exception ex){} + } + }); + + ChoiceBoxLocalReception.valueProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue ov, String t, String ValLocal) { + getDataFactureFrs("local_reception", " LIKE '"+ValLocal+"%'"); + } + }); + + TextFieldNetAPayer.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + getDataFactureFrs("net_a_payer", "LIKE '"+TextFieldNetAPayer.getText()+"%'"); + } + }); + + TextFieldFournisseu.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + if(newValue.contains(" - ")){ + String[] array = newValue.split(" - ", -1); + getDataFactureFrs("id_fourisseur", " = "+array[0]); + } + } + }); + + + } + + public void setDataFactureFrs(ObservableList data_facture){ + DataSelectFacture = data_facture; + TableViewSeleFactureFrs.setItems(data_facture); + TableViewSeleFactureFrs.refresh(); + } + + private void getDataFactureFrs(final String tab, final String mot){ + + ProgressFactureFrs.setVisible(true); + TableViewFactureFrs.setItems(null); + TableViewFactureFrs.setVisible(false); + + // Create a Runnable + Runnable task = new Runnable(){ + public void run(){ + Platform.runLater(new Runnable(){ + @Override + public void run(){ + try { + ObservableList ListFactureFrs = FactureDB.getDataFactureFrs(tab, mot, null, null); + TableViewFactureFrs.setItems(ListFactureFrs); + ProgressFactureFrs.setVisible(false); + TableViewFactureFrs.setVisible(true); + TableViewFactureFrs.refresh(); + } catch (Exception ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + }); + } + }; + Thread backgroundThread = new Thread(task); // Run the task in a background thread + backgroundThread.setDaemon(true); // Terminate the running thread if the application exits + backgroundThread.start(); // Start the thread + } + + + private boolean ControleListFacture(){ + boolean result = true ; + String CodeFirst = DataSelectFacture.get(0).getFournisseur().getCode(); + for( FactureFrs FactSele : DataSelectFacture ) { + if(!FactSele.getFournisseur().getCode().equals(CodeFirst)){ + result = false ; + break; + } + } + return result; + } + + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + try { + FactureFrs ListFactureFrs = (FactureFrs) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + + //Verifier si la Facture existe déja + boolean result = true ; + for( FactureFrs FactSele : DataSelectFacture ) { + if(FactSele.getNumero().equals(ListFactureFrs.getNumero())){ + result = false ; + break; + } + } + if(result){ + DataSelectFacture.add(ListFactureFrs); + TableViewSeleFactureFrs.setItems(DataSelectFacture); + TableViewSeleFactureFrs.refresh(); + } + + } catch (Exception ex) { + System.err.println("ReglementAjouter1Controller ButtonCell ! \n"+ex.getMessage()); + } + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + //Define the button cell + private class ButtonCellRemove extends TableCell { + + final Button cellButton = new Button(); + + ButtonCellRemove(){ + cellButton.getStyleClass().add("btn-danger"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + int selectdIndex = getTableRow().getIndex(); + DataSelectFacture.remove(selectdIndex); + TableViewSeleFactureFrs.setItems(DataSelectFacture); + TableViewSeleFactureFrs.refresh(); + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } +} diff --git a/src/main/java/Controllers/Reglement/ReglementAjouter2Controller.java b/src/main/java/Controllers/Reglement/ReglementAjouter2Controller.java new file mode 100644 index 0000000..df3d1c3 --- /dev/null +++ b/src/main/java/Controllers/Reglement/ReglementAjouter2Controller.java @@ -0,0 +1,497 @@ +/* + * 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 Controllers.Reglement; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.contro; +import Models.ChequeClt.ChequeList; +import Models.TraiteClt.DatePickerCell; +import Models.ChequeClt.DatePickerCellCheque; +import Models.FactureFrs.FactureFrs; +import Models.Reglement.CarteElectroniqueFrs; +import Models.Reglement.ChequeFrs; +import Models.Reglement.Reglement; +import Models.Reglement.TraiteFrs; +import Models.TraiteClt.TraiteList; +import java.io.IOException; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.util.Calendar; +import java.util.Date; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * + * @author Maher + */ +public class ReglementAjouter2Controller implements Initializable { + + @FXML private AnchorPane AnchorPaneReglementAjouter2; + @FXML private AnchorPane PaneComptant; + @FXML private AnchorPane PaneFacilite; + + @FXML private AnchorPane PaneFaciliteCheque; + @FXML private AnchorPane PaneFaciliteTraite; + + @FXML private Text TextNbrFacture; + @FXML private Text TextTotalFacture; + + @FXML private GridPane GridPaneCheque; + @FXML private GridPane GridPaneCarte; + + @FXML private TextField TextFieldNbrEcheance; + @FXML private Text TextCtlNbrEcheance; + @FXML private Text TotalEcheance; + + @FXML private TextField TextFieldChequeNomBanque; + @FXML private TextField TextFieldChequeNumero; + @FXML private TextField TextFieldChequeNomComple; + @FXML private DatePicker DatePickerChequeDate; + @FXML private Text TextCtlChequeNomBanque; + @FXML private Text TextCtlChequeNumero; + @FXML private Text TextCtlChequeNomComple; + @FXML private Text TextCtlChequeDate; + + @FXML private TextField TextFieldCarteNomBanque; + @FXML private TextField TextFieldCarteNumeroCart; + @FXML private TextField TextFieldCarteNumeroTransaction; + @FXML private TextField TextFieldCarteHeurTransaction; + @FXML private DatePicker DatePickerCarteDate; + @FXML private Text TextCtlCartNomBanque; + @FXML private Text TextCtlCartNumeroCart; + @FXML private Text TextCtlCartNumeroTransaction; + @FXML private Text TextCtlCartDateHeurTransaction; + + @FXML public TableView TableViewListeTraite ; + @FXML public TableColumn TabColDateTraite; + @FXML public TableColumn TabColMontantTraite; + + @FXML public TableView TableViewListeCheque ; + @FXML public TableColumn TabColDateCheque; + @FXML public TableColumn TabColNumeroCheque; + @FXML public TableColumn TabColBanqueCheque; + @FXML public TableColumn TabColMontantCheque; + + float TotalFact = 0; + boolean clt_total_echeance = true; + private int SelectComptantFacilite ; // 0 Comptant | 1 Facilité + private int PayerEesCheqCar = 0; //Payer en: 0 espèce | 1 Chéque | 2 Carte électronique + private int facilite_traite_cheque = 0; // 0 traite | 1 cheque + + ObservableList DataFacture = FXCollections.observableArrayList(); + + public ObservableList ListT = FXCollections.observableArrayList(); + public ObservableList ListCheque = FXCollections.observableArrayList(); + + Reglement reglement = new Reglement(); + + contro clt = new contro(); + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TableViewListeTraite.setEditable(true); + TabColMontantTraite.setStyle( "-fx-alignment: CENTER;"); + TabColMontantTraite.getStyleClass().add("Center"); + TabColMontantTraite.setCellValueFactory(new PropertyValueFactory("MontantTraite")); + TabColMontantTraite.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColMontantTraite.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewMontant = t.getNewValue().replace('.',','); + ((TraiteList) t.getTableView().getItems().get(t.getTablePosition().getRow())).setMontantTraite(NewMontant); + CalculeTotalTrait(); + } + }); + + TabColDateTraite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateTraite.getStyleClass().add("Center"); + TabColDateTraite.setCellValueFactory(new PropertyValueFactory("date")); + TabColDateTraite.setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn p) { + DatePickerCell datePick = new DatePickerCell(ListT); + return datePick; + } + }); + TableViewListeTraite.setItems(ListT); + + + + //Cheque + TabColNumeroCheque.setStyle( "-fx-alignment: CENTER;"); + TabColNumeroCheque.getStyleClass().add("Center"); + TabColNumeroCheque.setCellValueFactory(new PropertyValueFactory("NumeroCheque")); + TabColNumeroCheque.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColNumeroCheque.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewNumeroCheque = t.getNewValue(); + contro clt = new contro(); + if(!clt.isNumeric(NewNumeroCheque)){ + if(t.getTablePosition().getRow() == 0){ + Integer NumeroCheque = Integer.valueOf(NewNumeroCheque); + int indise = 0; + while(indise("BanqueCheque")); + TabColBanqueCheque.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColBanqueCheque.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewBanque = t.getNewValue(); + if(t.getTablePosition().getRow() == 0){ + int indise = 0; + while(indise("MontantCheque")); + TabColMontantCheque.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColMontantCheque.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewQuantite = t.getNewValue(); + ((ChequeList) t.getTableView().getItems().get(t.getTablePosition().getRow())).setMontantCheque(NewQuantite); + CalculeTotalCheque(); + } + }); + + TabColDateCheque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateCheque.getStyleClass().add("Center"); + TabColDateCheque.setCellValueFactory(new PropertyValueFactory("date")); + TabColDateCheque.setEditable(true); + TabColDateCheque.setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn p) { + DatePickerCellCheque datePick = new DatePickerCellCheque(ListCheque); + return datePick; + } + }); + + TableViewListeCheque.setItems(ListCheque); + + } + + @FXML + private void DetailRelementSuitButtonAction(ActionEvent event) throws IOException { + final Reglement reglement = new Reglement(); + boolean clt_reglement = true; + + if(SelectComptantFacilite == 0){ + reglement.setTypePaiement("0"); + + //0 espèce | 1 Chéque | 2 Carte électronique + if(PayerEesCheqCar == 0){ + reglement.setModePaiement("0"); + }else if(PayerEesCheqCar == 1){ + reglement.setModePaiement("1"); + if(clt.ContrNull(TextFieldChequeNomBanque, TextCtlChequeNomBanque) && + clt.ContrNumeriqueNotnull(TextFieldChequeNumero, TextCtlChequeNumero) && + clt.ContrNull(TextFieldChequeNomComple, TextCtlChequeNomComple)&& + clt.ContrNullDatePicker(DatePickerChequeDate, TextCtlChequeDate) ){ + + ChequeFrs Cheque = new ChequeFrs(); + Cheque.setBanqueChequeFrs(TextFieldChequeNomBanque.getText()); + Cheque.setNumeroChequeFrs(TextFieldChequeNumero.getText()); + Cheque.setNomCompletChequeFrs(TextFieldChequeNomComple.getText()); + Cheque.setDatePaiement(DatePickerChequeDate.getValue().toString()); + Cheque.setMontantChequeFrs(Adaptateur.ArrondFloatToString(TotalFact)); + reglement.setCheque(Cheque); + }else{ clt_reglement = false; } + + }else if(PayerEesCheqCar == 2){ + reglement.setModePaiement("2"); + if(clt.ContrNull(TextFieldCarteNomBanque, TextCtlCartNomBanque) && + clt.ContrNumeriqueNotnull(TextFieldCarteNumeroCart, TextCtlCartNumeroCart) && + clt.ContrNumeriqueNotnull(TextFieldCarteNumeroTransaction, TextCtlCartNumeroTransaction)&& + clt.ContrNullDatePicker(DatePickerCarteDate, TextCtlCartDateHeurTransaction) && + clt.ContrHour(TextFieldCarteHeurTransaction, TextCtlCartDateHeurTransaction) ){ + CarteElectroniqueFrs CarteElectronique = new CarteElectroniqueFrs(); + CarteElectronique.setBanque(TextFieldCarteNomBanque.getText()); + CarteElectronique.setNumeroTransaction(TextFieldCarteNumeroTransaction.getText()); + CarteElectronique.setCodeCarte(TextFieldCarteNumeroCart.getText()); + CarteElectronique.setDateTransaction(DatePickerCarteDate.getValue().toString()); + CarteElectronique.setHeurTransaction(TextFieldCarteHeurTransaction.getText()); + CarteElectronique.setMantant(Adaptateur.ArrondFloatToString(TotalFact)); + reglement.setCarte(CarteElectronique); + }else{ clt_reglement = false; } + } + }else if(SelectComptantFacilite == 1){ + reglement.setTypePaiement("1"); + + //1 Chéque | 3 Traite + if(facilite_traite_cheque == 0){ + if(clt_total_echeance){ + reglement.setModePaiement("3"); + ObservableList TraitFrs = FXCollections.observableArrayList(); + for(TraiteList List : ListT ) { + String DatePaiement = new SimpleDateFormat("yyyy-MM-dd").format(List.getDate()); + TraitFrs.add(new TraiteFrs("", DatePaiement, null, List.getMontantTraite().replace(",", "."), null)); + } + reglement.setListTraite(TraitFrs); + }else{ clt_reglement = false; } + + }else if(facilite_traite_cheque == 1){ + if(clt_total_echeance){ + reglement.setModePaiement("1"); + ObservableList CollCheque = FXCollections.observableArrayList(); + for(ChequeList List : ListCheque ) { + String CodeChequeFrs = ""; + String NumeroChequeFrs = List.getNumeroCheque(); + String BanqueChequeFrs = List.getBanqueCheque(); + String MontantChequeFrs = List.getMontantCheque(); + String DateCreation = LocalDateTime.now().toString(); + String DatePaiement = new SimpleDateFormat("yyyy-MM-dd").format(List.getDate()); + //controle numero chéque et nom banque + if(NumeroChequeFrs.equals("") || BanqueChequeFrs.equals("")){ + clt_reglement = false; + } + CollCheque.add(new ChequeFrs(CodeChequeFrs, NumeroChequeFrs, BanqueChequeFrs, MontantChequeFrs, null, DatePaiement, DateCreation)); + } + reglement.setListCheque(CollCheque); + }else{ clt_reglement = false; } + } + } + + if(clt_reglement){ + reglement.setMontant(Adaptateur.ArrondFloatToString(TotalFact)); + reglement.setListFacture(DataFacture); + reglement.setDateTimeCreation(LocalDateTime.now().toString()); + reglement.setFournisseur(DataFacture.get(0).getFournisseur()); + reglement.setEtatReglement("0"); + + final ReglementDialogConfirmationController ReglementDialogConfirmation = new ReglementDialogConfirmationController(); + ReglementDialogConfirmation.Enregister.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + try { + ReglementDialogConfirmation.AnchorPrincipal.setVisible(false); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Reglement/ReglementAjouter3.fxml")); + Parent NodeReglementAjouter3 = (Parent)fxmlLoader.load(); + + ReglementAjouter3Controller ReglementAjouter3 = fxmlLoader.getController(); + ReglementAjouter3.setDataReglement(reglement); + + AnchorPaneReglementAjouter2.getChildren().clear(); + AnchorPaneReglementAjouter2.getChildren().add(NodeReglementAjouter3); + } catch (IOException ex) { + Logger.getLogger(ReglementAjouter2Controller.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + ReglementDialogConfirmation.setReglement(reglement); + ReglementDialogConfirmation.Show(); + } + + } + + @FXML + private void AjouterTraitementButtonAction(ActionEvent event) throws IOException { + Date date= new Date(); + Calendar cal = Calendar.getInstance(); + if(clt.ContrNumeriqueNotnull(TextFieldNbrEcheance, TextCtlNbrEcheance)){ + ListT.clear(); + Integer IntegerNbrEcheance = Adaptateur.Diviseur(Adaptateur.StringToFloat(TextFieldNbrEcheance.getText())); + float Value = (float) TotalFact / IntegerNbrEcheance; + Integer div = Adaptateur.Diviseur(Value); + float Somme = 0; + if(facilite_traite_cheque == 0){ + PaneFaciliteCheque.setVisible(false); + PaneFaciliteTraite.setVisible(true); + for(int i=0; i DataFact){ + DataFacture = DataFact; + for( FactureFrs Facture : DataFact ) { + TotalFact += Adaptateur.StringToFloat(Facture.getNetAPayer()); + } + TextTotalFacture.setText(Adaptateur.FloatToStringEspaceCurrency(TotalFact)); + TotalEcheance.setText("0 / "+Adaptateur.ArrondFloatToString(TotalFact)); + + TotalFact = Adaptateur.ArrondFloatToFloat(TotalFact); + + TextNbrFacture.setText(DataFact.size()+""); + } + + + public void CalculeTotalTrait(){ + float Somme = 0; + for(TraiteList List : ListT ) { + Somme += Adaptateur.StringToFloat(List.getMontantTraite()); + } + TotalEcheance.setText(Adaptateur.ArrondFloatToString(Somme)+" / "+Adaptateur.ArrondFloatToString(TotalFact)); + + if(Adaptateur.ArrondFloatToString(Somme).equals(Adaptateur.ArrondFloatToString(TotalFact))){ + TotalEcheance.setFill(Color.web("#000000")); + clt_total_echeance = true; + }else{ + TotalEcheance.setFill(Color.web("#f20606")); + clt_total_echeance = false; + } + + } + + public void CalculeTotalCheque(){ + float Somme = 0; + for(ChequeList List : ListCheque ) { + Somme += Adaptateur.StringToFloat(List.getMontantCheque()); + } + TotalEcheance.setText(Adaptateur.ArrondFloatToString(Somme)+" / "+Adaptateur.ArrondFloatToString(TotalFact)); + + if(Adaptateur.ArrondFloatToString(Somme).equals(Adaptateur.ArrondFloatToString(TotalFact))){ + TotalEcheance.setFill(Color.web("#000000")); + clt_total_echeance = true; + }else{ + TotalEcheance.setFill(Color.web("#f20606")); + clt_total_echeance = false; + } + + } + + @FXML + private void ReglementAjouter1ButtonAction(ActionEvent event) throws IOException { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Reglement/ReglementAjouter1.fxml")); + Parent NodeReglementAjouter1 = (Parent)fxmlLoader.load(); + + ReglementAjouter1Controller ReglementAjouter1 = fxmlLoader.getController(); + ReglementAjouter1.setDataFactureFrs(DataFacture); + + AnchorPaneReglementAjouter2.getChildren().clear(); + AnchorPaneReglementAjouter2.getChildren().add(NodeReglementAjouter1); + } + + @FXML + public void RadioComptantAction(ActionEvent event) throws IOException { + SelectComptantFacilite = 0; + PaneComptant.setVisible(true); + PaneFacilite.setVisible(false); + } + + + @FXML + public void RadioEspeceAction(ActionEvent event) throws IOException { + PayerEesCheqCar = 0; + GridPaneCheque.setVisible(false); + GridPaneCarte.setVisible(false); + } + + @FXML + public void RadioChequeAction(ActionEvent event) throws IOException { + PayerEesCheqCar = 1; + GridPaneCheque.setVisible(true); + GridPaneCarte.setVisible(false); + } + + @FXML + public void RadioCarteAction(ActionEvent event) throws IOException { + PayerEesCheqCar = 2; + GridPaneCheque.setVisible(false); + GridPaneCarte.setVisible(true); + } + + @FXML + public void RadioFaciliteAction(ActionEvent event) throws IOException { + SelectComptantFacilite = 1; + PaneComptant.setVisible(false); + PaneFacilite.setVisible(true); + } + + @FXML + public void RadioFaciliteTraiteAction(ActionEvent event) throws IOException { + facilite_traite_cheque = 0; + PaneFaciliteCheque.setVisible(false); + PaneFaciliteTraite.setVisible(true); + } + + @FXML + public void RadioFaciliteChequeAction(ActionEvent event) throws IOException { + facilite_traite_cheque = 1; + PaneFaciliteCheque.setVisible(true); + PaneFaciliteTraite.setVisible(false); + } + +} diff --git a/src/main/java/Controllers/Reglement/ReglementAjouter3Controller.java b/src/main/java/Controllers/Reglement/ReglementAjouter3Controller.java new file mode 100644 index 0000000..41a31bd --- /dev/null +++ b/src/main/java/Controllers/Reglement/ReglementAjouter3Controller.java @@ -0,0 +1,255 @@ +/* + * 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 Controllers.Reglement; + +import Controllers.Traitement.Adaptateur; +import Models.FactureFrs.FactureFrs; +import Models.Reglement.ChequeFrs; +import Models.Reglement.Reglement; +import Models.Reglement.ReglementDB; +import Models.Reglement.TraiteFrs; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.Button; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher + */ +public class ReglementAjouter3Controller implements Initializable { + + @FXML public ProgressIndicator ProgressReglement; + @FXML private AnchorPane PaneDetailTraite; + private Service ThreadReglement; + + @FXML private Text TextCodeReglement; + @FXML private Text TextTypePaiement; + @FXML private Text TextModePaiement; + @FXML private Text TextDateCreation; + @FXML private Text TextTotalReglement; + @FXML private Text TextProfile; + + @FXML private Text TextCodeFrs; + @FXML private Text TextNomFrs; + @FXML private Text TextTele1Frs; + @FXML private Text TextTele2Frs; + + @FXML private GridPane GridPaneCheque; + @FXML private GridPane GridPaneCarte; + + @FXML private Text TextCartNomBanque; + @FXML private Text TextCartNumeroCart; + @FXML private Text TextCartNumeroTransaction; + @FXML private Text TextCartDateHeurTransaction; + + @FXML private Text TextChequeNomBanque; + @FXML private Text TextChequeNumero; + @FXML private Text TextChequeNomComple; + @FXML private Text TextChequeDate; + + @FXML private Button ButtonImprimer; + + @FXML private TableView TableViewListeCheque ; + @FXML private TableColumn TabColDateCheque; + @FXML private TableColumn TabColNumeroCheque; + @FXML private TableColumn TabColBanqueCheque; + @FXML private TableColumn TabColMontantCheque; + + @FXML private TableView TableViewListeTraite ; + @FXML private TableColumn TabColDateTraite; + @FXML private TableColumn TabColMontantTraite; + + + + @FXML private TableView TableViewFactureFrs; + @FXML private TableColumn TabColNumeroFact; + @FXML private TableColumn TabColProfile; + @FXML private TableColumn TabColDate; + @FXML private TableColumn TabColHeur; + @FXML private TableColumn TabColLocalReception; + @FXML private TableColumn TabColNetPayer; + + Reglement reglement = new Reglement(); + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColMontantTraite.setStyle( "-fx-alignment: CENTER;"); + TabColMontantTraite.getStyleClass().add("Center"); + TabColMontantTraite.setCellValueFactory(new PropertyValueFactory("Montant")); + + TabColDateTraite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateTraite.getStyleClass().add("Center"); + TabColDateTraite.setCellValueFactory(new PropertyValueFactory("DatePaiement")); + + + TabColNumeroCheque.setStyle( "-fx-alignment: CENTER;"); + TabColNumeroCheque.getStyleClass().add("Center"); + TabColNumeroCheque.setCellValueFactory(new PropertyValueFactory("NumeroChequeFrs")); + + TabColBanqueCheque.setStyle( "-fx-alignment: CENTER;"); + TabColBanqueCheque.getStyleClass().add("Center"); + TabColBanqueCheque.setCellValueFactory(new PropertyValueFactory("BanqueChequeFrs")); + + TabColDateCheque.setStyle( "-fx-alignment: CENTER;"); + TabColDateCheque.getStyleClass().add("Center"); + TabColDateCheque.setCellValueFactory(new PropertyValueFactory("DatePaiement")); + + TabColMontantCheque.setStyle( "-fx-alignment: CENTER;"); + TabColMontantCheque.getStyleClass().add("Center"); + TabColMontantCheque.setCellValueFactory(new PropertyValueFactory("MontantChequeFrs")); + + TabColNumeroFact.setCellValueFactory(new PropertyValueFactory("Numero")); + + TabColProfile.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColProfile.getStyleClass().add("Center"); + TabColProfile.setCellValueFactory(new Callback, ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures data) { + return new SimpleStringProperty(data.getValue().getProfile().getNom()+" "+data.getValue().getProfile().getPrenom()); + } + }); + + TabColDate.setCellValueFactory(new PropertyValueFactory("DateCreation")); + TabColDate.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDate.getStyleClass().add("Center"); + + TabColHeur.setCellValueFactory(new PropertyValueFactory("HeurCreation")); + TabColHeur.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColHeur.getStyleClass().add("Center"); + + TabColLocalReception.setCellValueFactory(new PropertyValueFactory("Local")); + TabColLocalReception.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColLocalReception.getStyleClass().add("Center"); + + TabColNetPayer.setCellValueFactory(new PropertyValueFactory("NetAPayer")); + TabColNetPayer.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNetPayer.getStyleClass().add("Center"); + } + + public void setDataReglement(Reglement regl){ + reglement = regl; + LanchSaveReglement(); + } + + public void setReglement(){ + + TextCodeReglement.setText(reglement.getNumero()); + TextTypePaiement.setText(reglement.getTypePaiementString()); + TextModePaiement.setText(reglement.getModePaiementString()); + TextDateCreation.setText(reglement.getDateTimeCreationString()); + TextTotalReglement.setText(Adaptateur.StringToStringEspaceCurrency(reglement.getMontant())); + + TextProfile.setText(reglement.getProfile().getPrenom()+" "+reglement.getProfile().getNom()); + + TextCodeFrs.setText(reglement.getFournisseur().getCode()); + TextNomFrs.setText(reglement.getFournisseur().getNom()); + TextTele1Frs.setText(reglement.getFournisseur().getTele1()); + TextTele2Frs.setText(reglement.getFournisseur().getTele2()); + + TableViewFactureFrs.setItems(reglement.getListFacture()); + // 0 Comptant + if(reglement.getTypePaiement().equals("0")){ + + //0 espèce + if(reglement.getModePaiement().equals("0")){ + + //1 Chéque + }else if(reglement.getModePaiement().equals("1")){ + GridPaneCheque.setVisible(true); + TextChequeNomBanque.setText(reglement.getCheque().getBanqueChequeFrs()); + TextChequeNumero.setText(reglement.getCheque().getNumeroChequeFrs()); + TextChequeNomComple.setText(reglement.getCheque().getNomCompletChequeFrs()); + TextChequeDate.setText(reglement.getCheque().getDateCreation()); + + //2 Carte électronique + }else if(reglement.getModePaiement().equals("2")){ + GridPaneCarte.setVisible(true); + TextCartNomBanque.setText(reglement.getCarte().getBanque()); + TextCartNumeroCart.setText(reglement.getCarte().getNumeroCarte()); + TextCartNumeroTransaction.setText(reglement.getCarte().getNumeroTransaction()); + TextCartDateHeurTransaction.setText(reglement.getCarte().getDateTransaction()+" "+reglement.getCarte().getHeurTransaction()); + } + + + //1 Facilité + }else if(reglement.getTypePaiement().equals("1")){ + + //1 Chéque + if(reglement.getModePaiement().equals("1")){ + TableViewListeCheque.setVisible(true); + ObservableList NewListCheque = FXCollections.observableArrayList(); + for(ChequeFrs Cheque : reglement.getListCheque()) { + String CodeChequeFrs = Cheque.getCodeChequeFrs(); + String NumeroChequeFrs = Cheque.getNumeroChequeFrs(); + String BanqueChequeFrs = Cheque.getBanqueChequeFrs(); + String MontantChequeFrs = Adaptateur.StringDeleZero(Cheque.getMontantChequeFrs()); + String NomCompletChequeFrs = Cheque.getNomCompletChequeFrs(); + String DatePaiement = Adaptateur.NormalDateFormat(Cheque.getDatePaiement()); + String DateCreation = Adaptateur.NormalDateTimeFormat(Cheque.getDateCreation()); + NewListCheque.add(new ChequeFrs(CodeChequeFrs, NumeroChequeFrs, BanqueChequeFrs, MontantChequeFrs, NomCompletChequeFrs, DatePaiement, DateCreation)); + } + TableViewListeCheque.setItems(NewListCheque); + + + //3 Traite + }else if(reglement.getModePaiement().equals("3")){ + TableViewListeTraite.setVisible(true); + ButtonImprimer.setVisible(true); + TableViewListeTraite.setItems(reglement.getListTraiteString()); + } + } + + } + + public void LanchSaveReglement(){ + ThreadReglement = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + ReglementDB reglementDB = new ReglementDB(); + reglement = reglementDB.setReglementDB(reglement); + reglement = reglementDB.getReglementDB(reglement.getNumero()); + return null; + } + }; + } + }; + ThreadReglement.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressReglement.setVisible(false); + setReglement(); + PaneDetailTraite.setVisible(true); + } + }); + ThreadReglement.start(); + } + + + +} diff --git a/src/main/java/Controllers/Reglement/ReglementDialogConfirmationController.java b/src/main/java/Controllers/Reglement/ReglementDialogConfirmationController.java new file mode 100644 index 0000000..02b4d2b --- /dev/null +++ b/src/main/java/Controllers/Reglement/ReglementDialogConfirmationController.java @@ -0,0 +1,230 @@ +/* + * 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 Controllers.Reglement; + +import Controllers.CommandeClt.CommandeCltDialogConfirmationController; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.ParametreSystem; +import Models.FactureFrs.FactureFrs; +import Models.Reglement.ChequeFrs; +import Models.Reglement.Reglement; +import Models.Reglement.TraiteFrs; +import Models.User.User; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; + +/** + * FXML Controller class + * + * @author Maher + */ +public class ReglementDialogConfirmationController implements Initializable { + + public Node nodeFxml ; + + @FXML public AnchorPane AnchorPrincipal ; + @FXML public Button Enregister ; + + @FXML private AnchorPane AnchorDetailReglement; + + @FXML private Text TextTypePaiement; + @FXML private Text TextModePaiement; + @FXML private Text TextDateCreation; + @FXML private Text TextNombreFact; + @FXML private Text TextTotalReglement; + @FXML private Text TextProfile; + + @FXML private Text TextCodeFrs; + @FXML private Text TextNomFrs; + @FXML private Text TextFormesFrs; + @FXML private Text TextTele1Frs; + @FXML private Text TextTele2Frs; + @FXML private Text TextmailFrs; + + @FXML private GridPane GridPaneCheque; + @FXML private GridPane GridPaneCarte; + + @FXML private Text TextCartNomBanque; + @FXML private Text TextCartNumeroCart; + @FXML private Text TextCartNumeroTransaction; + @FXML private Text TextCartDateHeurTransaction; + + @FXML private Text TextChequeNomBanque; + @FXML private Text TextChequeNumero; + @FXML private Text TextChequeNomComple; + @FXML private Text TextChequeDate; + + @FXML private TableView TableViewListeCheque ; + @FXML private TableColumn TabColDateCheque; + @FXML private TableColumn TabColNumeroCheque; + @FXML private TableColumn TabColBanqueCheque; + @FXML private TableColumn TabColMontantCheque; + + @FXML private TableView TableViewListeTraite ; + @FXML private TableColumn TabColDateTraite; + @FXML private TableColumn TabColMontantTraite; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + //Cheque + TabColNumeroCheque.setStyle( "-fx-alignment: CENTER;"); + TabColNumeroCheque.getStyleClass().add("Center"); + TabColNumeroCheque.setCellValueFactory(new PropertyValueFactory("NumeroChequeFrs")); + + TabColBanqueCheque.setStyle( "-fx-alignment: CENTER;"); + TabColBanqueCheque.getStyleClass().add("Center"); + TabColBanqueCheque.setCellValueFactory(new PropertyValueFactory("BanqueChequeFrs")); + + TabColMontantCheque.setStyle( "-fx-alignment: CENTER;"); + TabColMontantCheque.getStyleClass().add("Center"); + TabColMontantCheque.setCellValueFactory(new PropertyValueFactory("MontantChequeFrs")); + + TabColDateCheque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateCheque.getStyleClass().add("Center"); + TabColDateCheque.setCellValueFactory(new PropertyValueFactory("DatePaiement")); + + + TabColDateTraite.setStyle( "-fx-alignment: CENTER;"); + TabColDateTraite.getStyleClass().add("Center"); + TabColDateTraite.setCellValueFactory(new PropertyValueFactory("DatePaiement")); + + TabColMontantTraite.setStyle( "-fx-alignment: CENTER;"); + TabColMontantTraite.getStyleClass().add("Center"); + TabColMontantTraite.setCellValueFactory(new PropertyValueFactory("Montant")); + + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconsave.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + Enregister.setGraphic(buttonGraphic); + } + + + public void setReglement(Reglement reglement){ + + TextModePaiement.setText(reglement.getModePaiementString()); + TextTypePaiement.setText(reglement.getTypePaiementString()); + + if(reglement.getTypePaiement().equals("0")){ + if(reglement.getModePaiement().equals("0")){ + AnchorDetailReglement.setVisible(false); + }else if(reglement.getModePaiement().equals("1")){ + GridPaneCheque.setVisible(true); + TextChequeNomBanque.setText(reglement.getCheque().getBanqueChequeFrs()); + TextChequeNumero.setText(reglement.getCheque().getNumeroChequeFrs()); + TextChequeNomComple.setText(reglement.getCheque().getNomCompletChequeFrs()); + TextChequeDate.setText(reglement.getCheque().getDatePaiement()); + }else if(reglement.getModePaiement().equals("2")){ + GridPaneCarte.setVisible(true); + TextCartNomBanque.setText(reglement.getCarte().getBanque()); + TextCartNumeroCart.setText(reglement.getCarte().getCodeCarte()); + TextCartNumeroTransaction.setText(reglement.getCarte().getNumeroTransaction()); + TextCartDateHeurTransaction.setText(Adaptateur.NormalDateFormat(reglement.getCarte().getDateTransaction())+" "+reglement.getCarte().getHeurTransaction()); + } + } + + if(reglement.getTypePaiement().equals("1")){ + AnchorDetailReglement.setVisible(true); + if(reglement.getListTraite() != null){ + TableViewListeTraite.setVisible(true); + TableViewListeTraite.setItems(reglement.getListTraiteString()); + }else if(reglement.getListCheque() != null){ + TableViewListeCheque.setVisible(true); + ObservableList NewListCheque = FXCollections.observableArrayList(); + for(ChequeFrs Cheque : reglement.getListCheque()) { + String CodeChequeFrs = Cheque.getCodeChequeFrs(); + String NumeroChequeFrs = Cheque.getNumeroChequeFrs(); + String BanqueChequeFrs = Cheque.getBanqueChequeFrs(); + String MontantChequeFrs = Adaptateur.StringDeleZero(Cheque.getMontantChequeFrs()); + String NomCompletChequeFrs = Cheque.getNomCompletChequeFrs(); + String DatePaiement = Adaptateur.NormalDateFormat(Cheque.getDatePaiement()); + String DateCreation = Adaptateur.NormalDateTimeFormat(Cheque.getDateCreation()); + NewListCheque.add(new ChequeFrs(CodeChequeFrs, NumeroChequeFrs, BanqueChequeFrs, MontantChequeFrs, NomCompletChequeFrs, DatePaiement, DateCreation)); + } + TableViewListeCheque.setItems(NewListCheque); + } + } + + + + ObservableList ListFacture = reglement.getListFacture(); + float Somme = 0; + for(FactureFrs facture : ListFacture ) { + Somme += Adaptateur.StringToFloat(facture.getNetAPayer()); + } + + TextTotalReglement.setText(Adaptateur.FloatToStringEspaceCurrency(Somme)); + TextNombreFact.setText(ListFacture.size()+""); + + TextDateCreation.setText(Adaptateur.NormalDateFormat(reglement.getDateTimeCreation())); + TextProfile.setText(User.nom+" "+User.prenom); + + TextCodeFrs.setText(reglement.getFournisseur().getCode()); + TextNomFrs.setText(reglement.getFournisseur().getNom()); + TextFormesFrs.setText(reglement.getFournisseur().getFormes()); + TextTele1Frs.setText(reglement.getFournisseur().getTele1()); + TextTele2Frs.setText(reglement.getFournisseur().getTele2()); + TextmailFrs.setText(reglement.getFournisseur().getMail()); + } + + public ReglementDialogConfirmationController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Reglement/ReglementDialogConfirmation.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(CommandeCltDialogConfirmationController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + @FXML + private void ExitButtonAction(ActionEvent event) throws IOException { + AnchorPrincipal.setVisible(false); + } + + + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } +} diff --git a/src/main/java/Controllers/Reglement/ReglementDialogDetailController.java b/src/main/java/Controllers/Reglement/ReglementDialogDetailController.java new file mode 100644 index 0000000..6a95060 --- /dev/null +++ b/src/main/java/Controllers/Reglement/ReglementDialogDetailController.java @@ -0,0 +1,313 @@ +/* + * 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 Controllers.Reglement; + +import Controllers.CommandeClt.CommandeCltDialogConfirmationController; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.ParametreSystem; +import Models.FactureFrs.FactureFrs; +import Models.Reglement.ChequeFrs; +import Models.Reglement.Reglement; +import Models.Reglement.ReglementDB; +import Models.Reglement.TraiteFrs; +import java.io.IOException; +import java.net.URL; +import java.text.DecimalFormat; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import javafx.util.Callback; + +/** + * FXML Controller class + * + * @author Maher + */ +public class ReglementDialogDetailController implements Initializable { + + public Node nodeFxml ; + + @FXML public AnchorPane AnchorPrincipal ; + @FXML public ProgressIndicator ProgressReglement; + @FXML public AnchorPane PaneDetailReglement; + + @FXML private Text TextCodeReglement; + @FXML private Text TextTypePaiement; + @FXML private Text TextModePaiement; + @FXML private Text TextDateCreation; + @FXML private Text TextTotalReglement; + @FXML private Text TextProfile; + + @FXML private Text TextCodeFrs; + @FXML private Text TextNomFrs; + @FXML private Text TextTele1Frs; + @FXML private Text TextTele2Frs; + + @FXML private GridPane GridPaneCheque; + @FXML private GridPane GridPaneCarte; + + @FXML private Text TextCartNomBanque; + @FXML private Text TextCartNumeroCart; + @FXML private Text TextCartNumeroTransaction; + @FXML private Text TextCartDateHeurTransaction; + + @FXML private Text TextChequeNomBanque; + @FXML private Text TextChequeNumero; + @FXML private Text TextChequeNomComple; + @FXML private Text TextChequeDate; + + @FXML private TableView TableViewListeCheque ; + @FXML private TableColumn TabColDateCheque; + @FXML private TableColumn TabColNumeroCheque; + @FXML private TableColumn TabColBanqueCheque; + @FXML private TableColumn TabColMontantCheque; + + @FXML private TableView TableViewListeTraite ; + @FXML private TableColumn TabColDateTraite; + @FXML private TableColumn TabColMontantTraite; + + + @FXML private TableView TableViewFactureFrs; + @FXML private TableColumn TabColNumeroFact; + @FXML private TableColumn TabColProfile; + @FXML private TableColumn TabColDate; + @FXML private TableColumn TabColHeur; + @FXML private TableColumn TabColLocalReception; + @FXML private TableColumn TabColNetPayer; + + private Service ThreadReglement; + + DecimalFormat Formatter = new DecimalFormat("##,###.## "); + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColMontantTraite.setStyle( "-fx-alignment: CENTER;"); + TabColMontantTraite.getStyleClass().add("Center"); + TabColMontantTraite.setCellValueFactory(new PropertyValueFactory("Montant")); + + TabColDateTraite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateTraite.getStyleClass().add("Center"); + TabColDateTraite.setCellValueFactory(new PropertyValueFactory("DatePaiement")); + + + TabColNumeroCheque.setStyle( "-fx-alignment: CENTER;"); + TabColNumeroCheque.getStyleClass().add("Center"); + TabColNumeroCheque.setCellValueFactory(new PropertyValueFactory("NumeroChequeFrs")); + + TabColBanqueCheque.setStyle( "-fx-alignment: CENTER;"); + TabColBanqueCheque.getStyleClass().add("Center"); + TabColBanqueCheque.setCellValueFactory(new PropertyValueFactory("BanqueChequeFrs")); + + TabColDateCheque.setStyle( "-fx-alignment: CENTER;"); + TabColDateCheque.getStyleClass().add("Center"); + TabColDateCheque.setCellValueFactory(new PropertyValueFactory("DatePaiement")); + + TabColMontantCheque.setStyle( "-fx-alignment: CENTER;"); + TabColMontantCheque.getStyleClass().add("Center"); + TabColMontantCheque.setCellValueFactory(new PropertyValueFactory("MontantChequeFrs")); + + TabColNumeroFact.setCellValueFactory(new PropertyValueFactory("Numero")); + + TabColProfile.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColProfile.getStyleClass().add("Center"); + TabColProfile.setCellValueFactory(new Callback, ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures data) { + return new SimpleStringProperty(data.getValue().getProfile().getNom()+" "+data.getValue().getProfile().getPrenom()); + } + }); + + TabColDate.setCellValueFactory(new PropertyValueFactory("DateCreation")); + TabColDate.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDate.getStyleClass().add("Center"); + + TabColHeur.setCellValueFactory(new PropertyValueFactory("HeurCreation")); + TabColHeur.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColHeur.getStyleClass().add("Center"); + + TabColLocalReception.setCellValueFactory(new PropertyValueFactory("Local")); + TabColLocalReception.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColLocalReception.getStyleClass().add("Center"); + + TabColNetPayer.setCellValueFactory(new PropertyValueFactory("NetAPayer")); + TabColNetPayer.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNetPayer.getStyleClass().add("Center"); + TabColNetPayer.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + if(item!= null){ + Text text = new Text(Formatter.format(Float.parseFloat(item))); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + } + + public void LanchShowReglement(final String IdReglement){ + + ThreadReglement = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + Reglement reglement = new ReglementDB().getReglementDB(IdReglement); + setReglement(reglement); + return null; + } + }; + } + }; + ThreadReglement.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressReglement.setVisible(false); + PaneDetailReglement.setVisible(true); + } + }); + ThreadReglement.start(); + } + + public void setReglement(Reglement reglement){ + + TextCodeReglement.setText(reglement.getNumero()); + TextTypePaiement.setText(reglement.getTypePaiementString()); + TextModePaiement.setText(reglement.getModePaiementString()); + TextDateCreation.setText(reglement.getDateTimeCreationString()); + + + TextTotalReglement.setText(Formatter.format(Float.parseFloat(reglement.getMontant()))+" "+ParametreSystem.CurrencySign); + TextProfile.setText(reglement.getProfile().getPrenom()+" "+reglement.getProfile().getNom()); + + TextCodeFrs.setText(reglement.getFournisseur().getCode()); + TextNomFrs.setText(reglement.getFournisseur().getNom()); + TextTele1Frs.setText(reglement.getFournisseur().getTele1()); + TextTele2Frs.setText(reglement.getFournisseur().getTele2()); + + TableViewFactureFrs.setItems(reglement.getListFacture()); + // 0 Comptant + if(reglement.getTypePaiement().equals("0")){ + + //0 espèce + if(reglement.getModePaiement().equals("0")){ + + //1 Chéque + }else if(reglement.getModePaiement().equals("1")){ + GridPaneCheque.setVisible(true); + TextChequeNomBanque.setText(reglement.getCheque().getBanqueChequeFrs()); + TextChequeNumero.setText(reglement.getCheque().getNumeroChequeFrs()); + TextChequeNomComple.setText(reglement.getCheque().getNomCompletChequeFrs()); + TextChequeDate.setText(reglement.getCheque().getDateCreation()); + + //2 Carte électronique + }else if(reglement.getModePaiement().equals("2")){ + GridPaneCarte.setVisible(true); + TextCartNomBanque.setText(reglement.getCarte().getBanque()); + TextCartNumeroCart.setText(reglement.getCarte().getNumeroCarte()); + TextCartNumeroTransaction.setText(reglement.getCarte().getNumeroTransaction()); + TextCartDateHeurTransaction.setText(reglement.getCarte().getDateTransaction()+" "+reglement.getCarte().getHeurTransaction()); + } + + + //1 Facilité + }else if(reglement.getTypePaiement().equals("1")){ + + //1 Chéque + if(reglement.getModePaiement().equals("1")){ + TableViewListeCheque.setVisible(true); + ObservableList NewListCheque = FXCollections.observableArrayList(); + for(ChequeFrs Cheque : reglement.getListCheque()) { + String CodeChequeFrs = Cheque.getCodeChequeFrs(); + String NumeroChequeFrs = Cheque.getNumeroChequeFrs(); + String BanqueChequeFrs = Cheque.getBanqueChequeFrs(); + String MontantChequeFrs = Adaptateur.StringDeleZero(Cheque.getMontantChequeFrs()); + String NomCompletChequeFrs = Cheque.getNomCompletChequeFrs(); + String DatePaiement = Adaptateur.NormalDateFormat(Cheque.getDatePaiement()); + String DateCreation = Adaptateur.NormalDateTimeFormat(Cheque.getDateCreation()); + NewListCheque.add(new ChequeFrs(CodeChequeFrs, NumeroChequeFrs, BanqueChequeFrs, MontantChequeFrs, NomCompletChequeFrs, DatePaiement, DateCreation)); + } + TableViewListeCheque.setItems(NewListCheque); + + + //3 Traite + }else if(reglement.getModePaiement().equals("3")){ + TableViewListeTraite.setVisible(true); + TableViewListeTraite.setItems(reglement.getListTraiteString()); + } + } + } + + public ReglementDialogDetailController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Reglement/ReglementDialogDetail.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(CommandeCltDialogConfirmationController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + @FXML + private void ExitButtonAction(ActionEvent event) throws IOException { + AnchorPrincipal.setVisible(false); + } + + + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + +} diff --git a/src/main/java/Controllers/Reglement/TraiteFrsPrintController.java b/src/main/java/Controllers/Reglement/TraiteFrsPrintController.java new file mode 100644 index 0000000..ce34077 --- /dev/null +++ b/src/main/java/Controllers/Reglement/TraiteFrsPrintController.java @@ -0,0 +1,34 @@ +package Controllers.Reglement; + +import java.net.URL; +import java.util.ResourceBundle; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class TraiteFrsPrintController implements Initializable { + + @FXML private Text TextCompanyName; + @FXML private Text TextCompanyPlace; + @FXML private Text TextCompanyAddress; + @FXML private Text TextBank; + @FXML private Text TextRIP; + @FXML private Text TextRIB; + @FXML private Text TextAmountLetter; + @FXML private Text TextAmountFigures; + @FXML private Text TextDateDeadline; + + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + // TODO + } + +} diff --git a/src/main/java/Controllers/Stock/BondeEnterPrintController.java b/src/main/java/Controllers/Stock/BondeEnterPrintController.java new file mode 100644 index 0000000..1b1a0e9 --- /dev/null +++ b/src/main/java/Controllers/Stock/BondeEnterPrintController.java @@ -0,0 +1,76 @@ +package Controllers.Stock; + +import Controllers.Traitement.Adaptateur; +import Models.User.User; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher + */ +public class BondeEnterPrintController implements Initializable { + + @FXML private Text TextLocale; + @FXML private Text TextCode; + @FXML private Text TextTitreBon; //Bon d'entrée pour | Bon de sortie à + @FXML private Text TextTypeSource; //Emetteur | Récepteur + @FXML private Text TextValSource; + + @FXML private Text TextDate; + @FXML private Text TextUser; + @FXML private Text TextTransporteur; + @FXML private Text TextPagination; + + @FXML private TableView TableViewProduit ; + @FXML private TableColumn TabColReference; + @FXML private TableColumn TabColDesignation; + @FXML private TableColumn TabColTVA; + @FXML private TableColumn TabColTotalTTC; + @FXML private TableColumn TabColQuantite; + + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designaton")); + TabColTVA.setCellValueFactory(new PropertyValueFactory("tva")); + TabColTVA.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTVA.getStyleClass().add("Center"); + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("prixttc")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + } + + public void setDataBonEnter(ObservableList listProduits, String TitreBon, String Local, String TypeSource, String ValSource, String Code, String Date, String Heur, String Transporteur, String Pagination){ + + TableViewProduit.setItems(null); + TableViewProduit.setItems(listProduits); + + TextTitreBon.setText(TitreBon); + + TextLocale.setText(Local); + TextCode.setText(Code); + TextTypeSource.setText(TypeSource); + TextValSource.setText(ValSource); + + TextDate.setText(Adaptateur.NormalDateFormat(Date)+" "+Heur); + TextUser.setText(User.nom+" "+User.prenom); + TextTransporteur.setText(Transporteur); + TextPagination.setText(Pagination); + } + +} diff --git a/src/main/java/Controllers/Stock/BondeEntrerController.java b/src/main/java/Controllers/Stock/BondeEntrerController.java new file mode 100644 index 0000000..746e7f2 --- /dev/null +++ b/src/main/java/Controllers/Stock/BondeEntrerController.java @@ -0,0 +1,546 @@ +/* + * 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 Controllers.Stock; + + +import Controllers.Dialog.MessageControle; +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Categorie.CategorieDB; +import Models.Stock.BonEntree; +import Models.Stock.BondeEntrerDB; +import Models.Stock.StockDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.sql.Date; +import java.time.LocalDate; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableColumn.CellEditEvent; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; +import org.controlsfx.control.textfield.TextFields; + +/** + * FXML Controller class + * + * @author Maher Ben Tili + */ +public class BondeEntrerController implements Initializable { + + @FXML private AnchorPane AnchorPaneBondentree; + + @FXML private ProgressBar ProgressBarStockBonEnter; + + @FXML private Text LocalRecepteur ; + + @FXML private ComboBox ComboLocale; + + @FXML private DatePicker DateBE; + @FXML private TextField TextFieldCategorie; + @FXML private TextField CodeBE; + @FXML private TextField BonEnteeTransporteur; + @FXML private TextField ReferenceBE; + @FXML private TextField DesignatonBE; + @FXML private TextField TextFieldCodeBarre; + + @FXML private TableView TableViewListeProduitRechercher ; + @FXML private TableColumn TabColRechReference; + @FXML private TableColumn TabColRechDesignaton; + @FXML private TableColumn TabColRechMarque ; + @FXML private TableColumn TabColRechCategorie; + @FXML private TableColumn TabColRechPrixTTC; + @FXML private TableColumn TabColRechTVA; + @FXML private TableColumn TabColRechAddAction ; + + + @FXML private TableView TableViewListeProduitBE ; + @FXML private TableColumn TabColBEReference; + @FXML private TableColumn TabColBEDesignaton; + @FXML private TableColumn TabColBEMarque ; + @FXML private TableColumn TabColBECategorie; + @FXML private TableColumn TabColBEPrixTTC; + @FXML private TableColumn TabColBEQuantiteTTC; + @FXML private TableColumn TabColBETVA; + @FXML private TableColumn TabColBEAddAction ; + + private Service ThreadSearchCategorie; + + ObservableList data=FXCollections.observableArrayList(); + BondeEntrerDB bonentrer = new BondeEntrerDB(); + StockDB stockdb = new StockDB(); + + String categorie="" ; + String Reference="" ; + String designaton="" ; + String Codebarre="" ; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + LocalRecepteur.setText(ParametreSystem.NomLocalPC); + DateBE.setValue(LocalDate.now()); + //Liste des Locales + ComboLocale.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent t) { + ComboLocale.setStyle("-fx-border-color:#cfcfcf;"); + ComboLocale.getItems().clear(); + ComboLocale.getItems().addAll(stockdb.getListLocal()); + } + }); + + + //List des Categories + setCategorie(); + + TableViewListeProduitBE.setEditable(true); + + //Pour la premiére table View rechercher un produit + TabColRechReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColRechDesignaton.setCellValueFactory(new PropertyValueFactory("designaton")); + TabColRechMarque.setCellValueFactory(new PropertyValueFactory("marque")); + TabColRechCategorie.setCellValueFactory(new PropertyValueFactory("categorie")); + TabColRechPrixTTC.setCellValueFactory(new PropertyValueFactory("prixttc")); + TabColRechPrixTTC.setStyle( "-fx-alignment: CENTER_RIGHT; -fx-font-weight:bold;"); + TabColRechTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColRechTVA.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold;"); + TabColRechAddAction.setSortable(true); + TabColRechAddAction.setStyle( "-fx-alignment: CENTER;"); + + TabColRechAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColRechAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + + //Pour la deuxèmé table View rechercher un produit + TabColBEReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColBEDesignaton.setCellValueFactory(new PropertyValueFactory("designaton")); + TabColBEMarque.setCellValueFactory(new PropertyValueFactory("marque")); + TabColBECategorie.setCellValueFactory(new PropertyValueFactory("categorie")); + TabColBEPrixTTC.setCellValueFactory(new PropertyValueFactory("prixttc")); + TabColBEPrixTTC.setStyle( "-fx-alignment: CENTER_RIGHT; -fx-font-weight:bold; -fx-font-size: 9pt;"); + TabColBETVA.setCellValueFactory(new PropertyValueFactory("tva")); + TabColBETVA.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColBEQuantiteTTC.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColBEQuantiteTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + //Ajouter l'option textfield + TabColBEQuantiteTTC.setCellFactory(TextFieldTableCell.forTableColumn()); + + + //Valier l'opertion de modification de la quantite par la sourie + TabColBEQuantiteTTC.setOnEditCommit(new EventHandler>() { + @Override + public void handle(CellEditEvent t) { + + String NewQuantite = t.getNewValue(); + String OldQuantite = t.getOldValue(); + + try{ + double d = Double.parseDouble(NewQuantite); + //le cas ou il tape un zéro 0 + if(d<=0){ + ((ListProduitBon) t.getTableView().getItems().get(t.getTablePosition().getRow())).setQuantite(OldQuantite); + } + else{ + ((ListProduitBon) t.getTableView().getItems().get(t.getTablePosition().getRow())).setQuantite(NewQuantite); + } + } + //le cas ou la nouvelle quantité n'est pas un entier + catch(NumberFormatException nfe){ + //inséré l'ancienne valeur de quantité + ((ListProduitBon) t.getTableView().getItems().get(t.getTablePosition().getRow())).setQuantite(OldQuantite); + } + //actualiser la ligne + TableViewListeProduitBE.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduitBE.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + + }); + + final TextField TextQuantiteTTC = new TextField(); + TextQuantiteTTC.setPromptText("quantite"); + TextQuantiteTTC.setMaxWidth(TabColBEQuantiteTTC.getPrefWidth()); + + + TabColBEAddAction.setSortable(true); + TabColBEAddAction.setStyle( "-fx-alignment: CENTER;"); + TabColBEAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColBEAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCellBE(); + } + }); + + + //get recheche produit + this.KeyEventProduit(); + + } + + + + private void SearchProduit() + { + ProgressBarStockBonEnter.setVisible(true); + + ThreadSearchCategorie = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + TableViewListeProduitRechercher.setItems(bonentrer.getdataProdBE(Reference, designaton, Codebarre, categorie)); + + return null; + } + }; + } + }; + + ThreadSearchCategorie.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarStockBonEnter.setVisible(false); + } + }); + ThreadSearchCategorie.start(); + } + + private void setCategorie() + { + ProgressBarStockBonEnter.setVisible(true); + + ThreadSearchCategorie = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + TextFields.bindAutoCompletion(TextFieldCategorie, new CategorieDB().getListCategorie()); + + return null; + } + }; + } + }; + + ThreadSearchCategorie.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarStockBonEnter.setVisible(false); + } + }); + ThreadSearchCategorie.start(); + } + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + + ListProduitRech ListProRech = (ListProduitRech) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + + ListProduitBon listbrodbe = new ListProduitBon(ListProRech.getReference(), ListProRech.getDesignaton(), ListProRech.getMarque(), ListProRech.getCategorie(), ListProRech.getPrixttc(), "1", ListProRech.getTVA()); + + //lorce qu'il y a plus que ligne + if(data.size()>0){ + boolean result = false ; + int indise = 1; + //Verifier si la produit exsiste déja + while(indise<=data.size() && !result){ + result = data.get(indise-1).getReference().equals(ListProRech.getReference()); + //si il le produit exisite déja on ajoute 1 a la quantité + if(result){ + Integer quantite=Integer.parseInt(data.get(indise-1).getQuantite())+1; + data.get(indise-1).setQuantite(Integer.toString(quantite)); + TableViewListeProduitBE.refresh(); + } + indise++; + } + //si le produit n'exsiste pas on la joute à la table view + if(!result){ + data.add(listbrodbe); + } + } + else{ + data.add(listbrodbe); + } + TableViewListeProduitBE.setItems(data); + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + //Define the button cell + private class ButtonCellBE extends TableCell { + + final Button cellButton = new Button(); + + ButtonCellBE(){ + cellButton.getStyleClass().add("btn-danger"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + int selectdIndex = getTableRow().getIndex(); + data.remove(selectdIndex); + + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + private void KeyEventProduit(){ + + ReferenceBE.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + Reference=ReferenceBE.getText(); + designaton=DesignatonBE.getText(); + Codebarre=TextFieldCodeBarre.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && Codebarre.isEmpty()){ + TableViewListeProduitRechercher.setItems(null); + } + else{ + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + + } + }); + + DesignatonBE.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + Reference=ReferenceBE.getText(); + designaton=DesignatonBE.getText(); + Codebarre=TextFieldCodeBarre.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && Codebarre.isEmpty()){ + TableViewListeProduitRechercher.setItems(null); + } + else{ + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + + } + }); + + TextFieldCodeBarre.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + Reference=ReferenceBE.getText(); + designaton=DesignatonBE.getText(); + Codebarre=TextFieldCodeBarre.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && Codebarre.isEmpty()){ + TableViewListeProduitRechercher.setItems(null); + } + else{ + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + + } + }); + + TextFieldCategorie.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + Reference=ReferenceBE.getText(); + designaton=DesignatonBE.getText(); + Codebarre = TextFieldCodeBarre.getText(); + categorie = TextFieldCategorie.getText(); + SearchProduit(); + } + } + }); + } + + + //Créer la bon d'entére + @FXML + private void CreerBonEnterButtonAction(ActionEvent event) throws IOException { + + final BondeEntrerDialogConfirmation notification = new BondeEntrerDialogConfirmation(); + contro ctl= new contro() ; + if(ComboLocale.getValue()==null){ + ComboLocale.setStyle("-fx-border-color:#f20606;"); + + } + else if(ctl.isNumericNotnull(CodeBE.getText())){ + CodeBE.setStyle("-fx-border-color:#f20606;"); + } + else if(data.isEmpty()){ + ComboLocale.setStyle("-fx-border-color:#cfcfcf;"); + CodeBE.setStyle("-fx-border-color:#cfcfcf;"); + + final MessageControle messagecontrol = new MessageControle(); + + Text text3 = new Text(); + text3.setText("Vous devez ajouter au moin un produit à la liste des produits (entrée)"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + + messagecontrol.ShowNotification(); + + } + else{ + ComboLocale.setStyle("-fx-border-color:#cfcfcf;"); + notification.Code.setText(CodeBE.getText()); + notification.Source.setText(ComboLocale.getValue().toString()); + notification.Date.setText(Adaptateur.NormalDateFormat(DateBE.getValue())); + notification.Tranporteur.setText(BonEnteeTransporteur.getText()); + notification.Confdata= data; + + + notification.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + + BonEntree bonentree = new BonEntree(); + bonentree.setLocal_emetteur(ComboLocale.getValue().toString()); + bonentree.setLocal_recepteur(ParametreSystem.NomLocalPC); + bonentree.setId(CodeBE.getText()); + + //date bon d'entrée + Date Datebe = java.sql.Date.valueOf(DateBE.getValue()); + bonentree.setDate(Datebe); + + bonentree.setTransporteur(BonEnteeTransporteur.getText()); + if(bonentrer.addBonEntrer(bonentree,data)){ + notification.stackpane.setVisible(false); + AnchorPaneBondentree.getChildren().clear(); + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Stock/BondeEntrerDetail.fxml")); + Parent root = (Parent)fxmlLoader.load(); + AnchorPaneBondentree.getChildren().add(root); + } catch (IOException ex) { + Logger.getLogger(BondeEntrerController.class.getName()).log(Level.SEVERE, null, ex); + } + } + else{ + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + } + }); + notification.ShowDialg(); + } + + } + + +} diff --git a/src/main/java/Controllers/Stock/BondeEntrerDetailController.java b/src/main/java/Controllers/Stock/BondeEntrerDetailController.java new file mode 100644 index 0000000..36e98a3 --- /dev/null +++ b/src/main/java/Controllers/Stock/BondeEntrerDetailController.java @@ -0,0 +1,177 @@ +/* + * 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 Controllers.Stock; + +import Controllers.Traitement.Adaptateur; +import Models.Stock.BonEntree; +import Models.Stock.BondeEntrerDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.print.JobSettings; +import javafx.print.PageRange; +import javafx.print.PrinterJob; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class BondeEntrerDetailController implements Initializable { + + @FXML private AnchorPane BondeEntrerDetail; + + @FXML private Button RecreerBD ; + + @FXML private Text source ; + @FXML private Text id ; + @FXML private Text Textdate ; + @FXML private Text heur ; + @FXML private Text transporteur ; + + @FXML private TableView TableViewListeProduitBE ; + @FXML private TableColumn TabColBEReference; + @FXML private TableColumn TabColBEDesignation; + @FXML private TableColumn TabColBEMarque ; + @FXML private TableColumn TabColBECategorie; + @FXML private TableColumn TabColBEPrixTTC; + @FXML private TableColumn TabColBEQuantiteTTC; + @FXML private TableColumn TabColBETVA; + + + public static String id_bondentree ; + + BondeEntrerDB MyBonEntreeDB = new BondeEntrerDB(); + BonEntree MyBonEntree = new BonEntree(); + + @Override + public void initialize(URL url, ResourceBundle rb) { + + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icon-relogin.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + RecreerBD.setGraphic(buttonGraphic); + + TabColBEReference.setCellValueFactory(new PropertyValueFactory("reference")); + + TabColBEDesignation.setCellValueFactory(new PropertyValueFactory("designaton")); + + TabColBEMarque.setCellValueFactory(new PropertyValueFactory("marque")); + + TabColBECategorie.setCellValueFactory(new PropertyValueFactory("categorie")); + + TabColBEPrixTTC.setCellValueFactory(new PropertyValueFactory("prixttc")); + TabColBEPrixTTC.setStyle( "-fx-alignment: CENTER_RIGHT;"); + + TabColBETVA.setCellValueFactory(new PropertyValueFactory("tva")); + TabColBETVA.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + + TabColBEQuantiteTTC.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColBEQuantiteTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + + + MyBonEntree = MyBonEntreeDB.getBonEntree(id_bondentree); + + id.setText(MyBonEntree.getId()); + source.setText(MyBonEntree.getLocal_emetteur()); + Textdate.setText(Adaptateur.NormalDateFormat(MyBonEntree.getDate().toString())); + heur.setText(MyBonEntree.getHeur().toString()); + transporteur.setText(MyBonEntree.getTransporteur()); + TableViewListeProduitBE.setItems(MyBonEntree.getListe_prod()); + + } + + @FXML + private void PDFBonEntreButtonAction(ActionEvent event) throws IOException { + try { + ObservableList ListProd = MyBonEntree.getListe_prod(); + PrinterJob jobExportPDF = PrinterJob.createPrinterJob(); + int SizelistMouvement = ListProd.size(); + int total = SizelistMouvement / 20 + 1 ; + int page = 0; + for (int i=0; i listProdTemp = FXCollections.observableArrayList(); + for (int j=i; (j<(i+20)) && (j ListProd = MyBonEntree.getListe_prod(); + + int SizelistMouvement = ListProd.size(); + int total = SizelistMouvement / 20 + 1 ; + int page = 0; + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + jobPrint.getJobSettings().setPageRanges(new PageRange(1, total)); + + if (jobPrint.showPrintDialog(null)) { + JobSettings jsPrint = jobPrint.getJobSettings(); + for (int i=0; i listProdTemp = FXCollections.observableArrayList(); + for (int j=i; (j<(i+20)) && (j Confdata=FXCollections.observableArrayList(); + public Button bouttonNo = new Button(); + public Button bouttonOK = new Button("Enregistrer"); + public TableView ConfBondEnter = new TableView(); + public Text titre = new Text(); + + public Text Source = new Text(); + public Text Code = new Text(); + public Text Tranporteur = new Text(); + public Text Date = new Text(); + + public Text titreMSG = new Text(); + public Text detail = new Text(); + public StackPane stackpane = new StackPane(); + + public Node Setnotification(){ + + + Group group = new Group(); + + AnchorPane Ap = new AnchorPane(); + Ap.setStyle("-fx-background-color: rgba(0,0,0,0.6);"); + + Pane pa1 = new Pane(); + pa1.setStyle("-fx-background-color:#ffffff; -fx-border-color: #212121; -fx-border-radius: 10 10 0 0; -fx-background-radius: 10 10 0 0;"); + pa1.setPrefHeight(550); + pa1.setPrefWidth(750); + + Pane pa2 = new Pane(); + pa2.setStyle("-fx-background-color:linear-gradient(to bottom, #585858, #333333); -fx-background-radius: 10 10 0 0;"); + pa2.setPrefHeight(30); + pa2.setPrefWidth(750); + + TableColumn TabColBEReference = new TableColumn("Référence"); + TabColBEReference.setMinWidth(125); + TabColBEReference.setCellValueFactory(new PropertyValueFactory("reference")); + + TableColumn TabColBEDesignaton = new TableColumn("Désignation"); + TabColBEDesignaton.setMinWidth(155); + TabColBEDesignaton.setCellValueFactory(new PropertyValueFactory("designaton")); + + TableColumn TabColBEMarque = new TableColumn("Marque"); + TabColBEMarque.setMinWidth(100); + TabColBEMarque.setCellValueFactory(new PropertyValueFactory("marque")); + + TableColumn TabColBECategorie = new TableColumn("Catégorie"); + TabColBECategorie.setMinWidth(100); + TabColBECategorie.setCellValueFactory(new PropertyValueFactory("categorie")); + + TableColumn TabColBETVA = new TableColumn("TVA"); + TabColBETVA.setMinWidth(70); + TabColBETVA.setCellValueFactory(new PropertyValueFactory("tva")); + + TableColumn TabColBEPrixTTC = new TableColumn("Prix TTC"); + TabColBEPrixTTC.setMinWidth(70); + TabColBEPrixTTC.setCellValueFactory(new PropertyValueFactory("prixttc")); + TabColBEPrixTTC.setStyle( "-fx-alignment: CENTER_RIGHT;"); + + TableColumn TabColBEQuantite = new TableColumn("Quantité"); + TabColBEQuantite.setMinWidth(70); + TabColBEQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColBEQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + + + TableView ConfBonEnter = new TableView(); + + ConfBonEnter.getColumns().addAll(TabColBEReference, TabColBEDesignaton, TabColBEMarque, TabColBECategorie, TabColBETVA, TabColBEPrixTTC, TabColBEQuantite); + ConfBonEnter.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); + ConfBonEnter.setLayoutX(12); + ConfBonEnter.setLayoutY(130); + ConfBonEnter.setPrefHeight(350); + ConfBonEnter.setItems(Confdata); + + titre.setText("Dialog de confirmation"); + titre.setFont(Font.font("System", FontWeight.BOLD, 14)); + titre.setFill(Color.web("#ffffff")); + titre.setLayoutX(17); + titre.setLayoutY(22); + + Image imgicon = new Image(getClass().getResourceAsStream("/Public/icon/dialoginform.png")); + ImageView icon = new ImageView(imgicon); + icon.setLayoutX(20); + icon.setLayoutY(60); + icon.setFitWidth(46); + icon.setFitHeight(50); + + TextFlow DetailMSG = new TextFlow(); + + DetailMSG.setPrefHeight(120); + DetailMSG.setPrefWidth(400); + DetailMSG.setLayoutX(80); + DetailMSG.setLayoutY(55); + + + + Text text1 = new Text("Bon d'entrée \n"); + text1.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + text1.setFill(Color.web("#363a38")); + DetailMSG.getChildren().add(text1); + + Text text2 = new Text("Êtes-vous sûr de vouloir enregistrer la bon d'entrée"); + text2.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + text2.setFill(Color.web("#363a38")); + DetailMSG.getChildren().add(text2); + + Text code = new Text("Code:"); + code.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + code.setFill(Color.web("#363a38")); + code.setLayoutX(80); + code.setLayoutY(115); + + Code.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + Code.setFill(Color.web("#363a38")); + Code.setLayoutX(130); + Code.setLayoutY(115); + + Text source = new Text("Source:"); + source.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + source.setFill(Color.web("#363a38")); + source.setLayoutX(180); + source.setLayoutY(115); + + Source.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + Source.setFill(Color.web("#363a38")); + Source.setLayoutX(240); + Source.setLayoutY(115); + + Text date = new Text("Date:"); + date.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + date.setFill(Color.web("#363a38")); + date.setLayoutX(350); + date.setLayoutY(115); + + Date.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + Date.setFill(Color.web("#363a38")); + Date.setLayoutX(390); + Date.setLayoutY(115); + + Text tranporteur = new Text("Tranporteur:"); + tranporteur.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + tranporteur.setFill(Color.web("#363a38")); + tranporteur.setLayoutX(500); + tranporteur.setLayoutY(115); + + Tranporteur.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + Tranporteur.setFill(Color.web("#363a38")); + Tranporteur.setLayoutX(600); + Tranporteur.setLayoutY(115); + + bouttonOK.setFont(Font.font ("Arial", FontWeight.BOLD, 14)); + bouttonOK.setStyle("-fx-background-color:#4DAE4D; -fx-text-fill: white; -fx-border-radius: 5 5 5 5;"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconsave.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + bouttonOK.setGraphic(buttonGraphic); + bouttonOK.setPrefWidth(140); + bouttonOK.setPrefHeight(35); + bouttonOK.setLayoutX(600); + bouttonOK.setLayoutY(500); + + + + bouttonNo.setText("Annuler"); + bouttonNo.setFont(Font.font ("System", FontWeight.BOLD, 12)); + bouttonNo.setStyle("{-fx-background-color:#EFEFEF; -fx-border-color: #959595; -fx-border-radius: 5 5 5 5;} hover:{-fx-background-color:#E6E6E6;}"); + bouttonNo.setPrefWidth(73); + bouttonNo.setPrefHeight(30); + bouttonNo.setLayoutX(500); + bouttonNo.setLayoutY(503); + bouttonNo.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + stackpane.setVisible(false); + } + }); + + group.getChildren().addAll(pa1, pa2, titre, icon, code, Code, source, Source, date, Date, tranporteur, Tranporteur, ConfBonEnter, DetailMSG, bouttonOK, bouttonNo); + + stackpane.setVisible(true); + stackpane.getChildren().add(Ap); + stackpane.getChildren().add(group); + + + + return stackpane; + + } + + + public void ShowDialg() + { + Node node = this.Setnotification(); + + StackPane Sp = new StackPane(); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(node); + + Scene scene = new Scene(Sp); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + +} diff --git a/src/main/java/Controllers/Stock/BondeSortieController.java b/src/main/java/Controllers/Stock/BondeSortieController.java new file mode 100644 index 0000000..7263cc6 --- /dev/null +++ b/src/main/java/Controllers/Stock/BondeSortieController.java @@ -0,0 +1,605 @@ +/* + * 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 Controllers.Stock; + +import Controllers.Dialog.MessageControle; +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Models.Categorie.CategorieDB; +import Models.Stock.BonSortie; +import Models.Stock.BondeSortieDB; +import Models.Stock.StockDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleButton; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; +import org.controlsfx.control.textfield.TextFields; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class BondeSortieController implements Initializable { + + @FXML private AnchorPane AnchorPaneBonSortie; + + @FXML private ProgressBar ProgressBarStockBonSortie; + + @FXML private Text LocalEmetteur ; + + @FXML private ComboBox ComboLocale; + @FXML private ToggleButton Activate ; //permet d'activer la l'option de rechercher dans la table produit (Stock négative) + @FXML private DatePicker DateBS; + @FXML private TextField TextFieldCategorie; + @FXML private TextField SortieTransporteur; + @FXML private TextField ReferenceBE; + @FXML private TextField DesignatonBE; + @FXML private TextField TextFieldCodeBarre; + + @FXML private TableView TableViewListeProduitRechercher ; + @FXML private TableColumn TabColRechReference; + @FXML private TableColumn TabColRechDesignaton; + @FXML private TableColumn TabColRechMarque ; + @FXML private TableColumn TabColRechCategorie; + @FXML private TableColumn TabColRechPrixTTC; + @FXML private TableColumn TabColRechTVA; + @FXML private TableColumn TabColRechQuantite; + @FXML private TableColumn TabColRechAddAction ; + + + @FXML private TableView TableViewListeProduitBE ; + @FXML private TableColumn TabColBEReference; + @FXML private TableColumn TabColBEDesignaton; + @FXML private TableColumn TabColBEMarque ; + @FXML private TableColumn TabColBECategorie; + @FXML private TableColumn TabColBEPrixTTC; + @FXML private TableColumn TabColBEQuantiteTTC; + @FXML private TableColumn TabColBETVA; + @FXML private TableColumn TabColBEAddAction ; + + private Service ThreadSearchCategorieSortie; + + ObservableList data=FXCollections.observableArrayList(); + BondeSortieDB bonsortiedb = new BondeSortieDB(); + StockDB stockdb = new StockDB(); + + Boolean StockNegative = false; //option de ToggleGroup Activate ; + String categorie="" ; + String Reference="" ; + String designaton="" ; + String codeBarre="" ; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + LocalEmetteur.setText(ParametreSystem.NomLocalPC); + + DateBS.setValue(LocalDate.now()); + + Activate.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent t) { + StockNegative = Activate.selectedProperty().getValue(); + } + }); + + + //Liste des Locales + ComboLocale.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent t) { + ComboLocale.setStyle("-fx-border-color:#cfcfcf;"); + ComboLocale.getItems().clear(); + ComboLocale.getItems().addAll(stockdb.getListLocal()); + } + }); + + + + TableViewListeProduitBE.setEditable(true); + + //Pour la premiére table View rechercher un produit + TabColRechReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColRechDesignaton.setCellValueFactory(new PropertyValueFactory("designaton")); + TabColRechMarque.setCellValueFactory(new PropertyValueFactory("marque")); + TabColRechCategorie.setCellValueFactory(new PropertyValueFactory("categorie")); + TabColRechPrixTTC.setCellValueFactory(new PropertyValueFactory("prixttc")); + TabColRechPrixTTC.setStyle( "-fx-alignment: CENTER_RIGHT; -fx-font-weight:bold;"); + TabColRechTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColRechTVA.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold;"); + TabColRechQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColRechQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold;"); + TabColRechAddAction.setSortable(true); + TabColRechAddAction.setStyle( "-fx-alignment: CENTER;"); + + TabColRechAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColRechAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new BondeSortieController.ButtonCell(); + } + }); + + + //Pour la deuxèmé table View rechercher un produit + TabColBEReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColBEDesignaton.setCellValueFactory(new PropertyValueFactory("designaton")); + TabColBEMarque.setCellValueFactory(new PropertyValueFactory("marque")); + TabColBECategorie.setCellValueFactory(new PropertyValueFactory("categorie")); + TabColBEPrixTTC.setCellValueFactory(new PropertyValueFactory("prixttc")); + TabColBEPrixTTC.setStyle( "-fx-alignment: CENTER_RIGHT; -fx-font-weight:bold; -fx-font-size: 9pt;"); + TabColBETVA.setCellValueFactory(new PropertyValueFactory("tva")); + TabColBETVA.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColBEQuantiteTTC.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColBEQuantiteTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + //Ajouter l'option textfield + TabColBEQuantiteTTC.setCellFactory(TextFieldTableCell.forTableColumn()); + + + //Valier l'opertion de modification de la quantite par la sourie + TabColBEQuantiteTTC.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + + String NewQuantite = t.getNewValue(); + String OldQuantite = t.getOldValue(); + + try{ + double d = Double.parseDouble(NewQuantite); + String ref =t.getTableView().getItems().get(t.getTablePosition().getRow()).getReference(); + Integer quantStock = bonsortiedb.GetQuantiteStock(ref); + //le cas ou il tape un zéro 0 + if(d<=0){ + ((ListProduitBon) t.getTableView().getItems().get(t.getTablePosition().getRow())).setQuantite(OldQuantite); + } + // le ca ou la quantité BS ne doit pas dépassé la quantité en stock + else if(!StockNegative && quantStock() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + } + else{ + ((ListProduitBon) t.getTableView().getItems().get(t.getTablePosition().getRow())).setQuantite(NewQuantite); + } + + + + } + //le cas ou la nouvelle quantité n'est pas un entier + catch(NumberFormatException nfe){ + //inséré l'ancienne valeur de quantité + ((ListProduitBon) t.getTableView().getItems().get(t.getTablePosition().getRow())).setQuantite(OldQuantite); + } + //actualiser la ligne + TableViewListeProduitBE.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduitBE.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + + }); + + final TextField TextQuantiteTTC = new TextField(); + TextQuantiteTTC.setPromptText("quantite"); + TextQuantiteTTC.setMaxWidth(TabColBEQuantiteTTC.getPrefWidth()); + + + TabColBEAddAction.setSortable(true); + TabColBEAddAction.setStyle( "-fx-alignment: CENTER;"); + TabColBEAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColBEAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new BondeSortieController.ButtonCellBE(); + } + }); + + + //get recheche produit + this.KeyEventProduit(); + + this.setCategorie(); + } + + + + //Methode pour récupéré la selection du catégorie + private void setCategorie() + { + ProgressBarStockBonSortie.setVisible(true); + + ThreadSearchCategorieSortie = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + TextFields.bindAutoCompletion(TextFieldCategorie, new CategorieDB().getListCategorie()); + + return null; + } + }; + } + }; + + ThreadSearchCategorieSortie.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarStockBonSortie.setVisible(false); + } + }); + ThreadSearchCategorieSortie.start(); + } + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + + ListProduitRech ListProRech = (ListProduitRech) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + + ListProduitBon listbrodbe = new ListProduitBon(ListProRech.getReference(), ListProRech.getDesignaton(), ListProRech.getMarque(), ListProRech.getCategorie(), ListProRech.getPrixttc(), "1", ListProRech.getTVA()); + + //lorce qu'il y a plus que ligne + if(data.size()>0){ + boolean result = false ; + int indise = 1; + //Verifier si la produit exsiste déja + while(indise<=data.size() && !result){ + result = data.get(indise-1).getReference().equals(ListProRech.getReference()); + //si il le produit exisite déja on ajoute 1 a la quantité + if(result){ + + //quantité disponible en stock + Integer QuantiteStock = Integer.valueOf(ListProRech.getQuantite()); + + Integer quantiteBS=Integer.parseInt(data.get(indise-1).getQuantite())+1; + + //le cas ou quantité en bon de sortie ne doit pas dépassé la quantité en stock + if(!StockNegative){ + if(quantiteBS<=QuantiteStock){ + data.get(indise-1).setQuantite(Integer.toString(quantiteBS)); + } + else{ + //le ca ou la quantité en bon de sortie dépasse la quntité en stock + final MessageControle messagecontrol = new MessageControle(); + + Text text3 = new Text(); + text3.setText("La quantité en bon de sortie ne doit pas dépassé la quantité en stock"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + } + } + // le ca ou on la la possibilité de stock négative + else{ + data.get(indise-1).setQuantite(Integer.toString(quantiteBS)); + } + TableViewListeProduitBE.getColumns().get(indise-1).setVisible(false); + TableViewListeProduitBE.getColumns().get(indise-1).setVisible(true); + } + indise++; + } + //si le produit n'exsiste pas on la joute à la table view + if(!result){ + data.add(listbrodbe); + } + } + else{ + data.add(listbrodbe); + } + TableViewListeProduitBE.setItems(data); + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + //methode pour céer la bon de sortie + @FXML + private void CreerBonSortieButtonAction(ActionEvent event) throws IOException { + + if(ComboLocale.getValue()==null){ + ComboLocale.setStyle("-fx-border-color:#f20606;"); + + } + + else if(data.isEmpty()){ + ComboLocale.setStyle("-fx-border-color:#cfcfcf;"); + final MessageControle messagecontrol = new MessageControle(); + + Text text3 = new Text(); + text3.setText("Vous devez ajouter au moin un produit à la liste des produits (Sortie)"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + + messagecontrol.ShowNotification(); + + } + else{ + final BondeSortieDialogConfirmation notification = new BondeSortieDialogConfirmation(); + notification.Date.setText(Adaptateur.NormalDateFormat(DateBS.getValue())); + notification.Tranporteur.setText(SortieTransporteur.getText()); + notification.Affecter.setText(ComboLocale.getValue().toString()); + notification.Confdata= data; + notification.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + + //date bon de sortie + BonSortie bonsortie = new BonSortie(); + bonsortie.setDate(java.sql.Date.valueOf(DateBS.getValue())); + bonsortie.setTransporteur(SortieTransporteur.getText()); + bonsortie.setLocal_emetteur(ParametreSystem.NomLocalPC); + bonsortie.setLocal_recepteur(ComboLocale.getValue().toString()); + bonsortie.setListe_prod(data); + + if(bonsortiedb.addBonSortie(bonsortie)){ + + notification.stackpane.setVisible(false); + AnchorPaneBonSortie.getChildren().clear(); + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Stock/BondeSortieDetail.fxml")); + Parent root = (Parent)fxmlLoader.load(); + AnchorPaneBonSortie.getChildren().add(root); + } catch (IOException ex) { + Logger.getLogger(BondeEntrerController.class.getName()).log(Level.SEVERE, null, ex); + } + } + else{ + ShowDialog SD = new ShowDialog(); + ShowDialog.titre="Erreur Système"; + ShowDialog.detail="Models/Stock/BonSortieController.java"; + SD.ShowAletDialog(); + } + + } + }); + + notification.ShowDialg(); + } + } + + + + //Define the button cell + private class ButtonCellBE extends TableCell { + + final Button cellButton = new Button(); + + ButtonCellBE(){ + cellButton.getStyleClass().add("btn-danger"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + int selectdIndex = getTableRow().getIndex(); + data.remove(selectdIndex); + + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + private void SearchProduit() + { + ProgressBarStockBonSortie.setVisible(true); + + ThreadSearchCategorieSortie = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + TableViewListeProduitRechercher.setItems(bonsortiedb.getdataProdBS(Reference, designaton, codeBarre, categorie,StockNegative)); + + return null; + } + }; + } + }; + + ThreadSearchCategorieSortie.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarStockBonSortie.setVisible(false); + } + }); + ThreadSearchCategorieSortie.start(); + } + + private void KeyEventProduit(){ + + ReferenceBE.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + Reference=ReferenceBE.getText(); + designaton=DesignatonBE.getText(); + codeBarre = TextFieldCodeBarre.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && codeBarre.isEmpty()){ + TableViewListeProduitRechercher.setItems(null); + } + else{ + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + + } + }); + + DesignatonBE.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + Reference=ReferenceBE.getText(); + designaton=DesignatonBE.getText(); + codeBarre = TextFieldCodeBarre.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && codeBarre.isEmpty()){ + TableViewListeProduitRechercher.setItems(null); + } + else{ + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + + } + }); + + TextFieldCodeBarre.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + Reference=ReferenceBE.getText(); + designaton=DesignatonBE.getText(); + codeBarre = TextFieldCodeBarre.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && codeBarre.isEmpty()){ + TableViewListeProduitRechercher.setItems(null); + } + else{ + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + + } + }); + + TextFieldCategorie.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + Reference=ReferenceBE.getText(); + designaton=DesignatonBE.getText(); + codeBarre = TextFieldCodeBarre.getText(); + categorie = TextFieldCategorie.getText(); + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + } + }); + + } + +} diff --git a/src/main/java/Controllers/Stock/BondeSortieDetailController.java b/src/main/java/Controllers/Stock/BondeSortieDetailController.java new file mode 100644 index 0000000..0984b23 --- /dev/null +++ b/src/main/java/Controllers/Stock/BondeSortieDetailController.java @@ -0,0 +1,173 @@ +/* + * 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 Controllers.Stock; + +import Controllers.Traitement.Adaptateur; +import Models.Stock.BonSortie; +import Models.Stock.BondeSortieDB; +import Models.Stock.StockDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.print.JobSettings; +import javafx.print.PageRange; +import javafx.print.PrinterJob; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * + * @author PC-Maher + */ +public class BondeSortieDetailController implements Initializable { + + @FXML private AnchorPane BonSortieDetail; + + @FXML private Button RecreerBD ; + + @FXML private Text recepteur ; + @FXML private Text id ; + @FXML private Text date ; + @FXML private Text heur ; + @FXML private Text transporteur ; + + @FXML private TableView TableViewListeProduitBon ; + @FXML private TableColumn TabColBonReference; + @FXML private TableColumn TabColBonDesignaton; + @FXML private TableColumn TabColBonMarque ; + @FXML private TableColumn TabColBonCategorie; + @FXML private TableColumn TabColBonPrixTTC; + @FXML private TableColumn TabColBonQuantiteTTC; + @FXML private TableColumn TabColBonTVA; + + public static String id_bonsortie ; + BondeSortieDB MyBondeSortieDB = new BondeSortieDB(); + BonSortie MyBonSortie = new BonSortie(); + + @Override + public void initialize(URL url, ResourceBundle rb) { + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icon-relogin.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + RecreerBD.setGraphic(buttonGraphic); + + TabColBonReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColBonDesignaton.setCellValueFactory(new PropertyValueFactory("designaton")); + TabColBonMarque.setCellValueFactory(new PropertyValueFactory("marque")); + TabColBonCategorie.setCellValueFactory(new PropertyValueFactory("categorie")); + TabColBonPrixTTC.setCellValueFactory(new PropertyValueFactory("prixttc")); + TabColBonPrixTTC.setStyle( "-fx-alignment: CENTER_RIGHT;"); + TabColBonTVA.setCellValueFactory(new PropertyValueFactory("tva")); + TabColBonTVA.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + + TabColBonQuantiteTTC.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColBonQuantiteTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + + MyBonSortie = MyBondeSortieDB.getBonSortie(id_bonsortie); + + id.setText(MyBonSortie.getId()); + recepteur.setText(MyBonSortie.getLocal_recepteur()); + date.setText(Adaptateur.NormalDateFormat(MyBonSortie.getDate().toString())); + heur.setText(MyBonSortie.getHeur().toString()); + transporteur.setText(MyBonSortie.getTransporteur()); + TableViewListeProduitBon.setItems(MyBonSortie.getListe_prod()); + + //Methode qui supprime les produit qont la quantité est égale à 0 + StockDB MyStock = new StockDB(); + MyStock.DeleteProdStock(); + + } + + + @FXML + private void PDFBonSortieButtonAction(ActionEvent event) throws IOException { + try { + ObservableList ListProd = MyBonSortie.getListe_prod(); + PrinterJob jobExportPDF = PrinterJob.createPrinterJob(); + int SizelistMouvement = ListProd.size(); + int total = SizelistMouvement / 20 + 1 ; + int page = 0; + for (int i=0; i listProdTemp = FXCollections.observableArrayList(); + for (int j=i; (j<(i+20)) && (j ListProd = MyBonSortie.getListe_prod(); + + int SizelistMouvement = ListProd.size(); + int total = SizelistMouvement / 20 + 1 ; + int page = 0; + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + jobPrint.getJobSettings().setPageRanges(new PageRange(1, total)); + + if (jobPrint.showPrintDialog(null)) { + JobSettings jsPrint = jobPrint.getJobSettings(); + for (int i=0; i listProdTemp = FXCollections.observableArrayList(); + for (int j=i; (j<(i+20)) && (j Confdata=FXCollections.observableArrayList(); + public Button bouttonNo = new Button(); + public Button bouttonOK = new Button("Enregistrer"); + public TableView ConfBondEnter = new TableView(); + public Text titre = new Text(); + + public Text Affecter = new Text(); + public Text Tranporteur = new Text(); + public Text Date = new Text(); + + public Text titreMSG = new Text(); + public Text detail = new Text(); + public StackPane stackpane = new StackPane(); + + public Node Setnotification(){ + + + Group group = new Group(); + + AnchorPane Ap = new AnchorPane(); + Ap.setStyle("-fx-background-color: rgba(0,0,0,0.6);"); + + Pane pa1 = new Pane(); + pa1.setStyle("-fx-background-color:#ffffff; -fx-border-color: #212121; -fx-border-radius: 10 10 0 0; -fx-background-radius: 10 10 0 0;"); + pa1.setPrefHeight(550); + pa1.setPrefWidth(750); + + Pane pa2 = new Pane(); + pa2.setStyle("-fx-background-color:linear-gradient(to bottom, #585858, #333333); -fx-background-radius: 10 10 0 0;"); + pa2.setPrefHeight(30); + pa2.setPrefWidth(750); + + TableColumn TabColBEReference = new TableColumn("Référence"); + TabColBEReference.setMinWidth(125); + TabColBEReference.setCellValueFactory(new PropertyValueFactory("reference")); + + TableColumn TabColBEDesignaton = new TableColumn("Désignation"); + TabColBEDesignaton.setMinWidth(155); + TabColBEDesignaton.setCellValueFactory(new PropertyValueFactory("designaton")); + + TableColumn TabColBEMarque = new TableColumn("Marque"); + TabColBEMarque.setMinWidth(100); + TabColBEMarque.setCellValueFactory(new PropertyValueFactory("marque")); + + TableColumn TabColBECategorie = new TableColumn("Catégorie"); + TabColBECategorie.setMinWidth(100); + TabColBECategorie.setCellValueFactory(new PropertyValueFactory("categorie")); + + TableColumn TabColBETVA = new TableColumn("TVA"); + TabColBETVA.setMinWidth(70); + TabColBETVA.setCellValueFactory(new PropertyValueFactory("tva")); + TabColBETVA.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + + TableColumn TabColBEPrixTTC = new TableColumn("Prix TTC"); + TabColBEPrixTTC.setMinWidth(70); + TabColBEPrixTTC.setCellValueFactory(new PropertyValueFactory("prixttc")); + TabColBEPrixTTC.setStyle( "-fx-alignment: CENTER_RIGHT;"); + + TableColumn TabColBEQuantite = new TableColumn("Quantité"); + TabColBEQuantite.setMinWidth(70); + TabColBEQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColBEQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + + + TableView ConfBonEnter = new TableView(); + + ConfBonEnter.getColumns().addAll(TabColBEReference, TabColBEDesignaton, TabColBEMarque, TabColBECategorie, TabColBETVA, TabColBEPrixTTC, TabColBEQuantite); + ConfBonEnter.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); + ConfBonEnter.setLayoutX(12); + ConfBonEnter.setLayoutY(130); + ConfBonEnter.setPrefHeight(350); + ConfBonEnter.setItems(Confdata); + + titre.setText("Dialog de confirmation"); + titre.setFont(Font.font("System", FontWeight.BOLD, 14)); + titre.setFill(Color.web("#ffffff")); + titre.setLayoutX(17); + titre.setLayoutY(22); + + Image imgicon = new Image(getClass().getResourceAsStream("/Public/icon/dialoginform.png")); + ImageView icon = new ImageView(imgicon); + icon.setLayoutX(20); + icon.setLayoutY(60); + icon.setFitWidth(46); + icon.setFitHeight(50); + + TextFlow DetailMSG = new TextFlow(); + + DetailMSG.setPrefHeight(120); + DetailMSG.setPrefWidth(400); + DetailMSG.setLayoutX(80); + DetailMSG.setLayoutY(55); + + + + Text text1 = new Text("Bon de Sortie \n"); + text1.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + text1.setFill(Color.web("#363a38")); + DetailMSG.getChildren().add(text1); + + Text text2 = new Text("Êtes-vous sûr de vouloir enregistrer la bon de sortie"); + text2.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + text2.setFill(Color.web("#363a38")); + DetailMSG.getChildren().add(text2); + + Text affecter = new Text("Affecté:"); + affecter.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + affecter.setFill(Color.web("#363a38")); + affecter.setLayoutX(80); + affecter.setLayoutY(115); + + Affecter.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + Affecter.setFill(Color.web("#363a38")); + Affecter.setLayoutX(140); + Affecter.setLayoutY(115); + + Text date = new Text("Date:"); + date.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + date.setFill(Color.web("#363a38")); + date.setLayoutX(280); + date.setLayoutY(115); + + Date.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + Date.setFill(Color.web("#363a38")); + Date.setLayoutX(320); + Date.setLayoutY(115); + + Text tranporteur = new Text("Tranporteur:"); + tranporteur.setFont(Font.font("Arial", FontWeight.BOLD, 15)); + tranporteur.setFill(Color.web("#363a38")); + tranporteur.setLayoutX(500); + tranporteur.setLayoutY(115); + + Tranporteur.setFont(Font.font("Arial", FontWeight.NORMAL, 15)); + Tranporteur.setFill(Color.web("#363a38")); + Tranporteur.setLayoutX(600); + Tranporteur.setLayoutY(115); + + bouttonOK.setFont(Font.font ("Arial", FontWeight.BOLD, 14)); + bouttonOK.setStyle("-fx-background-color:#4DAE4D; -fx-text-fill: white; -fx-border-radius: 5 5 5 5;"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconsave.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + bouttonOK.setGraphic(buttonGraphic); + bouttonOK.setPrefWidth(140); + bouttonOK.setPrefHeight(35); + bouttonOK.setLayoutX(600); + bouttonOK.setLayoutY(500); + + + + bouttonNo.setText("Annuler"); + bouttonNo.setFont(Font.font ("System", FontWeight.BOLD, 12)); + bouttonNo.setStyle("{-fx-background-color:#EFEFEF; -fx-border-color: #959595; -fx-border-radius: 5 5 5 5;} hover:{-fx-background-color:#E6E6E6;}"); + bouttonNo.setPrefWidth(73); + bouttonNo.setPrefHeight(30); + bouttonNo.setLayoutX(500); + bouttonNo.setLayoutY(503); + bouttonNo.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + stackpane.setVisible(false); + } + }); + + group.getChildren().addAll(pa1, pa2, titre, icon, affecter, Affecter, date, Date, tranporteur, Tranporteur, ConfBonEnter, DetailMSG, bouttonOK, bouttonNo); + + stackpane.setVisible(true); + stackpane.getChildren().add(Ap); + stackpane.getChildren().add(group); + + + + return stackpane; + + } + + + public void ShowDialg() + { + Node node = this.Setnotification(); + + StackPane Sp = new StackPane(); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(node); + + Scene scene = new Scene(Sp); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + +} diff --git a/src/main/java/Controllers/Stock/EtatStockCategorieController.java b/src/main/java/Controllers/Stock/EtatStockCategorieController.java new file mode 100644 index 0000000..965ad8e --- /dev/null +++ b/src/main/java/Controllers/Stock/EtatStockCategorieController.java @@ -0,0 +1,439 @@ +package Controllers.Stock; + +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Categorie.CategorieDB; +import Models.Categorie.CategorieListe; +import Models.Produit.ListeProduit; +import Models.Stock.StockDB; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.application.Platform; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.print.PrinterJob; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher + */ +public class EtatStockCategorieController implements Initializable { + + @FXML private AnchorPane AnchorPaneEtatStockCategorie; + + @FXML private ProgressBar BarLoading; + + @FXML private ComboBox ComboLocale; + + @FXML private TextField TextFieldCategory; + @FXML private TextField TextFieldReference; + @FXML private TextField TextFieldDesignation; + + @FXML private TableView TableViewCategorie ; + @FXML private TableColumn TabColNomCategorie; + @FXML private TableColumn TabColQuantiteCategorie; + @FXML private TableColumn TabColDetailAction ; + + @FXML private TableView TableViewProduit ; + @FXML private TableColumn TabColProduitReference; + @FXML private TableColumn TabColProduitDesignation; + @FXML private TableColumn TabColProduitQuantite; + @FXML private TableColumn TabColProduitDetailAction ; + + @FXML private Button BtnPrintAllProduit; + @FXML private Button BtnPrintAllCategory; + @FXML private Button BtnPrintSelectProduit; + + String StringLocale = ParametreSystem.NomLocalPC; + String StrSeleCategory = ""; + + private Service ThreadEtatStockCategorie; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + TabColNomCategorie.setCellValueFactory(new PropertyValueFactory("Nom")); + + TabColQuantiteCategorie.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantiteCategorie.getStyleClass().add("Center"); + TabColQuantiteCategorie.setCellValueFactory(new PropertyValueFactory("Quantite")); + + TabColDetailAction.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDetailAction.getStyleClass().add("Center"); + TabColDetailAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCellCategorie(); + } + }); + + //Liste des Locales + ComboLocale.getItems().addAll(new StockDB().getAllListLocal()); + ComboLocale.getSelectionModel().select(ParametreSystem.NomLocalPC); + + ComboLocale.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + StringLocale = ComboLocale.getValue().toString(); + SearchCategorie(StringLocale, TextFieldCategory.getText()); + TableViewProduit.setItems(null); + } + }); + + TextFieldCategory.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchCategorie(StringLocale, TextFieldCategory.getText()); + } + } + }); + + SearchCategorie(StringLocale, ""); + + + + /******************* List des Produits******************************/ + + TabColProduitReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColProduitDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + TabColProduitQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColProduitQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColProduitQuantite.getStyleClass().add("Center"); + + TabColProduitDetailAction.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColProduitDetailAction.getStyleClass().add("Center"); + TabColProduitDetailAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCellProduit(); + } + }); + + TextFieldReference.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduits("", TextFieldReference.getText(), ""); + } + + } + }); + + TextFieldDesignation.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduits("", "", TextFieldDesignation.getText()); + } + } + }); + + BtnPrintAllProduit.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + PrintAllProduit(); + } + }); + + BtnPrintAllCategory.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + PrintAllCategorie(); + } + }); + + BtnPrintSelectProduit.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + PrintSelectProduit(); + } + }); + + } + + + + + /** + * Print All Produit + */ + private void PrintAllProduit() { + try { + ObservableList listProduits = new StockDB().getProduitInStock(StringLocale, "", "", ""); + PrinterJob job = PrinterJob.createPrinterJob(); + int SizeListProduit = listProduits.size(); + int total = SizeListProduit / 25 + 1 ; + int page = 0; + for (int i=0; i listProdTemp = FXCollections.observableArrayList(); + for (int j=i; (j<(i+25)) && (j listCategorie = new CategorieDB().GetCategorie(StringLocale, ""); + + PrinterJob jobCate = PrinterJob.createPrinterJob(); + int SizeListCategory = listCategorie.size(); + int total = SizeListCategory / 25 + 1 ; + int page = 0; + for (int i=0; i listCateTemp = FXCollections.observableArrayList(); + for (int j=i; (j<(i+25)) && (j listSeleProduits = null; + contro clt = new contro(); + int SizeListSeleProduit = 0; + int total = 0; + if(!clt.isStringNull(StrSeleCategory)){ + listSeleProduits = new StockDB().getProduitInStock(StringLocale, StrSeleCategory, "", ""); + SizeListSeleProduit = listSeleProduits.size(); + total = SizeListSeleProduit / 25 + 1 ; + } + PrinterJob job = PrinterJob.createPrinterJob(); + int page = 0; + for (int i=0; i listProdTemp = FXCollections.observableArrayList(); + for (int j=i; (j<(i+25)) && (j(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + TableViewCategorie.setItems(new CategorieDB().GetCategorie(Local, NomCategory)); + return null; + } + }; + } + }; + + ThreadEtatStockCategorie.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + BarLoading.setVisible(false); + } + }); + ThreadEtatStockCategorie.start(); + } + + + private void SearchProduits(final String Categorie, final String Reference, final String Designation) + { + BarLoading.setVisible(true); + + TableViewProduit.setItems(null); + + ThreadEtatStockCategorie = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + TableViewProduit.setItems(new StockDB().getProduitInStock(StringLocale, Categorie, Reference, Designation)); + return null; + } + }; + } + }; + + ThreadEtatStockCategorie.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + BarLoading.setVisible(false); + } + }); + ThreadEtatStockCategorie.start(); + } + + private class ButtonCellCategorie extends TableCell { + + final Button cellButton = new Button(); + + ButtonCellCategorie(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + + CategorieListe ListCategorie = (CategorieListe)getTableRow().getItem(); + StrSeleCategory = ListCategorie.getNom(); + SearchProduits(ListCategorie.getNom(), "", ""); + + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + private class ButtonCellProduit extends TableCell { + + final Button cellButton = new Button(); + + ButtonCellProduit(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + ListeProduit produit = (ListeProduit)getTableRow().getItem(); + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Stock/MouvementStock.fxml")); + Parent NodeMouvementStock = (Parent)fxmlLoader.load(); + + MouvementStockController MouvementStock = fxmlLoader.getController(); + MouvementStock.SetData(produit.getReference(), produit.getDesignation(), StringLocale); + + AnchorPaneEtatStockCategorie.getChildren().clear(); + AnchorPaneEtatStockCategorie.getChildren().add(NodeMouvementStock); + + } catch (Exception ex) { + System.err.println(ex.getMessage()); + } + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + +} + + + + \ No newline at end of file diff --git a/src/main/java/Controllers/Stock/ListProduitBon.java b/src/main/java/Controllers/Stock/ListProduitBon.java new file mode 100644 index 0000000..f6b2cb6 --- /dev/null +++ b/src/main/java/Controllers/Stock/ListProduitBon.java @@ -0,0 +1,65 @@ +/* + * 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 Controllers.Stock; + +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author PC-Maher + */ +public class ListProduitBon { + private final SimpleStringProperty reference; + private final SimpleStringProperty designaton; + private final SimpleStringProperty marque; + private final SimpleStringProperty categorie; + private final SimpleStringProperty prixttc; + private final SimpleStringProperty quantite; + private final SimpleStringProperty tva; + + public ListProduitBon(String reference, String designaton, String marque, String categorie, String prix, String qte,String tva) { + + this.reference = new SimpleStringProperty(reference); + this.designaton = new SimpleStringProperty(designaton); + this.marque = new SimpleStringProperty(marque); + this.categorie = new SimpleStringProperty(categorie); + this.prixttc = new SimpleStringProperty(prix); + this.quantite = new SimpleStringProperty(qte); + this.tva = new SimpleStringProperty(tva); + } + + public String getReference() { + return reference.get(); + } + + public String getDesignaton() { + return designaton.get(); + } + + public String getTva() { + return tva.get(); + } + + + public String getMarque() { + return marque.get(); + } + public String getCategorie() { + return categorie.get(); + } + + public String getPrixttc() { + return prixttc.get(); + } + + public String getQuantite() { + return quantite.get(); + } + public void setQuantite(String fQte) { + quantite.set(fQte); + } + +} diff --git a/src/main/java/Controllers/Stock/ListProduitRech.java b/src/main/java/Controllers/Stock/ListProduitRech.java new file mode 100644 index 0000000..f943b03 --- /dev/null +++ b/src/main/java/Controllers/Stock/ListProduitRech.java @@ -0,0 +1,61 @@ +/* + * 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 Controllers.Stock; + +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author SYSTEM + */ +public class ListProduitRech { + + private final SimpleStringProperty reference; + private final SimpleStringProperty designaton; + private final SimpleStringProperty marque; + private final SimpleStringProperty categorie; + private final SimpleStringProperty prixttc; + private final SimpleStringProperty TVA; + private final SimpleStringProperty quantite; + + public ListProduitRech(String reference, String designaton, String marque, String categorie, String prix, String tva, String quantite) { + + this.reference = new SimpleStringProperty(reference); + this.designaton = new SimpleStringProperty(designaton); + this.marque = new SimpleStringProperty(marque); + this.categorie = new SimpleStringProperty(categorie); + this.prixttc = new SimpleStringProperty(prix); + this.TVA = new SimpleStringProperty(tva); + this.quantite = new SimpleStringProperty(quantite); + } + + public String getReference() { + return reference.get(); + } + + public String getDesignaton() { + return designaton.get(); + } + + public String getMarque() { + return marque.get(); + } + public String getCategorie() { + return categorie.get(); + } + + public String getPrixttc() { + return prixttc.get(); + } + + public String getTVA() { + return TVA.get(); + } + + public String getQuantite() { + return quantite.get(); + } +} diff --git a/src/main/java/Controllers/Stock/MouvementStockController.java b/src/main/java/Controllers/Stock/MouvementStockController.java new file mode 100644 index 0000000..1369520 --- /dev/null +++ b/src/main/java/Controllers/Stock/MouvementStockController.java @@ -0,0 +1,361 @@ +/* + * 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 Controllers.Stock; + +import Models.Stock.ListeMouvement; +import Models.Stock.StockDB; +import java.io.IOException; +import java.lang.reflect.Method; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.application.Platform; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.print.JobSettings; +import javafx.print.PageRange; +import javafx.print.PrinterJob; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * + * @author Maher + */ +public class MouvementStockController implements Initializable { + + @FXML private ProgressIndicator ProgressLoading; + + @FXML private Text TextReference ; + @FXML private Text TextDesignation ; + + @FXML private TableView TableViewMouvement ; + @FXML private TableColumn TabColCode; + @FXML private TableColumn TabColType; + @FXML private TableColumn TabColMouvement; + @FXML private TableColumn TabColQuantite; + @FXML private TableColumn TabColDate; + + @FXML private DatePicker DatePickerDebut; + @FXML private Button BtnPrintMouvement; + @FXML private Button BtnExportPDFMouvement; + + @FXML private StackPane ListerPages; + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label count ; + @FXML private ChoiceBox NbrLigne ; + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount ; + private Integer nbrpage = 0; + private Integer actuellepage; + Integer position ; + + + private String StringLocal; + private String StringReference; + private String StringDateDebut = ""; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TabColCode.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColCode.getStyleClass().add("Center"); + TabColCode.setCellValueFactory(new PropertyValueFactory("Code")); + + TabColType.setCellValueFactory(new PropertyValueFactory("Type")); + + TabColMouvement.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColMouvement.getStyleClass().add("Center"); + TabColMouvement.setCellValueFactory(new PropertyValueFactory("Mouvement")); + + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + TabColQuantite.setCellValueFactory(new PropertyValueFactory("Quantite")); + + TabColDate.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDate.getStyleClass().add("Center"); + TabColDate.setCellValueFactory(new PropertyValueFactory("Date")); + + DatePickerDebut.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + try{ + StringDateDebut = DatePickerDebut.getValue().toString(); + MouvementStockGestion("Models.Stock.StockDB", "getDataStockDetail", "getNbrStockDetail", StringDateDebut); + }catch(Exception ex){} + } + }); + DatePickerDebut.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + try{ + StringDateDebut = DatePickerDebut.getConverter().fromString(DatePickerDebut.getEditor().getText()).toString(); + MouvementStockGestion("Models.Stock.StockDB", "getDataStockDetail", "getNbrStockDetail", StringDateDebut); + }catch(Exception ex){} + } + }); + + BtnPrintMouvement.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + PrintMouvement(); + } + }); + + + BtnExportPDFMouvement.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + ExportPDFMouvement(); + } + }); + + } + + public void SetData(String Reference, String Designation, String Local) { + TextReference.setText(Reference); + TextDesignation.setText(Designation); + StringLocal = Local; + StringReference = Reference; + + MouvementStockGestion("Models.Stock.StockDB", "getDataStockDetail", "getNbrStockDetail", ""); + } + + + /** + * Print Mouvement + */ + private void PrintMouvement() { + try { + ObservableList listMouvement = new StockDB().getDataStockDetail(StringLocal, StringReference, "", null, null); + + int SizelistMouvement = listMouvement.size(); + int total = SizelistMouvement / 25 + 1 ; + int page = 0; + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + jobPrint.getJobSettings().setPageRanges(new PageRange(1, total)); + + if (jobPrint.showPrintDialog(null)) { + JobSettings jsPrint = jobPrint.getJobSettings(); + for (int i=0; i listMouvTemp = FXCollections.observableArrayList(); + for (int j=i; (j<(i+25)) && (j listMouvement = new StockDB().getDataStockDetail(StringLocal, StringReference, "", null, null); + PrinterJob jobExportPDF = PrinterJob.createPrinterJob(); + int SizelistMouvement = listMouvement.size(); + int total = SizelistMouvement / 25 + 1 ; + int page = 0; + for (int i=0; i listMouvTemp = FXCollections.observableArrayList(); + for (int j=i; (j<(i+25)) && (j) (m.invoke(o, StringLocal, StringReference, DateDebut, Position, Nbrligne))); + + ProgressLoading.setVisible(false); + TableViewMouvement.setVisible(true); + + } catch (Exception ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + }); + } + }; + + Thread backgroundThread = new Thread(task); // Run the task in a background thread + backgroundThread.setDaemon(true); // Terminate the running thread if the application exits + backgroundThread.start(); // Start the thread + + }catch (Exception ex) { + System.err.println(ex.getMessage()); + } + } + private void MouvementStockGestion(final String NomClass, final String NomMethode, String NomMethodeCount, final String DateDebut){ + try { + Class c = Class.forName(NomClass); + Object o = c.newInstance(); + Class[] paramTypes = {String.class, String.class, String.class}; + Method m = c.getDeclaredMethod(NomMethodeCount, paramTypes); + //System.out.println("method = " + m.toString()); + String nbr = (String) m.invoke(o, StringLocal, StringReference, DateDebut); + count.setText(nbr); + totalcount = Integer.parseInt(nbr) ; + } catch (Exception ex) { + System.err.println("Exception MouvementStockGestion "+ex.getMessage()); + } + + ActuellePage.setText("1"); + actuellepage=1; + position = 0; + setFunctiongetDetailStock(NomClass, NomMethode, DateDebut, position, nbrligne); + + + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + setFunctiongetDetailStock(NomClass, NomMethode, DateDebut, position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1){ + position=position-nbrligne; + setFunctiongetDetailStock(NomClass, NomMethode, DateDebut, position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + setFunctiongetDetailStock(NomClass, NomMethode, DateDebut, position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + + +} diff --git a/src/main/java/Controllers/Stock/PrintAllCategorieController.java b/src/main/java/Controllers/Stock/PrintAllCategorieController.java new file mode 100644 index 0000000..29490b0 --- /dev/null +++ b/src/main/java/Controllers/Stock/PrintAllCategorieController.java @@ -0,0 +1,48 @@ +package Controllers.Stock; + +import Controllers.Traitement.Adaptateur; +import Models.Categorie.CategorieListe; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher + */ +public class PrintAllCategorieController implements Initializable { + + @FXML private Text TextLocale; + @FXML private Text TextDateCreate; + @FXML private Text TextPagination; + + @FXML private TableView TableViewCategorie ; + @FXML private TableColumn TabColCategorie; + @FXML private TableColumn TabColQuantite; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColCategorie.setCellValueFactory(new PropertyValueFactory("Nom")); + TabColQuantite.setCellValueFactory(new PropertyValueFactory("Quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + } + + + public void setCategories(ObservableList listCateg, String Local, String Pagination){ + TableViewCategorie.setItems(null); + TableViewCategorie.setItems(listCateg); + TextLocale.setText(Local); + TextPagination.setText(Pagination); + TextDateCreate.setText(Adaptateur.getDefaultCurrentDate("dd/MM/yyyy HH:mm")); + } +} diff --git a/src/main/java/Controllers/Stock/PrintAllProduitController.java b/src/main/java/Controllers/Stock/PrintAllProduitController.java new file mode 100644 index 0000000..3f91e66 --- /dev/null +++ b/src/main/java/Controllers/Stock/PrintAllProduitController.java @@ -0,0 +1,58 @@ +/* + * 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 Controllers.Stock; + +import Controllers.Traitement.Adaptateur; +import Models.Produit.ListeProduit; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * + * @author Maher + */ +public class PrintAllProduitController implements Initializable { + + @FXML private Text TextLocale; + @FXML private Text TextDateCreate; + @FXML private Text TextPagination; + + @FXML private TableView TableViewProduit ; + @FXML private TableColumn TabColProduitReference; + @FXML private TableColumn TabColProduitDesignation; + @FXML private TableColumn TabColProduitQuantite; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColProduitReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColProduitDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + TabColProduitQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColProduitQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColProduitQuantite.getStyleClass().add("Center"); + + } + + public void setProduits(ObservableList listProduits, String Local, String Pagination){ + TableViewProduit.setItems(null); + TableViewProduit.setItems(listProduits); + TextLocale.setText(Local); + TextPagination.setText(Pagination); + TextDateCreate.setText(Adaptateur.getDefaultCurrentDate("dd/MM/yyyy HH:mm")); + } + + +} diff --git a/src/main/java/Controllers/Stock/PrintMouvementProduitController.java b/src/main/java/Controllers/Stock/PrintMouvementProduitController.java new file mode 100644 index 0000000..38f8a74 --- /dev/null +++ b/src/main/java/Controllers/Stock/PrintMouvementProduitController.java @@ -0,0 +1,73 @@ +package Controllers.Stock; + +import Models.Stock.ListeMouvement; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class PrintMouvementProduitController implements Initializable { + + @FXML private Text TextLocale; + @FXML private Text TextDateDebut; + @FXML private Text TextReference ; + @FXML private Text TextDesignation ; + @FXML private Text TextPagination; + + @FXML private TableView TableViewMouvement ; + @FXML private TableColumn TabColCode; + @FXML private TableColumn TabColType; + @FXML private TableColumn TabColMouvement; + @FXML private TableColumn TabColQuantite; + @FXML private TableColumn TabColDate; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + TabColCode.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColCode.getStyleClass().add("Center"); + TabColCode.setCellValueFactory(new PropertyValueFactory("Code")); + + TabColType.setCellValueFactory(new PropertyValueFactory("Type")); + + TabColMouvement.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColMouvement.getStyleClass().add("Center"); + TabColMouvement.setCellValueFactory(new PropertyValueFactory("Mouvement")); + + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + TabColQuantite.setCellValueFactory(new PropertyValueFactory("Quantite")); + + TabColDate.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDate.getStyleClass().add("Center"); + TabColDate.setCellValueFactory(new PropertyValueFactory("Date")); + + } + + public void setMouvements(ObservableList listMouvements, String Local, String DateDebut, String Reference, String Designation, String Pagination){ + + TableViewMouvement.setItems(null); + TableViewMouvement.setItems(listMouvements); + + TextLocale.setText(Local); + TextDateDebut.setText(DateDebut); + TextReference.setText(Reference); + TextDesignation.setText(Designation); + TextPagination.setText(Pagination); + + } + + +} diff --git a/src/main/java/Controllers/Stock/PrintSelProduitController.java b/src/main/java/Controllers/Stock/PrintSelProduitController.java new file mode 100644 index 0000000..84c32fd --- /dev/null +++ b/src/main/java/Controllers/Stock/PrintSelProduitController.java @@ -0,0 +1,57 @@ +/* + * 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 Controllers.Stock; + +import Controllers.Traitement.Adaptateur; +import Models.Produit.ListeProduit; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher + */ +public class PrintSelProduitController implements Initializable { + + + @FXML private Text TextLocale; + @FXML private Text TextDateCreate; + @FXML private Text TextCategory; + @FXML private Text TextPagination; + + @FXML private TableView TableViewProduit ; + @FXML private TableColumn TabColProduitReference; + @FXML private TableColumn TabColProduitDesignation; + @FXML private TableColumn TabColProduitQuantite; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColProduitReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColProduitDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + TabColProduitQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColProduitQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColProduitQuantite.getStyleClass().add("Center"); + } + + public void setProduits(ObservableList listProduits, String Local, String Category, String Pagination){ + TableViewProduit.setItems(null); + TableViewProduit.setItems(listProduits); + TextLocale.setText(Local); + TextCategory.setText(Category); + TextPagination.setText(Pagination); + TextDateCreate.setText(Adaptateur.getDefaultCurrentDate("dd/MM/yyyy HH:mm")); + } +} diff --git a/src/main/java/Controllers/TraiteClt/TraiteCltDetailController.java b/src/main/java/Controllers/TraiteClt/TraiteCltDetailController.java new file mode 100644 index 0000000..96ea1f6 --- /dev/null +++ b/src/main/java/Controllers/TraiteClt/TraiteCltDetailController.java @@ -0,0 +1,402 @@ +package Controllers.TraiteClt; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Fournisseur.FournisseurDB; +import Models.TraiteClt.TraiteCltDB; +import Models.TraiteClt.TraiteCltGestionDB; +import Models.TraiteClt.TraiteCltPaiementListe; +import java.io.IOException; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.time.LocalDate; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.application.Platform; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.DatePicker; +import javafx.scene.control.RadioButton; +import javafx.scene.control.Tab; +import javafx.scene.control.TabPane; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class TraiteCltDetailController { + + @FXML private AnchorPane PaneDetailTraite; + @FXML private AnchorPane AnchorPaneLoadingTraite; + + @FXML public TableView TableViewPaiement; + + @FXML public TableColumn TabColTypePaiement; + @FXML public TableColumn TabColMontantPaiement; + @FXML public TableColumn TabColDatePaiement; + @FXML public TableColumn TabColHeurPaiement; + @FXML public TableColumn TabColBanquePaiement; + @FXML public TableColumn TabColNumeroPaiement; + + @FXML private Text TextIdTraite; + @FXML private Text TextDate; + + @FXML private Text TextEtat; + @FXML private Text TextMontant; + + @FXML private Text TextTypeClt; + @FXML private Text TextIdClient; + @FXML private Text TextNomClt; + @FXML private Text TextPrenomClt; + @FXML private Text TxtPrenomMatricule; + + @FXML private Text TextCodeFact; + @FXML private Text TextTotalFact; + + @FXML private RadioButton RadioEspace; + @FXML private RadioButton RadioCheque; + @FXML private RadioButton RadioCarte; + + @FXML private GridPane GridEspace; + @FXML private GridPane GridCheque; + @FXML private GridPane GridCarte; + + @FXML private TextField MontantEspace; + + @FXML private TextField MontantCheque; + @FXML private TextField MontantChequeBanque; + @FXML private TextField MontantChequeNumero; + @FXML private DatePicker DatePickerCheque; + + @FXML private TextField MontantCarte; + @FXML private TextField MontantCarteBanque; + @FXML private TextField MontantCarteNumero; + + @FXML private TabPane TabPanePayement; + @FXML private Tab TabPayerTraite; + @FXML private Tab TabDetailPaiement; + + @FXML private Text TextCtlEspace; + @FXML private Text TextCtlBanque; + @FXML private Text TextCtlCarte; + @FXML private Text TextCtlDateCheque; + + @FXML private Text TextCtlNumCheque; + @FXML private Text TextCtlNameBanque; + + @FXML private Text TextCtlNumCarte; + @FXML private Text TextCtlNameCarteBq; + + @FXML private Button ButtonPayerTraite; + + private int TypePayement ; // 0=>Cheque | 1=>Espace | 2=>Carte + + public String IdTraiteClt; + private float OldMontantPayer; + private float MontantTraite; + + public Service ThreadIdTraiteClt; + + ResultSet Resultat ; + + contro clt = new contro(); + + + public Node GetNodeTraiteCltDetail() { + Node nodeFxml = null; + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/TraiteClt/TraiteCltDetail.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node)fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(TraiteCltDetailController.class.getName()).log(Level.SEVERE, null, ex); + } + return nodeFxml; + } + + public void SetSelectPayement() + { + RadioEspace.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + GridEspace.setVisible(true); + GridCheque.setVisible(false); + GridCarte.setVisible(false); + TypePayement = 0; + } + }); + RadioCheque.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + GridCheque.setVisible(true); + GridEspace.setVisible(false); + GridCarte.setVisible(false); + TypePayement = 1; + } + }); + RadioCarte.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + GridCarte.setVisible(true); + GridEspace.setVisible(false); + GridCheque.setVisible(false); + TypePayement = 2; + } + }); + } + + public void SetTraiteCltDetail(String id_traite) { + IdTraiteClt = id_traite; + + TabColTypePaiement.setStyle( "-fx-alignment: CENTER;");TabColTypePaiement.getStyleClass().add("Center"); + TabColTypePaiement.setCellValueFactory(new PropertyValueFactory("TypePaiement")); + + TabColMontantPaiement.setStyle( "-fx-alignment: CENTER;");TabColMontantPaiement.getStyleClass().add("Center"); + TabColMontantPaiement.setCellValueFactory(new PropertyValueFactory("MontantPaiement")); + + TabColDatePaiement.setStyle( "-fx-alignment: CENTER;");TabColDatePaiement.getStyleClass().add("Center"); + TabColDatePaiement.setCellValueFactory(new PropertyValueFactory("DatePaiement")); + + TabColHeurPaiement.setStyle( "-fx-alignment: CENTER;");TabColHeurPaiement.getStyleClass().add("Center"); + TabColHeurPaiement.setCellValueFactory(new PropertyValueFactory("HeurPaiement")); + + TabColBanquePaiement.setStyle( "-fx-alignment: CENTER;");TabColBanquePaiement.getStyleClass().add("Center"); + TabColBanquePaiement.setCellValueFactory(new PropertyValueFactory("BanquePaiement")); + + TabColNumeroPaiement.setStyle( "-fx-alignment: CENTER;");TabColNumeroPaiement.getStyleClass().add("Center"); + TabColNumeroPaiement.setCellValueFactory(new PropertyValueFactory("NumeroPaiement")); + + startTask(); + ButtonPayerTraiteAction(); + SetSelectPayement(); + } + + + public void startTask() + { + ThreadIdTraiteClt = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + Resultat = new TraiteCltGestionDB().GetDetailTraite(IdTraiteClt); + + + + return null; + } + }; + } + }; + ThreadIdTraiteClt.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + try { + TextIdTraite.setText(Resultat.getString("id_traite")); + + TextDate.setText(Resultat.getString("date_traite_format")); + + TextCodeFact.setText(Resultat.getString("id_factureclt")); + + TextTotalFact.setText(Adaptateur.StringToStringEspaceCurrency(Resultat.getString("net_a_payer"))); + + if(Resultat.getInt("typeclt") == 0){ + TextTypeClt.setText("Personne"); + TextIdClient.setText(Resultat.getString("codeclient")); + TextNomClt.setText(Resultat.getString("nom")); + TextPrenomClt.setText(Resultat.getString("prenom")); + }else if(Resultat.getInt("typeclt") == 1){ + TextTypeClt.setText("Entreprise"); + TextIdClient.setText(Resultat.getString("idcliententreprise")); + TextNomClt.setText(Resultat.getString("nomentrepise")); + TextPrenomClt.setText(Resultat.getString("matricule_fiscale")); + TxtPrenomMatricule.setText("Matricule:"); + } + + MontantTraite = Resultat.getFloat("montant_traite"); + OldMontantPayer = Resultat.getFloat("montant_payer"); + + float RestMontantPayer = MontantTraite - OldMontantPayer; + + String StrRestMontantPayer = Adaptateur.ArrondFloatToString(RestMontantPayer); + + MontantCheque.setText(StrRestMontantPayer); + MontantCarte.setText(StrRestMontantPayer); + MontantEspace.setText(StrRestMontantPayer); + + + DatePickerCheque.setValue(LocalDate.now()); + + + TextMontant.setText(Adaptateur.StringToStringEspaceCurrency(Resultat.getString("montant_traite"))); + + String etat = Resultat.getString("etat"); + if(etat.equals("1")){ + TextEtat.setText("Payer"); TextEtat.setFill(Color.web("#428BCA")); + }else if(etat.equals("2")){ + TextEtat.setText("En Cours"); TextEtat.setFill(Color.web("#000000")); + }else if(etat.equals("3")){ + TextEtat.setText("En Retart"); TextEtat.setFill(Color.RED); + } + TraiteCltDB TraiteDB= new TraiteCltDB(); + ObservableList PaiementListe = TraiteDB.getListPaiementTraiteClt(IdTraiteClt); + TableViewPaiement.setItems(PaiementListe); + + // terminer le payement + if(OldMontantPayer>= MontantTraite){ + TabPanePayement.getSelectionModel().select(TabDetailPaiement); + TabPayerTraite.setDisable(true); + TabPayerTraite.setText(""); + + TabDetailPaiement.setDisable(false); + TabDetailPaiement.setText("Detail de paiement"); + + // (données un montant mais n'est pas terminer le payement + }else if( (OldMontantPayer>0) && (OldMontantPayer(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + + TraiteCltDB TraiteDB= new TraiteCltDB(); + + //Espace + if(TypePayement == 0){ + String NewMontant = MontantEspace.getText(); + if(ControleMontantPaiement(MontantEspace, TextCtlEspace)){ + String IdPayementTraite = TraiteDB.SetPayerTraiteEnEspaceDB(IdTraiteClt, Adaptateur.StringToFloat(NewMontant), OldMontantPayer); + startTask(); + } + + //Banque + }else if(TypePayement == 1){ + String NewMontant = MontantCheque.getText(); + String NameBanque = MontantChequeBanque.getText(); + String NumeroCheque = MontantChequeNumero.getText(); + // + if(ControleMontantPaiement(MontantCheque, TextCtlBanque) && + clt.ContrNull(MontantChequeBanque, TextCtlNameBanque) && + clt.ContrNumeriqueNotnull(MontantChequeNumero, TextCtlNumCheque) && + clt.ContrNullDatePicker(DatePickerCheque , TextCtlDateCheque)){ + String DateCheque = DatePickerCheque.getValue().toString(); + String IdPayementTraite = TraiteDB.SetPayerTraiteEnChequeDB(IdTraiteClt, Adaptateur.StringToFloat(NewMontant), OldMontantPayer, NameBanque, NumeroCheque, DateCheque); + startTask(); + } + + //Carte Bancaire + }else if(TypePayement == 2){ + String NewMontant = MontantCarte.getText(); + String NameBanque = MontantCarteBanque.getText(); + String NumeroCarte = MontantCarteNumero.getText(); + if(ControleMontantPaiement(MontantCarte, TextCtlCarte)){ + String IdPayementTraite = TraiteDB.SetPayerTraiteEnCarteDB(IdTraiteClt, Adaptateur.StringToFloat(NewMontant), OldMontantPayer, NameBanque, NumeroCarte); + startTask(); + } + } + + + + } + }); + } + + + + + + + public boolean ControleMontantPaiement(TextField TextFieldMontant, Text TextClt){ + String NewMontant = MontantEspace.getText(); + boolean ResultClt = false; + if(clt.isFloatNotnull(NewMontant)== false){ + float FolatNewMontant = Adaptateur.StringToFloat(NewMontant); + if( (FolatNewMontant>0) && (FolatNewMontant<= (MontantTraite - OldMontantPayer)) ){ + TextFieldMontant.setStyle("-fx-border-color:transparent;"); + ResultClt = true; + }else{ + TextFieldMontant.setStyle("-fx-border-color:#f20606;"); + TextClt.setText(" champ doit être entre 1 à "+(MontantTraite - OldMontantPayer)); + } + }else{ + TextFieldMontant.setStyle("-fx-border-color:#f20606;"); + TextClt.setText(" champ doit être réel"); + } + return ResultClt; + } + + + + + + + +} diff --git a/src/main/java/Controllers/TraiteClt/TraiteCltGestionController.java b/src/main/java/Controllers/TraiteClt/TraiteCltGestionController.java new file mode 100644 index 0000000..6e337d2 --- /dev/null +++ b/src/main/java/Controllers/TraiteClt/TraiteCltGestionController.java @@ -0,0 +1,430 @@ +package Controllers.TraiteClt; + +import Models.TraiteClt.TraiteCltGestionDB; +import Models.TraiteClt.TraiteCltGestionListe; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class TraiteCltGestionController implements Initializable { + + @FXML public AnchorPane PaneTraiteCltGestion ; + + @FXML private ProgressBar ProgressBarTraiteClt; + + @FXML private Button ButtonSearchTraiteClt ; + + @FXML public TextField TextFieldIdTraite ; + @FXML public TextField TextFieldCodeFacture ; + @FXML public TextField TextFieldCodeClt ; + @FXML public TextField TextFieldNomCompet ; + @FXML public TextField TextFieldCinClt ; + + @FXML public DatePicker PickerDateTraite; + + @FXML public TableView TableViewTraiteCltGestion; + + @FXML public TableColumn TabColNumTraite; + @FXML public TableColumn TabColEtat; + @FXML public TableColumn TabColFacture; + @FXML public TableColumn TabColCodeClt; + @FXML public TableColumn TabColTypeClient; + @FXML public TableColumn TabColNomPrenom; + @FXML public TableColumn TabColDateTraite; + @FXML public TableColumn TabColDatePayer; //la date de payer par le client + @FXML public TableColumnTabColDetail; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount; + @FXML private ChoiceBox NbrLigne ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0 ; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + private Service ThreadSearchTraiteClt; + + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TabColNumTraite.setCellValueFactory(new PropertyValueFactory("NumTraite")); + + + TabColFacture.setStyle( "-fx-alignment: CENTER;");TabColFacture.getStyleClass().add("Center"); + TabColFacture.setCellValueFactory(new PropertyValueFactory("Facture")); + + TabColCodeClt.setStyle( "-fx-alignment: CENTER;");TabColCodeClt.getStyleClass().add("Center"); + TabColCodeClt.setCellValueFactory(new PropertyValueFactory("CodeClt")); + + TabColTypeClient.setStyle( "-fx-alignment: CENTER;");TabColTypeClient.getStyleClass().add("Center"); + TabColTypeClient.setCellValueFactory(new PropertyValueFactory("TypeClient")); + + TabColNomPrenom.setCellValueFactory(new PropertyValueFactory("NomPrenom")); + + TabColDateTraite.setStyle( "-fx-alignment: CENTER;");TabColDateTraite.getStyleClass().add("Center"); + TabColDateTraite.setCellValueFactory(new PropertyValueFactory("DateTraite")); + + TabColDatePayer.setStyle( "-fx-alignment: CENTER;");TabColDatePayer.getStyleClass().add("Center"); + TabColDatePayer.setCellValueFactory(new PropertyValueFactory("DatePayer")); + + TabColEtat.setStyle( "-fx-alignment: CENTER;");TabColEtat.getStyleClass().add("Center"); + TabColEtat.setCellValueFactory(new PropertyValueFactory("Etat")); + TabColEtat.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + //1 Payer 2 En Cours 3 En Retart + if(item!=null && item.equals("2")){ + Text text = new Text("En Cours"); + text.setFill(Color.web("#000000")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else if(item!=null && item.equals("1")){ + Text text = new Text("Payer"); + text.setFill(Color.web("#428BCA")); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else if(item!=null && item.equals("3")){ + Text text = new Text("En Retart"); + text.setFill(Color.RED); + text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); + TabColDetail.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new ButtonCell(); + } + }); + + ButtonSearchTraiteClt.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchTraiteClt(); + } + }); + + PaneTraiteCltGestion.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchTraiteClt(); + } + } + }); + + GestionSearchTraiteClt(); + } + + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + ButtonCell(){ + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconedit.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + + TraiteCltGestionListe current = (TraiteCltGestionListe) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); + String IdTraite = current.getNumTraite(); + + TraiteCltDetailController TraiteCltDetail = new TraiteCltDetailController(); + PaneTraiteCltGestion.getChildren().add(TraiteCltDetail.GetNodeTraiteCltDetail()); + + TraiteCltDetail.SetTraiteCltDetail(IdTraite); + } + }); + } + + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + @FXML + private void TraiteCltRetardButtonAction(ActionEvent event) throws IOException { + PaneTraiteCltGestion.getChildren().clear(); + PaneTraiteCltGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/TraiteClt/TraiteCltRetard.fxml"))); + } + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchTraiteClt() + { + ProgressBarTraiteClt.setVisible(true); + + ButtonSearchTraiteClt.setDisable(true); + + ThreadSearchTraiteClt = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateTraite = ""; + if(PickerDateTraite.getValue() != null){ + DateTraite = PickerDateTraite.getValue().toString(); + } + + ObservableList ListTraiteClts = new TraiteCltGestionDB().SearchTraiteClt( + position, + nbrligne, + TextFieldIdTraite.getText(), + TextFieldCodeFacture.getText(), + DateTraite, + TextFieldCodeClt.getText(), + TextFieldCinClt.getText(), + TextFieldNomCompet.getText()); + + TableViewTraiteCltGestion.setItems(ListTraiteClts); + + totalcount = new TraiteCltGestionDB().nbrSearchTraiteClt(TextFieldIdTraite.getText(), + TextFieldCodeFacture.getText(), + DateTraite, + TextFieldCodeClt.getText(), + TextFieldCinClt.getText(), + TextFieldNomCompet.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchTraiteClt.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarTraiteClt.setVisible(false); + ButtonSearchTraiteClt.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchTraiteClt.start(); + } + + + private void NextLastSearchTraiteClt(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarTraiteClt.setVisible(true); + + ButtonSearchTraiteClt.setDisable(true); + + ThreadSearchTraiteClt = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateTraite = ""; + if(PickerDateTraite.getValue() != null){ + DateTraite = PickerDateTraite.getValue().toString(); + } + + ObservableList ListTraiteClts = new TraiteCltGestionDB().SearchTraiteClt( + ParmPosition, + ParamNbrligne, + TextFieldIdTraite.getText(), + TextFieldCodeFacture.getText(), + DateTraite, + TextFieldCodeClt.getText(), + TextFieldCinClt.getText(), + TextFieldNomCompet.getText()); + + TableViewTraiteCltGestion.setItems(ListTraiteClts); + + return null; + } + }; + } + }; + + ThreadSearchTraiteClt.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarTraiteClt.setVisible(false); + ButtonSearchTraiteClt.setDisable(false); + } + }); + ThreadSearchTraiteClt.start(); + } + + private void GestionSearchTraiteClt() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchTraiteClt(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchTraiteClt(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchTraiteClt(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } +} diff --git a/src/main/java/Controllers/TraiteClt/TraiteCltPrintController.java b/src/main/java/Controllers/TraiteClt/TraiteCltPrintController.java new file mode 100644 index 0000000..b8234d5 --- /dev/null +++ b/src/main/java/Controllers/TraiteClt/TraiteCltPrintController.java @@ -0,0 +1,178 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/javafx/FXMLController.java to edit this template + */ +package Controllers.TraiteClt; + +import Controllers.Traitement.ParametreSystem; + +import java.net.URL; +import java.util.ResourceBundle; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.text.Text; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.File; +import java.io.IOException; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.TextFlow; +import javax.xml.XMLConstants; + +/** + * FXML Controller class + * + * @author Administrateur + */ +public class TraiteCltPrintController implements Initializable { + + @FXML private AnchorPane AnchorPaneTraiteClt; + + @FXML private Text TextCompanyName; + @FXML private Text TextCompanyPlace; + @FXML private Text TextCompanySIREN; + @FXML private Text TextCompanyAddress; + @FXML private TextFlow TextFlowCompanyAddress; + + @FXML private Text TextNomCompletClt; + @FXML private Text TextCIN; + + @FXML private Text TextBank; + @FXML private TextFlow TextFlowBank; + + @FXML private Text TextAmountLetter; + @FXML private Text TextAmountFigures; + @FXML private Text TextDateDeadline; + + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + + try { + + // optional, but recommended + // process XML securely, avoid attacks like XML External Entities (XXE) + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + + // parse XML file + DocumentBuilder db = dbf.newDocumentBuilder(); + + //C:\Users\Administrateur\Documents\NetBeansProjects\PowerERP\conf\print.xml + Document doc = db.parse(new File("./conf/print.xml")); + + doc.getDocumentElement().normalize(); + + Element elementTraiteClt = (Element) doc.getElementsByTagName("TraiteClt").item(0); + + //AnchorPane + Element elementAnchorPane = (Element)elementTraiteClt.getElementsByTagName("AnchorPaneTraiteClt").item(0); + AnchorPaneTraiteClt.setPrefHeight(Double.parseDouble(elementAnchorPane.getElementsByTagName("prefHeight").item(0).getTextContent())); + AnchorPaneTraiteClt.setPrefWidth(Double.parseDouble(elementAnchorPane.getElementsByTagName("prefWidth").item(0).getTextContent())); + + + //CompanyName + Element elementCompanyName = (Element)elementTraiteClt.getElementsByTagName("CompanyName").item(0); + TextCompanyName.setVisible(Boolean.valueOf(elementCompanyName.getElementsByTagName("Visible").item(0).getTextContent())); + TextCompanyName.setLayoutX(Double.parseDouble(elementCompanyName.getElementsByTagName("LayoutX").item(0).getTextContent())); + TextCompanyName.setLayoutY(Double.parseDouble(elementCompanyName.getElementsByTagName("LayoutY").item(0).getTextContent())); + + + //CompanyPlace + Element elementCompanyPlace = (Element)elementTraiteClt.getElementsByTagName("CompanyPlace").item(0); + TextCompanyPlace.setVisible(Boolean.valueOf(elementCompanyPlace.getElementsByTagName("Visible").item(0).getTextContent())); + TextCompanyPlace.setLayoutX(Double.parseDouble(elementCompanyPlace.getElementsByTagName("LayoutX").item(0).getTextContent())); + TextCompanyPlace.setLayoutY(Double.parseDouble(elementCompanyPlace.getElementsByTagName("LayoutY").item(0).getTextContent())); + + //CompanyAddress + Element elementCompanyAddress = (Element)elementTraiteClt.getElementsByTagName("CompanyAddress").item(0); + TextFlowCompanyAddress.setVisible(Boolean.valueOf(elementCompanyAddress.getElementsByTagName("Visible").item(0).getTextContent())); + TextFlowCompanyAddress.setLayoutX(Double.parseDouble(elementCompanyAddress.getElementsByTagName("LayoutX").item(0).getTextContent())); + TextFlowCompanyAddress.setLayoutY(Double.parseDouble(elementCompanyAddress.getElementsByTagName("LayoutY").item(0).getTextContent())); + TextFlowCompanyAddress.setPrefHeight(Double.parseDouble(elementCompanyAddress.getElementsByTagName("prefHeight").item(0).getTextContent())); + TextFlowCompanyAddress.setPrefWidth(Double.parseDouble(elementCompanyAddress.getElementsByTagName("prefWidth").item(0).getTextContent())); + + //CompanySIREN + Element elementCompanySIREN = (Element)elementTraiteClt.getElementsByTagName("CompanySIREN").item(0); + TextCompanySIREN.setVisible(Boolean.valueOf(elementCompanySIREN.getElementsByTagName("Visible").item(0).getTextContent())); + TextCompanySIREN.setLayoutX(Double.parseDouble(elementCompanySIREN.getElementsByTagName("LayoutX").item(0).getTextContent())); + TextCompanySIREN.setLayoutY(Double.parseDouble(elementCompanySIREN.getElementsByTagName("LayoutY").item(0).getTextContent())); + + //NomCompletClt + Element elementNomCompletClt = (Element)elementTraiteClt.getElementsByTagName("NomCompletClt").item(0); + TextNomCompletClt.setVisible(Boolean.valueOf(elementNomCompletClt.getElementsByTagName("Visible").item(0).getTextContent())); + TextNomCompletClt.setLayoutX(Double.parseDouble(elementNomCompletClt.getElementsByTagName("LayoutX").item(0).getTextContent())); + TextNomCompletClt.setLayoutY(Double.parseDouble(elementNomCompletClt.getElementsByTagName("LayoutY").item(0).getTextContent())); + + //CIN + Element elementCIN = (Element)elementTraiteClt.getElementsByTagName("CIN").item(0); + TextCIN.setVisible(Boolean.valueOf(elementCIN.getElementsByTagName("Visible").item(0).getTextContent())); + TextCIN.setLayoutX(Double.parseDouble(elementCIN.getElementsByTagName("LayoutX").item(0).getTextContent())); + TextCIN.setLayoutY(Double.parseDouble(elementCIN.getElementsByTagName("LayoutY").item(0).getTextContent())); + + //Bank + Element elementBank = (Element)elementTraiteClt.getElementsByTagName("Bank").item(0); + TextFlowBank.setVisible(Boolean.valueOf(elementBank.getElementsByTagName("Visible").item(0).getTextContent())); + TextFlowBank.setLayoutX(Double.parseDouble(elementBank.getElementsByTagName("LayoutX").item(0).getTextContent())); + TextFlowBank.setLayoutY(Double.parseDouble(elementBank.getElementsByTagName("LayoutY").item(0).getTextContent())); + TextFlowBank.setPrefHeight(Double.parseDouble(elementBank.getElementsByTagName("prefHeight").item(0).getTextContent())); + TextFlowBank.prefWidth(Double.parseDouble(elementBank.getElementsByTagName("prefWidth").item(0).getTextContent())); + + //AmountLetter + Element elementAmountLetter = (Element)elementTraiteClt.getElementsByTagName("AmountLetter").item(0); + TextAmountLetter.setVisible(Boolean.valueOf(elementAmountLetter.getElementsByTagName("Visible").item(0).getTextContent())); + TextAmountLetter.setLayoutX(Double.parseDouble(elementAmountLetter.getElementsByTagName("LayoutX").item(0).getTextContent())); + TextAmountLetter.setLayoutY(Double.parseDouble(elementAmountLetter.getElementsByTagName("LayoutY").item(0).getTextContent())); + + //AmountFigures + Element elementAmountFigures = (Element)elementTraiteClt.getElementsByTagName("AmountFigures").item(0); + TextAmountFigures.setVisible(Boolean.valueOf(elementAmountFigures.getElementsByTagName("Visible").item(0).getTextContent())); + TextAmountFigures.setLayoutX(Double.parseDouble(elementAmountFigures.getElementsByTagName("LayoutX").item(0).getTextContent())); + TextAmountFigures.setLayoutY(Double.parseDouble(elementAmountFigures.getElementsByTagName("LayoutY").item(0).getTextContent())); + + //DateDeadline + Element elementDateDeadline = (Element)elementTraiteClt.getElementsByTagName("DateDeadline").item(0); + TextDateDeadline.setVisible(Boolean.valueOf(elementDateDeadline.getElementsByTagName("Visible").item(0).getTextContent())); + TextDateDeadline.setLayoutX(Double.parseDouble(elementDateDeadline.getElementsByTagName("LayoutX").item(0).getTextContent())); + TextDateDeadline.setLayoutY(Double.parseDouble(elementDateDeadline.getElementsByTagName("LayoutY").item(0).getTextContent())); + + + } catch (ParserConfigurationException | SAXException | IOException e) { + e.printStackTrace(); + } + + TextCompanyName.setText(ParametreSystem.CompanyName); + + TextCompanyPlace.setText(ParametreSystem.CompanyPlace); + + TextCompanySIREN.setText(ParametreSystem.CompanySIREN); + + TextCompanyAddress.setText(ParametreSystem.CompanyAddress); + + TextBank.setText(ParametreSystem.Bank); + + } + + public void SetData(String AmountLetter, + String AmountFigures, + String DateDeadline, + String NomCompletClt, + String CIN) + { + TextNomCompletClt.setText(NomCompletClt); + TextCIN.setText(CIN); + TextAmountLetter.setText(AmountLetter); + TextAmountFigures.setText(AmountFigures); + TextDateDeadline.setText(DateDeadline); + } + +} diff --git a/src/main/java/Controllers/TraiteClt/TraiteCltPrintRetardController.java b/src/main/java/Controllers/TraiteClt/TraiteCltPrintRetardController.java new file mode 100644 index 0000000..2de7631 --- /dev/null +++ b/src/main/java/Controllers/TraiteClt/TraiteCltPrintRetardController.java @@ -0,0 +1,73 @@ +package Controllers.TraiteClt; + +import Models.Caisse.CaisseEntreListe; +import Models.TraiteClt.TraiteCltGestionListe; +import java.net.URL; +import java.util.ResourceBundle; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class TraiteCltPrintRetardController implements Initializable { + + @FXML private Text TextNbrTraiteCltRetard ; + @FXML private Text TextPageTraiteCltRetard ; + + @FXML public TableView TableViewTraiteCltRetard; + + @FXML public TableColumn TabColNumTraite; + @FXML public TableColumn TabColDateTraite; + @FXML public TableColumn TabColMontant; + + @FXML public TableColumn TabColFacture; + @FXML public TableColumn TabColCodeClt; + @FXML public TableColumn TabColLocal; + @FXML public TableColumn TabColNomPrenom; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TabColNumTraite.setStyle( "-fx-alignment: CENTER;");TabColNumTraite.getStyleClass().add("Center"); + TabColNumTraite.setCellValueFactory(new PropertyValueFactory("NumTraite")); + + TabColDateTraite.setStyle( "-fx-alignment: CENTER;");TabColDateTraite.getStyleClass().add("Center"); + TabColDateTraite.setCellValueFactory(new PropertyValueFactory("DateTraite")); + + TabColMontant.setStyle( "-fx-alignment: CENTER;");TabColMontant.getStyleClass().add("Center"); + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + + TabColFacture.setStyle( "-fx-alignment: CENTER;");TabColFacture.getStyleClass().add("Center"); + TabColFacture.setCellValueFactory(new PropertyValueFactory("Facture")); + + TabColCodeClt.setStyle( "-fx-alignment: CENTER;");TabColCodeClt.getStyleClass().add("Center"); + TabColCodeClt.setCellValueFactory(new PropertyValueFactory("CodeClt")); + + TabColLocal.setStyle( "-fx-alignment: CENTER;");TabColLocal.getStyleClass().add("Center"); + TabColLocal.setCellValueFactory(new PropertyValueFactory("TypeClient")); + + TabColNomPrenom.setStyle( "-fx-alignment: CENTER;");TabColNomPrenom.getStyleClass().add("Center"); + TabColNomPrenom.setCellValueFactory(new PropertyValueFactory("NomPrenom")); + } + + + public void setTraiteCltPrintRetard( + String NbrTraiteCltRetard, + String PageTraiteCltRetard, + ObservableList obsListTraiteCltGestion) + { + TextNbrTraiteCltRetard.setText(NbrTraiteCltRetard); + TextPageTraiteCltRetard.setText(PageTraiteCltRetard); + TableViewTraiteCltRetard.setItems(obsListTraiteCltGestion); + } + +} diff --git a/src/main/java/Controllers/TraiteClt/TraiteCltRetardController.java b/src/main/java/Controllers/TraiteClt/TraiteCltRetardController.java new file mode 100644 index 0000000..0942768 --- /dev/null +++ b/src/main/java/Controllers/TraiteClt/TraiteCltRetardController.java @@ -0,0 +1,452 @@ +package Controllers.TraiteClt; + +import Controllers.Traitement.Adaptateur; +import Models.Stock.StockDB; +import Models.TraiteClt.TraiteCltDB; +import Models.TraiteClt.TraiteCltGestionListe; +import com.gluonhq.charm.glisten.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.ResourceBundle; +import javafx.application.Platform; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.print.PageLayout; +import javafx.print.PageOrientation; +import javafx.print.PageRange; +import javafx.print.Paper; +import javafx.print.Printer; +import javafx.print.PrinterJob; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.control.Button; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class TraiteCltRetardController implements Initializable { + + @FXML private AnchorPane AnchorPaneTraiteCltRetard; + + @FXML private ProgressBar ProgressBarTraiteClt; + + @FXML public TableView TableViewTraiteCltRetard; + + @FXML public TableColumn TabColNumTraite; + @FXML public TableColumn TabColDateTraite; + @FXML public TableColumn TabColMontant; + + @FXML public TableColumn TabColFacture; + @FXML public TableColumn TabColCodeClt; + @FXML public TableColumn TabColLocal; + @FXML public TableColumn TabColNomPrenom; + + @FXML private Button ButtonSearchTraiteCltRetard; + @FXML private Button ButtonPrintTraiteCltRetard; + + @FXML private DatePicker DatePickeDebut; + + @FXML private TextField TextFieldIdFacture ; + @FXML private TextField TextFieldCodeClt ; + @FXML private TextField TextFieldCINClt ; + @FXML private TextField TextFieldNomClt ; + @FXML private ChoiceBox ChoiceBoxLocal ; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount; + @FXML private ChoiceBox NbrLigne ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + private Service ThreadSearchTraiteCltRetard; + private Service ThreadPrintTraiteCltRetard; + + ObservableList ListPrintTraiteCltRetards; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + TabColNumTraite.setStyle( "-fx-alignment: CENTER;");TabColNumTraite.getStyleClass().add("Center"); + TabColNumTraite.setCellValueFactory(new PropertyValueFactory("NumTraite")); + + TabColDateTraite.setStyle( "-fx-alignment: CENTER;");TabColDateTraite.getStyleClass().add("Center"); + TabColDateTraite.setCellValueFactory(new PropertyValueFactory("DateTraite")); + + TabColMontant.setStyle( "-fx-alignment: CENTER;");TabColMontant.getStyleClass().add("Center"); + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + + TabColFacture.setStyle( "-fx-alignment: CENTER;");TabColFacture.getStyleClass().add("Center"); + TabColFacture.setCellValueFactory(new PropertyValueFactory("Facture")); + + TabColCodeClt.setStyle( "-fx-alignment: CENTER;");TabColCodeClt.getStyleClass().add("Center"); + TabColCodeClt.setCellValueFactory(new PropertyValueFactory("CodeClt")); + + TabColLocal.setStyle( "-fx-alignment: CENTER;");TabColLocal.getStyleClass().add("Center"); + TabColLocal.setCellValueFactory(new PropertyValueFactory("TypeClient")); + + TabColNomPrenom.setStyle( "-fx-alignment: CENTER;");TabColNomPrenom.getStyleClass().add("Center"); + TabColNomPrenom.setCellValueFactory(new PropertyValueFactory("NomPrenom")); + + ArrayList ListLocale = new StockDB().getAllListLocal(); + ChoiceBoxLocal.getItems().addAll(ListLocale); + + ButtonSearchTraiteCltRetard.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SearchTraiteCltRetard(); + } + }); + + AnchorPaneTraiteCltRetard.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchTraiteCltRetard(); + } + } + }); + + ButtonPrintTraiteCltRetard.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + ImprimerTraiteCltRetard(); + } + }); + + GestionSearchTraiteCltRetard(); + } + + + private void ImprimerTraiteCltRetard() + { + ProgressBarTraiteClt.setVisible(true); + + ButtonPrintTraiteCltRetard.setDisable(true); + + ThreadPrintTraiteCltRetard = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateDebut = ""; + if(DatePickeDebut.getValue() != null){ + DateDebut = DatePickeDebut.getValue().toString(); + } + + ListPrintTraiteCltRetards = new TraiteCltDB().SearchTraiteCltRetard(0, 0, DateDebut, TextFieldIdFacture.getText(), (String) ChoiceBoxLocal.getValue(), TextFieldCodeClt.getText(), TextFieldCINClt.getText(), TextFieldNomClt.getText(), true); + + return null; + } + }; + } + }; + + ThreadPrintTraiteCltRetard.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + + int SizeListeTraiteCltGestion = ListPrintTraiteCltRetards.size(); + int total = SizeListeTraiteCltGestion / 16 + 1 ; + int page = 0; + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + + jobPrint.getJobSettings().setPageRanges(new PageRange(1, total)); + + if (jobPrint.showPrintDialog(null)) + { + Printer printer = jobPrint.getPrinter(); + PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.LANDSCAPE, Printer.MarginType.DEFAULT); + + for (int i=0; i listTemp = FXCollections.observableArrayList(); + + for (int j=i; (j<(i+16)) && (j(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateDebut = ""; + if(DatePickeDebut.getValue() != null){ + DateDebut = DatePickeDebut.getValue().toString(); + } + + ObservableList ListTraiteCltRetards = new TraiteCltDB().SearchTraiteCltRetard( + position, + nbrligne, + DateDebut, + TextFieldIdFacture.getText(), + (String) ChoiceBoxLocal.getValue(), + TextFieldCodeClt.getText(), + TextFieldCINClt.getText(), + TextFieldNomClt.getText(), + false); + + TableViewTraiteCltRetard.setItems(ListTraiteCltRetards); + + totalcount = new TraiteCltDB().nbrTraiteCltRetard(DateDebut, + TextFieldIdFacture.getText(), + (String) ChoiceBoxLocal.getValue(), + TextFieldCodeClt.getText(), + TextFieldCINClt.getText(), + TextFieldNomClt.getText()); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchTraiteCltRetard.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarTraiteClt.setVisible(false); + ButtonSearchTraiteCltRetard.setDisable(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchTraiteCltRetard.start(); + } + + + private void NextLastSearchTraiteCltRetard(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarTraiteClt.setVisible(true); + + ButtonSearchTraiteCltRetard.setDisable(true); + + ThreadSearchTraiteCltRetard = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateDebut = ""; + if(DatePickeDebut.getValue() != null){ + DateDebut = DatePickeDebut.getValue().toString(); + } + + ObservableList ListTraiteCltRetards = new TraiteCltDB().SearchTraiteCltRetard(ParmPosition, + ParamNbrligne, + DateDebut, + TextFieldIdFacture.getText(), + (String) ChoiceBoxLocal.getValue(), + TextFieldCodeClt.getText(), + TextFieldCINClt.getText(), + TextFieldNomClt.getText(), + false ); + + TableViewTraiteCltRetard.setItems(ListTraiteCltRetards); + + return null; + } + }; + } + }; + + ThreadSearchTraiteCltRetard.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarTraiteClt.setVisible(false); + ButtonSearchTraiteCltRetard.setDisable(false); + } + }); + ThreadSearchTraiteCltRetard.start(); + } + + private void GestionSearchTraiteCltRetard() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchTraiteCltRetard(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchTraiteCltRetard(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchTraiteCltRetard(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } +} diff --git a/src/main/java/Controllers/Traitement/Adaptateur.java b/src/main/java/Controllers/Traitement/Adaptateur.java new file mode 100644 index 0000000..ece5a5c --- /dev/null +++ b/src/main/java/Controllers/Traitement/Adaptateur.java @@ -0,0 +1,375 @@ +/* + * 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 Controllers.Traitement; + + +import com.ibm.icu.text.RuleBasedNumberFormat; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.regex.Pattern; + +/** + * @author Maher Ben Tili + */ +public class Adaptateur { + + public static String addSlashes(String s) { + s = s.replaceAll("\\\\", "\\\\\\\\"); + s = s.replaceAll("\\n", "\\\\n"); + s = s.replaceAll("\\r", "\\\\r"); + s = s.replaceAll("\\00", "\\\\0"); + s = s.replaceAll("'", "\\\\'"); + return s; + } + + //yyyy/MM/dd HH:mm:ss + //yyyy + public static String getDefaultCurrentDate(String Format){ + DateTimeFormatter dtf = DateTimeFormatter.ofPattern(Format); + LocalDateTime now = LocalDateTime.now(); + return dtf.format(now); + } + + public static String NormalDateFormat(LocalDate date){ + if(date != null){ + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); + return formatter.format(date); // 23/06/2015 + }else{ + return null; + } + } + + public static String DatabaseDateLocalDate(LocalDate date){ + if(date != null){ + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + return formatter.format(date); // 2015-06-23 + }else{ + return null; + } + } + + + + + public static LocalDate StringToLocalDate(String date){ + + // date = "2016-08-16" + if(date != null){ + LocalDate localDate = LocalDate.parse(date); + return localDate; + }else{ + return null; + } + } + + //2003-01-30 => 30/01/2003 + public static String NormalDateFormat(String date){ + if(date != null){ + String jour= date.substring(8, 10); + String mois=date.substring(5, 7); + String annee=date.substring(0, 4); + String dateconf = jour+"/"+mois+"/"+annee; + return dateconf; + }else{ + return null; + } + } + + + //2003-01-30 10:30:22 => 30/01/2003 10:30 + public static String NormalDateTimeFormat(String date){ + if(date != null){ + String jour= date.substring(8, 10); + String mois=date.substring(5, 7); + String annee=date.substring(0, 4); + String heur = date.substring(11, 13); + String minute = date.substring(14, 16); + String dateconf = jour+"/"+mois+"/"+annee+" "+heur+":"+minute; + return dateconf; + }else{ + return null; + } + } + + + public static String DatabaseDateFormat(String date){ + // 23/06/2015 + String jour= date.substring(0, 2); + String mois=date.substring(3, 5); + String annee=date.substring(6, 10); + String dateconf = annee+"-"+mois+"-"+jour; + return dateconf; + } + + + + public static float StringToFloat(String ch){ + float reel = 0; + if(!ch.isEmpty()){ + try{ + reel =Float.parseFloat(ch.replace(',','.')); + } + catch(NumberFormatException nfe){ + reel = 0 ; + } + } + return reel ; + } + + + // 14.0 => 14 + public static String StringDeleZero(String ch){ + try{ + DecimalFormat df = new DecimalFormat("#.###"); + if(ch.isEmpty()) + return ch ; + else{ + double d = Double.valueOf(ch.replace(',','.')); + return df.format(d); + } + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+ch+"\n Method: Adaptateur.StringDeleZero \n"+nfe.getMessage()+" \n"); + return ch ; + } + catch(IllegalArgumentException string){ + System.out.println("erreur Value: "+ch+"\n Method: Adaptateur.StringDeleZero \n"+string.getMessage()+" /n"); + return ch ; + } + } + + //2100.25 ===> 2 100,25 + public static String StringToStringEspace(String ch) + { + if(!new contro().isStringNull(ch)){ + float f = StringToFloat(ch); + try{ + DecimalFormat Formatter = new DecimalFormat("##,###.## "); + return Formatter.format(f); + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+f+"\n Method: Adaptateur.StringToStringEspace \n"+nfe.getMessage()+" \n"); + return String.valueOf(f) ; + } + } + return "0"; + } + + //2100.25 ===> 2 100,25 DT + public static String StringToStringEspaceCurrency(String ch){ + float f = StringToFloat(ch); + try{ + DecimalFormat Formatter = new DecimalFormat("##,###.## "); + return Formatter.format(f)+" "+ParametreSystem.CurrencySign; + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+f+"\n Method: Adaptateur.StringToStringEspaceCurrency \n"+nfe.getMessage()+" \n"); + return String.valueOf(f) ; + } + } + + + public static String floatDeleZero(float f) + { + try{ + DecimalFormat df = new DecimalFormat("#.###"); + return df.format(f); + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+f+"\n Method: Adaptateur.floatDeleZero \n"+nfe.getMessage()+" \n"); + return String.valueOf(f) ; + } + } + + + //5.654201458 => 5.654 5.654971458 => 5.655 + public static String ArrondStringToString(String ch){ + try{ + DecimalFormat df = new DecimalFormat("0.000"); + if(ch.isEmpty()) + return "0"; + else{ + df.setMaximumFractionDigits(3); + + double d = Double.valueOf(ch.replace(',','.')); + String x = df.format(d).replaceAll(",000",""); + + if(d==0) + return "0"; + else + return x; + } + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+ch+"\n Method: Adaptateur.ArrondStringToString \n"+nfe.getMessage()+" \n"); + return ch ; + } + catch(IllegalArgumentException string){ + System.out.println("erreur Value: "+ch+"\n Method: Adaptateur.ArrondStringToString \n"+string.getMessage()+" \n"); + return ch ; + } + } + + public static float ArrondStringToFloat(String ch){ + try{ + if(ch.isEmpty()) + return 0; + else{ + DecimalFormat df = new DecimalFormat("0.000"); + df.setMaximumFractionDigits(3); + double d = Double.valueOf(ch.replace(',','.')); + String x = df.format(d); + return StringToFloat(x); + } + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+ch+"\n Method: Adaptateur.ArrondStringToFloat \n"+nfe.getMessage()+" \n"); + return 0 ; + } + catch(IllegalArgumentException string){ + System.out.println("erreur Value: "+ch+"\n Method: Adaptateur.ArrondStringToFloat \n"+string.getMessage()+" \n"); + return 0 ; + } + } + + + + public static float ArrondFloatToFloat(float f){ + DecimalFormat df = new DecimalFormat("0.000"); + df.setMaximumFractionDigits(3); + String ch = df.format(f); + try{ + return Float.parseFloat(ch.replace(',','.')); + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+ch+"\n Method: Adaptateur.ArrondFloatToFloat \n"+nfe.getMessage()+" \n"); + return 0 ; + } + } + + + //5.654201458 => 5.654 + public static String ArrondFloatToStringOrigin(float f){ + try{ + DecimalFormat df = new DecimalFormat("0.000"); + df.setMaximumFractionDigits(3); + if(f==0) + return "0"; + else{ + String ch = df.format(f).replace(",000", ""); + return ch.replace(",", "."); + } + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+f+"\n Method: Adaptateur.ArrondFloatToString \n"+nfe.getMessage()+" \n"); + return String.valueOf(f) ; + } + } + + //5.654201458 => 5,654 + public static String ArrondFloatToString(float f){ + try{ + DecimalFormat df = new DecimalFormat("0.000"); + df.setMaximumFractionDigits(3); + if(f==0) + return "0"; + else{ + String ch = df.format(f); + return ch.replace(",000", ""); + } + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+f+"\n Method: Adaptateur.ArrondFloatToString \n"+nfe.getMessage()+" \n"); + return String.valueOf(f) ; + } + + } + + //2100.25 ===> 2 100,25 DT + public static String FloatToStringEspaceCurrency(float f){ + try{ + DecimalFormat Formatter = new DecimalFormat("##,###.## "); + return Formatter.format(f)+" "+ParametreSystem.CurrencySign; + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+f+"\n Method: Adaptateur.ArrondFloatToString \n"+nfe.getMessage()+" \n"); + return String.valueOf(f) ; + } + } + + //2100.25 ===> 2 100,25 + public static String FloatToStringEspace(float f){ + try{ + DecimalFormat Formatter = new DecimalFormat("##,###.## "); + return Formatter.format(f); + } + catch(NumberFormatException nfe){ + System.out.println("erreur Value: "+f+"\n Method: Adaptateur.ArrondFloatToString \n"+nfe.getMessage()+" \n"); + return String.valueOf(f) ; + } + } + + + + + //Ex 100.25 ===> 100 + public static Integer Diviseur(float value){ + + String f1Str = Float.toString((float) value); + int Pos = f1Str.indexOf('.'); + if(Pos>-1){ + f1Str = f1Str.substring(0, Pos); + } + Integer div = Integer.parseInt(f1Str); + return div; + } + + //Ex 15.5 ==> 0.5 + public static float Modulo(float value){ + DecimalFormat df = new DecimalFormat("########.000"); + String str = df.format(value); + + float mode = 0; + + if(str.indexOf(',')>-1){ + int posisition =str.indexOf(','); + String str1 = "0"+str.substring(posisition, str.length()); + mode = Float.parseFloat(str1.replace(',', '.')); + } + return mode; + } + + + public static String ChiffreToLettre(BigDecimal num) + { + DecimalFormat DFORMAT = new DecimalFormat("###0.00"); + RuleBasedNumberFormat FORMATTER = new RuleBasedNumberFormat(RuleBasedNumberFormat.SPELLOUT); + + String[] s = DFORMAT.format(num).split(Pattern.quote(String.valueOf(DFORMAT.getDecimalFormatSymbols().getDecimalSeparator()))); + + BigInteger intPart = new BigInteger(s[0]); + BigInteger decPart = new BigInteger(s[1]); + + if ( s[1].equals("00") ) { + return FORMATTER.format(intPart)+ " "+ParametreSystem.CurrencyName; + } + else { + return FORMATTER.format(intPart) + + " " + + ParametreSystem.CurrencyName + + (intPart.intValue()>1?"s":"") + + " et " + + FORMATTER.format(decPart) + + " " + ParametreSystem.CurrencyThousandth + + (decPart.intValue()>1?"s":""); + } + } + +} diff --git a/src/main/java/Controllers/Traitement/MyWindow.java b/src/main/java/Controllers/Traitement/MyWindow.java new file mode 100644 index 0000000..8100f3d --- /dev/null +++ b/src/main/java/Controllers/Traitement/MyWindow.java @@ -0,0 +1,117 @@ +/* + * 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 Controllers.Traitement; + + +import Controllers.PrincipalController; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.fxml.FXMLLoader; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; +import javafx.stage.Stage; + +/** + * + * @author Maher + */ +public class MyWindow { + + public static Stage myStage; + + public static Parent myParent ; + + public static AnchorPane anchorpane = new AnchorPane(); + + public static Node node ; + + public static Number PrincipalContentWidth; + + public static Number PrincipalContentHeight; + + public Object[] ArrayObjectDataSave = new Object[10]; + + public static void ShwoWindows(double Height,double Width){ + + anchorpane.setVisible(true); + anchorpane.setStyle("-fx-background-color: rgba(0,0,0,0.6);"); + anchorpane.setPrefHeight(Height); + anchorpane.setPrefWidth(Width); + + Group group = new Group(); + group.getChildren().add(node); + + + StackPane Sp = new StackPane(); + + MyWindow.myStage.setWidth(Width); + MyWindow.myStage.setHeight(Height); + + Stage stage = MyWindow.myStage; + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(anchorpane); + Sp.getChildren().add(group); + + Scene scene = new Scene(Sp); + + stage.setScene(scene); + stage.show(); + } + + + public static void ClearWindows(){ + MyWindow.node.setVisible(false); + MyWindow.anchorpane.setVisible(false); + + } + + + public void Refresh(Parent parent, Integer number_titled_Pane){ + + try { + + FXMLLoader fxmlPrincipal= new FXMLLoader(getClass().getResource("/Views/Principal.fxml")); + MyWindow.myParent = (Parent) fxmlPrincipal.load(); + PrincipalController dc = fxmlPrincipal.getController(); + dc.window.getChildren().add(parent); + + dc.Content.setPrefSize((double) PrincipalContentWidth, (double) PrincipalContentHeight); + + dc.DefaultSelectedTitledPane(number_titled_Pane); + + Scene scene = new Scene(MyWindow.myParent); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } catch (IOException ex) { + Logger.getLogger(MyWindow.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public static void setMyStage(Stage myStage) { + MyWindow.myStage = myStage; + } + + public static void setMyParent(Parent myParent) { + MyWindow.myParent = myParent; + } + + + + + public static void NewMyStage() { + myStage = new Stage(); + } + + +} diff --git a/src/main/java/Controllers/Traitement/ParametreSystem.java b/src/main/java/Controllers/Traitement/ParametreSystem.java new file mode 100644 index 0000000..51a5804 --- /dev/null +++ b/src/main/java/Controllers/Traitement/ParametreSystem.java @@ -0,0 +1,156 @@ +/* + * 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 Controllers.Traitement; + +import java.io.File; +import java.io.IOException; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + + +/** + * @author Maher + */ +public class ParametreSystem +{ + public static String JdbcUrl ; + public static String JdbcDB ; + public static String JdbcUser ; + public static String JdbcPassword ; + + public static String CompanyName ; + public static String CompanyPlace ; + public static String CompanyAddress ; + public static String CompanySIREN ; //Système d’Identification du Répertoire des Entreprises + public static String CompanyMF ; //Matricule Fiscale + public static String CompanyIF ; //Identité Fiscale + public static String CompanyTele ; + public static String CompanyFax ; + public static String CompanyMail ; + public static String CompanySite ; + + public static String NomLocalPC ; + public static String Timbre ; + + public static String CurrencySign ; + public static String CurrencyName ; + public static String CurrencyThousandth ; + + public static String Bank ; + public static String RIP ; + public static String RIB ; + + public void SetParametre() + { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + try { + // optional, but recommended + // process XML securely, avoid attacks like XML External Entities (XXE) + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + + // parse XML file + DocumentBuilder db = dbf.newDocumentBuilder(); + + //PowerERP\conf\parametre.xml + Document doc = db.parse(new File("./conf/parametre.xml")); + + doc.getDocumentElement().normalize(); + + Element elementJDBC = (Element) doc.getElementsByTagName("JDBC").item(0); + + String jdbc_url = elementJDBC.getElementsByTagName("Url").item(0).getTextContent(); + ParametreSystem.JdbcUrl = jdbc_url; + + String jdbc_db = elementJDBC.getElementsByTagName("DataBase").item(0).getTextContent(); + ParametreSystem.JdbcDB = jdbc_db; + + String jdbc_user = elementJDBC.getElementsByTagName("User").item(0).getTextContent(); + ParametreSystem.JdbcUser = jdbc_user; + + String jdbc_password = elementJDBC.getElementsByTagName("Password").item(0).getTextContent(); + ParametreSystem.JdbcPassword = jdbc_password; + + /****************************************/ + + Element elementCompany = (Element) doc.getElementsByTagName("Company").item(0); + + String company_name = elementCompany.getElementsByTagName("Name").item(0).getTextContent(); + ParametreSystem.CompanyName = company_name; + + String company_place = elementCompany.getElementsByTagName("Place").item(0).getTextContent(); + ParametreSystem.CompanyPlace = company_place; + + String company_address = elementCompany.getElementsByTagName("Address").item(0).getTextContent(); + ParametreSystem.CompanyAddress = company_address; + + String companySIREN = elementCompany.getElementsByTagName("SIREN").item(0).getTextContent(); + ParametreSystem.CompanySIREN = companySIREN; + + String companyMF = elementCompany.getElementsByTagName("MF").item(0).getTextContent(); + ParametreSystem.CompanyMF =companyMF; + + String companyIF = elementCompany.getElementsByTagName("IF").item(0).getTextContent(); + ParametreSystem.CompanyIF = companyIF; + + String companyTele = elementCompany.getElementsByTagName("Tele").item(0).getTextContent(); + ParametreSystem.CompanyTele = companyTele; + + String companyFax = elementCompany.getElementsByTagName("Fax").item(0).getTextContent(); + ParametreSystem.CompanyFax = companyFax; + + String companyMail = elementCompany.getElementsByTagName("Mail").item(0).getTextContent(); + ParametreSystem.CompanyMail = companyMail; + + String companySite = elementCompany.getElementsByTagName("Site").item(0).getTextContent(); + ParametreSystem.CompanySite = companySite; + + /******************************/ + + Element elementNomLocalPC = (Element) doc.getElementsByTagName("NomLocalPC").item(0); + ParametreSystem.NomLocalPC = elementNomLocalPC.getTextContent() ; + + Element elementTimbre = (Element) doc.getElementsByTagName("Timbre").item(0); + ParametreSystem.Timbre = elementTimbre.getTextContent() ; + + + /********************************/ + + Element elementCurrency = (Element) doc.getElementsByTagName("Currency").item(0); + + String currency_sign = elementCurrency.getElementsByTagName("Sign").item(0).getTextContent(); + ParametreSystem.CurrencySign = currency_sign; + + String currency_name = elementCurrency.getElementsByTagName("Name").item(0).getTextContent(); + ParametreSystem.CurrencyName = currency_name; + + String currency_thousandth = elementCurrency.getElementsByTagName("Thousandth").item(0).getTextContent(); + ParametreSystem.CurrencyThousandth = currency_thousandth; + + + /*************************************/ + + Element elementBanque = (Element) doc.getElementsByTagName("Banque").item(0); + + String bank = elementBanque.getElementsByTagName("Bank").item(0).getTextContent(); + ParametreSystem.Bank = bank; + + String rip = elementBanque.getElementsByTagName("RIP").item(0).getTextContent(); + ParametreSystem.RIP = rip; + + String rib = elementBanque.getElementsByTagName("RIB").item(0).getTextContent(); + ParametreSystem.RIB = rib; + } + catch (ParserConfigurationException | SAXException | IOException e) { + System.out.println("error Controllers\\Traitement\\ParametreSystem.java/SetParametre "+e.getMessage()); + System.out.println(e.getMessage()); + } + } +} diff --git a/src/main/java/Controllers/Traitement/TotalHeightTableColumn.java b/src/main/java/Controllers/Traitement/TotalHeightTableColumn.java new file mode 100644 index 0000000..134c687 --- /dev/null +++ b/src/main/java/Controllers/Traitement/TotalHeightTableColumn.java @@ -0,0 +1,72 @@ +package Controllers.Traitement; + +import javafx.collections.ObservableList; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * @author Maher Ben Tili + */ +public class TotalHeightTableColumn { + + public TableView tableView = new TableView<>(); + + public float columnWidth; + + public TotalHeightTableColumn(float colwidth) + { + columnWidth = colwidth; + + tableView.setEditable(true); + } + + public float getTotalHeight(ObservableList data) + { + float total = 0; + + TableColumn Col = new TableColumn("First Name"); + + Col.setMinWidth(columnWidth); + + Col.setCellValueFactory(new PropertyValueFactory("firstcolumn")); + + Col.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + + if (item == null) { + super.setText(null); + super.setGraphic(null); + } else { + Text text = new Text(item); + text.wrappingWidthProperty().bind(super.widthProperty()); + super.setGraphic(text); + + //Person perss = ((Person)getTableRow().getItem()); + + /*;System.out.println(perss.getFirstName()); + System.out.println(item); + System.out.println(text.getLayoutBounds().getHeight()); + System.out.println("===============");*/ + + } + } + }; + return cell; + } + }); + + tableView.setItems(data); + tableView.getColumns().addAll(Col); + + return total; + } + +} diff --git a/src/main/java/Controllers/Traitement/contro.java b/src/main/java/Controllers/Traitement/contro.java new file mode 100644 index 0000000..6c17845 --- /dev/null +++ b/src/main/java/Controllers/Traitement/contro.java @@ -0,0 +1,344 @@ +package Controllers.Traitement; + +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.ComboBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.text.Text; + + + +/** + * @author Maher Ben Tili + */ +public class contro { + + + public boolean isStringNull(String str){ + if(str == null){ + return true; + }else if(str.length() == 0){ + return true; + }else if(str.equals("")){ + return true; + }else if(str.isEmpty()){ + return true; + }else{ + return false; + } + } + + public boolean isNumeric(String str){ + if(str == null || str.isEmpty()){ + return false; + } + else{ + try{ + double d = Double.parseDouble(str); + } + catch(NumberFormatException nfe){ + return true; + + } + return false; + } + } + + public boolean isFloat(String str){ + if(str == null || str.isEmpty()){ + return false; + } + else{ + try{ + Float f = Float.parseFloat(str.replace(',','.')); + } + catch(NumberFormatException nfe){ + return true; + } + return false; + } + } + + public boolean isNumericNotnull(String str){ + if( (str == null) || (str.isEmpty()) || (str.length()==0) ){ + return true; + }else{ + try{ + double d = Double.parseDouble(str); + return false; + } + catch(NumberFormatException nfe){ + return true; + } + } + + } + + public boolean isFloatNotnull(String str){ + try{ + Float f = Float.parseFloat(str.replace(',','.')); + return false; + } + catch(NumberFormatException nfe){ + return true; + } + } + + + public boolean ContrNullValue(ComboBox Champ , Text text){ + if(Champ.getValue()==null){ + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ est vide"); + return false ; + } + else{ + text.setText(""); + //Champ.setStyle("-fx-border-color: transparent;"); + Champ.setStyle(null); + return true ; + } + } + + public boolean ContrNullValue(ChoiceBox Champ , Text text){ + if(Champ.getValue()==null){ + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ est vide"); + return false ; + } + else{ + text.setText(""); + //Champ.setStyle("-fx-border-color: transparent;"); + Champ.setStyle(null); + return true ; + } + } + + public boolean ContrNullDatePicker(DatePicker Champ , Text text){ + if(Champ.getValue()==null){ + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Date est vide"); + return false ; + } + else{ + text.setText(""); + //Champ.setStyle("-fx-border-color: transparent;"); + Champ.setStyle(null); + return true ; + } + } + + public boolean ContrNull(TextField Champ , Text text) + { + if(Champ.getText() == null || Champ.getText().isEmpty() || Champ.getText().length()== 0){ + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ est vide"); + return false ; + } + else{ + text.setText(""); + //Champ.setStyle("-fx-border-color: transparent;"); + Champ.setStyle(null); + return true ; + } + } + + public boolean ContrNull(TextArea Champ , Text text){ + if(Champ.getText() == null || Champ.getText().isEmpty() || Champ.getText().length()== 0){ + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ est vide"); + return false ; + } + else{ + text.setText(""); + //Champ.setStyle("-fx-border-color: transparent;"); + Champ.setStyle(null); + return true ; + } + } + + public boolean ContrNumerique(TextField Champ , Text text){ + if(this.isNumeric(Champ.getText())){ + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ doit être numéro"); + return false ; + } + else{ + text.setText(""); + //Champ.setStyle("-fx-border-color: transparent;"); + Champ.setStyle(null); + return true ; + } + } + + public boolean ContrNumeriqueNotnull(TextField Champ , Text text){ + if(this.isNumericNotnull(Champ.getText())){ + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ doit être numéro"); + return false ; + } + else{ + text.setText(""); + //Champ.setStyle("-fx-border-color: transparent;"); + Champ.setStyle(null); + return true ; + } + } + + public boolean ContrReel(TextField Champ , Text text){ + if(this.isFloat(Champ.getText().replace(',','.'))){ + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ doit être reel"); + return false ; + } + else{ + //Champ.setStyle("-fx-border-color:transparent;"); + Champ.setStyle(null); + text.setText(""); + return true ; + } + } + + public boolean ContrReelNotNull(TextField Champ , Text text){ + if(this.isFloatNotnull(Champ.getText().replace(',','.'))){ + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ doit être reel"); + return false ; + } + else{ + Champ.setStyle(null); + //Champ.setStyle("-fx-border-color:transparent;"); + text.setText(""); + return true ; + } + } + + + public boolean ContrHour(TextField Champ , Text text) + { + String Hour = Champ.getText(); + + boolean Result = true; + + if(Hour != null && Hour.length()==5){ + Integer HourLength = Hour.length(); + + if(HourLength!= 5){ + Result = false; + }else if(!Hour.substring(2,3).equals(":")){ + Result = false; + } + + + if(!this.isNumeric(Hour.substring(0, 2))){ + double d = Double.parseDouble(Hour.substring(0, 2)); + if(d<0 || d>24){ + Result = false; + } + }else{ + Result = false; + } + + if(!this.isNumeric(Hour.substring(3, 5))){ + double d = Double.parseDouble(Hour.substring(3, 5)); + if(d<0 || d>60){ + Result = false; + } + }else{ + Result = false; + } + }else{ + Result = false; + } + + if(Result == false){ + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ doit être format Heur"); + }else{ + text.setText(""); + Champ.setStyle(null); + } + + return Result ; + } + + // champs ne doit pas être null et minumum n Caractaire + public boolean ContrMinCaractaireNotnull(TextField Champ , Text text, int nbrCaractaire) + { + boolean Result = ContrNull( Champ, text); + + if( Result ) + { + Result = ContrMinCaractaire( Champ , text, nbrCaractaire); + } + + return Result ; + } + + // champs peut être null ou minumum n Caractaire + public boolean ContrMinCaractaire(TextField Champ , Text text, int nbrCaractaire) + { + if(Champ.getText().length() < nbrCaractaire) + { + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ doit dépasser "+nbrCaractaire+" caractères"); + return false; + }else{ + text.setText(""); + Champ.setStyle(null); + return true ; + } + } + + + // champs ne doit pas être null et égale a une chaine de caractaire + public boolean ContrEqualsNotnull(TextField Champ , Text text, String equals) + { + boolean Result = ContrNull( Champ, text); + + if( Result ) + { + Result = ContrEquals( Champ , text, equals); + } + + return Result ; + } + + + // champs peut être null ou égale a une chaine de caractaire + public boolean ContrEquals(TextField Champ , Text text, String equals) + { + if(!Champ.getText().equals(equals)) + { + Champ.setStyle("-fx-border-color:#f20606;"); + text.setText("Champ n'est pas égale"); + return false; + }else{ + text.setText(""); + Champ.setStyle(null); + return true ; + } + } + + // champs peut être null ou il doit être un email + public boolean ContrEmail(TextField Champ , Text text) + { + boolean result = true; + if(isStringNull(Champ.getText())){ + result = true; + } + else{ + if(Champ.getText().indexOf("@")< 0){ + Champ.setStyle("-fx-border-color: #f20606;"); + text.setText("invalide mail"); + result = false ; + } + } + if(result){ + text.setText(""); + Champ.setStyle(null); + } + return result; + } + +} diff --git a/src/main/java/Controllers/User/AddUserController.java b/src/main/java/Controllers/User/AddUserController.java new file mode 100644 index 0000000..c30ca13 --- /dev/null +++ b/src/main/java/Controllers/User/AddUserController.java @@ -0,0 +1,46 @@ +/* + * 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 Controllers.User; + +import Controllers.Dialog.ShowDialog; +import Models.connexion; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.Button; + + + +/** + * FXML Controller class + * + * @author Maher + */ +public class AddUserController{ + + + @FXML + private Button ajouter; + + + + @FXML + private void handleButtonAction(ActionEvent event){ + + + connexion cnx = new connexion(); + if(cnx.ouverture()){ + System.out.println("connecter"); + + } + else{ + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + + } + + } + +} diff --git a/src/main/java/Controllers/User/GestionUtilisateurController.java b/src/main/java/Controllers/User/GestionUtilisateurController.java new file mode 100644 index 0000000..3505b5f --- /dev/null +++ b/src/main/java/Controllers/User/GestionUtilisateurController.java @@ -0,0 +1,99 @@ +/* + * 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 Controllers.User; + +import Models.User.ListUserDB; +import Models.User.ListUsers; + +import java.net.URL; +import java.util.ResourceBundle; + + +import javafx.collections.ObservableList; + +import javafx.event.EventHandler; +import javafx.fxml.FXML; + +import javafx.fxml.Initializable; + +import javafx.scene.control.Label; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.KeyEvent; + + +/** + * FXML Controller class + * + * @author Maher + */ +public class GestionUtilisateurController implements Initializable { + + + + @FXML + private TableView TableViewListUsers; + + @FXML + private TableColumn id; + @FXML + private TableColumn type; + @FXML + private TableColumn login; + @FXML + private TableColumn nom; + @FXML + private TableColumn prenom; + @FXML + private TableColumn tele; + + @FXML + private Label count ; + + @FXML + private TextField rechercher; + + + + + ListUserDB DataListe = new ListUserDB(); + + + ObservableList data = DataListe.getdata(); + + + + private void RechercerAction(){ + + rechercher.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler() { + @Override + public void handle(KeyEvent event) { + ObservableList data = DataListe.rechercheData(rechercher.getText()); + TableViewListUsers.setItems(data); + + }}); + + + } + + @Override + public void initialize(URL url, ResourceBundle rb){ + + id.setCellValueFactory(new PropertyValueFactory("id")); + type.setCellValueFactory(new PropertyValueFactory("type")); + login.setCellValueFactory(new PropertyValueFactory("login")); + nom.setCellValueFactory(new PropertyValueFactory("nom")); + prenom.setCellValueFactory(new PropertyValueFactory("prenom")); + tele.setCellValueFactory(new PropertyValueFactory("tele")); + TableViewListUsers.setItems(data); + count.setText(DataListe.nbrUsers()); + + this.RechercerAction(); + } + +} diff --git a/src/main/java/Controllers/User/ProfileController.java b/src/main/java/Controllers/User/ProfileController.java new file mode 100644 index 0000000..fa66335 --- /dev/null +++ b/src/main/java/Controllers/User/ProfileController.java @@ -0,0 +1,392 @@ +/* + * 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 Controllers.User; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.contro; +import Models.User.Authentification; +import Models.User.Profile; +import Models.User.ProfileDB; +import Models.User.User; +import Models.connexion; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.Date; +import java.util.ResourceBundle; +import javafx.animation.FadeTransition; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.PasswordField; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Font; +import javafx.scene.text.Text; +import javafx.util.Duration; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class ProfileController implements Initializable { + + /** + * Initializes the controller class. + */ + @FXML public Text Monprofilenomprenom ; + @FXML public Text Monprofilenaissance ; + @FXML public Text ModifierCompteTitre ; + @FXML public Text Monprofiletele ; + @FXML public Text Monprofileadresse ; + @FXML public Text Monprofilesexe ; + @FXML public Text Monprofilemail ; + @FXML public Text Monprofilepays ; + @FXML public Text Monprofiletypecompte ; + @FXML public Text Monprofilequestion ; + @FXML public Text Monprofilereponse ; + + @FXML public AnchorPane AnchorPaneModierProduit ; + @FXML public TextField Modiferprofileprenom ; + @FXML public TextField Modiferprofilenom; + @FXML public TextField Modiferprofiletele; + @FXML public TextField Modiferprofileadresse; + @FXML public TextField Modiferprofilemail; + @FXML public TextField Modiferprofilepay; + @FXML public DatePicker Modiferprofilenaissance; + @FXML public RadioButton Modiferprofilehomme ; + @FXML public RadioButton Modiferprofilefemme ; + @FXML public ToggleGroup groupesexe; + @FXML public GridPane Modiferprofilegridpane; + @FXML public Text erreurprenom ; + @FXML public Text erreurnom ; + @FXML public Text erreurtele ; + @FXML public Text erreuradresse ; + @FXML public Text erreurmail ; + @FXML public Text erreurpay ; + @FXML public Text erreurnaissance ; + + + + @FXML public AnchorPane AnchorPaneModiferPass ; + @FXML public PasswordField ModiferPassAncien ; + @FXML public PasswordField ModiferPassNouveau ; + @FXML public PasswordField ModiferPassRepeter ; + @FXML public TextField ModiferPassReponce ; + @FXML public ComboBox ModiferPassQuestion ; + @FXML public GridPane ModiferPassgridpane; + @FXML public Text erreurAncien ; + @FXML public Text erreurNouveau ; + @FXML public Text erreurRepeter ; + @FXML public Text erreurReponce ; + @FXML public Text erreurQuestion ; + + @FXML private Button ButtonSavePofile; + @FXML private Button ButtonSavePassword; + + connexion cnx = new connexion(); + ShowDialog SD =new ShowDialog(); + + Profile myprofile= new Profile(); + + ProfileDB profiledb = new ProfileDB(); + Date date = new Date(); + SimpleDateFormat dateformat = new SimpleDateFormat ("dd/MM/yyyy"); + contro clt = new contro(); + + @Override + public void initialize(URL url, ResourceBundle rb) { + + //myprofile.setIdprofile(User.idprofile); + Modiferprofilehomme.setUserData("1"); + Modiferprofilefemme.setUserData("0"); + + myprofile = profiledb.getpro(User.idprofile); + + + if (myprofile!= null){ + Monprofilenomprenom.setText(myprofile.getNom()+" "+myprofile.getPrenom()); + Monprofilenaissance.setText(Adaptateur.NormalDateFormat(myprofile.getNaissance())); + Monprofiletele.setText(Integer.toString(myprofile.getTele())); + Monprofileadresse.setText(myprofile.getAdresse()); + Monprofilesexe.setText(myprofile.getSexeString()); + Monprofilemail.setText(myprofile.getMail()); + Monprofilepays.setText(myprofile.getPays()); + Monprofiletypecompte.setText(myprofile.getAuthentification().getTypeCompte()) ; + Monprofilequestion.setText(myprofile.getAuthentification().getQuestionSecrete()) ; + Monprofilereponse.setText(myprofile.getAuthentification().getReponceQuestion()) ; + + Modiferprofileprenom.setText(myprofile.getPrenom()); + Modiferprofilenom.setText(myprofile.getNom()); + Modiferprofiletele.setText(Integer.toString(myprofile.getTele())); + Modiferprofileadresse.setText(myprofile.getAdresse()); + Modiferprofilemail.setText(myprofile.getMail()); + Modiferprofilepay.setText(myprofile.getPays()); + Modiferprofilenaissance.setValue(Adaptateur.StringToLocalDate(myprofile.getNaissance())); + if( "Homme".equals(myprofile.getSexeString())){ + Modiferprofilehomme.setSelected(true); + } + else{ + Modiferprofilefemme.setSelected(true); + } + + //Panel modifier mot de passe + ModiferPassQuestion.setPromptText(myprofile.getAuthentification().getQuestionSecrete()); + ModiferPassReponce.setText(myprofile.getAuthentification().getReponceQuestion()); + + + } + else{ + SD.ShowAletDialog(); + } + + ButtonSavePofile.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SavePofile(); + } + }); + + ButtonSavePassword.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + SavePassword(); + } + }); + + } + + private void SavePofile() + { + if( clt.ContrMinCaractaire(Modiferprofilenom, erreurnom, 3) && + clt.ContrMinCaractaireNotnull(Modiferprofileprenom, erreurprenom, 3) && + clt.ContrNumeriqueNotnull(Modiferprofiletele, erreurtele) && + clt.ContrMinCaractaireNotnull(Modiferprofileadresse, erreuradresse, 5) && + clt.ContrNullDatePicker(Modiferprofilenaissance, erreurnaissance) && + clt.ContrMinCaractaireNotnull(Modiferprofilepay, erreurpay, 3) + ) + { + myprofile.setNom(Modiferprofilenom.getText()); + myprofile.setPrenom(Modiferprofileprenom.getText()); + myprofile.setMail(Modiferprofilemail.getText()); + myprofile.setTele(Integer.parseInt(Modiferprofiletele.getText())); + myprofile.setAdresse(Modiferprofileadresse.getText()); + myprofile.setPays(Modiferprofilepay.getText()); + myprofile.setSexe(Integer.parseInt(groupesexe.getSelectedToggle().getUserData().toString())); + myprofile.setNaissance(Modiferprofilenaissance.getValue().toString()); + + //mettre a jour le profile + boolean result = profiledb.updateProfile(User.idprofile, myprofile); + + //cas d'écheque de connexion + if(!result){ + SD.ShowAletDialog(); + }else{ + FadeTransition ft = new FadeTransition(Duration.millis(400), Modiferprofilegridpane); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.play(); + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) { + ButtonSavePofile.setVisible(false); + Image success = new Image("/Public/icon/successfully.png"); + + ImageView iv1 = new ImageView(); + iv1.setImage(success); + + Text text= new Text(); + text.setText("la modification a été effectuée avec succès"); + text.setFont(Font.loadFont(getClass().getResourceAsStream("/Public/Fonts/Raleway-SemiBold.ttf"), 20)); + + StackPane stackpane = new StackPane(); + stackpane.setLayoutX(140); + stackpane.setLayoutY(140); + stackpane.setPrefHeight(200); + stackpane.setPrefWidth(200); + stackpane.getChildren().add(iv1); + stackpane.getChildren().add(text); + StackPane.setAlignment(text, Pos.BOTTOM_CENTER); + + AnchorPaneModierProduit.setLeftAnchor(stackpane, 83.0); + AnchorPaneModierProduit.setRightAnchor(stackpane, 83.0); + AnchorPaneModierProduit.setTopAnchor(stackpane,100.0); + AnchorPaneModierProduit.setBottomAnchor(stackpane,200.0); + AnchorPaneModierProduit.getChildren().add(stackpane); + + } + }); + } + } + } + + + private void SavePassword() + { + if( clt.ContrEqualsNotnull(ModiferPassAncien, erreurAncien, myprofile.getAuthentification().getPassword()) && + clt.ContrMinCaractaireNotnull(ModiferPassNouveau, erreurNouveau, 6) && + clt.ContrEqualsNotnull(ModiferPassRepeter, erreurRepeter, ModiferPassNouveau.getText()) && + clt.ContrNull(ModiferPassReponce, erreurReponce) + ) + { + Authentification authentification = myprofile.getAuthentification(); + authentification.setPassword(ModiferPassNouveau.getText()); + authentification.setQuestionSecrete((String) ModiferPassQuestion.getValue()); + authentification.setReponceQuestion(ModiferPassReponce.getText()); + + boolean result = profiledb.updateAuthentification(authentification.getIdAuthentification(), authentification); + + if(!result){ + SD.ShowAletDialog(); + } + else{ + //AnchorPaneModiferPass + FadeTransition ft = new FadeTransition(Duration.millis(400), ModiferPassgridpane); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.play(); + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) { + ButtonSavePassword.setVisible(false); + + Image success = new Image("/Public/icon/successfully.png"); + + ImageView iv1 = new ImageView(); + iv1.setImage(success); + + Text text= new Text(); + text.setText("la modification a été effectuée avec succès"); + text.setFont(Font.loadFont(getClass().getResourceAsStream("/Public/Fonts/Raleway-SemiBold.ttf"), 20)); + + StackPane stackpane = new StackPane(); + stackpane.setLayoutX(140); + stackpane.setLayoutY(140); + stackpane.setPrefHeight(200); + stackpane.setPrefWidth(200); + stackpane.getChildren().add(iv1); + stackpane.getChildren().add(text); + StackPane.setAlignment(text, Pos.BOTTOM_CENTER); + + AnchorPaneModiferPass.setLeftAnchor(stackpane, 83.0); + AnchorPaneModiferPass.setRightAnchor(stackpane, 83.0); + AnchorPaneModiferPass.setTopAnchor(stackpane,100.0); + AnchorPaneModiferPass.setBottomAnchor(stackpane,200.0); + AnchorPaneModiferPass.getChildren().add(stackpane); + + + } + }); + } + } + } + /*@FXML + private void UpdatePasswordButtonAction(ActionEvent event) { + + if(ModiferPassAncien.getText().equals(myprofile.getAuthentification().getPassword())){ + erreurAncien.setText(""); + ModiferPassAncien.setStyle("-fx-border-color: transparent;"); + + if(ModiferPassNouveau.getText().length()<6){ + erreurNouveau.setText("Mot de passe doit dépasser 6 caractère"); + ModiferPassNouveau.setStyle("-fx-border-color:#f20606;"); + } + else{ + erreurNouveau.setText(""); + ModiferPassNouveau.setStyle("-fx-border-color: transparent;"); + + if(ModiferPassNouveau.getText().equals(ModiferPassRepeter.getText())){ + ModiferPassRepeter.setStyle("-fx-border-color: transparent;"); + erreurRepeter.setText(""); + + if(ModiferPassReponce.getText().length()<3){ + ModiferPassReponce.setStyle("-fx-border-color: #f20606;"); + erreurReponce.setText("la réponse doit dépasser 2 caractère"); + } + else{ + ModiferPassReponce.setStyle("-fx-border-color: transparent;"); + erreurReponce.setText(""); + + + //update password + updateprofile.getAuthentification().setPassword(ModiferPassNouveau.getText()); + updateprofile.getAuthentification().setQuestionSecrete(ModiferPassQuestion.getValue().toString()); + updateprofile.getAuthentification().setReponceQuestion(ModiferPassReponce.getText()); + boolean result=profiledb.updatePassword(User.idprofile, updateprofile); + if(!result){ + SD.ShowAletDialog(); + } + else{ + //AnchorPaneModiferPass + FadeTransition ft = new FadeTransition(Duration.millis(400), ModiferPassgridpane); + ft.setFromValue(1.0); + ft.setToValue(0.0); + ft.play(); + ft.setOnFinished(new EventHandler() { + //message de succés + @Override + public void handle(ActionEvent event) { + Image success = new Image("/Public/icon/successfully.png"); + + ImageView iv1 = new ImageView(); + iv1.setImage(success); + + Text text= new Text(); + text.setText("la modification a été effectuée avec succès"); + text.setFont(Font.loadFont(getClass().getResourceAsStream("/Public/Fonts/Raleway-SemiBold.ttf"), 20)); + + StackPane stackpane = new StackPane(); + stackpane.setLayoutX(140); + stackpane.setLayoutY(140); + stackpane.setPrefHeight(200); + stackpane.setPrefWidth(200); + stackpane.getChildren().add(iv1); + stackpane.getChildren().add(text); + StackPane.setAlignment(text, Pos.BOTTOM_CENTER); + + AnchorPaneModiferPass.setLeftAnchor(stackpane, 83.0); + AnchorPaneModiferPass.setRightAnchor(stackpane, 83.0); + AnchorPaneModiferPass.setTopAnchor(stackpane,100.0); + AnchorPaneModiferPass.setBottomAnchor(stackpane,200.0); + AnchorPaneModiferPass.getChildren().add(stackpane); + + } + }); + } + + } + } + else{ + ModiferPassRepeter.setStyle("-fx-border-color:#f20606;"); + erreurRepeter.setText("Mot de passe incorrect"); + } + } + } + else{ + erreurAncien.setText("Password incorrect"); + ModiferPassAncien.setStyle("-fx-border-color:#f20606;"); + } + + }*/ + + + + + +} diff --git a/src/main/java/Controllers/VenteRapideClt/Step1CommandeCltController.java b/src/main/java/Controllers/VenteRapideClt/Step1CommandeCltController.java new file mode 100644 index 0000000..fafa710 --- /dev/null +++ b/src/main/java/Controllers/VenteRapideClt/Step1CommandeCltController.java @@ -0,0 +1,1111 @@ +/* + * 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 Controllers.VenteRapideClt; + +import Controllers.Client.ListeClient; +import Controllers.Client.ListeClientEntreprise; +import Controllers.Client.RechercherClientEntrepriseController; +import Controllers.Client.RechercherClientPersonneController; +import Controllers.CommandeClt.CommandeCltPasserController; +import Controllers.DevisClt.DevisImporterController; +import Controllers.Dialog.MessageControle; +import Models.Produit.ListeProduit; +import Controllers.Produit.RechercherProduitController; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.CommandeClt.CommandeClt; +import Models.DevisClt.Devis; +import Models.DevisClt.DevisCltListe; +import Models.DevisClt.DevisDB; +import Models.Produit.Produit; +import Models.Produit.ProduitDB; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TabPane; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * + * @author maher + */ +public class Step1CommandeCltController implements Initializable { + + @FXML private AnchorPane PaneStep1CommandeClt; + @FXML public Text TotalTVA ; + @FXML public Text Remise ; + @FXML public Text NetAPayer ; + @FXML public Text Timbre ; + @FXML public Text TotalHTNet ; + + + @FXML public Button Enregister ; + @FXML public Button ClientExisteDejat ; + @FXML public Button ClientDefault ; + @FXML public Button RechercheProduit ; + + @FXML public TextField Nom ; + @FXML public TextField Prenom ; + @FXML public TextArea Adresse ; + @FXML public TextField TELE1 ; + @FXML public TextField TELE2 ; + + @FXML public Text TextMatricule ; + @FXML public Text TextPrenom; + @FXML public Text TextSexe; + @FXML public Text TextDateNaissance; + + @FXML public Text TextCltExistCode; + @FXML public Text CltExistCode; + @FXML public Text CltExistNom; + @FXML public Text CltExistPrenom; + @FXML public Text CltExistAdresse; + @FXML public Text CltExistDateNaissance; + @FXML public Text CltExistTELE1; + @FXML public Text CltExistTELE2; + + @FXML public TabPane TabPaneCommande; + + @FXML public DatePicker DateNaisssance ; + + @FXML public ComboBox ModeReglement ; + + @FXML public TableView TableViewListeProduit ; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColDesignation; + @FXML public TableColumn TabColQuantite ; + @FXML public TableColumn TabColPrixHT; + @FXML public TableColumn TabColRemise; + @FXML public TableColumn TabColTotalHT; + @FXML public TableColumn TabColTVA; + @FXML public TableColumn TabColTotalTTC; + @FXML public TableColumn TabColAddAction ; + + @FXML private ToggleGroup ToggleGroupSexe; + @FXML private RadioButton SexeHomme; + @FXML private RadioButton SexeFemme; + + public Integer TypeClient = 2; // 0Personne 1Entreprise 2Passeger + Client client = new Client(); + ClientEntreprise CltEntreprise = new ClientEntreprise(); + ClientPassager CltPassager = new ClientPassager(); + + public String Mode; // Comptant Facilité + public String CodeDevis; + + public ObservableList data=FXCollections.observableArrayList(); + + CommandeClt commandeclt = new CommandeClt(); + Produit produit= new Produit(); + ProduitDB produitDB= new ProduitDB(); + + float netaPayer = 0; + float Remises = 0; + float totalTVA = 0; + float total_H_T_Net =0; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + TableViewListeProduit.setEditable(true); + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColReference.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColQuantite.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColRemise.setCellFactory(TextFieldTableCell.forTableColumn()); + + this.ReferenceMouseClick(); + this.QantiteMouseClick(); + this.RemiseMouseClick(); + + ModeReglement.setValue(Mode); + + TabColAddAction.setSortable(true); + TabColAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new Step1CommandeCltController.ButtonCell(); + } + }); + + + TableViewListeProduit.setItems(data); + CalculeListeProduit(); + + //Ajouter une ligne vide clors ce que en click sur la tableview + TableViewListeProduit.setOnMouseClicked(new EventHandler(){ + public void handle(MouseEvent event){ + int nbrligne = TableViewListeProduit.getItems().size() ; + if(nbrligne == 0){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + } + else{ + ListeProduit Liste = TableViewListeProduit.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + TableViewListeProduit.getSelectionModel().select(nbrligne); + } + } + } + }); + + ModeReglement.getSelectionModel().select("Comptant"); + } + + + @FXML + private void NextBonLivraisonCltButtonAction(ActionEvent event) throws IOException { + if(ControleObject()){ + this.SetObject(); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/Step2BonLivraisonClt.fxml")); + Parent NodeStep2BonLivraison = (Parent)fxmlLoader.load(); + + Step2BonLivraisonCltController Step2BonLivraisonClt = fxmlLoader.getController(); + + Step2BonLivraisonClt.ConvertCommandeToBonLivraision(commandeclt); + Step2BonLivraisonClt.SetDefaultTextFieldData(); + + PaneStep1CommandeClt.getChildren().clear(); + PaneStep1CommandeClt.getChildren().add(NodeStep2BonLivraison); + } + + } + + + @FXML + private void AddLigneButtonAction(ActionEvent event) throws IOException { + int nbrligne = TableViewListeProduit.getItems().size() ; + if(nbrligne == 0){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + } + else{ + ListeProduit Liste = TableViewListeProduit.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + TableViewListeProduit.getSelectionModel().select(nbrligne); + } + } + } + + + + public void SetDefaultSaveDataImport(Object[] ArrayObject){ + + if(ArrayObject[0] != null){ + this.data = (ObservableList) ArrayObject[0]; + this.CalculeListeProduit(); + this.TableViewListeProduit.setItems(data); + } + + + if( (ArrayObject[1] == null)){ + this.TypeClient = 2; + ArrayObject[1] = 2; + this.CltPassager = (ClientPassager) ArrayObject[4]; + if(this.CltPassager.getNom() != null){ + this.SetClientPassager(); + } + }else{ + this.TypeClient = (Integer) ArrayObject[1]; + if(this.TypeClient == 0){ + this.client = (Client) ArrayObject[2]; + if(this.client.getCodeclient() != null){ + this.SetClient(); + } + }else if(this.TypeClient == 1){ + this.CltEntreprise = (ClientEntreprise) ArrayObject[3]; + if(this.CltEntreprise.getCode() != null){ + this.SetClientEntre(); + } + }else if( (this.TypeClient == null) || (this.TypeClient == 2) ){ + this.CltPassager = (ClientPassager) ArrayObject[4]; + if(this.CltPassager.getNom() != null){ + this.SetClientPassager(); + } + } + } + + + + this.CodeDevis = (String) ArrayObject[5]; + + if(ArrayObject[6] != null){ + this.SetProduit( (Produit) ArrayObject[6] ); + this.TabPaneCommande.getSelectionModel().select(1); + } + + if(ArrayObject[7] != null){ + this.Mode = (String) ArrayObject[7]; + this.ModeReglement.setValue(this.Mode); + } + } + + + public Object[] getDefaultSaveDataImport(){ + Object[] ArrayObject = new Object[10]; + ArrayObject[0] = this.data; + ArrayObject[1] = this.TypeClient; + ArrayObject[2] = this.client ; + ArrayObject[3] = this.CltEntreprise; + + if( (this.TypeClient == null) || (this.TypeClient == 2) ){ + this.TypeClient = 2; + + RadioButton SelectedRadioSexe = (RadioButton) ToggleGroupSexe.getSelectedToggle(); + + this.CltPassager.setNom(this.Nom.getText()); + this.CltPassager.setPrenom(this.Prenom.getText()); + this.CltPassager.setAdresse(this.Adresse.getText()); + this.CltPassager.setSexeString(SelectedRadioSexe.getEllipsisString()); + this.CltPassager.setTelefixString(this.TELE1.getText()); + this.CltPassager.setTelemobileString(this.TELE2.getText()); + this.CltPassager.setNaissance(Adaptateur.DatabaseDateLocalDate(DateNaisssance.getValue())); + ArrayObject[4] = this.CltPassager; + } + + ArrayObject[5] = this.CodeDevis; + ArrayObject[7] = (String) this.ModeReglement.getValue(); + return ArrayObject; + } + + + private void SetClientPassager(){ + Nom.setText(this.CltPassager.getNom()); + Prenom.setText(this.CltPassager.getPrenom()); + Adresse.setText(this.CltPassager.getAdresse()); + DateNaisssance.setValue(Adaptateur.StringToLocalDate(this.CltPassager.getNaissance())); + TELE1.setText(this.CltPassager.getTelefixString()); + TELE2.setText(this.CltPassager.getTelemobileString()); + if(this.CltPassager.getSexe() == 0){ + SexeFemme.setSelected(true); + } + + ModeReglement.setDisable(true); + ModeReglement.getSelectionModel().select("Comptant"); + } + + + + + @FXML + private void RechercheProduitButtonAction(ActionEvent event) throws IOException { + + final RechercherProduitController rechercheproduit = new RechercherProduitController(true); + + rechercheproduit.ArrayObjectDataSave = this.getDefaultSaveDataImport(); + + rechercheproduit.Show(); + + rechercheproduit.TabColAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + // get Selected ItemButtonCell + rechercheproduit.ArrayObjectDataSave[6] = ((Produit)getTableRow().getItem()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/Step1CommandeClt.fxml")); + Parent ParentStep1CommandeClt = (Parent) fxmlLoader.load(); + + Step1CommandeCltController Step1CommandeClt = fxmlLoader.getController(); + + Step1CommandeClt.SetDefaultSaveDataImport(rechercheproduit.ArrayObjectDataSave); + + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(ParentStep1CommandeClt, 3); + } catch (Exception ex) { + System.out.println("Controllers.VenteRapideClt.RechercheProduitButtonAction \n"+ex.getMessage()); + } + + } + }); + } + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + } + + + @FXML + private void DevisCltImportButtonAction(ActionEvent event) throws IOException { + DevisImporterController DevisImporter = new DevisImporterController(); + DevisImporter.Show(); + + DevisImporter.TabColDetail.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(Boolean item, boolean empty) { + Button cellButton = new Button(); + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed + @Override + public void handle(ActionEvent t) { + try { + DevisCltListe current = ((DevisCltListe)getTableRow().getItem()); + Devis devis = new Devis(); + DevisDB devisDB = new DevisDB(); + + devis = devisDB.getDevis(current.getCodeDevis()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/Step1CommandeClt.fxml")); + Parent ParentCommandeClt = (Parent) fxmlLoader.load(); + + Step1CommandeCltController Step1CommandeClt = fxmlLoader.getController(); + + Step1CommandeClt.data.addAll(devis.getListeproduit()); + Step1CommandeClt.TypeClient = devis.getTypeClient(); + Step1CommandeClt.CodeDevis = devis.getCodeDevis(); + Step1CommandeClt.Mode=devis.getTypeRegementString(); + Step1CommandeClt.ModeReglement.setValue(devis.getTypeRegementString()); + + if(devis.getTypeClient() == 0 ){ + Step1CommandeClt.client.setCodeclientString(devis.getCodeClient()); + Step1CommandeClt.client.setNom(devis.getNom()); + Step1CommandeClt.client.setPrenom(devis.getPrenom()); + Step1CommandeClt.client.setTelefixString(devis.getTele1()); + Step1CommandeClt.client.setTelemobileString(devis.getTele2()); + Step1CommandeClt.client.setAdresse(devis.getAdresse()); + Step1CommandeClt.SetClient(); + }else if(devis.getTypeClient() == 1){/* + Step1CommandeClt.codecliententre = devis.getCodeClient(); + Step1CommandeClt.SetClientEntre(devis.getCodeClient());*/ + }else if(devis.getTypeClient() == 2){ + Step1CommandeClt.Nom.setText(devis.getNom()); + Step1CommandeClt.Prenom.setText(devis.getPrenom()); + Step1CommandeClt.Adresse.setText(devis.getAdresse()); + Step1CommandeClt.TELE1.setText(devis.getTele1()); + Step1CommandeClt.TELE2.setText(devis.getTele2()); + } + + Step1CommandeClt.TotalTVA.setText(devis.getTotalTVA()); + Step1CommandeClt.Remise.setText(devis.getRemise()); + Step1CommandeClt.NetAPayer.setText(devis.getNetAPayer()); + Step1CommandeClt.Timbre.setText(devis.getTimbre()); + Step1CommandeClt.TotalHTNet.setText(devis.getTotalHorsTaxNet()); + + + //Refrechir le Panel + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(ParentCommandeClt, 3); + + } catch (IOException ex) { + Logger.getLogger(CommandeCltPasserController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + return cell; + } + }); + } + + + + public void SetProduit(Produit produit){ + + //Supprimer les igne vide + if((data.size()>0) && (data.get(data.size()-1).getReference().isEmpty())){ + data.remove(data.size()-1); + } + + if(produit != null){ + ListeProduit ListeProd = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixventeht(),"0",produit.getPrixventettc(),produit.getTvavente(),"0"); + AffectationTableView(ListeProd,-1); + } + + } + + + @FXML + private void ClientRessetDefautButtonAction(ActionEvent event) throws IOException { + TypeClient = 2 ; + ClientExisteDejat.setVisible(true); + Nom.setVisible(true); + Prenom.setVisible(true); + Adresse.setVisible(true); + TELE1.setVisible(true); + TELE2.setVisible(true); + DateNaisssance.setVisible(true); + TextDateNaissance.setVisible(true); + TextSexe.setVisible(true); + SexeHomme.setVisible(true); + SexeFemme.setVisible(true); + + TextCltExistCode.setVisible(false); + ClientDefault.setVisible(false); + CltExistCode.setVisible(false); + CltExistNom.setVisible(false); + CltExistPrenom.setVisible(false); + CltExistDateNaissance.setVisible(false); + CltExistAdresse.setVisible(false); + CltExistTELE1.setVisible(false); + CltExistTELE2.setVisible(false); + + ModeReglement.setDisable(true); + ModeReglement.getSelectionModel().select("Comptant"); + SexeHomme.setSelected(true); + } + + //Methode qui pérmet de traite les recherche du client Personne + @FXML + private void ClientExisteDejatButtonAction(ActionEvent event) throws IOException { + + final RechercherClientPersonneController RechercheClient = new RechercherClientPersonneController(); + RechercheClient.ArrayObjectDataSave = this.getDefaultSaveDataImport(); + + RechercheClient.Action.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/Step1CommandeClt.fxml")); + Parent ParentCommandeClt = (Parent) fxmlLoader.load(); + + // get Selected Item + ListeClient ClientPerson = ((ListeClient)getTableRow().getItem()); + + Step1CommandeCltController Step1CommandeClt = fxmlLoader.getController(); + + Client CltPerson = new Client(); + + CltPerson.setCodeclient(ClientPerson.getCode()); + CltPerson.setCinString(ClientPerson.getCin()); + CltPerson.setAdresse(ClientPerson.getAdresse()); + CltPerson.setNom(ClientPerson.getNom()); + CltPerson.setPrenom(ClientPerson.getPrenom()); + CltPerson.setDateNaissanceString(ClientPerson.getNaissanceString()); + + CltPerson.setNomcomplet(ClientPerson.getNomcomplet()); + CltPerson.setTelefixString(ClientPerson.getTele()); + CltPerson.setTelemobileString(ClientPerson.getTele2()); + CltPerson.setSexe(ClientPerson.getSexe()); + + RechercheClient.ArrayObjectDataSave[1] = 0; + RechercheClient.ArrayObjectDataSave[2] = CltPerson; + + Step1CommandeClt.SetDefaultSaveDataImport(RechercheClient.ArrayObjectDataSave); + + + //Refrechir le Panel + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(ParentCommandeClt, 3); + + } catch (IOException ex) { + Logger.getLogger(RechercherClientPersonneController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + + //afficher la fenaitre + RechercheClient.ShowDialg(); + + final RechercherClientEntrepriseController RechercheClientEntre = new RechercherClientEntrepriseController(); + + RechercheClient.cltEntreprise.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + RechercheClient.AnchoreClientPerson.setVisible(false); + RechercheClientEntre.AnchoreClientEntre.setVisible(true); + RechercheClientEntre.Show(); + } + }); + + //Action when the button is pressed + + + RechercheClientEntre.cltPer.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + RechercheClientEntre.AnchoreClientEntre.setVisible(false); + RechercheClient.AnchoreClientPerson.setVisible(true); + RechercheClient.ShowDialg(); + } + }); + + RechercheClientEntre.TableColumnActionEtre.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + // get Selected Item + ListeClientEntreprise currentEntreprise = ((ListeClientEntreprise)getTableRow().getItem()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/Step1CommandeClt.fxml")); + Parent commandeclt = (Parent) fxmlLoader.load(); + + Step1CommandeCltController Step1CommandeClt = fxmlLoader.getController(); + + ClientEntreprise CltEtr = new ClientEntreprise(); + + //Traitement de Sauvgarde + CltEtr.setCodeString(currentEntreprise.getCode()); + CltEtr.setMatricule(currentEntreprise.getMatricule()); + CltEtr.setAdresse(currentEntreprise.getAdresse()); + CltEtr.setTele1String(currentEntreprise.getTelephone()); + CltEtr.setTele2String(currentEntreprise.getTelephone2()); + CltEtr.setGerant(currentEntreprise.getGerant()); + CltEtr.setNom(currentEntreprise.getNomEntreprise()); + + RechercheClient.ArrayObjectDataSave[1] = 1; + RechercheClient.ArrayObjectDataSave[3] = CltEtr; + Step1CommandeClt.SetDefaultSaveDataImport(RechercheClient.ArrayObjectDataSave); + + + //Refrechir le Panel + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(commandeclt, 3); + + } catch (IOException ex) { + Logger.getLogger(RechercherClientEntrepriseController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + }); + } + + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + } + + + + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + cellButton.getStyleClass().add("btn-danger"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + int selectdIndex = getTableRow().getIndex(); + data.remove(selectdIndex); + CalculeListeProduit(); + TableViewListeProduit.setStyle(".table-row-cell:selected{ -fx-background-color:transparent ;}"); + + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + private void ReferenceMouseClick(){ + TabColReference.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + produit = produitDB.getProduit(t.getNewValue()); + if(produit.getReference() != null){ + ListeProduit Liste = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixventeht(),"0","",produit.getTvavente(),"0"); + AffectationTableView(Liste,t.getTablePosition().getRow()) ; + } + else{ + AffectationTableView(new ListeProduit("","","","","","","",""),t.getTablePosition().getRow()) ; + } + + } + }); + } + + private void QantiteMouseClick(){ + TabColQuantite.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newquantite = t.getNewValue() ; + try{ + newquantite = newquantite.replace(',','.'); + if(Float.parseFloat(newquantite)<1){ + newquantite = "1"; + } + } + catch(NumberFormatException nfe){ + newquantite = "1"; + } + + ListeProduit Liste = t.getRowValue() ; + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un quantité dans un ligne vide + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setQuantite(newquantite); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), newquantite,Liste.getPrixHT(), Liste.getRemise(),"",Liste.getTVA(),""); + //NewList = CalculeProduit(NewList); + AffectationTableView(NewList,t.getTablePosition().getRow()) ; + + } + } + }); + } + + private boolean ControleObject(){ + boolean resulta = false ; + if(data.size()<1){ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Vous devez ajouter au moin un produit à la liste des produits"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + } + else if(ModeReglement.getValue()==null){ + ModeReglement.setStyle("-fx-border-color:#f20606;"); + } + else if(TypeClient == 2){ // 0Personne 1Entreprise 2Passeger + ModeReglement.setStyle("-fx-border-color:transparent;"); + contro clt =new contro(); + if(Nom.getText().isEmpty()){ + Nom.setStyle("-fx-border-color:#f20606;"); + } + else if(Prenom.getText().isEmpty()){ + Nom.setStyle("-fx-border-color:transparent;"); + Prenom.setStyle("-fx-border-color:#f20606;"); + + } + else if(Adresse.getText().isEmpty()){ + Prenom.setStyle("-fx-border-color:transparent;"); + Adresse.setStyle("-fx-border-color:#f20606;"); + + } + else if(clt.isNumericNotnull(TELE1.getText())){ + Adresse.setStyle("-fx-border-color:transparent;"); + TELE1.setStyle("-fx-border-color:#f20606;"); + } + else if(clt.isNumeric(TELE2.getText())){ + TELE1.setStyle("-fx-border-color:transparent;"); + TELE2.setStyle("-fx-border-color:#f20606;"); + } + else{ + TELE2.setStyle("-fx-border-color:transparent;"); + ModeReglement.setStyle("-fx-border-color:#b5b5b5;"); + resulta = true ; + } + } + else{ + ModeReglement.setStyle("-fx-border-color:#b5b5b5;"); + resulta = true ; + } + + return resulta ; + } + + private void SetObject() + { + commandeclt.setTypeRegementString(ModeReglement.getValue().toString()); + commandeclt.setCodeDevis(CodeDevis); + commandeclt.setNetAPayer(Adaptateur.ArrondFloatToStringOrigin(netaPayer)); + commandeclt.setTotalTVA(Adaptateur.ArrondFloatToStringOrigin(totalTVA)); + commandeclt.setTotalHorsTaxNet(Adaptateur.ArrondFloatToStringOrigin(total_H_T_Net)); + commandeclt.setRemise(Adaptateur.ArrondFloatToStringOrigin(Remises)); + + commandeclt.setTypeClient(TypeClient); + if(TypeClient == 0){ + commandeclt.setCltPersonne(client); + }else if(TypeClient == 1){ + commandeclt.setCltEntreprise(CltEntreprise); + }else if(TypeClient == 2){ + CltPassager.setNom(Nom.getText()); + CltPassager.setPrenom(Prenom.getText()); + CltPassager.setAdresse(Adresse.getText()); + CltPassager.setTelefixString(TELE1.getText()); + CltPassager.setTelemobileString(TELE2.getText()); + CltPassager.setNaissance(Adaptateur.DatabaseDateLocalDate(DateNaisssance.getValue()) ); + + RadioButton SelectedRadioSexe = (RadioButton) ToggleGroupSexe.getSelectedToggle(); + CltPassager.setSexeString(SelectedRadioSexe.getEllipsisString()); + + commandeclt.setCltPassager(CltPassager); + } + + //controle le cas ou on a une ligne vide a la fin de la liste + if(data.get(data.size()-1).getTotalTTC().isEmpty()){ + data.remove(data.size()-1); + } + commandeclt.setListeproduit(data); + } + + public void SetClient() + { + ClientExisteDejat.setVisible(false); + Nom.setVisible(false); + Prenom.setVisible(false); + DateNaisssance.setVisible(false); + Adresse.setVisible(false); + TELE1.setVisible(false); + TELE2.setVisible(false); + + ModeReglement.setDisable(false); + + CltExistCode.setText(client.getCodeclient()); + CltExistNom.setText(client.getNom()); + CltExistPrenom.setText(client.getPrenom()); + CltExistDateNaissance.setText(" "+client.getDateNaissanceString()); + CltExistAdresse.setText(client.getAdresse()); + CltExistTELE1.setText(client.getTelefix().toString()); + CltExistTELE2.setText(client.getTelemobileString()); + + if(client.getSexe() == 0){ + SexeFemme.setSelected(true); + }else if(client.getSexe() == 1){ + SexeHomme.setSelected(true); + } + TextDateNaissance.setVisible(true); + TextCltExistCode.setVisible(true); + ClientDefault.setVisible(true); + CltExistCode.setVisible(true); + CltExistNom.setVisible(true); + CltExistPrenom.setVisible(true); + CltExistDateNaissance.setVisible(true); + TextSexe.setVisible(true); + SexeHomme.setVisible(true); + SexeFemme.setVisible(true); + + CltExistAdresse.setVisible(true); + CltExistTELE1.setVisible(true); + CltExistTELE2.setVisible(true); + } + + + + public void SetClientEntre(){ + TextMatricule.setVisible(true); + TextPrenom.setVisible(false); + + DateNaisssance.setVisible(false); + CltExistDateNaissance.setVisible(false); + TextDateNaissance.setVisible(false); + + ClientExisteDejat.setVisible(false); + Nom.setVisible(false); + Prenom.setVisible(false); + Adresse.setVisible(false); + TELE1.setVisible(false); + TELE2.setVisible(false); + TextSexe.setVisible(false); + SexeHomme.setVisible(false); + SexeFemme.setVisible(false); + ModeReglement.setDisable(false); + + CltExistCode.setText(CltEntreprise.getCode().toString()); + CltExistNom.setText(CltEntreprise.getNom()); + CltExistPrenom.setText(CltEntreprise.getMatricule()); + CltExistAdresse.setText(CltEntreprise.getAdresse()); + CltExistTELE1.setText(CltEntreprise.getTele1String()); + CltExistTELE2.setText(CltEntreprise.getTele2String()); + + TextCltExistCode.setVisible(true); + ClientDefault.setVisible(true); + CltExistCode.setVisible(true); + CltExistNom.setVisible(true); + CltExistPrenom.setVisible(true); + CltExistAdresse.setVisible(true); + CltExistTELE1.setVisible(true); + CltExistTELE2.setVisible(true); + + + } + + private void CalculeListeProduit(){ //calculer et afficher la détail des produits + netaPayer = 0; + Remises = 0; + totalTVA = 0; + total_H_T_Net= 0; + + TotalTVA.setText(""); + Remise.setText(""); + NetAPayer.setText(""); + Timbre.setText(""); + TotalHTNet.setText(""); + + //calcule + for(ListeProduit liste : data){ + float totaht = Adaptateur.StringToFloat(liste.getTotalHT()) ; + float prix_U_H_T = Adaptateur.StringToFloat(liste.getPrixHT()) ; + float remises = Adaptateur.StringToFloat(liste.getRemise().replace("%", "")) ; + float tva = Adaptateur.StringToFloat(liste.getTVA().replace("%", "")); + float qte = Adaptateur.StringToFloat(liste.getQuantite()); + + totalTVA = totalTVA + ((totaht * tva) /100) ; + + Remises = Remises + (prix_U_H_T * remises)/100 ; + + total_H_T_Net = total_H_T_Net + totaht ; + + } + + if(total_H_T_Net>0){ + float timbre = Adaptateur.StringToFloat(ParametreSystem.Timbre); + netaPayer = total_H_T_Net + totalTVA + timbre ; + + TotalTVA.setText(Adaptateur.ArrondFloatToString(totalTVA)); + Remise.setText(Adaptateur.ArrondFloatToString(Remises)); + NetAPayer.setText(Adaptateur.ArrondFloatToString(netaPayer)); + Timbre.setText(ParametreSystem.Timbre); + TotalHTNet.setText(Adaptateur.ArrondFloatToString(total_H_T_Net)); + } + } + + private void RemiseMouseClick(){ + TabColRemise.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newRemise = t.getNewValue() ; + try{ + newRemise = newRemise.replace(',','.'); + if(Float.parseFloat(newRemise)<0){ + newRemise = "0"; + } + } + catch(NumberFormatException nfe){ + newRemise = "0"; + } + + ListeProduit Liste = t.getRowValue() ; + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un remise dans un ligne vide + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setRemise(newRemise); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), Liste.getQuantite(),Liste.getPrixHT(), newRemise, "", Liste.getTVA(), ""); + AffectationTableView(NewList, t.getTablePosition().getRow()); + } + + } + }); + } + + private void AffectationTableView(ListeProduit ListeProd, int EmplacementLigne){ + boolean result = false ; + int indise=0; + int Position = 0; + + if(data.size()>0){ + do{ //Vérifier si le produit exsiste deja + if(data.get(indise).getReference().equals(ListeProd.getReference())){ + result = true ; + Position = indise ; + //System.out.println("existe Position:"+indise); + } + indise++; + }while(data.size()>indise && !result); + + if(result){ //si la ligne exsite déja + if(EmplacementLigne!= -1){ + if(Position == EmplacementLigne){ + data.set(Position, ListeProd); + } + else{ + data.set(EmplacementLigne, new ListeProduit("","","","","","","","")); + } + } + } + else{ + if(EmplacementLigne!= -1){ + data.set(EmplacementLigne, ListeProd); + } + else{ + data.add(ListeProd); + } + } + } + else{ + data.add(ListeProd); + } + + CalculeListeProduit(); + + + TableViewListeProduit.setItems(data); + TableViewListeProduit.setVisible(false); + TableViewListeProduit.setVisible(true); + } + +} diff --git a/src/main/java/Controllers/VenteRapideClt/Step2BonLivraisonCltController.java b/src/main/java/Controllers/VenteRapideClt/Step2BonLivraisonCltController.java new file mode 100644 index 0000000..a70945c --- /dev/null +++ b/src/main/java/Controllers/VenteRapideClt/Step2BonLivraisonCltController.java @@ -0,0 +1,164 @@ +package Controllers.VenteRapideClt; + +import Controllers.Traitement.contro; +import Models.BonLivraisonClt.BonLivraisonClt; +import Models.CommandeClt.CommandeClt; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ResourceBundle; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.layout.AnchorPane; +import javafx.scene.text.Text; + +/** + * FXML Controller class + * + * @author maher + */ +public class Step2BonLivraisonCltController implements Initializable { + + @FXML private AnchorPane PaneStep2BonLivraison; + + @FXML public TextField TextFieldHeurLivraison ; + @FXML public TextField TextFieldNumTele1 ; + @FXML public TextField TextFieldNumTele2 ; + @FXML public TextField TextFieldTransporteur ; + @FXML public TextField TextFieldPoidProduit; + @FXML public DatePicker DatePickerDateLivraison; + @FXML public TextArea TextAreaAdressLivraison; + + @FXML public Text TextcltHeurLivraison ; + @FXML public Text TextcltNumTele1 ; + @FXML public Text TextcltNumTele2 ; + @FXML public Text TextcltPoidProduit; + @FXML public Text TextcltAdressLivraison; + + BonLivraisonClt BonLivraison = new BonLivraisonClt(); + CommandeClt Commande = new CommandeClt(); + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TextFieldHeurLivraison.setText(LocalDateTime.now().getHour()+":"+LocalDateTime.now().getMinute()); + } + + @FXML + private void NextBonLivraisonCltButtonAction(ActionEvent event) throws IOException { + contro clt = new contro(); + if( clt.ContrNumerique(TextFieldNumTele1, TextcltNumTele1) && + clt.ContrNumerique(TextFieldNumTele2, TextcltNumTele2) && + clt.ContrNumerique(TextFieldPoidProduit, TextcltPoidProduit) && + clt.ContrNull(TextAreaAdressLivraison, TextcltAdressLivraison)&& + clt.ContrHour(TextFieldHeurLivraison, TextcltHeurLivraison) ){ + + this.SetBonLivraision(); + this.ConvertCommandeToBonLivraision(Commande); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/Step3FactureClt.fxml")); + Parent NodeStep3FactureClt = (Parent)fxmlLoader.load(); + + Step3FactureCltController Step3FactureClt = fxmlLoader.getController(); + PaneStep2BonLivraison.getChildren().clear(); + PaneStep2BonLivraison.getChildren().add(NodeStep3FactureClt); + + Step3FactureClt.SetDataStep2ToStep3(BonLivraison, Commande); + } + } + + + @FXML + private void LastBonLivraisonCltButtonAction(ActionEvent event) throws IOException { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/Step1CommandeClt.fxml")); + Parent NodeStep1Commande = (Parent)fxmlLoader.load(); + + Step1CommandeCltController Step1Commande = fxmlLoader.getController(); + + Object[] ArrayObject = new Object[10]; + + ArrayObject[0] = Commande.getListeproduit(); + Integer TypeClient = Commande.getTypeClient(); + ArrayObject[1] = TypeClient; + + if(TypeClient == 0){ + ArrayObject[2] = Commande.getCltPersonne();; + }else if(TypeClient == 1){ + ArrayObject[3] = Commande.getCltEntreprise(); + }else if(TypeClient == 2){ + ArrayObject[4] = Commande.getCltPassager(); + } + + ArrayObject[5] = Commande.getCodeDevis(); + + ArrayObject[7] = Commande.getTypeRegementString(); + + Step1Commande.SetDefaultSaveDataImport(ArrayObject); + + + PaneStep2BonLivraison.getChildren().clear(); + PaneStep2BonLivraison.getChildren().add(NodeStep1Commande); + } + + + public void SetDefaultTextFieldData(){ + TextFieldNumTele1.setText(BonLivraison.getTele1()); + TextFieldNumTele2.setText(BonLivraison.getTele2()); + + DatePickerDateLivraison.setValue(LocalDate.now()); + + TextAreaAdressLivraison.setText(BonLivraison.getAdresseLivraison()); + TextFieldTransporteur.setText(BonLivraison.getTransporteur()); + TextFieldPoidProduit.setText(BonLivraison.getPoidProduit()); + + } + + public void SetBonLivraision(){ + BonLivraison.setTele1(TextFieldNumTele1.getText()); + BonLivraison.setTele2(TextFieldNumTele2.getText()); + BonLivraison.setHeurLivraison(TextFieldHeurLivraison.getText()); + if(DatePickerDateLivraison.getValue()!=null){ + BonLivraison.setDateLivraisonPreveu(DatePickerDateLivraison.getValue().toString()); + } + BonLivraison.setTransporteur(TextFieldTransporteur.getText()); + BonLivraison.setPoidProduit(TextFieldPoidProduit.getText()); + BonLivraison.setAdresseLivraison(TextAreaAdressLivraison.getText()); + } + + + public void ConvertCommandeToBonLivraision(CommandeClt commande) + { + //0 Personne 1 Entreprise | 2 Passager + Integer TypeClt = commande.getTypeClient(); + BonLivraison.setTypeClient(TypeClt); + if(TypeClt == 0){ + BonLivraison.setCltPersonne(commande.getCltPersonne()); + BonLivraison.setAdresseLivraison(commande.CltPersonne.getAdresse()); + }else if(TypeClt == 1){ + BonLivraison.setCltEntreprise(commande.getCltEntreprise()); + BonLivraison.setAdresseLivraison(commande.CltEntreprise.getAdresse()); + }else if(TypeClt == 2){ + BonLivraison.setCltPassager(commande.getCltPassager()); + BonLivraison.setAdresseLivraison(commande.CltPassager.getAdresse()); + } + + + BonLivraison.setListeproduit(commande.getListeproduit()); + BonLivraison.setTotalHorsTaxNet(commande.getTotalHorsTaxNet()); + BonLivraison.setTotalTVA(commande.getTotalTVA()); + BonLivraison.setRemise(commande.getRemise()); + BonLivraison.setNetAPayer(commande.getNetAPayer()); + + + Commande=commande; + } +} diff --git a/src/main/java/Controllers/VenteRapideClt/Step3FactureCltController.java b/src/main/java/Controllers/VenteRapideClt/Step3FactureCltController.java new file mode 100644 index 0000000..737c222 --- /dev/null +++ b/src/main/java/Controllers/VenteRapideClt/Step3FactureCltController.java @@ -0,0 +1,756 @@ +package Controllers.VenteRapideClt; + +import Controllers.Dialog.MessageControle; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.BonLivraisonClt.BonLivraisonClt; +import Models.CommandeClt.CommandeClt; +import Models.TraiteClt.DatePickerCell; +import Models.ChequeClt.DatePickerCellCheque; +import Models.FactureClt.FactureClt; +import Models.ChequeClt.ChequeList; +import Models.TraiteClt.TraiteList; +import Models.User.User; +import Models.Caisse.CaisseClt; +import Models.Caisse.CarteBancaireClt; +import Models.ChequeClt.ChequeClt; +import Models.TraiteClt.TraiteClt; +import java.io.IOException; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.ResourceBundle; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.control.DatePicker; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.layout.AnchorPane; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author maher Ben Tili + */ +public class Step3FactureCltController implements Initializable { + + @FXML private AnchorPane PaneStep3FactureClt; + + @FXML public AnchorPane PaneTypeReglementComptant; + @FXML public AnchorPane PaneTypeReglementFacilite; + + @FXML public AnchorPane PaneCheque; + @FXML public AnchorPane PaneCarte; + + @FXML public TextField FactureCltChequeNomBanque; + @FXML public TextField FactureCltChequeNumero; + @FXML public TextField FactureCltChequeNomComple; + @FXML public DatePicker FactureCltChequeDatePaiement; + + @FXML public Text MsgCltChequeNomBanque; + @FXML public Text MsgCltChequeNumero; + @FXML public Text MsgCltChequeNomComple; + @FXML public Text MsgCltChequeDatePaiement; + + + @FXML public TextField TextFieldCarteNumeroTransation; + @FXML public TextField TextFieldCarteNomBanque; + @FXML public TextField TextFieldCarteNumero; + @FXML public TextField TextFieldCarteNomComplet; + + @FXML public Text MsgCltCarteNumeroTransation; + @FXML public Text MsgCltCarteNumeroCarte; + + @FXML public Text TextTypeRegement; + @FXML public Text TextNetaPayer; + + public Integer TypeSelect = 0; // 0:espace 1:Cheque 2:Carte bancaire + + + //Paiement Facilité + @FXML public AnchorPane PaneTableViewTraite ; + @FXML public AnchorPane PaneTableViewCheque; + @FXML public Text TextMontant_Traite; + @FXML public Text TextMontant_Interet; + + @FXML public RadioButton RadioCheque; + @FXML public RadioButton RadioTraite; + + @FXML public Text TextMontantTraite; + @FXML public Text TextMontantInteret; + + @FXML public TextField TextFieldAvance; + @FXML public TextField TextFieldNbrTraite; + @FXML public TextField TextFieldTauxIntere; + @FXML public Text TextAvance; + @FXML public Text TextNbrTraite; + @FXML public Text TextTauxIntere; + + @FXML public TableView TableViewListeTraite ; + @FXML public TableColumn TabColDateTraite; + @FXML public TableColumn TabColMontantTraite; + + @FXML public TableView TableViewListeCheque ; + @FXML public TableColumn TabColDateCheque; + @FXML public TableColumn TabColNumeroCheque; + @FXML public TableColumn TabColBanqueCheque; + @FXML public TableColumn TabColMontantCheque; + + float NetaPayer, TotalMontantTraite, MontantInteret, Avance, NbrTraite, TauxIntere; + + public ObservableList dataListTraite = FXCollections.observableArrayList(); + public ObservableList dataListCheque = FXCollections.observableArrayList(); + + public boolean FaciliteType = true; // True Traite | False Cheque + + BonLivraisonClt BonLivraison = new BonLivraisonClt(); + CommandeClt Commande = new CommandeClt(); + FactureClt Facture = new FactureClt(); + + contro clt = new contro(); + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + TableViewListeTraite.setEditable(true); + + TabColMontantTraite.setStyle( "-fx-alignment: CENTER;"); + TabColMontantTraite.getStyleClass().add("Center"); + TabColMontantTraite.setCellValueFactory(new PropertyValueFactory("MontantTraite")); + TabColMontantTraite.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColMontantTraite.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewQuantite = t.getNewValue(); + ((TraiteList) t.getTableView().getItems().get(t.getTablePosition().getRow())).setMontantTraite(NewQuantite); + } + }); + + TabColDateTraite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateTraite.getStyleClass().add("Center"); + TabColDateTraite.setCellValueFactory(new PropertyValueFactory("date")); + TabColDateTraite.setEditable(true); + + TabColDateTraite.setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn p) { + DatePickerCell datePick = new DatePickerCell(dataListTraite); + return datePick; + } + }); + TableViewListeTraite.setItems(dataListTraite); + + + //Cheque + TabColNumeroCheque.setStyle( "-fx-alignment: CENTER;"); + TabColNumeroCheque.getStyleClass().add("Center"); + TabColNumeroCheque.setCellValueFactory(new PropertyValueFactory("NumeroCheque")); + TabColNumeroCheque.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColNumeroCheque.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewNumeroCheque = t.getNewValue(); + contro clt = new contro(); + if(!clt.isNumeric(NewNumeroCheque)){ + if(t.getTablePosition().getRow() == 0){ + Integer NumeroCheque = Integer.valueOf(NewNumeroCheque); + int indise = 0; + while(indise("BanqueCheque")); + TabColBanqueCheque.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColBanqueCheque.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewBanque = t.getNewValue(); + if(t.getTablePosition().getRow() == 0){ + int indise = 0; + while(indise("MontantCheque")); + TabColMontantCheque.setCellFactory(TextFieldTableCell.forTableColumn()); //Ajouter l'option textfield + //Valier l'opertion + TabColMontantCheque.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String NewQuantite = t.getNewValue(); + ((ChequeList) t.getTableView().getItems().get(t.getTablePosition().getRow())).setMontantCheque(NewQuantite); + } + }); + + TabColDateCheque.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDateCheque.getStyleClass().add("Center"); + TabColDateCheque.setCellValueFactory(new PropertyValueFactory("date")); + TabColDateCheque.setEditable(true); + TabColDateCheque.setCellFactory(new Callback() { + @Override + public TableCell call(TableColumn p) { + DatePickerCellCheque datePick = new DatePickerCellCheque(dataListCheque); + return datePick; + } + }); + + TableViewListeCheque.setItems(dataListCheque); + } + + public void SetDataStep2ToStep3(BonLivraisonClt bon_livraison, CommandeClt commande){ + this.BonLivraison= bon_livraison; + this.Commande = commande; + + TextNetaPayer.setText(Adaptateur.StringToStringEspaceCurrency(BonLivraison.getNetAPayer())); + + String TypeRegement = Commande.getTypeRegement(); + TextTypeRegement.setText(Commande.getTypeRegementString()); + if(TypeRegement.equals("0")){ + PaneTypeReglementComptant.setVisible(true); + PaneTypeReglementFacilite.setVisible(false); + }else if(TypeRegement.equals("1")){ + PaneTypeReglementComptant.setVisible(false); + PaneTypeReglementFacilite.setVisible(true); + } + } + + @FXML + private void NextFactureCltButtonAction(ActionEvent event) throws IOException { + + boolean ResultControle = true; + + if(Commande.getTypeRegement().equals("0")){ + if(TypeSelect == 1){ + if(this.ControlePaimentComptant()){ + ResultControle = false; + } + }else if(TypeSelect == 2){ + ResultControle = clt.ContrNull(TextFieldCarteNumeroTransation, MsgCltCarteNumeroTransation) && clt.ContrNumerique(TextFieldCarteNumero, MsgCltCarteNumeroCarte); + } + }else if(Commande.getTypeRegement().equals("1")){ + if(this.Controle()){ + if(FaciliteType){ + if(!PaneTableViewTraite.isVisible()){ + ResultControle = false; + } + if(!this.ControleListTraite()){ + ResultControle = false; + } + }else{ + if(!this.ControleListCheque()){ + ResultControle = false; + } + } + }else{ + ResultControle = false; + } + } + + if(ResultControle){ + this.SetFacture(); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/Step4SaveVenteClt.fxml")); + Parent NodeStep4SaveVenteClt = (Parent)fxmlLoader.load(); + + Step4SaveVenteCltController Step4SaveVenteClt = fxmlLoader.getController(); + Step4SaveVenteClt.SetDataStep3ToStep4(Commande, BonLivraison, Facture); + + Step4SaveVenteClt.LanchSaveCommande(); + + PaneStep3FactureClt.getChildren().clear(); + PaneStep3FactureClt.getChildren().add(NodeStep4SaveVenteClt); + } + + + } + + @FXML + private void LastFactureCltButtonAction(ActionEvent event) throws IOException { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/Step2BonLivraisonClt.fxml")); + Parent NodeStep2BonLivraison = (Parent)fxmlLoader.load(); + + Step2BonLivraisonCltController Step2BonLivraison = fxmlLoader.getController(); + Step2BonLivraison.BonLivraison = BonLivraison; + Step2BonLivraison.Commande = Commande; + Step2BonLivraison.SetDefaultTextFieldData(); + + PaneStep3FactureClt.getChildren().clear(); + PaneStep3FactureClt.getChildren().add(NodeStep2BonLivraison); + + } + + + public boolean ControlePaimentComptant(){ + contro clt = new contro(); + boolean resulta = true; + if( clt.ContrNull(FactureCltChequeNomBanque, MsgCltChequeNomBanque) && + clt.ContrNumeriqueNotnull(FactureCltChequeNumero, MsgCltChequeNumero) && + clt.ContrNullDatePicker(FactureCltChequeDatePaiement, MsgCltChequeDatePaiement)){ + resulta = false; + } + return resulta; + } + + + + public void SetFacture() + { + Facture.setListeproduit(BonLivraison.getListeproduit()); + + //0 Personne 1 Entreprise 2 Passager + Integer TypeClient = BonLivraison.getTypeClient(); + Facture.setTypeClient(TypeClient); + if(TypeClient == 0){ + Facture.setCltPersonne(BonLivraison.getCltPersonne()); + }else if(TypeClient == 1){ + Facture.setCltEntreprise(BonLivraison.getCltEntreprise()); + }else if(TypeClient == 2){ + Facture.setCltPassager(BonLivraison.getCltPassager()); + } + + Facture.setDateFacture(new Date().toString()); + Facture.setNetAPayer(BonLivraison.getNetAPayer()); + Facture.setTotalTVA(BonLivraison.getTotalTVA()); + Facture.setTotalHorsTaxNet(BonLivraison.getTotalHorsTaxNet()); + Facture.setRemise(BonLivraison.getRemise()); + + Facture.setListeproduit(BonLivraison.getListeproduit()); + + Facture.setTimbre(ParametreSystem.Timbre); + Facture.setCodeUser(User.idprofile); + + //0 Comptent 1 Facilite + Facture.setTypeRegement(Commande.getTypeRegement()); + + if(Facture.getTypeRegementInteger() == 0){ + Facture.setTypeRegement("0"); + //0 :espace 1:cheque 2 :carte bancaire + if(TypeSelect == 0){ + CaisseClt caisse= new CaisseClt(); + caisse.setTypeMouvement("0"); + Facture.setModePaiement("0"); + }else if(TypeSelect == 1){ + ChequeClt Cheque = new ChequeClt(); + Cheque.setBanqueChequeClt(FactureCltChequeNomBanque.getText()); + Cheque.setNumeroChequeClt(FactureCltChequeNumero.getText()); + Cheque.setNomCompletChequeClt(FactureCltChequeNomComple.getText()); + Cheque.setDatePaiement(FactureCltChequeDatePaiement.getValue().toString()); + Cheque.setMontantChequeClt(Facture.getNetAPayer()); + Facture.setCheque(Cheque); + Facture.setModePaiement("1"); + }else if(TypeSelect == 2){ + CarteBancaireClt CarteBancaire = new CarteBancaireClt(); + CarteBancaire.setNumeroTransation(TextFieldCarteNumeroTransation.getText()); + CarteBancaire.setNomBanque(TextFieldCarteNomBanque.getText()); + CarteBancaire.setNumeroCarte(TextFieldCarteNumero.getText()); + CarteBancaire.setNomComplet(TextFieldCarteNomComplet.getText()); + CarteBancaire.setMontant(Facture.getNetAPayer()); + CarteBancaire.setLocalNom(ParametreSystem.NomLocalPC); + CarteBancaire.setIdProfile(User.idprofile); + Facture.setCarteBancaire(CarteBancaire); + Facture.setModePaiement("2"); + } + }else if(Facture.getTypeRegementInteger() == 1){ + Facture.setAvanceNumber(Avance); + Facture.setTotalMontantTraiteNumber(TotalMontantTraite); + Facture.setNbrTraite(TextFieldNbrTraite.getText()); + Facture.setMontantInteretNumber(MontantInteret); + Facture.setTauxInteretNumber(TauxIntere); + + // True Traite | False Cheque + if(FaciliteType){ + Facture.setTypeFacilite("0"); + ArrayList ListTraites = new ArrayList(); + for(int i=0; i ListCheque = new ArrayList(); + for(int i=0; i() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + Resulta = false; + } + else if(Adaptateur.ArrondFloatToFloat(Somme) != Adaptateur.ArrondFloatToFloat(TotalMontantTraite)){ + final MessageControle messagecontrol = new MessageControle(); + + Text text3 = new Text(); + text3.setText("La sommes des traites est différent à la montant de TotalMontantTraite"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + + messagecontrol.ShowNotification(); + + Resulta = false; + } + + return Resulta; + } + + private Boolean ControleListCheque(){ + boolean Resulta = true; + boolean NumeroCheque = true; + boolean MontantCheque = true; + boolean Banque = true; + int indise = 0; + float Somme = 0; + contro clt = new contro(); + + while(indise() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + Resulta = false; + } + else if(!Banque){ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Le nom de la banque est vide"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + Resulta = false; + } + else if(!MontantCheque){ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("Incorrect montant chéque"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + Resulta = false; + } + else if(Adaptateur.ArrondFloatToFloat(Somme) != Adaptateur.ArrondFloatToFloat(TotalMontantTraite)){ + final MessageControle messagecontrol = new MessageControle(); + Text text3 = new Text(); + text3.setText("La sommes des chéques est différent à la montant de TotalMontantTraite"); + text3.setFont(Font.font("Arial", FontWeight.BOLD, 13)); + text3.setFill(Color.web("#363a38")); + messagecontrol.DetailMSG.getChildren().add(text3); + messagecontrol.bouttonOK.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + messagecontrol.stackpane.setVisible(false); + } + }); + messagecontrol.ShowNotification(); + Resulta = false; + } + + return Resulta; + } + + private Boolean Controle(){ + contro clt = new contro(); + + if(clt.ContrNumeriqueNotnull(TextFieldAvance, TextAvance) && + clt.ContrNumeriqueNotnull(TextFieldNbrTraite, TextNbrTraite) && + clt.ContrNumeriqueNotnull(TextFieldTauxIntere, TextTauxIntere)){ + + NetaPayer = Adaptateur.StringToFloat(Commande.getNetAPayer()); + Avance = Adaptateur.StringToFloat(TextFieldAvance.getText()); + if(NetaPayer< Avance){ + TextFieldAvance.setStyle("-fx-border-color:#f20606;"); + TextAvance.setText("doit être inférieur a Net A payer"); + return false ; + }else if(Adaptateur.StringToFloat(TextFieldNbrTraite.getText())<= 0){ + TextFieldNbrTraite.setStyle("-fx-border-color:#f20606;"); + TextNbrTraite.setText("doit être supérieur a 0"); + return false ; + }else{ + TextAvance.setText(""); + TextFieldAvance.setStyle("-fx-border-color: transparent;"); + return true; + } + } + else{ + return false; + } + } + + //Boutton Traitement + @FXML + private void FactureCltAjouterTraitementButtonAction(ActionEvent event) throws IOException { + if(this.Controle()){ + if(FaciliteType == true){ + this.CalculeTraite(); + }else{ + this.CalculeCheque(); + } + } + } + + private void CalculeTraite(){ + dataListTraite.clear(); + PaneTableViewCheque.setVisible(false); + PaneTableViewTraite.setVisible(true); + + NbrTraite = Adaptateur.StringToFloat(TextFieldNbrTraite.getText()); + TauxIntere = Adaptateur.StringToFloat(TextFieldTauxIntere.getText()); + + MontantInteret = ((NetaPayer - Avance) * TauxIntere) / 100 ; + TotalMontantTraite = (NetaPayer - Avance) + MontantInteret ; + + TextMontantInteret.setText(Adaptateur.ArrondFloatToString(MontantInteret)+" "+ParametreSystem.CurrencySign); + TextMontantTraite.setText(Adaptateur.ArrondFloatToString(TotalMontantTraite)+" "+ParametreSystem.CurrencySign); + + Integer divTotal = Adaptateur.Diviseur(TotalMontantTraite); + float modeTotal = Adaptateur.Modulo(TotalMontantTraite); + + float Value = (float) TotalMontantTraite / NbrTraite; + Integer div = Adaptateur.Diviseur(Value); + + + Date date= new Date(); + Calendar cal = Calendar.getInstance(); + + Integer Somme = 0; + + for(int i=0; i ThreadCommande; + private Service ThreadBonLivraison; + private Service ThreadFacture; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + ButtonPrintCommande.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + + } + }); + + ButtonPrintBonLivaison.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + + ObservableList ListProd = BonLivraison.getListeproduit(); + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + + try { + + jobPrint.getJobSettings().setPageRanges(new PageRange(1, 1)); + + if (jobPrint.showPrintDialog(null)) { + + FXMLLoader fxmlLoaderPrintLivraison = new FXMLLoader(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltPrint.fxml")); + final Node ParentFxmlPrintLivraison = (Node)fxmlLoaderPrintLivraison.load(); + BonLivraisonCltPrintController PrintLivraison = fxmlLoaderPrintLivraison.getController(); + + PrintLivraison.setBonLivraisonClt(BonLivraison, ListProd, "1/1", true); + + jobPrint.printPage(ParentFxmlPrintLivraison); + + jobPrint.endJob(); + } + } catch (IOException ex) { + System.out.println("Erreur dans: Controllers.VenteRapideClt.Step4SaveVenteCltController.initialize.ButtonPrintBonLivaison"); + System.out.println(ex.getMessage()); + } + } + }); + + ButtonPrintFactureClt.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + + try { + + jobPrint.getJobSettings().setPageRanges(new PageRange(1, 1)); + + if (jobPrint.showPrintDialog(null)) { + + FXMLLoader fxmlLoaderPrintFactureClt = new FXMLLoader(getClass().getResource("/Views/FactureClt/FactureCltPrint.fxml")); + final Node ParentFxmlPrintFactureClt = (Node)fxmlLoaderPrintFactureClt.load(); + FactureCltPrintController PrintFactureClt = fxmlLoaderPrintFactureClt.getController(); + + PrintFactureClt.setFactureClt(Facture, false); + + jobPrint.printPage(ParentFxmlPrintFactureClt); + + jobPrint.endJob(); + } + } catch (IOException ex) { + System.err.println("Erreur dans: Controllers.VenteRapideClt.Step4SaveVenteCltController.initialize.ButtonPrintFactureClt "); + System.err.println(ex.getMessage()); + } + } + }); + } + + public void SetDataStep3ToStep4(CommandeClt commande_clt, BonLivraisonClt bon_livraison_clt, FactureClt facture_clt){ + Commande = commande_clt; + BonLivraison = bon_livraison_clt; + Facture = facture_clt; + } + + + public void LanchSaveCommande(){ + ThreadCommande = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + Commande = CommandeDB.AddCommandeClt(Commande); + IdCommande = Commande.getCodecommandeclt(); + + Commande.setCodecommandeclt(IdCommande); + BonLivraison.setIdCommande(IdCommande); + Facture.setIdCommandeClt(IdCommande); + + if(Commande.getTypeClient() == 2){ + String IdPassager = Commande.getCltPassager().getCodeclient(); + BonLivraison.CltPassager.setCodeclient(IdPassager); + Facture.CltPassager.setCodeclient(IdPassager); + } + return null; + } + }; + } + }; + ThreadCommande.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressCommande.setVisible(false); + TextCommande.setText("La Commande N°"+IdCommande+" a été enregistrés avec succès"); + ImageCommande.setVisible(true); + GridPaneCommande.setVisible(true); + ButtonPrintCommande.setVisible(true); + LanchSaveBonLivraison(); + } + }); + ThreadCommande.start(); + } + + + public void LanchSaveBonLivraison(){ + ThreadBonLivraison = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call(){ + IdBonLivraison = BonLivraisonDB.AddBonLivraisonClt(BonLivraison); + Facture.setIdBonLivraisonClt(IdBonLivraison); + return null; + } + }; + } + }; + ThreadBonLivraison.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBonLivraion.setVisible(false); + TextBonLivraion.setText("La bon livraison N°"+IdBonLivraison+" a été enregistrés avec succès"); + ImageBonLivraion.setVisible(true); + GridPaneBonLivraion.setVisible(true); + BonLivraison.setIdBonLivrasionClt(IdBonLivraison); + ButtonPrintBonLivaison.setVisible(true); + LanchSaveFacture(); + } + }); + ThreadBonLivraison.start(); + } + + + public void LanchSaveFacture(){ + ThreadFacture = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + IdFacture = FactureDB.AddFactureClt(Facture); + CommandeDB.UpdateCommandeCltSetIdBonLivraison(IdCommande, IdBonLivraison); + CommandeDB.UpdateCommandeCltSetIdFacture(IdCommande, IdFacture); + return null; + } + }; + } + }; + ThreadFacture.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressFacture.setVisible(false); + TextFacture.setText("La facture N°"+IdFacture+" a été enregistrés avec succès"); + ImageFacture.setVisible(true); + GridPaneFacture.setVisible(true); + if(Facture.getTypeRegementInteger() == 1){ + GridPaneFactureFacilite.setVisible(true); + if(Facture.getTypeFaciliteBoolean()){ + TextTypeFacilite.setText("List traite"); + }else{ + TextTypeFacilite.setText("List cheque"); + } + } + Facture.setCodeFactureClt(IdFacture); + Facture.setDateFacture(Adaptateur.getDefaultCurrentDate("yyyy-MM-dd HH:mm:ss")); + ButtonPrintFactureClt.setVisible(true); + } + }); + ThreadFacture.start(); + } + + @FXML + private void PrintTraiteButtonAction(ActionEvent event) throws IOException { + ArrayList ListTraites = Facture.getListeTraites(); + String strCIN= ""; + String strNomComplet = ""; + + if(Facture.getTypeClient() == 0){ + strCIN = Facture.getCltPersonne().getCinString(); + strNomComplet = Facture.getCltPersonne().getNomcomplet(); + }else if(Facture.getTypeClient() == 1){ + strCIN = Facture.getCltEntreprise().getMatricule(); + strNomComplet = Facture.getCltEntreprise().getNom(); + } + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/TraiteClt/TraiteCltPrint.fxml")); + try { + Parent FxmlPrintTraite = (Parent)fxmlLoader.load(); + TraiteCltPrintController TraiteCltPrint = fxmlLoader.getController(); + + PrinterJob jobPrint = PrinterJob.createPrinterJob(); + + Printer printer = Printer.getDefaultPrinter(); + PageLayout pageLayout = printer.createPageLayout(Paper.NA_LETTER,PageOrientation.PORTRAIT, 0, 0, 0, 0); + JobSettings jobSettings = jobPrint.getJobSettings(); + jobSettings.setPageLayout(pageLayout); + + jobPrint.getJobSettings().setPageRanges(new PageRange(1, ListTraites.size())); + if (jobPrint.showPrintDialog(null)) + { + for(int i=0; i TableViewListeProduit ; + @FXML public TableColumn TabColReference; + @FXML public TableColumn TabColDesignation; + @FXML public TableColumn TabColQuantite ; + @FXML public TableColumn TabColPrixHT; + @FXML public TableColumn TabColRemise; + @FXML public TableColumn TabColTotalHT; + @FXML public TableColumn TabColTVA; + @FXML public TableColumn TabColTotalTTC; + @FXML public TableColumn TabColAddAction ; + + public ObservableList data = FXCollections.observableArrayList(); + Produit produit= new Produit(); + ProduitDB produitDB= new ProduitDB(); + + VenteSansFacture Vente = new VenteSansFacture(); + + float netaPayer = 0; + + @FXML public TableView TableViewVenteSansFacture ; + @FXML public TableColumn TabColCode; + @FXML public TableColumn TabColDate; + @FXML public TableColumn TabColNbrProd; + @FXML public TableColumn TabColPaiement; + @FXML public TableColumn TabColNomPrenomClient; + @FXML public TableColumn TabColMontant; + @FXML public TableColumn TabColOperationAction ; + + @FXML private ProgressBar ProgressBarVenteSansFacture; + + @FXML private TextField TextFieldCode; + @FXML private TextField TextFieldMontant; + + @FXML private DatePicker DatePickerDateVente; + + @FXML private Text ActuellePage ; + @FXML private Text NbrPage ; + @FXML private Group nextgroupe ; + @FXML private Group avancergroupe ; + @FXML private Group lastgroupe ; + @FXML private Group retourgroupe ; + @FXML private Label LabelCount; + @FXML private ChoiceBox NbrLigne ; + + ObservableList cursors = FXCollections.observableArrayList("10","15","20"); + private Integer nbrligne = 10 ; + private Integer totalcount = 0; + private Integer nbrpage = 0; + private Integer actuellepage = 1; + Integer position = 0; + + contro clt = new contro(); + + private Service ThreadSearchVenteSansFacture; + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + + NbrLigne.setItems(cursors); + NbrLigne.getSelectionModel().selectFirst(); + + Vente.setPaiement("0"); + + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColReference.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColQuantite.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColRemise.setCellFactory(TextFieldTableCell.forTableColumn()); + + this.ReferenceMouseClick(); + this.QantiteMouseClick(); + this.RemiseMouseClick(); + + TabColAddAction.setSortable(true); + TabColAddAction.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColAddAction.getStyleClass().add("Center"); + TabColAddAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColAddAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new VenteSansFactureCltController.ButtonCell(); + } + }); + + TableViewListeProduit.setItems(data); + CalculeListeProduit(); + + //Ajouter une ligne vide clors ce que en click sur la tableview + TableViewListeProduit.setOnMouseClicked(new EventHandler(){ + public void handle(MouseEvent event){ + int nbrligne = TableViewListeProduit.getItems().size() ; + if(nbrligne == 0){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + } + else{ + ListeProduit Liste = TableViewListeProduit.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + TableViewListeProduit.getSelectionModel().select(nbrligne); + } + } + } + }); + + + RadioButtonEspece.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + GridPaneCheque.setVisible(false); + GridPaneCarteBancaire.setVisible(false); + Vente.setPaiement("0"); + } + }); + RadioButtonCheque.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + GridPaneCheque.setVisible(true); + GridPaneCarteBancaire.setVisible(false); + Vente.setPaiement("1"); + } + }); + RadioButtonCarteBancaire.setOnMouseClicked(new EventHandler() { + public void handle(MouseEvent me) { + GridPaneCheque.setVisible(false); + GridPaneCarteBancaire.setVisible(true); + Vente.setPaiement("2"); + } + }); + + + /**************************Pour TableView Supprimer Vente Sans Facture****************************************/ + TabColCode.setCellValueFactory(new PropertyValueFactory("Code")); + TabColCode.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColCode.getStyleClass().add("Center"); + + TabColDate.setCellValueFactory(new PropertyValueFactory("Date")); + TabColDate.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColDate.getStyleClass().add("Center"); + + TabColNbrProd.setCellValueFactory(new PropertyValueFactory("NbrProd")); + TabColNbrProd.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNbrProd.getStyleClass().add("Center"); + + TabColPaiement.setCellValueFactory(new PropertyValueFactory("Paiement")); + TabColPaiement.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColPaiement.getStyleClass().add("Center"); + TabColPaiement.setCellFactory(new Callback,TableCell>(){ + @Override + public TableCell call(TableColumn param) { + TableCell cell = new TableCell(){ + @Override + public void updateItem(String item, boolean empty) { + //0 :espace | 1:Chèque | 2 :carte bancaire + if(item!= null && item.equals("0")){ + Text text = new Text("Espace"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else if(item!= null && item.equals("1")){ + Text text = new Text("Chèque"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else if(item!= null && item.equals("2")){ + Text text = new Text("Carte Bancaire"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else if(item!= null && item.equals("3")){ + Text text = new Text("Traite"); + text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); + setGraphic(text); + }else{ + setGraphic(null); + } + } + }; + return cell; + } + }); + + TabColNomPrenomClient.setCellValueFactory(new PropertyValueFactory("NomPrenomClient")); + TabColNomPrenomClient.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColNomPrenomClient.getStyleClass().add("Center"); + + TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); + TabColMontant.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColMontant.getStyleClass().add("Center"); + + + TabColOperationAction.setSortable(true); + TabColOperationAction.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColOperationAction.getStyleClass().add("Center"); + TabColOperationAction.setCellValueFactory(new Callback, + ObservableValue>() { + @Override + public ObservableValue call(TableColumn.CellDataFeatures p) { + return new SimpleBooleanProperty(p.getValue() != null); + } + }); + + // create a cell value factory with an add button for each row in the table. + TabColOperationAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn personBooleanTableColumn) { + return new VenteSansFactureCltController.ButtonCellOperation(); + } + + }); + + PaneVenteSansFacture.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchVenteSansFacture(); + } + } + }); + + GestionSearchVenteSansFacture(); + } + + + + @FXML + private void AddLigneButtonAction(ActionEvent event) throws IOException { + int nbrligne = TableViewListeProduit.getItems().size() ; + if(nbrligne == 0){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + } + else{ + ListeProduit Liste = TableViewListeProduit.getItems().get(nbrligne - 1); + if(!Liste.getTotalTTC().isEmpty()){ + data.add(new ListeProduit("","","","","","","","")); + TableViewListeProduit.setItems(data); + TableViewListeProduit.getSelectionModel().select(nbrligne); + } + } + } + + @FXML + private void RechercheProduitButtonAction(ActionEvent event) throws IOException { + + final RechercherProduitController rechercheproduit = new RechercherProduitController(false); + + rechercheproduit.ArrayObjectDataSave = this.getDefaultSaveDataImport(); + + rechercheproduit.Show(); + + rechercheproduit.TabColAction.setCellFactory(new Callback, TableCell>() { + @Override + public TableCell call(TableColumn paramP) { + return new TableCell() { + final Button cellButton = new Button(""); + { + cellButton.getStyleClass().add("btn-icon-primary"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + cellButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent arg0) { + try { + // get Selected ItemButtonCell + rechercheproduit.ArrayObjectDataSave[6] = ((Produit)getTableRow().getItem()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/VenteSansFactureClt.fxml")); + Parent ParentBonReceptionAjouterFXML = (Parent) fxmlLoader.load(); + + VenteSansFactureCltController VenteSansFactureClt = fxmlLoader.getController(); + + VenteSansFactureClt.SetDefaultSaveDataImport(rechercheproduit.ArrayObjectDataSave); + + + MyWindow mywindows = new MyWindow(); + mywindows.Refresh(ParentBonReceptionAjouterFXML, 2); + + + } catch (Exception ex) { + System.out.println("VenteSansFactureClt.RechercheProduitButtonAction"+ex.getMessage()); + } + + } + }); + } + @Override + protected void updateItem(String paramT, boolean isEmpty) { + super.updateItem(paramT, isEmpty); + if (!isEmpty) { + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + }; + } + }); + } + + @FXML + private void SaveVenteButtonAction(ActionEvent event) throws IOException { + + if(data.size() == 0){ + ShowDialog SD = new ShowDialog(); + SD.setTitre("Liste produits"); + SD.setDetail("Vous devez ajouter au moins un produit"); + SD.ShowAletDialog(); + }else{ + if(SetVenteSansFacture()){ + Vente = new VenteSansFactureDB().SetVenteSansFacture(Vente); + } + } + + + if(Vente.getIdVenteSansFacture() != null){ + final DialogSuccessController DialogSuccess = new DialogSuccessController(); + DialogSuccess.Valider.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + try { + DialogSuccess.PaneDialog.setVisible(false); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/VenteSansFactureClt.fxml")); + Parent NodeVenteSansFactureClt = (Parent)fxmlLoader.load(); + PaneVenteSansFacture.getChildren().clear(); + PaneVenteSansFacture.getChildren().add(NodeVenteSansFactureClt); + } catch (IOException ex) { + Logger.getLogger(VenteSansFactureCltController.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + DialogSuccess.Show(); + } + } + + + private void ReferenceMouseClick(){ + TabColReference.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + produit = produitDB.getProduit(t.getNewValue()); + if(produit.getReference() != null){ + ListeProduit Liste = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixventeht(),"0","",produit.getTvavente(),"0"); + AffectationTableView(Liste,t.getTablePosition().getRow()) ; + } + else{ + AffectationTableView(new ListeProduit("","","","","","","",""),t.getTablePosition().getRow()) ; + } + + } + }); + } + + private void QantiteMouseClick(){ + TabColQuantite.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newquantite = t.getNewValue() ; + try{ + newquantite = newquantite.replace(',','.'); + if(Float.parseFloat(newquantite)<1){ + newquantite = "1"; + } + } + catch(NumberFormatException nfe){ + newquantite = "1"; + } + + ListeProduit Liste = t.getRowValue() ; + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un quantité dans un ligne vide + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setQuantite(newquantite); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), newquantite,Liste.getPrixHT(), Liste.getRemise(),"",Liste.getTVA(),""); + //NewList = CalculeProduit(NewList); + AffectationTableView(NewList,t.getTablePosition().getRow()) ; + + } + } + }); + } + + private void AffectationTableView(ListeProduit ListeProd, int EmplacementLigne){ + boolean result = false ; + int indise=0; + int Position = 0; + + if(data.size()>0){ + do{ //Vérifier si le produit exsiste deja + if(data.get(indise).getReference().equals(ListeProd.getReference())){ + result = true ; + Position = indise ; + //System.out.println("existe Position:"+indise); + } + indise++; + }while(data.size()>indise && !result); + + if(result){ //si la ligne exsite déja + if(EmplacementLigne!= -1){ + if(Position == EmplacementLigne){ + data.set(Position, ListeProd); + } + else{ + data.set(EmplacementLigne, new ListeProduit("","","","","","","","")); + } + } + } + else{ + if(EmplacementLigne!= -1){ + data.set(EmplacementLigne, ListeProd); + } + else{ + data.add(ListeProd); + } + } + } + else{ + data.add(ListeProd); + } + + CalculeListeProduit(); + TableViewListeProduit.setItems(data); + TableViewListeProduit.refresh(); + } + + + + + public void SetProduit(Produit produit){ + + //Supprimer les igne vide + if((data.size()>0) && (data.get(data.size()-1).getReference().isEmpty())){ + data.remove(data.size()-1); + } + + if(produit != null){ + ListeProduit ListeProd = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixachatht(),"0",produit.getPrixachatttc(),produit.getTvaachat(),"0"); + AffectationTableView(ListeProd,-1); + } + + } + + private void RemiseMouseClick(){ + TabColRemise.setOnEditCommit(new EventHandler>() { + @Override + public void handle(TableColumn.CellEditEvent t) { + String newRemise = t.getNewValue() ; + try{ + newRemise = newRemise.replace(',','.'); + if(Float.parseFloat(newRemise)<0){ + newRemise = "0"; + } + } + catch(NumberFormatException nfe){ + newRemise = "0"; + } + + ListeProduit Liste = t.getRowValue() ; + + if(Liste.getReference().isEmpty()){ //le cas en ajoute un remise dans un ligne vide + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false); + TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true); + } + else{ + Liste.setRemise(newRemise); + ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), Liste.getQuantite(),Liste.getPrixHT(), newRemise, "", Liste.getTVA(), ""); + AffectationTableView(NewList, t.getTablePosition().getRow()); + } + + } + }); + } + + private void CalculeListeProduit(){ //calculer et afficher la détail des produits + + float Remises = 0; + float totalTVA = 0; + float total_H_T_Net= 0; + + TextMontant.setText(""); + + //calcule + for(ListeProduit liste : data){ + float totaht = Adaptateur.StringToFloat(liste.getTotalHT()) ; + float prix_U_H_T = Adaptateur.StringToFloat(liste.getPrixHT()) ; + float remises = Adaptateur.StringToFloat(liste.getRemise().replace("%", "")) ; + float tva = Adaptateur.StringToFloat(liste.getTVA().replace("%", "")); + float qte = Adaptateur.StringToFloat(liste.getQuantite()); + + totalTVA = totalTVA + ((totaht * tva) /100) ; + + Remises = Remises + (prix_U_H_T * remises)/100 ; + + total_H_T_Net = total_H_T_Net + totaht ; + + } + + if(total_H_T_Net>0){ + float timbre = Adaptateur.StringToFloat(ParametreSystem.Timbre); + netaPayer = total_H_T_Net + totalTVA + timbre ; + Vente.setFMontant(netaPayer); + TextMontant.setText(Adaptateur.FloatToStringEspaceCurrency(netaPayer)); + } + } + + //Define the button cell + private class ButtonCell extends TableCell { + + final Button cellButton = new Button(); + + ButtonCell(){ + cellButton.getStyleClass().add("btn-danger"); + Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphic = new ImageView(); + buttonGraphic.setImage(coffeeImage); + cellButton.setGraphic(buttonGraphic); + + //Action when the button is pressed + cellButton.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + int selectdIndex = getTableRow().getIndex(); + data.remove(selectdIndex); + CalculeListeProduit(); + TableViewListeProduit.setStyle(".table-row-cell:selected{ -fx-background-color:transparent ;}"); + + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + setGraphic(cellButton); + } else { + setGraphic(null); + } + } + } + + + public boolean SetVenteSansFacture() + { + this.Vente.setNomPrenomClient(TextFieldClient.getText()); + this.Vente.setListProduit(data); + this.Vente.setFMontant(netaPayer); + String Montant = this.Vente.getMontant().replace(",","."); + if(this.Vente.getPaiement().equals("0")) + { + return true; + } + else if(this.Vente.getPaiement().equals("1")) + { + ChequeClt Cheque = new ChequeClt(); + Cheque.setNumeroChequeClt(TextFieldNumeroCheque.getText()); + Cheque.setBanqueChequeClt(TextFieldBanqueCheque.getText()); + Cheque.setNomCompletChequeClt(TextFieldNomCompletCheque.getText()); + if(DatePickerDateCheque.getValue() != null){ + Cheque.setDatePaiement(DatePickerDateCheque.getValue().toString()); + } + Cheque.setLocalNom(ParametreSystem.NomLocalPC); + Cheque.setMontantChequeClt(Montant); + this.Vente.setCheque(Cheque); + + if( clt.ContrNull(TextFieldBanqueCheque, TextControlBanqueCheque) && + clt.ContrNull(TextFieldNomCompletCheque, TextControlNomCompletCheque) && + clt.ContrNumeriqueNotnull(TextFieldNumeroCheque, TextControlNumeroCheque) && + clt.ContrNullDatePicker(DatePickerDateCheque, TextControlDateCheque)) + { + return true; + } + + }else if(this.Vente.getPaiement().equals("2")) + { + CarteBancaireClt CarteBancaire = new CarteBancaireClt(); + CarteBancaire.setNumeroCarte(TextFieldNumeroCateCarte.getText()); + CarteBancaire.setNomBanque(TextFieldBanqueCarte.getText()); + CarteBancaire.setNumeroTransation(TextFieldTransationCarte.getText()); + CarteBancaire.setIdProfile(User.idprofile); + CarteBancaire.setLocalNom(ParametreSystem.NomLocalPC); + CarteBancaire.setMontant(Montant); + this.Vente.setCarteBancaire(CarteBancaire); + if( clt.ContrNull(TextFieldTransationCarte, TextControlTransationCarte) && + clt.ContrNumerique(TextFieldNumeroCateCarte, TextControlNumeroCate) ) + { + return true; + } + } + + return false; + } + + public void SetDefaultSaveDataImport(Object[] ArrayObject){ + + if(ArrayObject[0] != null){ + this.data = (ObservableList) ArrayObject[0]; + this.CalculeListeProduit(); + this.TableViewListeProduit.setItems(data); + } + + + if(ArrayObject[1] != null){ + this.Vente = (VenteSansFacture) ArrayObject[1]; + if(this.Vente.getPaiement().equals("1")) + { + if(this.Vente.getCheque() != null){ + TextFieldNumeroCheque.setText(this.Vente.getCheque().getNumeroChequeClt()); + TextFieldBanqueCheque.setText(this.Vente.getCheque().getBanqueChequeClt()); + TextFieldNomCompletCheque.setText(this.Vente.getCheque().getNomCompletChequeClt()); + if(this.Vente.getCheque().getDatePaiement() != null){ + DatePickerDateCheque.setValue(Adaptateur.StringToLocalDate(this.Vente.getCheque().getDatePaiement())); + } + } + + GridPaneCheque.setVisible(true); + RadioButtonCheque.setSelected(true); + }else if(this.Vente.getPaiement().equals("2")) + { + if(this.Vente.getCarteBancaire() != null){ + TextFieldTransationCarte.setText(this.Vente.getCarteBancaire().getNumeroTransation()); + TextFieldBanqueCarte.setText(this.Vente.getCarteBancaire().getNomBanque()); + TextFieldNumeroCateCarte.setText(this.Vente.getCarteBancaire().getNumeroCarte()); + } + GridPaneCarteBancaire.setVisible(true); + RadioButtonCarteBancaire.setSelected(true); + }else{ + RadioButtonEspece.setSelected(true); + } + } + + if(ArrayObject[6] != null){ + this.SetProduit( (Produit) ArrayObject[6] ); + } + + } + + public Object[] getDefaultSaveDataImport(){ + Object[] ArrayObject = new Object[10]; + ArrayObject[0] = this.data; + + SetVenteSansFacture(); + + ArrayObject[1] = this.Vente; + return ArrayObject; + } + + + + + /*********************************************************************************/ + //Define the button cell + private class ButtonCellOperation extends TableCell { + + final Button cellButtonSupprimer = new Button(); + + final Button cellButtonDetail = new Button(); + + ButtonCellOperation(){ + cellButtonSupprimer.getStyleClass().add("btn-danger"); + Image coffeeImageSupprimer = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png")); + ImageView buttonGraphicSupprimer = new ImageView(); + buttonGraphicSupprimer.setImage(coffeeImageSupprimer); + cellButtonSupprimer.setGraphic(buttonGraphicSupprimer); + + //Action when the button is pressed + cellButtonSupprimer.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + + final int selectdIndex = getTableRow().getIndex(); + + ListeVenteSansFacture ListVSF = (ListeVenteSansFacture)getTableRow().getItem(); + final String IdVenteSansFacture = ListVSF.getCode(); + + final VenteSansFacture VSF = new VenteSansFactureDB().getVenteSansFacture(IdVenteSansFacture); + + + final Dialog MyDialog= new Dialog(); + Node node = MyDialog.DialogAlert(); + MyDialog.Titre.setText("Suppression"); + MyDialog.Message.setText("êtes-vous sûr de vouloir supprimer cette vente"); + MyDialog.DefaultAnnuler(); + MyDialog.Titre.setText("Supprimer"); + MyDialog.Valider.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + boolean resultDelete = new VenteSansFactureDB().DeleteVenteSansFacture(VSF); + if(resultDelete){ + ObservableList ListTempVSF = TableViewVenteSansFacture.getItems(); + ListTempVSF.remove(selectdIndex); + TableViewVenteSansFacture.setItems(ListTempVSF); + TableViewVenteSansFacture.refresh(); + } + MyDialog.PaneDialog.setVisible(false); + } + }); + MyDialog.Show(node); + } + }); + + + + cellButtonDetail.getStyleClass().add("btn-primary"); + Image coffeeImageDetail = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); + ImageView buttonGraphicDetail = new ImageView(); + buttonGraphicDetail.setImage(coffeeImageDetail); + cellButtonDetail.setGraphic(buttonGraphicDetail); + + //Action when the button is pressed + cellButtonDetail.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent t) { + ListeVenteSansFacture VenteSansFacture = (ListeVenteSansFacture)getTableRow().getItem(); + String IdVenteSansFacture = VenteSansFacture.getCode(); + + VenteSansFactureCltDetailController VenteSansFactureCltDetail = new VenteSansFactureCltDetailController(); + VenteSansFactureCltDetail.Show(); + VenteSansFactureCltDetail.SetIdVenteSansFacture(IdVenteSansFacture); + } + }); + } + //Display button if the row is not empty + @Override + protected void updateItem(Boolean t, boolean empty) { + if(!empty){ + ListeVenteSansFacture ListVSF = (ListeVenteSansFacture)getTableRow().getItem(); + if(ListVSF.getOperation() != null){ + setGraphic(cellButtonDetail); + }else{ + HBox hbox = new HBox(5); // spacing = 8 + hbox.getChildren().addAll(cellButtonSupprimer, cellButtonDetail); + setGraphic(hbox); + } + } else { + setGraphic(null); + } + } + } + + + + +/****************************************************************************** * + * * + * Methode last Next TableView * + * * * + ******************************************************************************/ + + private void SearchVenteSansFacture() + { + ProgressBarVenteSansFacture.setVisible(true); + + ThreadSearchVenteSansFacture = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + position = 0; + + actuellepage = 1; + + String DateVente = ""; + if(DatePickerDateVente.getValue() != null){ + DateVente = DatePickerDateVente.getValue().toString(); + } + + ObservableList ListVSF = new VenteSansFactureDB().SearchVenteSansFactureGestion( + position, + nbrligne, + TextFieldCode.getText(), + TextFieldMontant.getText(), + DateVente + ); + + TableViewVenteSansFacture.setItems(ListVSF); + + totalcount = new VenteSansFactureDB().nbrVenteSansFactureGestion(TextFieldCode.getText(), TextFieldMontant.getText(), DateVente); + + if(totalcount > 0){ + ActuellePage.setText("1"); + }else{ + ActuellePage.setText("0"); + } + + if(totalcount % nbrligne==0){ + nbrpage = totalcount / nbrligne ; + } + else{ + nbrpage = (totalcount / nbrligne) + 1 ; + } + NbrPage.setText(Integer.toString(nbrpage)); + + return null; + } + }; + } + }; + + ThreadSearchVenteSansFacture.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarVenteSansFacture.setVisible(false); + LabelCount.setText(totalcount.toString()); + + } + }); + ThreadSearchVenteSansFacture.start(); + } + + + private void NextLastSearchVenteSansFacture(Integer ParmPosition, Integer ParamNbrligne) + { + ProgressBarVenteSansFacture.setVisible(true); + + ThreadSearchVenteSansFacture = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + String DateVente = ""; + if(DatePickerDateVente.getValue() != null){ + DateVente = DatePickerDateVente.getValue().toString(); + } + + ObservableList ListVenteSansFacture = new VenteSansFactureDB().SearchVenteSansFactureGestion(ParmPosition, ParamNbrligne, TextFieldCode.getText(), TextFieldMontant.getText(), DateVente); + + TableViewVenteSansFacture.setItems(ListVenteSansFacture); + + return null; + } + }; + } + }; + + ThreadSearchVenteSansFacture.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + ProgressBarVenteSansFacture.setVisible(false); + } + }); + ThreadSearchVenteSansFacture.start(); + } + + private void GestionSearchVenteSansFacture() + { + NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue ov, Number value, Number new_value) { + nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + position=0; + ActuellePage.setText("1"); + actuellepage=1; + NextLastSearchVenteSansFacture(position, nbrligne); + } + }); + + if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} + else{ nbrpage = (totalcount / nbrligne) + 1 ; } + NbrPage.setText(Integer.toString(nbrpage)); + + + //next page + nextgroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage>1) + { + position=position-nbrligne; + NextLastSearchVenteSansFacture(position, nbrligne); + actuellepage=actuellepage-1 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + //next page avec pas de 5 + avancergroupe.setOnMousePressed(new EventHandler(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage+3(){ + @Override + public void handle(MouseEvent event) { + if(actuellepage-3>1){ + position=(position-4)-nbrligne; + NextLastSearchVenteSansFacture(position, nbrligne); + actuellepage=actuellepage-3 ; + ActuellePage.setText(Integer.toString(actuellepage)); + } + } + }); + + } + + + + +} diff --git a/src/main/java/Controllers/VenteRapideClt/VenteSansFactureCltDetailController.java b/src/main/java/Controllers/VenteRapideClt/VenteSansFactureCltDetailController.java new file mode 100644 index 0000000..b0c3dfc --- /dev/null +++ b/src/main/java/Controllers/VenteRapideClt/VenteSansFactureCltDetailController.java @@ -0,0 +1,219 @@ +package Controllers.VenteRapideClt; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +import Models.Produit.ListeProduit; +import Models.User.Profile; +import Models.User.ProfileDB; +import Models.VenteRapideClt.VenteSansFacture; +import Models.VenteRapideClt.VenteSansFactureDB; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.ObservableList; +import javafx.concurrent.Service; +import javafx.concurrent.Task; +import javafx.concurrent.WorkerStateEvent; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.ProgressIndicator; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class VenteSansFactureCltDetailController{ + + @FXML private TableView TableViewListeProduit ; + @FXML private TableColumn TabColReference; + @FXML private TableColumn TabColDesignation; + @FXML private TableColumn TabColQuantite ; + @FXML private TableColumn TabColPrixHT; + @FXML private TableColumn TabColRemise; + @FXML private TableColumn TabColTotalHT; + @FXML private TableColumn TabColTVA; + @FXML private TableColumn TabColTotalTTC; + + @FXML public AnchorPane AnchorPrincipal ; + @FXML public AnchorPane AnchorSecondaire ; + @FXML private ProgressIndicator ProgressVenteSansFact ; + + @FXML public Text TextIdVenteSansFacture; + + @FXML private Text TextVenteAnnuler; + + @FXML private Text TextLocale; + @FXML private Text TextNomPrenomProfile; + @FXML private Text TextDateCreation; + @FXML private Text TextClient; + + @FXML private Text TextTypePaiement; + @FXML private Text TextMontant; + + @FXML private GridPane GridPaneCheque; + @FXML private Text TextNumeroCheque; + @FXML private Text TextNomBanqueCheque ; + @FXML private Text TextDateCheque; + @FXML private Text TextNomComplet; + + @FXML private GridPane GridPaneCarte; + @FXML private Text TextNumeroTransationCarte; + @FXML private Text TextNomBanqueCarte; + @FXML private Text TextNumeroCarte; + + private Service ThreadVenteSansFact; + public Node nodeFxml; + public String IdVenteSansFacture; + + VenteSansFacture VenteSansFact = new VenteSansFacture(); + Profile profile = new Profile(); + + public VenteSansFactureCltDetailController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/VenteRapideClt/VenteSansFactureCltDetail.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + Logger.getLogger(VenteSansFactureCltDetailController.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public void SetIdVenteSansFacture(String id_bon_livraison){ + IdVenteSansFacture = id_bon_livraison; + + TableViewListeProduit.setEditable(true); + TabColReference.setCellValueFactory(new PropertyValueFactory("reference")); + TabColDesignation.setCellValueFactory(new PropertyValueFactory("designation")); + + TabColQuantite.setCellValueFactory(new PropertyValueFactory("quantite")); + TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColQuantite.getStyleClass().add("Center"); + + TabColPrixHT.setCellValueFactory(new PropertyValueFactory("PrixHT")); + TabColPrixHT.setStyle( "-fx-alignment: CENTER;"); + TabColPrixHT.getStyleClass().add("Center"); + + TabColRemise.setCellValueFactory(new PropertyValueFactory("Remise")); + TabColRemise.setStyle( "-fx-alignment: CENTER;"); + TabColRemise.getStyleClass().add("Center"); + + TabColTotalHT.setCellValueFactory(new PropertyValueFactory("TotalHT")); + TabColTotalHT.setStyle( "-fx-alignment: CENTER;"); + TabColTotalHT.getStyleClass().add("Center"); + + TabColTVA.setCellValueFactory(new PropertyValueFactory("TVA")); + TabColTVA.setStyle( "-fx-alignment: CENTER;"); + TabColTVA.getStyleClass().add("Center"); + + TabColTotalTTC.setCellValueFactory(new PropertyValueFactory("TotalTTC")); + TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); + TabColTotalTTC.getStyleClass().add("Center"); + + TabColReference.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColQuantite.setCellFactory(TextFieldTableCell.forTableColumn()); + TabColRemise.setCellFactory(TextFieldTableCell.forTableColumn()); + + LanchVenteSansFact(); + } + + public void LanchVenteSansFact(){ + ThreadVenteSansFact = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + VenteSansFact = new VenteSansFactureDB().getVenteSansFacture(IdVenteSansFacture); + profile = new ProfileDB().getpro(VenteSansFact.getIdProfile()); + return null; + } + }; + } + }; + ThreadVenteSansFact.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event){ + TextIdVenteSansFacture.setText(VenteSansFact.getIdVenteSansFacture()); + + // 0:espèce | 1:chèque | 2:Carte bancaire + if(VenteSansFact.getPaiement().equals("0")){ + TextTypePaiement.setText("Espèce") ; + GridPaneCheque.setVisible(false); + GridPaneCarte.setVisible(false); + }else if(VenteSansFact.getPaiement().equals("1")){ + TextTypePaiement.setText("Chèque"); + GridPaneCheque.setVisible(true); + GridPaneCarte.setVisible(false); + TextNumeroCheque.setText(VenteSansFact.getCheque().getNumeroChequeClt()); + TextNomBanqueCheque.setText(VenteSansFact.getCheque().getBanqueChequeClt()); + TextDateCheque.setText(Adaptateur.NormalDateFormat(VenteSansFact.getCheque().getDatePaiement())); + TextNomComplet.setText(VenteSansFact.getCheque().getNomCompletChequeClt()); + }else if(VenteSansFact.getPaiement().equals("2")){ + TextTypePaiement.setText("Carte bancaire"); + TextNumeroTransationCarte.setText(VenteSansFact.getCarteBancaire().getNumeroTransation()); + TextNomBanqueCarte.setText(VenteSansFact.getCarteBancaire().getNomBanque()); + TextNumeroCarte.setText(VenteSansFact.getCarteBancaire().getNumeroCarte()); + GridPaneCheque.setVisible(false); + GridPaneCarte.setVisible(true); + } + + if(VenteSansFact.getOperation() != null){ + TextVenteAnnuler.setText("Vente Annuler Le: "+Adaptateur.NormalDateTimeFormat(VenteSansFact.getDateOperation())); + } + + TextLocale.setText(VenteSansFact.getLocalNom()); + TextNomPrenomProfile.setText(profile.getNom()+" "+profile.getPrenom()) ; + + TextDateCreation.setText(VenteSansFact.getDateVente()); + + TextClient.setText(VenteSansFact.getNomPrenomClient()); + + TextMontant.setText(Adaptateur.StringToStringEspaceCurrency(VenteSansFact.getMontant())); + + ObservableList DataListeProduit = VenteSansFact.getListProduit(); + TableViewListeProduit.setItems(DataListeProduit); + + ProgressVenteSansFact.setVisible(false); + AnchorSecondaire.setVisible(true); + } + }); + ThreadVenteSansFact.start(); + } + + + + public void Show() + { + StackPane Sp = new StackPane(); + + Scene scene = new Scene(Sp); + + Sp.setPrefSize((double)MyWindow.PrincipalContentWidth, (double)MyWindow.PrincipalContentHeight); + + Sp.getChildren().add(MyWindow.myParent); + Sp.getChildren().add(nodeFxml); + + Stage stage = MyWindow.myStage; + stage.setScene(scene); + stage.show(); + } + + @FXML + private void ExitButtonAction(ActionEvent event) throws IOException { + AnchorPrincipal.setVisible(false); + } + +} diff --git a/src/main/java/Models/BonLivraisonClt/BonLivraisonClt.java b/src/main/java/Models/BonLivraisonClt/BonLivraisonClt.java new file mode 100644 index 0000000..155df44 --- /dev/null +++ b/src/main/java/Models/BonLivraisonClt/BonLivraisonClt.java @@ -0,0 +1,240 @@ +/* + * 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.BonLivraisonClt; + +import Models.Produit.ListeProduit; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import javafx.collections.ObservableList; + +/** + * + * @author maher + */ +public class BonLivraisonClt { + + public String IdBonLivrasionClt; + public String HeurLivraison; + public String DateLivraisonPreveu; + public String AdresseLivraison; + public String IdCommande; + public String IdProfileEditeur; + public String Transporteur; + public String Frais; + public String PoidProduit; + public String DateCreation; + public String LocalNom; + public String Tele1; + public String Tele2; + + public Integer TypeClient; //0 Personne 1 Entreprise 2 Passager + public Client CltPersonne ; + public ClientEntreprise CltEntreprise ; + public ClientPassager CltPassager ; + + public String Devise; + public String TotalHorsTaxNet; + public String TotalTVA; + public String Remise; + public String NetAPayer; + + public ObservableList listeproduit ; + + public String getIdBonLivrasionClt() { + return IdBonLivrasionClt; + } + + public void setIdBonLivrasionClt(String IdBonLivrasionClt) { + this.IdBonLivrasionClt = IdBonLivrasionClt; + } + + public String getHeurLivraison() { + return HeurLivraison; + } + + public void setHeurLivraison(String HeurLivraison) { + this.HeurLivraison = HeurLivraison; + } + + public String getDateLivraisonPreveu() { + return DateLivraisonPreveu; + } + + public void setDateLivraisonPreveu(String DateLivraisonPreveu) { + this.DateLivraisonPreveu = DateLivraisonPreveu; + } + + public String getAdresseLivraison() { + return AdresseLivraison; + } + + public void setAdresseLivraison(String AdresseLivraison) { + this.AdresseLivraison = AdresseLivraison; + } + + public String getIdCommande() { + return IdCommande; + } + + public void setIdCommande(String IdCommande) { + this.IdCommande = IdCommande; + } + + public String getIdProfileEditeur() { + return IdProfileEditeur; + } + + public void setIdProfileEditeur(String IdProfileEditeur) { + this.IdProfileEditeur = IdProfileEditeur; + } + + public String getTransporteur() { + return Transporteur; + } + + public void setTransporteur(String Transporteur) { + this.Transporteur = Transporteur; + } + + public String getFrais() { + return Frais; + } + + public void setFrais(String Frais) { + this.Frais = Frais; + } + + + + public String getPoidProduit() { + return PoidProduit; + } + + public void setPoidProduit(String PoidProduit) { + this.PoidProduit = PoidProduit; + } + + + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + public Client getCltPersonne() { + return CltPersonne; + } + + public void setCltPersonne(Client CltPersonne) { + this.CltPersonne = CltPersonne; + } + + public ClientEntreprise getCltEntreprise() { + return CltEntreprise; + } + + public void setCltEntreprise(ClientEntreprise CltEntreprise) { + this.CltEntreprise = CltEntreprise; + } + + public ClientPassager getCltPassager() { + return CltPassager; + } + + public void setCltPassager(ClientPassager CltPassager) { + this.CltPassager = CltPassager; + } + + public ObservableList getListeproduit() { + return listeproduit; + } + + public void setListeproduit(ObservableList listeproduit) { + this.listeproduit = listeproduit; + } + + public String getDateCreation() { + return DateCreation; + } + + public void setDateCreation(String DateCreation) { + this.DateCreation = DateCreation; + } + + public String getTele1() { + return Tele1; + } + + public void setTele1(String Tele1) { + this.Tele1 = Tele1; + } + + public String getTele2() { + return Tele2; + } + + public void setTele2(String Tele2) { + this.Tele2 = Tele2; + } + + public Integer getTypeClient() { + return TypeClient; + } + + public void setTypeClient(Integer TypeClient) { + this.TypeClient = TypeClient; + } + + public String getDevise() { + return Devise; + } + + public void setDevise(String Devise) { + this.Devise = Devise; + } + + public String getTotalHorsTaxNet() { + return TotalHorsTaxNet; + } + + public void setTotalHorsTaxNet(String TotalHorsTaxNet) { + this.TotalHorsTaxNet = TotalHorsTaxNet; + } + + public String getTotalTVA() { + return TotalTVA; + } + + public void setTotalTVA(String TotalTVA) { + this.TotalTVA = TotalTVA; + } + + public String getRemise() { + return Remise; + } + + public void setRemise(String Remise) { + this.Remise = Remise; + } + + public String getNetAPayer() { + return NetAPayer; + } + + public void setNetAPayer(String NetAPayer) { + this.NetAPayer = NetAPayer; + } + + + + + + +} diff --git a/src/main/java/Models/BonLivraisonClt/BonLivraisonCltDB.java b/src/main/java/Models/BonLivraisonClt/BonLivraisonCltDB.java new file mode 100644 index 0000000..7b60272 --- /dev/null +++ b/src/main/java/Models/BonLivraisonClt/BonLivraisonCltDB.java @@ -0,0 +1,417 @@ +/* + * 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.BonLivraisonClt; + +import Controllers.Traitement.Adaptateur; +import Models.Produit.ListeProduit; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.Stock.StockDetail; +import Models.Stock.StockDetailDB; +import Models.User.User; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author maher + */ +public class BonLivraisonCltDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + public BonLivraisonClt GetBonLivraisonClt(String id_bon_livraison){ + BonLivraisonClt BonLivraison = new BonLivraisonClt(); + + String req = "SELECT *, DATE_FORMAT(date_livraison_prevu, '%d/%m/%Y') as date_livraison, DATE_FORMAT(date_creation, '%d/%m/%Y') as creation FROM bon_livraisonclt WHERE (idbon_livraisonclt = "+id_bon_livraison+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + + if(cnx.ouverture()){ + try{ + 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){ + BonLivraison.setIdBonLivrasionClt(resultat.getString("idbon_livraisonclt")); + BonLivraison.setIdCommande(resultat.getString("id_commandeclt")); + BonLivraison.setHeurLivraison(resultat.getString("heur_livraison")); + BonLivraison.setDateLivraisonPreveu(resultat.getString("date_livraison")); + BonLivraison.setAdresseLivraison(resultat.getString("adresse_livraison")); + BonLivraison.setTransporteur(resultat.getString("transporteur")); + BonLivraison.setFrais(resultat.getString("frais")); + BonLivraison.setPoidProduit(resultat.getString("Poids_ produits")); + BonLivraison.setTele1(resultat.getString("tele1")); + BonLivraison.setTele2(resultat.getString("tele2")); + BonLivraison.setDevise(resultat.getString("devise")); + BonLivraison.setTotalHorsTaxNet(resultat.getString("total_h_t_net")); + BonLivraison.setTotalTVA(resultat.getString("total_tva")); + BonLivraison.setRemise(resultat.getString("remise")); + BonLivraison.setNetAPayer(resultat.getString("net_a_payer")); + BonLivraison.setIdProfileEditeur(resultat.getString("idprofile_editeur")); + BonLivraison.setDateCreation(resultat.getString("creation")); + BonLivraison.setLocalNom(resultat.getString("local_nom")); + + BonLivraison.setTypeClient(resultat.getInt("type_client")); + + if(BonLivraison.getTypeClient()==0){ + + cnx.ouverture(); + String Codeclient = resultat.getString("id_clt_existe"); + String reqclt = "SELECT * FROM `client` WHERE (`codeclient` = '"+Codeclient+"') AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ; "; + + ResultSet resuclt = cnx.excutionquery(reqclt); + resuclt.last(); + Client CltPersonne = new Client(); + CltPersonne.setCodeclientString(resuclt.getString("codeclient")); + CltPersonne.setNom(resuclt.getString("nom")); + CltPersonne.setPrenom(resuclt.getString("prenom")); + CltPersonne.setAdresse(resuclt.getString("adresse")); + CltPersonne.setTelefixString(resuclt.getString("telefix")); + CltPersonne.setTelemobileString(resuclt.getString("telemobile")); + BonLivraison.setCltPersonne(CltPersonne); + } + + if(BonLivraison.getTypeClient()==1){ + cnx.ouverture(); + String Codeclient = resultat.getString("id_clt_entreprise"); + String reqclt = "SELECT * FROM `cltentreprise` WHERE (`idcliententreprise` = '"+Codeclient+"') AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ; "; + ResultSet resucltetr = cnx.excutionquery(reqclt); + resucltetr.last(); + ClientEntreprise CltEntreprise = new ClientEntreprise(); + CltEntreprise.setCodeString(resucltetr.getString("idcliententreprise")); + CltEntreprise.setNom(resucltetr.getString("nomentrepise")); + CltEntreprise.setMatricule(resucltetr.getString("matricule_fiscale")); + CltEntreprise.setAdresse(resucltetr.getString("adresse")); + CltEntreprise.setTele1String(resucltetr.getString("telefix")); + CltEntreprise.setTele2String(resucltetr.getString("telefix2")); + BonLivraison.setCltEntreprise(CltEntreprise); + } + + if(BonLivraison.getTypeClient()==2){ + cnx.ouverture(); + String Codeclient = resultat.getString("id_clt_passageur"); + String reqclt = "SELECT * FROM `cltpassageur` WHERE (`idcltpassageur` = '"+Codeclient+"') AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ; "; + ResultSet resucltpa = cnx.excutionquery(reqclt); + resucltpa.last(); + ClientPassager CltPassager = new ClientPassager(); + CltPassager.setCodeclient(resucltpa.getString("idcltpassageur")); + CltPassager.setNom(resucltpa.getString("nom")); + CltPassager.setPrenom(resucltpa.getString("prenom")); + CltPassager.setAdresse(resucltpa.getString("adresse")); + CltPassager.setTelemobileString(resucltpa.getString("tele")); + CltPassager.setTelefixString(resucltpa.getString("gsm")); + BonLivraison.setCltPassager(CltPassager); + } + + + cnx.ouverture(); + String reqprod = "SELECT * FROM liste_prod_livraison WHERE (id_bon_livraison_clt = "+id_bon_livraison+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ResultSet resulist = cnx.excutionquery(reqprod); + //on repace le curseur avant la première ligne + resulist.beforeFirst(); + ObservableList dataProdDev=FXCollections.observableArrayList(); + while ( resulist.next() ) { + String reference = resulist.getString("produit_reference"); + String designation = resulist.getString("designation_produit"); + String quantite=resulist.getString("quantite"); + String PrixHT =resulist.getString("p_u_h_t"); + String Remise =resulist.getString("remise"); + String TotalHT =resulist.getString("p_u_h_t_net"); + String TVA =resulist.getString("tva"); + String TotalTTC =resulist.getString("montant"); + dataProdDev.add(new ListeProduit(reference, designation, quantite, PrixHT, Remise, TotalHT, TVA, TotalTTC)); + } + BonLivraison.setListeproduit(dataProdDev); + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return BonLivraison; + } + + + + + + + + + public String AddBonLivraisonClt(BonLivraisonClt bon_livraison){ + contro clt = new contro(); + + String netapayer = bon_livraison.getNetAPayer().replace(",", "."); + String totalhorstaxnet =bon_livraison.getTotalHorsTaxNet().replace(",", "."); + String totaltva = bon_livraison.getTotalTVA().replace(",", "."); + String TotalRemise = bon_livraison.getRemise().replace(",", "."); + + Integer TypeClient = bon_livraison.getTypeClient(); + String CodeClientPersonne = "NULL"; String CodeClientEntreprise = "NULL"; String CodePassager = "NULL"; + if(TypeClient == 0){ + CodeClientPersonne = bon_livraison.CltPersonne.getCodeclient().toString(); + }else if(TypeClient == 1 ){ + CodeClientEntreprise = bon_livraison.CltEntreprise.getCode().toString(); + }else if(TypeClient == 2){ + CodePassager = bon_livraison.CltPassager.getCodeclient().toString(); + } + + String HeurLivraison = "'"+bon_livraison.getHeurLivraison()+"'"; + if(clt.isStringNull(bon_livraison.getHeurLivraison())){ + HeurLivraison = "NULL"; + } + + String DateLivraison = "'"+bon_livraison.getDateLivraisonPreveu()+"'"; + if(clt.isStringNull(bon_livraison.getDateLivraisonPreveu())){ + DateLivraison = "NULL"; + } + + String PoidsProduits = bon_livraison.getPoidProduit(); + if(clt.isStringNull(bon_livraison.getPoidProduit())){ + PoidsProduits = "NULL"; + } + + String Transporteur = "'"+bon_livraison.getTransporteur()+"'"; + if(clt.isStringNull(bon_livraison.getTransporteur())){ + Transporteur = "NULL"; + } + + String Frais = "'"+bon_livraison.getFrais()+"'"; + if(clt.isStringNull(bon_livraison.getFrais())){ + Frais = "NULL"; + } + + String sql = "INSERT INTO bon_livraisonclt (`type_client`, `id_clt_entreprise`, `id_clt_passageur`, `id_clt_existe`, `heur_livraison`, `date_livraison_prevu`, `adresse_livraison`, `transporteur`, `frais`, `Poids_ produits`, `tele1`, `tele2`, `devise`, `total_h_t_net`, `total_tva`, `remise`, `net_a_payer`, `id_commandeclt`, `idprofile_editeur`, `date_creation`, `local_nom`) VALUES ("+TypeClient+", "+CodeClientEntreprise+", "+CodePassager+", "+CodeClientPersonne+", "+HeurLivraison+", "+DateLivraison+", \""+bon_livraison.getAdresseLivraison()+"\", "+Transporteur+", "+Frais+", "+PoidsProduits+", '"+bon_livraison.getTele1()+"', '"+bon_livraison.getTele2()+"', '"+ParametreSystem.CurrencySign+"', '"+totalhorstaxnet+"', '"+totaltva+"', '"+TotalRemise+"', '"+netapayer+"', '"+bon_livraison.getIdCommande()+"', '"+User.idprofile+"', CURTIME(), '"+ParametreSystem.NomLocalPC+"');"; + + String CodeBonLivraison = cnx.InsertGetLastId(sql); + + ObservableList ListStockDetail=FXCollections.observableArrayList(); + + String PrixHT ; String Remise ; String TotalHT ; String TVA ; String TotalTTC ; + for(ListeProduit listeprod : bon_livraison.getListeproduit()){ + PrixHT = listeprod.getPrixHT().replace(",","."); + Remise= listeprod.getRemise().replace("%","").replace(",","."); + TotalHT= listeprod.getTotalHT().replace(",","."); + TVA=listeprod.getTVA().replace("%","").replace(",","."); + TotalTTC= listeprod.getTotalTTC().replace(",","."); + + String Query = "INSERT INTO liste_prod_livraison (`id_bon_livraison_clt`, `produit_reference`, `designation_produit`, `quantite`, `p_u_h_t`, `remise`, `p_u_h_t_net`, `tva`, `montant`, `local_nom`) VALUES ('"+CodeBonLivraison+"', '"+listeprod.getReference()+"', \""+listeprod.getDesignation()+"\", "+listeprod.getQuantite()+", "+PrixHT+", '"+Remise+"', '"+TotalHT+"', '"+TVA+"', '"+TotalTTC+"', '"+ParametreSystem.NomLocalPC+"');"; + if(cnx.insertion(Query)){ + ListStockDetail.add(new StockDetail(listeprod.getReference(), Adaptateur.StringToFloat(listeprod.getQuantite())* -1, null, null, CodeBonLivraison, null, null, null)); + } + } + new StockDetailDB().InsertStockDetail(ListStockDetail); + + return CodeBonLivraison; + } + + public ObservableList GetListBonLivraisonCltSotck(ObservableList DataListeproduit){ + + Integer indice = 0; + + String StringReference = ""; + while(indice BonLivraisonCltProduit = FXCollections.observableArrayList(); + + String Query = "SELECT P.reference, P.marque, P.nomcategorie_cate, S.local_nom, S.quantite FROM produit P LEFT JOIN stock S ON (P.reference = S.produit_reference) AND (local_nom LIKE '"+ParametreSystem.NomLocalPC+"') WHERE P.reference IN ("+StringReference+"); "; + + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery(Query); + resultat.beforeFirst(); + + while ( resultat.next() ) { + String Reference = resultat.getString("reference"); + String Marque = resultat.getString("marque"); + String Category =resultat.getString("nomcategorie_cate"); + String QuantiteStock =resultat.getString("quantite"); + Float quantite_stock =resultat.getFloat("quantite"); + + boolean search = true; + indice = 0; + while( (indice quantite_stock){ + ProdDisponible = "0"; + } + BonLivraisonCltProduit.add(new BonLivraisonCltProduitList(DataListeproduit.get(indice).getReference(), DataListeproduit.get(indice).getDesignation(), Marque, Category, ProdDisponible, DataListeproduit.get(indice).getQuantite(), QuantiteStock, DataListeproduit.get(indice).getTotalHT())); + search = false; + } + indice ++; + } + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + + return BonLivraisonCltProduit; + } + + /********************************** Search *******************************/ + + public ObservableList SearchBonLivraisonCltGestion(Integer debut, Integer nbr, String IdBonLivrasionClt, String DateLivraison, String CodeClient, String IdFactureClt, String Transporteur, String AdresseLivraison) + { + ObservableList data = FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(IdBonLivrasionClt)){ + Where += " (bl_clt.idbon_livraisonclt LIKE \"%"+Adaptateur.addSlashes(IdBonLivrasionClt)+"%\") AND "; + } + + if(!clt.isStringNull(DateLivraison)){ + Where += " (bl_clt.date_livraison_prevu LIKE \""+DateLivraison+"\") AND "; + } + + if(!clt.isStringNull(CodeClient)){ + Where += " ( (bl_clt.id_clt_existe = \""+CodeClient+"\") OR (bl_clt.id_clt_entreprise = \""+CodeClient+"\") OR (bl_clt.id_clt_passageur = \""+CodeClient+"\") ) AND "; + } + + + if(!clt.isStringNull(IdFactureClt)){ + Where += " (f_clt.idfactureclt LIKE \"%"+Adaptateur.addSlashes(IdFactureClt)+"%\") AND "; + } + + if(!clt.isStringNull(Transporteur)){ + Where += " (bl_clt.transporteur LIKE \"%"+Adaptateur.addSlashes(Transporteur)+"%\") AND "; + } + + if(!clt.isStringNull(AdresseLivraison)){ + Where += " (bl_clt.adresse_livraison LIKE \"%"+Adaptateur.addSlashes(AdresseLivraison)+"%\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req="SELECT "+ + "bl_clt.idbon_livraisonclt, "+ + "DATE_FORMAT(bl_clt.heur_livraison, '%H:%i') AS heur_livraison, "+ + "DATE_FORMAT(bl_clt.date_livraison_prevu, '%d/%m/%Y') AS date_livraison_prevu, "+ + "bl_clt.adresse_livraison, "+ + "bl_clt.transporteur, "+ + "bl_clt.id_commandeclt AS IdCommandeClt, "+ + "f_clt.idfactureclt AS IdFactureClt, "+ + "IF(bl_clt.id_clt_entreprise IS NOT NULL, "+ + "bl_clt.id_clt_entreprise, "+ + "IF(bl_clt.id_clt_existe IS NOT NULL, "+ + "bl_clt.id_clt_existe, "+ + "IF(bl_clt.id_clt_passageur, "+ + "bl_clt.id_clt_passageur, "+ + "NULL))) AS CodeClt "+ + " FROM `bon_livraisonclt` bl_clt "+ + " LEFT JOIN factureclt f_clt ON f_clt.id_bon_livraisonclt = bl_clt.idbon_livraisonclt "+ + Where + + " ORDER BY bl_clt.date_creation 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() ) { + + data.add(new BonLivraisonCltGestionList( + resultat.getString("idbon_livraisonclt"), + resultat.getString("date_livraison_prevu")+" "+resultat.getString("heur_livraison"), + resultat.getString("adresse_livraison"), + resultat.getString("CodeClt"), + resultat.getString("IdFactureClt"), + resultat.getString("transporteur") + )); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + + return data ; + } + + + public Integer nbrSearchBonLivraisonCltGestion(String IdBonLivrasionClt, String DateLivraison, String CodeClient, String IdFactureClt, String Transporteur, String AdresseLivraison) + { + String Where = ""; + + if(!clt.isStringNull(IdBonLivrasionClt)){ + Where += " (bl_clt.idbon_livraisonclt LIKE \"%"+Adaptateur.addSlashes(IdBonLivrasionClt)+"%\") AND "; + } + + if(!clt.isStringNull(DateLivraison)){ + Where += " (bl_clt.date_livraison_prevu LIKE \""+DateLivraison+"\") AND "; + } + + if(!clt.isStringNull(CodeClient)){ + Where += " ( (bl_clt.id_clt_existe = \""+CodeClient+"\") OR (bl_clt.id_clt_entreprise = \""+CodeClient+"\") OR (bl_clt.id_clt_passageur = \""+CodeClient+"\") ) AND "; + } + + + if(!clt.isStringNull(IdFactureClt)){ + Where += " (f_clt.idfactureclt LIKE \"%"+Adaptateur.addSlashes(IdFactureClt)+"%\") AND "; + } + + if(!clt.isStringNull(Transporteur)){ + Where += " (bl_clt.transporteur LIKE \"%"+Adaptateur.addSlashes(Transporteur)+"%\") AND "; + } + + if(!clt.isStringNull(AdresseLivraison)){ + Where += " (bl_clt.adresse_livraison LIKE \"%"+Adaptateur.addSlashes(AdresseLivraison)+"%\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req=" SELECT COUNT(bl_clt.idbon_livraisonclt) "+ + " FROM `bon_livraisonclt` bl_clt "+ + " LEFT JOIN factureclt f_clt ON f_clt.id_bon_livraisonclt = bl_clt.idbon_livraisonclt "+ + 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 ; + } +} diff --git a/src/main/java/Models/BonLivraisonClt/BonLivraisonCltGestionList.java b/src/main/java/Models/BonLivraisonClt/BonLivraisonCltGestionList.java new file mode 100644 index 0000000..36f90dd --- /dev/null +++ b/src/main/java/Models/BonLivraisonClt/BonLivraisonCltGestionList.java @@ -0,0 +1,53 @@ +package Models.BonLivraisonClt; + +import javafx.beans.property.SimpleStringProperty; + +/** + * @author maher + */ +public class BonLivraisonCltGestionList { + + private final SimpleStringProperty IdBonLivrasionClt; + private final SimpleStringProperty DateHeurLivraison; + private final SimpleStringProperty AdresseLivraison; + private final SimpleStringProperty CodeClt; + private final SimpleStringProperty IdFactureClt; + private final SimpleStringProperty Transporteur; + + + + public BonLivraisonCltGestionList(String IdBonLivrasionClt, String DateHeurLivraison, String AdresseLivraison, String CodeClt, String IdFactureClt, String Transporteur) { + this.IdBonLivrasionClt = new SimpleStringProperty(IdBonLivrasionClt); + this.DateHeurLivraison = new SimpleStringProperty(DateHeurLivraison); + this.AdresseLivraison = new SimpleStringProperty(AdresseLivraison); + this.CodeClt = new SimpleStringProperty(CodeClt); + this.IdFactureClt = new SimpleStringProperty(IdFactureClt); + this.Transporteur = new SimpleStringProperty(Transporteur); + } + + + public String getIdBonLivrasionClt() { + return IdBonLivrasionClt.get(); + } + + public String getDateHeurLivraison() { + return DateHeurLivraison.get(); + } + + public String getCodeClt() { + return CodeClt.get(); + } + + public String getIdFactureClt() { + return IdFactureClt.get(); + } + + public String getAdresseLivraison() { + return AdresseLivraison.get(); + } + + public String getTransporteur() { + return Transporteur.get(); + } + +} diff --git a/src/main/java/Models/BonLivraisonClt/BonLivraisonCltProduitList.java b/src/main/java/Models/BonLivraisonClt/BonLivraisonCltProduitList.java new file mode 100644 index 0000000..ec3d60d --- /dev/null +++ b/src/main/java/Models/BonLivraisonClt/BonLivraisonCltProduitList.java @@ -0,0 +1,67 @@ +/* + * 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.BonLivraisonClt; + +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class BonLivraisonCltProduitList { + + private final SimpleStringProperty Reference; + private final SimpleStringProperty Designation; + private final SimpleStringProperty Marque; + private final SimpleStringProperty Categorie; + private final SimpleStringProperty ProdDisponible; + private final SimpleStringProperty QuantiteProd; + private final SimpleStringProperty QuantiteStock; + private final SimpleStringProperty PrixTTC; + + public BonLivraisonCltProduitList(String reference, String designation, String marque, String categorie, String prod_disp, String quantite_prod, String quantite_stock, String prix_ttc) { + this.Reference = new SimpleStringProperty(reference); + this.Designation = new SimpleStringProperty(designation); + this.Marque = new SimpleStringProperty(marque); + this.Categorie = new SimpleStringProperty(categorie); + this.ProdDisponible = new SimpleStringProperty(prod_disp); + this.QuantiteProd = new SimpleStringProperty(quantite_prod); + this.QuantiteStock = new SimpleStringProperty(quantite_stock); + this.PrixTTC = new SimpleStringProperty(prix_ttc); + } + + public String getReference() { + return Reference.get(); + } + + public String getDesignation() { + return Designation.get(); + } + + public String getMarque() { + return Marque.get(); + } + + public String getCategorie() { + return Categorie.get(); + } + + public String getProdDisponible() { + return ProdDisponible.get(); + } + + public String getQuantiteProd() { + return QuantiteProd.get(); + } + + public String getQuantiteStock() { + return QuantiteStock.get(); + } + + public String getPrixTTC() { + return PrixTTC.get(); + } +} diff --git a/src/main/java/Models/BonReceptionFrs/BonReceptionDB.java b/src/main/java/Models/BonReceptionFrs/BonReceptionDB.java new file mode 100644 index 0000000..b8bdff5 --- /dev/null +++ b/src/main/java/Models/BonReceptionFrs/BonReceptionDB.java @@ -0,0 +1,238 @@ +/* + * 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.BonReceptionFrs; + +import Controllers.Traitement.Adaptateur; +import static Controllers.Traitement.Adaptateur.StringToFloat; +import Models.Fournisseur.Fournisseur; +import Models.Fournisseur.FournisseurDB; +import Models.Stock.StockDetail; +import Models.Stock.StockDetailDB; +import Models.User.Profile; +import Models.User.ProfileDB; +import Models.User.User; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author Maher + */ +public class BonReceptionDB { + + connexion cnx = new connexion(); + + + + public BonReceptionFrs setBonReceptionFrsDB(BonReceptionFrs BonReception){ + + String Fournisseur = BonReception.getFournisseur().getCode(); + String Numero = BonReception.getNumero(); + String Transporteur = "NULL"; + if(BonReception.getTransporteur() != ""){ + Transporteur = "'"+BonReception.getTransporteur()+"'"; + } + String NetPayer = BonReception.getNetPayer().replace(",", "."); + + String Heur = BonReception.getHeur(); + String Date = BonReception.getDate(); + String Local = BonReception.getLocal(); + String IdFactureFrs = "NULL"; + if(BonReception.getIdFactureFrs() != ""){ + IdFactureFrs = BonReception.getIdFactureFrs(); + } + String PoidsProduits = "NULL"; + if(BonReception.getPoidsProduits()!= ""){ + PoidsProduits = BonReception.getPoidsProduits(); + } + ObservableList ListProduit = BonReception.getListProduit(); + + String Query = "INSERT INTO `bonreception_frs` (`numero`, `date_reception`, `transporteur`, `net_a_payer`, `id_fournisseur`, `local_reception`, `id_profile`, `id_facture_frs`) VALUES ('"+Numero+"', '"+Date+" "+Heur+"', "+Transporteur+", "+NetPayer+", '"+Fournisseur+"', '"+Local+"', '"+User.idprofile+"', "+IdFactureFrs+")"; + + String IdBonReception = cnx.InsertGetLastId(Query); + BonReception.setIdBonReception(IdBonReception); + + ObservableList ListStockDetail = FXCollections.observableArrayList(); + + String Req = "INSERT INTO `list_prod_reception_frs` (`id_bonreception_frs`, `reference`, `quantite`, `p_u_h_t`, `p_u_h_t_net`, `tva`, `montant`) VALUES "; + for(int i=0; i0){ + BonReception.setIdBonReception(resultat.getString("id_bonreception")); + BonReception.setNumero(resultat.getString("numero")); + BonReception.setDate(resultat.getString("date_recep")); + BonReception.setHeur(resultat.getString("heur_recep")); + BonReception.setTransporteur(resultat.getString("transporteur")); + BonReception.setNetPayer(resultat.getString("net_a_payer").replace(".", ",")); + Fournisseur Frs = new FournisseurDB().GetFournisseurDB(resultat.getString("id_fournisseur")); + BonReception.setFournisseur(Frs); + BonReception.setLocal(resultat.getString("local_reception")); + + Profile profile = new ProfileDB().getpro(resultat.getInt("id_profile")); + BonReception.setProfile(profile); + + BonReception.setListProduit(this.getBonReceptionProduitList(IdBonReception)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.err.println(Query); + } + } + return BonReception ; + } + + + + public ObservableList getBonReceptionProduitList(String IdBonReception) + { + String Query = "SELECT * FROM `list_prod_reception_frs`, `produit` WHERE (`id_bonreception_frs` = "+IdBonReception+") AND (list_prod_reception_frs.reference = produit.reference) ;"; + + ObservableList ObservableListBonReceptionProduit= FXCollections.observableArrayList(); + + if(cnx.ouverture()) + { + try{ + ResultSet ResultListBonRecepProd = cnx.excutionquery(Query); + ResultListBonRecepProd.beforeFirst(); + while (ResultListBonRecepProd.next() ) { + String id_achat = ResultListBonRecepProd.getString("id_achat"); + String id_bon_reception = ResultListBonRecepProd.getString("id_bonreception_frs"); + String designation = ResultListBonRecepProd.getString("designation"); + String reference = ResultListBonRecepProd.getString("reference"); + String quantite = ResultListBonRecepProd.getString("quantite"); + String p_u_h_t = ResultListBonRecepProd.getString("p_u_h_t"); + String p_u_h_t_net = ResultListBonRecepProd.getString("p_u_h_t_net"); + String tva = ResultListBonRecepProd.getString("tva"); + String montant = ResultListBonRecepProd.getString("montant"); + ObservableListBonReceptionProduit.add(new BonReceptionProduitList(id_achat, id_bon_reception, reference, designation, quantite, p_u_h_t, p_u_h_t_net, tva, montant)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.err.println(Query); + } + } + return ObservableListBonReceptionProduit; + } + + + public ObservableList getBonReceptionNotFact(String KeyWordSearch) + { + String query = "SELECT BR.*, DATE_FORMAT(BR.date_reception, '%d/%m/%Y') as date_recep, DATE_FORMAT(BR.date_reception, '%H:%i') as heur_recep, F.nom " + + " FROM bonreception_frs BR, fournisseur F " + + " WHERE (BR.id_fournisseur = F.id_fourisseur) AND (id_facture_frs IS NULL) "+KeyWordSearch+" " + + " ORDER BY BR.id_bonreception DESC;"; + + ObservableList ObservableListBonReception= FXCollections.observableArrayList(); + if(cnx.ouverture()) + { + try{ + ResultSet ResultListBonRecepProd = cnx.excutionquery(query); + ResultListBonRecepProd.beforeFirst(); + while (ResultListBonRecepProd.next() ) { + String id_bon_reception = ResultListBonRecepProd.getString("id_bonreception"); + String numero = ResultListBonRecepProd.getString("numero"); + String date_recep = ResultListBonRecepProd.getString("date_recep"); + String heur_recep = ResultListBonRecepProd.getString("heur_recep"); + String transporteur = ResultListBonRecepProd.getString("transporteur"); + String net_a_payer = ResultListBonRecepProd.getString("net_a_payer"); + String id_frs = ResultListBonRecepProd.getString("id_fournisseur"); + String nom_frs = ResultListBonRecepProd.getString("nom"); + String local_reception = ResultListBonRecepProd.getString("local_reception"); + ObservableListBonReception.add(new BonReceptionList(id_bon_reception, numero, date_recep, heur_recep, transporteur, id_frs+" - "+nom_frs, "", local_reception, net_a_payer)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(query); + } + } + return ObservableListBonReception; + } + + + + public ObservableList getBonReceptionByFact(String IdFacture) + { + ObservableList ObservableListBonReception= FXCollections.observableArrayList(); + + String Query = "SELECT BR.*, DATE_FORMAT(BR.date_reception, '%d/%m/%Y') as date_recep, DATE_FORMAT(BR.date_reception, '%H:%i') as heur_recep, F.nom FROM bonreception_frs BR, fournisseur F WHERE (BR.id_fournisseur = F.id_fourisseur) AND (id_facture_frs = "+IdFacture+") ORDER BY BR.id_bonreception DESC;"; + + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery(Query); + resultat.beforeFirst(); + while (resultat.next() ) { + + BonReceptionFrs BonReception= new BonReceptionFrs(); + + BonReception.setIdBonReception(resultat.getString("id_bonreception")); + BonReception.setNumero(resultat.getString("numero")); + BonReception.setDate(resultat.getString("date_recep")); + BonReception.setHeur(resultat.getString("heur_recep")); + BonReception.setTransporteur(resultat.getString("transporteur")); + BonReception.setNetPayer(resultat.getString("net_a_payer").replace(".", ",")); + Fournisseur Frs = new FournisseurDB().GetFournisseurDB(resultat.getString("id_fournisseur")); + BonReception.setFournisseur(Frs); + BonReception.setLocal(resultat.getString("local_reception")); + + Profile profile = new ProfileDB().getpro(resultat.getInt("id_profile")); + BonReception.setProfile(profile); + + BonReception.setListProduit(this.getBonReceptionProduitList(resultat.getString("id_bonreception"))); + + + ObservableListBonReception.add(BonReception); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.err.println(Query); + } + } + return ObservableListBonReception; + } + +} diff --git a/src/main/java/Models/BonReceptionFrs/BonReceptionFrs.java b/src/main/java/Models/BonReceptionFrs/BonReceptionFrs.java new file mode 100644 index 0000000..582ac80 --- /dev/null +++ b/src/main/java/Models/BonReceptionFrs/BonReceptionFrs.java @@ -0,0 +1,137 @@ +/* + * 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.BonReceptionFrs; + +import Models.Fournisseur.Fournisseur; +import Models.User.Profile; +import javafx.collections.ObservableList; + +/** + * + * @author Maher + */ +public class BonReceptionFrs { + + public String IdBonReception; + public Fournisseur Fournisseur; + public String Numero; + public String Transporteur; + public String NetPayer; + public String Heur; + public String Date; + public String Local; + public Profile Profile; + public String IdFactureFrs; + public String PoidsProduits; + + + + public ObservableList ListProduit ; + + public String getIdBonReception() { + return IdBonReception; + } + + public void setIdBonReception(String IdBonReception) { + this.IdBonReception = IdBonReception; + } + + public Fournisseur getFournisseur() { + return Fournisseur; + } + + public void setFournisseur(Fournisseur Fournisseur) { + this.Fournisseur = Fournisseur; + } + + + + public String getNumero() { + return Numero; + } + + public void setNumero(String Numero) { + this.Numero = Numero; + } + + public String getTransporteur() { + return Transporteur; + } + + public void setTransporteur(String Transporteur) { + this.Transporteur = Transporteur; + } + + public String getNetPayer() { + return NetPayer; + } + + public void setNetPayer(String NetPayer) { + this.NetPayer = NetPayer; + } + + + public String getHeur() { + return Heur; + } + + public void setHeur(String Heur) { + this.Heur = Heur; + } + + public String getDate() { + return Date; + } + + public void setDate(String Date) { + this.Date = Date; + } + + public String getLocal() { + return Local; + } + + public void setLocal(String Local) { + this.Local = Local; + } + + public Profile getProfile() { + return Profile; + } + + public void setProfile(Profile Profile) { + this.Profile = Profile; + } + + + + public String getIdFactureFrs() { + return IdFactureFrs; + } + + public void setIdFactureFrs(String IdFactureFrs) { + this.IdFactureFrs = IdFactureFrs; + } + + public String getPoidsProduits() { + return PoidsProduits; + } + + public void setPoidsProduits(String PoidsProduits) { + this.PoidsProduits = PoidsProduits; + } + + + public ObservableList getListProduit() { + return ListProduit; + } + + public void setListProduit(ObservableList ListProduit) { + this.ListProduit = ListProduit; + } + + +} diff --git a/src/main/java/Models/BonReceptionFrs/BonReceptionGestionDB.java b/src/main/java/Models/BonReceptionFrs/BonReceptionGestionDB.java new file mode 100644 index 0000000..241dbc4 --- /dev/null +++ b/src/main/java/Models/BonReceptionFrs/BonReceptionGestionDB.java @@ -0,0 +1,159 @@ +/* + * 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.BonReceptionFrs; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.contro; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author Maher + */ +public class BonReceptionGestionDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + /********************************** Initial *******************************/ + + public ObservableList SearchBonReceptionGestionFrs(Integer debut, Integer nbr, String Numero, String Transporteur, String Facture, String DateReception, String Fournisseur, String LocalReception) + { + ObservableList data=FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(Numero)){ + Where += " (BR.`numero` = \""+Numero+"\") AND "; + } + + if(!clt.isStringNull(Transporteur)){ + Where += " (BR.`transporteur` LIKE \"%"+Adaptateur.addSlashes(Transporteur)+"%\") AND "; + } + + if(!clt.isStringNull(Facture)){ + Where += " (BR.`id_facture_frs` = \""+Facture+"\") AND "; + } + + if(!clt.isStringNull(DateReception)){ + Where += " (DATE(BR.`date_reception`) = \""+DateReception+"\") AND "; + } + + if(!clt.isStringNull(Fournisseur)){ + Where += " (BR.`id_fournisseur` = \""+Fournisseur+"\") AND "; + } + + if(!clt.isStringNull(LocalReception)){ + Where += " (BR.`local_reception` = \""+LocalReception+"\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = " WHERE (BR.id_fournisseur = F.id_fourisseur) AND " + Where; + }else{ + Where = " WHERE (BR.id_fournisseur = F.id_fourisseur) "; + } + + String req="SELECT BR.*, DATE_FORMAT(BR.date_reception, '%d/%m/%Y') as DateReception, DATE_FORMAT(BR.date_reception, '%H:%i:%s') as HeurReception , F.nom " + + " FROM bonreception_frs BR, fournisseur F " + + Where + + " ORDER BY BR.date_reception 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() ) { + + String code = resultat.getString("id_bonreception"); + String numero= resultat.getString("numero"); + String date = resultat.getString("DateReception"); + String heur = resultat.getString("HeurReception"); + String transporteur = resultat.getString("transporteur"); + String fournisseur = resultat.getString("nom"); + String facture = resultat.getString("id_facture_frs"); + String local = resultat.getString("local_reception"); + + data.add(new BonReceptionGestionList(code, numero, date, heur, transporteur, fournisseur, facture, local)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + + return data ; + } + + public Integer nbrBonReceptionGestionFrsGestion(String Numero, String Transporteur, String Facture, String DateReception, String Fournisseur, String LocalReception) + { + String Where = ""; + + if(!clt.isStringNull(Numero)){ + Where += " (`id_bonreception` = \""+Numero+"\") AND "; + } + + if(!clt.isStringNull(Transporteur)){ + Where += " (`transporteur` LIKE \"%"+Adaptateur.addSlashes(Transporteur)+"%\") AND "; + } + + if(!clt.isStringNull(Facture)){ + Where += " (`id_facture_frs` = \""+Facture+"\") AND "; + } + + if(!clt.isStringNull(DateReception)){ + Where += " (DATE(`date_reception`) = \""+DateReception+"\") AND "; + } + + if(!clt.isStringNull(Fournisseur)){ + Where += " (`id_fournisseur` = \""+Fournisseur+"\") AND "; + } + + if(!clt.isStringNull(LocalReception)){ + Where += " (`local_reception` = \""+LocalReception+"\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req=" SELECT COUNT(`id_bonreception`) " + + " FROM `bonreception_frs`" + + 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 ; + } + +} diff --git a/src/main/java/Models/BonReceptionFrs/BonReceptionGestionList.java b/src/main/java/Models/BonReceptionFrs/BonReceptionGestionList.java new file mode 100644 index 0000000..0745fca --- /dev/null +++ b/src/main/java/Models/BonReceptionFrs/BonReceptionGestionList.java @@ -0,0 +1,68 @@ +/* + * 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.BonReceptionFrs; + +import javafx.beans.property.SimpleStringProperty; + +/** + * @author Maher + */ +public class BonReceptionGestionList { + + private final SimpleStringProperty Code; + private final SimpleStringProperty Numero; + private final SimpleStringProperty Date; + private final SimpleStringProperty Heur; + private final SimpleStringProperty Transporteur; + private final SimpleStringProperty Fournisseur; + private final SimpleStringProperty Facture; + private final SimpleStringProperty LocalReception; + + public BonReceptionGestionList(String code, String numero, String date, String heur, String transporteur, String fournisseur, String facture, String local) + { + this.Code = new SimpleStringProperty(code); + this.Numero = new SimpleStringProperty(numero); + this.Date = new SimpleStringProperty(date); + this.Heur = new SimpleStringProperty(heur); + this.Transporteur = new SimpleStringProperty(transporteur); + this.Fournisseur = new SimpleStringProperty(fournisseur); + this.Facture = new SimpleStringProperty(facture); + this.LocalReception = new SimpleStringProperty(local); + } + + public String getCode() { + return Code.get(); + } + + public String getNumero() { + return Numero.get(); + } + + public String getDate() { + return Date.get(); + } + + public String getHeur() { + return Heur.get(); + } + public String getTransporteur() { + return Transporteur.get(); + } + + public String getFournisseur() { + return Fournisseur.get(); + } + + public String getFacture() { + return Facture.get(); + } + + public String getLocalReception() { + return LocalReception.get(); + } + + +} diff --git a/src/main/java/Models/BonReceptionFrs/BonReceptionList.java b/src/main/java/Models/BonReceptionFrs/BonReceptionList.java new file mode 100644 index 0000000..3738cbe --- /dev/null +++ b/src/main/java/Models/BonReceptionFrs/BonReceptionList.java @@ -0,0 +1,75 @@ +/* + * 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.BonReceptionFrs; + +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class BonReceptionList { + + private final SimpleStringProperty Code; + private final SimpleStringProperty Numero; + private final SimpleStringProperty Date; + private final SimpleStringProperty Heur; + private final SimpleStringProperty Transporteur; + private final SimpleStringProperty Fournisseur; + private final SimpleStringProperty Facture; + private final SimpleStringProperty LocalReception; + private final SimpleStringProperty NetPayer; + + public BonReceptionList(String code, String numero, String date, String heur, String transporteur, String fournisseur, String facture, String local, String net_a_payer) + { + this.Code = new SimpleStringProperty(code); + this.Numero = new SimpleStringProperty(numero); + this.Date = new SimpleStringProperty(date); + this.Heur = new SimpleStringProperty(heur); + this.Transporteur = new SimpleStringProperty(transporteur); + this.Fournisseur = new SimpleStringProperty(fournisseur); + this.Facture = new SimpleStringProperty(facture); + this.LocalReception = new SimpleStringProperty(local); + this.NetPayer = new SimpleStringProperty(net_a_payer); + } + + public String getCode() { + return Code.get(); + } + + public String getNumero() { + return Numero.get(); + } + + public String getDate() { + return Date.get(); + } + + public String getHeur() { + return Heur.get(); + } + public String getTransporteur() { + return Transporteur.get(); + } + + public String getFournisseur() { + return Fournisseur.get(); + } + + public String getFacture() { + return Facture.get(); + } + + public String getLocalReception() { + return LocalReception.get(); + } + + public String getNetPayer() { + return NetPayer.get(); + } + + +} diff --git a/src/main/java/Models/BonReceptionFrs/BonReceptionProduitList.java b/src/main/java/Models/BonReceptionFrs/BonReceptionProduitList.java new file mode 100644 index 0000000..961e52e --- /dev/null +++ b/src/main/java/Models/BonReceptionFrs/BonReceptionProduitList.java @@ -0,0 +1,74 @@ +/* + * 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.BonReceptionFrs; + +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class BonReceptionProduitList { + + private final SimpleStringProperty IdAchat; + private final SimpleStringProperty IdBonReception; + private final SimpleStringProperty Reference; + private final SimpleStringProperty Designation; + private final SimpleStringProperty Quantite; + private final SimpleStringProperty PrixUnitaireHorsTaxe; + private final SimpleStringProperty PrixUnitaireHorsTaxenNet; + private final SimpleStringProperty Tva; + private final SimpleStringProperty Montant; + + public BonReceptionProduitList(String id_achat, String id_bon_reception, String reference, String designation,String quantite, String p_u_h_t, String p_u_h_t_net, String tva, String montant) + { + this.IdAchat = new SimpleStringProperty(id_achat); + this.IdBonReception = new SimpleStringProperty(id_bon_reception); + this.Reference = new SimpleStringProperty(reference); + this.Designation = new SimpleStringProperty(designation); + this.Quantite = new SimpleStringProperty(quantite); + this.PrixUnitaireHorsTaxe = new SimpleStringProperty(p_u_h_t); + this.PrixUnitaireHorsTaxenNet = new SimpleStringProperty(p_u_h_t_net); + this.Tva = new SimpleStringProperty(tva); + this.Montant = new SimpleStringProperty(montant); + } + + public String getIdAchat() { + return IdAchat.get(); + } + + public String getIdBonReception() { + return IdBonReception.get(); + } + + public String getReference() { + return Reference.get(); + } + + public String getDesignation() { + return Designation.get(); + } + + public String getQuantite() { + return Quantite.get(); + } + + public String getPrixUnitaireHorsTaxe() { + return PrixUnitaireHorsTaxe.get(); + } + + public String getPrixUnitaireHorsTaxenNet() { + return PrixUnitaireHorsTaxenNet.get(); + } + + public String getTva() { + return Tva.get(); + } + + public String getMontant() { + return Montant.get(); + } +} diff --git a/src/main/java/Models/Caisse/CaisseClt.java b/src/main/java/Models/Caisse/CaisseClt.java new file mode 100644 index 0000000..504f982 --- /dev/null +++ b/src/main/java/Models/Caisse/CaisseClt.java @@ -0,0 +1,143 @@ +/* + * 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; + +/** + * + * @author maher + */ +public class CaisseClt { + public String IdCaisse; + + public String DateMouvement; + public String TypeMouvement; //0-Vente Comptant | 1-Vente Facilité Avance | 2 Vente Commande Avance | 3 traite clt | 4 Cheque | 5 Vente Sans Facture | 6 Vente Sans Facture (Avoit) + + public String CodeFactureClt; + public String IdAvoirFactClt; + public String IdVenteSansFactureClt; + public String Montant; + + public String IdTraitePaiementEspace; + public String IdTraitePaiementCarte; + public String IdTraitePaiementCheque; + + public String IdHistoriqueCheque; + + public String LocalNom; + public Integer IdProfile; //code profile de utilisateur du programme + + public String getIdCaisse() { + return IdCaisse; + } + + public void setIdCaisse(String IdCaisse) { + this.IdCaisse = IdCaisse; + } + + public String getDateMouvement() { + return DateMouvement; + } + + public void setDateMouvement(String DateMouvement) { + this.DateMouvement = DateMouvement; + } + + public String getTypeMouvement() { + return TypeMouvement; + } + + public void setTypeMouvement(String TypeMouvement) { + this.TypeMouvement = TypeMouvement; + } + + public String getIdVenteSansFactureClt() { + return IdVenteSansFactureClt; + } + + public void setIdVenteSansFactureClt(String IdVenteSansFacture) { + this.IdVenteSansFactureClt = IdVenteSansFacture; + } + + + + + public String getCodeFactureClt() { + return CodeFactureClt; + } + + public void setCodeFactureClt(String CodeFactureClt) { + this.CodeFactureClt = CodeFactureClt; + } + + public String getIdAvoirFactClt() { + return IdAvoirFactClt; + } + + public void setIdAvoirFactClt(String IdAvoirFactClt) { + this.IdAvoirFactClt = IdAvoirFactClt; + } + + public String getMontant() { + + return Montant; + } + + public void setMontant(String Montant) { + this.Montant = Montant; + } + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + public Integer getIdProfile() { + return IdProfile; + } + + public void setIdProfile(Integer IdProfile) { + this.IdProfile = IdProfile; + } + + public String getIdTraitePaiementEspace() { + return IdTraitePaiementEspace; + } + + public void setIdTraitePaiementEspace(String IdTraitePaiementEspace) { + this.IdTraitePaiementEspace = IdTraitePaiementEspace; + } + + public String getIdTraitePaiementCarte() { + return IdTraitePaiementCarte; + } + + public void setIdTraitePaiementCarte(String IdTraitePaiementCarte) { + this.IdTraitePaiementCarte = IdTraitePaiementCarte; + } + + public String getIdTraitePaiementCheque() { + return IdTraitePaiementCheque; + } + + public void setIdTraitePaiementCheque(String IdTraitePaiementCheque) { + this.IdTraitePaiementCheque = IdTraitePaiementCheque; + } + + public String getIdHistoriqueCheque() { + return IdHistoriqueCheque; + } + + public void setIdHistoriqueCheque(String IdHistoriqueCheque) { + this.IdHistoriqueCheque = IdHistoriqueCheque; + } + + + + +} diff --git a/src/main/java/Models/Caisse/CaisseDB.java b/src/main/java/Models/Caisse/CaisseDB.java new file mode 100644 index 0000000..e5f6344 --- /dev/null +++ b/src/main/java/Models/Caisse/CaisseDB.java @@ -0,0 +1,405 @@ +package Models.Caisse; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Models.ChequeClt.ChequeClt; +import Models.ChequeClt.ChequeCltDB; +import Models.FactureClt.FactureClt; +import Models.FactureClt.FactureCltDB; +import Models.TraiteClt.TraiteCltDB; +import Models.User.User; +import Models.VenteRapideClt.VenteSansFacture; +import Models.VenteRapideClt.VenteSansFactureDB; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Map; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + + + +/** + * + * @author maher + */ +public class CaisseDB { + + connexion cnx = new connexion(); + + public String AddCaisse(CaisseClt caisse){ + String req ="INSERT INTO caisseclt (date_mouvement, `type_mouvement`, id_traite_paiement_espace, id_traite_paiement_carte, id_traite_paiement_cheque, `id_factureclt`, `id_avoir_factclt`, `id_historique_cheque_clt`, `id_vente_sans_facture`, `montant`, `local_nom`, `id_profile`) VALUES (CURTIME(), "+caisse.getTypeMouvement()+", "+caisse.getIdTraitePaiementEspace()+", "+caisse.getIdTraitePaiementCarte()+", "+caisse.getIdTraitePaiementCheque()+", "+caisse.getCodeFactureClt()+", "+caisse.getIdAvoirFactClt()+", "+caisse.getIdHistoriqueCheque()+","+caisse.getIdVenteSansFactureClt()+", "+caisse.getMontant()+", '"+ParametreSystem.NomLocalPC+"', "+User.idprofile+")"; + return cnx.InsertGetLastId(req); + } + + public ObservableList GetDataCaisseFrsSortie(String Datedebut, String DateFin){ + + ObservableList DataReglementList = this.GetDataReglementFrs(Datedebut, DateFin); + + ObservableList DataFraisList = this.GetDataFraisFrs(Datedebut, DateFin); + + ObservableList DataTraiteList = this.GetDataTraiteFrs(Datedebut, DateFin); + + // supprimer une vente sans facture + ObservableList DataAvoirVSFList = this.GetDataAvoirVSF(Datedebut, DateFin); + + ObservableList CaisseFrsSortieList = FXCollections.concat(DataReglementList, DataTraiteList, DataFraisList, DataAvoirVSFList); + + return CaisseFrsSortieList; + } + + + public ObservableList GetDataAvoirVSF(String DateDebut, String DateFin){ + + ObservableList DataAvoirVSFList = FXCollections.observableArrayList(); + + String Query = " SELECT VSF.*, C.numero, C.banque, B.num_transation, B.nom_banque, DATE_FORMAT(date_operation, '%d/%m/%Y %H:%i') as date_oper " + + " FROM `vente_sans_facture` VSF " + + " LEFT JOIN `cheque_clt` C ON (C.id_chequeclt = VSF.id_chequeclt) " + + " LEFT JOIN `carte_bancaire_clt` B ON (B.id_carte_bancaire = VSF.id_carte_bancaire) " + + " WHERE (VSF.operation = 1) AND (DATE(VSF.date_operation) BETWEEN '"+DateDebut+"' AND '"+DateFin+"'); "; + + if(cnx.ouverture()){ + try{ + ResultSet resultat= cnx.FetchALL(Query); + + while ( resultat.next() ) { + + String id_vsf = resultat.getString("id_vente_sans_facture"); + Float montant = resultat.getFloat("montant"); + + //0 :espace 1:Chèque 2 :carte bancaire + String mode_paiement = resultat.getString("paiement"); + + String type_mouvement = ""; + String cheque= ""; + String carte_bancaire= ""; + String type = "Avoir VSF"; + String espece = ""; + + if(mode_paiement.equals("0")){ + type_mouvement = "Espèce"; + espece = resultat.getString("nom_prenom_client"); + }else if(mode_paiement.equals("1")){ + type_mouvement = "Chèque"; + cheque = resultat.getString("numero")+"-"+resultat.getString("banque"); + }else if(mode_paiement.equals("2")){ + type_mouvement = "Carte Bancaire"; + carte_bancaire = resultat.getString("num_transation")+"-"+resultat.getString("nom_banque"); + } + + String date_oper = resultat.getString("date_oper"); + + DataAvoirVSFList.add(new CaisseSortieListe(id_vsf, type_mouvement, type, date_oper, Adaptateur.FloatToStringEspace(montant), cheque, espece, carte_bancaire, montant)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return DataAvoirVSFList; + } + + public ObservableList GetDataFraisFrs(String Datedebut, String DateFin){ + + ObservableList DataFraisList = FXCollections.observableArrayList(); + + String Query = " SELECT *, DATE_FORMAT(date_creation, '%d/%m/%Y %H:%i') as date_creat " + + " FROM frais " + + " WHERE (DATE(date_creation) BETWEEN '"+Datedebut+"' AND '"+DateFin+"') "; + + if(cnx.ouverture()){ + try{ + ResultSet resultat= cnx.FetchALL(Query); + + while ( resultat.next() ) { + + String id_frais = resultat.getString("id_frais"); + Float montant = resultat.getFloat("montant"); + + //0 :espece 1:Chèque 2 :carte bancaire + String mode_paiement = resultat.getString("mode_paiement"); + + String type_mouvement = ""; + String cheque= ""; + String carte_bancaire= ""; + String type = "Frais"; + String espece = ""; + + if(mode_paiement.equals("0")){ + type_mouvement = "Espèce"; + espece = resultat.getString("object"); + }else if(mode_paiement.equals("1")){ + type_mouvement = "Chèque"; + cheque = resultat.getString("numero")+"-"+resultat.getString("banque"); + }else if(mode_paiement.equals("2")){ + type_mouvement = "Carte Bancaire"; + carte_bancaire = resultat.getString("numero")+"-"+resultat.getString("banque"); + } + + String date_mouvement = resultat.getString("date_creat"); + + DataFraisList.add(new CaisseSortieListe(id_frais, type_mouvement, type, date_mouvement,Adaptateur.FloatToStringEspace(montant), cheque, espece, carte_bancaire, montant)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return DataFraisList; + } + + public ObservableList GetDataReglementFrs(String Datedebut, String DateFin){ + + ObservableList DataReglementList = FXCollections.observableArrayList(); + + String Query = " SELECT R.*, F.id_fourisseur, F.nom, R.date_creation as datecreation, DATE_FORMAT(R.date_creation, '%d/%m/%Y %H:%i') as date_creat, " + + " C.numero, C.banque, C.montant, " + + " E.numero_transaction, E.banque, E.montant " + + " FROM reglement_frs R " + + " LEFT JOIN `fournisseur` F ON (F.id_fourisseur = R.id_fourisseur) " + + " LEFT JOIN `cheque_frs` C ON (C.id_reglement_frs = R.id_reglement_frs) " + + " LEFT JOIN `carte_electronique_frs` E ON (E.id_reglement_frs = R.id_reglement_frs) " + + " WHERE (DATE(R.date_creation) BETWEEN '"+Datedebut+"' AND '"+DateFin+"')" + + " AND (R.mode_paiement NOT LIKE '3'); "; + + if(cnx.ouverture()){ + try{ + ResultSet resultat= cnx.FetchALL(Query); + + while ( resultat.next() ) { + + String id_reglement = resultat.getString("R.id_reglement_frs"); + + //les traites est récupéer par la fonction GetDataTraiteFrs + + //0 :espace 1:Chèque 2 :carte bancaire 3: Traite + String mode_paiement = resultat.getString("R.mode_paiement"); + String type_mouvement = ""; + String cheque= ""; + String carte_bancaire= ""; + String type = "Achat"; + Float montant = null; + String espece = ""; + + if(mode_paiement.equals("0")){ + type_mouvement = "Espèce"; + montant = resultat.getFloat("R.montant"); + espece = resultat.getString("F.id_fourisseur")+"-"+resultat.getString("F.nom"); + }else if(mode_paiement.equals("1")){ + type_mouvement = "Chèque"; + cheque = resultat.getString("C.numero")+"-"+resultat.getString("C.banque"); + montant = resultat.getFloat("C.montant"); + }else if(mode_paiement.equals("2")){ + type_mouvement = "Carte Bancaire"; + carte_bancaire = resultat.getString("E.numero_transaction")+"-"+resultat.getString("E.banque"); + montant = resultat.getFloat("E.montant"); + } + + String date_mouvement = resultat.getString("date_creat"); + + DataReglementList.add(new CaisseSortieListe(id_reglement, type_mouvement, type, date_mouvement,Adaptateur.FloatToStringEspace(montant), cheque, espece, carte_bancaire, montant)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return DataReglementList; + } + + public ObservableList GetDataTraiteFrs(String Datedebut, String DateFin){ + + ObservableList DataReglementList = FXCollections.observableArrayList(); + + String Query = " SELECT *, " + + " DATE_FORMAT(T.date_creation, '%d/%m/%Y') as date_pai " + + " FROM traite_frs T, reglement_frs R, fournisseur F " + + " WHERE (T.id_reglement_frs = R.id_reglement_frs) " + + " AND (R.id_fourisseur = F.id_fourisseur) " + + " AND (T.date_paiement BETWEEN '"+Datedebut+"' AND '"+DateFin+"'); "; + + if(cnx.ouverture()){ + try{ + ResultSet resultat= cnx.FetchALL(Query); + + while ( resultat.next() ) { + + String id_reglement = resultat.getString("T.id_traite_frs"); + + Float montant = resultat.getFloat("T.montant"); + String date_mouvement = resultat.getString("date_pai"); + + String espece = resultat.getString("F.nom"); + DataReglementList.add(new CaisseSortieListe(id_reglement, "Espèce", "Traite", date_mouvement, Adaptateur.FloatToStringEspace(montant), "", espece, "", montant)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return DataReglementList; + } + + public ObservableList GetDataCaisseCltEnter(String Datedebut, String DateFin){ + + String Query = " SELECT id_caisseclt, DATE_FORMAT(date_mouvement, '%d/%m/%Y %H:%i') as date_mouvement, type_mouvement, id_factureclt, id_avoir_factclt, id_vente_sans_facture, montant, id_traite_paiement_espace, id_traite_paiement_carte, id_traite_paiement_cheque, id_historique_cheque_clt, id_profile, local_nom" + + " FROM caisseclt " + + " WHERE (DATE(date_mouvement) BETWEEN '"+Datedebut+"' AND '"+DateFin+"') " + + " AND (local_nom ='"+ParametreSystem.NomLocalPC+"') " + + " AND (type_mouvement IN (0,1,2,3,4,5)); "; + + ObservableList CaisseCltEnterList = FXCollections.observableArrayList(); + if(cnx.ouverture()){ + try{ + ResultSet resultat= cnx.FetchALL(Query); + + while ( resultat.next() ) { + + //String id_caisseclt = resultat.getString("id_caisseclt"); + float montant = resultat.getFloat("montant"); + String id_profile = resultat.getString("id_profile"); + String date_mouvement = resultat.getString("date_mouvement"); + + // 0-Vente Comptant | 1-Vente Facilité Avance | 2 Vente Commande Avance | 3 traite clt | 4 ChequeClt | 5 Vente Sans Facture | 6 Vente Avoir + String type_mouvement = resultat.getString("type_mouvement"); + + String id_caisseclt = ""; + String type = ""; + String cheque_numero = ""; + String cheque_banque = ""; + String espace_nom = ""; + String espace_prenom = ""; + String carte_numero = ""; + String carte_banque = ""; + + + if((type_mouvement.equals("0")) || (type_mouvement.equals("1")) || (type_mouvement.equals("2"))){ + + String id_factureclt = resultat.getString("id_factureclt"); + id_caisseclt = id_factureclt; + FactureClt Facture = new FactureCltDB().getFactureClt(id_factureclt); + String ModePaiement = Facture.getModePaiement(); + + if(ModePaiement.equals("0")){//0 :espace + + if(Facture.getTypeClient() == 0){ + espace_nom = Facture.getCltPersonne().getNom(); + espace_prenom = Facture.getCltPersonne().getPrenom(); + }else if (Facture.getTypeClient() == 1){ + espace_nom = Facture.getCltEntreprise().getNom(); + espace_prenom = Facture.getCltEntreprise().getMatricule(); + }else if (Facture.getTypeClient() == 2){ + espace_nom = Facture.getCltPassager().getNom(); + espace_prenom = Facture.getCltPassager().getPrenom(); + } + + }else if (ModePaiement.equals("1")){//1:cheque + ChequeClt Cheque = new ChequeCltDB().getChequeCltByFacture(Facture.getCodeFactureClt()); + cheque_numero = Cheque.getNumeroChequeClt(); + cheque_banque = Cheque.getBanqueChequeClt(); + }else if (ModePaiement.equals("2")){//3 :carte bancaire + CarteBancaireClt CarteBancaire = new CarteBancaireCltDB().getCarteBancaireByFactureClt(Facture.getCodeFactureClt()); + carte_numero = CarteBancaire.getNumeroTransation(); + carte_banque = CarteBancaire.getNomBanque(); + } + + + if(type_mouvement.equals("0")){ + type = "Vente Comptant"; + }else if (type_mouvement.equals("1")){ + type = "Vente Facilité Avance"; + }else if (type_mouvement.equals("2")){ + type = "Vente Commande Avance"; + } + }else if(type_mouvement.equals("3")){ + type = "Traite"; + String id_traite_paiement_espace = resultat.getString("id_traite_paiement_espace"); + String id_traite_paiement_carte = resultat.getString("id_traite_paiement_carte"); + String id_traite_paiement_cheque = resultat.getString("id_traite_paiement_cheque"); + + if(id_traite_paiement_espace != null){ + Map PaiementTraiteEspace = new TraiteCltDB().GetEspacePaiementTraite(id_traite_paiement_espace); + id_caisseclt = PaiementTraiteEspace.get("IdTraite").toString(); + espace_nom = PaiementTraiteEspace.get("Nom").toString(); + espace_prenom = PaiementTraiteEspace.get("Prenom").toString(); + }else if(id_traite_paiement_carte != null){ + Map PaiementTraiteCarte = new TraiteCltDB().GetCartePaiementTraite(id_traite_paiement_carte); + id_caisseclt = PaiementTraiteCarte.get("IdTraite").toString(); + carte_numero = PaiementTraiteCarte.get("numero_carte").toString(); + carte_banque = PaiementTraiteCarte.get("banque").toString(); + }else if(id_traite_paiement_cheque != null){ + Map PaiementTraiteCheque = new TraiteCltDB().GetChequePaiementTraite(id_traite_paiement_cheque); + id_caisseclt = PaiementTraiteCheque.get("IdTraite").toString(); + cheque_numero = PaiementTraiteCheque.get("numero").toString(); + cheque_banque = PaiementTraiteCheque.get("banque").toString(); + } + }else if(type_mouvement.equals("4")){ + type = "Chèque"; + + String id_historique_cheque_clt = resultat.getString("id_historique_cheque_clt"); + if(id_historique_cheque_clt != null){ + ChequeClt Cheque = new ChequeCltDB().getChequeCltByIdHistorique(id_historique_cheque_clt); + // 0 cheque sans provision 1 Verser (Valider) 2 Contre chéque(espace) + id_caisseclt = Cheque.getNumeroChequeClt(); + + if(Cheque.getLastEtat() == 1){ + cheque_numero = Cheque.getNumeroChequeClt(); + cheque_banque = Cheque.getBanqueChequeClt(); + }else if(Cheque.getLastEtat() == 2){ + if(Cheque.getTypeClient() == 0){ + espace_nom = Cheque.getCltPersonne().getNom(); + espace_prenom = Cheque.getCltPersonne().getPrenom(); + }else if(Cheque.getTypeClient() == 1){ + espace_nom = Cheque.getCltEntreprise().getNom(); + espace_prenom = Cheque.getCltEntreprise().getMail(); + }else if(Cheque.getTypeClient() == 2){ + espace_nom = Cheque.getCltPassager().getNom(); + espace_prenom = Cheque.getCltPassager().getPrenom(); + } + } + } + }else if(type_mouvement.equals("5")){ //5 Vente Sans Facture + type = "Vente Sans Facture"; + VenteSansFacture venteSansFacture = new VenteSansFactureDB().getVenteSansFacture(resultat.getString("id_vente_sans_facture")); + id_caisseclt = venteSansFacture.getIdVenteSansFacture(); + if(venteSansFacture.getPaiement().equals("0")){ + if(venteSansFacture.getOperation() != null){ + espace_nom = "Annuler:"; + espace_prenom = Adaptateur.NormalDateTimeFormat(venteSansFacture.getDateOperation()); + }else{ + espace_nom = venteSansFacture.getNomPrenomClient(); + espace_prenom = venteSansFacture.getNomPrenomClient(); + } + }else if (venteSansFacture.getPaiement().equals("1")){ + if(venteSansFacture.getOperation()!= null){ + cheque_numero = "Annuler"; + cheque_banque = Adaptateur.NormalDateTimeFormat(venteSansFacture.getDateOperation()); + }else{ + cheque_numero = venteSansFacture.getCheque().getNumeroChequeClt(); + cheque_banque = venteSansFacture.getCheque().getBanqueChequeClt(); + } + + }else if (venteSansFacture.getPaiement().equals("2")){ + if(venteSansFacture.getOperation() != null){ + carte_numero = "Annuler"; + carte_banque = Adaptateur.NormalDateTimeFormat(venteSansFacture.getDateOperation()); + }else{ + carte_numero = venteSansFacture.getCarteBancaire().getNumeroTransation(); + carte_banque = venteSansFacture.getCarteBancaire().getNomBanque(); + } + } + } + + CaisseCltEnterList.add(new CaisseListe(id_caisseclt, type_mouvement, type, date_mouvement, Adaptateur.FloatToStringEspace(montant), cheque_numero, cheque_banque, espace_nom, espace_prenom, carte_numero, carte_banque, montant)); + + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + + return CaisseCltEnterList; + } + + + + + +} diff --git a/src/main/java/Models/Caisse/CaisseEntreListe.java b/src/main/java/Models/Caisse/CaisseEntreListe.java new file mode 100644 index 0000000..8c8be79 --- /dev/null +++ b/src/main/java/Models/Caisse/CaisseEntreListe.java @@ -0,0 +1,82 @@ +/* + * 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 javafx.beans.property.SimpleFloatProperty; +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class CaisseEntreListe { + + private SimpleStringProperty IdCaisseClt; + + private SimpleStringProperty CodeType; + //0-Vente Comptant | 1-Vente Facilité Avance | 2 Vente Commande Avance + //3 traite clt | 4 ChequeClt | 5 Vente Sans Facture | 6 Vente Avoir + + private SimpleStringProperty Type; + private SimpleStringProperty Date; + private SimpleStringProperty Montant; + private SimpleStringProperty Cheque; + private SimpleStringProperty Espece; + private SimpleStringProperty CateBancaire; + private SimpleFloatProperty FloatMontant; + + public CaisseEntreListe(String id_caisse, String code_type, String type, String date_insert, String montant, String cheque_numero_banque, String nom_prenom, String carte_numero_banque, float float_montant) { + this.IdCaisseClt = new SimpleStringProperty(id_caisse); + this.CodeType = new SimpleStringProperty(code_type); + this.Type = new SimpleStringProperty(type); + this.Date = new SimpleStringProperty(date_insert); + this.Montant = new SimpleStringProperty(montant); + this.Cheque = new SimpleStringProperty(cheque_numero_banque); + this.Espece = new SimpleStringProperty(nom_prenom); + this.CateBancaire = new SimpleStringProperty(carte_numero_banque); + this.FloatMontant = new SimpleFloatProperty(float_montant); + + } + + + public String getIdCaisseClt() { + return IdCaisseClt.get(); + } + + public String getCodeType() { + return CodeType.get(); + } + + + public String getType() { + return Type.get(); + } + + public String getDate() { + return Date.get(); + } + + public String getMontant() { + return Montant.get(); + } + + public String getCheque() { + return Cheque.get(); + } + + public String getEspece() { + return Espece.get(); + } + + public String getCateBancaire() { + return CateBancaire.get(); + } + + + public float getFloatMontant() { + return FloatMontant.get(); + } +} diff --git a/src/main/java/Models/Caisse/CaisseListe.java b/src/main/java/Models/Caisse/CaisseListe.java new file mode 100644 index 0000000..787fe30 --- /dev/null +++ b/src/main/java/Models/Caisse/CaisseListe.java @@ -0,0 +1,97 @@ +/* + * 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 javafx.beans.property.SimpleFloatProperty; +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class CaisseListe { + + private final SimpleStringProperty IdCaisseClt; + + private final SimpleStringProperty CodeType; + //0-Vente Comptant | 1-Vente Facilité Avance | 2 Vente Commande Avance + //3 traite clt | 4 ChequeClt | 5 Vente Sans Facture | 6 Vente Avoir + + private final SimpleStringProperty Type; + private final SimpleStringProperty Date; + private final SimpleStringProperty Montant; + private final SimpleStringProperty ChequeCltNumero; + private final SimpleStringProperty ChequeCltBanque; + private final SimpleStringProperty EspaceNom; + private final SimpleStringProperty EspacePrenom; + private final SimpleStringProperty CateBancaireNumero; + private final SimpleStringProperty CateBancaireBanque; + private final SimpleFloatProperty FloatMontant; + + public CaisseListe(String id_caisse, String code_type, String type, String date_insert, String montant, String cheque_numero, String cheque_banque, String espace_nom, String espace_prenom, String carte_numero, String carte_banque, float float_montant) { + this.IdCaisseClt = new SimpleStringProperty(id_caisse); + this.CodeType = new SimpleStringProperty(code_type); + this.Type = new SimpleStringProperty(type); + this.Date = new SimpleStringProperty(date_insert); + this.Montant = new SimpleStringProperty(montant); + this.ChequeCltNumero = new SimpleStringProperty(cheque_numero); + this.ChequeCltBanque = new SimpleStringProperty(cheque_banque); + this.EspaceNom = new SimpleStringProperty(espace_nom); + this.EspacePrenom = new SimpleStringProperty(espace_prenom); + this.CateBancaireNumero = new SimpleStringProperty(carte_numero); + this.CateBancaireBanque = new SimpleStringProperty(carte_banque); + this.FloatMontant = new SimpleFloatProperty(float_montant); + } + + + public String getIdCaisseClt() { + return IdCaisseClt.get(); + } + + public String getCodeType() { + return CodeType.get(); + } + + public String getType() { + return Type.get(); + } + + public String getDate() { + return Date.get(); + } + + public String getMontant() { + return Montant.get(); + } + + public String getChequeCltNumero() { + return ChequeCltNumero.get(); + } + + public String getChequeCltBanque() { + return ChequeCltBanque.get(); + } + + public String getEspaceNom() { + return EspaceNom.get(); + } + + public String getEspacePrenom() { + return EspacePrenom.get(); + } + + public String getCateBancaireNumero() { + return CateBancaireNumero.get(); + } + + public String getCateBancaireBanque() { + return CateBancaireBanque.get(); + } + + public float getFloatMontant() { + return FloatMontant.get(); + } +} diff --git a/src/main/java/Models/Caisse/CaisseSortieListe.java b/src/main/java/Models/Caisse/CaisseSortieListe.java new file mode 100644 index 0000000..f8afd7d --- /dev/null +++ b/src/main/java/Models/Caisse/CaisseSortieListe.java @@ -0,0 +1,79 @@ +/* + * 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 javafx.beans.property.SimpleFloatProperty; +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class CaisseSortieListe { + + private SimpleStringProperty IdCaisseClt; + + private SimpleStringProperty CodeType; + + private SimpleStringProperty Type; + private SimpleStringProperty Date; + private SimpleStringProperty Montant; + private SimpleStringProperty Cheque; + private SimpleStringProperty Espece; + private SimpleStringProperty CarteBancaire; + private SimpleFloatProperty FloatMontant; + + public CaisseSortieListe(String id_caisse, String code_type, String type, String date_insert, String montant, String cheque, String nom_prenom, String carte_bancaire, float float_montant) { + this.IdCaisseClt = new SimpleStringProperty(id_caisse); + this.CodeType = new SimpleStringProperty(code_type); + this.Type = new SimpleStringProperty(type); + this.Date = new SimpleStringProperty(date_insert); + this.Montant = new SimpleStringProperty(montant); + this.Cheque = new SimpleStringProperty(cheque); + this.Espece = new SimpleStringProperty(nom_prenom); + this.CarteBancaire = new SimpleStringProperty(carte_bancaire); + this.FloatMontant = new SimpleFloatProperty(float_montant); + + } + + + public String getIdCaisseClt() { + return IdCaisseClt.get(); + } + + public String getCodeType() { + return CodeType.get(); + } + + + public String getType() { + return Type.get(); + } + + public String getDate() { + return Date.get(); + } + + public String getMontant() { + return Montant.get(); + } + + public String getCheque() { + return Cheque.get(); + } + + public String getEspece() { + return Espece.get(); + } + + public String getCarteBancaire() { + return CarteBancaire.get(); + } + + public float getFloatMontant() { + return FloatMontant.get(); + } +} diff --git a/src/main/java/Models/Caisse/CarteBancaireClt.java b/src/main/java/Models/Caisse/CarteBancaireClt.java new file mode 100644 index 0000000..6b23654 --- /dev/null +++ b/src/main/java/Models/Caisse/CarteBancaireClt.java @@ -0,0 +1,112 @@ +package Models.Caisse; + +/** + * @author Maher + */ +public class CarteBancaireClt { + + public String IdCarteBancaire; + public String NumeroTransation; + public String NomBanque; + public String DateTransation; + public String NumeroCarte; + public String NomComplet; + public String Montant; + public Float FMontant; + public String IdFactureClt; + public String LocalNom; + public Integer IdProfile; + + public String getIdCarteBancaire() { + return IdCarteBancaire; + } + + public void setIdCarteBancaire(String IdCarteBancaire) { + this.IdCarteBancaire = IdCarteBancaire; + } + + + public String getNumeroTransation() { + return NumeroTransation; + } + + public void setNumeroTransation(String NumeroTransation) { + this.NumeroTransation = NumeroTransation; + } + + public String getNomBanque() { + return NomBanque; + } + + public void setNomBanque(String NomBanque) { + this.NomBanque = NomBanque; + } + + public String getDateTransation() { + return DateTransation; + } + + public void setDateTransation(String DateTransation) { + this.DateTransation = DateTransation; + } + + public String getNumeroCarte() { + return NumeroCarte; + } + + public void setNumeroCarte(String NumeroCarte) { + this.NumeroCarte = NumeroCarte; + } + + public String getNomComplet() { + return NomComplet; + } + + public void setNomComplet(String NomComplet) { + this.NomComplet = NomComplet; + } + + + public String getMontant() { + return Montant; + } + + public void setMontant(String Montant) { + this.Montant = Montant; + } + + public Float getFMontant() { + return FMontant; + } + + public void setFMontant(Float FMontant) { + this.FMontant = FMontant; + } + + public String getIdFactureClt() { + return IdFactureClt; + } + + public void setIdFactureClt(String IdFactureClt) { + this.IdFactureClt = IdFactureClt; + } + + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + public Integer getIdProfile() { + return IdProfile; + } + + public void setIdProfile(Integer IdProfile) { + this.IdProfile = IdProfile; + } + + +} diff --git a/src/main/java/Models/Caisse/CarteBancaireCltDB.java b/src/main/java/Models/Caisse/CarteBancaireCltDB.java new file mode 100644 index 0000000..d01c047 --- /dev/null +++ b/src/main/java/Models/Caisse/CarteBancaireCltDB.java @@ -0,0 +1,123 @@ +package Models.Caisse; + +import Controllers.Traitement.contro; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * @author Maher + */ +public class CarteBancaireCltDB { + + connexion cnx = new connexion(); + + contro clt = new contro(); + + public CarteBancaireClt SetCarteBancaire(CarteBancaireClt CarteBancaire) + { + + String NumeroCarte = "NULL"; + if(!clt.isStringNull(CarteBancaire.getNumeroCarte())){ + NumeroCarte = "'"+CarteBancaire.getNumeroCarte()+"'"; + } + + String NomComplet = "NULL"; + if(!clt.isStringNull(CarteBancaire.getNomComplet())){ + NomComplet = "'"+CarteBancaire.getNomComplet()+"'"; + } + + + String NomBanque = "NULL"; + if(!clt.isStringNull(CarteBancaire.getNomBanque())){ + NomBanque = "'"+CarteBancaire.getNomBanque()+"'"; + } + + String IdFactureClt = "NULL"; + if(!clt.isStringNull(CarteBancaire.getIdFactureClt())){ + IdFactureClt = "'"+CarteBancaire.getIdFactureClt()+"'"; + } + + String Query = "INSERT INTO `carte_bancaire_clt` (`num_transation`, `nom_banque`, `num_carte`, `nom_complet`, `date_transation`, `montant`, `id_factureclt`, `local_nom`, `id_profile`) VALUES ('"+CarteBancaire.getNumeroTransation()+"', "+NomBanque+", "+NumeroCarte+", "+NomComplet+", now(), '"+CarteBancaire.getMontant()+"', "+IdFactureClt+" ,'"+CarteBancaire.getLocalNom()+"', '"+CarteBancaire.getIdProfile()+"')"; + + CarteBancaire.setIdCarteBancaire(cnx.InsertGetLastId(Query)); + + + return CarteBancaire; + } + + public CarteBancaireClt getCarteBancaireClt(String IdCarteBancaire){ + + CarteBancaireClt CarteBancaire = new CarteBancaireClt(); + + String Query = "SELECT *, DATE_FORMAT(date_transation, '%d/%m/%Y %H:%i:%s') as date_time_transation FROM `carte_bancaire_clt` WHERE `id_carte_bancaire` = "+IdCarteBancaire+";"; + + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery(Query); + //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){ + + CarteBancaire.setIdCarteBancaire(resultat.getString("id_carte_bancaire")); + CarteBancaire.setDateTransation(resultat.getString("date_time_transation")); + + CarteBancaire.setMontant(resultat.getString("montant")); + CarteBancaire.setFMontant(resultat.getFloat("montant")); + + CarteBancaire.setNomBanque(resultat.getString("nom_banque")); + CarteBancaire.setNumeroCarte(resultat.getString("num_carte")); + CarteBancaire.setNumeroTransation(resultat.getString("num_transation")); + + CarteBancaire.setIdProfile(resultat.getInt("id_profile")); + CarteBancaire.setLocalNom(resultat.getString("local_nom")); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + } + } + return CarteBancaire; + } + + public CarteBancaireClt getCarteBancaireByFactureClt(String IdFactureClt){ + + CarteBancaireClt CarteBancaire = new CarteBancaireClt(); + + String Query = "SELECT *, DATE_FORMAT(date_transation, '%d/%m/%Y %H:%i:%s') as date_time_transation FROM `carte_bancaire_clt` WHERE `id_factureclt` = "+IdFactureClt+";"; + + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery(Query); + //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){ + + CarteBancaire.setIdCarteBancaire(resultat.getString("id_carte_bancaire")); + CarteBancaire.setDateTransation(resultat.getString("date_time_transation")); + + CarteBancaire.setMontant(resultat.getString("montant")); + CarteBancaire.setFMontant(resultat.getFloat("montant")); + + CarteBancaire.setNomBanque(resultat.getString("nom_banque")); + CarteBancaire.setNumeroCarte(resultat.getString("num_carte")); + CarteBancaire.setNumeroTransation(resultat.getString("num_transation")); + + CarteBancaire.setNomComplet(resultat.getString("nom_complet")); + CarteBancaire.setIdFactureClt(resultat.getString("id_factureclt")); + + CarteBancaire.setIdProfile(resultat.getInt("id_profile")); + CarteBancaire.setLocalNom(resultat.getString("local_nom")); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + } + } + return CarteBancaire; + } +} diff --git a/src/main/java/Models/Caisse/Frais.java b/src/main/java/Models/Caisse/Frais.java new file mode 100644 index 0000000..8616aa7 --- /dev/null +++ b/src/main/java/Models/Caisse/Frais.java @@ -0,0 +1,139 @@ +/* + * 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; + + +/** + * + * @author Maher + */ +public class Frais { + + public String IdFrais; + public String Montant; + public String Object; //titre du frais + public String Context; // text du frais + public String Personne; + public String Paiement; //0 :espèce 1:Chèque 2 :carte bancaire + public String Numero; //chèque ou carte banciare + public String Banque; + public String DateCheque; + public String Profile; + public String LocalNom; + public String DateCreation; + + public String getIdFrais() { + return IdFrais; + } + + public void setIdFrais(String IdFrais) { + this.IdFrais = IdFrais; + } + + public String getMontant() { + return Montant; + } + + public void setMontant(String Montant) { + this.Montant = Montant; + } + + public String getObject() { + return Object; + } + + public void setObject(String Object) { + this.Object = Object; + } + + public String getContext() { + return Context; + } + + public void setContext(String Context) { + this.Context = Context; + } + + public String getPersonne() { + return Personne; + } + + public void setPersonne(String Personne) { + this.Personne = Personne; + } + + public String getPaiement() { + return Paiement; + } + + public String getPaiementString() { + //0 :espèce 1:Chèque 2 :carte bancaire + if(Paiement.equals("0")){ + return "Espèce"; + }else if(Paiement.equals("1")){ + return "Chèque"; + }else if(Paiement.equals("2")){ + return "Carte Bancaire"; + }else{ + return Paiement; + } + } + + public void setPaiement(String Paiement) { + this.Paiement = Paiement; + } + + public String getNumero() { + return Numero; + } + + public void setNumero(String Numero) { + this.Numero = Numero; + } + + public String getBanque() { + return Banque; + } + + public void setBanque(String Banque) { + this.Banque = Banque; + } + + public String getDateCheque() { + return DateCheque; + } + + public void setDateCheque(String DateCheque) { + this.DateCheque = DateCheque; + } + + + public String getProfile() { + return Profile; + } + + public void setProfile(String Profile) { + this.Profile = Profile; + } + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + public String getDateCreation() { + return DateCreation; + } + + public void setDateCreation(String DateCreation) { + this.DateCreation = DateCreation; + } + + +} diff --git a/src/main/java/Models/Caisse/FraisDB.java b/src/main/java/Models/Caisse/FraisDB.java new file mode 100644 index 0000000..ec33940 --- /dev/null +++ b/src/main/java/Models/Caisse/FraisDB.java @@ -0,0 +1,245 @@ +/* + * 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 SearchFraisGestion(Integer debut, Integer nbr, String CodeFrais, String ObjectFrais, String Presonne, String Locale, String Paiement, String DateCreation ) + { + ObservableList 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 ; + } + + + +} diff --git a/src/main/java/Models/Categorie/Categorie.java b/src/main/java/Models/Categorie/Categorie.java new file mode 100644 index 0000000..217035d --- /dev/null +++ b/src/main/java/Models/Categorie/Categorie.java @@ -0,0 +1,33 @@ +/* + * 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.Categorie; + +/** + * + * @author PC-Maher + */ +public class Categorie { + private String nomcategorie ; + private Integer unitemesure ; + + public String getNomcategorie() { + return nomcategorie; + } + + public void setNomcategorie(String nomcategorie) { + this.nomcategorie = nomcategorie; + } + + public Integer getUnitemesure() { + return unitemesure; + } + + public void setUnitemesure(Integer unitemesure) { + this.unitemesure = unitemesure; + } + + +} diff --git a/src/main/java/Models/Categorie/CategorieDB.java b/src/main/java/Models/Categorie/CategorieDB.java new file mode 100644 index 0000000..9b3f79d --- /dev/null +++ b/src/main/java/Models/Categorie/CategorieDB.java @@ -0,0 +1,123 @@ +/* + * 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.Categorie; + + +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author PC-Maher + */ +public class CategorieDB { + + connexion cnx = new connexion(); + + public boolean addCategorie(Categorie categorie){ + String req = "INSERT INTO `categorie` (`nomcategorie`, `unitemesure`) VALUES ('"+categorie.getNomcategorie()+"', '"+categorie.getUnitemesure()+"');"; + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(req); + return true; + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + return false ; + } + } + else{ + return false ; + } + } + + + + public boolean verifyCategorie(String cat){ + boolean result = false ; + + if(cnx.ouverture()){ + String sql="SELECT * FROM `categorie` WHERE `nomcategorie` LIKE '"+cat+"' ORDER BY `categorie`.`nomcategorie` ASC ;"; + + try { + ResultSet resultat = cnx.excutionquery(sql); + resultat.last(); //on place le curseur sur le dernier tuple + if(resultat.getRow()>0){ + result= true ; + } + } + catch (SQLException ex) { + result= false ; + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return result ; + } + + + public ArrayList getListCategorie(){ + ArrayList listcategorie = new ArrayList<>(); + String req = "SELECT `nomcategorie` FROM `categorie` ;"; + 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() ) { + + String nomcategorie=resultat.getString("nomcategorie"); + listcategorie.add(nomcategorie); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return listcategorie ; + } + + public ObservableList GetCategorie(String Local, String NomCategorie){ + + ObservableList DataCategorieListe = FXCollections.observableArrayList(); + + NomCategorie = NomCategorie.replaceAll("'","\\\\'"); + + String Query = " SELECT P.nomcategorie_cate AS category, COUNT(S.produit_reference) AS quantity " + + " FROM `stock` S, `produit` P " + + " WHERE (S.local_nom = '"+Local+"') AND (P.reference = S.produit_reference) AND (P.nomcategorie_cate LIKE '%"+NomCategorie+"%') " + + " GROUP BY P.nomcategorie_cate " + + " ORDER BY quantity DESC; "; + + if(cnx.ouverture()){ + try{ + ResultSet resultat= cnx.FetchALL(Query); + + while ( resultat.next() ) { + + String category = resultat.getString("category"); + String quantity = resultat.getString("quantity"); + + DataCategorieListe.add(new CategorieListe(category, quantity)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return DataCategorieListe; + } +} diff --git a/src/main/java/Models/Categorie/CategorieListe.java b/src/main/java/Models/Categorie/CategorieListe.java new file mode 100644 index 0000000..bb948d9 --- /dev/null +++ b/src/main/java/Models/Categorie/CategorieListe.java @@ -0,0 +1,25 @@ +package Models.Categorie; + +import javafx.beans.property.SimpleStringProperty; + +/** + * @author Maher + */ +public class CategorieListe { + + private final SimpleStringProperty Nom; + private final SimpleStringProperty Quantite; + + public CategorieListe(String nom, String quantite) { + this.Nom = new SimpleStringProperty(nom); + this.Quantite = new SimpleStringProperty(quantite); + } + + public String getNom() { + return Nom.get(); + } + + public String getQuantite() { + return Quantite.get(); + } +} diff --git a/src/main/java/Models/ChequeClt/ChequeClt.java b/src/main/java/Models/ChequeClt/ChequeClt.java new file mode 100644 index 0000000..7db3975 --- /dev/null +++ b/src/main/java/Models/ChequeClt/ChequeClt.java @@ -0,0 +1,175 @@ +package Models.ChequeClt; + +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.User.Profile; +import javafx.collections.ObservableList; + +/** + * @author PC-Maher + */ +public class ChequeClt { + + private String CodeChequeClt ; + private String NumeroChequeClt ; + private String BanqueChequeClt ; + private String MontantChequeClt ; + private Float MontantFloatChequeClt ; + private String NomCompletChequeClt ; + private String DatePaiement; + private String CodeFactureClt ; + private String DateCreation; + private String LocalNom; + private Profile profile; + private Integer LastEtat; // 0 cheque sans provision 1 Verser (Valider) 2 Contre chéque(espace) + + public Integer TypeClient ; //0 Personne 1 Entreprise 2 Passager + public Client CltPersonne ; + public ClientEntreprise CltEntreprise ; + public ClientPassager CltPassager ; + + public ObservableList HistoriqueListe ; + + + public String getCodeChequeClt() { + return CodeChequeClt; + } + + public void setCodeChequeClt(String CodeChequeClt) { + this.CodeChequeClt = CodeChequeClt; + } + + public String getNumeroChequeClt() { + return NumeroChequeClt; + } + + public void setNumeroChequeClt(String NumeroChequeClt) { + this.NumeroChequeClt = NumeroChequeClt; + } + + public String getBanqueChequeClt() { + return BanqueChequeClt; + } + + public void setBanqueChequeClt(String BanqueChequeClt) { + this.BanqueChequeClt = BanqueChequeClt; + } + + public String getMontantChequeClt() { + return MontantChequeClt; + } + + public void setMontantChequeClt(String MontantChequeClt) { + this.MontantChequeClt = MontantChequeClt; + } + + public Float getMontantFloatChequeClt() { + return MontantFloatChequeClt; + } + + public void setMontantFloatChequeClt(Float MontantFloatChequeClt) { + this.MontantFloatChequeClt = MontantFloatChequeClt; + } + + + public String getNomCompletChequeClt() { + return NomCompletChequeClt; + } + + public void setNomCompletChequeClt(String NomCompletChequeClt) { + this.NomCompletChequeClt = NomCompletChequeClt; + } + + public String getCodeFactureClt() { + return CodeFactureClt; + } + + public void setCodeFactureClt(String CodeFactureClt) { + this.CodeFactureClt = CodeFactureClt; + } + + + + public String getDatePaiement() { + return DatePaiement; + } + + public void setDatePaiement(String DatePaiement) { + this.DatePaiement = DatePaiement; + } + + public String getDateCreation() { + return DateCreation; + } + + public void setDateCreation(String DateCreation) { + this.DateCreation = DateCreation; + } + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + public Profile getProfile() { + return profile; + } + + public void setProfile(Profile pro) { + this.profile = pro; + } + + public Integer getTypeClient() { + return TypeClient; + } + + public void setTypeClient(Integer TypeClient) { + this.TypeClient = TypeClient; + } + + public Client getCltPersonne() { + return CltPersonne; + } + + public void setCltPersonne(Client CltPersonne) { + this.CltPersonne = CltPersonne; + } + + public ClientEntreprise getCltEntreprise() { + return CltEntreprise; + } + + public void setCltEntreprise(ClientEntreprise CltEntreprise) { + this.CltEntreprise = CltEntreprise; + } + + public ClientPassager getCltPassager() { + return CltPassager; + } + + public void setCltPassager(ClientPassager CltPassager) { + this.CltPassager = CltPassager; + } + + public Integer getLastEtat() { + return LastEtat; + } + + public void setLastEtat(Integer LastEtat) { + this.LastEtat = LastEtat; + } + + public ObservableList getHistoriqueListe() { + return HistoriqueListe; + } + + public void setHistoriqueListe(ObservableList HistoriqueListe) { + this.HistoriqueListe = HistoriqueListe; + } + + +} diff --git a/src/main/java/Models/ChequeClt/ChequeCltDB.java b/src/main/java/Models/ChequeClt/ChequeCltDB.java new file mode 100644 index 0000000..339f82f --- /dev/null +++ b/src/main/java/Models/ChequeClt/ChequeCltDB.java @@ -0,0 +1,895 @@ +package Models.ChequeClt; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Caisse.CaisseClt; +import Models.User.User; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.User.Profile; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import Models.Caisse.CaisseDB; +import Models.User.ProfileDB; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class ChequeCltDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + public ChequeClt getChequeCltByIdHistorique(String IdHistoriqueChequeClt){ + + ChequeClt Cheque = new ChequeClt(); + Profile profile= new Profile(); + Client client = new Client(); + ClientEntreprise Entreprise = new ClientEntreprise(); + ClientPassager Passager = new ClientPassager(); + + String req =" SELECT C.id_chequeclt, C.numero, C.banque, C.montant, C.nom_complet, C.etat_cheque, DATE_FORMAT(C.date_paiement, '%d/%m/%Y') AS date_paiement, C.date_creation, C.id_factureclt, C.local_nom, " + + " C.id_profile, P.nom AS NomProfile, P.prenom AS PrenomProfile, " + + " F.typeclt, " + + " F.idcltexiste AS IdClient, Clt.nom AS NomClient, Clt.Prenom AS PrenomClient, Clt.telefix, Clt.telemobile, Clt.adresse AS adress_client, " + + " F.idcltentreprise AS IdEntreprise, Etr.nomentrepise AS NomEntreprise, Etr.matricule_fiscale AS MatriculeEntreprise, Etr.telefix, Etr.telefix2, Etr.adresse AS adress_entre, " + + " Pas.idcltpassageur AS IdPassageur, Pas.nom AS NomPassageur, Pas.Prenom AS PrenomPassageur, Pas.tele, Pas.gsm, Pas.adresse AS adress_pas " + + " FROM historique_cheque_clt H, cheque_clt C, profile P, factureclt F " + + " LEFT JOIN client Clt ON (F.typeclt = 0) AND (F.idcltexiste = Clt.codeclient) AND (Clt.local_nom = F.local_nom) " + + " LEFT JOIN cltentreprise Etr ON (F.typeclt = 1) AND (F.idcltentreprise = Etr.idcliententreprise) AND (Etr.local_nom = F.local_nom) " + + " LEFT JOIN cltpassageur Pas ON (F.typeclt = 2) AND (F.idcltpassageur = Pas.idcltpassageur) AND (Pas.local_nom = F.local_nom) " + + " WHERE (H.id_historique_cheque_clt = '"+IdHistoriqueChequeClt+"') AND (H.id_chequeclt = C.id_chequeclt) AND (H.local_nom = '"+ParametreSystem.NomLocalPC+"') AND (C.id_profile = P.idprofile) AND (C.id_factureclt = F.idfactureclt);"; + + ResultSet Result = cnx.Fetch(req); + + try{ + Cheque.setCodeChequeClt(Result.getString("id_chequeclt")); + Cheque.setNumeroChequeClt(Result.getString("numero")); + Cheque.setBanqueChequeClt(Result.getString("banque")); + Cheque.setMontantChequeClt(Result.getString("montant")); + Cheque.setNomCompletChequeClt(Result.getString("nom_complet")); + Cheque.setDatePaiement(Result.getString("date_paiement")); + Cheque.setDateCreation(Result.getString("date_creation")); + Cheque.setCodeFactureClt(Result.getString("id_factureclt")); + Cheque.setLocalNom(Result.getString("local_nom")); + + // 0 cheque sans provision 1 Verser (Valider) 2 Contre chéque(espace) + if(Result.getString("etat_cheque") != null){ + Cheque.setLastEtat(Result.getInt("etat_cheque")); + } + + + profile.setIdprofile(Result.getInt("id_profile")); + profile.setNom(Result.getString("NomProfile")); + profile.setPrenom(Result.getString("PrenomProfile")); + Cheque.setProfile(profile); + + Cheque.setTypeClient(Result.getInt("typeclt")); + if(Result.getInt("typeclt") == 0){ + client.setCodeclient(Result.getString("IdClient")); + client.setNom(Result.getString("NomClient")); + client.setPrenom(Result.getString("PrenomClient")); + client.setTelefixString(Result.getString("telefix")); + client.setTelemobileString(Result.getString("telemobile")); + client.setAdresse(Result.getString("adress_client")); + Cheque.setCltPersonne(client); + }else if(Result.getInt("typeclt") == 1){ + Entreprise.setCodeString(Result.getString("IdEntreprise")); + Entreprise.setNom(Result.getString("NomEntreprise")); + Entreprise.setMatricule(Result.getString("MatriculeEntreprise")); + Entreprise.setTele1String(Result.getString("telefix")); + Entreprise.setTele2String(Result.getString("telefix2")); + Entreprise.setAdresse(Result.getString("adress_entre")); + Cheque.setCltEntreprise(Entreprise); + }else if(Result.getInt("typeclt") == 2){ + Passager.setCodeclient(Result.getString("IdPassageur")); + Passager.setNom(Result.getString("NomPassageur")); + Passager.setPrenom(Result.getString("PrenomPassageur")); + Passager.setTelefixString(Result.getString("tele")); + Passager.setTelemobileString(Result.getString("gsm")); + Passager.setAdresse(Result.getString("adress_pas")); + Cheque.setCltPassager(Passager); + } + } catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + return Cheque; + } + + + public ChequeClt getChequeCltByFacture(String IdFactureClt){ + ChequeClt Cheque = new ChequeClt(); + Profile profile= new Profile(); + Client client = new Client(); + ClientEntreprise Entreprise = new ClientEntreprise(); + ClientPassager Passager = new ClientPassager(); + + String req =" SELECT C.id_chequeclt, C.numero, C.banque, C.montant, C.nom_complet, C.etat_cheque, DATE_FORMAT(C.date_paiement, '%d/%m/%Y') AS date_paiement, C.date_creation, C.id_factureclt, C.local_nom, " + + " C.id_profile, P.nom AS NomProfile, P.prenom AS PrenomProfile, " + + " F.typeclt, " + + " F.idcltexiste AS IdClient, Clt.nom AS NomClient, Clt.Prenom AS PrenomClient, Clt.telefix, Clt.telemobile, Clt.adresse AS adress_client, " + + " F.idcltentreprise AS IdEntreprise, Etr.nomentrepise AS NomEntreprise, Etr.matricule_fiscale AS MatriculeEntreprise, Etr.telefix, Etr.telefix2, Etr.adresse AS adress_entre, " + + " Pas.idcltpassageur AS IdPassageur, Pas.nom AS NomPassageur, Pas.Prenom AS PrenomPassageur, Pas.tele, Pas.gsm, Pas.adresse AS adress_pas " + + " FROM cheque_clt C, profile P, factureclt F " + + " LEFT JOIN client Clt ON (F.typeclt = 0) AND (F.idcltexiste = Clt.codeclient) AND (Clt.local_nom = F.local_nom) " + + " LEFT JOIN cltentreprise Etr ON (F.typeclt = 1) AND (F.idcltentreprise = Etr.idcliententreprise) AND (Etr.local_nom = F.local_nom) " + + " LEFT JOIN cltpassageur Pas ON (F.typeclt = 2) AND (F.idcltpassageur = Pas.idcltpassageur) AND (Pas.local_nom = F.local_nom) " + + " WHERE (C.id_factureclt = '"+IdFactureClt+"') AND (C.id_profile = P.idprofile) AND (C.id_factureclt = F.idfactureclt);"; + + ResultSet Result = cnx.Fetch(req); + + try{ + Cheque.setCodeChequeClt(Result.getString("id_chequeclt")); + Cheque.setNumeroChequeClt(Result.getString("numero")); + Cheque.setBanqueChequeClt(Result.getString("banque")); + Cheque.setMontantChequeClt(Result.getString("montant")); + Cheque.setNomCompletChequeClt(Result.getString("nom_complet")); + Cheque.setDatePaiement(Result.getString("date_paiement")); + Cheque.setDateCreation(Result.getString("date_creation")); + Cheque.setCodeFactureClt(Result.getString("id_factureclt")); + Cheque.setLocalNom(Result.getString("local_nom")); + + // 0 cheque sans provision 1 Verser (Valider) 2 Contre chéque(espace) + if(Result.getString("etat_cheque") != null){ + Cheque.setLastEtat(Result.getInt("etat_cheque")); + } + + + profile.setIdprofile(Result.getInt("id_profile")); + profile.setNom(Result.getString("NomProfile")); + profile.setPrenom(Result.getString("PrenomProfile")); + Cheque.setProfile(profile); + + Cheque.setTypeClient(Result.getInt("typeclt")); + if(Result.getInt("typeclt") == 0){ + client.setCodeclient(Result.getString("IdClient")); + client.setNom(Result.getString("NomClient")); + client.setPrenom(Result.getString("PrenomClient")); + client.setTelefixString(Result.getString("telefix")); + client.setTelemobileString(Result.getString("telemobile")); + client.setAdresse(Result.getString("adress_client")); + Cheque.setCltPersonne(client); + }else if(Result.getInt("typeclt") == 1){ + Entreprise.setCodeString(Result.getString("IdEntreprise")); + Entreprise.setNom(Result.getString("NomEntreprise")); + Entreprise.setMatricule(Result.getString("MatriculeEntreprise")); + Entreprise.setTele1String(Result.getString("telefix")); + Entreprise.setTele2String(Result.getString("telefix2")); + Entreprise.setAdresse(Result.getString("adress_entre")); + Cheque.setCltEntreprise(Entreprise); + }else if(Result.getInt("typeclt") == 2){ + Passager.setCodeclient(Result.getString("IdPassageur")); + Passager.setNom(Result.getString("NomPassageur")); + Passager.setPrenom(Result.getString("PrenomPassageur")); + Passager.setTelefixString(Result.getString("tele")); + Passager.setTelemobileString(Result.getString("gsm")); + Passager.setAdresse(Result.getString("adress_pas")); + Cheque.setCltPassager(Passager); + } + } catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + return Cheque; + } + + + + public ChequeClt getChequeClt(String IdChequeClt, Integer Source){ + ChequeClt Cheque = new ChequeClt(); + Profile profile= new Profile(); + Client client = new Client(); + ClientEntreprise Entreprise = new ClientEntreprise(); + ClientPassager Passager = new ClientPassager(); + + String req =""; + + if(Source == 0){ + req ="SELECT " + + " C.id_chequeclt, C.numero, C.banque, C.montant, C.nom_complet, C.etat_cheque, DATE_FORMAT(C.date_paiement, '%d/%m/%Y') AS date_paiement, C.date_creation, C.id_factureclt, C.local_nom, " + + " C.id_profile, P.nom AS NomProfile, P.prenom AS PrenomProfile, " + + " F.typeclt, " + + " F.idcltexiste AS IdClient, Clt.nom AS NomClient, Clt.Prenom AS PrenomClient, Clt.telefix, Clt.telemobile, Clt.adresse AS adress_client, " + + " F.idcltentreprise AS IdEntreprise, Etr.nomentrepise AS NomEntreprise, Etr.matricule_fiscale AS MatriculeEntreprise, Etr.telefix, Etr.telefix2, Etr.adresse AS adress_entre, " + + " Pas.idcltpassageur AS IdPassageur, Pas.nom AS NomPassageur, Pas.Prenom AS PrenomPassageur, Pas.tele, Pas.gsm, Pas.adresse AS adress_pas " + + " FROM cheque_clt C, profile P, factureclt F " + + " LEFT JOIN client Clt ON (F.typeclt = 0) AND (F.idcltexiste = Clt.codeclient) AND (Clt.local_nom = F.local_nom) " + + " LEFT JOIN cltentreprise Etr ON (F.typeclt = 1) AND (F.idcltentreprise = Etr.idcliententreprise) AND (Etr.local_nom = F.local_nom) " + + " LEFT JOIN cltpassageur Pas ON (F.typeclt = 2) AND (F.idcltpassageur = Pas.idcltpassageur) AND (Pas.local_nom = F.local_nom) " + + " WHERE (id_chequeclt = '"+IdChequeClt+"') AND (C.id_profile = P.idprofile) AND (C.id_factureclt = F.idfactureclt);"; + }else if(Source == 1){ + req ="SELECT " + + " C.id_traite_paiement_cheque AS id_chequeclt, " + + " C.numero, " + + " C.banque, " + + " C.montant_payer AS montant, " + + " C.nom_complet, " + + " C.etat_cheque, " + + " DATE_FORMAT(C.date_payer, '%d/%m/%Y') AS date_paiement, " + + " C.date_creation, " + + " F.idfactureclt AS id_factureclt, " + + " C.local_nom, " + + " C.id_profile, P.nom AS NomProfile, P.prenom AS PrenomProfile, " + + " F.typeclt, " + + " F.idcltexiste AS IdClient, Clt.nom AS NomClient, Clt.Prenom AS PrenomClient, Clt.telefix, Clt.telemobile, Clt.adresse AS adress_client, " + + " F.idcltentreprise AS IdEntreprise, Etr.nomentrepise AS NomEntreprise, Etr.matricule_fiscale AS MatriculeEntreprise, Etr.telefix, Etr.telefix2, Etr.adresse AS adress_entre, " + + " Pas.idcltpassageur AS IdPassageur, Pas.nom AS NomPassageur, Pas.Prenom AS PrenomPassageur, Pas.tele, Pas.gsm, Pas.adresse AS adress_pas " + + " FROM traite_paiement_cheque_clt C, profile P, traite_clt T, factureclt F " + + " LEFT JOIN client Clt ON (F.typeclt = 0) AND (F.idcltexiste = Clt.codeclient) AND (Clt.local_nom = F.local_nom) " + + " LEFT JOIN cltentreprise Etr ON (F.typeclt = 1) AND (F.idcltentreprise = Etr.idcliententreprise) AND (Etr.local_nom = F.local_nom) " + + " LEFT JOIN cltpassageur Pas ON (F.typeclt = 2) AND (F.idcltpassageur = Pas.idcltpassageur) AND (Pas.local_nom = F.local_nom) " + + " WHERE (C.id_traite_paiement_cheque = '"+IdChequeClt+"') AND (C.id_profile = P.idprofile) AND (C.id_traite = T.id_traite) AND (T.id_factureclt = F.idfactureclt) AND (T.local_nom = C.local_nom);"; + } + ResultSet Result = cnx.Fetch(req); + try{ + Cheque.setCodeChequeClt(Result.getString("id_chequeclt")); + Cheque.setNumeroChequeClt(Result.getString("numero")); + Cheque.setBanqueChequeClt(Result.getString("banque")); + Cheque.setMontantChequeClt(Result.getString("montant")); + Cheque.setMontantFloatChequeClt(Result.getFloat("montant")); + Cheque.setNomCompletChequeClt(Result.getString("nom_complet")); + Cheque.setDatePaiement(Result.getString("date_paiement")); + Cheque.setDateCreation(Result.getString("date_creation")); + Cheque.setCodeFactureClt(Result.getString("id_factureclt")); + Cheque.setLocalNom(Result.getString("local_nom")); + + // 0 cheque sans provision 1 Verser (Valider) 2 Contre chéque(espace) + if(Result.getString("etat_cheque") != null){ + Cheque.setLastEtat(Result.getInt("etat_cheque")); + } + + + profile.setIdprofile(Result.getInt("id_profile")); + profile.setNom(Result.getString("NomProfile")); + profile.setPrenom(Result.getString("PrenomProfile")); + Cheque.setProfile(profile); + + Cheque.setTypeClient(Result.getInt("typeclt")); + if(Result.getInt("typeclt") == 0){ + client.setCodeclient(Result.getString("IdClient")); + client.setNom(Result.getString("NomClient")); + client.setPrenom(Result.getString("PrenomClient")); + client.setTelefixString(Result.getString("telefix")); + client.setTelemobileString(Result.getString("telemobile")); + client.setAdresse(Result.getString("adress_client")); + Cheque.setCltPersonne(client); + }else if(Result.getInt("typeclt") == 1){ + Entreprise.setCodeString(Result.getString("IdEntreprise")); + Entreprise.setNom(Result.getString("NomEntreprise")); + Entreprise.setMatricule(Result.getString("MatriculeEntreprise")); + Entreprise.setTele1String(Result.getString("telefix")); + Entreprise.setTele2String(Result.getString("telefix2")); + Entreprise.setAdresse(Result.getString("adress_entre")); + Cheque.setCltEntreprise(Entreprise); + }else if(Result.getInt("typeclt") == 2){ + Passager.setCodeclient(Result.getString("IdPassageur")); + Passager.setNom(Result.getString("NomPassageur")); + Passager.setPrenom(Result.getString("PrenomPassageur")); + Passager.setTelefixString(Result.getString("tele")); + Passager.setTelemobileString(Result.getString("gsm")); + Passager.setAdresse(Result.getString("adress_pas")); + Cheque.setCltPassager(Passager); + } + + Cheque.setHistoriqueListe(this.getListChequeHistorique(IdChequeClt, Source)); + + } catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + return Cheque; + } + + + public ObservableList getListChequeHistorique(String id_cheque, Integer source){ + + ObservableList ListChequeHistorique = FXCollections.observableArrayList(); + + String Query = ""; + if(source == 0){ + Query = "SELECT C.id_historique_cheque_clt, C.etat_cheque, DATE_FORMAT(C.date, '%d/%m/%Y') AS date_operation, DATE_FORMAT(date, '%H:%i:%s') AS heur_operation, C.id_chequeclt AS id_cheque, C.local_nom, C.id_profile, P.nom, P.prenom " + + " FROM historique_cheque_clt C, `profile` P " + + " WHERE (C.local_nom LIKE '"+ParametreSystem.NomLocalPC+"') AND (C.id_chequeclt = '"+id_cheque+"') AND (P.idprofile = C.`id_profile`) ; "; + }else if(source == 1){ + Query = "SELECT C.id_historique_cheque_clt, C.etat_cheque, DATE_FORMAT(C.date, '%d/%m/%Y') AS date_operation, DATE_FORMAT(date, '%H:%i:%s') AS heur_operation, C.id_chequeclt AS id_cheque, C.local_nom, C.id_profile, P.nom, P.prenom " + + " FROM historique_cheque_clt C, `profile` P " + + " WHERE (C.local_nom LIKE '"+ParametreSystem.NomLocalPC+"') AND (C.id_traite_paiement_cheque = '"+id_cheque+"') AND (P.idprofile = C.`id_profile`) ; "; + } + + ResultSet resultat= cnx.FetchALL(Query); + + try { + while ( resultat.next() ) { + String id_historique = resultat.getString("id_historique_cheque_clt"); + Integer etat = resultat.getInt("etat_cheque"); + String date_operation = resultat.getString("date_operation"); + String heur_operation = resultat.getString("heur_operation"); + String utilisateur = resultat.getString("nom")+" "+resultat.getString("prenom"); + String locale = resultat.getString("local_nom"); + ListChequeHistorique.add(new ChequeCltHistoriqueListe(id_historique, etat, source, id_cheque, date_operation, heur_operation, utilisateur, locale)); + } + } catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + return ListChequeHistorique; + } + + + + public String AddChequeClt(ChequeClt Cheque){ + String req ="INSERT INTO cheque_clt (`numero`, `banque`, `montant`, `nom_complet`, `date_paiement`, `date_creation`, `id_factureclt`, `local_nom`, id_profile) VALUES ('"+Cheque.getNumeroChequeClt()+"', '"+Cheque.getBanqueChequeClt()+"', "+Cheque.getMontantChequeClt()+", '"+Cheque.getNomCompletChequeClt()+"', '"+Cheque.getDatePaiement()+"', CURTIME(), "+Cheque.getCodeFactureClt()+", '"+ParametreSystem.NomLocalPC+"', "+User.idprofile+")"; + return cnx.InsertGetLastId(req); + } + + public void AddListeChequeClt(ArrayList ListChequeClt, String CodeFactureClt){ + String ReqChequeClt = "INSERT INTO cheque_clt (`numero`, `banque`, `montant`, `nom_complet`, `date_paiement`, `date_creation`, `id_factureclt`, `local_nom`, id_profile) VALUES "; + String Req = ""; + + for(int i=0; i DataListChequeClt = FXCollections.observableArrayList(); + + String WhereReq1 = ""; + String WhereReq2 = ""; + + if(!clt.isStringNull(NumeroCheque)){ + WhereReq1 += " (C.numero LIKE \"%"+Adaptateur.addSlashes(NumeroCheque)+"%\") AND "; + WhereReq2 += " (C.numero LIKE \"%"+Adaptateur.addSlashes(NumeroCheque)+"%\") AND "; + } + + if(!clt.isStringNull(Banque)){ + WhereReq1 += " (C.banque LIKE \"%"+Adaptateur.addSlashes(Banque)+"%\") AND "; + WhereReq2 += " (C.banque LIKE \"%"+Adaptateur.addSlashes(Banque)+"%\") AND "; + } + + if(!clt.isStringNull(DateCheque)){ + WhereReq1 += " (C.date_paiement = \""+DateCheque+"\") AND "; + WhereReq2 += " (C.date_payer = \""+DateCheque+"\") AND "; + } + + if(!clt.isStringNull(CodeClt)){ + WhereReq1 += " ( (O.codeclient = \""+CodeClt+"\") OR (E.idcliententreprise = \""+CodeClt+"\" ) ) AND "; + WhereReq2 += " ( (O.codeclient = \""+CodeClt+"\") OR (E.idcliententreprise = \""+CodeClt+"\" ) ) AND "; + } + + if(!clt.isStringNull(CINClt)){ + WhereReq1 += " ( (O.cin LIKE \"%"+CINClt+"%\") OR (E.matricule_fiscale LIKE \"%"+CINClt+"%\") ) AND "; + WhereReq2 += " ( (O.cin LIKE \"%"+CINClt+"%\") OR (E.matricule_fiscale LIKE \"%"+CINClt+"%\") ) AND "; + } + + if(!clt.isStringNull(NomClt)){ + WhereReq1 += " ( (P.nom LIKE \"%"+NomClt+"%\") OR (O.nom LIKE \"%"+NomClt+"%\") OR (E.nomentrepise LIKE \"%"+NomClt+"%\") ) AND "; + WhereReq2 += " ( (O.nom LIKE \"%"+NomClt+"%\") OR (O.nom LIKE \"%"+NomClt+"%\") OR (E.nomentrepise LIKE \"%"+NomClt+"%\") ) AND "; + } + + if(!clt.isStringNull(PrenomClt)){ + WhereReq1 += " ( (P.prenom LIKE \"%"+PrenomClt+"%\") OR (O.prenom LIKE \"%"+PrenomClt+"%\") OR (E.matricule_fiscale LIKE \"%"+PrenomClt+"%\") ) AND "; + WhereReq2 += " ( (O.prenom LIKE \"%"+PrenomClt+"%\") OR (O.prenom LIKE \"%"+PrenomClt+"%\") OR (E.matricule_fiscale LIKE \"%"+PrenomClt+"%\") ) AND "; + } + + if(!clt.isStringNull(IdFacture)){ + WhereReq1 += " (C.id_factureclt = \""+IdFacture+"\") AND "; + WhereReq2 += " (T.id_factureclt = \""+IdFacture+"\") AND "; + } + + + String req= "SELECT C.id_chequeclt, '0' AS source_cheque, C.numero, C.banque, C.montant, C.etat_cheque, DATE_FORMAT(C.date_paiement, '%d/%m/%Y') AS date_cheque, C.id_factureclt, F.typeclt, O.codeclient, O.nom, O.prenom, P.idcltpassageur , P.nom AS nom_pass, P.prenom AS prenom_pass, E.idcliententreprise, E.nomentrepise, E.matricule_fiscale " + + " FROM cheque_clt C, factureclt F " + + " LEFT JOIN client O ON (O.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltexiste = O.codeclient) " + + " LEFT JOIN cltpassageur P ON (P.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltpassageur = P.idcltpassageur) " + + " LEFT JOIN cltentreprise E ON (E.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltentreprise = E.idcliententreprise) " + + " WHERE "+WhereReq1+" (C.local_nom = '"+ParametreSystem.NomLocalPC+"') AND (C.id_factureclt = F.idfactureclt) " + + " UNION ALL " + + " SELECT C.id_traite_paiement_cheque AS id_chequeclt, '1' AS source_cheque, C.numero, C.banque, C.montant_payer AS montant, C.etat_cheque, DATE_FORMAT(C.date_payer, '%d/%m/%Y') AS date_cheque, T.id_factureclt, F.typeclt, O.codeclient, O.nom, O.prenom, P.idcltpassageur , P.nom AS nom_pass, P.prenom AS prenom_pass, E.idcliententreprise, E.nomentrepise, E.matricule_fiscale " + + " FROM traite_paiement_cheque_clt C, traite_clt T, factureclt F " + + " LEFT JOIN client O ON (O.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltexiste = O.codeclient) " + + " LEFT JOIN cltpassageur P ON (P.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltpassageur = P.idcltpassageur) " + + " LEFT JOIN cltentreprise E ON (E.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltentreprise = E.idcliententreprise) " + + " WHERE "+WhereReq2+" (C.local_nom = '"+ParametreSystem.NomLocalPC+"') AND (T.id_factureclt = F.idfactureclt) AND (C.id_traite = T.id_traite)" + + " LIMIT "+debut+" , "+nbr+" ;"; + + try { + ResultSet resultat= cnx.FetchALL(req); + + while ( resultat.next() ) { + + String id_cheque = resultat.getString("id_chequeclt"); + String numero = resultat.getString("numero"); + String banque = resultat.getString("banque"); + String montant = Adaptateur.FloatToStringEspace(resultat.getFloat("montant")); + String date_cheque = resultat.getString("date_cheque"); + String id_factureclt = resultat.getString("id_factureclt"); + + //0 Personne 1 Entreprise + Integer Typeclt = resultat.getInt("typeclt"); + String TypeClient = ""; String CodeClient = ""; String Nom = ""; String Prenom = ""; + if(Typeclt == 0){ + TypeClient = "Personne"; + CodeClient = resultat.getString("codeclient"); + Nom = resultat.getString("nom"); + Prenom = resultat.getString("prenom"); + }if(Typeclt == 1){ + TypeClient = "Entreprise"; + CodeClient = resultat.getString("idcliententreprise"); + Nom = resultat.getString("nomentrepise"); + Prenom = resultat.getString("matricule_fiscale"); + }if(Typeclt == 2){ + TypeClient = "Passageur"; + CodeClient = resultat.getString("idcltpassageur"); + Nom = resultat.getString("nom_pass"); + Prenom = resultat.getString("prenom_pass"); + } + + // 0 ==> Cheque sans provision + // 1 ==> Verser (Valider) + // 2 ==> Contre chèque + String etat = resultat.getString("etat_cheque"); + + + // 0 ==> Cheque (table cheque_clt) + // 1 ==> Traite (table traite_paiement_cheque_clt) + Integer source = resultat.getInt("source_cheque"); + + DataListChequeClt.add(new ChequeCltGestionListe(id_cheque, numero, banque, date_cheque, montant, CodeClt, TypeClient, Nom, Prenom, id_factureclt, etat, source, false)); + } + + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + return DataListChequeClt; + } + + public Integer nbrChequeCltGestion(String NumeroCheque, String Banque, String DateCheque, String CodeClt, String CINClt, String IdFacture, String NomClt, String PrenomClt){ + + String WhereReq1 = ""; + String WhereReq2 = ""; + + if(!clt.isStringNull(NumeroCheque)){ + WhereReq1 += " (C.numero LIKE \"%"+Adaptateur.addSlashes(NumeroCheque)+"%\") AND "; + WhereReq2 += " (C.numero LIKE \"%"+Adaptateur.addSlashes(NumeroCheque)+"%\") AND "; + } + + if(!clt.isStringNull(Banque)){ + WhereReq1 += " (C.banque LIKE \"%"+Adaptateur.addSlashes(Banque)+"%\") AND "; + WhereReq2 += " (C.banque LIKE \"%"+Adaptateur.addSlashes(Banque)+"%\") AND "; + } + + if(!clt.isStringNull(DateCheque)){ + WhereReq1 += " (C.date_paiement = \""+DateCheque+"\") AND "; + WhereReq2 += " (C.date_payer = \""+DateCheque+"\") AND "; + } + + if(!clt.isStringNull(CodeClt)){ + WhereReq1 += " ( (O.codeclient = \""+CodeClt+"\") OR (E.idcliententreprise = \""+CodeClt+"\" ) ) AND "; + WhereReq2 += " ( (O.codeclient = \""+CodeClt+"\") OR (E.idcliententreprise = \""+CodeClt+"\" ) ) AND "; + } + + if(!clt.isStringNull(CINClt)){ + WhereReq1 += " ( (O.cin LIKE \"%"+CINClt+"%\") OR (E.matricule_fiscale LIKE \"%"+CINClt+"%\") ) AND "; + WhereReq2 += " ( (O.cin LIKE \"%"+CINClt+"%\") OR (E.matricule_fiscale LIKE \"%"+CINClt+"%\") ) AND "; + } + + if(!clt.isStringNull(NomClt)){ + WhereReq1 += " ( (P.nom LIKE \"%"+NomClt+"%\") OR (O.nom LIKE \"%"+NomClt+"%\") OR (E.nomentrepise LIKE \"%"+NomClt+"%\") ) AND "; + WhereReq2 += " ( (O.nom LIKE \"%"+NomClt+"%\") OR (O.nom LIKE \"%"+NomClt+"%\") OR (E.nomentrepise LIKE \"%"+NomClt+"%\") ) AND "; + } + + if(!clt.isStringNull(PrenomClt)){ + WhereReq1 += " ( (P.prenom LIKE \"%"+PrenomClt+"%\") OR (O.prenom LIKE \"%"+PrenomClt+"%\") OR (E.matricule_fiscale LIKE \"%"+PrenomClt+"%\") ) AND "; + WhereReq2 += " ( (O.prenom LIKE \"%"+PrenomClt+"%\") OR (O.prenom LIKE \"%"+PrenomClt+"%\") OR (E.matricule_fiscale LIKE \"%"+PrenomClt+"%\") ) AND "; + } + + if(!clt.isStringNull(IdFacture)){ + WhereReq1 += " (C.id_factureclt = \""+IdFacture+"\") AND "; + WhereReq2 += " (T.id_factureclt = \""+IdFacture+"\") AND "; + } + + + String req= "SELECT COUNT(C.id_chequeclt) AS nbr_cheque" + + " FROM cheque_clt C, factureclt F " + + " LEFT JOIN client O ON (O.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltexiste = O.codeclient) " + + " LEFT JOIN cltpassageur P ON (P.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltpassageur = P.idcltpassageur) " + + " LEFT JOIN cltentreprise E ON (E.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltentreprise = E.idcliententreprise) " + + " WHERE "+WhereReq1+" (C.local_nom = '"+ParametreSystem.NomLocalPC+"') AND (C.id_factureclt = F.idfactureclt) " + + " UNION ALL " + + " SELECT COUNT(C.id_traite_paiement_cheque) AS nbr_cheque " + + " FROM traite_paiement_cheque_clt C, traite_clt T, factureclt F " + + " LEFT JOIN client O ON (O.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltexiste = O.codeclient) " + + " LEFT JOIN cltpassageur P ON (P.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltpassageur = P.idcltpassageur) " + + " LEFT JOIN cltentreprise E ON (E.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltentreprise = E.idcliententreprise) " + + " WHERE "+WhereReq2+" (C.local_nom = '"+ParametreSystem.NomLocalPC+"') AND (T.id_factureclt = F.idfactureclt) AND (C.id_traite = T.id_traite) ; "; + + Integer Sommme = 0; + + try { + ResultSet resultat= cnx.FetchALL(req); + + while ( resultat.next() ) { + Sommme += resultat.getInt("nbr_cheque"); + } + + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + + return Sommme ; + + } + + + //Etat 0 cheque sans provision 1 Verser (Valider) 2 Contre chéque(espace) + //Source 0==>Cheque(table cheque_clt) 1==>Traite(table traite_paiement_cheque_clt) + public String setHistoriqueCheque(Integer Etat, Integer Source, ChequeClt Cheque){ + String QueryINSERT = ""; + String QueryUpdate = ""; + + if(Source == 0){ + QueryINSERT = "INSERT INTO `historique_cheque_clt` (`etat_cheque`, `date`, `id_chequeclt`, `local_nom`, `id_profile`) VALUES ('"+Etat+"', CURTIME(), '"+Cheque.getCodeChequeClt()+"', '"+ParametreSystem.NomLocalPC+"', '"+User.idprofile+"');"; + QueryUpdate = "UPDATE `cheque_clt` SET `etat_cheque`='"+Etat+"' WHERE `id_chequeclt`='"+Cheque.getCodeChequeClt()+"';"; + }else if(Source == 1){ + QueryINSERT = "INSERT INTO `historique_cheque_clt` (`etat_cheque`, `date`, `id_traite_paiement_cheque`, `local_nom`, `id_profile`) VALUES ('"+Etat+"', CURTIME(), '"+Cheque.getCodeChequeClt()+"', '"+ParametreSystem.NomLocalPC+"', '"+User.idprofile+"');"; + QueryUpdate = "UPDATE `traite_paiement_cheque_clt` SET `etat_cheque`='"+Etat+"' WHERE `id_traite_paiement_cheque`='"+Cheque.getCodeChequeClt()+"';"; + } + + cnx.MettreAJour(QueryUpdate); + + String IdHistoriqueCheque = cnx.InsertGetLastId(QueryINSERT); + + + if((Etat == 1) || (Etat == 2)){ + CaisseClt Caisse = new CaisseClt(); + Caisse.setTypeMouvement("4"); + Caisse.setMontant(Cheque.getMontantChequeClt()); + Caisse.setIdHistoriqueCheque(IdHistoriqueCheque); + + CaisseDB CaisseDB = new CaisseDB(); + CaisseDB.AddCaisse(Caisse); + } + + + + + + return IdHistoriqueCheque; + } + + + public ObservableList GetDataChequeAverser(String date_debut, String date_fin){ + + ObservableList DataListChequeClt = FXCollections.observableArrayList(); + + String req= "SELECT C.id_chequeclt, '0' AS source_cheque, C.numero, C.banque, C.montant, C.etat_cheque, DATE_FORMAT(C.date_paiement, '%d/%m/%Y') AS date_cheque, C.id_factureclt, F.typeclt, O.codeclient, O.nom, O.prenom, P.idcltpassageur , P.nom AS nom_pass, P.prenom AS prenom_pass, E.idcliententreprise, E.nomentrepise, E.matricule_fiscale " + + " FROM cheque_clt C, factureclt F " + + " LEFT JOIN client O ON (O.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltexiste = O.codeclient) " + + " LEFT JOIN cltpassageur P ON (P.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltpassageur = P.idcltpassageur) " + + " LEFT JOIN cltentreprise E ON (E.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltentreprise = E.idcliententreprise) " + + " WHERE (C.date_paiement BETWEEN '"+date_debut+"' AND '"+date_fin+"') AND ((C.etat_cheque IS NULL) OR (C.etat_cheque = 0)) AND (C.local_nom = '"+ParametreSystem.NomLocalPC+"') AND (C.id_factureclt = F.idfactureclt) " + + " UNION ALL " + + " SELECT C.id_traite_paiement_cheque AS id_chequeclt, '1' AS source_cheque, C.numero, C.banque, C.montant_payer AS montant, C.etat_cheque, DATE_FORMAT(C.date_payer, '%d/%m/%Y') AS date_cheque, T.id_factureclt, F.typeclt, O.codeclient, O.nom, O.prenom, P.idcltpassageur , P.nom AS nom_pass, P.prenom AS prenom_pass, E.idcliententreprise, E.nomentrepise, E.matricule_fiscale " + + " FROM traite_paiement_cheque_clt C, traite_clt T, factureclt F " + + " LEFT JOIN client O ON (O.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltexiste = O.codeclient) " + + " LEFT JOIN cltpassageur P ON (P.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltpassageur = P.idcltpassageur) " + + " LEFT JOIN cltentreprise E ON (E.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltentreprise = E.idcliententreprise) " + + " WHERE (C.date_payer BETWEEN '"+date_debut+"' AND '"+date_fin+"') AND ((C.etat_cheque IS NULL) OR (C.etat_cheque = 0)) AND (C.local_nom = '"+ParametreSystem.NomLocalPC+"') AND (T.id_factureclt = F.idfactureclt) AND (C.id_traite = T.id_traite)" + + " ORDER BY date_cheque ASC ;"; + + try { + ResultSet resultat= cnx.FetchALL(req); + + while ( resultat.next() ) { + + String id_cheque = resultat.getString("id_chequeclt"); + String numero = resultat.getString("numero"); + String banque = resultat.getString("banque"); + String montant = resultat.getString("montant"); + String date_cheque = resultat.getString("date_cheque"); + + //0 Personne 1 Entreprise + Integer Typeclt = resultat.getInt("typeclt"); + String TypeClient = ""; String Nom = ""; String Prenom = ""; + if(Typeclt == 0){ + TypeClient = "Personne";//ancien client + Nom = resultat.getString("nom"); + Prenom = resultat.getString("prenom"); + }if(Typeclt == 1){ + TypeClient = "Entreprise"; + Nom = resultat.getString("nomentrepise"); + Prenom = resultat.getString("matricule_fiscale"); + }if(Typeclt == 2){ + TypeClient = "Passageur"; + Nom = resultat.getString("nom_pass"); + Prenom = resultat.getString("prenom_pass"); + } + + // 0 ==> Cheque (table cheque_clt) + // 1 ==> Traite (table traite_paiement_cheque_clt) + Integer source = resultat.getInt("source_cheque"); + + DataListChequeClt.add(new ChequeCltGestionListe(id_cheque, numero, banque, date_cheque, montant, "", TypeClient, Nom, Prenom, "", "", source, false)); + } + + } catch(SQLException ex){ + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + return DataListChequeClt; + } + + public int UpdateChequeCltVerser(List AryChequeClt, List AryChequePaiementTraite){ + int NbrUpdate = 0; + + + if(AryChequeClt.size()>0){ + String StrChequeClt = String.join(",", AryChequeClt); + String QueryUpdate1 = "UPDATE cheque_clt SET `etat_cheque` = '1' WHERE (`id_chequeclt` IN ("+StrChequeClt+") ) and (`local_nom` = '"+ParametreSystem.NomLocalPC+"');"; + NbrUpdate += cnx.MettreAJour(QueryUpdate1); + + String QueryInsert1 = "INSERT INTO historique_cheque_clt (etat_cheque, date, id_chequeclt, local_nom, id_profile) VALUES "; + for (String IdCheque : AryChequeClt) { + QueryInsert1 += " ('1', CURTIME(), '"+IdCheque+"', '"+ParametreSystem.NomLocalPC+"', '"+User.idprofile+"'),"; + } + QueryInsert1 = QueryInsert1.substring(0, QueryInsert1.length()-1) + ";"; + cnx.insertion(QueryInsert1); + + } + if(AryChequePaiementTraite.size()>0){ + String StrPaiementTraite = String.join(",", AryChequePaiementTraite); + String QueryUpdate2 = "UPDATE traite_paiement_cheque_clt SET `etat_cheque` = '1' WHERE (`id_traite_paiement_cheque` IN ("+StrPaiementTraite+") ) and (`local_nom` = '"+ParametreSystem.NomLocalPC+"');"; + NbrUpdate += cnx.MettreAJour(QueryUpdate2); + + String QueryInsert2 = "INSERT INTO `historique_cheque_clt` (`etat_cheque`, `date`, `id_traite_paiement_cheque`, `local_nom`, `id_profile`) VALUES "; + for (String IdCheque : AryChequePaiementTraite) { + QueryInsert2 += " ('1', CURTIME(), '"+IdCheque+"', '"+ParametreSystem.NomLocalPC+"', '"+User.idprofile+"'),"; + } + QueryInsert2 = QueryInsert2.substring(0, QueryInsert2.length()-1) + ";"; + cnx.insertion(QueryInsert2); + } + + return NbrUpdate; + } + + + public ObservableList SearchChequeCltProvision(Integer debut, Integer nbr, String DateDebut, String Local, String Banque, String CodeClt, String CINClt, String NomPrenomClt, boolean All) + { + String WhereReq1 = " WHERE (C.etat_cheque = 0) AND (C.id_factureclt = F.idfactureclt) AND "; + String WhereReq2 = " WHERE (C.etat_cheque = 0) AND (C.local_nom = F.local_nom) AND (T.id_factureclt = F.idfactureclt) AND (C.id_traite = T.id_traite) AND "; + + if(!clt.isStringNull(Local)){ + WhereReq1 += " (C.local_nom = \""+Local+"\") AND "; + WhereReq2 += " (C.local_nom = \""+Local+"\") AND "; + } + + if(!clt.isStringNull(DateDebut)){ + WhereReq1 += " (DATE(C.date_paiement) >= \""+DateDebut+"\") AND "; + WhereReq2 += " (DATE(C.date_payer) >= \""+DateDebut+"\") AND "; + } + + if(!clt.isStringNull(CodeClt)){ + WhereReq1 += " ( (O.codeclient = \""+CodeClt+"\") OR (P.idcltpassageur = \""+CodeClt+"\") OR (E.idcliententreprise = \""+CodeClt+"\" ) ) AND "; + WhereReq2 += " ( (O.codeclient = \""+CodeClt+"\") OR (P.idcltpassageur = \""+CodeClt+"\") OR (E.idcliententreprise = \""+CodeClt+"\" ) ) AND "; + } + + if(!clt.isStringNull(CINClt)){ + WhereReq1 += " ( (O.cin LIKE \"%"+CINClt+"%\") OR (E.matricule_fiscale LIKE \"%"+CINClt+"%\") ) AND "; + WhereReq2 += " ( (O.cin LIKE \"%"+CINClt+"%\") OR (E.matricule_fiscale LIKE \"%"+CINClt+"%\") ) AND "; + } + + if(!clt.isStringNull(NomPrenomClt)){ + WhereReq1 += " ( (O.nom LIKE \"%"+NomPrenomClt+"%\") OR (O.prenom LIKE \"%"+NomPrenomClt+"%\") OR (E.nomentrepise LIKE \"%"+NomPrenomClt+"%\") OR (P.prenom LIKE \"%"+NomPrenomClt+"%\") OR (P.nom LIKE \"%"+NomPrenomClt+"%\") ) AND "; + WhereReq2 += " ( (O.nom LIKE \"%"+NomPrenomClt+"%\") OR (O.prenom LIKE \"%"+NomPrenomClt+"%\") OR (E.nomentrepise LIKE \"%"+NomPrenomClt+"%\") OR (P.prenom LIKE \"%"+NomPrenomClt+"%\") OR (P.nom LIKE \"%"+NomPrenomClt+"%\") ) AND "; + } + + WhereReq1 = WhereReq1.substring(0, WhereReq1.length() - 4); + WhereReq2 = WhereReq2.substring(0, WhereReq2.length() - 4); + + + String Limit = ""; + if(All == false){ + Limit = " LIMIT "+debut+" , "+nbr+" ; "; + } + + String req= "SELECT C.id_chequeclt, '0' AS source_cheque, C.numero, C.banque, C.montant, C.etat_cheque, DATE_FORMAT(C.date_paiement, '%d/%m/%Y') AS date_cheque, C.id_factureclt, F.typeclt, O.codeclient, O.nom, O.prenom, P.idcltpassageur , P.nom AS nom_pass, P.prenom AS prenom_pass, E.idcliententreprise, E.nomentrepise, E.matricule_fiscale, F.local_nom " + + " FROM `cheque_clt` C, `factureclt` F " + + " LEFT JOIN `client` O ON (O.local_nom = F.local_nom) AND (F.idcltexiste = O.codeclient) " + + " LEFT JOIN `cltpassageur` P ON (P.local_nom = F.local_nom) AND (F.idcltpassageur = P.idcltpassageur) " + + " LEFT JOIN `cltentreprise` E ON (E.local_nom= F.local_nom) AND (F.idcltentreprise = E.idcliententreprise) " + + WhereReq1 + + " UNION ALL " + + " SELECT C.id_traite_paiement_cheque AS id_chequeclt, '1' AS source_cheque, C.numero, C.banque, C.montant_payer AS montant, C.etat_cheque, DATE_FORMAT(C.date_payer, '%d/%m/%Y') AS date_cheque, T.id_factureclt, F.typeclt, O.codeclient, O.nom, O.prenom, P.idcltpassageur , P.nom AS nom_pass, P.prenom AS prenom_pass, E.idcliententreprise, E.nomentrepise, E.matricule_fiscale, F.local_nom " + + " FROM `traite_paiement_cheque_clt` C, traite_clt T, factureclt F " + + " LEFT JOIN `client` O ON (O.local_nom = F.local_nom) AND (F.idcltexiste = O.codeclient) " + + " LEFT JOIN `cltpassageur` P ON (P.local_nom = F.local_nom) AND (F.idcltpassageur = P.idcltpassageur) " + + " LEFT JOIN `cltentreprise` E ON (E.local_nom = F.local_nom) AND (F.idcltentreprise = E.idcliententreprise) " + + WhereReq2 + + Limit ; + + + ObservableList DataListChequeClt = FXCollections.observableArrayList(); + + try { + ResultSet resultat= cnx.FetchALL(req); + + while ( resultat.next() ) { + + String id_cheque = resultat.getString("id_chequeclt"); + String numero = resultat.getString("numero"); + String banque = resultat.getString("banque"); + String montant = Adaptateur.StringToStringEspace(resultat.getString("montant")); + String date_cheque = resultat.getString("date_cheque"); + + //0 Personne 1 Entreprise + Integer Typeclt = resultat.getInt("typeclt"); + String TypeClient = ""; String Nom = ""; String Prenom = ""; + if(Typeclt == 0){ + TypeClient = "Personne";//ancien client + Nom = resultat.getString("nom"); + Prenom = resultat.getString("prenom"); + }if(Typeclt == 1){ + TypeClient = "Entreprise"; + Nom = resultat.getString("nomentrepise"); + Prenom = resultat.getString("matricule_fiscale"); + }if(Typeclt == 2){ + TypeClient = "Passageur"; + Nom = resultat.getString("nom_pass"); + Prenom = resultat.getString("prenom_pass"); + } + + // 0 ==> Cheque (table cheque_clt) + // 1 ==> Traite (table traite_paiement_cheque_clt) + Integer source = resultat.getInt("source_cheque"); + + String local = resultat.getString("local_nom"); + + DataListChequeClt.add(new ChequeCltGestionListe(id_cheque, numero, banque, date_cheque, montant, "", TypeClient, Nom, Prenom, "", local, source, false)); + } + + } catch(SQLException ex){ + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + return DataListChequeClt; + } + + + public Integer nbrChequeCltProvision(String DateDebut, String Local, String Banque, String CodeClt, String CINClt, String NomPrenomClt) + { + String WhereReq1 = " WHERE (C.etat_cheque = 0) AND (C.id_factureclt = F.idfactureclt) AND "; + String WhereReq2 = " WHERE (C.etat_cheque = 0) AND (C.local_nom = F.local_nom) AND (T.id_factureclt = F.idfactureclt) AND (C.id_traite = T.id_traite) AND "; + + if(!clt.isStringNull(Local)){ + WhereReq1 += " (C.local_nom = \""+Local+"\") AND "; + WhereReq2 += " (C.local_nom = \""+Local+"\") AND "; + } + + if(!clt.isStringNull(DateDebut)){ + WhereReq1 += " (DATE(C.date_paiement) >= \""+DateDebut+"\") AND "; + WhereReq2 += " (DATE(C.date_payer) >= \""+DateDebut+"\") AND "; + } + + if(!clt.isStringNull(CodeClt)){ + WhereReq1 += " ( (O.codeclient = \""+CodeClt+"\") OR (P.idcltpassageur = \""+CodeClt+"\") OR (E.idcliententreprise = \""+CodeClt+"\" ) ) AND "; + WhereReq2 += " ( (O.codeclient = \""+CodeClt+"\") OR (P.idcltpassageur = \""+CodeClt+"\") OR (E.idcliententreprise = \""+CodeClt+"\" ) ) AND "; + } + + if(!clt.isStringNull(CINClt)){ + WhereReq1 += " ( (O.cin LIKE \"%"+CINClt+"%\") OR (E.matricule_fiscale LIKE \"%"+CINClt+"%\") ) AND "; + WhereReq2 += " ( (O.cin LIKE \"%"+CINClt+"%\") OR (E.matricule_fiscale LIKE \"%"+CINClt+"%\") ) AND "; + } + + if(!clt.isStringNull(NomPrenomClt)){ + WhereReq1 += " ( (O.nom LIKE \"%"+NomPrenomClt+"%\") OR (O.prenom LIKE \"%"+NomPrenomClt+"%\") OR (E.nomentrepise LIKE \"%"+NomPrenomClt+"%\") OR (P.prenom LIKE \"%"+NomPrenomClt+"%\") OR (P.nom LIKE \"%"+NomPrenomClt+"%\") ) AND "; + WhereReq2 += " ( (O.nom LIKE \"%"+NomPrenomClt+"%\") OR (O.prenom LIKE \"%"+NomPrenomClt+"%\") OR (E.nomentrepise LIKE \"%"+NomPrenomClt+"%\") OR (P.prenom LIKE \"%"+NomPrenomClt+"%\") OR (P.nom LIKE \"%"+NomPrenomClt+"%\") ) AND "; + } + + WhereReq1 = WhereReq1.substring(0, WhereReq1.length() - 4); + WhereReq2 = WhereReq2.substring(0, WhereReq2.length() - 4); + + String req1 = "SELECT COUNT(C.id_chequeclt) " + + " FROM `cheque_clt` C, `factureclt` F " + + " LEFT JOIN `client` O ON (O.local_nom= F.local_nom) AND (F.idcltexiste = O.codeclient) " + + " LEFT JOIN `cltpassageur` P ON (P.local_nom = F.local_nom) AND (F.idcltpassageur = P.idcltpassageur) " + + " LEFT JOIN `cltentreprise` E ON (E.local_nom= F.local_nom) AND (F.idcltentreprise = E.idcliententreprise) " + + WhereReq1 + + " ; "; + + String req2 = " SELECT COUNT(C.id_traite_paiement_cheque) " + + " FROM `traite_paiement_cheque_clt` C, `traite_clt` T, `factureclt` F " + + " LEFT JOIN `client` O ON (O.local_nom = F.local_nom) AND (F.idcltexiste = O.codeclient) " + + " LEFT JOIN `cltpassageur` P ON (P.local_nom = F.local_nom) AND (F.idcltpassageur = P.idcltpassageur) " + + " LEFT JOIN `cltentreprise` E ON (E.local_nom = F.local_nom) AND (F.idcltentreprise = E.idcliententreprise) " + + WhereReq2 + + " ; "; + + int sommme1 = 0; + int sommme2 = 0; + if(cnx.ouverture()){ + try{ + /* Exécution d'une requête de lecture */ + ResultSet resultat1 = cnx.excutionquery(req1); + resultat1.next(); // get the number of rows from the result set + sommme1 = resultat1.getInt(1); + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req1); + } + } + if(cnx.ouverture()){ + try{ + ResultSet resultat2 = cnx.excutionquery(req2); + resultat2.next(); // get the number of rows from the result set + sommme2 = resultat2.getInt(1); + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req1); + } + } + + return sommme1 + sommme2 ; + } + + + public ChequeClt getChequeClt(String IdCheque){ + + ChequeClt Cheque = new ChequeClt(); + + String Query = "SELECT * FROM `cheque_clt` WHERE `id_chequeclt` = "+IdCheque+";"; + + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery(Query); + //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){ + Cheque.setCodeChequeClt(resultat.getString("id_chequeclt")); + Cheque.setNumeroChequeClt(resultat.getString("numero")); + Cheque.setBanqueChequeClt(resultat.getString("banque")); + Cheque.setMontantChequeClt(resultat.getString("montant")); + Cheque.setMontantFloatChequeClt(resultat.getFloat("montant")); + Cheque.setNomCompletChequeClt(resultat.getString("nom_complet")); + Cheque.setLastEtat(resultat.getInt("etat_cheque")); + Cheque.setDatePaiement(resultat.getString("date_paiement")); + Cheque.setDateCreation(resultat.getString("date_creation")); + Cheque.setLocalNom(resultat.getString("local_nom")); + Cheque.setProfile(new ProfileDB().getpro(resultat.getInt("id_profile"))); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + } + } + return Cheque; + } + +} diff --git a/src/main/java/Models/ChequeClt/ChequeCltGestionListe.java b/src/main/java/Models/ChequeClt/ChequeCltGestionListe.java new file mode 100644 index 0000000..5bb21c4 --- /dev/null +++ b/src/main/java/Models/ChequeClt/ChequeCltGestionListe.java @@ -0,0 +1,111 @@ +/* + * 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.ChequeClt; + +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleStringProperty; + +/** + * @author Maher + */ +public class ChequeCltGestionListe { + + private final SimpleStringProperty IdCheque; + private final SimpleStringProperty NumeroCheque; + private final SimpleStringProperty Banque; + private final SimpleStringProperty DateCheque; + private final SimpleStringProperty Montant; + private final SimpleStringProperty CodeClt; + private final SimpleStringProperty TypeClt; + private final SimpleStringProperty NomClt; + private final SimpleStringProperty PrenomClt; + private final SimpleStringProperty IdFacture; + private final SimpleStringProperty Etat; + private final SimpleBooleanProperty Selected; + + // 0 ==> Cheque (table cheque_clt) + // 1 ==> Traite (table traite_paiement_cheque_clt) + private final SimpleIntegerProperty Source; + + public ChequeCltGestionListe(String id_cheque, String numero_cheque, String banque, String date_cheque, String montant, String code_clt, String type_clt, String nom_clt, String prenom_clt, String id_facture, String etat, Integer source, Boolean is_selected) { + this.IdCheque = new SimpleStringProperty(id_cheque); + this.NumeroCheque = new SimpleStringProperty(numero_cheque); + this.Banque = new SimpleStringProperty(banque); + this.DateCheque = new SimpleStringProperty(date_cheque); + this.Montant = new SimpleStringProperty(montant); + this.CodeClt = new SimpleStringProperty(code_clt); + this.TypeClt = new SimpleStringProperty(type_clt); + this.NomClt = new SimpleStringProperty(nom_clt); + this.PrenomClt = new SimpleStringProperty(prenom_clt); + this.IdFacture = new SimpleStringProperty(id_facture); + this.Etat = new SimpleStringProperty(etat); + this.Source = new SimpleIntegerProperty(source); + this.Selected = new SimpleBooleanProperty(is_selected); + } + + + + public String getIdCheque() { + return IdCheque.get(); + } + + public String getNumeroCheque() { + return NumeroCheque.get(); + } + + public String getBanque() { + return Banque.get(); + } + + public String getDateCheque() { + return DateCheque.get(); + } + public String getMontant() { + return Montant.get(); + } + + public String getCodeClt() { + return CodeClt.get(); + } + + public String getTypeClt() { + return TypeClt.get(); + } + + public String getNomClt() { + return NomClt.get(); + } + + public String getPrenomClt() { + return PrenomClt.get(); + } + + + public String getIdFacture() { + return IdFacture.get(); + } + + public String getEtat() { + return Etat.get(); + } + + public void setEtat(String etat) { + Etat.set(etat); + } + + public Integer getSource() { + return Source.get(); + } + + public Boolean getSelected() { + return Selected.get(); + } + + public void setSelected(Boolean is_select) { + Selected.set(is_select); + } +} diff --git a/src/main/java/Models/ChequeClt/ChequeCltHistoriqueListe.java b/src/main/java/Models/ChequeClt/ChequeCltHistoriqueListe.java new file mode 100644 index 0000000..5e49b24 --- /dev/null +++ b/src/main/java/Models/ChequeClt/ChequeCltHistoriqueListe.java @@ -0,0 +1,69 @@ +/* + * 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.ChequeClt; + +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleStringProperty; + +/** + * @author Maher + */ +public class ChequeCltHistoriqueListe { + + private final SimpleStringProperty IdHistorique; + private final SimpleIntegerProperty Etat; // 0 cheque sans provision 1 Verser (Valider) 2 Contre chéque(espace) + private final SimpleIntegerProperty Source; // 0==>Cheque(table cheque_clt) 1==>Traite(table traite_paiement_cheque_clt) + private final SimpleStringProperty IdCheque; + private final SimpleStringProperty DateOperation; + private final SimpleStringProperty HeurOperation; + private final SimpleStringProperty Utilisateur; //(Nom Prenom Profile utilisateur) + private final SimpleStringProperty Locale; + + public ChequeCltHistoriqueListe(String id_historique, Integer etat, Integer source, String id_cheque, String date_operation, String heur_operation, String utilisateur, String locale) { + this.IdHistorique = new SimpleStringProperty(id_historique); + this.Etat = new SimpleIntegerProperty(etat); + this.Source = new SimpleIntegerProperty(source); + this.IdCheque = new SimpleStringProperty(id_cheque); + this.DateOperation = new SimpleStringProperty(date_operation); + this.HeurOperation = new SimpleStringProperty(heur_operation); + this.Utilisateur = new SimpleStringProperty(utilisateur); + this.Locale = new SimpleStringProperty(locale); + } + + public String getIdCheque() { + return IdCheque.get(); + } + + public String getIdHistorique() { + return IdHistorique.get(); + } + + public Integer getEtat() { + return Etat.get(); + } + + public Integer getSource() { + return Source.get(); + } + + public String getDateOperation() { + return DateOperation.get(); + } + + public String getHeurOperation() { + return HeurOperation.get(); + } + + public String getUtilisateur() { + return Utilisateur.get(); + } + + public String getLocale() { + return Locale.get(); + } + + +} diff --git a/src/main/java/Models/ChequeClt/ChequeList.java b/src/main/java/Models/ChequeClt/ChequeList.java new file mode 100644 index 0000000..04cf235 --- /dev/null +++ b/src/main/java/Models/ChequeClt/ChequeList.java @@ -0,0 +1,138 @@ +package Models.ChequeClt; + +import java.text.SimpleDateFormat; +import java.util.Date; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; + + +public class ChequeList { + + private final SimpleObjectProperty dateCheque; + private final StringProperty NumeroCheque; + private final StringProperty BanqueCheque; + private final StringProperty MontantCheque; + + + + /** + * @param date + * @param NumeroCheque + * @param BanqueCheque + * @param MontantCheque + */ + public ChequeList(Date date, String NumeroCheque, String BanqueCheque, String MontantCheque ) { + this.dateCheque = new SimpleObjectProperty(date); + this.NumeroCheque = new SimpleStringProperty(NumeroCheque); + this.BanqueCheque = new SimpleStringProperty(BanqueCheque); + this.MontantCheque = new SimpleStringProperty(MontantCheque); + } + + + + /** + * @return the NumeroCheque + */ + public String getNumeroCheque() { + return NumeroCheque.get(); + } + + /** + * @param NumeroCheque the NumeroCheque to set + */ + public void setNumeroCheque(String NumeroCheque) { + this.NumeroCheque.set(NumeroCheque); + } + + /** + * @return the NumeroCheque + */ + public StringProperty NumeroChequeProperty() { + return NumeroCheque; + } + + + + + + + /** + * @return the BanqueCheque + */ + public String getBanqueCheque() { + return BanqueCheque.get(); + } + + /** + * @param BanqueCheque the BanqueCheque to set + */ + public void setBanqueCheque(String BanqueCheque) { + this.BanqueCheque.set(BanqueCheque); + } + + /** + * @return the BanqueCheque + */ + public StringProperty BanqueChequeProperty() { + return BanqueCheque; + } + + + + + + /** + * @return the MontantCheque + */ + public String getMontantCheque() { + return MontantCheque.get(); + } + + /** + * @param MontantCheque the MontantCheque to set + */ + public void setMontantCheque(String MontantCheque) { + this.MontantCheque.set(MontantCheque); + } + + /** + * @return the MontantCheque + */ + public StringProperty MontantChequeProperty() { + return MontantCheque; + } + + + + + + + /** + * + * @return + */ + public Date getDate() { + return (Date) dateCheque.get(); + } + + /** + * + * @return + */ + public String getDateAsString() { + SimpleDateFormat smp = new SimpleDateFormat("dd MMMMM yyyy"); + String strDate = (null == dateCheque || null == dateCheque.get()) + ? "" : smp.format(dateCheque.get()); + + return strDate; + } + + /** + * + * @param date + */ + public void setDate(Date date) { + this.dateCheque.set(date); + } +} diff --git a/src/main/java/Models/ChequeClt/DatePickerCellCheque.java b/src/main/java/Models/ChequeClt/DatePickerCellCheque.java new file mode 100644 index 0000000..9171d46 --- /dev/null +++ b/src/main/java/Models/ChequeClt/DatePickerCellCheque.java @@ -0,0 +1,192 @@ +package Models.ChequeClt; + +import Models.ChequeClt.ChequeList; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.Calendar; +import java.util.Date; +import javafx.application.Platform; +import javafx.collections.ObservableList; +import javafx.event.Event; +import javafx.event.EventHandler; +import javafx.geometry.Pos; +import javafx.scene.control.ContentDisplay; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TableCell; + +/** + * DatePicker cell object. + * + * @author Fabrice Sommavilla + * @param + * @param + */ +public class DatePickerCellCheque extends TableCell { + + private DatePicker datePicker; + private ObservableList birthdayData; + + /** + * Constructor. + * + * @param listBirthdays + */ + public DatePickerCellCheque(ObservableList listBirthdays) { + + super(); + + this.birthdayData = listBirthdays; + + if (datePicker == null) { + createDatePicker(); + } + setGraphic(datePicker); + setContentDisplay(ContentDisplay.GRAPHIC_ONLY); + + Platform.runLater(new Runnable() { + @Override + public void run() { + datePicker.requestFocus(); + } + }); + } + + /** + * Override TableCell updateItem method. + * + * @param item + * @param empty + */ + @Override + public void updateItem(Date item, boolean empty) { + + super.updateItem(item, empty); + + SimpleDateFormat smp = new SimpleDateFormat("dd/MM/yyyy"); + + if (null == this.datePicker) { + System.out.println("datePicker is NULL"); + } + + if (empty) { + setText(null); + setGraphic(null); + } else { + + if (isEditing()) { + setContentDisplay(ContentDisplay.TEXT_ONLY); + + } else { + setDatepikerDate(smp.format(item)); + setText(smp.format(item)); + setGraphic(this.datePicker); + setContentDisplay(ContentDisplay.GRAPHIC_ONLY); + } + } + } + + /** + * + * @param dateAsStr + */ + private void setDatepikerDate(String dateAsStr) { + + LocalDate ld = null; + int jour, mois, annee; + + jour = mois = annee = 0; + try { + jour = Integer.parseInt(dateAsStr.substring(0, 2)); + mois = Integer.parseInt(dateAsStr.substring(3, 5)); + annee = Integer.parseInt(dateAsStr.substring(6, dateAsStr.length())); + } catch (NumberFormatException e) { + System.out.println("setDatepikerDate / unexpected error " + e); + } + + ld = LocalDate.of(annee, mois, jour); + datePicker.setValue(ld); + } + + /** + * This method create a textfield with key and focus events. + */ + private void createDatePicker() { + this.datePicker = new DatePicker(); + datePicker.setPromptText("jj/mm/aaaa"); + datePicker.setEditable(true); + + datePicker.setOnAction(new EventHandler() { + public void handle(Event t) { + LocalDate date = datePicker.getValue(); + int index = getIndex(); + + SimpleDateFormat smp = new SimpleDateFormat("dd/MM/yyyy"); + Calendar cal = Calendar.getInstance(); + if(datePicker.getValue() != null){ + cal.set(Calendar.DAY_OF_MONTH, date.getDayOfMonth()); + cal.set(Calendar.MONTH, date.getMonthValue() - 1); + cal.set(Calendar.YEAR, date.getYear()); + + setText(smp.format(cal.getTime())); + commitEdit(cal.getTime()); + + if (null != getBirthdayData()) { + getBirthdayData().get(index).setDate(cal.getTime()); + } + } + } + }); + + setAlignment(Pos.CENTER); + } + + /** + * + */ + @Override + public void startEdit() { + super.startEdit(); + } + + /** + * Override TableCell cancelEdit method. + */ + @Override + public void cancelEdit() { + super.cancelEdit(); + setContentDisplay(ContentDisplay.TEXT_ONLY); + } + + /** + * + * @return + */ + public ObservableList getBirthdayData() { + return birthdayData; + } + + /** + * + * @param birthdayData + */ + public void setBirthdayData(ObservableList birthdayData) { + this.birthdayData = birthdayData; + } + + /** + * + * @return + */ + public DatePicker getDatePicker() { + return datePicker; + } + + /** + * + * @param datePicker + */ + public void setDatePicker(DatePicker datePicker) { + this.datePicker = datePicker; + } + +} diff --git a/src/main/java/Models/Client/Client.java b/src/main/java/Models/Client/Client.java new file mode 100644 index 0000000..f588705 --- /dev/null +++ b/src/main/java/Models/Client/Client.java @@ -0,0 +1,218 @@ +package Models.Client; + +import java.time.LocalDate; +import java.util.Date; + +/** + * @author PC-Maher + */ +public class Client { + + public String codeclient ; + public int cin ; + public String nomcomplet; + public String nom ; + public String prenom ; + public String DateNaissanceString ; + public Date naissance ; + public Long telefix ; + public Long telemobile ; + public String adresse ; + public String codepostal ; + public String mail ; + public int sexe ; + + public String getCodeclient() { + return codeclient; + } + + public void setCodeclient(String codeclient) { + this.codeclient = codeclient; + } + + + + public void setCodeclientString(String codeclient) { + this.codeclient = codeclient; + } + + public String getCinString() { + return String.valueOf(cin); + } + + public int getCin() { + return cin ; + } + + public void setCin(int cin) { + this.cin = cin; + } + public void setCinString(String cin) { + this.cin = Integer.parseInt(cin); + } + + public String getNomcomplet() { + return nomcomplet; + } + + public void setNomcomplet(String nomcomplet) { + this.nomcomplet = nomcomplet; + } + + public String getNom() { + return nom; + } + + public void setNom(String nom) { + this.nom = nom; + } + + public String getPrenom() { + return prenom; + } + + public void setPrenom(String prenom) { + this.prenom = prenom; + } + + public Date getNaissance() { + return naissance; + } + + public void setNaissance(Date naissance) { + this.naissance = naissance; + } + + public void setNaissanceDatePicker(LocalDate naissance) { + this.naissance = java.sql.Date.valueOf(naissance); + } + + public String getDateNaissanceString() { + return DateNaissanceString; + } + + public void setDateNaissanceString(String DateNaissanceString) { + this.DateNaissanceString = DateNaissanceString; + } + + + + public Long getTelefix() { + if(telefix != null){ + return telefix; + } + else{ + return null ; + } + } + public String getTelefixString() { + if(telefix != null){ + return telefix.toString(); + } + else{ + return null ; + } + } + + public void setTelefix(Long telefix) { + this.telefix = telefix; + } + public void setTelefixString(String telefix) { + if(telefix!=null){ + this.telefix = Long.parseLong(telefix); + } + } + + public Long getTelemobile() { + return telemobile; + } + + public String getTelemobileString() { + if(telemobile != null){ + return telemobile.toString(); + } + else{ + return null ; + } + + } + + + + + public void setTelemobile(Long telemobile) { + this.telemobile = telemobile; + } + public void setTelemobileString(String telemobile) { + if(telemobile != null){ + if(!telemobile.isEmpty()){ + this.telemobile = Long.parseLong(telemobile); + } + } + } + + public String getAdresse() { + return adresse; + } + + public void setAdresse(String adresse) { + this.adresse = adresse; + } + + public String getCodepostal() { + return codepostal; + } + + public void setCodepostal(String codepostal) { + this.codepostal = codepostal; + } + + + + + public String getMail() { + return mail; + } + + public void setMail(String mail) { + this.mail = mail; + } + + public int getSexe() { + return sexe; + } + + public void setSexe(int sexe) { + this.sexe = sexe; + } + + public String getSexeString() { + if(this.sexe== 1){ + return "Homme"; + } + else{ + return "Femme"; + } + } + + public void setSexeString(String sexe) { + if(sexe.equals("Homme")){ + this.sexe=1; + } + else{ + this.sexe=0; + } + + } + + @Override + public String toString() { + return "Client{" + "codeclient=" + codeclient + ", cin=" + cin + ", nomcomplet=" + nomcomplet + ", nom=" + nom + ", prenom=" + prenom + ", naissance=" + naissance + ", telefix=" + telefix + ", telemobile=" + telemobile + ", adresse=" + adresse + ", codepostal=" + codepostal + ", mail=" + mail + ", sexe=" + sexe + '}'; + } + + + + + + +} diff --git a/src/main/java/Models/Client/ClientDB.java b/src/main/java/Models/Client/ClientDB.java new file mode 100644 index 0000000..1a8db97 --- /dev/null +++ b/src/main/java/Models/Client/ClientDB.java @@ -0,0 +1,323 @@ +package Models.Client; + +import Controllers.Client.ListeClient; +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.connexion; +import java.io.UnsupportedEncodingException; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author Maher Ben Tili + */ +public class ClientDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + ShowDialog SD = new ShowDialog(); + + public boolean addClient(Client clt) throws UnsupportedEncodingException{ + String req = "INSERT INTO `client` (`codeclient`, `cin`, `nomcomplet`, `nom`, `prenom`, `naissance`, `telefix`, `telemobile`, `adresse`, `codepostale`, `mail`, `sexe`, `local_nom`, `date_add` ) VALUES ("+clt.getCodeclient()+", "+clt.getCin()+", '"+clt.getNomcomplet()+"', '"+clt.getNom()+"', '"+clt.getPrenom()+"', '"+clt.getNaissance()+"', "+clt.getTelefix()+", "+clt.getTelemobile()+", '"+clt.getAdresse()+"', "+clt.getCodepostal()+", '"+clt.getMail()+"', '"+clt.getSexe()+"', '"+ParametreSystem.NomLocalPC+"', CURTIME());"; + //System.out.println(req); + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(req); + return true; + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + return false ; + } + } + else{ + return false ; + } + } + + public boolean updateClient(Client client) throws UnsupportedEncodingException + { + String req = "UPDATE `client`"; + req += "SET `cin` = '"+client.getCin()+"',"; + + req += " `nom` = '"+client.getNom()+"',"; + req += " `prenom` = '"+client.getPrenom()+"',"; + req += " `naissance` = '"+client.getNaissance()+"',"; + req += " `telefix` = '"+client.getTelefix()+"',"; + + if(client.getTelemobile() != null){ + req += " `nomcomplet` = '"+client.getNomcomplet()+"',"; + } + if(client.getTelemobile() != null){ + req += " `telemobile` = '"+client.getTelemobile()+"',"; + } + + if(client.getMail() != null){ + req += " `mail` = '"+client.getMail()+"',"; + } + + + if(client.getCodepostal() != null){ + req += " `codepostale` = '"+client.getCodepostal()+"',"; + } + + req += " `adresse` = '"+client.getAdresse()+"',"; + + + req += " `sexe` = '"+client.getSexe()+"' "; + req += "WHERE (`codeclient` = '"+client.getCodeclient()+"') and (`local_nom` = '"+ParametreSystem.NomLocalPC+"');"; + + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(req); + return true; + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + return false ; + } + } + else{ + return false ; + } + } + + public Client getClient(String code){ + Client clt = new Client(); + int id =0 ; + if(cnx.ouverture()){ + String sql="SELECT *, DATE_FORMAT(naissance, '%d/%m/%Y') AS naissance_string FROM client WHERE (`codeclient`= "+code+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ResultSet resultat; + try { + resultat = cnx.excutionquery(sql); + resultat.next(); + + clt.setCodeclientString(resultat.getString("codeclient")); + clt.setCin(resultat.getInt("cin")); + clt.setNom(resultat.getString("nom")); + clt.setPrenom(resultat.getString("prenom")); + clt.setNomcomplet(resultat.getString("nomcomplet")); + clt.setSexe(resultat.getInt("sexe")); + clt.setNaissance(resultat.getDate("naissance")); + clt.setDateNaissanceString(resultat.getString("naissance_string")); + clt.setAdresse(resultat.getString("adresse")); + clt.setTelefixString(resultat.getString("telefix")); + clt.setTelemobileString(resultat.getString("telemobile")); + clt.setMail(resultat.getString("mail")); + clt.setCodepostal(resultat.getString("codepostale")); + } + catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + } + } + return clt ; + } + + public int getidClient(){ + + int id =0 ; + if(cnx.ouverture()){ + String sql="SELECT MAX(`codeclient`) FROM client WHERE (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ResultSet resultat; + try { + resultat = cnx.excutionquery(sql); + resultat.next(); + id=resultat.getInt(1); + } + catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + + } + return id ; + } + + + public boolean verifyIdClient(int id){ + boolean result = false ; + + if(cnx.ouverture()){ + String sql="SELECT `codeclient` FROM `client` WHERE (`codeclient`= "+id+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + + try { + ResultSet resultat = cnx.excutionquery(sql); + resultat.last(); //on place le curseur sur le dernier tuple + if(resultat.getRow()>0){ + result= true ; + } + } + catch (SQLException ex) { + result= false ; + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + + } + return result ; + } + + public boolean verifyCinClient(int cin){ + boolean result = false ; + + if(cnx.ouverture()){ + String sql="SELECT `codeclient` FROM `client` WHERE (`cin`= "+cin+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + + try { + ResultSet resultat = cnx.excutionquery(sql); + //on place le curseur sur le dernier tuple + resultat.last(); + if(resultat.getRow()>0){ + result= true ; + + } + + } + catch (SQLException ex) { + result= false ; + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + + } + return result ; + } + + /********************************** Initial *******************************/ + public ObservableList SearchCltPersonneGestion(Integer debut, Integer nbr, String Code, String Cin, String NomComplet, String Nom, String Prenom, String Naissance) + { + ObservableList data = FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(Code)){ + Where += " (`codeclient` = \""+Adaptateur.addSlashes(Code)+"\") AND "; + } + + if(!clt.isStringNull(Cin)){ + Where += " (`cin` = \""+Adaptateur.addSlashes(Cin)+"\") AND "; + } + + if(!clt.isStringNull(NomComplet)){ + Where += " (`nomcomplet` LIKE \"%"+Adaptateur.addSlashes(NomComplet)+"%\") AND "; + } + + if(!clt.isStringNull(Nom)){ + Where += " (`nom` LIKE \"%"+Adaptateur.addSlashes(Nom)+"%\") AND "; + } + + if(!clt.isStringNull(Prenom)){ + Where += " (`prenom` LIKE \"%"+Adaptateur.addSlashes(Prenom)+"%\") AND "; + } + + if(!clt.isStringNull(Naissance)){ + Where += " (DATE(`naissance`) = \""+Naissance+"\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE (`local_nom` = '"+ParametreSystem.NomLocalPC+"') AND " + Where; + }else{ + Where = "WHERE (`local_nom` = '"+ParametreSystem.NomLocalPC+"') "; + } + + String req="SELECT *, DATE_FORMAT(`naissance`, '%d/%m/%Y') AS naissance_string " + + "FROM `client` " + + Where + + "ORDER BY codeclient DESC " + + "LIMIT "+debut+" , "+nbr+" ;"; + + if(cnx.ouverture()){ + try{ + /* Exécution d'une requête de lecture */ + ResultSet resultat = cnx.excutionquery(req); + resultat.last(); //on place le curseur sur le dernier tuple + int nombreLignes = resultat.getRow(); //on récupère le numéro de la ligne + if(nombreLignes>0){ + resultat.beforeFirst(); //on repace le curseur avant la première ligne + while ( resultat.next() ) { + String codeclient = resultat.getString( "codeclient" ); + String cin = resultat.getString( "cin" ); + String nomcomplet=resultat.getString("nomcomplet"); + String nom=resultat.getString("nom"); + String prenom=resultat.getString("prenom"); + String naissance_str = resultat.getString("naissance_string"); + String adresse=resultat.getString("adresse"); + String telefix = resultat.getString( "telefix" ); + String telemobile = resultat.getString( "telemobile" ); + Integer sexe = resultat.getInt( "sexe" ); + data.add(new ListeClient(codeclient, cin, nomcomplet, nom, prenom, naissance_str, adresse, telefix, telemobile, sexe)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + else{ + SD.ShowAletDialog(); + } + return data ; + } + + public Integer nbrCltPersonneGestion( String Code, String Cin, String NomComplet, String Nom, String Prenom, String Naissance) + { + String Where = ""; + + if(!clt.isStringNull(Code)){ + Where += " (`codeclient` = \""+Adaptateur.addSlashes(Code)+"\") AND "; + } + + if(!clt.isStringNull(Cin)){ + Where += " (`cin` = \""+Adaptateur.addSlashes(Cin)+"\") AND "; + } + + if(!clt.isStringNull(NomComplet)){ + Where += " (`nomcomplet` LIKE \"%"+Adaptateur.addSlashes(NomComplet)+"%\") AND "; + } + + if(!clt.isStringNull(Nom)){ + Where += " (`nom` LIKE \"%"+Adaptateur.addSlashes(Nom)+"%\") AND "; + } + + if(!clt.isStringNull(Prenom)){ + Where += " (`prenom` LIKE \"%"+Adaptateur.addSlashes(Prenom)+"%\") AND "; + } + + if(!clt.isStringNull(Naissance)){ + Where += " (DATE(`naissance`) = \""+Naissance+"\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE (`local_nom` = '"+ParametreSystem.NomLocalPC+"') AND " + Where; + }else{ + Where = "WHERE (`local_nom` = '"+ParametreSystem.NomLocalPC+"') "; + } + + + String req=" SELECT COUNT(`codeclient`) "+ + " FROM `client` "+ + 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 ; + } +} diff --git a/src/main/java/Models/Client/ClientEntreprise.java b/src/main/java/Models/Client/ClientEntreprise.java new file mode 100644 index 0000000..a53875e --- /dev/null +++ b/src/main/java/Models/Client/ClientEntreprise.java @@ -0,0 +1,212 @@ +package Models.Client; + +import Controllers.Traitement.contro; + +/** + * @author Maher + */ +public class ClientEntreprise { + + private Long Code ; + private String Nom ; + private String Gerant ; + private String Adresse ; + private String Mail ; + private String Matricule ; + private Long Postal ; + private Long Tele1 ; + private Long Tele2 ; + private Long Fax ; + private ClientEntrepriseContact Contact; + private String LocalNom ; + + contro clt = new contro(); + + public String getCodeString() { + return String.valueOf(Code); + } + + public Long getCode() { + return Code; + } + + public void setCode(Long Code) { + this.Code = Code; + } + + + public void setCodeString(String Code) { + if(!clt.isStringNull(Code)){ + this.Code = Long.parseLong(Code); + } + } + + public String getNom() { + return Nom; + } + + public void setNom(String Nom) { + this.Nom = Nom; + } + + public String getGerant() { + return Gerant; + } + + public void setGerant(String Gerant) { + this.Gerant = Gerant; + } + + + public String getAdresse() { + return Adresse; + } + + public void setAdresse(String Adresse) { + this.Adresse = Adresse; + } + + public String getMail() { + return Mail; + } + + public void setMail(String Mail) { + this.Mail = Mail; + } + + public String getMatricule() { + return Matricule; + } + + public void setMatricule(String Matricule) { + this.Matricule = Matricule; + } + + public Long getPostal() { + return Postal; + } + + public String getPostalString() { + if(Postal != null){ + if(Postal != 0){ + return Postal.toString(); + }else{ + return "" ; + } + }else{ + return "" ; + } + } + + public void setPostaleString(String Postal) { + if(!clt.isStringNull(Postal)){ + this.Postal = Long.parseLong(Postal); + } + } + + public void setPostal(Long Postal) { + this.Postal = Postal; + } + + + + public Long getTele1() { + return Tele1; + } + public String getTele1String() { + if(Tele1 != null){ + if(Tele1 != 0){ + return Tele1.toString(); + }else{ + return "" ; + } + }else{ + return "" ; + } + } + + public void setTele1String(String Tele1) { + if(!clt.isStringNull(Tele1)){ + this.Tele1 = Long.parseLong(Tele1); + } + } + + public void setTele1(Long Tele1) { + this.Tele1 = Tele1; + } + + public Long getTele2() { + return Tele2; + } + public String getTele2String() { + if(Tele2 != null){ + if(Tele2 != 0){ + return Tele2.toString(); + }else{ + return "" ; + } + }else{ + return "" ; + } + } + + public void setTele2(Long Tele2) { + this.Tele2 = Tele2; + } + + public void setTele2String(String Tele2) { + if(!clt.isStringNull(Tele2)){ + this.Tele2 = Long.parseLong(Tele2); + } + } + + public Long getFax() { + return Fax; + } + public String getFaxString() { + if(Fax != null){ + if(Fax != 0){ + return Fax.toString(); + }else{ + return "" ; + } + }else{ + return "" ; + } + } + + public void setFaxString(String Fax) { + if(!clt.isStringNull(Fax)){ + this.Fax = Long.parseLong(Fax); + } + } + public void setFax(Long Fax) { + this.Fax = Fax; + } + + public ClientEntrepriseContact getContact() { + return Contact; + } + + public void setContact(ClientEntrepriseContact Contact) { + this.Contact = Contact; + } + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + + @Override + public String toString() { + return "ClientEntreprise{" + "Code=" + Code + ", \n Nom=" + Nom + ", Gerant=" + Gerant + ", Adresse=" + Adresse + ", Mail=" + Mail + ", Matricule=" + Matricule + ", Postal=" + Postal + ", Tele1=" + Tele1 + ", Tele2=" + Tele2 + ", Fax=" + Fax + '}'; + } + + + + +} diff --git a/src/main/java/Models/Client/ClientEntrepriseContact.java b/src/main/java/Models/Client/ClientEntrepriseContact.java new file mode 100644 index 0000000..16f6184 --- /dev/null +++ b/src/main/java/Models/Client/ClientEntrepriseContact.java @@ -0,0 +1,162 @@ +package Models.Client; + +import Controllers.Traitement.contro; + + +/** + * + * @author Maher + */ +public class ClientEntrepriseContact { + + private Long Code ; + private String Nom ; + private String Prenom ; + private Long CIN ; + private String Mail ; + private Long Tele1 ; + private Long Tele2 ; + private Long idcltentreprise ; + private String LocalNom ; + + contro clt = new contro(); + + public Long getCode() { + return Code; + } + + public void setCode(Long Code) { + this.Code = Code; + } + public void setCodeString(String Code) { + if(!clt.isStringNull(Code)){ + this.Code = Long.parseLong(Code); + } + } + + public Long getIdcltentreprise() { + return idcltentreprise; + } + + public void setIdcltentreprise(Long idcltentreprise) { + this.idcltentreprise = idcltentreprise; + } + + public void setIdcltentrepriseString(String idcltentreprise) { + if(!clt.isStringNull(idcltentreprise)){ + this.idcltentreprise = Long.parseLong(idcltentreprise); + } + } + + public String getNom() { + return Nom; + } + + public void setNom(String Nom) { + this.Nom = Nom; + } + + public String getPrenom() { + return Prenom; + } + + public void setPrenom(String Prenom) { + this.Prenom = Prenom; + } + + public Long getCIN() { + return CIN; + } + + public String getCINString() { + if(CIN != null){ + if(!CIN.equals("")){ + return CIN.toString(); + }else{ + return "" ; + } + }else{ + return "" ; + } + } + + public void setCIN(Long CIN) { + this.CIN = CIN; + } + + public void setCINString(String CIN) { + if(!clt.isStringNull(CIN)){ + this.CIN= Long.parseLong(CIN); + } + } + + public String getMail() { + return Mail; + } + + public void setMail(String Mail) { + this.Mail = Mail; + } + + public Long getTele1() { + return Tele1; + } + + public String getTele1String() { + if(Tele1 != null){ + if(!Tele1.equals("")){ + return Tele1.toString(); + }else{ + return null ; + } + }else{ + return null ; + } + } + + public void setTele1String(String Tele1) { + if(!clt.isStringNull(Tele1)){ + this.Tele1 = Long.parseLong(Tele1); + } + } + + public void setTele1(Long Tele1) { + this.Tele1 = Tele1; + } + + public Long getTele2() { + return Tele2; + } + + public String getTele2String() { + if(Tele2 != null){ + if(!Tele2.equals("")){ + return Tele2.toString(); + }else{ + return "" ; + } + }else{ + return "" ; + } + } + + public void setTele2(Long Tele2) { + this.Tele2 = Tele2; + } + + public void setTele2String(String Tele2) { + if(!clt.isStringNull(Tele2)){ + this.Tele2 = Long.parseLong(Tele2); + } + } + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + +} diff --git a/src/main/java/Models/Client/ClientEntrepriseContactDB.java b/src/main/java/Models/Client/ClientEntrepriseContactDB.java new file mode 100644 index 0000000..6ae649b --- /dev/null +++ b/src/main/java/Models/Client/ClientEntrepriseContactDB.java @@ -0,0 +1,126 @@ +/* + * 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.Client; + +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.connexion; +import java.io.UnsupportedEncodingException; +import java.sql.ResultSet; +import java.sql.SQLException; + + +/** + * + * @author Maher + */ +public class ClientEntrepriseContactDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + public boolean addClientEntrepriseContact(ClientEntrepriseContact CltEtrCon){ + String req = "INSERT INTO `cltcontact` (`idcltcontact`, `nom`, `prenom`, `cin`, `gsm1`, `gsm2`, `mail`, `idcltentreprise`, `local_nom`) VALUES (NULL, '"+CltEtrCon.getNom()+"', '"+CltEtrCon.getPrenom()+"', "+CltEtrCon.getCIN()+", "+CltEtrCon.getTele1()+", "+CltEtrCon.getTele2()+", '"+CltEtrCon.getMail()+"', '"+CltEtrCon.getIdcltentreprise()+"', '"+ParametreSystem.NomLocalPC+"'); " ; + return cnx.insertion(req); + } + + public ClientEntrepriseContact getContactByIdContact(String idContactEtr){ + ClientEntrepriseContact ContactEtr = new ClientEntrepriseContact(); + + if(cnx.ouverture()) + { + String sql="SELECT * FROM cltcontact WHERE (`codeclient`= "+idContactEtr+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ResultSet resultat; + try { + resultat = cnx.excutionquery(sql); + resultat.next(); + + ContactEtr.setIdcltentrepriseString(resultat.getString("idcltcontact")); + ContactEtr.setCINString(resultat.getString("cin")); + ContactEtr.setNom(resultat.getString("nom")); + ContactEtr.setPrenom(resultat.getString("prenom")); + ContactEtr.setTele1String(resultat.getString("gsm1")); + ContactEtr.setTele2String(resultat.getString("gsm2")); + ContactEtr.setMail(resultat.getString("mail")); + ContactEtr.setLocalNom(resultat.getString("local_nom")); + } + catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + } + } + return ContactEtr ; + } + + public ClientEntrepriseContact getContactByIdEntreprise(String idEtr) + { + ClientEntrepriseContact ContactEtr = new ClientEntrepriseContact(); + + if(cnx.ouverture()) + { + String sql="SELECT * FROM cltcontact WHERE (`idcltentreprise`= "+idEtr+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ResultSet resultat; + try { + resultat = cnx.excutionquery(sql); + resultat.next(); + + ContactEtr.setCodeString(resultat.getString("idcltcontact")); + ContactEtr.setIdcltentrepriseString(resultat.getString("idcltentreprise")); + ContactEtr.setCINString(resultat.getString("cin")); + ContactEtr.setNom(resultat.getString("nom")); + ContactEtr.setPrenom(resultat.getString("prenom")); + ContactEtr.setTele1String(resultat.getString("gsm1")); + ContactEtr.setTele2String(resultat.getString("gsm2")); + ContactEtr.setMail(resultat.getString("mail")); + ContactEtr.setLocalNom(resultat.getString("local_nom")); + } + catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + } + } + return ContactEtr ; + } + + + public boolean updateEtrContact(ClientEntrepriseContact ContactEtr) throws UnsupportedEncodingException + { + String req = "UPDATE `cltcontact`"; + + req += "SET `nom` = '"+ContactEtr.getNom()+"',"; + + if(!clt.isStringNull(ContactEtr.getCINString())){ + req += " `cin` = '"+ContactEtr.getCINString()+"',"; + } + if(!clt.isStringNull(ContactEtr.getMail())){ + req += " `mail` = '"+ContactEtr.getMail()+"',"; + } + if(!clt.isStringNull(ContactEtr.getTele2String())){ + req += " `gsm2` = '"+ContactEtr.getTele2String()+"',"; + } + + req += " `prenom` = '"+ContactEtr.getPrenom()+"',"; + req += " `gsm1` = '"+ContactEtr.getTele1String()+"' "; + + req += "WHERE (`idcltcontact` = '"+ContactEtr.getCode()+"') AND (`local_nom` = '"+ContactEtr.getLocalNom()+"');"; + + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(req); + return true; + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + return false ; + } + } + else{ + return false ; + } + } + +} diff --git a/src/main/java/Models/Client/ClientEntrepriseDB.java b/src/main/java/Models/Client/ClientEntrepriseDB.java new file mode 100644 index 0000000..cc81e6c --- /dev/null +++ b/src/main/java/Models/Client/ClientEntrepriseDB.java @@ -0,0 +1,286 @@ +package Models.Client; + +import Controllers.Client.ListeClientEntreprise; +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.connexion; +import java.io.UnsupportedEncodingException; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + + +/** + * @author Maher Ben Tili + */ +public class ClientEntrepriseDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + public boolean verifyCodeEntreprise(int code){ + boolean result = false ; + + if(cnx.ouverture()){ + String sql="SELECT * FROM `cltentreprise` WHERE (`idcliententreprise` = "+code+") AND (`local_nom` = '"+ParametreSystem.NomLocalPC+"');"; + + try { + ResultSet resultat = cnx.excutionquery(sql); + resultat.last(); //on place le curseur sur le dernier tuple + if(resultat.getRow()>0){ + result= true ; + } + } + catch (SQLException ex) { + result= false ; + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return result ; + } + + + + public ClientEntreprise GetClientEtr(String CodeEtr){ + ClientEntreprise ClientEtr = new ClientEntreprise(); + if(cnx.ouverture()){ + String sql="SELECT * FROM `cltentreprise` WHERE (`idcliententreprise` = "+CodeEtr+") AND (`local_nom` = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet resultat = cnx.excutionquery(sql); + resultat.last(); //on place le curseur sur le dernier tuple + if(resultat.getRow()>0){ + ClientEtr.setCodeString(resultat.getString("idcliententreprise")); + ClientEtr.setNom(resultat.getString("nomentrepise")); + ClientEtr.setGerant(resultat.getString("gerant")); + ClientEtr.setAdresse(resultat.getString("adresse")); + ClientEtr.setMail(resultat.getString("mail")); + ClientEtr.setMatricule(resultat.getString("matricule_fiscale")); + ClientEtr.setPostal(resultat.getLong("code_postal")); + ClientEtr.setTele1(resultat.getLong("telefix")); + ClientEtr.setTele2(resultat.getLong("telefix2")); + ClientEtr.setFax(resultat.getLong("fax")); + ClientEtr.setLocalNom(resultat.getString("local_nom")); + ClientEntrepriseContact EtrContact = new ClientEntrepriseContactDB().getContactByIdEntreprise(resultat.getString("idcliententreprise")); + ClientEtr.setContact(EtrContact); + } + } + catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.err.println(sql); + } + } + return ClientEtr ; + } + + public int getidClientEtr(){ + + int id = -1 ; + if(cnx.ouverture()){ + String sql="SELECT MAX(`idcliententreprise`) FROM cltentreprise WHERE `local_nom` = '"+ParametreSystem.NomLocalPC+"';"; + ResultSet resultat; + try { + resultat = cnx.excutionquery(sql); + resultat.next(); + id=resultat.getInt(1); + } + catch (SQLException ex) { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + } + return id; + } + + + public boolean addEntreprise(ClientEntreprise CltEtr){ + String req = "INSERT INTO `cltentreprise` (`idcliententreprise`, `nomentrepise`, `gerant`, `matricule_fiscale`, `adresse`, `telefix`, `telefix2`, `fax`, `code_postal`, `mail`, `local_nom`, `date_add`) VALUES ("+CltEtr.getCode()+", '"+CltEtr.getNom()+"', '"+CltEtr.getGerant()+"', '"+CltEtr.getMatricule()+"', '"+CltEtr.getAdresse()+"', "+CltEtr.getTele1()+", "+CltEtr.getTele2()+", "+CltEtr.getFax()+", "+CltEtr.getPostal()+", '"+CltEtr.getMail()+"', '"+ParametreSystem.NomLocalPC+"', CURTIME());"; + return cnx.insertion(req); + } + + + public boolean updateEntreprise(ClientEntreprise CltEtr) throws UnsupportedEncodingException + { + String req = "UPDATE `cltentreprise`"; + + req += "SET `nomentrepise` = '"+CltEtr.getNom()+"',"; + + if(!clt.isStringNull(CltEtr.getMatricule())){ + req += " `matricule_fiscale` = '"+CltEtr.getMatricule()+"',"; + } + if(!clt.isStringNull(CltEtr.getTele2String())){ + req += " `telefix2` = '"+CltEtr.getTele2String()+"',"; + } + if(!clt.isStringNull(CltEtr.getFaxString())){ + req += " `fax` = '"+CltEtr.getFaxString()+"',"; + } + if(!clt.isStringNull(CltEtr.getPostalString())){ + req += " `code_postal` = '"+CltEtr.getPostalString()+"',"; + } + if(!clt.isStringNull(CltEtr.getMail())){ + req += " `mail` = '"+CltEtr.getMail()+"',"; + } + + req += " `adresse` = '"+CltEtr.getAdresse()+"',"; + req += " `gerant` = '"+CltEtr.getGerant()+"',"; + req += " `telefix` = '"+CltEtr.getTele1String()+"'"; + + req += "WHERE (`idcliententreprise` = '"+CltEtr.getCodeString()+"') and (`local_nom` = '"+CltEtr.getLocalNom()+"');"; + + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(req); + return new ClientEntrepriseContactDB().updateEtrContact(CltEtr.getContact()); + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + return false ; + } + } + else{ + return false ; + } + } + + /* + ; + + */ + /********************************** Initial *******************************/ + public ObservableList SearchCltEntrepriseGestion(Integer debut, Integer nbr, String CodeEtr, String NomEtr, String GerantEtr, String MatriculeEtr, String AdresseEtr, String TelephoneEtr) + { + ObservableList data = FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(CodeEtr)){ + Where += " (`idcliententreprise` = \""+Adaptateur.addSlashes(CodeEtr)+"\") AND "; + } + + if(!clt.isStringNull(NomEtr)){ + Where += " (`nomentrepise` LIKE \"%"+Adaptateur.addSlashes(NomEtr)+"%\") AND "; + } + + if(!clt.isStringNull(GerantEtr)){ + Where += " (`gerant` LIKE \"%"+Adaptateur.addSlashes(GerantEtr)+"%\") AND "; + } + + if(!clt.isStringNull(MatriculeEtr)){ + Where += " (`matricule_fiscale` = \""+Adaptateur.addSlashes(MatriculeEtr)+"\") AND "; + } + + if(!clt.isStringNull(AdresseEtr)){ + Where += " (`adresse` LIKE \"%"+Adaptateur.addSlashes(AdresseEtr)+"%\") AND "; + } + + if(!clt.isStringNull(TelephoneEtr)){ + Where += " (`telefix` = \""+Adaptateur.addSlashes(TelephoneEtr)+"\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE (`local_nom` = '"+ParametreSystem.NomLocalPC+"') AND " + Where; + }else{ + Where = "WHERE (`local_nom` = '"+ParametreSystem.NomLocalPC+"') "; + } + + String req="SELECT * " + + "FROM `cltentreprise` " + + Where + + "ORDER BY idcliententreprise DESC " + + "LIMIT "+debut+" , "+nbr+" ;"; + + if(cnx.ouverture()){ + try{ + /* Exécution d'une requête de lecture */ + ResultSet resultat = cnx.excutionquery(req); + resultat.last(); //on place le curseur sur le dernier tuple + int nombreLignes = resultat.getRow(); //on récupère le numéro de la ligne + if(nombreLignes>0){ + resultat.beforeFirst(); //on repace le curseur avant la première ligne + while ( resultat.next() ) { + String code = resultat.getString("idcliententreprise"); + String nom=resultat.getString("nomentrepise"); + String gerant =resultat.getString("gerant"); + String matricule =resultat.getString("matricule_fiscale"); + String adresse =resultat.getString("adresse"); + String telefix = resultat.getString( "telefix" ); + String telefix2 = resultat.getString( "telefix2" ); + + data.add(new ListeClientEntreprise(code, nom, gerant, matricule, adresse, telefix, telefix2)); + + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return data ; + } + + public Integer nbrCltEntrepriseGestion(String CodeEtr, String NomEtr, String GerantEtr, String MatriculeEtr, String AdresseEtr, String TelephoneEtr) + { + String Where = ""; + + if(!clt.isStringNull(CodeEtr)){ + Where += " (`idcliententreprise` = \""+Adaptateur.addSlashes(CodeEtr)+"\") AND "; + } + + if(!clt.isStringNull(NomEtr)){ + Where += " (`nomentrepise` LIKE \"%"+Adaptateur.addSlashes(NomEtr)+"%\") AND "; + } + + if(!clt.isStringNull(GerantEtr)){ + Where += " (`gerant` LIKE \"%"+Adaptateur.addSlashes(GerantEtr)+"%\") AND "; + } + + if(!clt.isStringNull(MatriculeEtr)){ + Where += " (`matricule_fiscale` = \""+Adaptateur.addSlashes(MatriculeEtr)+"\") AND "; + } + + if(!clt.isStringNull(AdresseEtr)){ + Where += " (`adresse` LIKE \"%"+Adaptateur.addSlashes(AdresseEtr)+"%\") AND "; + } + + if(!clt.isStringNull(TelephoneEtr)){ + Where += " (`telefix` = \""+Adaptateur.addSlashes(TelephoneEtr)+"\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE (`local_nom` = '"+ParametreSystem.NomLocalPC+"') AND " + Where; + }else{ + Where = "WHERE (`local_nom` = '"+ParametreSystem.NomLocalPC+"') "; + } + + + String req=" SELECT COUNT(`idcliententreprise`) "+ + " FROM `cltentreprise` "+ + 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 ; + } + +} diff --git a/src/main/java/Models/Client/ClientPassager.java b/src/main/java/Models/Client/ClientPassager.java new file mode 100644 index 0000000..16eb122 --- /dev/null +++ b/src/main/java/Models/Client/ClientPassager.java @@ -0,0 +1,160 @@ +package Models.Client; + +/** + * @author PC-Maher + */ +public class ClientPassager { + + public String codeclient ; + public String nom ; + public String prenom ; + public Long telefix ; + public Long telemobile ; + public String naissance ; + public String adresse ; + public String LocalNom ; + public int sexe ; + + public String getCodeclient() { + return codeclient; + } + + public void setCodeclient(String codeclient) { + this.codeclient = codeclient; + } + + + public String getNom() { + return nom; + } + + public void setNom(String nom) { + this.nom = nom; + } + + public String getPrenom() { + return prenom; + } + + public void setPrenom(String prenom) { + this.prenom = prenom; + } + + + + public Long getTelefix() { + if(telefix != null){ + return telefix; + } + else{ + return null ; + } + } + public String getTelefixString() { + if(telefix != null){ + return telefix.toString(); + } + else{ + return null ; + } + } + + + public void setTelefix(Long telefix) { + this.telefix = telefix; + } + + + public void setTelefixString(String telefix) { + if(telefix == null || telefix.isEmpty()){ + this.telefix = null; + }else{ + this.telefix = Long.parseLong(telefix); + } + + } + + public Long getTelemobile() { + return telemobile; + } + + public String getTelemobileString() { + if(telemobile != null){ + return telemobile.toString(); + } + else{ + return null ; + } + + } + + public void setTelemobile(Long telemobile) { + this.telemobile = telemobile; + } + + + public void setTelemobileString(String telemobile) { + if(telemobile == null){ + this.telemobile = null; + }else if( telemobile.equals("") ){ + this.telemobile = null; + }else{ + this.telemobile = Long.parseLong(telemobile); + } + + } + + public String getNaissance() { + return naissance; + } + + public void setNaissance(String naissance) { + this.naissance = naissance; + } + + + public String getAdresse() { + return adresse; + } + + public void setAdresse(String adresse) { + this.adresse = adresse; + } + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + + public void setSexe(int sexe) { + this.sexe = sexe; + } + + public int getSexe() { + return sexe; + } + + public String getSexeString() { + if(sexe == 0){ + return "0"; + }else if(sexe == 1){ + return "1"; + }else{ + return ""; + } + } + + + public void setSexeString(String sexe) { + if( (sexe != null) || (sexe.length()!= 0) ){ + this.sexe = Integer.parseInt(sexe); + }else{ + this.sexe = 1; + } + } + +} diff --git a/src/main/java/Models/Client/ClientPassagerDB.java b/src/main/java/Models/Client/ClientPassagerDB.java new file mode 100644 index 0000000..af3914e --- /dev/null +++ b/src/main/java/Models/Client/ClientPassagerDB.java @@ -0,0 +1,93 @@ +/* + * 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.Client; + +import Controllers.Traitement.ParametreSystem; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +/** + * + * @author PC-Maher + */ +public class ClientPassagerDB { + + connexion cnx = new connexion(); + + public ClientPassager getClient(String CodeClt){ + ClientPassager CltPassager = new ClientPassager(); + + if(cnx.ouverture()){ + String sql="SELECT * FROM cltpassageur WHERE (idcltpassageur = "+CodeClt+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + + ResultSet resultat; + try { + resultat = cnx.excutionquery(sql); + resultat.next(); + CltPassager.setCodeclient(resultat.getString("idcltpassageur")); + CltPassager.setNom(resultat.getString("nom")); + CltPassager.setPrenom(resultat.getString("prenom")); + //CltPassager.setSexe(resultat.getInt("sexe")); + CltPassager.setAdresse(resultat.getString("adresse")); + CltPassager.setTelefixString(resultat.getString("tele")); + CltPassager.setTelemobileString(resultat.getString("gsm")); + CltPassager.setLocalNom(resultat.getString("local_nom")); + } + catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + } + } + return CltPassager; + } + + + + + public ClientPassager addPassager(ClientPassager CltPassager){ + + String Nom = CltPassager.getNom().replace("'", "\\'"); + String Prenom = CltPassager.getPrenom().replace("'", "\\'"); + String Adresse = "NULL"; + String Naissance = "NULL"; + String Tele = "NULL"; + String Gsm = "NULL"; + + if(CltPassager.getNaissance() != null){ + if( CltPassager.getNaissance().length() != 0){ + Naissance = "'"+CltPassager.getNaissance()+"'"; + } + } + + if(CltPassager.getAdresse() != null){ + if( CltPassager.getAdresse().length() != 0){ + Adresse = CltPassager.getAdresse().replace("'", "\\'"); + } + } + + + if(CltPassager.getTelefixString()!= null){ + if(CltPassager.getTelefixString().length() != 0){ + Tele = CltPassager.getTelefixString(); + } + } + + if(CltPassager.getTelemobileString()!= null){ + if(CltPassager.getTelemobileString().length() != 0){ + Gsm = CltPassager.getTelemobileString(); + } + } + + String req = "INSERT INTO cltpassageur (nom, prenom, adresse, naissance, tele, gsm, local_nom, date_add) VALUES ('"+Nom+"', '"+Prenom+"', '"+Adresse+"', "+Naissance+", "+Tele+", "+Gsm+", '"+ParametreSystem.NomLocalPC+"', CURTIME());"; + + if(cnx.ouverture()){ + String Code = cnx.InsertGetLastId(req); + CltPassager.setCodeclient(Code); + } + return CltPassager; + } + +} diff --git a/src/main/java/Models/CommandeClt/CommandeClt.java b/src/main/java/Models/CommandeClt/CommandeClt.java new file mode 100644 index 0000000..91c764e --- /dev/null +++ b/src/main/java/Models/CommandeClt/CommandeClt.java @@ -0,0 +1,237 @@ +/* + * 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.CommandeClt; + +import Models.Produit.ListeProduit; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import javafx.collections.ObservableList; +/** + * + * @author PC-Maher + */ +public class CommandeClt { + + private String Codecommandeclt ; + + + private Integer TypeClient ; //0 Personne 1 Entreprise 2 Passager + public Client CltPersonne ; + public ClientEntreprise CltEntreprise ; + public ClientPassager CltPassager ; + + private String Date; + private String TypeRegement; // 0comptant 1facilité + private String NetAPayer ; + private String TotalTVA ; + private String TotalHorsTaxNet; + private String Remise; + private String timbre; + private String CodeDevis; + private Integer CodeUser; //code profile de utilisateur du programme + private String CodeFacture; + private String CodeBonLivraison; + + private ObservableList listeproduit ; + + public Integer getTypeClient() { + return TypeClient; + } + + public void setTypeClient(Integer TypeClient) { + this.TypeClient = TypeClient; + } + + public String getTypeClientString() { + String Client = null ; + + if(TypeClient == 0){ + Client= "Ancien client"; + } + if(TypeClient == 1){ + Client= "Entreprise"; + } + if(TypeClient == 2){ + Client= "Passager"; + } + return Client ; + } + + public String getCodecommandeclt() { + return Codecommandeclt; + } + + public void setCodecommandeclt(String Codecommandeclt) { + this.Codecommandeclt = Codecommandeclt; + } + + public Client getCltPersonne() { + return CltPersonne; + } + + public void setCltPersonne(Client CltPersonne) { + this.CltPersonne = CltPersonne; + } + + public ClientEntreprise getCltEntreprise() { + return CltEntreprise; + } + + public void setCltEntreprise(ClientEntreprise CltEntreprise) { + this.CltEntreprise = CltEntreprise; + } + + public ClientPassager getCltPassager() { + return CltPassager; + } + + public void setCltPassager(ClientPassager CltPassager) { + this.CltPassager = CltPassager; + } + + + + + public String getTimbre() { + return timbre; + } + + public void setTimbre(String timbre) { + this.timbre = timbre; + } + + + public String getDate() { + if(Date == null){ + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date date = new Date(); + return dateFormat.format(date); + }else{ + return Date; + } + } + + public void setDate(String Date) { + this.Date = Date; + } + + + public String getTypeRegement() { + return TypeRegement; + } + + public void setTypeRegement(String TypeRegement) { + this.TypeRegement = TypeRegement; + } + + public void setTypeRegementString(String TypeRegement) { + if(TypeRegement.equals("Comptant")){ + this.TypeRegement = "0"; + }else{ + this.TypeRegement = "1"; + } + + } + + public String getTypeRegementString() { + String mode =""; + switch (this.TypeRegement) { + case "0": + mode= "Comptant"; + break; + case "1": + mode = "Facilité"; + break; + } + return mode ; + } + + + + + public String getNetAPayer() { + return NetAPayer; + } + + public void setNetAPayer(String NetAPayer) { + this.NetAPayer = NetAPayer; + } + + public String getTotalTVA() { + return TotalTVA; + } + + public String getCodeDevis() { + return CodeDevis; + } + + public void setCodeDevis(String CodeDevis) { + this.CodeDevis = CodeDevis; + } + + + public void setTotalTVA(String TotalTVA) { + this.TotalTVA = TotalTVA; + } + + public String getTotalHorsTaxNet() { + return TotalHorsTaxNet; + } + + public void setTotalHorsTaxNet(String TotalHorsTaxNet) { + this.TotalHorsTaxNet = TotalHorsTaxNet; + } + + + + public Integer getCodeUser() { + return CodeUser; + } + + public void setCodeUser(Integer CodeUser) { + this.CodeUser = CodeUser; + } + + public ObservableList getListeproduit() { + return listeproduit; + } + + public void setListeproduit(ObservableList listeproduit) { + this.listeproduit = listeproduit; + } + + public String getCodeFacture() { + return CodeFacture; + } + + public void setCodeFacture(String CodeFacture) { + this.CodeFacture = CodeFacture; + } + + public String getRemise() { + return Remise; + } + + public void setRemise(String Remise) { + this.Remise = Remise; + } + + + + public String getCodeBonLivraison() { + return CodeBonLivraison; + } + + public void setCodeBonLivraison(String CodeBonLivraison) { + this.CodeBonLivraison = CodeBonLivraison; + } + + +} diff --git a/src/main/java/Models/CommandeClt/CommandeCltDB.java b/src/main/java/Models/CommandeClt/CommandeCltDB.java new file mode 100644 index 0000000..233253e --- /dev/null +++ b/src/main/java/Models/CommandeClt/CommandeCltDB.java @@ -0,0 +1,587 @@ +/* + * 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.CommandeClt; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Models.Produit.ListeProduit; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Client.ClientDB; +import Models.Client.ClientEntrepriseDB; +import Models.Client.ClientPassagerDB; +import Models.Produit.Produit; +import Models.User.User; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author PC-Maher Ben Tili + */ +public class CommandeCltDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + public CommandeClt AddCommandeClt(CommandeClt commandeclt){ + + String totalhorstaxnet =commandeclt.getTotalHorsTaxNet().replace(",", "."); + String totaltva = commandeclt.getTotalTVA().replace(",", "."); + String netapayer = commandeclt.getNetAPayer().replace(",", "."); + String TypeReglement = commandeclt.getTypeRegement(); + String remise = commandeclt.getRemise().replace(",", "."); + String DateCommande = "CURTIME()"; + + if(commandeclt.getDate() != null){ + DateCommande = "'"+commandeclt.getDate()+"'"; + } + + + + String sql = ""; + if(commandeclt.getTypeClient()==0){ + String codeclientPersonne = commandeclt.CltPersonne.getCodeclient().toString(); + sql = "INSERT INTO `commandeclt` (`date_commande`, type_reglement, `typeclt`, `codeclient`, `total_h_t_net`, `total_tva`, `remise`, `timbre_loi`, `net_a_payer`, `idprofile_editeur`, iddevis, `local_nom`) VALUES ( "+DateCommande+", '"+TypeReglement+"', '0', '"+codeclientPersonne+"', '"+totalhorstaxnet+"', '"+totaltva+"', '"+remise+"', '"+ParametreSystem.Timbre+"', '"+netapayer+"', '"+User.idprofile+"', "+commandeclt.getCodeDevis()+", '"+ParametreSystem.NomLocalPC+"')"; + } + if(commandeclt.getTypeClient()==1){ + String codeclientEntreprise = commandeclt.CltEntreprise.getCode().toString(); + sql ="INSERT INTO `commandeclt` (`date_commande`, type_reglement, `typeclt`, `idcliententreprise`, `total_h_t_net`, `total_tva`, `remise`, `timbre_loi`, `net_a_payer`, `idprofile_editeur`, iddevis, `local_nom`) VALUES ( "+DateCommande+", '"+TypeReglement+"', '1', '"+codeclientEntreprise+"', '"+totalhorstaxnet+"', '"+totaltva+"', '"+remise+"', '"+ParametreSystem.Timbre+"', '"+netapayer+"', '"+User.idprofile+"', "+commandeclt.getCodeDevis()+", '"+ParametreSystem.NomLocalPC+"')"; + } + if(commandeclt.getTypeClient()==2){ + //insertion de passager + ClientPassagerDB CltPassagerDB = new ClientPassagerDB(); + commandeclt.CltPassager = CltPassagerDB.addPassager(commandeclt.getCltPassager()); + sql = "INSERT INTO `commandeclt` (`date_commande`, type_reglement, `typeclt`, `idcltpassageur`, `total_h_t_net`, `total_tva`, `remise`, `timbre_loi`, `net_a_payer`, `idprofile_editeur`, iddevis, `local_nom`) VALUES ( "+DateCommande+", '"+TypeReglement+"', '2', '"+commandeclt.CltPassager.getCodeclient()+"', '"+totalhorstaxnet+"', '"+totaltva+"', '"+remise+"', '"+ParametreSystem.Timbre+"', '"+netapayer+"', '"+User.idprofile+"', "+commandeclt.getCodeDevis()+", '"+ParametreSystem.NomLocalPC+"')"; + + } + String codecommandeclt = cnx.InsertGetLastId(sql); + commandeclt.setCodecommandeclt(codecommandeclt); + + String req ; + String PrixHT ; + String Remise ; + String TotalHT ; + String TVA ; + String TotalTTC ; + + for(ListeProduit listeprod : commandeclt.getListeproduit()){ + PrixHT = listeprod.getPrixHT().replace(",","."); + Remise= listeprod.getRemise().replace("%","").replace(",","."); + TotalHT= listeprod.getTotalHT().replace(",","."); + TVA=listeprod.getTVA().replace("%","").replace(",","."); + TotalTTC= listeprod.getTotalTTC().replace(",","."); + + req = "INSERT INTO liste_produit_commandeclt (`commande_idcommande`, `produit_reference`, `designation_produit`, `quantite`, `p_u_h_t`, `remise`, `p_u_h_t_net`, `tva`, `montant`, `local_nom`) VALUES ('"+codecommandeclt+"', '"+listeprod.getReference()+"', \""+listeprod.getDesignation()+"\", "+listeprod.getQuantite()+", "+PrixHT+", "+Remise+", "+TotalHT+", "+TVA+", "+TotalTTC+", '"+ParametreSystem.NomLocalPC+"');"; + + cnx.insertion(req); + } + return commandeclt ; + } + + public CommandeClt getCommandeClt(String codecommande){ + CommandeClt commandeclt = new CommandeClt() ; + String req = "SELECT * FROM commandeclt where (idcommande = "+codecommande+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + if(cnx.ouverture()){ + try{ + 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){ + commandeclt.setCodecommandeclt(resultat.getString("idcommande")); + commandeclt.setTypeRegement(resultat.getString("type_reglement")); + commandeclt.setDate(resultat.getString("date_commande")); + commandeclt.setNetAPayer(resultat.getString("net_a_payer")); + commandeclt.setTotalHorsTaxNet(resultat.getString("total_h_t_net")); + commandeclt.setTotalTVA(resultat.getString("total_tva")); + commandeclt.setTimbre(resultat.getString("timbre_loi")); + commandeclt.setCodeUser(resultat.getInt("idprofile_editeur")); + commandeclt.setTypeClient(resultat.getInt("typeclt")); + commandeclt.setCodeDevis(resultat.getString("iddevis")); + commandeclt.setRemise(resultat.getString("remise")); + + if(resultat.getString("id_bon_livraisonclt") != null){ + if(resultat.getString("id_bon_livraisonclt").length()>0){ + commandeclt.setCodeBonLivraison(resultat.getString("id_bon_livraisonclt")); + } + } + + if(resultat.getString("id_factureclt") != null){ + if(resultat.getString("id_factureclt").length()>0){ + commandeclt.setCodeFacture(resultat.getString("id_factureclt")); + } + } + + + + if(commandeclt.getTypeClient()==0){ + ClientDB PersonneDB = new ClientDB(); + commandeclt.setCltPersonne(PersonneDB.getClient(resultat.getString("codeclient"))); + } + if(commandeclt.getTypeClient()==1){ + ClientEntrepriseDB ClientEtreDB= new ClientEntrepriseDB(); + commandeclt.setCltEntreprise(ClientEtreDB.GetClientEtr(resultat.getString("idcliententreprise"))); + } + + if(commandeclt.getTypeClient()==2){//Passager + ClientPassagerDB CltPassagerDB= new ClientPassagerDB(); + commandeclt.setCltPassager(CltPassagerDB.getClient(resultat.getString("idcltpassageur"))); + } + + + cnx.ouverture(); + String reqprod = "SELECT * FROM liste_produit_commandeclt where (commande_idcommande = "+codecommande+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ResultSet resulist = cnx.excutionquery(reqprod); + //on repace le curseur avant la première ligne + resulist.beforeFirst(); + ObservableList dataProdDev=FXCollections.observableArrayList(); + while ( resulist.next() ) { + String reference = resulist.getString("produit_reference"); + String designation = resulist.getString("designation_produit"); + String quantite=resulist.getString("quantite"); + String PrixHT =resulist.getString("p_u_h_t"); + String Remise =resulist.getString("remise"); + String TotalHT =resulist.getString("p_u_h_t_net"); + String TVA =resulist.getString("tva"); + String TotalTTC =resulist.getString("montant"); + dataProdDev.add(new ListeProduit(reference, designation, quantite, PrixHT, Remise, TotalHT, TVA, TotalTTC)); + } + commandeclt.setListeproduit(dataProdDev); + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return commandeclt ; + } + + + public boolean UpdateCommandeCltSetIdBonLivraison(String codecommande, String id_bon_livraion){ + String Query = "UPDATE `commandeclt` SET `id_bon_livraisonclt`='"+id_bon_livraion+"' WHERE (`idcommande`='"+codecommande+"') AND (`local_nom`='"+ParametreSystem.NomLocalPC+"');"; + boolean Result = false; + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(Query); + //System.out.println("nbr_update_commande bon livraison "+nbr); + if(nbr >= 1){ + Result = true; + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return Result; + } + + + public boolean UpdateCommandeCltSetIdFacture(String codecommande, String id_facture) + { + boolean Result = false; + contro clt = new contro(); + + if( clt.isStringNull(codecommande) || clt.isStringNull(id_facture) ){ + return Result; + } + + String Query = "UPDATE `commandeclt` SET `id_factureclt`='"+id_facture+"' WHERE (`idcommande`='"+codecommande+"') AND (`local_nom`='"+ParametreSystem.NomLocalPC+"');"; + + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(Query); + //System.out.println("nbr_update_commande bon livraison "+nbr); + if(nbr >= 1){ + Result = true; + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + //System.out.println(Query); + return Result; + } + + /********************************** Search *******************************/ + + public ObservableList SearchCommande(Integer debut, Integer nbr, String TypeRegement, String CodeCommande, String CodeClient, String NameClient, String CodeDevis, String DateCreation) + { + ObservableList data =FXCollections.observableArrayList(); + + String Where = ""; + + if(TypeRegement.equals("0") || TypeRegement.equals("1")){ + Where += " (comm.type_reglement = \""+TypeRegement+"\") AND "; + } + + if(!clt.isStringNull(CodeCommande)){ + Where += " (comm.idcommande LIKE \"%"+Adaptateur.addSlashes(CodeCommande)+"%\") AND "; + } + + if(!clt.isStringNull(CodeDevis)){ + Where += " (comm.iddevis LIKE \"%"+Adaptateur.addSlashes(CodeDevis)+"%\") AND "; + } + + + if(!clt.isStringNull(CodeClient)){ + Where += " ((comm.idcliententreprise LIKE '%"+CodeClient+"%') OR (comm.codeclient LIKE '%"+CodeClient+"%') OR (comm.idcltpassageur LIKE '%"+CodeClient+"%')) AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (DATE(comm.date_commande) = \""+DateCreation+"\") AND "; + } + + String LeftJoin = ""; + if(!clt.isStringNull(NameClient)){ + LeftJoin = " LEFT JOIN client C ON (C.codeclient = comm.codeclient) AND (comm.typeclt = 0) " + +" LEFT JOIN cltentreprise E ON (E.idcliententreprise = comm.idcliententreprise ) AND (comm.typeclt = 1) " + +" LEFT JOIN cltpassageur P ON (P.idcltpassageur = comm.idcltpassageur) AND (comm.typeclt = 2) "; + NameClient = Adaptateur.addSlashes(NameClient); + Where += "( ((C.nom LIKE \"%"+NameClient+"%\") OR (C.prenom LIKE \"%"+NameClient+"%\") OR (C.nomcomplet LIKE \"%"+NameClient+"%\")) OR (E.nomentrepise LIKE \"%"+NameClient+"%\") OR (P.nom LIKE \"%"+NameClient+"%\") ) AND"; + } + + String req="SELECT comm.idcommande, comm.id_bon_livraisonclt, DATE_FORMAT(comm.date_commande, '%d/%m/%Y') as date_commande , comm.type_reglement, comm.codeclient, comm.typeclt, comm.codeclient, comm.idcliententreprise, comm.idcltpassageur, comm.net_a_payer, comm.iddevis, factclt.idfactureclt " + + "FROM commandeclt comm " + + "LEFT JOIN factureclt factclt ON (comm.idcommande = factclt.idcommande_commandeclt) " + + LeftJoin + + "WHERE " + Where + + " (comm.local_nom = '"+ParametreSystem.NomLocalPC+"') "+ + "ORDER BY comm.date_commande 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() ) { + String code_commande = resultat.getString("idcommande"); + + String type_client = ""; + String code_client = ""; + if(resultat.getString("typeclt").equals("0")){ + type_client ="Exist Client"; + code_client = resultat.getString("codeclient"); + }else if(resultat.getString("typeclt").equals("1")){ + type_client ="Entreprise"; + code_client = resultat.getString("idcliententreprise"); + }else if(resultat.getString("typeclt").equals("2")){ + type_client ="Passager"; + code_client = resultat.getString("idcltpassageur"); + } + + String total_commande =resultat.getString("net_a_payer"); + + String mode_reglement = ""; //Mode Paiement + if(resultat.getString("type_reglement").equals("0")){ + mode_reglement = "Comptant"; + }else if(resultat.getString("type_reglement").equals("1")){ + mode_reglement = "Facilité"; + } + + String date_creation =resultat.getString("date_commande"); + + String code_devis =resultat.getString("iddevis"); + + String code_facture =resultat.getString("idfactureclt"); + String id_bon_livraison =resultat.getString("id_bon_livraisonclt"); + data.add(new CommandeCltListe(code_commande, type_client, code_client, mode_reglement, total_commande, date_creation, code_devis, code_facture, id_bon_livraison)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + else{ + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + return data ; + + } + + + public Integer nbrSearchCommande(String TypeRegement, String CodeCommande, String CodeClient, String NameClient, String CodeDevis, String DateCreation) + { + String Where = ""; + + if(TypeRegement.equals("0") || TypeRegement.equals("1")){ + Where += " (comm.type_reglement = \""+TypeRegement+"\") AND "; + } + + if(!clt.isStringNull(CodeCommande)){ + Where += " (comm.idcommande LIKE \"%"+Adaptateur.addSlashes(CodeCommande)+"%\") AND "; + } + + if(!clt.isStringNull(CodeClient)){ + Where += " ((comm.idcliententreprise LIKE '%"+CodeClient+"%') OR (comm.codeclient LIKE '%"+CodeClient+"%') OR (comm.idcltpassageur LIKE '%"+CodeClient+"%')) AND "; + } + + if(!clt.isStringNull(CodeDevis)){ + Where += " (comm.iddevis LIKE \"%"+Adaptateur.addSlashes(CodeDevis)+"%\") AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (DATE(comm.date_commande) = \""+DateCreation+"\") AND "; + } + + String LeftJoin = ""; + if(!clt.isStringNull(NameClient)){ + LeftJoin = " LEFT JOIN client C ON (C.codeclient = comm.codeclient) AND (comm.typeclt = 0) " + +" LEFT JOIN cltentreprise E ON (E.idcliententreprise = comm.idcliententreprise ) AND (comm.typeclt = 1) " + +" LEFT JOIN cltpassageur P ON (P.idcltpassageur = comm.idcltpassageur) AND (comm.typeclt = 2) "; + NameClient = Adaptateur.addSlashes(NameClient); + Where += "( ((C.nom LIKE \"%"+NameClient+"%\") OR (C.prenom LIKE \"%"+NameClient+"%\") OR (C.nomcomplet LIKE \"%"+NameClient+"%\")) OR (E.nomentrepise LIKE \"%"+NameClient+"%\") OR (P.nom LIKE \"%"+NameClient+"%\") ) AND"; + } + + String req="SELECT COUNT(comm.idcommande) " + + "FROM commandeclt comm " + + " LEFT join factureclt factclt ON comm.idcommande = factclt.idcommande_commandeclt " + + LeftJoin + + "WHERE " + Where + + " (comm.local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + + int sommme =0; + if(cnx.ouverture()){ + try{ + /* Exécution d'une requête de lecture */ + ResultSet resultat = cnx.excutionquery(req); + // get the number of rows from the result set + resultat.next(); + sommme = resultat.getInt(1); + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return sommme ; + } + + /********************************** Initial *******************************/ + public ObservableList getdata(String tab,String mot, Integer debut, Integer nbr){ + ObservableList data=FXCollections.observableArrayList(); + + String req="SELECT comm.idcommande, comm.id_bon_livraisonclt, DATE_FORMAT(comm.date_commande, '%d/%m/%Y') as date_commande , comm.type_reglement, comm.codeclient, comm.typeclt, comm.codeclient, comm.idcliententreprise, comm.idcltpassageur, comm.net_a_payer, comm.iddevis, factclt.idfactureclt FROM commandeclt comm LEFT join factureclt factclt ON comm.idcommande = factclt.idcommande_commandeclt WHERE (comm."+tab+" LIKE '%"+mot+"%') AND (comm.local_nom = '"+ParametreSystem.NomLocalPC+"') ORDER BY comm.date_commande DESC LIMIT "+debut+" , "+nbr+" ;"; + + if(tab.equals("CodeClient")){ + req="SELECT comm.idcommande, DATE_FORMAT(comm.date_commande, '%d/%m/%Y') as date_commande , comm.type_reglement, comm.codeclient, comm.typeclt, comm.codeclient, comm.idcliententreprise, comm.idcltpassageur, comm.net_a_payer, comm.iddevis, comm.id_bon_livraisonclt, factclt.idfactureclt FROM commandeclt comm LEFT join factureclt factclt ON comm.idcommande = factclt.idcommande_commandeclt WHERE ((comm.idcliententreprise LIKE '%"+mot+"%') OR (comm.codeclient LIKE '%"+mot+"%') OR (comm.idcltpassageur LIKE '%"+mot+"%')) AND (comm.local_nom = '"+ParametreSystem.NomLocalPC+"') ORDER BY comm.date_commande 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() ) { + + String code_commande = resultat.getString("idcommande"); + + String type_client = ""; + String code_client = ""; + if(resultat.getString("typeclt").equals("0")){ + type_client ="Exist Client"; + code_client = resultat.getString("codeclient"); + }else if(resultat.getString("typeclt").equals("1")){ + type_client ="Entreprise"; + code_client = resultat.getString("idcliententreprise"); + }else if(resultat.getString("typeclt").equals("2")){ + type_client ="Passager"; + code_client = resultat.getString("idcltpassageur"); + } + + String total_commande =resultat.getString("net_a_payer"); + + String mode_reglement = ""; //Mode Paiement + if(resultat.getString("type_reglement").equals("0")){ + mode_reglement = "Comptant"; + }else if(resultat.getString("type_reglement").equals("1")){ + mode_reglement = "Facilité"; + } + + String date_creation =resultat.getString("date_commande"); + + String code_devis =resultat.getString("iddevis"); + + String code_facture =resultat.getString("idfactureclt"); + String id_bon_livraison =resultat.getString("id_bon_livraisonclt"); + data.add(new CommandeCltListe(code_commande, type_client, code_client, mode_reglement, total_commande, date_creation, code_devis, code_facture, id_bon_livraison)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return data ; + } + + public String nbrCommandeCltGestion(String tab, String mot){ + + String req = "SELECT count(*) FROM commandeclt WHERE (`"+tab+"` LIKE '%"+mot+"%') AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + + if(tab.equals("CodeClient")){ + req = "SELECT count(*) FROM commandeclt WHERE ((idcliententreprise LIKE '%"+mot+"%') OR (codeclient LIKE '%"+mot+"%') OR (idcltpassageur LIKE '%"+mot+"%')) AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + } + 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(req+" \n Erreur SQL ! \n"+ex.getMessage()); + } + } + return Integer.toString(sommme) ; + } + + + public ObservableList SearchCommandeCltNotBonLivrison(Integer debut, Integer nbr, String CodeCommande, String DateCreation, String TypeRegement) + { + ObservableList data=FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(CodeCommande)){ + Where += " (comm.idcommande = \""+Adaptateur.addSlashes(CodeCommande)+"\") AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (comm.date_commande = \""+DateCreation+"\") AND "; + } + + if(!clt.isStringNull(TypeRegement)){ + Where += " (comm.type_reglement = \""+TypeRegement+"\") AND "; + } + + if(!Where.equals("")){ + Where = " WHERE (id_bon_livraisonclt IS NULL) AND (id_factureclt IS NULL) AND (comm.local_nom = '"+ParametreSystem.NomLocalPC+"') AND "+ Where.substring(0, Where.length() - 4); + }else{ + Where = " WHERE (id_bon_livraisonclt IS NULL) AND (id_factureclt IS NULL) AND (comm.local_nom = '"+ParametreSystem.NomLocalPC+"') "; + } + + String req="SELECT comm.idcommande, DATE_FORMAT(comm.date_commande, '%d/%m/%Y') as date_commande , comm.type_reglement, comm.codeclient, comm.typeclt, comm.codeclient, comm.idcliententreprise, comm.idcltpassageur, comm.net_a_payer, comm.iddevis " + + " FROM commandeclt comm " + + Where + + " ORDER BY comm.date_commande 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() ) { + + String code_commande = resultat.getString("idcommande"); + + String type_client = ""; + String code_client = ""; + if(resultat.getString("typeclt").equals("0")){ + type_client ="Exist Client"; + code_client = resultat.getString("codeclient"); + }else if(resultat.getString("typeclt").equals("1")){ + type_client ="Entreprise"; + code_client = resultat.getString("idcliententreprise"); + }else if(resultat.getString("typeclt").equals("2")){ + type_client ="Passager"; + code_client = resultat.getString("idcltpassageur"); + } + + String total_commande =resultat.getString("net_a_payer"); + + String mode_reglement = ""; //Mode Paiement + if(resultat.getString("type_reglement").equals("0")){ + mode_reglement = "Comptant"; + }else if(resultat.getString("type_reglement").equals("1")){ + mode_reglement = "Facilité"; + } + + String date_creation =resultat.getString("date_commande"); + + String code_devis =resultat.getString("iddevis"); + + data.add(new CommandeCltListe(code_commande, type_client, code_client, mode_reglement, total_commande, date_creation, code_devis, "", "")); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return data ; + } + + public Integer nbrCommandeCltNotBonLivrison(String CodeCommande, String DateCreation, String TypeRegement){ + + String Where = ""; + + if(!clt.isStringNull(CodeCommande)){ + Where += " (comm.idcommande = \""+Adaptateur.addSlashes(CodeCommande)+"\") AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (comm.date_commande = \""+DateCreation+"\") AND "; + } + + if(!clt.isStringNull(TypeRegement)){ + Where += " (comm.type_reglement = \""+TypeRegement+"\") AND "; + } + + if(!Where.equals("")){ + Where = " WHERE (id_bon_livraisonclt IS NULL) AND (id_factureclt IS NULL) AND (comm.local_nom = '"+ParametreSystem.NomLocalPC+"') AND "+ Where.substring(0, Where.length() - 4); + }else{ + Where = " WHERE (id_bon_livraisonclt IS NULL) AND (id_factureclt IS NULL) AND (comm.local_nom = '"+ParametreSystem.NomLocalPC+"') "; + } + + String req = "SELECT COUNT(comm.idcommande) FROM commandeclt comm "+ 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(req+" \n Erreur SQL ! \n"+ex.getMessage()); + } + } + return sommme ; + } + +} diff --git a/src/main/java/Models/CommandeClt/CommandeCltListe.java b/src/main/java/Models/CommandeClt/CommandeCltListe.java new file mode 100644 index 0000000..9c7ec92 --- /dev/null +++ b/src/main/java/Models/CommandeClt/CommandeCltListe.java @@ -0,0 +1,71 @@ +/* + * 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.CommandeClt; + +import javafx.beans.property.SimpleStringProperty; + + +public class CommandeCltListe { + + private final SimpleStringProperty CodeCommande; + private final SimpleStringProperty TypeClient; + private final SimpleStringProperty CodeClient; + private final SimpleStringProperty ModePaiement; + private final SimpleStringProperty TotalCommande; + private final SimpleStringProperty DateCreation; + private final SimpleStringProperty CodeDevis; + private final SimpleStringProperty CodeFacture; + private final SimpleStringProperty CodeBonLivraison; + + public CommandeCltListe(String CodeCommande, String TypeClient, String CodeClient, String ModePaiement, String TotalCommande,String DateCreation, String CodeDevis, String CodeFacture, String CodeBonLivraison) { + this.CodeCommande= new SimpleStringProperty(CodeCommande); + this.TypeClient= new SimpleStringProperty(TypeClient); + this.CodeClient= new SimpleStringProperty(CodeClient); + this.ModePaiement = new SimpleStringProperty(ModePaiement); + this.TotalCommande= new SimpleStringProperty(TotalCommande); + this.DateCreation= new SimpleStringProperty(DateCreation); + this.CodeDevis= new SimpleStringProperty(CodeDevis); + this.CodeFacture = new SimpleStringProperty(CodeFacture); + this.CodeBonLivraison = new SimpleStringProperty(CodeBonLivraison); + } + + public String getCodeFacture() { + return CodeFacture.get(); + } + + public String getCodeCommande() { + return CodeCommande.get(); + } + + public String getCodeDevis() { + return CodeDevis.get(); + } + + public String getTypeClient() { + return TypeClient.get(); + } + + public String getCodeClient() { + return CodeClient.get(); + } + + public String getTotalCommande() { + return TotalCommande.get(); + } + + public String getModePaiement() { + return ModePaiement.get(); + } + + public String getDateCreation() { + return DateCreation.get(); + } + + public String getCodeBonLivraison() { + return CodeBonLivraison.get(); + } + +} diff --git a/src/main/java/Models/CommandeFrs/CommandeFrs.java b/src/main/java/Models/CommandeFrs/CommandeFrs.java new file mode 100644 index 0000000..c806fc9 --- /dev/null +++ b/src/main/java/Models/CommandeFrs/CommandeFrs.java @@ -0,0 +1,25 @@ +/* + * 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.CommandeFrs; + +/** + * + * @author Maher + */ +public class CommandeFrs { + + public String CodeCommandeFrs; + + public String getCodeCommandeFrs() { + return CodeCommandeFrs; + } + + public void setCodeCommandeFrs(String CodeCommandeFrs) { + this.CodeCommandeFrs = CodeCommandeFrs; + } + + +} diff --git a/src/main/java/Models/DevisClt/Devis.java b/src/main/java/Models/DevisClt/Devis.java new file mode 100644 index 0000000..17eac91 --- /dev/null +++ b/src/main/java/Models/DevisClt/Devis.java @@ -0,0 +1,246 @@ +/* + * 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.DevisClt; + +import Models.Produit.ListeProduit; +import javafx.collections.ObservableList; + +/** + * + * @author PC-Maher + */ +public class Devis { + + private Integer TypeClient ; //0 Personne 1 Entreprise 2 Passager + private String CodeDevis ; + private String CodeClient ; + private String Nom; + private String Prenom; + private String Adresse; + private String Tele1; + private String Tele2; + private String Date; + private String Validite; + private String TypeRegement; + private String NetAPayer ; + private String TotalTVA ; + private String TotalHorsTaxNet; + private String Remise; + private String timbre; + private String matricule; + private Integer CodeUser; //code profile de utilisateur du programme + + private ObservableList listeproduit ; + + public Integer getTypeClient() { + return TypeClient; + } + + public void setTypeClient(Integer TypeClient) { + this.TypeClient = TypeClient; + } + + public String getTypeClientString() { + String Client = null ; + + if(TypeClient == 0){ + Client= "Ancien client"; + } + if(TypeClient == 1){ + Client= "Entreprise"; + } + if(TypeClient == 2){ + Client= "Passager"; + } + return Client ; + } + + public String getCodeDevis() { + return CodeDevis; + } + + public void setCodeDevis(String CodeDevis) { + this.CodeDevis = CodeDevis; + } + + public String getCodeClient() { + return CodeClient; + } + + public void setCodeClient(String CodeClient) { + this.CodeClient = CodeClient; + } + + public String getTimbre() { + return timbre; + } + + public void setTimbre(String timbre) { + this.timbre = timbre; + } + + public String getNom() { + return Nom; + } + + public void setNom(String Nom) { + this.Nom = Nom; + } + + public String getPrenom() { + return Prenom; + } + + public void setPrenom(String Prenom) { + this.Prenom = Prenom; + } + + public String getAdresse() { + return Adresse; + } + + public void setAdresse(String Adresse) { + this.Adresse = Adresse; + } + + public String getTele1() { + return Tele1; + } + + public void setTele1(String Tele1) { + this.Tele1 = Tele1; + } + + public String getTele2() { + return Tele2; + } + + public String getTele2Null() { + if(Tele2.length()==0){ + return "null"; + } + else{ + return Tele2; + } + } + + public void setTele2(String Tele2) { + this.Tele2 = Tele2; + } + + public String getDate() { + return Date; + } + + public void setDate(String Date) { + this.Date = Date; + } + + public String getValidite() { + return Validite; + } + + public void setValidite(String Validite) { + this.Validite = Validite; + } + + public String getTypeRegement() { + return TypeRegement; + } + + public void setTypeRegement(String TypeRegement) { + this.TypeRegement = TypeRegement; + } + + public String getTypeRegementString() { + String mode =""; + switch (this.TypeRegement) { + case "0": + mode= "Comptant"; + break; + case "1": + mode = "Facilité"; + break; + } + return mode ; + } + + public int getTypeRegementInteger(){ + int mode = 0; + switch (this.TypeRegement) { + case "Comptant": + mode= 0; + break; + case "Facilité": + mode = 1; + break; + } + return mode ; + } + + + public String getNetAPayer() { + return NetAPayer; + } + + public void setNetAPayer(String NetAPayer) { + this.NetAPayer = NetAPayer; + } + + public String getTotalTVA() { + return TotalTVA; + } + + public void setTotalTVA(String TotalTVA) { + this.TotalTVA = TotalTVA; + } + + public String getTotalHorsTaxNet() { + return TotalHorsTaxNet; + } + + public void setTotalHorsTaxNet(String TotalHorsTaxNet) { + this.TotalHorsTaxNet = TotalHorsTaxNet; + } + + public String getMatricule() { + return matricule; + } + + public void setMatricule(String matricule) { + this.matricule = matricule; + } + + public String getRemise() { + return Remise; + } + + public void setRemise(String Remise) { + this.Remise = Remise; + } + + public Integer getCodeUser() { + return CodeUser; + } + + public void setCodeUser(Integer CodeUser) { + this.CodeUser = CodeUser; + } + + + public ObservableList getListeproduit() { + return listeproduit; + } + + public void setListeproduit(ObservableList listeproduit) { + this.listeproduit = listeproduit; + } + + + + + +} diff --git a/src/main/java/Models/DevisClt/DevisCltListe.java b/src/main/java/Models/DevisClt/DevisCltListe.java new file mode 100644 index 0000000..b2ef9be --- /dev/null +++ b/src/main/java/Models/DevisClt/DevisCltListe.java @@ -0,0 +1,59 @@ +/* + * 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.DevisClt; + +import javafx.beans.property.SimpleStringProperty; + +public class DevisCltListe { + + private final SimpleStringProperty CodeDevis; + private final SimpleStringProperty TypeClient; + private final SimpleStringProperty CodeClient; + private final SimpleStringProperty ModePaiement; + private final SimpleStringProperty TotalDevis; + private final SimpleStringProperty DateCreation; + private final SimpleStringProperty FinValidite; + + + public DevisCltListe(String CodeDevis, String TypeClient, String CodeClient, String ModePaiement, String TotalDevis,String DateCreation, String FinValidite) { + this.CodeDevis= new SimpleStringProperty(CodeDevis); + this.TypeClient= new SimpleStringProperty(TypeClient); + this.CodeClient= new SimpleStringProperty(CodeClient); + this.ModePaiement = new SimpleStringProperty(ModePaiement); + this.TotalDevis= new SimpleStringProperty(TotalDevis); + this.DateCreation= new SimpleStringProperty(DateCreation); + this.FinValidite= new SimpleStringProperty(FinValidite); + } + + public String getCodeDevis() { + return CodeDevis.get(); + } + + public String getTypeClient() { + return TypeClient.get(); + } + + public String getCodeClient() { + return CodeClient.get(); + } + + public String getTotalDevis() { + return TotalDevis.get(); + } + + public String getModePaiement() { + return ModePaiement.get(); + } + + public String getDateCreation() { + return DateCreation.get(); + } + + public String getFinValidite() { + return FinValidite.get(); + } + +} diff --git a/src/main/java/Models/DevisClt/DevisDB.java b/src/main/java/Models/DevisClt/DevisDB.java new file mode 100644 index 0000000..49e6865 --- /dev/null +++ b/src/main/java/Models/DevisClt/DevisDB.java @@ -0,0 +1,423 @@ +package Models.DevisClt; + +import Models.Produit.ListeProduit; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.User.User; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author Maher Ben Tili + */ +public class DevisDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + public String AddDevis(Devis devis){ + + String codedevis = null ; + + String datecreation = Adaptateur.DatabaseDateFormat(devis.getDate()); + String codeclient = devis.getCodeClient(); + String datefinvalidite =Adaptateur.DatabaseDateFormat(devis.getValidite()); + String totalhorstaxnet =devis.getTotalHorsTaxNet().replace(",", "."); + String totaltva = devis.getTotalTVA().replace(",", "."); + String netapayer = devis.getNetAPayer().replace(",", "."); + String remise = devis.getRemise().replace(",", "."); + + String sql = ""; + + if(devis.getTypeClient()==0){ + sql ="INSERT INTO `devisclt` (`date_creation`, `fin_validite`, `typeclt`, `type_reglement`, `codeclient`, `total_h_t_net`, `total_tva`, `remise`, `timbre_loi`, `net_a_payer`, `idprofile`, `local_nom`) VALUES ('"+datecreation+"', '"+datefinvalidite+"', '0', '"+devis.getTypeRegementInteger()+"', '"+codeclient+"', "+totalhorstaxnet+", "+totaltva+", "+remise+", '"+ParametreSystem.Timbre+"', '"+netapayer+"', "+User.idprofile+", '"+ParametreSystem.NomLocalPC+"');"; + } + if(devis.getTypeClient()==1){ + sql ="INSERT INTO `devisclt` (`date_creation`, `fin_validite`, `typeclt`, `type_reglement`, `idcliententreprise`, `total_h_t_net`, `total_tva`, `remise`, `timbre_loi`, `net_a_payer`, `idprofile`, `local_nom`) VALUES ('"+datecreation+"', '"+datefinvalidite+"', '1', '"+devis.getTypeRegementInteger()+"', '"+codeclient+"', "+totalhorstaxnet+", "+totaltva+", "+remise+", '"+ParametreSystem.Timbre+"', "+netapayer+", "+User.idprofile+", '"+ParametreSystem.NomLocalPC+"');"; + } + if(devis.getTypeClient()==2){ + //insertion de passager + String req = "INSERT INTO `cltpassageur` (`nom`, `prenom`, `adresse`, `tele`, `gsm`, `local_nom`) VALUES ('"+devis.getNom()+"', '"+devis.getPrenom()+"', \""+devis.getAdresse()+"\", '"+devis.getTele1()+"', "+devis.getTele2Null()+", '"+ParametreSystem.NomLocalPC+"');"; + String codepassager = cnx.InsertGetLastId(req); + if(!codepassager.isEmpty()){ + sql ="INSERT INTO `devisclt` (`date_creation`, `fin_validite`, `typeclt`, `type_reglement`, `idcltpassageur`, `total_h_t_net`, `total_tva`, `remise`, `timbre_loi`, `net_a_payer`, `idprofile`, `local_nom`) VALUES ('"+datecreation+"', '"+datefinvalidite+"', '2', '"+devis.getTypeRegementInteger()+"', '"+codepassager+"', '"+totalhorstaxnet+"', '"+totaltva+"', '"+remise+"', '"+ParametreSystem.Timbre+"', '"+netapayer+"', '"+User.idprofile+"', '"+ParametreSystem.NomLocalPC+"');"; + } + } + codedevis = cnx.InsertGetLastId(sql); + + String req ; + String PrixHT ; + String Remise ; + String TotalHT ; + String TVA ; + String TotalTTC ; + + for(ListeProduit listeprod : devis.getListeproduit()){ + PrixHT = listeprod.getPrixHT().replace(",","."); + Remise= listeprod.getRemise().replace("%","").replace(",","."); + TotalHT= listeprod.getTotalHT().replace(",","."); + TVA=listeprod.getTVA().replace("%","").replace(",","."); + TotalTTC= listeprod.getTotalTTC().replace(",","."); + + req = "INSERT INTO `list_produit_devisclt` (`iddevis_devis`, `reference_produit`, `designation_produit`, `quantie`, `p_u_h_t`, `remise`, `p_u_h_t_net`, `tva`, `montant`, `local_nom`) VALUES ('"+codedevis+"', \""+listeprod.getReference()+"\", \""+listeprod.getDesignation()+"\", "+listeprod.getQuantite()+", "+PrixHT+", "+Remise+", "+TotalHT+", "+TVA+", "+TotalTTC+", '"+ParametreSystem.NomLocalPC+"');"; + cnx.insertion(req); + } + return codedevis ; + } + + public Devis getDevis(String codedevis){ + Devis devis = new Devis() ; + String req = "SELECT `iddevis`, `date_creation`, DATE_FORMAT(fin_validite, '%d/%m/%Y') as fin_validite , `type_reglement`, `codeclient`, `typeclt`, `idcliententreprise`, `idcltpassageur`, `total_h_t_net`, `total_tva`, `timbre_loi`, `net_a_payer`, `idprofile`, `remise` FROM `devisclt` WHERE `iddevis` = '"+codedevis+"' AND (local_nom = '"+ParametreSystem.NomLocalPC+"'); "; + if(cnx.ouverture()){ + try{ + 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){ + + devis.setCodeDevis(resultat.getString("iddevis")); + + devis.setTypeRegement(resultat.getString("type_reglement")); + devis.setDate(resultat.getString("date_creation")); + devis.setValidite(resultat.getString("fin_validite")); + devis.setNetAPayer(resultat.getString("net_a_payer")); + devis.setTotalHorsTaxNet(resultat.getString("total_h_t_net")); + devis.setTotalTVA(resultat.getString("total_tva")); + devis.setTimbre(resultat.getString("timbre_loi")); + devis.setCodeUser(resultat.getInt("idprofile")); + devis.setTypeClient(resultat.getInt("typeclt")); + devis.setRemise(resultat.getString("remise")); + + if(devis.getTypeClient()==0){ + devis.setCodeClient(resultat.getString("codeclient")); + cnx.ouverture(); + String reqclt = "SELECT * FROM `client` WHERE (`codeclient` = '"+devis.getCodeClient()+"') AND (local_nom = '"+ParametreSystem.NomLocalPC+"'); "; + ResultSet resuclt = cnx.excutionquery(reqclt); + resuclt.last(); + devis.setNom(resuclt.getString("nom")); + devis.setPrenom(resuclt.getString("prenom")); + devis.setAdresse(resuclt.getString("adresse")); + devis.setTele1(resuclt.getString("telefix")); + devis.setTele2(resuclt.getString("telemobile")); + } + + if(devis.getTypeClient()==1){ + devis.setCodeClient(resultat.getString("idcliententreprise")); + cnx.ouverture(); + String reqclt = "SELECT * FROM `cltentreprise` WHERE `idcliententreprise` = '"+devis.getCodeClient()+"' AND (local_nom = '"+ParametreSystem.NomLocalPC+"'); "; + ResultSet resucltetr = cnx.excutionquery(reqclt); + resucltetr.last(); + devis.setNom(resucltetr.getString("nomentrepise")); + devis.setMatricule(resucltetr.getString("matricule_fiscale")); + devis.setAdresse(resucltetr.getString("adresse")); + devis.setTele1(resucltetr.getString("telefix")); + devis.setTele2(resucltetr.getString("telefix2")); + } + + if(devis.getTypeClient()==2){ + devis.setCodeClient(resultat.getString("idcltpassageur")); + cnx.ouverture(); + String reqclt = "SELECT * FROM `cltpassageur` WHERE `idcltpassageur` = '"+devis.getCodeClient()+"' AND (local_nom = '"+ParametreSystem.NomLocalPC+"'); "; + ResultSet resucltpa = cnx.excutionquery(reqclt); + resucltpa.last(); + devis.setNom(resucltpa.getString("nom")); + devis.setPrenom(resucltpa.getString("prenom")); + devis.setAdresse(resucltpa.getString("adresse")); + devis.setTele1(resucltpa.getString("tele")); + devis.setTele2(resucltpa.getString("gsm")); + } + cnx.ouverture(); + String reqprod = "SELECT * FROM list_produit_devisclt where iddevis_devis = "+codedevis+" AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ResultSet resulist = cnx.excutionquery(reqprod); + //on repace le curseur avant la première ligne + resulist.beforeFirst(); + ObservableList dataProdDev=FXCollections.observableArrayList(); + while ( resulist.next() ) { + String reference = resulist.getString("reference_produit"); + String designaton = resulist.getString("designation_produit"); + String quantite=resulist.getString("quantie"); + String PrixHT =resulist.getString("p_u_h_t"); + String Remise =resulist.getString("remise"); + String TotalHT =resulist.getString("p_u_h_t_net"); + String TVA =resulist.getString("tva"); + String TotalTTC =resulist.getString("montant"); + dataProdDev.add(new ListeProduit(reference, designaton, quantite, PrixHT, Remise, TotalHT, TVA, TotalTTC)); + } + devis.setListeproduit(dataProdDev); + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return devis ; + } + + + + + /********************************** Initial *******************************/ + public ObservableList SearchDevisCltGestion(Integer debut, Integer nbr, String CodeDevis, String CodeClient, String Reglement, String DateCreation, String NameClient, String CinClient) + { + ObservableList data = FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(CodeDevis)){ + Where += " (D.`iddevis` LIKE \"%"+Adaptateur.addSlashes(CodeDevis)+"%\") AND "; + } + + if(!clt.isStringNull(CodeClient)){ + Where += " ( (D.idcliententreprise = '"+CodeClient+"') OR (D.codeclient = '"+CodeClient+"') OR (D.idcltpassageur = '"+CodeClient+"') ) AND "; + } + + if(!clt.isStringNull(Reglement)){ + Where += " (D.`type_reglement` = \""+Reglement+"\") AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (DATE(D.`date_creation`) = \""+DateCreation+"\") AND "; + } + + String LeftJoin = ""; + if(!clt.isStringNull(NameClient) || !clt.isStringNull(CinClient) ){ + LeftJoin = " LEFT JOIN `client` C ON (C.codeclient = D.codeclient) AND (D.typeclt = 0) " + +" LEFT JOIN `cltentreprise` E ON (E.idcliententreprise = D.idcliententreprise ) AND (D.typeclt = 1) " + +" LEFT JOIN `cltpassageur` P ON (P.idcltpassageur = D.idcltpassageur) AND (D.typeclt = 2) "; + + if(!clt.isStringNull(NameClient)){ + NameClient = Adaptateur.addSlashes(NameClient); + Where += "( ((C.nom LIKE \"%"+NameClient+"%\") OR (C.prenom LIKE \"%"+NameClient+"%\") OR (C.nomcomplet LIKE \"%"+NameClient+"%\")) OR (E.nomentrepise LIKE \"%"+NameClient+"%\") OR (P.nom LIKE \"%"+NameClient+"%\") ) AND"; + } + + if(!clt.isStringNull(CinClient)){ + CinClient = Adaptateur.addSlashes(CinClient); + Where += "( (C.cin = \""+CinClient+"\") OR (E.matricule_fiscale = \""+CinClient+"\") ) AND"; + } + } + + if(!Where.equals("")){ + Where = "WHERE " + Where + " (D.local_nom = '"+ParametreSystem.NomLocalPC+"') "; + }else{ + Where = "WHERE (D.local_nom = '"+ParametreSystem.NomLocalPC+"') "; + } + + String req="SELECT D.`iddevis`, DATE_FORMAT(D.date_creation, '%d/%m/%Y') as date_creation , DATE_FORMAT(D.fin_validite, '%d/%m/%Y') as fin_validite , D.`type_reglement`, D.`codeclient`, D.`typeclt`, D.`idcliententreprise`, D.`idcltpassageur`, D.`net_a_payer` " + + "FROM `devisclt` D " + + LeftJoin + + Where + + "ORDER BY D.date_creation 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() ) { + + String code_devis = resultat.getString("iddevis"); + + String type_client = ""; + String code_client = ""; + if(resultat.getString("typeclt").equals("0")){ + type_client ="Exist Client"; + code_client = resultat.getString("codeclient"); + }else if(resultat.getString("typeclt").equals("1")){ + type_client ="Entreprise"; + code_client = resultat.getString("idcliententreprise"); + }else if(resultat.getString("typeclt").equals("2")){ + type_client ="Passager"; + code_client = resultat.getString("idcltpassageur"); + } + + String total_devis =resultat.getString("net_a_payer"); + + String mode_reglement = ""; //Mode Paiement + if(resultat.getString("type_reglement").equals("0")){ + mode_reglement = "Comptant"; + }else if(resultat.getString("type_reglement").equals("1")){ + mode_reglement = "Facilité"; + } + + String date_creation =resultat.getString("date_creation"); + String date_fin_validite =resultat.getString("fin_validite"); + + data.add(new DevisCltListe(code_devis, type_client, code_client, mode_reglement, total_devis, date_creation, date_fin_validite)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return data ; + } + + public Integer nbrDevisCltGestion(String CodeDevis, String CodeClient, String Reglement, String DateCreation, String NameClient, String CinClient) + { + String Where = ""; + + if(!clt.isStringNull(CodeDevis)){ + Where += " (D.`iddevis` LIKE \"%"+Adaptateur.addSlashes(CodeDevis)+"%\") AND "; + } + + if(!clt.isStringNull(CodeClient)){ + Where += " ( (D.idcliententreprise = '"+CodeClient+"') OR (D.codeclient = '"+CodeClient+"') OR (D.idcltpassageur = '"+CodeClient+"') ) AND "; + } + + if(!clt.isStringNull(Reglement)){ + Where += " (D.`type_reglement` = \""+Reglement+"\") AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (DATE(D.`date_creation`) = \""+DateCreation+"\") AND "; + } + + String LeftJoin = ""; + if(!clt.isStringNull(NameClient) || !clt.isStringNull(CinClient) ){ + LeftJoin = " LEFT JOIN `client` C ON (C.codeclient = D.codeclient) AND (D.typeclt = 0) " + +" LEFT JOIN `cltentreprise` E ON (E.idcliententreprise = D.idcliententreprise ) AND (D.typeclt = 1) " + +" LEFT JOIN `cltpassageur` P ON (P.idcltpassageur = D.idcltpassageur) AND (D.typeclt = 2) "; + + if(!clt.isStringNull(NameClient)){ + NameClient = Adaptateur.addSlashes(NameClient); + Where += "( ((C.nom LIKE \"%"+NameClient+"%\") OR (C.prenom LIKE \"%"+NameClient+"%\") OR (C.nomcomplet LIKE \"%"+NameClient+"%\")) OR (E.nomentrepise LIKE \"%"+NameClient+"%\") OR (P.nom LIKE \"%"+NameClient+"%\") ) AND"; + } + + if(!clt.isStringNull(CinClient)){ + CinClient = Adaptateur.addSlashes(CinClient); + Where += "( (C.cin = \""+CinClient+"\") OR (E.matricule_fiscale = \""+CinClient+"\") ) AND"; + } + } + + if(!Where.equals("")){ + Where = "WHERE " + Where + " (D.`local_nom` = '"+ParametreSystem.NomLocalPC+"') "; + }else{ + Where = "WHERE (D.`local_nom` = '"+ParametreSystem.NomLocalPC+"') "; + } + + String req=" SELECT COUNT(D.`iddevis`) " + + " FROM `devisclt` D " + + LeftJoin + + 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 ; + } + + + /**********************************Controller Import *******************************/ + public ObservableList getdataImport(String tab,String mot, Integer debut, Integer nbr){ + ObservableList data=FXCollections.observableArrayList(); + + String req="SELECT DC.iddevis, DATE_FORMAT(DC.date_creation, '%d/%m/%Y') as date_creation , DATE_FORMAT(DC.fin_validite, '%d/%m/%Y') as fin_validite , DC.type_reglement, DC.codeclient, DC.typeclt, DC.idcliententreprise, DC.idcltpassageur, DC.net_a_payer FROM devisclt DC WHERE ("+tab+" LIKE \"%"+mot+"%\") AND (Date(DC.fin_validite) > now()) AND (DC.iddevis NOT IN (SELECT DISTINCT(iddevis) FROM commandeclt WHERE (iddevis IS NOT NULL) AND (local_nom = '"+ParametreSystem.NomLocalPC+"'))) AND (DC.local_nom = '"+ParametreSystem.NomLocalPC+"') ORDER BY DC.date_creation DESC LIMIT "+debut+" , "+nbr+" ;"; + + if(tab.equals("DC.CodeClient")){ + req="SELECT DC.iddevis, DATE_FORMAT(DC.date_creation, '%d/%m/%Y') as date_creation , DATE_FORMAT(DC.fin_validite, '%d/%m/%Y') as fin_validite , DC.type_reglement, DC.codeclient, DC.typeclt, DC.idcliententreprise, DC.idcltpassageur, DC.net_a_payer FROM devisclt DC WHERE (Date(DC.fin_validite) > now()) AND (DC.iddevis NOT IN (SELECT DISTINCT(iddevis) FROM commandeclt WHERE (iddevis IS NOT NULL) AND (local_nom = '"+ParametreSystem.NomLocalPC+"'))) AND (DC.idcliententreprise LIKE '%"+mot+"%' OR DC.codeclient LIKE '%"+mot+"%' OR DC.idcltpassageur LIKE '%"+mot+"%') AND (DC.local_nom = '"+ParametreSystem.NomLocalPC+"') ORDER BY DC.date_creation 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() ) { + + String code_devis = resultat.getString("iddevis"); + + String type_client = ""; + String code_client = ""; + if(resultat.getString("typeclt").equals("0")){ + type_client ="Exist Client"; + code_client = resultat.getString("codeclient"); + }else if(resultat.getString("typeclt").equals("1")){ + type_client ="Entreprise"; + code_client = resultat.getString("idcliententreprise"); + }else if(resultat.getString("typeclt").equals("2")){ + type_client ="Passager"; + code_client = resultat.getString("idcltpassageur"); + } + + String total_devis =resultat.getString("net_a_payer"); + + String mode_reglement = ""; //Mode Paiement + if(resultat.getString("type_reglement").equals("0")){ + mode_reglement = "Comptant"; + }else if(resultat.getString("type_reglement").equals("1")){ + mode_reglement = "Facilité"; + } + + String date_creation =resultat.getString("date_creation"); + String date_fin_validite =resultat.getString("fin_validite"); + + data.add(new DevisCltListe(code_devis, type_client, code_client, mode_reglement, total_devis, date_creation, date_fin_validite)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return data ; + } + + public String nbrDevisCltImport(String tab, String mot){ + + String req = "SELECT count(DC.iddevis) FROM devisclt DC, commandeclt CC WHERE ("+tab+" LIKE \"%"+mot+"%\") AND (Date(DC.fin_validite) > now()) AND (CC.iddevis != DC.iddevis) AND (DC.local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + + if(tab.equals("DC.CodeClient")){ + req = "SELECT count(DC.iddevis) FROM devisclt DC, commandeclt CC WHERE (Date(DC.fin_validite) > now()) AND (CC.iddevis != DC.iddevis) AND (DC.idcliententreprise LIKE '%"+mot+"%' OR DC.codeclient LIKE '%"+mot+"%' OR DC.idcltpassageur LIKE '%"+mot+"%') AND (DC.local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + } + + 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(req+" \n Erreur SQL ! \n"+ex.getMessage()); + } + } + return Integer.toString(sommme) ; + } +} diff --git a/src/main/java/Models/FactureClt/FactureClt.java b/src/main/java/Models/FactureClt/FactureClt.java new file mode 100644 index 0000000..c6bd984 --- /dev/null +++ b/src/main/java/Models/FactureClt/FactureClt.java @@ -0,0 +1,423 @@ +/* + * 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.FactureClt; + +import Models.Produit.ListeProduit; +import Controllers.Traitement.Adaptateur; +import Models.Caisse.CarteBancaireClt; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.ChequeClt.ChequeClt; +import Models.TraiteClt.TraiteClt; +import java.util.ArrayList; +import javafx.collections.ObservableList; +/** + * + * @author PC-Maher + */ +public class FactureClt { + + public String CodeFactureClt ; + public Integer TypeClient ; //0 Personne 1 Entreprise 2 Passager + public Client CltPersonne ; + public ClientEntreprise CltEntreprise ; + public ClientPassager CltPassager ; + public String DateFacture; + public String ModePaiement; //0 :espace 1:cheque 2 :carte bancaire + public String TypeRegement; //0 Comptent 1 Facilite + public String NetAPayer ; + public String TotalTVA ; + public String TotalHorsTaxNet; + public String Remise; + public String timbre; + public String Devise ; + public String idCommandeClt ; + public String IdBonLivraisonClt; + public Integer CodeUser; //code profile de utilisateur du programme + public ObservableList listeproduit ; + + + //------------------------------ + + //TypeRegement (0) ==> Facture payer en Comptent + //ModePaiement 1:cheque + public ChequeClt Cheque; + + //TypeRegement (0) ==> Facture payer en Comptent + //ModePaiement 2 :carte bancaire + CarteBancaireClt CarteBancaire; + + + //---------------------------------------- + + //TypeRegement (1) ==> Facture payer par facilite + private String Avance ; + private String TotalMontantTraite ; + private String NbrTraite ; + private String MontantInteret ; + private String TauxInteret ; + private String TypeFacilite ; //0 Traite | 1 Cheque true Traite | false Cheque + private ArrayList listeTraites; + private ArrayList listeCheques; + + public Integer getTypeClient() { + return TypeClient; + } + + public void setTypeClient(Integer TypeClient) { + this.TypeClient = TypeClient; + } + + public String getTypeClientString() { + String Client = null ; + + if(TypeClient == 0){ + Client= "Ancien client"; + } + if(TypeClient == 1){ + Client= "Entreprise"; + } + if(TypeClient == 2){ + Client= "Passager"; + } + return Client ; + } + + public String getCodeFactureClt() { + return CodeFactureClt; + } + + public void setCodeFactureClt(String CodeFactureClt) { + this.CodeFactureClt = CodeFactureClt; + } + + public Client getCltPersonne() { + return CltPersonne; + } + + public void setCltPersonne(Client CltPersonne) { + this.CltPersonne = CltPersonne; + } + + public ClientEntreprise getCltEntreprise() { + return CltEntreprise; + } + + public void setCltEntreprise(ClientEntreprise CltEntreprise) { + this.CltEntreprise = CltEntreprise; + } + + public ClientPassager getCltPassager() { + return CltPassager; + } + + public void setCltPassager(ClientPassager CltPassager) { + this.CltPassager = CltPassager; + } + + public String getDateFacture() { + return DateFacture; + } + + public void setDateFacture(String DateFacture) { + this.DateFacture = DateFacture; + } + + public String getRemise() { + return Remise; + } + + public void setRemise(String Remise) { + this.Remise = Remise; + } + + + + + public String getTimbre() { + return timbre; + } + + public void setTimbre(String timbre) { + this.timbre = timbre; + } + + + + public String getTypeRegement() { + return TypeRegement; + } + + public void setTypeRegement(String TypeRegement) { + this.TypeRegement = TypeRegement; + } + + public String getTypeRegementString() { + String mode =""; + switch (this.TypeRegement) { + case "0": + mode= "Comptant"; + break; + case "1": + mode = "Facilité"; + break; + } + return mode ; + } + + public int getTypeRegementInteger(){ + int mode = 0; + switch (this.TypeRegement) { + case "Comptant": + mode= 0; + break; + case "Facilité": + mode = 1; + break; + case "0": + mode = 0; + break; + case "1": + mode = 1; + break; + + } + return mode ; + } + + + public String getNetAPayer() { + return NetAPayer; + } + + public void setNetAPayer(String NetAPayer) { + this.NetAPayer = NetAPayer; + } + + public String getTotalTVA() { + return TotalTVA; + } + + public void setTotalTVA(String TotalTVA) { + this.TotalTVA = TotalTVA; + } + + public String getTotalHorsTaxNet() { + return TotalHorsTaxNet; + } + + public void setTotalHorsTaxNet(String TotalHorsTaxNet) { + this.TotalHorsTaxNet = TotalHorsTaxNet; + } + + public String getModePaiement() { + return ModePaiement; + } + + public void setModePaiement(String ModePaiement) { + this.ModePaiement = ModePaiement; + } + + + + public String getDevise() { + return Devise; + } + + public void setDevise(String Devise) { + this.Devise = Devise; + } + + public String getIdCommandeClt() { + return idCommandeClt; + } + + public void setIdCommandeClt(String idCommandeClt) { + this.idCommandeClt = idCommandeClt; + } + + + + public Integer getCodeUser() { + return CodeUser; + } + + public void setCodeUser(Integer CodeUser) { + this.CodeUser = CodeUser; + } + + public ObservableList getListeproduit() { + return listeproduit; + } + + public void setListeproduit(ObservableList listeproduit) { + this.listeproduit = listeproduit; + } + + public ChequeClt getCheque() { + return Cheque; + } + + public void setCheque(ChequeClt Cheque) { + this.Cheque = Cheque; + } + + public CarteBancaireClt getCarteBancaire() { + return CarteBancaire; + } + + public void setCarteBancaire(CarteBancaireClt CarteBancaire) { + this.CarteBancaire = CarteBancaire; + } + + + + public String getAvance() { + return Avance; + } + + public void setAvance(String Avance) { + this.Avance = Avance; + } + + public float getAvanceNumber() { + return Adaptateur.ArrondStringToFloat(Avance); + } + + public void setAvanceNumber(float Avance) { + this.Avance = Adaptateur.ArrondFloatToString(Avance); + } + + + + public String getTotalMontantTraite() { + return TotalMontantTraite; + } + + public void setTotalMontantTraite(String TotalMontantTraite) { + this.TotalMontantTraite = TotalMontantTraite; + } + + public float getTotalMontantTraiteNumber() { + return Adaptateur.ArrondStringToFloat(TotalMontantTraite); + } + + public void setTotalMontantTraiteNumber(float TotalMontantTraite) { + this.TotalMontantTraite = Adaptateur.ArrondFloatToString(TotalMontantTraite); + } + + public String getNbrTraite() { + return NbrTraite; + } + + public void setNbrTraite(String NbrTraite) { + this.NbrTraite = NbrTraite; + } + + public Integer getNbrTraiteNumber() { + return Integer.parseInt(this.NbrTraite); + } + + public void setNbrTraiteNumber(Integer NbrTraite) { + this.NbrTraite = String.valueOf(NbrTraite); + } + + public String getMontantInteret() { + return MontantInteret; + } + + public void setMontantInteret(String MontantInteret) { + this.MontantInteret = MontantInteret; + } + + public float getMontantInteretNumber() { + return Adaptateur.ArrondStringToFloat(MontantInteret); + } + + public void setMontantInteretNumber(float MontantInteret) { + this.MontantInteret = Adaptateur.ArrondFloatToString(MontantInteret); + } + + public String getTauxInteret() { + return TauxInteret; + } + + public void setTauxInteret(String TauxInteret) { + this.TauxInteret = TauxInteret; + } + + public float getTauxInteretNumber() { + return Adaptateur.ArrondStringToFloat(TauxInteret); + } + + public void setTauxInteretNumber(float TauxInteret) { + this.TauxInteret = Adaptateur.ArrondFloatToString(TauxInteret); + } + + public String getTypeFacilite() { + return TypeFacilite; + } + + public void setTypeFacilite(String Type_Facilite) { + this.TypeFacilite = Type_Facilite; + } + + public Boolean getTypeFaciliteBoolean() { + if(TypeFacilite.equals("0")){ + return true; + }else{ + return false; + } + } + + public void setTypeFaciliteBoolean(Boolean Type_Facilite) { + if(Type_Facilite){ + this.TypeFacilite = "0"; + }else{ + this.TypeFacilite = "1"; + } + } + + + public ArrayList getListeTraites() { + return listeTraites; + } + + public void setListeTraites(ArrayList listeTraites) { + this.listeTraites = listeTraites; + } + + public ArrayList getListeCheques() { + return listeCheques; + } + + public void setListeCheques(ArrayList listeCheques) { + this.listeCheques = listeCheques; + } + + public String getIdBonLivraisonClt() { + return IdBonLivraisonClt; + } + + public void setIdBonLivraisonClt(String IdBonLivraisonClt) { + this.IdBonLivraisonClt = IdBonLivraisonClt; + } + + @Override + public String toString() { + return "FactureClt{" + "CodeFactureClt=" + CodeFactureClt + ", TypeClient=" + TypeClient + ", CltPersonne=" + CltPersonne + ", CltEntreprise=" + CltEntreprise + ", CltPassager=" + CltPassager + ", DateFacture=" + DateFacture + ", ModePaiement=" + ModePaiement + ", TypeRegement=" + TypeRegement + ", NetAPayer=" + NetAPayer + ", TotalTVA=" + TotalTVA + ", TotalHorsTaxNet=" + TotalHorsTaxNet + ", Remise=" + Remise + ", timbre=" + timbre + ", Devise=" + Devise + ", idCommandeClt=" + idCommandeClt + ", IdBonLivraisonClt=" + IdBonLivraisonClt + ", CodeUser=" + CodeUser + ", listeproduit=" + listeproduit + ", Avance=" + Avance + ", TotalMontantTraite=" + TotalMontantTraite + ", NbrTraite=" + NbrTraite + ", MontantInteret=" + MontantInteret + ", TauxInteret=" + TauxInteret + ", TypeFacilite=" + TypeFacilite + ", listeTraites=" + listeTraites + ", listeCheques=" + listeCheques + '}'; + } + + + + + + + + + +} diff --git a/src/main/java/Models/FactureClt/FactureCltChequeListe.java b/src/main/java/Models/FactureClt/FactureCltChequeListe.java new file mode 100644 index 0000000..15f6644 --- /dev/null +++ b/src/main/java/Models/FactureClt/FactureCltChequeListe.java @@ -0,0 +1,43 @@ +/* + * 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.FactureClt; + +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author PC-Maher + */ +public class FactureCltChequeListe { + + private final SimpleStringProperty DateCheques; + private final SimpleStringProperty NumeroCheques; + private final SimpleStringProperty BanqueCheques; + private final SimpleStringProperty MontantCheques; + + public FactureCltChequeListe(String DateCheque, String NumeroCheque, String BanqueCheque, String MontantCheque) { + this.DateCheques = new SimpleStringProperty(DateCheque); + this.NumeroCheques = new SimpleStringProperty(NumeroCheque); + this.BanqueCheques = new SimpleStringProperty(BanqueCheque); + this.MontantCheques = new SimpleStringProperty(MontantCheque); + } + + public String getDateCheques() { + return DateCheques.get(); + } + + public String getNumeroCheques() { + return NumeroCheques.get(); + } + + public String getBanqueCheques() { + return BanqueCheques.get(); + } + + public String getMontantCheques() { + return MontantCheques.get(); + } +} diff --git a/src/main/java/Models/FactureClt/FactureCltDB.java b/src/main/java/Models/FactureClt/FactureCltDB.java new file mode 100644 index 0000000..00d052a --- /dev/null +++ b/src/main/java/Models/FactureClt/FactureCltDB.java @@ -0,0 +1,436 @@ +package Models.FactureClt; + +import Controllers.Traitement.Adaptateur; +import Models.Produit.ListeProduit; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Caisse.CaisseClt; +import Models.Caisse.CaisseDB; +import Models.Caisse.CarteBancaireClt; +import Models.Caisse.CarteBancaireCltDB; +import Models.User.User; +import Models.ChequeClt.ChequeClt; +import Models.ChequeClt.ChequeCltDB; +import Models.Client.ClientDB; +import Models.Client.ClientEntrepriseDB; +import Models.Client.ClientPassagerDB; +import Models.CommandeClt.CommandeCltDB; +import Models.TraiteClt.TraiteClt; +import Models.TraiteClt.TraiteCltDB; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author Maher Ben Tili + */ +public class FactureCltDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + public String AddFactureClt(FactureClt factureclt){ + + CaisseClt Caisse = new CaisseClt(); + + String totalhorstaxnet =factureclt.getTotalHorsTaxNet().replace(",", "."); + String totaltva = factureclt.getTotalTVA().replace(",", "."); + String netapayer = factureclt.getNetAPayer().replace(",", "."); + + String TotalRemise = "NULL"; + if(factureclt.getRemise() != null){ + TotalRemise = factureclt.getRemise().replace(",", "."); + } + + String Devise = ParametreSystem.CurrencySign; + String IdCommande = "NULL"; + String IdBonLivraisonClt = "NULL"; + String TypeFacilite = factureclt.getTypeFacilite(); + String Avance = "NULL"; + String TotalMontantTraites = "NULL"; + String NbrTraite = "NULL"; + String MontantInteret= "NULL"; + String TauxInteret= "NULL"; + + + //TypeRegement (0) ==> Facture payer en Comptent | (1) Facture payer par facilité + Integer TypeReglement = factureclt.getTypeRegementInteger(); + + + //mode paiement Comptent: 0 :espace 1:cheque 2 :carte bancaire + String ModePaiement = "0"; + if(factureclt.getModePaiement() != null){ + ModePaiement = factureclt.getModePaiement(); + } + + + if(TypeReglement == 1){ + Caisse.setTypeMouvement("1"); + TypeFacilite = factureclt.getTypeFacilite(); + Avance = factureclt.getAvance().replace(",", "."); + Caisse.setMontant(Avance); + TotalMontantTraites = factureclt.getTotalMontantTraite().replace(",", "."); + NbrTraite = factureclt.getNbrTraite(); + MontantInteret= factureclt.getMontantInteret().replace(",", "."); + TauxInteret= factureclt.getTauxInteret().replace(",", "."); + } + + + if( factureclt.getIdBonLivraisonClt()!= null && !factureclt.getIdBonLivraisonClt().isEmpty() ){ + IdBonLivraisonClt = factureclt.getIdBonLivraisonClt(); + } + + if(!factureclt.getIdCommandeClt().isEmpty()){ + IdCommande = factureclt.getIdCommandeClt(); + } + + String sql = ""; + if(factureclt.getTypeClient()==0){ + String codeclientPersonne = factureclt.CltPersonne.getCodeclient().toString(); + sql = "INSERT INTO factureclt (`type_reglement`, `mode_paiement`, `date_facture`, `typeclt`, `idcltentreprise`, `idcltexiste`, `idcltpassageur`, `devise`, `total_h_t_net`, `total_tva`, `remise`, `timbre_loi`, `net_a_payer`, `type_facilite`, `avance`, `total_montant_traites`, `nbr_traite`, `montant_interet`, `taux_interet`, `idcommande_commandeclt`, id_bon_livraisonclt, `profile_idprofile`, `local_nom`) VALUES ('"+TypeReglement+"', '"+ModePaiement+"', CURTIME(), '"+factureclt.getTypeClient()+"', NULL, '"+codeclientPersonne+"', NULL, '"+Devise+"', "+totalhorstaxnet+", "+totaltva+", "+TotalRemise+", '"+ParametreSystem.Timbre+"', '"+netapayer+"', "+TypeFacilite+", "+Avance+", "+TotalMontantTraites+", "+NbrTraite+", "+MontantInteret+", "+TauxInteret+", "+IdCommande+", "+IdBonLivraisonClt+", "+User.idprofile+", '"+ParametreSystem.NomLocalPC+"');"; + } + if(factureclt.getTypeClient()==1){ + String codeclientEntreprise = factureclt.CltEntreprise.getCode().toString(); + sql = "INSERT INTO factureclt (`type_reglement`, `mode_paiement`, `date_facture`, `typeclt`, `idcltentreprise`, `idcltexiste`, `idcltpassageur`, `devise`, `total_h_t_net`, `total_tva`, `remise`, `timbre_loi`, `net_a_payer`, `type_facilite`, `avance`, `total_montant_traites`, `nbr_traite`, `montant_interet`, `taux_interet`, `idcommande_commandeclt`, id_bon_livraisonclt, `profile_idprofile`, `local_nom`) VALUES ('"+TypeReglement+"', '"+ModePaiement+"', CURTIME(), '"+factureclt.getTypeClient()+"', '"+codeclientEntreprise+"', NULL, NULL, '"+Devise+"', "+totalhorstaxnet+", "+totaltva+", "+TotalRemise+", '"+ParametreSystem.Timbre+"', '"+netapayer+"', "+TypeFacilite+", "+Avance+", "+TotalMontantTraites+", "+NbrTraite+", "+MontantInteret+", "+TauxInteret+", "+IdCommande+", "+IdBonLivraisonClt+", "+User.idprofile+", '"+ParametreSystem.NomLocalPC+"');"; + } + if(factureclt.getTypeClient()==2){ + //insertion de passager + String codepassager = factureclt.CltPassager.getCodeclient().toString(); + if(!codepassager.isEmpty()){ + sql = "INSERT INTO factureclt (`type_reglement`, `mode_paiement`, `date_facture`, `typeclt`, `idcltentreprise`, `idcltexiste`, `idcltpassageur`, `devise`, `total_h_t_net`, `total_tva`, `remise`, `timbre_loi`, `net_a_payer`, `type_facilite`, `avance`, `total_montant_traites`, `nbr_traite`, `montant_interet`, `taux_interet`, `idcommande_commandeclt`, id_bon_livraisonclt, `profile_idprofile`, `local_nom`) VALUES ('"+TypeReglement+"', '"+ModePaiement+"', CURTIME(), '"+factureclt.getTypeClient()+"', NULL, NULL, "+codepassager+", '"+Devise+"', '"+totalhorstaxnet+"', '"+totaltva+"', '"+TotalRemise+"', '"+ParametreSystem.Timbre+"', "+netapayer+", "+TypeFacilite+", "+Avance+", "+TotalMontantTraites+", "+NbrTraite+", "+MontantInteret+", "+TauxInteret+", '"+IdCommande+"', "+IdBonLivraisonClt+", "+User.idprofile+", '"+ParametreSystem.NomLocalPC+"');"; + } + } + + String codeFactureclt = cnx.InsertGetLastId(sql); + factureclt.setCodeFactureClt(codeFactureclt); + + + //TypeRegement (0) ==> Facture payer en Comptent + if(factureclt.getTypeRegementInteger() == 0) + { + Caisse.setTypeMouvement("0"); + Caisse.setMontant(netapayer); + + //ModePaiement 1:cheque + if(factureclt.getModePaiement() == "1") + { + ChequeClt ChequeClt = factureclt.getCheque(); + ChequeClt.setCodeFactureClt(codeFactureclt); + new ChequeCltDB().AddChequeClt(ChequeClt); + } + //ModePaiement 2 :carte bancaire + else if(factureclt.getModePaiement() == "2") + { + CarteBancaireClt CarteBancaire = factureclt.getCarteBancaire(); + CarteBancaire.setIdFactureClt(codeFactureclt); + new CarteBancaireCltDB().SetCarteBancaire(CarteBancaire); + } + } + + if(!factureclt.getIdCommandeClt().isEmpty()){ + new CommandeCltDB().UpdateCommandeCltSetIdFacture(factureclt.getIdCommandeClt(), codeFactureclt); + } + + Caisse.setCodeFactureClt(codeFactureclt); + + + String req ; String PrixHT ; String Remise ; String TotalHT ; String TVA ; String TotalTTC ; + for(ListeProduit listeprod : factureclt.getListeproduit()){ + PrixHT = listeprod.getPrixHT().replace(",","."); + Remise= listeprod.getRemise().replace("%","").replace(",","."); + TotalHT= listeprod.getTotalHT().replace(",","."); + TVA=listeprod.getTVA().replace("%","").replace(",","."); + TotalTTC= listeprod.getTotalTTC().replace(",","."); + + req = "INSERT INTO `list_prod_factclt` (`idfactureclt_factureclt`, `produit_reference`, `designation_produit`, `quantite`, `p_u_h_t`, `remise`, `p_u_h_t_net`, `tva`, `montant`, `local_nom`) VALUES ('"+codeFactureclt+"', '"+listeprod.getReference()+"', \""+listeprod.getDesignation()+"\", "+listeprod.getQuantite()+", "+PrixHT+", '"+Remise+"', '"+TotalHT+"', '"+TVA+"', '"+TotalTTC+"', '"+ParametreSystem.NomLocalPC+"');"; + + cnx.insertion(req); + } + + + ArrayList ListTraites = factureclt.getListeTraites(); + ArrayList ListCheque = factureclt.getListeCheques(); + + if(ListTraites!=null){ + TraiteCltDB TraiteDB = new TraiteCltDB(); + TraiteDB.AddListeTraiteClt(ListTraites, codeFactureclt); + }else if(ListCheque!=null){ + ChequeCltDB ChequeDB = new ChequeCltDB(); + ChequeDB.AddListeChequeClt(ListCheque, codeFactureclt); + } + + + + + Caisse.setLocalNom(ParametreSystem.NomLocalPC); + Caisse.setIdProfile(User.idprofile); + + CaisseDB CaisseDB = new CaisseDB(); + CaisseDB.AddCaisse(Caisse); + + return codeFactureclt ; + } + + public FactureClt getFactureClt(String codefacture){ + + FactureClt factureClt = new FactureClt(); + String req = "SELECT *, DATE_FORMAT(date_facture, '%d/%m/%Y') as datefacture FROM factureclt WHERE (idfactureclt = "+codefacture+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + + if(cnx.ouverture()){ + try{ + 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){ + factureClt.setCodeFactureClt(resultat.getString("idfactureclt")); + factureClt.setTypeRegement(resultat.getString("type_reglement")); + factureClt.setIdCommandeClt(resultat.getString("idcommande_commandeclt")); + factureClt.setIdBonLivraisonClt(resultat.getString("id_bon_livraisonclt")); + + //0 :espace | 1:cheque | 2 :carte bancaire | 3: virement bancaire + factureClt.setModePaiement(resultat.getString("mode_paiement")); + + factureClt.setDateFacture(resultat.getString("date_facture")); + factureClt.setNetAPayer(resultat.getString("net_a_payer")); + factureClt.setTotalHorsTaxNet(resultat.getString("total_h_t_net")); + factureClt.setTotalTVA(resultat.getString("total_tva")); + factureClt.setRemise(resultat.getString("remise")); + factureClt.setTimbre(resultat.getString("timbre_loi")); + factureClt.setCodeUser(resultat.getInt("profile_idprofile")); + factureClt.setTypeClient(resultat.getInt("typeclt")); + factureClt.setTypeFacilite(resultat.getString("type_facilite")); + + if(factureClt.getTypeClient()==0) + { + String Codeclient = resultat.getString("idcltexiste"); + factureClt.setCltPersonne(new ClientDB().getClient(Codeclient)); + } + if(factureClt.getTypeClient()==1) + { + String Codeclient = resultat.getString("idcltentreprise"); + factureClt.setCltEntreprise(new ClientEntrepriseDB().GetClientEtr(Codeclient)); + } + if(factureClt.getTypeClient()==2) + { + String Codeclient = resultat.getString("idcltpassageur"); + factureClt.setCltPassager(new ClientPassagerDB().getClient(Codeclient)); + } + + cnx.ouverture(); + String reqprod = "SELECT * FROM list_prod_factclt WHERE (idfactureclt_factureclt = "+codefacture+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ResultSet resulist = cnx.excutionquery(reqprod); + //on repace le curseur avant la première ligne + resulist.beforeFirst(); + ObservableList dataProdDev=FXCollections.observableArrayList(); + while ( resulist.next() ) { + String reference = resulist.getString("produit_reference"); + String designation = resulist.getString("designation_produit"); + String quantite=resulist.getString("quantite"); + String PrixHT =resulist.getString("p_u_h_t"); + String Remise =resulist.getString("remise"); + String TotalHT =resulist.getString("p_u_h_t_net"); + String TVA =resulist.getString("tva"); + String TotalTTC =resulist.getString("montant"); + dataProdDev.add(new ListeProduit(reference, designation, quantite, PrixHT, Remise, TotalHT, TVA, TotalTTC)); + } + factureClt.setListeproduit(dataProdDev); + + //type reglement: 0 comptant 1 facilité + if(resultat.getString("type_reglement").equals("1") ){ + factureClt.setTotalMontantTraite(resultat.getString("total_montant_traites")); + //List Traite factureClt True Traites + if(factureClt.getTypeFaciliteBoolean()){ + cnx.ouverture(); + String ReqListeTraite = "SELECT *, DATE_FORMAT(date_creation, '%d/%m/%Y') as DateCreation ,DATE_FORMAT(date_traite, '%d/%m/%Y') as DateTraite ,DATE_FORMAT(date_paiement, '%d/%m/%Y') as DatePaiement FROM traite_clt WHERE (id_factureclt = "+codefacture+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ResultSet ResultListeTraite = cnx.excutionquery(ReqListeTraite); + ResultListeTraite.beforeFirst(); + ArrayList ListTraites = new ArrayList(); + while ( ResultListeTraite.next() ) { + TraiteClt Traite = new TraiteClt(); + Traite.setCodeTraiteClt(ResultListeTraite.getString("id_traite")); + Traite.setDateCreationTraiteClt(ResultListeTraite.getString("DateCreation")); + Traite.setDateTraiteClt(ResultListeTraite.getString("DateTraite")); + Traite.setId_reglement(ResultListeTraite.getString("id_factureclt")); + Traite.setMontantTraiteClt(ResultListeTraite.getString("montant_traite")); + Traite.setDatePaiementTraiteClt(ResultListeTraite.getString("DatePaiement")); + ListTraites.add(Traite); + } + factureClt.setListeTraites(ListTraites); + }else if(factureClt.getTypeFaciliteBoolean() == false){ + String ReqListeChequeClt = "SELECT id_chequeclt, numero, banque, montant, nom_complet, DATE_FORMAT(date_paiement, '%d/%m/%Y') AS DatePaiement, DATE_FORMAT(date_creation, '%d/%m/%Y') AS DateCreation , id_factureclt FROM cheque_clt WHERE (id_factureclt = "+codefacture+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ResultSet ResultListeChequeClt = cnx.excutionquery(ReqListeChequeClt); + ResultListeChequeClt.beforeFirst(); + ArrayList ListChequeClt = new ArrayList(); + while ( ResultListeChequeClt.next() ) { + ChequeClt Cheque = new ChequeClt(); + Cheque.setCodeChequeClt(ResultListeChequeClt.getString("id_chequeclt")); + Cheque.setNumeroChequeClt(ResultListeChequeClt.getString("numero")); + Cheque.setBanqueChequeClt(ResultListeChequeClt.getString("banque")); + Cheque.setMontantChequeClt(ResultListeChequeClt.getString("montant")); + Cheque.setNomCompletChequeClt(ResultListeChequeClt.getString("nom_complet")); + Cheque.setDatePaiement(ResultListeChequeClt.getString("DatePaiement")); + Cheque.setDateCreation(ResultListeChequeClt.getString("DateCreation")); + ListChequeClt.add(Cheque); + } + factureClt.setListeCheques(ListChequeClt); + } + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return factureClt ; + } + + /********************************** Initial *******************************/ + public ObservableList SearchFactureCltGestion(Integer debut, Integer nbr, String CodeFacture, String CodeClient, String Reglement, String CodeCommande, String DateCreation) + { + ObservableList data = FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(CodeFacture)){ + Where += " (idfactureclt LIKE \"%"+Adaptateur.addSlashes(CodeFacture)+"%\") AND "; + } + + if(!clt.isStringNull(CodeClient)){ + Where += " ( idcltentreprise LIKE '%"+CodeClient+"%' OR idcltexiste LIKE '%"+CodeClient+"%' OR idcltpassageur LIKE '%"+CodeClient+"%' ) AND "; + } + + if(!clt.isStringNull(Reglement)){ + Where += " (type_reglement = \""+Reglement+"\") AND "; + } + + if(!clt.isStringNull(CodeCommande)){ + Where += " (idcommande_commandeclt LIKE \"%"+Adaptateur.addSlashes(CodeCommande)+"%\") AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (DATE(date_facture) = \""+DateCreation+"\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req="SELECT idfactureclt, typeclt, idcltentreprise, idcltexiste, idcltpassageur, net_a_payer, type_reglement, idcommande_commandeclt, DATE_FORMAT(date_facture, '%d/%m/%Y') as date_facture "+ + "FROM factureclt " + + Where + + " ORDER BY date_facture 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() ) { + + String code_facture = resultat.getString("idfactureclt"); + + String type_client = ""; + String code_client = ""; + if(resultat.getString("typeclt").equals("0")){ + type_client ="Exist Client"; + code_client = resultat.getString("idcltexiste"); + }else if(resultat.getString("typeclt").equals("1")){ + type_client ="Entreprise"; + code_client = resultat.getString("idcltentreprise"); + }else if(resultat.getString("typeclt").equals("2")){ + type_client ="Passager"; + code_client = resultat.getString("idcltpassageur"); + } + + String total_facture = Adaptateur.FloatToStringEspace(resultat.getFloat("net_a_payer")); + + String type_reglement = ""; //reglement + if(resultat.getString("type_reglement").equals("0")){ + type_reglement = "Comptant"; + }else if(resultat.getString("type_reglement").equals("1")){ + type_reglement = "Facilité"; + } + + String code_commande =resultat.getString("idcommande_commandeclt"); + + String date_creation =resultat.getString("date_facture"); + + data.add(new FactureCltGestionList(code_facture, type_client, code_client, type_reglement, total_facture, code_commande, date_creation)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + + return data ; + } + + + public Integer nbrFactureCltGestion(String CodeFacture, String CodeClient, String Reglement, String CodeCommande, String DateCreation) + { + String Where = ""; + + if(!clt.isStringNull(CodeFacture)){ + Where += " (idfactureclt LIKE \"%"+Adaptateur.addSlashes(CodeFacture)+"%\") AND "; + } + + if(!clt.isStringNull(CodeClient)){ + Where += " ( idcltentreprise LIKE '%"+CodeClient+"%' OR idcltexiste LIKE '%"+CodeClient+"%' OR idcltpassageur LIKE '%"+CodeClient+"%' ) AND "; + } + + if(!clt.isStringNull(Reglement)){ + Where += " (type_reglement = \""+Reglement+"\") AND "; + } + + if(!clt.isStringNull(CodeCommande)){ + Where += " (idcommande_commandeclt LIKE \"%"+Adaptateur.addSlashes(CodeCommande)+"%\") AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (DATE(date_facture) = \""+DateCreation+"\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req=" SELECT COUNT(idfactureclt) "+ + " FROM `factureclt` "+ + 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 ; + } + +} diff --git a/src/main/java/Models/FactureClt/FactureCltGestion.java b/src/main/java/Models/FactureClt/FactureCltGestion.java new file mode 100644 index 0000000..bdbbafa --- /dev/null +++ b/src/main/java/Models/FactureClt/FactureCltGestion.java @@ -0,0 +1,88 @@ +/* + * 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.FactureClt; + +/** + * + * @author PC-Maher + */ +public class FactureCltGestion { + + private String CodeFacture; + private String CodeClient; + private String Mode; //===> Compant/Facilité + private String TotalFacture; + private String CodeCommande; + private String CodeDevis; + private String Etat; //===> Encour/Payer/Non Payer + private String DateCreation; + + public String getCodeFacture() { + return CodeFacture; + } + + public void setCodeFacture(String CodeFacture) { + this.CodeFacture = CodeFacture; + } + + public String getCodeClient() { + return CodeClient; + } + + public void setCodeClient(String CodeClient) { + this.CodeClient = CodeClient; + } + + public String getMode() { + return Mode; + } + + public void setMode(String Mode) { + this.Mode = Mode; + } + + public String getTotalFacture() { + return TotalFacture; + } + + public void setTotalFacture(String TotalFacture) { + this.TotalFacture = TotalFacture; + } + + public String getCodeCommande() { + return CodeCommande; + } + + public void setCodeCommande(String CodeCommande) { + this.CodeCommande = CodeCommande; + } + + public String getCodeDevis() { + return CodeDevis; + } + + public void setCodeDevis(String CodeDevis) { + this.CodeDevis = CodeDevis; + } + + public String getEtat() { + return Etat; + } + + public void setEtat(String Etat) { + this.Etat = Etat; + } + + public String getDateCreation() { + return DateCreation; + } + + public void setDateCreation(String DateCreation) { + this.DateCreation = DateCreation; + } + + +} diff --git a/src/main/java/Models/FactureClt/FactureCltGestionList.java b/src/main/java/Models/FactureClt/FactureCltGestionList.java new file mode 100644 index 0000000..d347dc6 --- /dev/null +++ b/src/main/java/Models/FactureClt/FactureCltGestionList.java @@ -0,0 +1,65 @@ +/* + * 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.FactureClt; + +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author PC-Maher + */ +public class FactureCltGestionList { + + private final SimpleStringProperty CodeFacture; + private final SimpleStringProperty TypeClient; + private final SimpleStringProperty CodeClient; + private final SimpleStringProperty Mode; + private final SimpleStringProperty Total; + private final SimpleStringProperty CodeCommande; + private final SimpleStringProperty DateCreation; + + + + public FactureCltGestionList(String CodeFacture, String TypeClient, String CodeClient, String Mode,String Total, String CodeCommande, String Date) { + this.CodeFacture = new SimpleStringProperty(CodeFacture); + this.TypeClient = new SimpleStringProperty(TypeClient); + this.CodeClient = new SimpleStringProperty(CodeClient); + this.Mode = new SimpleStringProperty(Mode); + this.Total = new SimpleStringProperty(Total); + this.CodeCommande = new SimpleStringProperty(CodeCommande); + this.DateCreation = new SimpleStringProperty(Date); + } + + + public String getCodeFacture() { + return CodeFacture.get(); + } + + public String getCodeClient() { + return CodeClient.get(); + } + + public String getMode() { + return Mode.get(); + } + + public String getTotal() { + return Total.get(); + } + + public String getCodeCommande() { + return CodeCommande.get(); + } + + public String getTypeClient() { + return TypeClient.get(); + } + + public String getDateCreation() { + return DateCreation.get(); + } + +} \ No newline at end of file diff --git a/src/main/java/Models/FactureClt/FactureCltTraiteListe.java b/src/main/java/Models/FactureClt/FactureCltTraiteListe.java new file mode 100644 index 0000000..80a440f --- /dev/null +++ b/src/main/java/Models/FactureClt/FactureCltTraiteListe.java @@ -0,0 +1,31 @@ +/* + * 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.FactureClt; + +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class FactureCltTraiteListe { + + private final SimpleStringProperty DateTraites; + private final SimpleStringProperty MontantTraites; + + public FactureCltTraiteListe(String DateTraite, String MontantTraite) { + this.DateTraites = new SimpleStringProperty(DateTraite); + this.MontantTraites = new SimpleStringProperty(MontantTraite); + } + + public String getDateTraites() { + return DateTraites.get(); + } + + public String getMontantTraites() { + return MontantTraites.get(); + } +} diff --git a/src/main/java/Models/FactureFrs/FactureFrs.java b/src/main/java/Models/FactureFrs/FactureFrs.java new file mode 100644 index 0000000..e480a37 --- /dev/null +++ b/src/main/java/Models/FactureFrs/FactureFrs.java @@ -0,0 +1,287 @@ +/* + * 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.FactureFrs; + +import Controllers.Traitement.contro; +import Models.BonReceptionFrs.BonReceptionFrs; +import Models.CommandeFrs.CommandeFrs; +import Models.Fournisseur.Fournisseur; +import Models.Produit.ListeProduit; +import Models.Reglement.Reglement; +import Models.User.Profile; +import javafx.collections.ObservableList; + + +/** + * @author Maher + */ +public class FactureFrs { + + public String IdFactureFrs; + public String Numero; + public String HeurCreation; + public String DateCreation; + public String TypeReglement; // 0 comptant | 1 facilité + public String EtatReglement; // 0 payer | 1 cour | 2 non pays + public String Devise; + public Fournisseur Fournisseur; + public String Local; + public Profile Profile; + public String BonReception; // 1 Facture par Bon Réception | null Facture sans Bon Réception + public Reglement Reglement; + + + public String TotalHorsTaxNet; + public String Remise; + public String TotalTVA; + public String Timbre; + public String NetAPayer; + + public float FTotalHorsTaxNet; + public float FRemise; + public float FTotalTVA; + public float FTimbre; + public float FNetAPayer; + + + public CommandeFrs CommandeFrs; + public ObservableList ListProduit ; + public ObservableList ListeBonReception; + + contro Controle = new contro(); + public String getIdFactureFrs() { + return IdFactureFrs; + } + + public void setIdFactureFrs(String IdFactureFrs) { + this.IdFactureFrs = IdFactureFrs; + } + + public String getNumero() { + return Numero; + } + + public void setNumero(String Numero) { + this.Numero = Numero; + } + + public String getHeurCreation() { + return HeurCreation; + } + + public void setHeurCreation(String HeurCreation) { + this.HeurCreation = HeurCreation; + } + + public String getDateCreation() { + return DateCreation; + } + + public void setDateCreation(String DateCreation) { + this.DateCreation = DateCreation; + } + + public String getTypeReglement() { + return TypeReglement; + } + + public Reglement getReglement() { + return Reglement; + } + + public void setReglement(Reglement Reglement) { + this.Reglement = Reglement; + } + + + + // 0 comptant | 1 facilité + public String getTypeReglementString() { + if(Controle.isStringNull(TypeReglement)){ + return null; + }else{ + if(TypeReglement.equals("0")){ + return "Comptant"; + }else{ + return "Facilité"; + } + } + } + + public void setTypeReglement(String TypeReglement) { + this.TypeReglement = TypeReglement; + } + + public String getEtatReglement() { + return EtatReglement; + } + + // 0 payer | 1 cour | null non pays + public String getEtatReglementString() { + String Etat = "Non Pays"; + if(!Controle.isStringNull(TypeReglement)){ + if(TypeReglement.equals("0")){ + return "payer"; + }else if(TypeReglement.equals("1")){ + return "En Cour"; + } + } + return Etat; + } + + public String getBonReception() { + return BonReception; + } + + public void setBonReception(String BonReception) { + this.BonReception = BonReception; + } + + + + public void setEtatReglement(String EtatReglement) { + this.EtatReglement = EtatReglement; + } + + public String getDevise() { + return Devise; + } + + public void setDevise(String Devise) { + this.Devise = Devise; + } + + public String getTotalHorsTaxNet() { + return TotalHorsTaxNet; + } + + public void setTotalHorsTaxNet(String TotalHorsTaxNet) { + this.TotalHorsTaxNet = TotalHorsTaxNet; + } + + public String getRemise() { + return Remise; + } + + public void setRemise(String Remise) { + this.Remise = Remise; + } + + public String getTotalTVA() { + return TotalTVA; + } + + public void setTotalTVA(String TotalTVA) { + this.TotalTVA = TotalTVA; + } + + public String getTimbre() { + return Timbre; + } + + public void setTimbre(String Timbre) { + this.Timbre = Timbre; + } + + public String getNetAPayer() { + return NetAPayer; + } + + public void setNetAPayer(String NetAPayer) { + this.NetAPayer = NetAPayer; + } + + public Fournisseur getFournisseur() { + return Fournisseur; + } + + public void setFournisseur(Fournisseur Fournisseur) { + this.Fournisseur = Fournisseur; + } + + public String getLocal() { + return Local; + } + + public void setLocal(String Local) { + this.Local = Local; + } + + + public CommandeFrs getCommandeFrs() { + return CommandeFrs; + } + + public void setCommandeFrs(CommandeFrs CommandeFrs) { + this.CommandeFrs = CommandeFrs; + } + + public Profile getProfile() { + return Profile; + } + + public void setProfile(Profile Profile) { + this.Profile = Profile; + } + + public ObservableList getListProduit() { + return ListProduit; + } + + public void setListProduit(ObservableList ListProduit) { + this.ListProduit = ListProduit; + } + + public ObservableList getListeBonReception() { + return ListeBonReception; + } + + public void setListeBonReception(ObservableList ListeBonReception) { + this.ListeBonReception = ListeBonReception; + } + + public float getFTotalHorsTaxNet() { + return FTotalHorsTaxNet; + } + + public void setFTotalHorsTaxNet(float FTotalHorsTaxNet) { + this.FTotalHorsTaxNet = FTotalHorsTaxNet; + } + + public float getFRemise() { + return FRemise; + } + + public void setFRemise(float FRemise) { + this.FRemise = FRemise; + } + + public float getFTotalTVA() { + return FTotalTVA; + } + + public void setFTotalTVA(float FTotalTVA) { + this.FTotalTVA = FTotalTVA; + } + + public float getFTimbre() { + return FTimbre; + } + + public void setFTimbre(float FTimbre) { + this.FTimbre = FTimbre; + } + + public float getFNetAPayer() { + return FNetAPayer; + } + + public void setFNetAPayer(float FNetAPayer) { + this.FNetAPayer = FNetAPayer; + } + + +} diff --git a/src/main/java/Models/FactureFrs/FactureFrsDB.java b/src/main/java/Models/FactureFrs/FactureFrsDB.java new file mode 100644 index 0000000..b95d90a --- /dev/null +++ b/src/main/java/Models/FactureFrs/FactureFrsDB.java @@ -0,0 +1,532 @@ +/* + * 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.FactureFrs; + +import Controllers.Traitement.Adaptateur; +import static Controllers.Traitement.Adaptateur.StringToFloat; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.BonReceptionFrs.BonReceptionDB; +import Models.BonReceptionFrs.BonReceptionFrs; +import Models.Fournisseur.Fournisseur; +import Models.Fournisseur.FournisseurDB; +import Models.Produit.ListeProduit; +import Models.Stock.StockDetail; +import Models.Stock.StockDetailDB; +import Models.User.Profile; +import Models.User.ProfileDB; +import Models.User.User; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author Maher + */ +public class FactureFrsDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + public FactureFrs setFactureBRDB(FactureFrs Facture){ + + String Numero = Facture.getNumero(); + String DateCreation = Facture.getDateCreation(); + String HeurCreation = Facture.getHeurCreation(); + String TotalHorsTaxNet = Facture.getTotalHorsTaxNet().replace(",","."); + String TotalRemise = Facture.getRemise().replace(",","."); + String TotalTVA = Facture.getTotalTVA().replace(",","."); + String NetAPayer = Facture.getNetAPayer().replace(",","."); + String Fourisseur = Facture.getFournisseur().getCode(); + String Local = Facture.getLocal(); + + ObservableList ListProduit = Facture.getListProduit(); + + ObservableList ListBonReception = Facture.getListeBonReception(); + + + String CommandeFrs = "NULL"; + if(Facture.getCommandeFrs() != null){ + CommandeFrs = "'"+Facture.getCommandeFrs().getCodeCommandeFrs()+"'"; + } + + //0 comptant | 1 facilité + String TypeReglement = "NULL"; + if(Facture.getTypeReglement() != null){ + TypeReglement = "'"+Facture.getTypeReglement()+"'"; + } + + // 0payer | 1en cour | NULL non pays + String EtatReglement = "NULL"; + if(Facture.getEtatReglement() != null){ + EtatReglement = "'"+Facture.getEtatReglement()+"'"; + } + + String Query = "INSERT INTO `facture_frs` (`numero`, `date_creation`, `type_reglement`, `etat_reglement`, `bon_reception`, `devise`, `total_h_t_net`, `remise`, `total_tva`, `timbre_loi`, `net_a_payer`, `id_fourisseur`, `local_reception`, `id_commande_frs`, `id_profile`) VALUES ('"+Numero+"', '"+DateCreation+" "+HeurCreation+"', "+TypeReglement+", "+EtatReglement+", 1, '"+ ParametreSystem.CurrencySign+"', '"+TotalHorsTaxNet+"', '"+TotalRemise+"', '"+TotalTVA+"', '"+ParametreSystem.Timbre+"', '"+NetAPayer+"', '"+Fourisseur+"', '"+Local+"', "+CommandeFrs+", '"+User.idprofile+"');"; + String IdFacture = cnx.InsertGetLastId(Query); + Facture.setIdFactureFrs(IdFacture); + + String Req = "INSERT INTO `list_prod_fact_frs` (`id_facture_frs`, `reference`, `designation_produit`, `quantite`, `p_u_h_t`, `remise`, `p_u_h_t_net`, `tva`, `montant`) VALUES "; + for(int i=0; i ListProduit = Facture.getListProduit(); + + String CommandeFrs = "NULL"; + if(Facture.getCommandeFrs() != null){ + CommandeFrs = "'"+Facture.getCommandeFrs().getCodeCommandeFrs()+"'"; + } + + //0 comptant | 1 facilité + String TypeReglement = "NULL"; + if(Facture.getTypeReglement() != null){ + TypeReglement = "'"+Facture.getTypeReglement()+"'"; + } + + // 0payer | 1en cour | NULL non pays + String EtatReglement = "NULL"; + if(Facture.getEtatReglement() != null){ + EtatReglement = "'"+Facture.getEtatReglement()+"'"; + } + + String Query = "INSERT INTO `facture_frs` (`numero`, `date_creation`, `type_reglement`, `etat_reglement`, `devise`, `total_h_t_net`, `remise`, `total_tva`, `timbre_loi`, `net_a_payer`, `id_fourisseur`, `local_reception`, `id_commande_frs`, `id_profile`) VALUES ('"+Numero+"', '"+DateCreation+" "+HeurCreation+"', "+TypeReglement+", "+EtatReglement+", '"+ParametreSystem.CurrencySign+"', '"+TotalHorsTaxNet+"', '"+TotalRemise+"', '"+TotalTVA+"', '"+ParametreSystem.Timbre+"', '"+NetAPayer+"', '"+Fourisseur+"', '"+Local+"', "+CommandeFrs+", '"+User.idprofile+"');"; + String IdFacture = cnx.InsertGetLastId(Query); + Facture.setIdFactureFrs(IdFacture); + + ObservableList ListStockDetail=FXCollections.observableArrayList(); + + String Req = "INSERT INTO `list_prod_fact_frs` (`id_facture_frs`, `reference`, `designation_produit`, `quantite`, `p_u_h_t`, `remise`, `p_u_h_t_net`, `tva`, `montant`) VALUES "; + for(int i=0; i0){ + Facture.setNumero(resultat.getString("numero")); + Facture.setIdFactureFrs(resultat.getString("id_facture_frs")); + Facture.setHeurCreation(resultat.getString("heur_recep")); + Facture.setDateCreation(resultat.getString("date_recep")); + + Facture.setTotalHorsTaxNet(resultat.getString("total_h_t_net")); + Facture.setTotalTVA(resultat.getString("total_tva")); + Facture.setRemise(resultat.getString("remise")); + Facture.setNetAPayer(resultat.getString("net_a_payer")); + Facture.setTimbre(resultat.getString("timbre_loi")); + + Facture.setFTotalHorsTaxNet(resultat.getFloat("total_h_t_net")); + Facture.setFTotalTVA(resultat.getFloat("total_tva")); + Facture.setFRemise(resultat.getFloat("remise")); + Facture.setFNetAPayer(resultat.getFloat("net_a_payer")); + Facture.setFTimbre(resultat.getFloat("timbre_loi")); + + Facture.setLocal(resultat.getString("local_reception")); + Facture.setTypeReglement(resultat.getString("type_reglement")); + Facture.setEtatReglement(resultat.getString("etat_reglement")); + Facture.setDevise(resultat.getString("devise")); + Facture.setBonReception(resultat.getString("bon_reception")); + + Fournisseur Frs = new FournisseurDB().GetFournisseurDB(resultat.getString("id_fourisseur")); + Facture.setFournisseur(Frs); + + Profile profile = new ProfileDB().getpro(resultat.getInt("id_profile")); + Facture.setProfile(profile); + + Facture.setListProduit(this.getFactureProduitList(resultat.getString("id_facture_frs"))); + + if(Facture.getBonReception() != null){ + if(Facture.getBonReception().equals("1") ){ + BonReceptionDB BonRecepDB= new BonReceptionDB(); + ObservableList ListeBonReception = BonRecepDB.getBonReceptionByFact(resultat.getString("id_facture_frs")); + Facture.setListeBonReception(ListeBonReception); + } + } + + + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + } + } + return Facture; + } + + + public ObservableList getFactureProduitList(String IdFactureFrs){ + ObservableList ListProd = FXCollections.observableArrayList(); + if(cnx.ouverture()){ + try{ + String Query = "SELECT * FROM `list_prod_fact_frs` WHERE (`id_facture_frs` = "+IdFactureFrs+");"; + ResultSet ResultListProd = cnx.excutionquery(Query); + ResultListProd.beforeFirst(); + while (ResultListProd.next() ) { + String reference = ResultListProd.getString("reference"); + String designation = ResultListProd.getString("designation_produit"); + String quantite = ResultListProd.getString("quantite").replace(",","."); + String PrixHT = ResultListProd.getString("p_u_h_t").replace(",","."); + String Remise = ResultListProd.getString("remise").replace(",",".").replace("%",""); + String TotalHT = ResultListProd.getString("p_u_h_t_net").replace(",","."); + String TVA = ResultListProd.getString("tva").replace(",",".").replace("%",""); + String TotalTTC= ResultListProd.getString("montant").replace(",","."); + ListProd.add(new ListeProduit(reference, designation, quantite, PrixHT, Remise, TotalHT, TVA, TotalTTC)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return ListProd; + } + + public ObservableList SearchFactureFrsGestion(Integer debut, Integer nbr, String NumeroFacture, String IdFournisseur, String LocalReception, String DateReception) + { + ObservableList ListFactureFrs = FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(NumeroFacture)){ + Where += " (`numero` = \""+NumeroFacture+"\") AND "; + } + + if(!clt.isStringNull(IdFournisseur)){ + Where += " (`id_fourisseur` = \""+IdFournisseur+"\") AND "; + } + + if(!clt.isStringNull(LocalReception)){ + Where += " (`local_reception` = \""+LocalReception+"\") AND "; + } + + if(!clt.isStringNull(DateReception)){ + Where += " (DATE(`date_creation`) = \""+DateReception+"\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req="SELECT *, DATE_FORMAT(date_creation, '%d/%m/%Y') as date_recep, DATE_FORMAT(date_creation, '%H:%i') as heur_recep " + + "FROM `facture_frs` " + + Where + + "ORDER BY id_facture_frs 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() ) { + FactureFrs Facture = new FactureFrs(); + Facture.setNumero(resultat.getString("numero")); + Facture.setIdFactureFrs(resultat.getString("id_facture_frs")); + Facture.setHeurCreation(resultat.getString("heur_recep")); + Facture.setDateCreation(resultat.getString("date_recep")); + + Facture.setTotalHorsTaxNet(resultat.getString("total_h_t_net")); + Facture.setTotalTVA(resultat.getString("total_tva")); + Facture.setRemise(resultat.getString("remise")); + Facture.setNetAPayer(resultat.getString("net_a_payer")); + Facture.setTimbre(resultat.getString("timbre_loi")); + Facture.setLocal(resultat.getString("local_reception")); + Facture.setTypeReglement(resultat.getString("type_reglement")); + Facture.setEtatReglement(resultat.getString("etat_reglement")); + Facture.setDevise(resultat.getString("devise")); + Facture.setBonReception(resultat.getString("bon_reception")); + + + Fournisseur Frs = new FournisseurDB().GetFournisseurDB(resultat.getString("id_fourisseur")); + Facture.setFournisseur(Frs); + + + ListFactureFrs.add(Facture); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return ListFactureFrs; + } + + + public Integer nbrFactureFrsGestion( String NumeroFacture, String IdFournisseur, String LocalReception, String DateReception) + { + String Where = ""; + + if(!clt.isStringNull(NumeroFacture)){ + Where += " (`numero` = \""+NumeroFacture+"\") AND "; + } + + if(!clt.isStringNull(IdFournisseur)){ + Where += " (`id_fourisseur` = \""+IdFournisseur+"\") AND "; + } + + if(!clt.isStringNull(LocalReception)){ + Where += " (`local_reception` = \""+LocalReception+"\") AND "; + } + + if(!clt.isStringNull(DateReception)){ + Where += " (DATE(`date_creation`) = \""+DateReception+"\") AND "; + } + + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req=" SELECT COUNT(`id_facture_frs`) " + + " FROM `facture_frs` " + + 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 ; + } + + public ObservableList getDataFactureFrs(String tab, String mot, Integer debut, Integer nbr){ + + ObservableList ListFactureFrs = FXCollections.observableArrayList(); + + String Limit = ""; + if(debut != null || nbr!= null){ + Limit = "LIMIT "+debut+" , "+nbr; + } + String req="SELECT *, DATE_FORMAT(date_creation, '%d/%m/%Y') as date_recep, DATE_FORMAT(date_creation, '%H:%i') as heur_recep FROM `facture_frs` WHERE (id_reglement_frs IS NULL) AND ("+tab+" "+mot+") ORDER BY id_facture_frs DESC "+Limit+" ;"; + + 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() ) { + FactureFrs Facture = new FactureFrs(); + Facture.setNumero(resultat.getString("numero")); + Facture.setIdFactureFrs(resultat.getString("id_facture_frs")); + Facture.setHeurCreation(resultat.getString("heur_recep")); + Facture.setDateCreation(resultat.getString("date_recep")); + + Facture.setTotalHorsTaxNet(resultat.getString("total_h_t_net")); + Facture.setTotalTVA(resultat.getString("total_tva")); + Facture.setRemise(resultat.getString("remise")); + Facture.setNetAPayer(resultat.getString("net_a_payer")); + Facture.setTimbre(resultat.getString("timbre_loi")); + Facture.setLocal(resultat.getString("local_reception")); + Facture.setTypeReglement(resultat.getString("type_reglement")); + Facture.setEtatReglement(resultat.getString("etat_reglement")); + Facture.setDevise(resultat.getString("devise")); + Facture.setBonReception(resultat.getString("bon_reception")); + + + Fournisseur Frs = new FournisseurDB().GetFournisseurDB(resultat.getString("id_fourisseur")); + Facture.setFournisseur(Frs); + + + ListFactureFrs.add(Facture); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return ListFactureFrs; + } + + + public String nbrFactureFrs(String tab, String mot){ + + String req = "SELECT count(*) FROM facture_frs WHERE "+tab+" "+mot+" ;"; + + + 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 Integer.toString(sommme) ; + } + + + public ObservableList getFactureByIdReglement(String IdReglement){ + + ObservableList ListFactureFrs = FXCollections.observableArrayList(); + + String req="SELECT *, DATE_FORMAT(date_creation, '%d/%m/%Y') as date_recep, DATE_FORMAT(date_creation, '%H:%i') as heur_recep FROM `facture_frs` WHERE id_reglement_frs = "+IdReglement+" ORDER BY id_facture_frs DESC ;"; + + 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() ) { + FactureFrs Facture = new FactureFrs(); + Facture.setNumero(resultat.getString("numero")); + Facture.setIdFactureFrs(resultat.getString("id_facture_frs")); + Facture.setHeurCreation(resultat.getString("heur_recep")); + Facture.setDateCreation(resultat.getString("date_recep")); + + Facture.setTotalHorsTaxNet(resultat.getString("total_h_t_net")); + Facture.setTotalTVA(resultat.getString("total_tva")); + Facture.setRemise(resultat.getString("remise")); + Facture.setNetAPayer(resultat.getString("net_a_payer")); + Facture.setTimbre(resultat.getString("timbre_loi")); + Facture.setLocal(resultat.getString("local_reception")); + Facture.setTypeReglement(resultat.getString("type_reglement")); + Facture.setEtatReglement(resultat.getString("etat_reglement")); + Facture.setDevise(resultat.getString("devise")); + Facture.setBonReception(resultat.getString("bon_reception")); + + Profile profile = new ProfileDB().getpro(resultat.getInt("id_profile")); + Facture.setProfile(profile); + + if(Facture.getBonReception() != null){ + if(Facture.getBonReception().equals("1") ){ + BonReceptionDB BonRecepDB= new BonReceptionDB(); + ObservableList ListeBonReception = BonRecepDB.getBonReceptionByFact(resultat.getString("id_facture_frs")); + Facture.setListeBonReception(ListeBonReception); + } + } + + ListFactureFrs.add(Facture); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return ListFactureFrs; + } + +} diff --git a/src/main/java/Models/FactureFrs/FactureFrsProduitList.java b/src/main/java/Models/FactureFrs/FactureFrsProduitList.java new file mode 100644 index 0000000..dfe3c07 --- /dev/null +++ b/src/main/java/Models/FactureFrs/FactureFrsProduitList.java @@ -0,0 +1,79 @@ +/* + * 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.FactureFrs; + +import javafx.beans.property.SimpleStringProperty; + +/** + * @author Maher + */ +public class FactureFrsProduitList { + + private final SimpleStringProperty IdListProdFact; + private final SimpleStringProperty IdFactureFrs; + private final SimpleStringProperty Reference; + private final SimpleStringProperty Designation; + private final SimpleStringProperty Quantite; + private final SimpleStringProperty PrixUnitaireHorsTaxe; + private final SimpleStringProperty PrixUnitaireHorsTaxenNet; + private final SimpleStringProperty Remise; + private final SimpleStringProperty Tva; + private final SimpleStringProperty Montant; + + public FactureFrsProduitList(String id_list_prod, String id_facture, String reference, String designation,String quantite, String p_u_h_t, String p_u_h_t_net, String remise, String tva, String montant) + { + this.IdListProdFact = new SimpleStringProperty(id_list_prod); + this.IdFactureFrs = new SimpleStringProperty(id_facture); + this.Reference = new SimpleStringProperty(reference); + this.Designation = new SimpleStringProperty(designation); + this.Quantite = new SimpleStringProperty(quantite); + this.PrixUnitaireHorsTaxe = new SimpleStringProperty(p_u_h_t); + this.PrixUnitaireHorsTaxenNet = new SimpleStringProperty(p_u_h_t_net); + this.Remise = new SimpleStringProperty(remise); + this.Tva = new SimpleStringProperty(tva); + this.Montant = new SimpleStringProperty(montant); + } + + public String getIdListProdFact() { + return IdListProdFact.get(); + } + + public String getIdFactureFrs() { + return IdFactureFrs.get(); + } + + public String getReference() { + return Reference.get(); + } + + public String getDesignation() { + return Designation.get(); + } + + public String getQuantite() { + return Quantite.get(); + } + + public String getPrixUnitaireHorsTaxe() { + return PrixUnitaireHorsTaxe.get(); + } + + public String getPrixUnitaireHorsTaxenNet() { + return PrixUnitaireHorsTaxenNet.get(); + } + + public String getRemise() { + return Remise.get(); + } + + public String getTva() { + return Tva.get(); + } + + public String getMontant() { + return Montant.get(); + } +} diff --git a/src/main/java/Models/Fournisseur/Fournisseur.java b/src/main/java/Models/Fournisseur/Fournisseur.java new file mode 100644 index 0000000..0af76ee --- /dev/null +++ b/src/main/java/Models/Fournisseur/Fournisseur.java @@ -0,0 +1,122 @@ +/* + * 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.Fournisseur; + +import javafx.collections.ObservableList; + +/** + * + * @author Maher + */ +public class Fournisseur { + + public String Code ; + public String Nom; + public String Adresse; + public String Formes; //SARL, EURL, SAS, SASU, SA, SNC + public String Tele1; + public String Tele2; + public String Fax; + public String Mail; + public String SiteWeb ; + public String Specialite; + public ObservableList ContactFrs; + + public String getCode() { + return Code; + } + + public void setCode(String Code) { + this.Code = Code; + } + + public String getNom() { + return Nom; + } + + public void setNom(String Nom) { + this.Nom = Nom; + } + + public String getAdresse() { + return Adresse; + } + + public void setAdresse(String Adresse) { + this.Adresse = Adresse; + } + + public String getFormes() { + return Formes; + } + + public void setFormes(String Formes) { + this.Formes = Formes; + } + + public String getTele1() { + return Tele1; + } + + public void setTele1(String Tele1) { + this.Tele1 = Tele1; + } + + public String getTele2() { + return Tele2; + } + + public void setTele2(String Tele2) { + this.Tele2 = Tele2; + } + + public String getFax() { + return Fax; + } + + public void setFax(String Fax) { + this.Fax = Fax; + } + + public String getMail() { + return Mail; + } + + public void setMail(String Mail) { + this.Mail = Mail; + } + + public String getSiteWeb() { + return SiteWeb; + } + + public void setSiteWeb(String SiteWeb) { + this.SiteWeb = SiteWeb; + } + + public String getSpecialite() { + return Specialite; + } + + public void setSpecialite(String Specialite) { + this.Specialite = Specialite; + } + + public ObservableList getContactFrs() { + return ContactFrs; + } + + public void setContactFrs(ObservableList ContactFrs) { + this.ContactFrs = ContactFrs; + } + + + + + + + +} diff --git a/src/main/java/Models/Fournisseur/FournisseurContactDB.java b/src/main/java/Models/Fournisseur/FournisseurContactDB.java new file mode 100644 index 0000000..7b47653 --- /dev/null +++ b/src/main/java/Models/Fournisseur/FournisseurContactDB.java @@ -0,0 +1,83 @@ +/* + * 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.Fournisseur; + +import Controllers.Traitement.contro; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author Maher + */ +public class FournisseurContactDB { + connexion cnx = new connexion(); + + public int UpdListFournisseurContact(String Code, String Nom, String Prenom, String Tele1, String Tele2, String Mail) + { + contro clt= new contro(); + Nom = "'"+Nom.replace("'", "\\'")+"'"; + Prenom = "'"+Prenom.replace("'", "\\'")+"'"; + if(clt.isStringNull(Mail)){ Mail = "NULL"; }else{Mail = "'"+Mail.replace("'", "\\'")+"'";} + if(clt.isStringNull(Tele1)){ Tele1 = "NULL";} + if(clt.isStringNull(Tele2)){Tele2 = "NULL"; } + + String Query = "UPDATE `contact_frs` SET `nom` = "+Nom+", `prenom` = "+Prenom+", `tele1` = "+Tele1+", `tele2` = "+Tele2+", `email` = "+Mail+" WHERE `idcontactfrs` = "+Code+";"; + return cnx.MettreAJour(Query); + } + + public boolean SetListFournisseurContact(ObservableList ObservableContactList, String IdFournisseur) + { + String Query = "INSERT INTO `contact_frs` (`nom`, `prenom`, `tele1`, `tele2`, `email`, `id_fournisseur`) VALUES "; + contro clt= new contro(); + + for(FournisseurContactList ContactList : ObservableContactList){ + String Prenom = "'"+ContactList.getPrenom().replace("'", "\\'")+"'"; + String Nom = "'"+ContactList.getNom().replace("'", "\\'")+"'"; + String Mail = "NULL"; if(!clt.isStringNull(ContactList.getMail())){ Mail = "'"+ContactList.getMail().replace("'", "\\'")+"'";} + String Tele1 = "NULL"; if(!clt.isStringNull(ContactList.getTele1())){ Tele1 = ContactList.getTele1();} + String Tele2 = "NULL"; if(!clt.isStringNull(ContactList.getTele2())){ Tele1 = ContactList.getTele2();} + Query = Query + "("+Nom+", "+Prenom+", "+Tele1+", "+Tele2+", "+Mail+", "+IdFournisseur+"),"; + } + Query = Query.substring(0, Query.length()-1)+";"; + + return cnx.insertion(Query); + } + + public ObservableList GetListFournisseurContact(String CodeFrs) + { + ObservableList ObservableListContactFrs = FXCollections.observableArrayList(); + + String Query = "SELECT * FROM contact_frs WHERE (id_fournisseur = "+CodeFrs+");"; + + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery(Query); + + resultat.last();//on place le curseur sur le dernier tuple + + if(resultat.getRow()>0){ //on récupère le numéro de la ligne + resultat.beforeFirst(); + while ( resultat.next() ) { + String Code = resultat.getString("idcontactfrs"); + String Nom = resultat.getString("nom"); + String Prenom = resultat.getString("prenom"); + String Tele1 = resultat.getString("tele1"); + String Tele2 = resultat.getString("tele2"); + String Mail = resultat.getString("email"); + ObservableListContactFrs.add(new FournisseurContactList(Code, Nom, Prenom, Tele1, Tele2, Mail)); + } + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return ObservableListContactFrs; + } +} diff --git a/src/main/java/Models/Fournisseur/FournisseurContactList.java b/src/main/java/Models/Fournisseur/FournisseurContactList.java new file mode 100644 index 0000000..081412c --- /dev/null +++ b/src/main/java/Models/Fournisseur/FournisseurContactList.java @@ -0,0 +1,70 @@ +/* + * 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.Fournisseur; + +import javafx.beans.property.SimpleStringProperty; + +public class FournisseurContactList { + + private final SimpleStringProperty Code; + private final SimpleStringProperty Nom; + private final SimpleStringProperty Prenom; + private final SimpleStringProperty Tele1; + private final SimpleStringProperty Tele2; + private final SimpleStringProperty Mail; + + + public FournisseurContactList(String Code, String Nom, String Prenom, String Tele1,String Tele2, String Mail) { + this.Code = new SimpleStringProperty(Code); + this.Nom = new SimpleStringProperty(Nom); + this.Prenom = new SimpleStringProperty(Prenom); + this.Tele1 = new SimpleStringProperty(Tele1); + this.Tele2 = new SimpleStringProperty(Tele2); + this.Mail = new SimpleStringProperty(Mail); + } + + public String getCode() { + return Code.get(); + } + + public String getNom() { + return Nom.get(); + } + + + public String getPrenom() { + return Prenom.get(); + } + + + public String getTele1() { + return Tele1.get(); + } + + public void SetTele1(String tele1) { + this.Tele1.set(tele1); + } + + public String getTele2() { + return Tele2.get(); + } + + public void SetTele2(String tele2) { + this.Tele2.set(tele2); + } + + + public String getMail() { + return Mail.get(); + } + + + public void SetMail(String mail) { + this.Mail.set(mail); + } + + +} diff --git a/src/main/java/Models/Fournisseur/FournisseurDB.java b/src/main/java/Models/Fournisseur/FournisseurDB.java new file mode 100644 index 0000000..997e7ed --- /dev/null +++ b/src/main/java/Models/Fournisseur/FournisseurDB.java @@ -0,0 +1,276 @@ +/* + * 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.Fournisseur; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.contro; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author Maher + */ +public class FournisseurDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + //methode qui permet de récupére la liste des locals souf le local qui appartin l'utilisateur + public ArrayList getAllFournisseur(String colonne){ + ArrayList listFournisseur = new ArrayList<>(); + String req = "SELECT "+colonne+" FROM `fournisseur` ORDER BY `id_fourisseur` DESC;"; //local avec la quel appartient l'utilisateur + 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() ) { + listFournisseur.add(resultat.getString(colonne)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println("req "+req); + } + } + return listFournisseur ; + } + + + public Fournisseur GetFournisseurDB(String CodeFrs) + { + Fournisseur fournisseur= new Fournisseur(); + + String Query = "SELECT * FROM fournisseur WHERE (id_fourisseur = "+CodeFrs+");"; + + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery(Query); + + resultat.last();//on place le curseur sur le dernier tuple + + if(resultat.getRow()>0){ //on récupère le numéro de la ligne + fournisseur.setCode(CodeFrs); + fournisseur.setNom(resultat.getString("nom")); + fournisseur.setAdresse(resultat.getString("adresse")); + fournisseur.setFormes(resultat.getString("formes")); + fournisseur.setTele1(resultat.getString("tele1")); + fournisseur.setTele2(resultat.getString("tele2")); + fournisseur.setFax(resultat.getString("fax")); + fournisseur.setMail(resultat.getString("mail")); + fournisseur.setSiteWeb(resultat.getString("site_web")); + fournisseur.setSpecialite(resultat.getString("specialite")); + + FournisseurContactDB FournisseurContact = new FournisseurContactDB(); + fournisseur.setContactFrs(FournisseurContact.GetListFournisseurContact(CodeFrs)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return fournisseur; + } + + public Fournisseur SetFournisseurDB(Fournisseur Frs) + { + contro clt= new contro(); + String Tele2 = "NULL"; if(!clt.isStringNull(Frs.getTele2())){ Tele2 = Frs.getTele2();} + String Fax = "NULL";if(!clt.isStringNull(Frs.getFax())){ Fax = Frs.getFax();} + String Mail = "NULL"; if(!clt.isStringNull(Frs.getMail())){ Mail = "'"+Frs.getMail().replace("'", "\\'")+"'";} + String SiteWeb = "NULL"; if(!clt.isStringNull(Frs.getSiteWeb())){ SiteWeb = "'"+Frs.getSiteWeb()+"'";} + String Specialite = "NULL"; if(!clt.isStringNull(Frs.getSpecialite())){ Specialite = "'"+Frs.getSpecialite().replace("'", "\\'")+"'";} + + String Query = "INSERT INTO `fournisseur` (`nom`, `adresse`, `formes`, `tele1`, `tele2`, `fax`, `mail`, `site_web`, `specialite`) VALUES ('"+Frs.getNom().replace("'", "\\'")+"', '"+Frs.getAdresse().replace("'", "\\'")+"', '"+Frs.getFormes().replace("'", "\\'")+"', "+Frs.getTele1()+", "+Tele2+", "+Fax+", "+Mail+", "+SiteWeb+", "+Specialite+");"; + String CodeFrs = cnx.InsertGetLastId(Query); + Frs.setCode(CodeFrs); + + int SizeContactFrs = Frs.getContactFrs().size(); + if(SizeContactFrs > 0){ + FournisseurContactDB FrsContactDB= new FournisseurContactDB(); + FrsContactDB.SetListFournisseurContact(Frs.getContactFrs(), CodeFrs); + } + + return Frs; + } + + + public boolean UpdFournisseurDB(Fournisseur Frs) + { + contro clt= new contro(); + String Tele2 = "NULL"; if(!clt.isStringNull(Frs.getTele2())){ Tele2 = Frs.getTele2();} + String Fax = "NULL";if(!clt.isStringNull(Frs.getFax())){ Fax = Frs.getFax();} + String Mail = "NULL"; if(!clt.isStringNull(Frs.getMail())){ Mail = "'"+Frs.getMail().replace("'", "\\'")+"'";} + String SiteWeb = "NULL"; if(!clt.isStringNull(Frs.getSiteWeb())){ SiteWeb = "'"+Frs.getSiteWeb()+"'";} + String Specialite = "NULL"; if(!clt.isStringNull(Frs.getSpecialite())){ Specialite = "'"+Frs.getSpecialite().replace("'", "\\'")+"'";} + + String Query = "UPDATE `fournisseur` SET `nom` = '"+Frs.getNom().replace("'", "\\'")+"', `adresse` = '"+Frs.getAdresse().replace("'", "\\'")+"', `formes` = '"+Frs.getFormes().replace("'", "\\'")+"', `Tele1` = '"+Frs.getTele1()+"', `Tele2` = "+Tele2+", `fax` = "+Fax+", `mail` = "+Mail+", `site_web` = "+SiteWeb+", `specialite` = "+Specialite+" WHERE `id_fourisseur` = "+Frs.getCode()+" ;"; + boolean Result = false; + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(Query); + if(nbr >= 1){ + Result = true; + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + + return Result; + } + + + + /********************************** Initial *******************************/ + + + public ObservableList SearchFournisseurGestion(Integer debut, Integer nbr, String CodeFournisseur, String NomFournisseur, String AdresseFournisseur, String TeleFournisseur, String FaxFournisseur, String MailFournisseur) + { + ObservableList data =FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(CodeFournisseur)){ + Where += " (`id_fourisseur` = \""+CodeFournisseur+"\") AND "; + } + + if(!clt.isStringNull(NomFournisseur)){ + Where += " (`nom` LIKE \"%"+Adaptateur.addSlashes(NomFournisseur)+"%\") AND "; + } + + if(!clt.isStringNull(AdresseFournisseur)){ + Where += " (`adresse` LIKE \"%"+Adaptateur.addSlashes(AdresseFournisseur)+"%\") AND "; + } + + if(!clt.isStringNull(TeleFournisseur)){ + Where += " (`tele1` LIKE \"%"+Adaptateur.addSlashes(TeleFournisseur)+"%\") AND "; + } + + if(!clt.isStringNull(FaxFournisseur)){ + Where += " (`fax` LIKE \"%"+Adaptateur.addSlashes(FaxFournisseur)+"%\") AND "; + } + + if(!clt.isStringNull(MailFournisseur)){ + Where += " (`mail` LIKE \"%"+Adaptateur.addSlashes(MailFournisseur)+"%\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req="SELECT `id_fourisseur`, `nom`, `adresse`, `formes`, `tele1`, `tele2`, `fax`, `mail`, `site_web`, `specialite` " + + "FROM `fournisseur` " + + Where + + "ORDER BY id_fourisseur 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() ) { + + String id_fourisseur = resultat.getString("id_fourisseur"); + String nom = resultat.getString("nom"); + String adresse = resultat.getString("adresse"); + String type_organisation = resultat.getString("formes"); + String tele1 = resultat.getString("tele1"); + String tele2 = resultat.getString("tele2"); + String fax = resultat.getString("fax"); + String mail = resultat.getString("mail"); + String site_web = resultat.getString("site_web"); + String specialite = resultat.getString("specialite"); + + data.add(new FournisseurGestionList(id_fourisseur, nom, adresse, type_organisation, tele1, tele2, fax, mail, site_web, specialite)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return data ; + } + + public Integer nbrFournisseurGestion(String CodeFournisseur, String NomFournisseur, String AdresseFournisseur, String TeleFournisseur, String FaxFournisseur, String MailFournisseur) + { + String Where = ""; + + if(!clt.isStringNull(CodeFournisseur)){ + Where += " (`id_fourisseur` = \""+CodeFournisseur+"\") AND "; + } + + if(!clt.isStringNull(NomFournisseur)){ + Where += " (`nom` LIKE \"%"+Adaptateur.addSlashes(NomFournisseur)+"%\") AND "; + } + + if(!clt.isStringNull(AdresseFournisseur)){ + Where += " (`adresse` LIKE \"%"+Adaptateur.addSlashes(AdresseFournisseur)+"%\") AND "; + } + + if(!clt.isStringNull(TeleFournisseur)){ + Where += " (`tele1` LIKE \"%"+Adaptateur.addSlashes(TeleFournisseur)+"%\") AND "; + } + + if(!clt.isStringNull(FaxFournisseur)){ + Where += " (`fax` LIKE \"%"+Adaptateur.addSlashes(FaxFournisseur)+"%\") AND "; + } + + if(!clt.isStringNull(MailFournisseur)){ + Where += " (`mail` LIKE \"%"+Adaptateur.addSlashes(MailFournisseur)+"%\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req=" SELECT COUNT(`id_fourisseur`) " + + " FROM `fournisseur` " + + 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 ; + } + + + +} diff --git a/src/main/java/Models/Fournisseur/FournisseurGestionList.java b/src/main/java/Models/Fournisseur/FournisseurGestionList.java new file mode 100644 index 0000000..31fd8e5 --- /dev/null +++ b/src/main/java/Models/Fournisseur/FournisseurGestionList.java @@ -0,0 +1,80 @@ +/* + * 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.Fournisseur; + +import javafx.beans.property.SimpleStringProperty; + +public class FournisseurGestionList { + + private final SimpleStringProperty Code; + private final SimpleStringProperty Nom; + private final SimpleStringProperty Adresse; + private final SimpleStringProperty Formes; + private final SimpleStringProperty Tele1; + private final SimpleStringProperty Tele2; + private final SimpleStringProperty Fax; + private final SimpleStringProperty Mail; + private final SimpleStringProperty SiteWeb; + private final SimpleStringProperty Specialite; + + + public FournisseurGestionList(String Code, String Nom, String Adresse, String Formes, String Tele1,String Tele2, String Fax, String Mail, String SiteWeb, String Specialite) { + this.Code = new SimpleStringProperty(Code); + this.Nom = new SimpleStringProperty(Nom); + this.Adresse = new SimpleStringProperty(Adresse); + this.Formes = new SimpleStringProperty(Formes); + this.Tele1 = new SimpleStringProperty(Tele1); + this.Tele2 = new SimpleStringProperty(Tele2); + this.Fax = new SimpleStringProperty(Fax); + this.Mail = new SimpleStringProperty(Mail); + this.SiteWeb = new SimpleStringProperty(SiteWeb); + this.Specialite = new SimpleStringProperty(Specialite); + } + + public String getCode() { + return Code.get(); + } + + public String getNom() { + return Nom.get(); + } + + public String getAdresse() { + return Adresse.get(); + } + + public String getFormes() { + return Formes.get(); + } + + public String getTele1() { + return Tele1.get(); + } + + public String getTele2() { + return Tele2.get(); + } + + public String getFax() { + return Fax.get(); + } + + public String getMail() { + return Mail.get(); + } + + public String getSiteWeb() { + return SiteWeb.get(); + } + + public String getSpecialite() { + return Specialite.get(); + } + + + + +} diff --git a/src/main/java/Models/Home/HomeDB.java b/src/main/java/Models/Home/HomeDB.java new file mode 100644 index 0000000..9476b1a --- /dev/null +++ b/src/main/java/Models/Home/HomeDB.java @@ -0,0 +1,135 @@ +/* + * 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.Home; + +import Controllers.Traitement.ParametreSystem; +import Models.BonLivraisonClt.BonLivraisonCltProduitList; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.chart.PieChart; +import javafx.scene.chart.XYChart; + +/** + * @author Maher + */ +public class HomeDB { + + connexion cnx = new connexion(); + + public Map HomeNbr() + { + Map map = new HashMap<>(); + + String Query = " SELECT 'factureclt' AS 'colHome', COUNT(idfactureclt) AS nbr " + + " FROM `factureclt` "+ + " WHERE (YEAR(date_facture) = DATE_FORMAT(CURDATE(), '%Y')) AND (local_nom LIKE '"+ParametreSystem.NomLocalPC+"') "+ + + " UNION "+ + + " SELECT 'client' AS 'colHome', COUNT(codeclient) AS nbr "+ + " FROM `client` "+ + " WHERE (YEAR(`date_add`) = DATE_FORMAT(CURDATE(), '%Y')) AND (local_nom LIKE '"+ParametreSystem.NomLocalPC+"') "+ + + " UNION "+ + + " SELECT 'cheque' AS 'colHome', COUNT(id_chequeclt) AS nbr "+ + " FROM `cheque_clt` "+ + " WHERE (YEAR(`date_creation`) = DATE_FORMAT(CURDATE(), '%Y')) AND (local_nom LIKE '"+ParametreSystem.NomLocalPC+"'); "; + + if(cnx.ouverture()){ + try{ + ResultSet Resultat = cnx.excutionquery(Query); + Resultat.last(); + int nombreLignes = Resultat.getRow(); + if(nombreLignes>0){ + Resultat.beforeFirst(); + while (Resultat.next()){ + String col = Resultat.getString("colHome"); + String nbr = Resultat.getString("nbr"); + map.put(col, nbr); + } + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + } + } + + return map; + } + + + + public XYChart.Series HomeChiffreAffaireByMois() + { + XYChart.Series series1 = new XYChart.Series(); + + String Query = " SELECT DATE_FORMAT(date_facture,'%Y-%m') AS dateFact, sum(net_a_payer) chiffre " + + " FROM `factureclt` " + + " WHERE local_nom LIKE '"+ParametreSystem.NomLocalPC+"' " + + " GROUP BY dateFact " + + " ORDER BY dateFact DESC " + + " LIMIT 0, 6; "; + + if(cnx.ouverture()){ + try{ + ResultSet Resultat = cnx.excutionquery(Query); + Resultat.last(); + int nombreLignes = Resultat.getRow(); + if(nombreLignes>0){ + Resultat.beforeFirst(); + while (Resultat.next()){ + String dateFact = Resultat.getString("dateFact"); + Float chiffre = Resultat.getFloat("chiffre"); + series1.getData().add(new XYChart.Data(dateFact, chiffre)); + } + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + } + } + + return series1; + } + + + public ObservableList HomeVente(String year) + { + ObservableList ObservableListPieChart = FXCollections.observableArrayList(); + + String Query = " SELECT local_nom, SUM(`net_a_payer`) AS total "+ + " FROM `factureclt` "+ + " WHERE (YEAR(`date_facture`) = 2022) "+ + " GROUP BY local_nom; "; + + if(cnx.ouverture()){ + try{ + ResultSet Resultat = cnx.excutionquery(Query); + Resultat.last(); + int nombreLignes = Resultat.getRow(); + if(nombreLignes>0){ + Resultat.beforeFirst(); + while (Resultat.next()){ + String local_nom = Resultat.getString("local_nom"); + Float total = Resultat.getFloat("total"); + ObservableListPieChart.add(new PieChart.Data(local_nom, total)); + } + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + } + } + + return ObservableListPieChart; + } +} diff --git a/src/main/java/Models/Produit/ListeProduit.java b/src/main/java/Models/Produit/ListeProduit.java new file mode 100644 index 0000000..9db35f8 --- /dev/null +++ b/src/main/java/Models/Produit/ListeProduit.java @@ -0,0 +1,123 @@ +/* + * 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.Produit; + +import Controllers.Traitement.Adaptateur; +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author PC-Maher + */ +public class ListeProduit { + + private final SimpleStringProperty reference; + private final SimpleStringProperty designation; + private final SimpleStringProperty quantite; + private final SimpleStringProperty PrixHT; + private final SimpleStringProperty Remise; + private final SimpleStringProperty TotalHT; + private final SimpleStringProperty TVA; + private final SimpleStringProperty TotalTTC; + + + + public ListeProduit(String reference, String designation, String quantite, String PrixHT, String Remise, String TotalHT, String TVA, String TotalTTC) { + + if(!reference.isEmpty()){ + + float remise = Adaptateur.ArrondStringToFloat(Remise.replace("%", "")) ; + float prixht = Adaptateur.ArrondStringToFloat(PrixHT) ; + float tva = Adaptateur.StringToFloat(TVA.replace("%", "")) ; + float qte = Adaptateur.StringToFloat(quantite) ; + float totalht = (prixht - ((prixht * remise)/100))* qte ; + float totalttc = totalht + ((totalht * tva)/100) ; + if(!Remise.contains("%")){ Remise=Remise+"%"; } + if(!TVA.contains("%")){ TVA=TVA+"%"; } + TotalHT = Adaptateur.ArrondFloatToString(totalht); + TotalTTC= Adaptateur.ArrondFloatToString(totalttc); + PrixHT = Adaptateur.ArrondFloatToString(prixht); + } + + + this.reference = new SimpleStringProperty(reference); + this.designation = new SimpleStringProperty(designation); + this.quantite = new SimpleStringProperty(quantite); + this.PrixHT = new SimpleStringProperty(PrixHT); + this.Remise = new SimpleStringProperty(Remise); + this.TotalHT = new SimpleStringProperty(TotalHT); + this.TVA = new SimpleStringProperty(TVA); + this.TotalTTC = new SimpleStringProperty(TotalTTC); + + } + + + + public String getReference() { + return reference.get(); + } + + public void setReference(String Reference) { + reference.set(Reference); + } + + public String getDesignation() { + return designation.get(); + } + + public void setDesignation(String Designaton) { + designation.set(Designaton); + } + + public String getQuantite() { + return quantite.get(); + } + public void setQuantite(String Quantite) { + quantite.set(Quantite); + } + + public String getPrixHT() { + return PrixHT.get(); + + } + public void setPrixHT(String prixHT) { + PrixHT.set(prixHT); + } + + public String getRemise() { + return Remise.get(); + } + public void setRemise(String remise) { + Remise.set(remise); + } + + public String getTotalHT() { + return TotalHT.get(); + + } + public void setTotalHT(String totalHT) { + TotalHT.set(totalHT); + } + + public String getTVA() { + return TVA.get(); + + } + public void setTVA(String tva) { + TVA.set(tva); + } + + public String getTotalTTC() { + return TotalTTC.get(); + } + + public void setTotalTTC(String totalTTC) { + TotalTTC.set(totalTTC); + } + + + +} diff --git a/src/main/java/Models/Produit/Produit.java b/src/main/java/Models/Produit/Produit.java new file mode 100644 index 0000000..608a8ba --- /dev/null +++ b/src/main/java/Models/Produit/Produit.java @@ -0,0 +1,266 @@ +package Models.Produit; + +/** + * + * @author Maher Ben Tili + */ +public class Produit { + private String reference; + private String codebarre ; + private String designation; + private String categorie; + private String marque; + private String couleur; + private String description; + private Integer garantie ; + + private String quantite; + + private String prixachatht ; + private String tvaachat; + private String prixachatttc ; + + private String marge ; + + private String prixventeht; + private String tvavente ; + private String prixventettc ; + + private String poids ; + private String dimensions; + private String vitesse; + private String puissance; + private String capacite; + + public Produit(){ + + } + + public Produit(String reference, String codebarre, String designation, String marque, String categorie, String quantite, String prix_vente_ht, String prix_vente_ttc, String tva_vente, String marge, String prix_achat_ht, String prix_achat_ttc, String tva_achat) + { + this.reference = reference; + this.codebarre = codebarre; + + this.designation = designation; + this.categorie = categorie; + this.marque = marque; + + this.quantite = quantite; + + this.prixachatht = prix_achat_ht; + this.tvaachat = tva_achat; + this.prixachatttc = prix_achat_ttc; + + this.marge = marge; + + this.prixventeht = prix_vente_ht; + this.tvavente = tva_vente; + this.prixventettc = prix_vente_ttc; + } + + public String getReference() { + return reference; + } + + public void setReference(String reference) { + this.reference = reference; + } + + public String getCodebarre() { + return codebarre; + } + + public void setCodebarre(String codebarre) { + this.codebarre = codebarre; + } + + + public String getDesignation() { + return designation; + } + + public void setDesignation(String designation) { + this.designation = designation.trim().toLowerCase(); + } + + public String getPrixachatht() { + return prixachatht; + } + + + public void setPrixachatht(String prixachatht) { + this.prixachatht = prixachatht; + } + + public String getTvaachat() { + return tvaachat; + } + + + public void setTvaachat(String tvaachat) { + this.tvaachat = tvaachat; + } + + public String getPrixventeht() { + return prixventeht; + } + + + public void setPrixventeht(String prixventeht) { + this.prixventeht = prixventeht; + } + + public String getTvavente() { + return tvavente; + } + + + public void setTvavente(String tvavente) { + this.tvavente = tvavente; + } + + public String getQuantite() { + return quantite; + } + + public void setQuantite(String quantite) { + this.quantite = quantite; + } + + + + + public String getCategorie() { + return categorie; + } + + public void setCategorie(String categorie) { + this.categorie = categorie; + } + + public String getMarque() { + return marque; + } + + public void setMarque(String marque) { + this.marque = marque; + } + + public String getCouleur() { + return couleur; + } + + public String getPrixachatttc() { + return prixachatttc; + } + + + + public String getMarge() { + return marge; + } + + + + public void setMarge(String marge) { + this.marge = marge; + } + + + public String getPrixventettc() { + return prixventettc; + } + + + public String getPoids() { + return poids; + } + + public String getDimensions() { + return dimensions; + } + + public String getVitesse() { + return vitesse; + } + + public String getPuissance() { + return puissance; + } + + public String getCapacite() { + return capacite; + } + + public void setPrixachatttc(String prixachatttc) { + this.prixachatttc = prixachatttc; + } + + + + public void setPrixventettc(String prixventettc) { + this.prixventettc = prixventettc; + } + + public void setPoids(String poids) { + this.poids = poids; + } + + public void setDimensions(String dimensions) { + this.dimensions = dimensions; + } + + public void setVitesse(String vitesse) { + this.vitesse = vitesse; + } + + public void setPuissance(String puissance) { + this.puissance = puissance; + } + + public void setCapacite(String capacite) { + this.capacite = capacite; + } + + + + public void setCouleur(String couleur) { + this.couleur = couleur; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + // supprimer les balises si le HTMLEditor description vide + if(description.equals("")){ + this.description = ""; + } + else{ + this.description = description; + } + } + + + + public Integer getGarantie() { + return garantie; + } + + public void setGarantie(Integer garantie) { + this.garantie = garantie; + } + + public void setGarantieString(String garantie) { + if(!garantie.equals("")){ + try{ + this.garantie = Integer.parseInt(garantie); + }catch(Exception ex){ + this.garantie = null; + } + }else{ + this.garantie = null; + } + } +} diff --git a/src/main/java/Models/Produit/ProduitDB.java b/src/main/java/Models/Produit/ProduitDB.java new file mode 100644 index 0000000..da42b5d --- /dev/null +++ b/src/main/java/Models/Produit/ProduitDB.java @@ -0,0 +1,297 @@ +package Models.Produit; + + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author Maher Ben Tili + */ +public class ProduitDB { + + connexion cnx = new connexion(); + ShowDialog SD = new ShowDialog(); + contro clt = new contro(); + + public Produit getProduit (String ref) + { + Produit prod = new Produit(); + String req = "SELECT * FROM `produit` WHERE (`reference` LIKE '"+Adaptateur.addSlashes(ref)+"') OR (`code_barre` = '"+Adaptateur.addSlashes(ref)+"'); "; + if(cnx.ouverture()){ + try{ + 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() ) { + prod.setReference(resultat.getString("reference")); + prod.setCodebarre(resultat.getString("code_barre")); + prod.setCategorie(resultat.getString("nomcategorie_cate")); + prod.setDesignation(resultat.getString("designation")); + + prod.setCapacite(resultat.getString("capacite")); + prod.setCouleur(resultat.getString("couleur")); + prod.setDescription(resultat.getString("description")); + prod.setDimensions(resultat.getString("dimension")); + prod.setGarantie(resultat.getInt("garantie")); + + prod.setMarque(resultat.getString("marque")); + prod.setPoids(resultat.getString("poids")); + prod.setPuissance(resultat.getString("puissance")); + + prod.setPrixachatht(Adaptateur.ArrondStringToString(resultat.getString("prix_achat_ht"))); + prod.setTvaachat(Adaptateur.ArrondStringToString(resultat.getString("tva_achat"))); + prod.setPrixachatttc(Adaptateur.ArrondStringToString(resultat.getString("prix_achat_ttc"))); + + prod.setMarge(Adaptateur.ArrondStringToString(resultat.getString("marge"))); + + prod.setPrixventeht(Adaptateur.ArrondStringToString(resultat.getString("prix_vente_ht"))); + prod.setTvavente(Adaptateur.ArrondStringToString(resultat.getString("tva_vente"))); + prod.setPrixventettc(Adaptateur.ArrondStringToString(resultat.getString("prix_vente_ttc"))); + + prod.setVitesse(resultat.getString("vitesse")); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return prod ; + } + public Integer UpdateProduit (Produit prod ,String ref) + { + String Garantie = "NULL"; + if(prod.getGarantie() != null){ + Garantie = "'"+prod.getGarantie()+"'"; + } + //Adaptateur.addSlashes() + String req = "UPDATE `produit` SET `reference`= '"+Adaptateur.addSlashes(prod.getReference())+"', `designation`= \""+Adaptateur.addSlashes(prod.getDesignation())+"\", `nomcategorie_cate` = '"+Adaptateur.addSlashes(prod.getCategorie())+"', `marque`= '"+Adaptateur.addSlashes(prod.getMarque())+"', `garantie`= "+Garantie+", `prix_achat_ht` = '"+prod.getPrixachatht()+"', `tva_achat` = '"+prod.getTvaachat()+"', `prix_achat_ttc` = '"+prod.getPrixachatttc()+"', `marge` = '"+prod.getMarge()+"', `prix_vente_ht` = '"+prod.getPrixventeht()+"', `tva_vente` = '"+prod.getTvavente()+"', `prix_vente_ttc` = '"+prod.getPrixventettc()+"', `description` = '"+Adaptateur.addSlashes(prod.getDescription())+"', `poids` = '"+prod.getPoids()+"', `couleur` = '"+prod.getCouleur()+"', `dimension` = '"+prod.getDimensions()+"', `vitesse`= '"+prod.getVitesse()+"', `puissance`= '"+prod.getPuissance()+"', `capacite`='"+prod.getCapacite()+"' WHERE `produit`.`reference` = '"+Adaptateur.addSlashes(ref)+"';" ; + return cnx.MettreAJour(req); + } + + /********************************** Search *******************************/ + + public ObservableList SearchProduit(Integer debut, Integer nbr, Boolean stock, String Reference, String Category, String CodeBarre, String Designation) + { + ObservableList data =FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(Reference)){ + Where += " (p.reference LIKE \"%"+Adaptateur.addSlashes(Reference)+"%\") AND "; + } + + if(!clt.isStringNull(Category)){ + Where += " (p.nomcategorie_cate LIKE \"%"+Adaptateur.addSlashes(Category)+"%\") AND "; + } + + if(!clt.isStringNull(CodeBarre)){ + Where += " (p.code_barre = '"+Adaptateur.addSlashes(CodeBarre)+"') AND "; + } + + if(!clt.isStringNull(Designation)){ + Where += " (p.designation LIKE \"%"+Adaptateur.addSlashes(Designation)+"%\") AND "; + } + + + + String req="SELECT p.reference, p.code_barre, p.designation, p.marque, p.nomcategorie_cate, p.marge, p.tva_vente, p.nomcategorie_cate, p.prix_vente_ttc, IFNULL(s.quantite,0) AS quantite, IFNULL(p.prix_vente_ht,0) AS prix_vente_ht, IFNULL(p.prix_vente_ttc,0) AS prix_vente_ttc, IFNULL(p.tva_vente,0) AS tva_vente, IFNULL(p.prix_achat_ht,0) AS prix_achat_ht, IFNULL(p.prix_achat_ttc,0) AS prix_achat_ttc, IFNULL(p.tva_achat,0) AS tva_achat " + + "FROM produit p, stock s " + + "WHERE " + Where + + " (p.reference = s.produit_reference) AND (s.local_nom = '"+ParametreSystem.NomLocalPC+"') "+ + "ORDER BY p.datecreation DESC "+ + "LIMIT "+debut+" , "+nbr ; + + //true stock négative (vente produit en négatif) + if(stock){ + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + req= "SELECT p.reference, p.code_barre, p.designation, p.marque, p.nomcategorie_cate, p.marge, p.tva_vente, p.nomcategorie_cate, p.prix_vente_ttc, IFNULL(s.quantite,0) AS quantite, IFNULL(p.prix_vente_ht,0) AS prix_vente_ht, IFNULL(p.prix_vente_ttc,0) AS prix_vente_ttc, IFNULL(p.tva_vente,0) AS tva_vente, IFNULL(p.prix_achat_ht,0) AS prix_achat_ht, IFNULL(p.prix_achat_ttc,0) AS prix_achat_ttc, IFNULL(p.tva_achat,0) AS tva_achat " + + "FROM produit p " + + "LEFT JOIN stock s ON p.reference = s.produit_reference " + + Where + + "ORDER BY p.datecreation 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() ) { + String reference = resultat.getString("reference"); + String code_barre = resultat.getString("code_barre"); + String designation=resultat.getString("designation"); + String marque =resultat.getString("marque"); + String nomcategorie =resultat.getString("nomcategorie_cate"); + String quantite = Adaptateur.ArrondStringToString(resultat.getString("quantite")); + + String prix_vente_ht = Adaptateur.ArrondStringToString(resultat.getString("prix_vente_ht")); + String prix_vente_ttc= Adaptateur.ArrondStringToString(resultat.getString("prix_vente_ttc")); + String tva_vente= Adaptateur.ArrondStringToString(resultat.getString("tva_vente")); + + String marge = Adaptateur.ArrondStringToString(resultat.getString("marge")); + + String prix_achat_ht = Adaptateur.ArrondStringToString(resultat.getString("prix_achat_ht")); + String prix_achat_ttc = Adaptateur.ArrondStringToString(resultat.getString("prix_achat_ttc")); + String tva_achat = Adaptateur.ArrondStringToString(resultat.getString("tva_achat")); + + + data.add(new Produit(reference, code_barre, designation, marque, nomcategorie, quantite, prix_vente_ht, prix_vente_ttc, tva_vente, marge, prix_achat_ht, prix_achat_ttc, tva_achat)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + else{ + SD.ShowAletDialog(); + } + return data ; + + } + + + public Integer nbrSearchProduit(Boolean stock, String Reference, String Category, String CodeBarre, String Designation) + { + String Where = ""; + + if(!clt.isStringNull(Reference)){ + Where += " (p.reference LIKE \"%"+Adaptateur.addSlashes(Reference)+"%\") AND "; + } + + if(!clt.isStringNull(Category)){ + Where += " (p.nomcategorie_cate LIKE \"%"+Adaptateur.addSlashes(Category)+"%\") AND "; + } + + if(!clt.isStringNull(CodeBarre)){ + Where += " (p.code_barre = '"+Adaptateur.addSlashes(CodeBarre)+"') AND "; + } + + if(!clt.isStringNull(Designation)){ + Where += " (p.designation LIKE \"%"+Adaptateur.addSlashes(Designation)+"%\") AND "; + } + + String req="SELECT COUNT(p.reference) " + + "FROM produit p, stock s " + + "WHERE " + Where + + " (p.reference = s.produit_reference) AND (s.local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + + + //true stock négative (vente produit en négatif) + if(stock){ + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + req = "SELECT count(*) FROM produit p "+ Where + " ;"; + } + + int sommme =0; + if(cnx.ouverture()){ + try{ + /* Exécution d'une requête de lecture */ + ResultSet resultat = cnx.excutionquery(req); + // get the number of rows from the result set + resultat.next(); + sommme = resultat.getInt(1); + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return sommme ; + } + + + + /******************************************************************************/ + public boolean addProduit(Produit prod) + { + String Garantie = "NULL"; + if(prod.getGarantie() != null){ + Garantie = "'"+prod.getGarantie()+"'"; + } + String CodeBarre = "NULL"; + if(prod.getCodebarre()!= null){ + CodeBarre = "'"+prod.getCodebarre()+"'"; + } + + String req ="INSERT INTO `produit` (`reference`, `code_barre`, `designation`, `nomcategorie_cate`, `marque`, `garantie`, `prix_achat_ht`, `tva_achat`, `prix_achat_ttc`, `marge`, `prix_vente_ht`, `tva_vente`, `prix_vente_ttc`, `description`, `poids`, `couleur`, `dimension`, `vitesse`, `puissance`, `capacite`,`datecreation`) VALUES ('"+prod.getReference()+"', '"+prod.getCodebarre()+"', '"+Adaptateur.addSlashes(prod.getDesignation())+"', '"+prod.getCategorie()+"', '"+Adaptateur.addSlashes(prod.getMarque())+"', "+Garantie+", '"+prod.getPrixachatht().replace(',','.')+"', '"+prod.getTvaachat().replace(',','.')+"', '"+prod.getPrixachatttc().replace(',','.')+"', '"+prod.getMarge().replace(',','.')+"', '"+prod.getPrixventeht().replace(',','.')+"', '"+prod.getTvavente().replace(',','.')+"', '"+prod.getPrixventettc().replace(',','.')+"', '"+Adaptateur.addSlashes(prod.getDescription())+"', '"+prod.getPoids()+"', '"+prod.getCouleur()+"', '"+prod.getDimensions()+"', '"+prod.getVitesse()+"', '"+prod.getPuissance()+"', '"+prod.getCapacite()+"', CURDATE());"; + return cnx.insertion(req); + } + + public boolean verifyReferenceProduit(String ref) + { + boolean result = false ; + + if(cnx.ouverture()) + { + String sql="SELECT * FROM `produit` WHERE `reference` LIKE '"+Adaptateur.addSlashes(ref)+"';"; + + try { + ResultSet resultat = cnx.excutionquery(sql); + resultat.last(); //on place le curseur sur le dernier tuple + if(resultat.getRow()>0){ + result= true ; + } + } + catch (SQLException ex) { + result= false ; + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + } + + } + return result ; + } + + public boolean verifyCodeBarreProduit(String code_barre) + { + boolean result = false ; + + if(cnx.ouverture()) + { + String sql="SELECT * FROM `produit` WHERE `code_barre` = '"+Adaptateur.addSlashes(code_barre)+"';"; + + try { + ResultSet resultat = cnx.excutionquery(sql); + resultat.last(); //on place le curseur sur le dernier tuple + if(resultat.getRow()>0){ + result= true ; + } + } + catch (SQLException ex) { + result= false ; + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + } + } + return result ; + } +} diff --git a/src/main/java/Models/Reglement/CarteElectroniqueFrs.java b/src/main/java/Models/Reglement/CarteElectroniqueFrs.java new file mode 100644 index 0000000..e0a5a9f --- /dev/null +++ b/src/main/java/Models/Reglement/CarteElectroniqueFrs.java @@ -0,0 +1,81 @@ +/* + * 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.Reglement; + +/** + * + * @author Maher + */ +public class CarteElectroniqueFrs { + + private String CodeCarte; + private String NumeroTransaction; + private String NumeroCarte; + private String DateTransaction; + private String HeurTransaction; + private String Banque; + private String Mantant; + + + public String getCodeCarte() { + return CodeCarte; + } + + public void setCodeCarte(String CodeCarte) { + this.CodeCarte = CodeCarte; + } + + public String getNumeroTransaction() { + return NumeroTransaction; + } + + public void setNumeroTransaction(String NumeroTransaction) { + this.NumeroTransaction = NumeroTransaction; + } + + public String getNumeroCarte() { + return NumeroCarte; + } + + public void setNumeroCarte(String NumeroCarte) { + this.NumeroCarte = NumeroCarte; + } + + + public String getDateTransaction() { + return DateTransaction; + } + + public void setDateTransaction(String DateTransaction) { + this.DateTransaction = DateTransaction; + } + + public String getHeurTransaction() { + return HeurTransaction; + } + + public void setHeurTransaction(String HeurTransaction) { + this.HeurTransaction = HeurTransaction; + } + + public String getBanque() { + return Banque; + } + + public void setBanque(String Banque) { + this.Banque = Banque; + } + + public String getMantant() { + return Mantant; + } + + public void setMantant(String Mantant) { + this.Mantant = Mantant; + } + + +} diff --git a/src/main/java/Models/Reglement/ChequeFrs.java b/src/main/java/Models/Reglement/ChequeFrs.java new file mode 100644 index 0000000..632b78b --- /dev/null +++ b/src/main/java/Models/Reglement/ChequeFrs.java @@ -0,0 +1,109 @@ +/* + * 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.Reglement; + +import Models.User.Profile; + +/** + * + * @author Maher + */ +public class ChequeFrs { + + private String CodeChequeFrs ; + private String NumeroChequeFrs ; + private String BanqueChequeFrs ; + private String MontantChequeFrs ; + private String NomCompletChequeFrs ; + private String DatePaiement; + private String DateCreation; + private Profile profile; + + public ChequeFrs(String CodeChequeFrs, String NumeroChequeFrs, String BanqueChequeFrs, String MontantChequeFrs, String NomCompletChequeFrs, String DatePaiement, String DateCreation) { + this.CodeChequeFrs = CodeChequeFrs; + this.NumeroChequeFrs = NumeroChequeFrs; + this.BanqueChequeFrs = BanqueChequeFrs; + this.MontantChequeFrs = MontantChequeFrs; + this.NomCompletChequeFrs = NomCompletChequeFrs; + this.DatePaiement = DatePaiement; + this.DateCreation = DateCreation; + } + + + public ChequeFrs(){ + + } + + + + + public String getCodeChequeFrs() { + return CodeChequeFrs; + } + + public void setCodeChequeFrs(String CodeChequeFrs) { + this.CodeChequeFrs = CodeChequeFrs; + } + + public String getNumeroChequeFrs() { + return NumeroChequeFrs; + } + + public void setNumeroChequeFrs(String NumeroChequeFrs) { + this.NumeroChequeFrs = NumeroChequeFrs; + } + + public String getBanqueChequeFrs() { + return BanqueChequeFrs; + } + + public void setBanqueChequeFrs(String BanqueChequeFrs) { + this.BanqueChequeFrs = BanqueChequeFrs; + } + + public String getMontantChequeFrs() { + return MontantChequeFrs; + } + + public void setMontantChequeFrs(String MontantChequeFrs) { + this.MontantChequeFrs = MontantChequeFrs; + } + + public String getNomCompletChequeFrs() { + return NomCompletChequeFrs; + } + + public void setNomCompletChequeFrs(String NomCompletChequeFrs) { + this.NomCompletChequeFrs = NomCompletChequeFrs; + } + + public String getDatePaiement() { + return DatePaiement; + } + + public void setDatePaiement(String DatePaiement) { + this.DatePaiement = DatePaiement; + } + + public String getDateCreation() { + return DateCreation; + } + + public void setDateCreation(String DateCreation) { + this.DateCreation = DateCreation; + } + + public Profile getProfile() { + return profile; + } + + public void setProfile(Profile profile) { + this.profile = profile; + } + + + +} diff --git a/src/main/java/Models/Reglement/Reglement.java b/src/main/java/Models/Reglement/Reglement.java new file mode 100644 index 0000000..060f716 --- /dev/null +++ b/src/main/java/Models/Reglement/Reglement.java @@ -0,0 +1,192 @@ +/* + * 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.Reglement; + +import Controllers.Traitement.Adaptateur; +import Models.FactureFrs.FactureFrs; +import Models.Fournisseur.Fournisseur; +import Models.User.Profile; +import java.text.DecimalFormat; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author Maher + */ +public class Reglement { + + public String Numero; + public Fournisseur Fournisseur; + public ObservableList ListFacture; + public String DateTimeCreation; + public String Montant; + public String TypePaiement ; // 0 Comptant | 1 Facilité + public String ModePaiement; //0 :espace | 1:Chèque | 2 :carte bancaire | 3: Traite + public String EtatReglement; // 0:En Cour | 1:Payer | 2:Retart + public Profile Profile; + + //public + public CarteElectroniqueFrs Carte; + public ChequeFrs Cheque; + + public ObservableList ListCheque; + public ObservableList ListTraite; + + + public String getNumero() { + return Numero; + } + + public void setNumero(String Numero) { + this.Numero = Numero; + } + + public String getMontant() { + return Montant; + } + + public void setMontant(String Montant) { + this.Montant = Montant; + } + + + public String getEtatReglement() { + return EtatReglement; + } + + public void setEtatReglement(String EtatReglement) { + this.EtatReglement = EtatReglement; + } + + public CarteElectroniqueFrs getCarte() { + return Carte; + } + + public void setCarte(CarteElectroniqueFrs Carte) { + this.Carte = Carte; + } + + public ChequeFrs getCheque() { + return Cheque; + } + + public void setCheque(ChequeFrs Cheque) { + this.Cheque = Cheque; + } + + public ObservableList getListCheque() { + return ListCheque; + } + + + + public void setListCheque(ObservableList ListCheque) { + this.ListCheque = ListCheque; + } + + public ObservableList getListTraite() { + return ListTraite; + } + + public ObservableList getListTraiteString() { + ObservableList NewListTraite = FXCollections.observableArrayList(); + DecimalFormat Formatter = new DecimalFormat("##,###.## "); + for(TraiteFrs Trait : ListTraite) { + String DatePaiement = Adaptateur.NormalDateFormat(Trait.getDatePaiement()); + String DateCreation = Adaptateur.NormalDateTimeFormat(Trait.getDateCreation()); + String Montant = Formatter.format(Float.parseFloat(Trait.getMontant())); + NewListTraite.add(new TraiteFrs(Trait.getCodeTraiteClt(), DatePaiement, DateCreation, Montant, Trait.getProfile())); + } + return NewListTraite; + } + + public void setListTraite(ObservableList ListTraite) { + this.ListTraite = ListTraite; + } + + + + + public Fournisseur getFournisseur() { + return Fournisseur; + } + + public void setFournisseur(Fournisseur Fournisseur) { + this.Fournisseur = Fournisseur; + } + + public ObservableList getListFacture() { + return ListFacture; + } + + public void setListFacture(ObservableList ListFacture) { + this.ListFacture = ListFacture; + } + + public String getDateTimeCreation() { + return DateTimeCreation; + } + + public String getDateTimeCreationString() { + return Adaptateur.NormalDateTimeFormat(DateTimeCreation); + } + + public void setDateTimeCreation(String DateTimeCreation) { + this.DateTimeCreation = DateTimeCreation; + } + + + + public String getModePaiement() { + return ModePaiement; + } + + public String getModePaiementString() { + //0 :espace | 1:Chèque | 2 :carte bancaire | 3: Traite + if(ModePaiement.equals("0")){ + return "Espace"; + }else if(ModePaiement.equals("1")){ + return "Chèque"; + }else if(ModePaiement.equals("2")){ + return "Carte bancaire"; + }else if(ModePaiement.equals("3")){ + return "Traite"; + } + return ModePaiement; + } + + public void setModePaiement(String ModePaiement) { + this.ModePaiement = ModePaiement; + } + + public String getTypePaiement() { + return TypePaiement; + } + + // 0 Comptant | 1 Facilité + public String getTypePaiementString() { + if(TypePaiement.equals("0")){ + return "Comptant"; + }else{ + return "Facilité"; + } + } + + public void setTypePaiement(String TypePaiement) { + this.TypePaiement = TypePaiement; + } + + public Profile getProfile() { + return Profile; + } + + public void setProfile(Profile Profile) { + this.Profile = Profile; + } + + +} diff --git a/src/main/java/Models/Reglement/ReglementDB.java b/src/main/java/Models/Reglement/ReglementDB.java new file mode 100644 index 0000000..628a680 --- /dev/null +++ b/src/main/java/Models/Reglement/ReglementDB.java @@ -0,0 +1,508 @@ +/* + * 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.Reglement; + +import Controllers.Traitement.contro; +import Models.FactureFrs.FactureFrs; +import Models.FactureFrs.FactureFrsDB; +import Models.Fournisseur.Fournisseur; +import Models.Fournisseur.FournisseurDB; +import Models.User.Profile; +import Models.User.ProfileDB; +import Models.User.User; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author Maher + */ +public class ReglementDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + public Reglement setReglementDB(Reglement reglement){ + + String ModePaiement = "NULL"; + if(reglement.getModePaiement() != null){ + ModePaiement = reglement.getModePaiement(); + } + String Query = "INSERT INTO `reglement_frs` (`id_fourisseur`, `montant`, `date_creation`, `type_paiement`, `mode_paiement`, `etat_reglement`, `id_profile`) VALUES ('"+reglement.getFournisseur().getCode()+"', '"+reglement.getMontant().replace(",",".")+"', '"+reglement.getDateTimeCreation()+"', "+reglement.getTypePaiement()+", "+ModePaiement+", '"+reglement.getEtatReglement()+"', '"+User.idprofile+"');"; + String IdNumero = cnx.InsertGetLastId(Query); + reglement.setNumero(IdNumero); + + + String list_id_facture = ""; + for(FactureFrs facture : reglement.getListFacture() ) { + list_id_facture += facture.getIdFactureFrs()+","; + } + list_id_facture = list_id_facture.substring(0, list_id_facture.length()-1) + ""; + String QueryUpFact = "UPDATE `facture_frs` SET `id_reglement_frs` = '"+IdNumero+"' WHERE `facture_frs`.`id_facture_frs` IN ("+list_id_facture+");"; + cnx.MettreAJour(QueryUpFact); + + if(reglement.getTypePaiement().equals("0")){ + if(reglement.getModePaiement().equals("1")){ + ChequeFrs Cheque = this.setChequeDB(reglement.getCheque(), IdNumero); + reglement.setCheque(Cheque); + }else if(reglement.getModePaiement().equals("2")){ + CarteElectroniqueFrs CarteElectronique = this.setCarteElectroniqueDB(reglement.getCarte(), IdNumero); + reglement.setCarte(CarteElectronique); + } + } + + if(reglement.getTypePaiement().equals("1")){ + + // 1 Cheque + if(reglement.getModePaiement().equals("1")){ + this.setListChequeDB(reglement.getListCheque(), IdNumero); + + // 3 Traite + }else if(reglement.getModePaiement().equals("3")){ + this.setListTraiteDB(reglement.getListTraite(), IdNumero); + } + } + return reglement; + } + + public ObservableList SearchGestionReglementGestion(Integer debut, Integer nbr, String Numero, String IdFournisseur, String Montant, String DatePayer, String TypeRegement, String Paiement){ + + ObservableList ListReglement = FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(Numero)){ + Where += " (R.`id_reglement_frs` = \""+Numero+"\") AND "; + } + + if(!clt.isStringNull(IdFournisseur)){ + Where += " (R.`id_fourisseur` = \""+IdFournisseur+"\") AND "; + } + + if(!clt.isStringNull(Montant)){ + Where += " (R.`montant` = \""+Montant+"\") AND "; + } + + if(!clt.isStringNull(DatePayer)){ + Where += " (DATE(R.`date_creation`) = \""+DatePayer+"\") AND "; + } + + if(!clt.isStringNull(TypeRegement)){ + Where += " (R.`type_paiement` = \""+TypeRegement+"\") AND "; + } + + if(!clt.isStringNull(Paiement)){ + Where += " (R.`mode_paiement` = \""+Paiement+"\") AND "; + } + + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE (F.id_fourisseur = R.id_fourisseur) AND " + Where; + }else{ + Where =" WHERE (F.id_fourisseur = R.id_fourisseur) "; + } + + String req="SELECT *, DATE_FORMAT(date_creation, '%d/%m/%Y %H:%i') as date_creat " + + " FROM reglement_frs R, fournisseur F " + + Where + + " ORDER BY id_reglement_frs 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() ) { + Reglement reglement = new Reglement(); + + reglement.setNumero(resultat.getString("id_reglement_frs")); + + Fournisseur fournisseur = new Fournisseur(); + fournisseur.setCode(resultat.getString("id_fourisseur")); + fournisseur.setNom(resultat.getString("nom")); + fournisseur.setAdresse(resultat.getString("adresse")); + fournisseur.setFormes(resultat.getString("formes")); + fournisseur.setTele1(resultat.getString("tele1")); + fournisseur.setTele2(resultat.getString("tele2")); + fournisseur.setFax(resultat.getString("fax")); + fournisseur.setMail(resultat.getString("mail")); + fournisseur.setSiteWeb(resultat.getString("site_web")); + fournisseur.setSpecialite(resultat.getString("specialite")); + reglement.setFournisseur(fournisseur); + + reglement.setMontant(resultat.getString("montant")); + reglement.setDateTimeCreation(resultat.getString("date_creat")); + reglement.setTypePaiement(resultat.getString("type_paiement")); + reglement.setModePaiement(resultat.getString("mode_paiement")); + reglement.setEtatReglement(resultat.getString("etat_reglement")); + + Profile profile = new Profile(); + profile.setIdprofile(resultat.getInt("id_profile")); + reglement.setProfile(profile); + + ListReglement.add(reglement); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return ListReglement; + } + + public Integer nbrGestionReglementGestion(String Numero, String IdFournisseur, String Montant, String DatePayer, String TypeRegement, String Paiement) + { + String Where = ""; + + if(!clt.isStringNull(Numero)){ + Where += " (`id_reglement_frs` = \""+Numero+"\") AND "; + } + + if(!clt.isStringNull(IdFournisseur)){ + Where += " (`id_fourisseur` = \""+IdFournisseur+"\") AND "; + } + + if(!clt.isStringNull(Montant)){ + Where += " (`montant` = \""+Montant+"\") AND "; + } + + if(!clt.isStringNull(DatePayer)){ + Where += " (DATE(`date_creation`) = \""+DatePayer+"\") AND "; + } + + if(!clt.isStringNull(TypeRegement)){ + Where += " (`type_paiement` = \""+TypeRegement+"\") AND "; + } + + if(!clt.isStringNull(Paiement)){ + Where += " (`mode_paiement` = \""+Paiement+"\") AND "; + } + + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req=" SELECT COUNT(`id_reglement_frs`) " + + " FROM `facture_frs` " + + 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 ; + } + + /*public ObservableList getDataReglement(String tab,String mot, Integer debut, Integer nbr){ + + ObservableList ListReglement = FXCollections.observableArrayList(); + + String Limit = ""; + if(debut != null || nbr!= null){ + Limit = "LIMIT "+debut+" , "+nbr; + } + String req="SELECT *, DATE_FORMAT(date_creation, '%d/%m/%Y %H:%i') as date_creat FROM reglement_frs R, fournisseur F WHERE (F.id_fourisseur = R.id_fourisseur) AND ("+tab+" "+mot+") ORDER BY id_reglement_frs DESC "+Limit+" ;"; + + + 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() ) { + Reglement reglement = new Reglement(); + + reglement.setNumero(resultat.getString("id_reglement_frs")); + + //Fournisseur Frs = new FournisseurDB().GetFournisseurDB(resultat.getString("id_fourisseur")); + //Facture.setFournisseur(Frs); + Fournisseur fournisseur = new Fournisseur(); + fournisseur.setCode(resultat.getString("id_fourisseur")); + fournisseur.setNom(resultat.getString("nom")); + fournisseur.setAdresse(resultat.getString("adresse")); + fournisseur.setFormes(resultat.getString("formes")); + fournisseur.setTele1(resultat.getString("tele1")); + fournisseur.setTele2(resultat.getString("tele2")); + fournisseur.setFax(resultat.getString("fax")); + fournisseur.setMail(resultat.getString("mail")); + fournisseur.setSiteWeb(resultat.getString("site_web")); + fournisseur.setSpecialite(resultat.getString("specialite")); + reglement.setFournisseur(fournisseur); + + reglement.setMontant(resultat.getString("montant")); + reglement.setDateTimeCreation(resultat.getString("date_creat")); + reglement.setTypePaiement(resultat.getString("type_paiement")); + reglement.setModePaiement(resultat.getString("mode_paiement")); + reglement.setEtatReglement(resultat.getString("etat_reglement")); + + Profile profile = new Profile(); + profile.setIdprofile(resultat.getInt("id_profile")); + reglement.setProfile(profile); + + ListReglement.add(reglement); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return ListReglement; + } + + public String nbrReglementFrs(String tab, String mot){ + + String req = "SELECT count(*) FROM reglement_frs R, fournisseur F WHERE (F.id_fourisseur = R.id_fourisseur) AND ("+tab+" "+mot+") ;"; + + int sommme =0; + if(cnx.ouverture()){ + try{ + + 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 Integer.toString(sommme) ; + }*/ + + public Reglement getReglementDB(String IdReglement){ + Reglement reglement = new Reglement(); + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery("SELECT * FROM `reglement_frs` WHERE `id_reglement_frs` = "+IdReglement+" ;"); + //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){ + reglement.setNumero(resultat.getString("id_reglement_frs")); + reglement.setMontant(resultat.getString("montant")); + reglement.setDateTimeCreation(resultat.getString("date_creation")); + reglement.setTypePaiement(resultat.getString("type_paiement")); + reglement.setModePaiement(resultat.getString("mode_paiement")); + reglement.setEtatReglement(resultat.getString("etat_reglement")); + + reglement.setFournisseur(new FournisseurDB().GetFournisseurDB(resultat.getString("id_fourisseur"))); + reglement.setProfile(new ProfileDB().getpro(resultat.getInt("id_profile"))); + + reglement.setListFacture(new FactureFrsDB().getFactureByIdReglement(resultat.getString("id_reglement_frs"))); + + if(reglement.getTypePaiement().equals("0")){ + if(reglement.getModePaiement().equals("1")){ + reglement.setCheque(this.getChequeDB(IdReglement)); + }else if(reglement.getModePaiement().equals("2")){ + reglement.setCarte(this.getCarteElectroniqueDB(IdReglement)); + } + }else if(reglement.getTypePaiement().equals("1")){ + // 1 Cheque + if(reglement.getModePaiement().equals("1")){ + reglement.setListCheque(this.getListChequeDB(IdReglement)); + + // 3 Traite + }else if(reglement.getModePaiement().equals("3")){ + reglement.setListTraite(this.getListTraiteDB(IdReglement)); + } + } + + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return reglement; + } + + + public void setListChequeDB(ObservableList ListCheque, String IdReglement){ + String ListValue = ""; + for(ChequeFrs Cheque : ListCheque ) { + String NomComplet = "NULL"; + if(Cheque.getNomCompletChequeFrs() != null){ + NomComplet = "'"+Cheque.getNomCompletChequeFrs()+"'"; + } + ListValue += "('"+IdReglement+"', '"+Cheque.getNumeroChequeFrs()+"', '"+Cheque.getBanqueChequeFrs()+"', '"+Cheque.getMontantChequeFrs().replace(",",".")+"', "+NomComplet+", '"+Cheque.getDatePaiement()+"', CURTIME() ),"; + } + ListValue = ListValue.substring(0, ListValue.length()-1) + ";"; + + String Query = "INSERT INTO `cheque_frs` (`id_reglement_frs`, `numero`, `banque`, `montant`, `nom_complet`, `date_paiement`, `date_creation`) VALUES "+ListValue; + + cnx.insertion(Query); + } + + public ObservableList getListChequeDB(String IdReglement){ + ObservableList ListCheque = FXCollections.observableArrayList(); + String req = "SELECT * FROM `cheque_frs` WHERE `id_reglement_frs` = "+IdReglement+";"; //local avec la quel appartient l'utilisateur + if(cnx.ouverture()){ + try{ + /* Exécution d'une requête de lecture */ + ResultSet resultat = cnx.excutionquery(req); + resultat.last();//on place le curseur sur le dernier tuple + int nombreLignes = resultat.getRow(); //on récupère le numéro de la ligne + if(nombreLignes>0){ + resultat.beforeFirst();//on repace le curseur avant la première ligne + while ( resultat.next() ) { + String CodeChequeFrs = resultat.getString("id_cheque_frs"); + String NumeroChequeFrs = resultat.getString("numero"); + String BanqueChequeFrs = resultat.getString("banque"); + String MontantChequeFrs = resultat.getString("montant"); + String NomCompletChequeFrs = resultat.getString("nom_complet"); + String DatePaiement = resultat.getString("date_paiement"); + String DateCreation = resultat.getString("date_creation"); + ListCheque.add(new ChequeFrs(CodeChequeFrs, NumeroChequeFrs, BanqueChequeFrs, MontantChequeFrs, NomCompletChequeFrs, DatePaiement, DateCreation)); + } + } + } catch (SQLException ex) { + Logger.getLogger(ReglementDB.class.getName()).log(Level.SEVERE, null, ex); + } + } + return ListCheque; + } + + public void setListTraiteDB(ObservableList ListTraite, String IdReglement){ + String ListValue = ""; + for(TraiteFrs Traite : ListTraite ) { + ListValue += "('"+IdReglement+"', '"+Traite.getMontant().replace(",",".")+"', '"+Traite.getDatePaiement()+"', CURTIME()),"; + } + ListValue = ListValue.substring(0, ListValue.length()-1) + ";"; + + String Query = "INSERT INTO `traite_frs` (`id_reglement_frs`, `montant`, `date_paiement`, `date_creation`) VALUES "+ListValue; + + cnx.insertion(Query); + } + + public ObservableList getListTraiteDB(String IdReglement){ + ObservableList ListTraite = FXCollections.observableArrayList(); + String req = "SELECT * FROM `traite_frs` WHERE `id_reglement_frs` = "+IdReglement+";"; //local avec la quel appartient l'utilisateur + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery(req); /* Exécution d'une requête de lecture */ + resultat.last();//on place le curseur sur le dernier tuple + int nombreLignes = resultat.getRow(); //on récupère le numéro de la ligne + if(nombreLignes>0){ + resultat.beforeFirst();//on repace le curseur avant la première ligne + while ( resultat.next() ) { + String CodeTraiteClt = resultat.getString("id_traite_frs"); + String DatePaiement = resultat.getString("date_paiement"); + String DateCreation = resultat.getString("date_creation"); + String Montant = resultat.getString("montant"); + ListTraite.add(new TraiteFrs(CodeTraiteClt, DatePaiement, DateCreation, Montant, null)); + } + } + } catch (SQLException ex) { + System.err.println(req); + System.err.println(ex.toString()); + } + } + return ListTraite; + } + + public ChequeFrs setChequeDB(ChequeFrs Cheque, String IdReglement){ + String Query = "INSERT INTO `cheque_frs` (`id_reglement_frs`, `numero`, `banque`, `montant`, `nom_complet`, `date_paiement`, `date_creation`) VALUES ('"+IdReglement+"', '"+Cheque.getNumeroChequeFrs()+"', '"+Cheque.getBanqueChequeFrs()+"', '"+Cheque.getMontantChequeFrs().replace(",",".")+"', '"+Cheque.getNomCompletChequeFrs()+"', '"+Cheque.getDatePaiement()+"', CURTIME() )"; + String IdCheque= cnx.InsertGetLastId(Query); + Cheque.setCodeChequeFrs(IdCheque); + return Cheque; + } + + public ChequeFrs getChequeDB(String IdReglement){ + ChequeFrs Cheque = new ChequeFrs(); + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery("SELECT * FROM `cheque_frs` WHERE `id_reglement_frs` = "+IdReglement+";"); + //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){ + Cheque.setCodeChequeFrs(resultat.getString("id_cheque_frs")); + Cheque.setNumeroChequeFrs(resultat.getString("numero")); + Cheque.setBanqueChequeFrs(resultat.getString("banque")); + Cheque.setMontantChequeFrs(resultat.getString("montant")); + Cheque.setNomCompletChequeFrs(resultat.getString("nom_complet")); + Cheque.setDatePaiement(resultat.getString("date_paiement")); + Cheque.setDateCreation(resultat.getString("date_creation")); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + + return Cheque; + } + + public CarteElectroniqueFrs setCarteElectroniqueDB(CarteElectroniqueFrs CarteElectronique, String IdReglement){ + String Query = "INSERT INTO `carte_electronique_frs` (`id_reglement_frs`, `numero_transaction`, `numero_carte`, `date_transaction`, `banque`, `montant`) VALUES ('"+IdReglement+"', '"+CarteElectronique.getNumeroTransaction()+"', '"+CarteElectronique.getCodeCarte()+"', '"+CarteElectronique.getDateTransaction()+" "+CarteElectronique.getHeurTransaction()+"', '"+CarteElectronique.getBanque()+"', '"+CarteElectronique.getMantant().replace(",",".")+"')"; + String IdCart = cnx.InsertGetLastId(Query); + CarteElectronique.setCodeCarte(IdCart); + return CarteElectronique; + } + + public CarteElectroniqueFrs getCarteElectroniqueDB(String IdReglement){ + CarteElectroniqueFrs CarteElectronique = new CarteElectroniqueFrs(); + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery("SELECT *, DATE_FORMAT(date_transaction, '%d/%m/%Y') as date_trans, DATE_FORMAT(date_transaction, '%H:%i') as heur_trans FROM `carte_electronique_frs` WHERE `id_reglement_frs` = "+IdReglement+";"); + //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){ + CarteElectronique.setCodeCarte(resultat.getString("id_carte_electronique_frs")); + CarteElectronique.setNumeroTransaction(resultat.getString("numero_transaction")); + CarteElectronique.setNumeroCarte(resultat.getString("numero_carte")); + CarteElectronique.setHeurTransaction(resultat.getString("heur_trans")); + CarteElectronique.setDateTransaction(resultat.getString("date_trans")); + CarteElectronique.setBanque(resultat.getString("banque")); + CarteElectronique.setMantant(resultat.getString("montant")); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + + return CarteElectronique; + } + +} diff --git a/src/main/java/Models/Reglement/TraiteFrs.java b/src/main/java/Models/Reglement/TraiteFrs.java new file mode 100644 index 0000000..cf910eb --- /dev/null +++ b/src/main/java/Models/Reglement/TraiteFrs.java @@ -0,0 +1,75 @@ +/* + * 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.Reglement; + +import Models.User.Profile; + +/** + * + * @author Maher + */ +public class TraiteFrs { + + private String CodeTraiteClt; + private String DatePaiement; + private String DateCreation; + private String Montant; + public Profile Profile; + + + + public TraiteFrs(String CodeTraiteClt, String DatePaiement, String DateCreation, String Montant, Profile Profile) { + this.CodeTraiteClt = CodeTraiteClt; + this.DatePaiement = DatePaiement; + this.DateCreation = DateCreation; + this.Montant = Montant; + this.Profile = Profile; + } + + + + public String getCodeTraiteClt() { + return CodeTraiteClt; + } + + public void setCodeTraiteClt(String CodeTraiteClt) { + this.CodeTraiteClt = CodeTraiteClt; + } + + public String getDatePaiement() { + return DatePaiement; + } + + public void setDatePaiement(String DatePaiement) { + this.DatePaiement = DatePaiement; + } + + public String getDateCreation() { + return DateCreation; + } + + public void setDateCreation(String DateCreation) { + this.DateCreation = DateCreation; + } + + public String getMontant() { + return Montant; + } + + public void setMontant(String Montant) { + this.Montant = Montant; + } + + public Profile getProfile() { + return Profile; + } + + public void setProfile(Profile Profile) { + this.Profile = Profile; + } + + +} diff --git a/src/main/java/Models/Stock/BonEntree.java b/src/main/java/Models/Stock/BonEntree.java new file mode 100644 index 0000000..a4f8eac --- /dev/null +++ b/src/main/java/Models/Stock/BonEntree.java @@ -0,0 +1,84 @@ +/* + * 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.Stock; +import Controllers.Stock.ListProduitBon; +import java.sql.Date; +import java.sql.Time; +import javafx.collections.ObservableList; + +/** + * + * @author Maher + */ +public class BonEntree { + + private String id ; + private Date date ; + private Time heur ; + private String local_emetteur; + private String local_recepteur; + private String transporteur ; + private ObservableList Liste_prod ; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public Time getHeur() { + return heur; + } + + public void setHeur(Time heur) { + this.heur = heur; + } + + public String getLocal_emetteur() { + return local_emetteur; + } + + public void setLocal_emetteur(String local_emetteur) { + this.local_emetteur = local_emetteur; + } + + public String getLocal_recepteur() { + return local_recepteur; + } + + public void setLocal_recepteur(String local_recepteur) { + this.local_recepteur = local_recepteur; + } + + public String getTransporteur() { + return transporteur; + } + + public void setTransporteur(String transporteur) { + this.transporteur = transporteur; + } + + public ObservableList getListe_prod() { + return Liste_prod; + } + + public void setListe_prod(ObservableList Liste_prod) { + this.Liste_prod = Liste_prod; + } + + + +} diff --git a/src/main/java/Models/Stock/BonEntreeListeProd.java b/src/main/java/Models/Stock/BonEntreeListeProd.java new file mode 100644 index 0000000..88c1efa --- /dev/null +++ b/src/main/java/Models/Stock/BonEntreeListeProd.java @@ -0,0 +1,64 @@ +/* + * 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.Stock; + +import java.math.BigInteger; + +/** + * + * @author Maher + */ +public class BonEntreeListeProd { + + private BigInteger id_bon_enter ; + private String reference_prod; + private Integer quantite ; + private Integer tva ; + private Float prix_venttc ; + + public BigInteger getId_bon_enter() { + return id_bon_enter; + } + + public void setId_bon_enter(BigInteger id_bon_enter) { + this.id_bon_enter = id_bon_enter; + } + + public String getReference_prod() { + return reference_prod; + } + + public void setReference_prod(String reference_prod) { + this.reference_prod = reference_prod; + } + + public Integer getQuantite() { + return quantite; + } + + public void setQuantite(Integer quantite) { + this.quantite = quantite; + } + + public Integer getTva() { + return tva; + } + + public void setTva(Integer tva) { + this.tva = tva; + } + + public Float getPrix_venttc() { + return prix_venttc; + } + + public void setPrix_venttc(Float prix_venttc) { + this.prix_venttc = prix_venttc; + } + + + +} diff --git a/src/main/java/Models/Stock/BonSortie.java b/src/main/java/Models/Stock/BonSortie.java new file mode 100644 index 0000000..2d330a3 --- /dev/null +++ b/src/main/java/Models/Stock/BonSortie.java @@ -0,0 +1,81 @@ +/* + * 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.Stock; + +import Controllers.Stock.ListProduitBon; +import java.sql.Date; +import java.sql.Time; +import javafx.collections.ObservableList; + +/** + * + * @author PC-Maher + */ +public class BonSortie { + private String id ; + private Date date ; + private Time heur ; + private String local_emetteur; + private String local_recepteur; + private String transporteur ; + private ObservableList Liste_prod ; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public Time getHeur() { + return heur; + } + + public void setHeur(Time heur) { + this.heur = heur; + } + + public String getLocal_emetteur() { + return local_emetteur; + } + + public void setLocal_emetteur(String local_emetteur) { + this.local_emetteur = local_emetteur; + } + + public String getLocal_recepteur() { + return local_recepteur; + } + + public void setLocal_recepteur(String local_recepteur) { + this.local_recepteur = local_recepteur; + } + + public String getTransporteur() { + return transporteur; + } + + public void setTransporteur(String transporteur) { + this.transporteur = transporteur; + } + + public ObservableList getListe_prod() { + return Liste_prod; + } + + public void setListe_prod(ObservableList Liste_prod) { + this.Liste_prod = Liste_prod; + } +} diff --git a/src/main/java/Models/Stock/BondeEntrerDB.java b/src/main/java/Models/Stock/BondeEntrerDB.java new file mode 100644 index 0000000..8a24279 --- /dev/null +++ b/src/main/java/Models/Stock/BondeEntrerDB.java @@ -0,0 +1,216 @@ +/* + * 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.Stock; + + +import Controllers.Stock.BondeEntrerDetailController; +import Controllers.Stock.ListProduitBon; +import Controllers.Stock.ListProduitRech; +import Controllers.Traitement.Adaptateur; +import static Controllers.Traitement.Adaptateur.StringToFloat; +import Controllers.Traitement.contro; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author Maher Ben Tili + */ +public class BondeEntrerDB { + + connexion cnx = new connexion(); + + contro clt = new contro(); + + public ObservableList getdataProdBE(String Reference, String Designation, String CodeBarre, String Category) + { + ObservableList data= FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(Reference)){ + Where += " (reference LIKE \"%"+Adaptateur.addSlashes(Reference)+"%\") AND "; + } + + if(!clt.isStringNull(Category)){ + Where += " (nomcategorie_cate LIKE \"%"+Adaptateur.addSlashes(Category)+"%\") AND "; + } + + if(!clt.isStringNull(CodeBarre)){ + Where += " (code_barre = '"+Adaptateur.addSlashes(CodeBarre)+"') AND "; + } + + if(!clt.isStringNull(Designation)){ + Where += " (designation LIKE \"%"+Adaptateur.addSlashes(Designation)+"%\") AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req = "SELECT * FROM `produit` "+Where+" ORDER BY `datecreation` DESC ;"; + + 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() ) { + String reference = resultat.getString("reference"); + String designation=resultat.getString("designation"); + String marque =resultat.getString("marque"); + String nomcategorie =resultat.getString("nomcategorie_cate"); + String prixttc =resultat.getString("prix_vente_ttc"); + String TVA =resultat.getString("tva_vente"); + data.add(new ListProduitRech(reference, designation, marque, nomcategorie, prixttc, TVA, "")); + + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return data ; + } + + + public boolean VerifyIdBonEnter(String idbonenter){ + //true id exsiste false n'exsiste pas + boolean result = false ; + if(cnx.ouverture()){ + String sql="SELECT * FROM `entre` WHERE `id_entre` = "+idbonenter+" ;"; + + try { + ResultSet resultat = cnx.excutionquery(sql); + resultat.last(); //on place le curseur sur le dernier tuple + if(resultat.getRow()>0){ + result= true ; + } + } + catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + } + } + return result ; + } + + + /******************************Insertion Bon d'entrée************************************************/ + // 1) il faut insérer la bon enter table "enter" + // 2) il faut insérer la liste des produits qui corsponder à la bon d'enter table "liste_produit_entre" + // 3) appéle à la fonction PLSQL "addBonEntrer" qui se charge a insérer les données à les table suivant: + // 3.1) insertion dans la table "liste_produit_entre" + // 3.2) insertion dans la table "detail_stock" + // 3.2) insertion dans la table "detail_entre" les données 'idBonEnter', LAST_INSERT_ID de 'detail_stock' + // 3.3) update ou insertion les produit à la table "stock" + // 3.4) Si le traitement est effectuer comme prévu la fonction "addBonEntrer" retourne 4 + + public boolean addBonEntrer(BonEntree mybe, ObservableList data){ + Boolean result= false ; + String req = "INSERT INTO `entre` (`id_entre`, `date`, `heur`, `local_emetteur`, `local_recepteur`, `transporteur`) VALUES ('"+mybe.getId()+"', '"+mybe.getDate().toString()+"', CURTIME(), '"+mybe.getLocal_emetteur()+"', '"+mybe.getLocal_recepteur()+"', '"+mybe.getTransporteur()+"');"; + if(cnx.ouverture()){ + String IdEnter = cnx.InsertGetLastId(req); + if(IdEnter != null){ + + String Query = "INSERT INTO liste_produit_entre (id_bon_entre, reference_produit, designation ,quantite, tva, prix_vente_ttc) VALUE "; + + ObservableList ListStockDetail=FXCollections.observableArrayList(); + + for(ListProduitBon listeprod : data){ + String TVA =listeprod.getTva().replace("%","").replace(",","."); + String TotalTTC= listeprod.getPrixttc().replace(",","."); + Query = Query + "("+IdEnter+", '"+listeprod.getReference()+"', \""+listeprod.getDesignaton()+"\", "+listeprod.getQuantite()+", "+TVA+", '"+TotalTTC+"'),"; + + ListStockDetail.add(new StockDetail(listeprod.getReference(), StringToFloat(listeprod.getQuantite()), IdEnter, null, null, null, null, null)); + } + Query = Query.substring(0, Query.length()-1)+";"; + + result = cnx.insertion(Query); + + new StockDetailDB().InsertStockDetail(ListStockDetail); + + BondeEntrerDetailController.id_bondentree = mybe.getId() ; + } + } + + return result; + } + + + /******************************get Bon d'entrée************************************************/ + + public BonEntree getBonEntree(String id_BonEntree){ + BonEntree bonenter = new BonEntree(); + String req = "SELECT * FROM `entre` WHERE `id_entre` = "+id_BonEntree+" ;"; + 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() ) { + bonenter.setId(resultat.getString("id_entre")); + bonenter.setDate(resultat.getDate("date")); + bonenter.setHeur(resultat.getTime("heur")); + bonenter.setLocal_emetteur(resultat.getString("local_emetteur")); + bonenter.setLocal_recepteur(resultat.getString("local_recepteur")); + bonenter.setTransporteur(resultat.getString("transporteur")); + } + + ///Pour La liste des Produits + String reqPro = "SELECT * FROM `liste_produit_entre` , `produit` WHERE `reference`=`reference_produit` AND `id_bon_entre`= "+id_BonEntree+" ;"; + ResultSet resultatListePro = cnx.excutionquery(reqPro); + resultatListePro.last(); + resultatListePro.beforeFirst(); + ObservableList data=FXCollections.observableArrayList(); + while ( resultatListePro.next() ) { + String reference = resultatListePro.getString("reference_produit"); + String designation=resultatListePro.getString("designation"); + String quantite =resultatListePro.getString("quantite"); + String marque =resultatListePro.getString("marque"); + String nomcategorie =resultatListePro.getString("nomcategorie_cate"); + String tva =resultatListePro.getString("tva_vente"); + String prix_vente_ttc =resultatListePro.getString("prix_vente_ttc"); + data.add(new ListProduitBon(reference, designation, marque, nomcategorie, prix_vente_ttc, quantite, tva)); + + } + bonenter.setListe_prod(data); + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return bonenter ; + } + + + + +} diff --git a/src/main/java/Models/Stock/BondeSortieDB.java b/src/main/java/Models/Stock/BondeSortieDB.java new file mode 100644 index 0000000..93348d5 --- /dev/null +++ b/src/main/java/Models/Stock/BondeSortieDB.java @@ -0,0 +1,191 @@ +/* + * 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.Stock; + +import Controllers.Stock.BondeSortieDetailController; +import Controllers.Stock.ListProduitBon; +import Controllers.Stock.ListProduitRech; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author Maher + */ +public class BondeSortieDB { + + connexion cnx = new connexion(); + + + public ObservableList getdataProdBS(String ref, String desig, String codeBarre, String catego, boolean StockNegative){ + ObservableList data=FXCollections.observableArrayList(); + + String req="SELECT p.reference, p.designation, p.marque, p.nomcategorie_cate, p.tva_vente, p.nomcategorie_cate, p.prix_vente_ttc, s.quantite " + + "FROM stock AS s , produit AS p " + + "WHERE p.reference = s.produit_reference AND local_nom = '"+ParametreSystem.NomLocalPC+"' AND (s.quantite > 0) AND (p.reference LIKE '%"+Adaptateur.addSlashes(ref)+"%') AND (p.nomcategorie_cate LIKE '%"+Adaptateur.addSlashes(catego)+"%') AND (p.designation LIKE '%"+Adaptateur.addSlashes(desig)+"%') AND (p.code_barre = '"+Adaptateur.addSlashes(codeBarre)+"') ORDER BY p.datecreation DESC ;"; + + if(StockNegative){ + req="SELECT p.reference, p.designation, p.marque, p.nomcategorie_cate, p.tva_vente, p.nomcategorie_cate, p.prix_vente_ttc, IFNULL(s.quantite,0) AS quantite " + + "FROM produit p LEFT JOIN stock s ON p.reference = s.produit_reference " + + "WHERE p.reference LIKE '%"+Adaptateur.addSlashes(ref)+"%' AND p.nomcategorie_cate LIKE '%"+Adaptateur.addSlashes(catego)+"%' AND p.designation LIKE '%"+Adaptateur.addSlashes(desig)+"%' AND (p.code_barre = '"+Adaptateur.addSlashes(codeBarre)+"') ORDER BY p.datecreation DESC ;"; + } + + 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() ) { + String reference = resultat.getString("reference"); + String designation=resultat.getString("designation"); + String marque =resultat.getString("marque"); + String nomcategorie =resultat.getString("nomcategorie_cate"); + String prixttc =resultat.getString("prix_vente_ttc"); + String TVA =resultat.getString("tva_vente"); + String quantite =resultat.getString("quantite"); + data.add(new ListProduitRech(reference, designation, marque, nomcategorie, prixttc, TVA, quantite)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return data ; + } + + public int GetQuantiteStock(String Reference){ + String req = "SELECT quantite FROM stock WHERE produit_reference = '"+Reference+"' AND local_nom = '"+ParametreSystem.NomLocalPC+"' ;"; + Integer q = 0 ; + if(cnx.ouverture()){ + try { + ResultSet resultat = cnx.excutionquery(req); + resultat.last(); //on place le curseur sur le dernier tuple + if(resultat.getRow()>0){ + q = resultat.getInt("quantite"); + } + } + catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return q ; + } + + /******************************get Bon de Sortie************************************************/ + + public BonSortie getBonSortie(String id_BonSortie){ + BonSortie bonsortie = new BonSortie(); + + String req = "SELECT * FROM `sortie` WHERE `id_sortie` = "+id_BonSortie+" AND local_emetteur = '"+ParametreSystem.NomLocalPC+"' ;"; + if(cnx.ouverture()){ + + try{ + /* Exécution d'une requête de lecture */ + ResultSet resultat = cnx.excutionquery(req); + + resultat.last(); //on place le curseur sur le dernier tuple + + //on récupère le numéro de la ligne + int nombreLignes = resultat.getRow(); + + if(nombreLignes>0){ + + bonsortie.setId(resultat.getString("id_sortie")); + bonsortie.setDate(resultat.getDate("date")); + bonsortie.setHeur(resultat.getTime("heur")); + bonsortie.setLocal_emetteur(resultat.getString("local_emetteur")); + bonsortie.setLocal_recepteur(resultat.getString("local_recepteur")); + bonsortie.setTransporteur(resultat.getString("transporteur")); + + ///Pour La liste des Produits + String reqPro = "SELECT * FROM `liste_produit_sortie` , `produit` WHERE `reference`=`reference_produit` AND `id_bon_sortie`= "+id_BonSortie+" ;"; + ResultSet resultatListePro = cnx.excutionquery(reqPro); + resultatListePro.last(); + resultatListePro.beforeFirst(); + ObservableList data=FXCollections.observableArrayList(); + while ( resultatListePro.next() ) { + String reference = resultatListePro.getString("reference_produit"); + String designation=resultatListePro.getString("designation"); + Integer quantite =resultatListePro.getInt("quantite"); + quantite = quantite * -1 ; + String marque =resultatListePro.getString("marque"); + String nomcategorie =resultatListePro.getString("nomcategorie_cate"); + String tva =resultatListePro.getString("tva_vente"); + String prix_vente_ttc =resultatListePro.getString("prix_vente_ttc"); + data.add(new ListProduitBon(reference, designation, marque, nomcategorie, prix_vente_ttc, quantite.toString(), tva)); + } + bonsortie.setListe_prod(data); + } + + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return bonsortie ; + } + + + + public boolean addBonSortie(BonSortie mybe){ + Boolean result= false ; + String req = "INSERT INTO `sortie` (`date`, `heur`, `local_emetteur`, `local_recepteur`, `transporteur`) VALUES ('"+mybe.getDate().toString()+"', CURTIME(), '"+mybe.getLocal_emetteur()+"', '"+mybe.getLocal_recepteur()+"', '"+mybe.getTransporteur()+"');"; + if(cnx.ouverture()){ + String IdSortie = cnx.InsertGetLastId(req); + if(!IdSortie.isEmpty()){ + + String Query = "INSERT INTO liste_produit_sortie (id_bon_sortie, reference_produit, designation, quantite, tva, prix_vente_ttc) VALUES "; + + ObservableList ListStockDetail=FXCollections.observableArrayList(); + + for(ListProduitBon listeprod : mybe.getListe_prod()){ + String TVA =listeprod.getTva().replace("%","").replace(",","."); + String TotalTTC= listeprod.getPrixttc().replace(",","."); + Float NewQuantite= Adaptateur.StringToFloat(listeprod.getQuantite()) * -1; + Query = Query + "("+IdSortie+", '"+listeprod.getReference()+"', \""+listeprod.getDesignaton()+"\", "+NewQuantite+", "+TVA+", '"+TotalTTC+"'),"; + + ListStockDetail.add(new StockDetail(listeprod.getReference(), NewQuantite, null, IdSortie, null, null, null, null)); + + } + Query = Query.substring(0, Query.length()-1)+";"; + + result = cnx.insertion(Query); + + new StockDetailDB().InsertStockDetail(ListStockDetail); + + BondeSortieDetailController.id_bonsortie = IdSortie ; + } + } + + return result; + } + + + + + + + + + +} diff --git a/src/main/java/Models/Stock/ListeMouvement.java b/src/main/java/Models/Stock/ListeMouvement.java new file mode 100644 index 0000000..305769c --- /dev/null +++ b/src/main/java/Models/Stock/ListeMouvement.java @@ -0,0 +1,49 @@ +/* + * 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.Stock; + +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class ListeMouvement { + + private final SimpleStringProperty Code; + private final SimpleStringProperty Type; + private final SimpleStringProperty Mouvement; + private final SimpleStringProperty Quantite; + private final SimpleStringProperty Date; + + public ListeMouvement(String code, String type, String mouvement, String quantite, String date){ + this.Code = new SimpleStringProperty(code); + this.Type = new SimpleStringProperty(type); + this.Mouvement = new SimpleStringProperty(mouvement); + this.Quantite = new SimpleStringProperty(quantite); + this.Date = new SimpleStringProperty(date); + } + + public String getCode() { + return Code.get(); + } + + public String getType() { + return Type.get(); + } + + public String getMouvement() { + return Mouvement.get(); + } + + public String getQuantite() { + return Quantite.get(); + } + public String getDate() { + return Date.get(); + } + +} diff --git a/src/main/java/Models/Stock/StockDB.java b/src/main/java/Models/Stock/StockDB.java new file mode 100644 index 0000000..3145db6 --- /dev/null +++ b/src/main/java/Models/Stock/StockDB.java @@ -0,0 +1,287 @@ +/* + * 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.Stock; + +import static Controllers.Traitement.Adaptateur.StringDeleZero; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Produit.ListeProduit; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + + +public class StockDB { + + connexion cnx = new connexion(); + + contro Controle = new contro(); + + public ObservableList getDataStockDetail(String local, String reference, String date_debut, Integer debut, Integer nbr){ + + ObservableList ListMouvement = FXCollections.observableArrayList(); + + String WhereDate = ""; + if(!Controle.isStringNull(date_debut)){ + WhereDate = " AND (DATE(`date_add`) >= '"+date_debut+"') "; + } + + String req = " SELECT *, DATE_FORMAT(date_add, '%d/%m/%Y %H:%i') as dateAdd "; + req += " FROM stock_detail "; + req += " WHERE (local_nom LIKE '"+local+"') "; + req += " AND (reference_produit LIKE '"+reference+"') "; + req += WhereDate; + req += " ORDER BY date_add DESC "; + + if(debut!= null && nbr!=null){ + req += " 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() ) { + + String quantite = StringDeleZero(resultat.getString("quantite")); + float quantity = resultat.getFloat("quantite"); + + + String dateAdd = resultat.getString("dateAdd"); + + String id_bon_entre = resultat.getString("id_bon_entre"); + String id_bon_sortie = resultat.getString("id_bon_sortie"); + String id_bon_livraison = resultat.getString("id_bon_livraison"); + String id_bon_reception = resultat.getString("id_bon_reception"); + String id_facture_frs = resultat.getString("id_facture_frs"); + String id_vente_sans_facture = resultat.getString("id_vente_sans_facture"); + + String code = ""; + String type = ""; + + String mouvement = "enter"; + if(quantity<0){ mouvement = "sortie";} + + if(!Controle.isStringNull(id_bon_entre)){ + code = id_bon_entre; + type = "Bon d'entrée"; + }else if(!Controle.isStringNull(id_bon_sortie)){ + code = id_bon_sortie; + type = "Bon de sortie"; + }else if(!Controle.isStringNull(id_bon_livraison)){ + code = id_bon_livraison; + type = "Bon de livraison"; + }else if(!Controle.isStringNull(id_bon_reception)){ + code = id_bon_reception; + type = "Bon de réception"; + }else if(!Controle.isStringNull(id_facture_frs)){ + code = id_facture_frs; + type = "Facture FRS"; + }else if(!Controle.isStringNull(id_vente_sans_facture)){ + code = id_vente_sans_facture; + type = "Vente sans facture"; + } + + ListMouvement.add(new ListeMouvement(code, type, mouvement, quantite, dateAdd)); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return ListMouvement; + } + + public String getNbrStockDetail(String local, String reference, String date_debut){ + + String WhereDate = ""; + if(!Controle.isStringNull(date_debut)){ + WhereDate = " AND (DATE(`date_add`) >= '"+date_debut+"') "; + } + + String req = " SELECT COUNT(*) "; + req += " FROM stock_detail "; + req += " WHERE (local_nom LIKE '"+local+"') "; + req += WhereDate; + req += " AND (reference_produit LIKE '"+reference+"'); "; + + 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 Integer.toString(sommme) ; + } + + public ObservableList getProduitInStock(String Local, String Categorie, String Reference, String Designation){ + + ObservableList listProduits = FXCollections.observableArrayList(); + + String WhereCategorie = ""; + if(!Controle.isStringNull(Categorie)){ + WhereCategorie = " AND (P.nomcategorie_cate LIKE '%"+Categorie.replaceAll("'","\\\\'")+"%') "; + } + + String WhereReference = ""; + if(!Controle.isStringNull(Reference)){ + WhereReference = " AND (S.produit_reference LIKE '%"+Reference.replaceAll("'","\\\\'")+"%') "; + } + + String WhereDesignation = ""; + if(!Controle.isStringNull(Designation)){ + WhereDesignation = " AND (P.designation LIKE '%"+Designation.replaceAll("'","\\\\'")+"%') "; + } + + String Query = " SELECT S.produit_reference, S.quantite, P.designation " + + " FROM `stock` S, `produit` P " + + " WHERE (S.local_nom = '"+Local+"') AND (P.reference = S.produit_reference) "+ + WhereCategorie+ + WhereReference+ + WhereDesignation+ + " ORDER BY S.quantite DESC; "; + + if(cnx.ouverture()){ + try{ + ResultSet resultat= cnx.FetchALL(Query); + + while ( resultat.next() ) { + + String reference = resultat.getString("produit_reference"); + String designation = resultat.getString("designation"); + String quantity = resultat.getString("quantite"); + listProduits.add(new ListeProduit(reference, designation, quantity, "", "", "", "", "")); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + + return listProduits; + } + + + //methode qui permet de récupére la liste des locals souf le local qui appartin l'utilisateur + public ArrayList getAllListLocal(){ + ArrayList listLocale = new ArrayList<>(); + String req = "SELECT * FROM `local` ;"; //local avec la quel appartient l'utilisateur + 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() ) { + String nomlocal=resultat.getString("nom"); + listLocale.add(nomlocal); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println("req "+req); + } + } + return listLocale ; + } + + //methode qui permet de récupére la liste des locals souf le local qui appartin l'utilisateur + public ArrayList getListLocal(){ + ArrayList listLocale = new ArrayList<>(); + String req = "SELECT * FROM `local` WHERE `nom` != '"+ParametreSystem.NomLocalPC+"' ;"; //local avec la quel appartient l'utilisateur + 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() ) { + String nomlocal=resultat.getString("nom"); + listLocale.add(nomlocal); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println("req "+req); + } + } + return listLocale ; + } + + + public ArrayList getListCategorie(){ + ArrayList listCategorie = new ArrayList<>(); + String req = "SELECT * FROM `categorie` ;"; + 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() ) { + String nomCategorie=resultat.getString("nomcategorie"); + listCategorie.add(nomCategorie); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println("req "+req); + } + } + return listCategorie ; + } + + /*********************supprimer les produit dans la table stock *****************************************/ + //Méthode qui pérmet de supprimer la liste du produit dont la quantite est égale a 0 + public void DeleteProdStock(){ + String req = "DELETE FROM stock WHERE (local_nom='"+ParametreSystem.NomLocalPC+"') AND (quantite ='0')"; + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(req); + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + } +} diff --git a/src/main/java/Models/Stock/StockDetail.java b/src/main/java/Models/Stock/StockDetail.java new file mode 100644 index 0000000..1b3eb51 --- /dev/null +++ b/src/main/java/Models/Stock/StockDetail.java @@ -0,0 +1,139 @@ +/* + * 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.Stock; + +/** + * + * @author Maher + */ +public class StockDetail { + + public String id_detail_stock ; + public String local_nom; + public String reference_produit ; + public Float quantite; + public String date_add; + public Integer id_profile; + public String id_bon_entre; + public String id_bon_sortie; + public String id_bon_livraison; + public String id_bon_reception; + public String id_facture_frs; + public String id_vente_sans_facture; + + public StockDetail(String reference_produit, Float quantite, String id_bon_entre, String id_bon_sortie, String id_bon_livraison, String id_bon_reception, String id_facture_frs, String id_vente_sans_facture) { + this.reference_produit = reference_produit; + this.quantite = quantite; + this.id_bon_entre = id_bon_entre; + this.id_bon_sortie = id_bon_sortie; + this.id_bon_livraison = id_bon_livraison; + this.id_bon_reception = id_bon_reception; + this.id_facture_frs = id_facture_frs; + this.id_vente_sans_facture = id_vente_sans_facture; + } + + + + + public String getId_detail_stock() { + return id_detail_stock; + } + + public void setId_detail_stock(String id_detail_stock) { + this.id_detail_stock = id_detail_stock; + } + + public String getLocal_nom() { + return local_nom; + } + + public void setLocal_nom(String local_nom) { + this.local_nom = local_nom; + } + + public String getReference_produit() { + return reference_produit; + } + + public void setReference_produit(String reference_produit) { + this.reference_produit = reference_produit; + } + + public Float getQuantite() { + return quantite; + } + + public void setQuantite(Float quantite) { + this.quantite = quantite; + } + + public String getDate_add() { + return date_add; + } + + public void setDate_add(String date_add) { + this.date_add = date_add; + } + + public Integer getId_profile() { + return id_profile; + } + + public void setId_profile(Integer id_profile) { + this.id_profile = id_profile; + } + + public String getId_bon_entre() { + return id_bon_entre; + } + + public void setId_bon_entre(String id_bon_entre) { + this.id_bon_entre = id_bon_entre; + } + + public String getId_bon_sortie() { + return id_bon_sortie; + } + + public void setId_bon_sortie(String id_bon_sortie) { + this.id_bon_sortie = id_bon_sortie; + } + + public String getId_bon_livraison() { + return id_bon_livraison; + } + + public void setId_bon_livraison(String id_bon_livraison) { + this.id_bon_livraison = id_bon_livraison; + } + + public String getId_bon_reception() { + return id_bon_reception; + } + + public void setId_bon_reception(String id_bon_reception) { + this.id_bon_reception = id_bon_reception; + } + + public String getId_facture_frs() { + return id_facture_frs; + } + + public void setId_facture_frs(String id_facture_frs) { + this.id_facture_frs = id_facture_frs; + } + + + public String getId_vente_sans_facture() { + return id_vente_sans_facture; + } + + public void setId_vente_sans_facture(String id_vente_sans_facture) { + this.id_vente_sans_facture = id_vente_sans_facture; + } + + +} diff --git a/src/main/java/Models/Stock/StockDetailDB.java b/src/main/java/Models/Stock/StockDetailDB.java new file mode 100644 index 0000000..a6343a8 --- /dev/null +++ b/src/main/java/Models/Stock/StockDetailDB.java @@ -0,0 +1,68 @@ +/* + * 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.Stock; + +import Controllers.Traitement.ParametreSystem; +import Models.connexion; +import javafx.collections.ObservableList; +import Models.User.User; + +/** + * + * @author Maher + */ +public class StockDetailDB { + + connexion cnx = new connexion(); + + public boolean InsertStockDetail(ObservableList ListStockDetail){ + + String Query = "INSERT INTO stock_detail (`local_nom`, `reference_produit`, `quantite`, `date_add`, `id_profile`, `id_bon_entre`, `id_bon_sortie`, `id_bon_livraison`, `id_bon_reception`, `id_facture_frs`, `id_vente_sans_facture`) VALUES "; + + for(StockDetail ValStockDetail : ListStockDetail){ + + String ReferenceProduit = ValStockDetail.getReference_produit(); + Float Quantite = ValStockDetail.getQuantite(); + String IdBonEntre = ValStockDetail.getId_bon_entre(); + String IdBonSortie = ValStockDetail.getId_bon_sortie(); + String IdBonLivraison = ValStockDetail.getId_bon_livraison(); + String IdBonReception = ValStockDetail.getId_bon_reception(); + String IdFactureFrs = ValStockDetail.getId_facture_frs(); + String IdVenteSansFacture = ValStockDetail.getId_vente_sans_facture(); + + if( (IdBonEntre == null) || (IdBonEntre.isEmpty()) ){ + IdBonEntre = "NULL"; + } + + if( (IdBonSortie == null) || (IdBonSortie.isEmpty()) ){ + IdBonSortie = "NULL"; + } + + if( (IdBonLivraison == null) || (IdBonLivraison.isEmpty() ) ){ + IdBonLivraison = "NULL"; + } + + if( (IdBonReception == null) ||(IdBonReception.isEmpty()) ){ + IdBonReception = "NULL"; + } + + if( (IdFactureFrs == null) ||(IdFactureFrs.isEmpty()) ){ + IdFactureFrs = "NULL"; + } + + if( (IdVenteSansFacture == null) ||(IdVenteSansFacture.isEmpty()) ){ + IdVenteSansFacture = "NULL"; + } + + Query = Query + "(\""+ParametreSystem.NomLocalPC+"\", \""+ReferenceProduit+"\", '"+Quantite+"', CURTIME(), '"+User.idprofile+"', "+IdBonEntre+", "+IdBonSortie+", "+IdBonLivraison+", "+IdBonReception+", "+IdFactureFrs+", "+IdVenteSansFacture+" ),"; + } + + Query = Query.substring(0, Query.length()-1)+";"; + + return cnx.insertion(Query); + } + +} diff --git a/src/main/java/Models/TraiteClt/DatePickerCell.java b/src/main/java/Models/TraiteClt/DatePickerCell.java new file mode 100644 index 0000000..7f47912 --- /dev/null +++ b/src/main/java/Models/TraiteClt/DatePickerCell.java @@ -0,0 +1,194 @@ +package Models.TraiteClt; + +import Models.TraiteClt.TraiteList; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.Calendar; +import java.util.Date; +import javafx.application.Platform; +import javafx.collections.ObservableList; +import javafx.event.Event; +import javafx.event.EventHandler; +import javafx.geometry.Pos; +import javafx.scene.control.ContentDisplay; +import javafx.scene.control.DatePicker; +import javafx.scene.control.TableCell; + +/** + * DatePicker cell object. + * + * @author Fabrice Sommavilla + * @param + * @param + */ +public class DatePickerCell extends TableCell { + + private DatePicker datePicker; + private ObservableList birthdayData; + + /** + * Constructor. + * + * @param listBirthdays + */ + public DatePickerCell(ObservableList listBirthdays) { + + super(); + + this.birthdayData = listBirthdays; + + if (datePicker == null) { + createDatePicker(); + } + setGraphic(datePicker); + setContentDisplay(ContentDisplay.GRAPHIC_ONLY); + + Platform.runLater(new Runnable() { + @Override + public void run() { + datePicker.requestFocus(); + } + }); + } + + /** + * Override TableCell updateItem method. + * + * @param item + * @param empty + */ + @Override + public void updateItem(Date item, boolean empty) { + + super.updateItem(item, empty); + + SimpleDateFormat smp = new SimpleDateFormat("dd/MM/yyyy"); + + if (null == this.datePicker) { + System.out.println("datePicker is NULL"); + } + + if (empty) { + setText(null); + setGraphic(null); + } else { + + if (isEditing()) { + setContentDisplay(ContentDisplay.TEXT_ONLY); + + } else { + setDatepikerDate(smp.format(item)); + setText(smp.format(item)); + setGraphic(this.datePicker); + setContentDisplay(ContentDisplay.GRAPHIC_ONLY); + } + } + } + + /** + * + * @param dateAsStr + */ + private void setDatepikerDate(String dateAsStr) { + + LocalDate ld = null; + int jour, mois, annee; + + jour = mois = annee = 0; + try { + jour = Integer.parseInt(dateAsStr.substring(0, 2)); + mois = Integer.parseInt(dateAsStr.substring(3, 5)); + annee = Integer.parseInt(dateAsStr.substring(6, dateAsStr.length())); + } catch (NumberFormatException e) { + System.out.println("setDatepikerDate / unexpected error " + e); + } + + ld = LocalDate.of(annee, mois, jour); + datePicker.setValue(ld); + } + + /** + * This method create a textfield with key and focus events. + */ + private void createDatePicker() { + this.datePicker = new DatePicker(); + datePicker.setPromptText("jj/mm/aaaa"); + datePicker.setEditable(true); + + datePicker.setOnAction(new EventHandler() { + public void handle(Event t) { + + LocalDate date = datePicker.getValue(); + int index = getIndex(); + + SimpleDateFormat smp = new SimpleDateFormat("dd/MM/yyyy"); + Calendar cal = Calendar.getInstance(); + if(datePicker.getValue() != null){ + cal.set(Calendar.DAY_OF_MONTH, date.getDayOfMonth()); + cal.set(Calendar.MONTH, date.getMonthValue() - 1); + cal.set(Calendar.YEAR, date.getYear()); + + setText(smp.format(cal.getTime())); + commitEdit(cal.getTime()); + + if (null != getBirthdayData()) { + getBirthdayData().get(index).setDate(cal.getTime()); + } + } + + } + }); + + setAlignment(Pos.CENTER); + } + + /** + * + */ + @Override + public void startEdit() { + super.startEdit(); + } + + /** + * Override TableCell cancelEdit method. + */ + @Override + public void cancelEdit() { + super.cancelEdit(); + setContentDisplay(ContentDisplay.TEXT_ONLY); + } + + /** + * + * @return + */ + public ObservableList getBirthdayData() { + return birthdayData; + } + + /** + * + * @param birthdayData + */ + public void setBirthdayData(ObservableList birthdayData) { + this.birthdayData = birthdayData; + } + + /** + * + * @return + */ + public DatePicker getDatePicker() { + return datePicker; + } + + /** + * + * @param datePicker + */ + public void setDatePicker(DatePicker datePicker) { + this.datePicker = datePicker; + } + +} diff --git a/src/main/java/Models/TraiteClt/TraiteClt.java b/src/main/java/Models/TraiteClt/TraiteClt.java new file mode 100644 index 0000000..9457754 --- /dev/null +++ b/src/main/java/Models/TraiteClt/TraiteClt.java @@ -0,0 +1,98 @@ +/* + * 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.TraiteClt; + +/** + * + * @author PC-Maher + */ +public class TraiteClt { + + private String CodeTraiteClt ; + private String id_reglement ; + private String dateTraiteClt ; + private String datePaiementTraiteClt ; + private String dateCreationTraiteClt ; + private String MontantTraiteClt ; + private String CodeFactureClt; + private String LocalNom; + private String IdProfile; + + + public String getCodeTraiteClt() { + return CodeTraiteClt; + } + + public void setCodeTraiteClt(String CodeTraiteClt) { + this.CodeTraiteClt = CodeTraiteClt; + } + + public String getId_reglement() { + return id_reglement; + } + + public void setId_reglement(String id_reglement) { + this.id_reglement = id_reglement; + } + + public String getDateTraiteClt() { + return dateTraiteClt; + } + + public void setDateTraiteClt(String dateTraiteClt) { + this.dateTraiteClt = dateTraiteClt; + } + + public String getDatePaiementTraiteClt() { + return datePaiementTraiteClt; + } + + public void setDatePaiementTraiteClt(String datePaiementTraiteClt) { + this.datePaiementTraiteClt = datePaiementTraiteClt; + } + + public String getDateCreationTraiteClt() { + return dateCreationTraiteClt; + } + + public void setDateCreationTraiteClt(String dateCreationTraiteClt) { + this.dateCreationTraiteClt = dateCreationTraiteClt; + } + + public String getMontantTraiteClt() { + return MontantTraiteClt; + } + + public void setMontantTraiteClt(String MontantTraiteClt) { + this.MontantTraiteClt = MontantTraiteClt; + } + + public String getCodeFactureClt() { + return CodeFactureClt; + } + + public void setCodeFactureClt(String CodeFactureClt) { + this.CodeFactureClt = CodeFactureClt; + } + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + public String getIdProfile() { + return IdProfile; + } + + public void setIdProfile(String IdProfile) { + this.IdProfile = IdProfile; + } + + +} diff --git a/src/main/java/Models/TraiteClt/TraiteCltDB.java b/src/main/java/Models/TraiteClt/TraiteCltDB.java new file mode 100644 index 0000000..a093754 --- /dev/null +++ b/src/main/java/Models/TraiteClt/TraiteCltDB.java @@ -0,0 +1,400 @@ +/* + * 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.TraiteClt; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Caisse.CaisseClt; +import Models.Caisse.CaisseDB; +import Models.User.User; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * + * @author PC-Maher + */ +public class TraiteCltDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + + public Map GetChequePaiementTraite(String IdTraitePaiementCheque){ + + Map map = new HashMap<>(); + + String Query = " SELECT t_p_c_clt.numero, t_p_c_clt.banque, t_clt.id_traite, " + + " CASE " + + " WHEN f_clt.typeclt = 0 THEN c.nom " + + " WHEN f_clt.typeclt = 1 THEN e_clt.nomentrepise " + + " WHEN f_clt.typeclt = 2 THEN p_clt.nom " + + " END AS Nom, " + + " CASE " + + " WHEN f_clt.typeclt = 0 THEN c.prenom " + + " WHEN f_clt.typeclt = 1 THEN e_clt.matricule_fiscale " + + " WHEN f_clt.typeclt = 2 THEN p_clt.prenom " + + " END AS Prenom " + + " FROM traite_paiement_cheque_clt t_p_c_clt, traite_clt t_clt, factureclt f_clt " + + " LEFT JOIN cltentreprise e_clt ON (f_clt.idcltentreprise = e_clt.idcliententreprise) AND (e_clt.local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " LEFT JOIN client c ON (f_clt.idcltexiste = c.codeclient) AND (c.local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " LEFT JOIN cltpassageur p_clt ON (f_clt.idcltpassageur = p_clt.idcltpassageur) AND (p_clt.local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " WHERE (t_p_c_clt.id_traite_paiement_cheque = "+IdTraitePaiementCheque+") AND (t_clt.id_traite = t_p_c_clt.id_traite) AND (t_clt.id_factureclt = f_clt.idfactureclt) AND (t_p_c_clt.local_nom = '"+ParametreSystem.NomLocalPC+"');"; + + if(cnx.ouverture()){ + try { + + ResultSet resultat= cnx.Fetch(Query); + + map.put("IdTraite", resultat.getString("id_traite")); + map.put("Nom", resultat.getString("nom")); + map.put("Prenom", resultat.getString("prenom")); + map.put("numero", resultat.getString("numero")); + map.put("banque", resultat.getString("banque")); + + } catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println("req "+Query); + } + } + + return map; + } + + public Map GetCartePaiementTraite(String id_traite_paiement_carte){ + + Map map = new HashMap<>(); + + String Query = " SELECT t_p_c_clt.numero_carte, t_p_c_clt.banque, t_clt.id_traite," + + " CASE " + + " WHEN f_clt.typeclt = 0 THEN c.nom " + + " WHEN f_clt.typeclt = 1 THEN e_clt.nomentrepise " + + " WHEN f_clt.typeclt = 2 THEN p_clt.nom " + + " END AS Nom, " + + " CASE " + + " WHEN f_clt.typeclt = 0 THEN c.prenom " + + " WHEN f_clt.typeclt = 1 THEN e_clt.matricule_fiscale " + + " WHEN f_clt.typeclt = 2 THEN p_clt.prenom " + + " END AS Prenom " + + " FROM traite_paiement_carte_clt t_p_c_clt, traite_clt t_clt, factureclt f_clt " + + " LEFT JOIN cltentreprise e_clt ON (f_clt.idcltentreprise = e_clt.idcliententreprise) AND (e_clt.local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " LEFT JOIN client c ON (f_clt.idcltexiste = c.codeclient) AND (c.local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " LEFT JOIN cltpassageur p_clt ON (f_clt.idcltpassageur = p_clt.idcltpassageur) AND (p_clt.local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " WHERE (t_p_c_clt.id_traite_paiement_carte = "+id_traite_paiement_carte+") AND (t_clt.id_traite = t_p_c_clt.id_traite) AND (t_clt.id_factureclt = f_clt.idfactureclt) AND (t_p_c_clt.local_nom = '"+ParametreSystem.NomLocalPC+"');"; + + if(cnx.ouverture()){ + try { + + ResultSet resultat= cnx.Fetch(Query); + + map.put("IdTraite", resultat.getString("id_traite")); + map.put("Nom", resultat.getString("nom")); + map.put("Prenom", resultat.getString("prenom")); + map.put("numero_carte", resultat.getString("numero_carte")); + map.put("banque", resultat.getString("banque")); + + } catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println("req "+Query); + } + } + + return map; + } + + public Map GetEspacePaiementTraite(String id_traite_paiement_espace){ + + Map map = new HashMap<>(); + + String Query = " SELECT " + + " t_clt.id_traite, " + + " CASE " + + " WHEN f_clt.typeclt = 0 THEN c.nom " + + " WHEN f_clt.typeclt = 1 THEN e_clt.nomentrepise " + + " WHEN f_clt.typeclt = 2 THEN p_clt.nom " + + " END AS Nom, " + + " CASE " + + " WHEN f_clt.typeclt = 0 THEN c.prenom " + + " WHEN f_clt.typeclt = 1 THEN e_clt.matricule_fiscale " + + " WHEN f_clt.typeclt = 2 THEN p_clt.prenom " + + " END AS Prenom " + + " FROM traite_paiement_espace_clt t_p_e_clt, traite_clt t_clt, factureclt f_clt " + + " LEFT JOIN cltentreprise e_clt ON (f_clt.idcltentreprise = e_clt.idcliententreprise) AND (e_clt.local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " LEFT JOIN client c ON (f_clt.idcltexiste = c.codeclient) AND (c.local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " LEFT JOIN cltpassageur p_clt ON (f_clt.idcltpassageur = p_clt.idcltpassageur) AND (p_clt.local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " WHERE (t_p_e_clt.id_traite_paiement_espace = "+id_traite_paiement_espace+") AND (t_clt.id_traite = t_p_e_clt.id_traite) AND (t_clt.id_factureclt = f_clt.idfactureclt) AND (t_p_e_clt.local_nom = '"+ParametreSystem.NomLocalPC+"');"; + + if(cnx.ouverture()){ + try { + + ResultSet resultat= cnx.Fetch(Query); + + map.put("IdTraite", resultat.getString("id_traite")); + map.put("Nom", resultat.getString("nom")); + map.put("Prenom", resultat.getString("prenom")); + + } catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println("req "+Query); + } + } + + return map; + } + + public void AddListeTraiteClt(ArrayList ListTraites, String CodeFactureClt){ + String ReqTraiClt = "INSERT INTO traite_clt (`date_traite`, `montant_traite`, `date_creation`, `id_factureclt`, `local_nom`, id_profile) VALUES "; + String Req = ""; + + for(int i=0; i getListPaiementTraiteClt(String IdTraite){ + + ObservableList DataPaiementList = FXCollections.observableArrayList(); + + String QueryEspace = "SELECT id_traite_paiement_espace AS id_traite_paiement, 'espace' AS 'type', '' AS banque, '' AS numero, DATE_FORMAT(date_payer, '%d/%m/%Y') AS date_paiement, DATE_FORMAT(date_payer, '%H:%i:%s') AS heur_paiement, montant_payer FROM `traite_paiement_espace_clt` WHERE (`id_traite` = '"+IdTraite+"') AND (local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " UNION ALL " + + "SELECT id_traite_paiement_cheque AS id_traite_paiement, 'chèque' AS 'type', banque, numero, DATE_FORMAT(date_payer, '%d/%m/%Y') AS date_paiement, DATE_FORMAT(date_payer, '%H:%i:%s') AS heur_paiement, montant_payer FROM traite_paiement_cheque_clt WHERE (`id_traite` = '"+IdTraite+"') AND (local_nom = '"+ParametreSystem.NomLocalPC+"')" + + " UNION ALL " + + "SELECT id_traite_paiement_carte AS id_traite_paiement, 'carte bancaire' AS 'type', banque, numero_carte AS numero, DATE_FORMAT(date_payer, '%d/%m/%Y') AS date_paiement, DATE_FORMAT(date_payer, '%H:%i:%s') AS heur_paiement, montant_payer FROM traite_paiement_carte_clt WHERE (`id_traite` = '"+IdTraite+"') AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + if(cnx.ouverture()){ + try{ + ResultSet Resultat = cnx.excutionquery(QueryEspace); + Resultat.last(); + int nombreLignes = Resultat.getRow(); + if(nombreLignes>0){ + Resultat.beforeFirst(); + while (Resultat.next()){ + String id_paiement = Resultat.getString("id_traite_paiement"); + String montant_paiement = Resultat.getString("montant_payer"); + String date_paiement = Resultat.getString("date_paiement"); + String heur_paiement = Resultat.getString("heur_paiement"); + String type = Resultat.getString("type"); + String banque = Resultat.getString("banque"); + String numero = Resultat.getString("numero"); + DataPaiementList.add(new TraiteCltPaiementListe( id_paiement, type, montant_paiement, date_paiement, heur_paiement, banque, numero)); + } + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(QueryEspace); + } + } + return DataPaiementList; + } + + public ObservableList SearchTraiteCltRetard(Integer debut, Integer nbr, String DateDebut, String IdFacture, String NomLocal, String CodeClt, String CINClt, String NomClt, boolean All) + { + String WhereReq1 = " WHERE (T.date_paiement IS NULL) AND (T.date_traite < now()) AND (T.id_factureclt = F.idfactureclt) AND "; + + if(!clt.isStringNull(NomLocal)){ + WhereReq1 += " (T.local_nom = \""+NomLocal+"\") AND "; + } + + if(!clt.isStringNull(IdFacture)){ + WhereReq1 += " (T.id_factureclt = \""+IdFacture+"\") AND "; + } + + if(!clt.isStringNull(DateDebut)){ + WhereReq1 += " (T.date_traite >= \""+DateDebut+"\") AND "; + } + + if(!clt.isStringNull(CodeClt)){ + WhereReq1 += " ( (C.codeclient = \""+CodeClt+"\") OR (E.idcliententreprise = \""+CodeClt+"\" ) ) AND "; + } + + if(!clt.isStringNull(CINClt)){ + WhereReq1 += " ( (C.cin LIKE \"%"+CINClt+"%\") OR (E.matricule_fiscale LIKE \"%"+CINClt+"%\") ) AND "; + } + + if(!clt.isStringNull(NomClt)){ + WhereReq1 += " ( (C.nom LIKE \"%"+NomClt+"%\") OR (E.nomentrepise LIKE \"%"+NomClt+"%\") OR (C.prenom LIKE \"%"+NomClt+"%\") OR (C.prenom LIKE \"%"+NomClt+"%\") OR (E.matricule_fiscale LIKE \"%"+NomClt+"%\") ) AND "; + } + + WhereReq1 = WhereReq1.substring(0, WhereReq1.length() - 4); + + ObservableList DataListTraiteClt = FXCollections.observableArrayList(); + + String Limit = ""; + if(All == false){ + Limit = " LIMIT "+debut+" , "+nbr+" ;"; + } + String req= "SELECT T.*, F.typeclt, DATE_FORMAT(T.date_traite, '%d/%m/%Y') AS DateTraite, " + + " C.codeclient, C.cin, concat(C.nom, \" \",C.prenom) AS nom_prenom_client, " + + " E.idcliententreprise, E.matricule_fiscale, E.nomentrepise " + + " FROM `traite_clt` T, `factureclt` F " + + " LEFT JOIN `client` C ON (F.idcltexiste = C.codeclient) " + + " LEFT JOIN `cltentreprise` E ON (F.idcltentreprise = E.idcliententreprise) " + + WhereReq1 + + Limit ; + + ResultSet resultat= cnx.FetchALL(req); + + try{ + + while ( resultat.next() ) { + String NumTraite = resultat.getString("id_traite"); + String Facture = resultat.getString("id_factureclt"); + String DateTraite = resultat.getString("DateTraite"); + String MontantTraite = Adaptateur.StringToStringEspace(resultat.getString("montant_traite")); + String LocalNom = resultat.getString("local_nom"); + float FMontant = resultat.getFloat("montant_traite"); + + //0 Personne 1 Entreprise + Integer Typeclt = resultat.getInt("typeclt"); + + String CodeClient = ""; + String NomPrenom = ""; + if(Typeclt == 0){ + CodeClient = resultat.getString("codeclient"); + NomPrenom = resultat.getString("nom_prenom_client"); + }if(Typeclt == 1){ + CodeClient = resultat.getString("idcliententreprise"); + NomPrenom = resultat.getString("nomentrepise"); + } + + DataListTraiteClt.add(new TraiteCltGestionListe(NumTraite, "", Facture, CodeClient, LocalNom, NomPrenom, DateTraite, "", MontantTraite, FMontant)); + } + } catch(SQLException ex){ + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + return DataListTraiteClt; + } + + + public Integer nbrTraiteCltRetard(String DateDebut, String IdFacture, String NomLocal, String CodeClt, String CINClt, String NomClt) + { + String WhereReq1 = " WHERE (T.date_paiement IS NULL) AND (T.date_traite < now()) AND (T.id_factureclt = F.idfactureclt) AND "; + + if(!clt.isStringNull(NomLocal)){ + WhereReq1 += " (T.local_nom = \""+NomLocal+"\") AND "; + } + + if(!clt.isStringNull(IdFacture)){ + WhereReq1 += " (T.id_factureclt = \""+IdFacture+"\") AND "; + } + + if(!clt.isStringNull(DateDebut)){ + WhereReq1 += " (T.date_traite >= \""+DateDebut+"\") AND "; + } + + if(!clt.isStringNull(CodeClt)){ + WhereReq1 += " ( (C.codeclient = \""+CodeClt+"\") OR (E.idcliententreprise = \""+CodeClt+"\" ) ) AND "; + } + + if(!clt.isStringNull(CINClt)){ + WhereReq1 += " ( (C.cin LIKE \"%"+CINClt+"%\") OR (E.matricule_fiscale LIKE \"%"+CINClt+"%\") ) AND "; + } + + if(!clt.isStringNull(NomClt)){ + WhereReq1 += " ( (C.nom LIKE \"%"+NomClt+"%\") OR (E.nomentrepise LIKE \"%"+NomClt+"%\") OR (C.prenom LIKE \"%"+NomClt+"%\") OR (C.prenom LIKE \"%"+NomClt+"%\") OR (E.matricule_fiscale LIKE \"%"+NomClt+"%\") ) AND "; + } + + WhereReq1 = WhereReq1.substring(0, WhereReq1.length() - 4); + + + String req = " SELECT COUNT(T.id_traite) " + + " FROM `traite_clt` T, `factureclt` F " + + " LEFT JOIN `client` C ON (F.idcltexiste = C.codeclient) " + + " LEFT JOIN `cltentreprise` E ON (F.idcltentreprise = E.idcliententreprise) " + + WhereReq1 + " ; "; + + 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 ; + } + + +} diff --git a/src/main/java/Models/TraiteClt/TraiteCltGestionDB.java b/src/main/java/Models/TraiteClt/TraiteCltGestionDB.java new file mode 100644 index 0000000..e5cc099 --- /dev/null +++ b/src/main/java/Models/TraiteClt/TraiteCltGestionDB.java @@ -0,0 +1,213 @@ +/* + * 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.TraiteClt; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Produit.Produit; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.logging.Level; +import java.util.logging.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + + +/** + * + * @author Maher + */ +public class TraiteCltGestionDB { + + connexion cnx = new connexion(); + contro clt = new contro(); + ShowDialog SD = new ShowDialog(); + + public ResultSet GetDetailTraite(String IdTraiteClt){ + ResultSet Resultat = null; + + String Query = "SELECT T.*, F.typeclt, F.net_a_payer, DATE_FORMAT(date_traite, '%d/%m/%Y') AS date_traite_format, " + + "IF(montant_traite <= montant_payer, '1', IF(date_traite >= CURTIME() OR date_traite >= date_paiement, '2', '3') ) AS etat, " + + " C.codeclient, C.cin, C.nom, C.prenom, " + + "E.idcliententreprise, E.matricule_fiscale, E.nomentrepise " + + "FROM traite_clt T, factureclt F " + + "LEFT JOIN client C ON (C.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltexiste = C.codeclient) " + + "LEFT JOIN cltentreprise E ON (E.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltentreprise = E.idcliententreprise) " + + "WHERE (T.local_nom = '"+ParametreSystem.NomLocalPC+"') AND (T.id_factureclt = F.idfactureclt) " + + "AND (T.id_traite = "+IdTraiteClt+") "; + + cnx.ouverture(); + + try { + Resultat = cnx.excutionquery(Query); + + Resultat.next(); + + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println("req "+Query); + } + + return Resultat; + } + + + + /********************************** Search *******************************/ + + public ObservableList SearchTraiteClt(Integer debut, Integer nbr, String idTraite, String idFactureclt, String dateTraite, String codeClient, String cin, String nom) + { + ObservableList DataListTraiteClt = FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isStringNull(idTraite)){ + Where += " (T.id_traite = \""+Adaptateur.addSlashes(idTraite)+"\") AND "; + } + + if(!clt.isStringNull(idFactureclt)){ + Where += " (F.idfactureclt = \""+Adaptateur.addSlashes(idFactureclt)+"\") AND "; + } + + if(!clt.isStringNull(codeClient)){ + Where += "( (F.idcltentreprise = \""+Adaptateur.addSlashes(codeClient)+"\") OR (F.idcltexiste = \""+Adaptateur.addSlashes(codeClient)+"\") ) AND "; + } + + if(!clt.isStringNull(nom)){ + Where += "( (E.nomentrepise LIKE \"%"+Adaptateur.addSlashes(nom)+"%\") OR (C.nomcomplet LIKE \"%"+Adaptateur.addSlashes(nom)+"%\") ) AND "; + } + + if(!clt.isStringNull(cin)){ + Where += "( (C.cin = \""+Adaptateur.addSlashes(cin)+"\") OR (E.matricule_fiscale = \""+Adaptateur.addSlashes(cin)+"\") ) AND "; + } + + if(!clt.isStringNull(dateTraite)){ + Where += " (T.date_traite = \""+dateTraite+"\") AND "; + } + + if(!Where.equals("")){ + Where = " AND "+Where.substring(0, Where.length() - 4); + } + + String req = "SELECT T.*, F.typeclt, " + + "IF(montant_traite >= montant_payer, '1', IF(date_traite >= CURTIME() OR date_traite >= date_paiement, '2', '3') ) AS etat, " + + "C.codeclient, C.cin, concat(C.nom, \" \",C.prenom) AS nom_prenom_client, " + + "E.idcliententreprise, E.matricule_fiscale, E.nomentrepise " + + "FROM traite_clt T, factureclt F " + + "LEFT JOIN client C ON (C.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltexiste = C.codeclient) " + + "LEFT JOIN cltentreprise E ON (E.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltentreprise = E.idcliententreprise) " + + "WHERE (T.local_nom = '"+ParametreSystem.NomLocalPC+"') AND (T.id_factureclt = F.idfactureclt) " + + Where + + "LIMIT "+debut+" , "+nbr+" ;"; + + try { + ResultSet resultat= cnx.FetchALL(req); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date date_system = sdf.parse(sdf.format(new Date())); + + while ( resultat.next() ) { + String NumTraite = resultat.getString("id_traite"); + String Facture = resultat.getString("id_factureclt"); + String DatePayer = resultat.getString("date_paiement"); + String DateTraite = resultat.getString("date_traite"); + float FMontant = resultat.getFloat("montant_traite"); + //1 Payer 2 En Cours 3 En Retart + String Etat = resultat.getString("etat"); + + //0 Personne 1 Entreprise + Integer Typeclt = resultat.getInt("typeclt"); + String TypeClient = ""; String CodeClt = ""; String NomPrenom = ""; + if(Typeclt == 0){ + TypeClient = "Personne"; + CodeClt = resultat.getString("codeclient"); + NomPrenom = resultat.getString("nom_prenom_client"); + }if(Typeclt == 1){ + TypeClient = "Entreprise"; + CodeClt = resultat.getString("idcliententreprise"); + NomPrenom = resultat.getString("nomentrepise"); + } + + Date date_traite = sdf.parse(DateTraite); + + DataListTraiteClt.add(new TraiteCltGestionListe(NumTraite, Etat, Facture, CodeClt, TypeClient, NomPrenom, Adaptateur.NormalDateFormat(DateTraite), Adaptateur.NormalDateFormat(DatePayer), "", FMontant)); + } + + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } catch (ParseException ex) { + Logger.getLogger(TraiteCltGestionDB.class.getName()).log(Level.SEVERE, null, ex); + } + + return DataListTraiteClt; + + } + + + public Integer nbrSearchTraiteClt(String idTraite, String idFactureclt, String dateTraite, String codeClient, String cin, String nom) + { + String Where = ""; + + if(!clt.isStringNull(idTraite)){ + Where += " (T.id_traite = \""+Adaptateur.addSlashes(idTraite)+"\") AND "; + } + + if(!clt.isStringNull(idFactureclt)){ + Where += " (F.idfactureclt = \""+Adaptateur.addSlashes(idFactureclt)+"\") AND "; + } + + if(!clt.isStringNull(codeClient)){ + Where += "( (F.idcltentreprise = \""+Adaptateur.addSlashes(codeClient)+"\") OR (F.idcltexiste = \""+Adaptateur.addSlashes(codeClient)+"\") ) AND "; + } + + if(!clt.isStringNull(nom)){ + Where += "( (E.nomentrepise LIKE \"%"+Adaptateur.addSlashes(nom)+"%\") OR (C.nomcomplet LIKE \"%"+Adaptateur.addSlashes(nom)+"%\") ) AND "; + } + + if(!clt.isStringNull(cin)){ + Where += "( (C.cin = \""+Adaptateur.addSlashes(cin)+"\") OR (E.matricule_fiscale = \""+Adaptateur.addSlashes(cin)+"\") ) AND "; + } + + if(!clt.isStringNull(dateTraite)){ + Where += " (T.date_traite = \""+dateTraite+"\") AND "; + } + + if(!Where.equals("")){ + Where = " AND "+Where.substring(0, Where.length() - 4); + } + + String req= "SELECT COUNT(*)" + + "FROM traite_clt T, factureclt F " + + "LEFT JOIN client C ON (C.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltexiste = C.codeclient) " + + "LEFT JOIN cltentreprise E ON (E.local_nom= '"+ParametreSystem.NomLocalPC+"') AND (F.idcltentreprise = E.idcliententreprise) " + + "WHERE (T.local_nom = '"+ParametreSystem.NomLocalPC+"') AND (T.id_factureclt = F.idfactureclt) " + + Where +" ;"; + + int sommme =0; + if(cnx.ouverture()){ + try{ + /* Exécution d'une requête de lecture */ + ResultSet resultat = cnx.excutionquery(req); + // get the number of rows from the result set + resultat.next(); + sommme = resultat.getInt(1); + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return sommme ; + } + + +} diff --git a/src/main/java/Models/TraiteClt/TraiteCltGestionListe.java b/src/main/java/Models/TraiteClt/TraiteCltGestionListe.java new file mode 100644 index 0000000..6cc09f7 --- /dev/null +++ b/src/main/java/Models/TraiteClt/TraiteCltGestionListe.java @@ -0,0 +1,85 @@ +/* + * 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.TraiteClt; + +import javafx.beans.property.SimpleFloatProperty; +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class TraiteCltGestionListe { + + private final SimpleStringProperty NumTraite; + private final SimpleStringProperty Etat; + private final SimpleStringProperty Facture; + private final SimpleStringProperty CodeClt; + private final SimpleStringProperty TypeClient; + private final SimpleStringProperty NomPrenom; + private final SimpleStringProperty DateTraite; + private final SimpleStringProperty DatePayer; + private final SimpleStringProperty Montant; + private final SimpleFloatProperty MontantFloat; + + public TraiteCltGestionListe(String num_traite, String etat, String facture, String code_clt, String type_clt, String nom_prenom, String date_traite, String date_payer, String montant, Float fmontant) { + this.NumTraite= new SimpleStringProperty(num_traite); + this.Etat = new SimpleStringProperty(etat); + this.Facture = new SimpleStringProperty(facture); + this.CodeClt = new SimpleStringProperty(code_clt); + this.TypeClient = new SimpleStringProperty(type_clt); + this.NomPrenom = new SimpleStringProperty(nom_prenom); + this.DateTraite = new SimpleStringProperty(date_traite); + this.DatePayer= new SimpleStringProperty(date_payer); + this.Montant= new SimpleStringProperty(montant); + this.MontantFloat= new SimpleFloatProperty(fmontant); + } + + public String getNumTraite() { + return NumTraite.get(); + } + + public String getEtat() { + return Etat.get(); + } + + public String getFacture() { + return Facture.get(); + } + + public String getCodeClt() { + return CodeClt.get(); + } + + public String getTypeClient() { + return TypeClient.get(); + } + + public String getNomPrenom() { + return NomPrenom.get(); + } + + public String getDateTraite() { + return DateTraite.get(); + } + + public String getDatePayer() { + return DatePayer.get(); + } + + public String getMontant() { + return Montant.get(); + } + + public void setMontant(String montant) { + Montant.set(montant); + } + + + public Float getMontantFloat() { + return MontantFloat.get(); + } +} diff --git a/src/main/java/Models/TraiteClt/TraiteCltPaiementListe.java b/src/main/java/Models/TraiteClt/TraiteCltPaiementListe.java new file mode 100644 index 0000000..b49dd8a --- /dev/null +++ b/src/main/java/Models/TraiteClt/TraiteCltPaiementListe.java @@ -0,0 +1,58 @@ +/* + * 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.TraiteClt; + +import javafx.beans.property.SimpleStringProperty; + +public class TraiteCltPaiementListe { + + private final SimpleStringProperty IdPaiement; + private final SimpleStringProperty TypePaiement; + private final SimpleStringProperty MontantPaiement; + private final SimpleStringProperty DatePaiement; + private final SimpleStringProperty HeurPaiement; + private final SimpleStringProperty BanquePaiement; + private final SimpleStringProperty NumeroPaiement; + + public TraiteCltPaiementListe(String id_paiement, String type_paiement, String montant_paiement, String date_paiement, String heur_paiement, String banque_paiement, String numero_banque) { + this.IdPaiement= new SimpleStringProperty(id_paiement); + this.TypePaiement = new SimpleStringProperty(type_paiement); + this.MontantPaiement = new SimpleStringProperty(montant_paiement); + this.DatePaiement = new SimpleStringProperty(date_paiement); + this.HeurPaiement = new SimpleStringProperty(heur_paiement); + this.BanquePaiement = new SimpleStringProperty(banque_paiement); + this.NumeroPaiement = new SimpleStringProperty(numero_banque); + } + + public String getIdPaiement() { + return IdPaiement.get(); + } + + public String getTypePaiement() { + return TypePaiement.get(); + } + + public String getMontantPaiement() { + return MontantPaiement.get(); + } + + public String getDatePaiement() { + return DatePaiement.get(); + } + + public String getHeurPaiement() { + return HeurPaiement.get(); + } + + public String getBanquePaiement() { + return BanquePaiement.get(); + } + + public String getNumeroPaiement() { + return NumeroPaiement.get(); + } + +} diff --git a/src/main/java/Models/TraiteClt/TraiteList.java b/src/main/java/Models/TraiteClt/TraiteList.java new file mode 100644 index 0000000..2077444 --- /dev/null +++ b/src/main/java/Models/TraiteClt/TraiteList.java @@ -0,0 +1,77 @@ +package Models.TraiteClt; + +import java.text.SimpleDateFormat; +import java.util.Date; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; + +/** + * Birthday event jfx object. + * + * @author Fabrice Sommavilla + */ +public class TraiteList { + + private final SimpleObjectProperty dateTraite; + private final StringProperty MontantTraite; + + /** + * + * @param MontantTraite + * @param date + */ + public TraiteList(String MontantTraite, Date date) { + this.MontantTraite = new SimpleStringProperty(MontantTraite); + this.dateTraite = new SimpleObjectProperty(date); + } + + /** + * @return the MontantTraite + */ + public String getMontantTraite() { + return MontantTraite.get(); + } + + /** + * @param MontantTraite the MontantTraite to set + */ + public void setMontantTraite(String MontantTraite) { + this.MontantTraite.set(MontantTraite); + } + + /** + * @return the MontantTraite + */ + public StringProperty MontantTraiteProperty() { + return MontantTraite; + } + + /** + * + * @return + */ + public Date getDate() { + return (Date) dateTraite.get(); + } + + /** + * + * @return + */ + public String getDateAsString() { + SimpleDateFormat smp = new SimpleDateFormat("dd MMMMM yyyy"); + String strDate = (null == dateTraite || null == dateTraite.get()) + ? "" : smp.format(dateTraite.get()); + + return strDate; + } + + /** + * + * @param date + */ + public void setDate(Date date) { + this.dateTraite.set(date); + } +} diff --git a/src/main/java/Models/User/Authentification.java b/src/main/java/Models/User/Authentification.java new file mode 100644 index 0000000..6d03ede --- /dev/null +++ b/src/main/java/Models/User/Authentification.java @@ -0,0 +1,92 @@ +package Models.User; + +/** + * @author Maher Ben Tili + */ +public class Authentification { + + private String IdAuthentification; + private String Login; + private String Password; + private String TypeCompte; + private String QuestionSecrete; + private String ReponceQuestion; + private boolean EtatCompte; + private boolean StockNegatif; + private String LocalNom ; + + public String getIdAuthentification() { + return IdAuthentification; + } + + public void setIdAuthentification(String IdAuthentification) { + this.IdAuthentification = IdAuthentification; + } + + public String getLogin() { + return Login; + } + + public void setLogin(String Login) { + this.Login = Login; + } + + public String getPassword() { + return Password; + } + + public void setPassword(String Password) { + this.Password = Password; + } + + public String getTypeCompte() { + return TypeCompte; + } + + public void setTypeCompte(String TypeCompte) { + this.TypeCompte = TypeCompte; + } + + public String getQuestionSecrete() { + return QuestionSecrete; + } + + public void setQuestionSecrete(String QuestionSecrete) { + this.QuestionSecrete = QuestionSecrete; + } + + public String getReponceQuestion() { + return ReponceQuestion; + } + + public void setReponceQuestion(String Reponce_question) { + this.ReponceQuestion = Reponce_question; + } + + public boolean isEtatCompte() { + return EtatCompte; + } + + public void setEtatCompte(boolean EtatCompte) { + this.EtatCompte = EtatCompte; + } + + public boolean isStockNegatif() { + return StockNegatif; + } + + public void setStockNegatif(boolean StockNegatif) { + this.StockNegatif = StockNegatif; + } + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + + +} diff --git a/src/main/java/Models/User/ListUserDB.java b/src/main/java/Models/User/ListUserDB.java new file mode 100644 index 0000000..dcd9438 --- /dev/null +++ b/src/main/java/Models/User/ListUserDB.java @@ -0,0 +1,153 @@ +/* + * 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.User; + + +import Controllers.Dialog.ShowDialog; +import Controllers.PrincipalController; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + + + +/** + * + * @author Maher + */ +public class ListUserDB extends PrincipalController{ + + + connexion cnx = new connexion(); + ShowDialog SD = new ShowDialog(); + + + + + public String nbrUsers(){ + + String req = "SELECT COUNT(`idprofile`) FROM `profile` , `authentification` WHERE `idprofile` = `idauhentification` ;"; + int sommme =0; + if(cnx.ouverture()){ + try{ + /* Exécution d'une requête de lecture */ + ResultSet resultat = cnx.excutionquery(req); + + // get the number of rows from the result set + resultat.next(); + + sommme= resultat.getInt(1); + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + + else{ + + SD.ShowAletDialog(); + + } + return Integer.toString(sommme) ; + } + + + + public ObservableList rechercheData(String ch){ + + ObservableList data=FXCollections.observableArrayList(); + String req = "SELECT `idprofile` , `type_compte`, `login` , `nom` , `prenom` , `num_tele` " + + " FROM `profile` , `auhentification`" + + " WHERE `idprofile` = `idauhentification` " + + " AND `idprofile` = "+ch+" ;"; + System.out.println(req); + 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() ) { + + int idprofile = resultat.getInt( "idprofile" ); + String type_compte=resultat.getString("type_compte"); + String login=resultat.getString("login"); + String nom=resultat.getString("nom"); + String prenom=resultat.getString("prenom"); + int tele=resultat.getInt("num_tele"); + + data.add(new ListUsers(idprofile,type_compte, login, nom, prenom, tele)); + + } + + } + + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + else{ + SD.ShowAletDialog(); + } + return data ; + } + + + + + + + public ObservableList getdata(){ + + ObservableList data=FXCollections.observableArrayList(); + String req = "SELECT `idprofile` , `type_compte`, `login` , `nom` , `prenom` , `num_tele` FROM `profile` , `authentification`WHERE `idprofile` = `idauhentification` ;"; + + 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() ) { + + int idprofile = resultat.getInt( "idprofile" ); + String type_compte=resultat.getString("type_compte"); + String login=resultat.getString("login"); + String nom=resultat.getString("nom"); + String prenom=resultat.getString("prenom"); + int tele=resultat.getInt("num_tele"); + + data.add(new ListUsers(idprofile,type_compte, login, nom, prenom, tele)); + + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + else{ + SD.ShowAletDialog(); + } + return data ; + } + +} diff --git a/src/main/java/Models/User/ListUsers.java b/src/main/java/Models/User/ListUsers.java new file mode 100644 index 0000000..0a556e0 --- /dev/null +++ b/src/main/java/Models/User/ListUsers.java @@ -0,0 +1,60 @@ +/* + * 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.User; + +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleStringProperty; + +/** + * + * @author Maher + */ +public class ListUsers { + private final SimpleIntegerProperty id; + private final SimpleStringProperty type; + private final SimpleStringProperty login; + private final SimpleStringProperty nom; + private final SimpleStringProperty prenom; + private final SimpleIntegerProperty tele; + + public ListUsers(Integer id, String type, String login, String nom, String prenom, Integer tele) { + this.id = new SimpleIntegerProperty(id); + this.type = new SimpleStringProperty(type); + this.login = new SimpleStringProperty(login); + this.nom = new SimpleStringProperty(nom); + this.prenom = new SimpleStringProperty(prenom); + this.tele = new SimpleIntegerProperty(tele); + } + + public Integer getId() { + return id.get(); + } + + public String getType() { + return type.get(); + } + + public String getLogin() { + return login.get(); + } + + public String getNom() { + return nom.get(); + } + + public String getPrenom() { + return prenom.get(); + } + + public Integer getTele() { + return tele.get(); + } + + + + + +} diff --git a/src/main/java/Models/User/Profile.java b/src/main/java/Models/User/Profile.java new file mode 100644 index 0000000..d58c64e --- /dev/null +++ b/src/main/java/Models/User/Profile.java @@ -0,0 +1,127 @@ +/* + * 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.User; + +import java.util.Date; + + +public class Profile { + + private int idprofile; + private String nom ; + private String prenom; + private String naissance; + private int sexe ; + private int tele ; + private String mail ; + private String adresse ; + private String pays ; + + + + private Authentification authentification; + + public int getIdprofile() { + return idprofile; + } + + public String getNom() { + return nom; + } + + public String getPrenom() { + return prenom; + } + + public String getNaissance() { + return naissance; + } + + public int getSexe() { + return sexe; + } + + public String getSexeString() { + if(this.sexe== 1){ + return "Homme"; + } + else{ + return "Femme"; + } + } + public int getTele() { + return tele; + } + + public String getMail() { + return mail; + } + + public String getAdresse() { + return adresse; + } + + public String getPays() { + return pays; + } + + + public void setIdprofile(int idprofile) { + this.idprofile = idprofile; + } + + public void setNom(String nom) { + this.nom = nom; + } + + public void setPrenom(String prenom) { + this.prenom = prenom; + } + + public void setNaissance(String naissance) { + this.naissance = naissance; + } + + public void setSexe(int sexe) { + this.sexe = sexe; + } + + public void setSexeString(String sexe) { + if(sexe.equals("Homme")){ + this.sexe=1; + } + else{ + this.sexe=0; + } + + } + public void setTele(int tele) { + this.tele = tele; + } + + public void setMail(String mail) { + this.mail = mail; + } + + public void setAdresse(String adresse) { + this.adresse = adresse; + } + + public void setPays(String pays) { + this.pays = pays; + } + + + public Authentification getAuthentification() { + return authentification; + } + + public void setAuthentification(Authentification authentification) { + this.authentification = authentification; + } + + +} diff --git a/src/main/java/Models/User/ProfileDB.java b/src/main/java/Models/User/ProfileDB.java new file mode 100644 index 0000000..b27966a --- /dev/null +++ b/src/main/java/Models/User/ProfileDB.java @@ -0,0 +1,154 @@ +package Models.User; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * @author Maher Ben Tili + */ +public class ProfileDB { + + + connexion cnx = new connexion(); + + public Profile getProfileByConnexion(String login, String password) + { + Profile profile = new Profile(); + + String Query = "SELECT * " + + "FROM `authentification` A, `profile` P " + + "WHERE (A.id_profile = P.idprofile) AND (A.`login`= '"+Adaptateur.addSlashes(login)+"') AND (A.`password` = '"+Adaptateur.addSlashes(password)+"') ;"; + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery(Query); + //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){ + Authentification authentification = new Authentification(); + + authentification.setIdAuthentification(resultat.getString("idauhentification")); + authentification.setLogin(resultat.getString("login")); + authentification.setPassword(resultat.getString("password")); + authentification.setEtatCompte(resultat.getBoolean("etat_compte")); + authentification.setStockNegatif(resultat.getBoolean("stock_negatif")); + authentification.setLocalNom(resultat.getString("local_nom")); + + profile.setAuthentification(authentification); + profile.setIdprofile(resultat.getInt("idprofile")); + profile.setNom(resultat.getString("nom")); + profile.setPrenom(resultat.getString("prenom")); + profile.setNaissance(resultat.getString("naissance")); + profile.setSexe(resultat.getInt("sexe")); + profile.setTele(resultat.getInt("num_tele")); + profile.setMail(resultat.getString("mail")); + profile.setAdresse(resultat.getString("adresse")); + + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + } + } + return profile; + } + + + public boolean updateAuthentification(String idAuhentification, Authentification authentification){ + String req = "UPDATE `authentification` SET " + + " `password` = '"+Adaptateur.addSlashes(authentification.getPassword())+"', " + + " `question_secrete` = '"+Adaptateur.addSlashes(authentification.getQuestionSecrete())+"', " + + " `reponce_question` = '"+Adaptateur.addSlashes(authentification.getReponceQuestion())+"' " + + " WHERE `idauhentification` = "+idAuhentification+" ;"; + + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(req); + } + catch(SQLException ex){ + System.err.println(req); + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + return false ; + } + return true; + } + else{ + return false ; + } + + + } + public boolean updateProfile(int idprofile, Profile profile) + { + String req = "UPDATE `profile`, `authentification` SET `mail` = '"+Adaptateur.addSlashes(profile.getMail())+"', `nom` = '"+Adaptateur.addSlashes(profile.getNom())+"', `prenom` = '"+Adaptateur.addSlashes(profile.getPrenom())+"', `naissance` = '"+profile.getNaissance()+"', `sexe` = '"+profile.getSexe()+"', `num_tele` = "+profile.getTele()+", `mail` = '"+Adaptateur.addSlashes(profile.getMail())+"', `adresse` = '"+Adaptateur.addSlashes(profile.getAdresse())+"', `pays` = '"+Adaptateur.addSlashes(profile.getPays())+"' WHERE (`idprofile` = "+idprofile+"); "; + if(cnx.ouverture()){ + try{ + int nbr = cnx.executionupdate(req); + } + catch(SQLException ex){ + System.err.println(req); + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + return false ; + } + return true; + } + else{ + return false ; + } + + } + + + + + public Profile getpro(int idprofile){ + Profile myprofile = new Profile(); + String req = "SELECT * " + + "FROM `authentification` A, `profile` P " + + "WHERE (P.`idprofile` = A.`id_profile`) AND " + + " (P.`idprofile`= "+idprofile+") AND " + + " (A.local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + + if(cnx.ouverture()){ + try{ + 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() ) { + + Authentification authentification = new Authentification(); + authentification.setIdAuthentification(resultat.getString("idauhentification")); + authentification.setLogin(resultat.getString("login")); + authentification.setPassword(resultat.getString("password")); + authentification.setEtatCompte(resultat.getBoolean("etat_compte")); + authentification.setStockNegatif(resultat.getBoolean("stock_negatif")); + authentification.setLocalNom(resultat.getString("local_nom")); + + myprofile.setAuthentification(authentification); + myprofile.setIdprofile(resultat.getInt("idprofile")); + myprofile.setNom(resultat.getString("nom")); + myprofile.setPrenom(resultat.getString("prenom")); + myprofile.setNaissance(resultat.getString("naissance")); + myprofile.setSexe(resultat.getInt("sexe")); + myprofile.setTele(resultat.getInt("num_tele")); + myprofile.setMail(resultat.getString("mail")); + myprofile.setAdresse(resultat.getString("adresse")); + } + } + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return myprofile; + } +} diff --git a/src/main/java/Models/User/User.java b/src/main/java/Models/User/User.java new file mode 100644 index 0000000..214996f --- /dev/null +++ b/src/main/java/Models/User/User.java @@ -0,0 +1,51 @@ +/* + * 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.User; + +/** + * + * @author Maher + */ +public class User { + + public static int idprofile ; + public static String nom ; + public static String prenom ; + public static String UserLocal ; + + //true stock (négative vente produit en négatif) + public static boolean SotckNegatif; + + + public static int getIdprofile() { + return idprofile; + } + + + + public static String getNom() { + return nom; + } + + public static String getPrenom() { + return prenom; + } + + + public static void setNom(String nom) { + User.nom = nom; + } + + public static void setPrenom(String prenom) { + User.prenom = prenom; + } + + public static void setIdprofile(int idprofile) { + User.idprofile = idprofile; + } + + +} diff --git a/src/main/java/Models/VenteRapideClt/ListeVenteSansFacture.java b/src/main/java/Models/VenteRapideClt/ListeVenteSansFacture.java new file mode 100644 index 0000000..310157c --- /dev/null +++ b/src/main/java/Models/VenteRapideClt/ListeVenteSansFacture.java @@ -0,0 +1,67 @@ +/* + * 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.VenteRapideClt; + +import javafx.beans.property.SimpleStringProperty; + +/** + * @author Maher Ben Tili + */ +public class ListeVenteSansFacture { + + private final SimpleStringProperty Code; + private final SimpleStringProperty Date; + private final SimpleStringProperty NbrProd; + private final SimpleStringProperty Paiement; + private final SimpleStringProperty NomPrenomClient; + private final SimpleStringProperty Montant; + private final SimpleStringProperty Operation; + private final SimpleStringProperty DateOperation; + + public ListeVenteSansFacture(String code, String date, String nbr_prod, String paiement, String nom_prenom_client, String montant, String opertation, String date_opertation){ + this.Code = new SimpleStringProperty(code); + this.Date = new SimpleStringProperty(date); + this.NbrProd = new SimpleStringProperty(nbr_prod); + this.Paiement = new SimpleStringProperty(paiement); + this.NomPrenomClient = new SimpleStringProperty(nom_prenom_client); + this.Montant = new SimpleStringProperty(montant); + this.Operation = new SimpleStringProperty(opertation); + this.DateOperation = new SimpleStringProperty(date_opertation); + } + + public String getCode() { + return Code.get(); + } + + public String getDate() { + return Date.get(); + } + + public String getNbrProd() { + return NbrProd.get(); + } + + public String getPaiement() { + return Paiement.get(); + } + + public String getNomPrenomClient() { + return NomPrenomClient.get(); + } + + public String getMontant() { + return Montant.get(); + } + + public String getOperation() { + return Operation.get(); + } + + public String getDateOperation() { + return DateOperation.get(); + } + +} diff --git a/src/main/java/Models/VenteRapideClt/VenteSansFacture.java b/src/main/java/Models/VenteRapideClt/VenteSansFacture.java new file mode 100644 index 0000000..89cba77 --- /dev/null +++ b/src/main/java/Models/VenteRapideClt/VenteSansFacture.java @@ -0,0 +1,148 @@ +package Models.VenteRapideClt; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.contro; +import Models.Caisse.CarteBancaireClt; +import Models.ChequeClt.ChequeClt; +import Models.Produit.ListeProduit; +import javafx.collections.ObservableList; + +/** + * @author Maher + */ +public class VenteSansFacture { + + public String IdVenteSansFacture; + public String DateVente; + public String Paiement; // 0:espèce | 1:chèque | 2:Carte bancaire + public String NomPrenomClient; + + public String Operation; //0:Modifier | 1:Supprimer + public String DateOperation; + + public String Montant; + public Float FMontant; + public ChequeClt Cheque; + public CarteBancaireClt CarteBancaire; + public ObservableList ListProduit ; + public String LocalNom; + public Integer IdProfile; + + contro Controle = new contro(); + + public String getIdVenteSansFacture() { + return IdVenteSansFacture; + } + + public void setIdVenteSansFacture(String IdVenteSansFacture) { + this.IdVenteSansFacture = IdVenteSansFacture; + } + + public String getDateVente() { + return DateVente; + } + + public void setDateVente(String DateVente) { + this.DateVente = DateVente; + } + + public String getPaiement() { + return Paiement; + } + + public void setPaiement(String Paiement) { + this.Paiement = Paiement; + } + + public String getNomPrenomClient() { + if(Controle.isStringNull(this.NomPrenomClient)){ + return null; + }else{ + return this.NomPrenomClient; + } + } + + public void setNomPrenomClient(String NomPrenomClient) { + this.NomPrenomClient = NomPrenomClient; + } + + public String getOperation() { + return Operation; + } + + public void setOperation(String Operation) { + this.Operation = Operation; + } + + public String getDateOperation() { + return DateOperation; + } + + public void setDateOperation(String DateOperation) { + this.DateOperation = DateOperation; + } + + + public String getMontant() { + if(Controle.isStringNull(this.Montant)){ + return Adaptateur.ArrondFloatToString(this.FMontant); + }else{ + return this.Montant; + } + } + + public void setMontant(String Montant) { + this.Montant = Montant; + } + + public Float getFMontant() { + return FMontant; + } + + public void setFMontant(Float FMontant) { + this.FMontant = FMontant; + } + + + public ChequeClt getCheque() { + return Cheque; + } + + public void setCheque(ChequeClt Cheque) { + this.Cheque = Cheque; + } + + public CarteBancaireClt getCarteBancaire() { + return CarteBancaire; + } + + public void setCarteBancaire(CarteBancaireClt CarteBancaire) { + this.CarteBancaire = CarteBancaire; + } + + public ObservableList getListProduit() { + return ListProduit; + } + + public void setListProduit(ObservableList ListProduit) { + this.ListProduit = ListProduit; + } + + public String getLocalNom() { + return LocalNom; + } + + public void setLocalNom(String LocalNom) { + this.LocalNom = LocalNom; + } + + public Integer getIdProfile() { + return IdProfile; + } + + public void setIdProfile(Integer IdProfile) { + this.IdProfile = IdProfile; + } + + +} diff --git a/src/main/java/Models/VenteRapideClt/VenteSansFactureDB.java b/src/main/java/Models/VenteRapideClt/VenteSansFactureDB.java new file mode 100644 index 0000000..ca80604 --- /dev/null +++ b/src/main/java/Models/VenteRapideClt/VenteSansFactureDB.java @@ -0,0 +1,279 @@ +package Models.VenteRapideClt; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Caisse.CaisseClt; +import Models.Caisse.CaisseDB; +import Models.Caisse.CarteBancaireClt; +import Models.Caisse.CarteBancaireCltDB; +import Models.ChequeClt.ChequeCltDB; +import Models.Produit.ListeProduit; +import Models.Stock.StockDetail; +import Models.Stock.StockDetailDB; +import Models.User.User; + +import Models.connexion; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author Maher + */ +public class VenteSansFactureDB { + + connexion cnx = new connexion(); + + contro clt = new contro(); + + public boolean DeleteVenteSansFacture(VenteSansFacture Vente){ + + String IdVenteSansFacture = Vente.getIdVenteSansFacture(); + String req = "UPDATE `vente_sans_facture` SET `operation` = '1', `date_operation` = CURTIME() WHERE `vente_sans_facture`.`id_vente_sans_facture` = "+IdVenteSansFacture+";" ; + int updateVSF = cnx.MettreAJour(req); + if(updateVSF>0){ + ObservableList ListStockDetail = FXCollections.observableArrayList(); + for(ListeProduit listeprod : Vente.getListProduit()){ + if(listeprod.getReference() != ""){ + ListStockDetail.add(new StockDetail(listeprod.getReference(), Adaptateur.StringToFloat(listeprod.getQuantite()), null, null, null, null, null, IdVenteSansFacture)); + } + } + new StockDetailDB().InsertStockDetail(ListStockDetail); + CaisseClt Caisse = new CaisseClt(); + Caisse.setTypeMouvement("6"); + Caisse.setIdVenteSansFactureClt(IdVenteSansFacture); + Caisse.setMontant(Vente.getMontant().replace(",",".")); + new CaisseDB().AddCaisse(Caisse); + return true; + } + + return false; + } + + public VenteSansFacture SetVenteSansFacture(VenteSansFacture Vente){ + + CaisseClt Caisse = new CaisseClt(); + Caisse.setTypeMouvement("5"); + + String IdCarteBancaire = "NULL"; + String IdChequeClt = "NULL"; + if(Vente.getPaiement().equals("2")){ + CarteBancaireCltDB CarteBancaireDB = new CarteBancaireCltDB(); + CarteBancaireClt CarteBancaire = CarteBancaireDB.SetCarteBancaire(Vente.getCarteBancaire()); + Vente.setCarteBancaire(CarteBancaire); + IdCarteBancaire = "'"+CarteBancaire.getIdCarteBancaire()+"'"; + }else if(Vente.getPaiement().equals("1")){ + ChequeCltDB ChequeDB = new ChequeCltDB(); + IdChequeClt = "'"+ChequeDB.AddChequeClt(Vente.getCheque())+"'"; + } + + String NomPrenomClient = "NULL"; + if(Vente.getNomPrenomClient() != null){ + NomPrenomClient = "'"+Vente.getNomPrenomClient()+"'"; + } + + String Montant = Vente.getMontant().replace(",","."); + + String Query ="INSERT INTO `vente_sans_facture` (`date_vente`, `paiement`, `nom_prenom_client`, `operation`, `montant`, `id_chequeclt`, `id_carte_bancaire`, `id_profile`, `local_nom`) VALUES (CURTIME(), '"+Vente.getPaiement()+"', "+NomPrenomClient+", NULL, '"+Montant+"', "+IdChequeClt+", "+IdCarteBancaire+", '"+User.idprofile+"', '"+ParametreSystem.NomLocalPC+"');"; + + String IdVenteSansFacture = cnx.InsertGetLastId(Query); + + Vente.setIdVenteSansFacture(IdVenteSansFacture); + + ObservableList ListStockDetail = FXCollections.observableArrayList(); + + String QueryProd = "INSERT INTO `liste_prod_vente_sans_facture` (`id_liste_prod_vente_sans_facture`, `id_vente_sans_facture`, `produit_reference`, `designation_produit`, `quantite`, `p_u_h_t`, `remise`, `p_u_h_t_net`, `tva`, `montant`, `local_nom`) VALUES "; + String req = ""; + for(ListeProduit listeprod : Vente.getListProduit()){ + if(listeprod.getReference() != ""){ + String PrixHT ; String Remise ; String TotalHT ; String TVA ; String TotalTTC ; + PrixHT = listeprod.getPrixHT().replace(",","."); + Remise= listeprod.getRemise().replace("%","").replace(",","."); + TotalHT= listeprod.getTotalHT().replace(",","."); + TVA=listeprod.getTVA().replace("%","").replace(",","."); + TotalTTC= listeprod.getTotalTTC().replace(",","."); + + req += "(NULL, '"+IdVenteSansFacture+"', '"+listeprod.getReference()+"', '"+Adaptateur.addSlashes(listeprod.getDesignation())+"', '"+listeprod.getQuantite()+"', "+PrixHT+", '"+Remise+"', '"+TotalHT+"', '"+TVA+"', '"+TotalTTC+"', '"+ParametreSystem.NomLocalPC+"'),"; + ListStockDetail.add(new StockDetail(listeprod.getReference(), Adaptateur.StringToFloat(listeprod.getQuantite())* -1, null, null, null, null, null, IdVenteSansFacture)); + } + } + if(req != ""){ + req = req.substring(0, req.length()-1) + ";"; + if(cnx.insertion(QueryProd+req)){ + new StockDetailDB().InsertStockDetail(ListStockDetail); + Caisse.setIdVenteSansFactureClt(IdVenteSansFacture); + Caisse.setMontant(Montant); + new CaisseDB().AddCaisse(Caisse); + } + } + return Vente; + } + + + + public VenteSansFacture getVenteSansFacture(String IdVenteSansFacture){ + VenteSansFacture venteSansFacture = new VenteSansFacture(); + + String Query = "SELECT *, DATE_FORMAT(date_vente, '%d/%m/%Y %H:%i:%s') as datetime_vente FROM `vente_sans_facture` WHERE `id_vente_sans_facture` = "+IdVenteSansFacture+";"; + + if(cnx.ouverture()){ + try{ + ResultSet resultat = cnx.excutionquery(Query); + //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){ + venteSansFacture.setIdVenteSansFacture(IdVenteSansFacture); + + // 0:espèce | 1:chèque | 2:Carte bancaire + venteSansFacture.setPaiement(resultat.getString("paiement")); + if(venteSansFacture.getPaiement().equals("1")){ + venteSansFacture.setCheque(new ChequeCltDB().getChequeClt(resultat.getString("id_chequeclt"))); + }else if(venteSansFacture.getPaiement().equals("2")){ + venteSansFacture.setCarteBancaire(new CarteBancaireCltDB().getCarteBancaireClt(resultat.getString("id_carte_bancaire"))); + } + + venteSansFacture.setDateVente(resultat.getString("datetime_vente")); + venteSansFacture.setFMontant(resultat.getFloat("montant")); + venteSansFacture.setIdProfile(resultat.getInt("id_profile")); + venteSansFacture.setLocalNom(resultat.getString("local_nom")); + venteSansFacture.setMontant(resultat.getString("montant")); + venteSansFacture.setNomPrenomClient(resultat.getString("nom_prenom_client")); + + venteSansFacture.setOperation(resultat.getString("operation")); + venteSansFacture.setDateOperation(resultat.getString("date_operation")); + + venteSansFacture.setListProduit(this.getListProduit(IdVenteSansFacture)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + } + } + + return venteSansFacture; + } + + + + + public ObservableList getListProduit(String IdVenteSansFacture){ + ObservableList ListProd = FXCollections.observableArrayList(); + if(cnx.ouverture()){ + try{ + String Query = "SELECT * FROM `liste_prod_vente_sans_facture` WHERE `id_vente_sans_facture` = "+IdVenteSansFacture+";"; + ResultSet ResultListProd = cnx.excutionquery(Query); + ResultListProd.beforeFirst(); + while (ResultListProd.next() ) { + String reference = ResultListProd.getString("produit_reference"); + String designation = ResultListProd.getString("designation_produit"); + String quantite = ResultListProd.getString("quantite").replace(",","."); + String PrixHT = ResultListProd.getString("p_u_h_t").replace(",","."); + String Remise = ResultListProd.getString("remise").replace(",",".").replace("%",""); + String TotalHT = ResultListProd.getString("p_u_h_t_net").replace(",","."); + String TVA = ResultListProd.getString("tva").replace(",",".").replace("%",""); + String TotalTTC= ResultListProd.getString("montant").replace(",","."); + ListProd.add(new ListeProduit(reference, designation, quantite, PrixHT, Remise, TotalHT, TVA, TotalTTC)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return ListProd; + } + + public ObservableList SearchVenteSansFactureGestion(Integer debut, Integer nbr, String Code, String Montant, String Date){ + + ObservableList ListeVSF = FXCollections.observableArrayList(); + + if(cnx.ouverture()){ + + String WhereCondition = ""; + + if(!clt.isStringNull(Code)){ + WhereCondition += " (VSF.`id_vente_sans_facture` = '"+Code+"') AND"; + } + if(!clt.isStringNull(Date)){ + WhereCondition += " (DATE(VSF.`date_vente`) = '"+Date+"' ) AND"; + } + if(!clt.isStringNull(Montant)){ + WhereCondition += " (VSF.`montant` LIKE '%"+Montant+"%') AND"; + } + + if(!WhereCondition.equals("")){ + WhereCondition = WhereCondition.substring(0, WhereCondition.length() - 4); + WhereCondition = "WHERE " + WhereCondition; + } + + String Query = "SELECT VSF.`id_vente_sans_facture`, DATE_FORMAT(VSF.`date_vente`, '%d/%m/%Y %H:%i:%s') AS `date_vente` , VSF.`paiement`, VSF.`nom_prenom_client`, VSF.`montant`, VSF.`operation`, DATE_FORMAT(VSF.`date_operation`, '%d/%m/%Y %H:%i:%s') AS dateOperation, (SELECT COUNT(*) FROM `liste_prod_vente_sans_facture` LPVSF WHERE LPVSF.id_vente_sans_facture = VSF.id_vente_sans_facture) AS nbr_prod " + + " FROM `vente_sans_facture` VSF " + + WhereCondition + + " ORDER BY VSF.`date_vente` DESC " + + " LIMIT "+debut+" , "+nbr+";"; + try{ + ResultSet ResultListeVSF = cnx.excutionquery(Query); + ResultListeVSF.beforeFirst(); + while (ResultListeVSF.next() ) { + String id_vente_sans_facture = ResultListeVSF.getString("id_vente_sans_facture"); + String date_vente = ResultListeVSF.getString("date_vente"); + String nbr_prod= ResultListeVSF.getString("nbr_prod"); + String paiement = ResultListeVSF.getString("paiement"); + String nom_prenom_client = ResultListeVSF.getString("nom_prenom_client"); + String montant = Adaptateur.FloatToStringEspace(ResultListeVSF.getFloat("montant")); + String operation = ResultListeVSF.getString("operation"); + String date_operation = ResultListeVSF.getString("dateOperation"); + + ListeVSF.add(new ListeVenteSansFacture(id_vente_sans_facture, date_vente, nbr_prod, paiement, nom_prenom_client, montant, operation, date_operation)); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+Query); + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + } + } + return ListeVSF; + } + + public Integer nbrVenteSansFactureGestion(String Code, String Montant, String Date) + { + String WhereCondition = ""; + + if(!clt.isStringNull(Code)){ + WhereCondition += " (VSF.`id_vente_sans_facture` = '"+Code+"') AND"; + } + if(!clt.isStringNull(Date)){ + WhereCondition += " (DATE(VSF.`date_vente`) = '"+Date+"' ) AND"; + } + if(!clt.isStringNull(Montant)){ + WhereCondition += " (VSF.`montant` LIKE '%"+Montant+"%') AND"; + } + + if(!WhereCondition.equals("")){ + WhereCondition = WhereCondition.substring(0, WhereCondition.length() - 4); + WhereCondition = "WHERE " + WhereCondition; + } + + String req=" SELECT COUNT(VSF.`id_vente_sans_facture`) " + + " FROM `vente_sans_facture` VSF " + + WhereCondition+ " ;"; + + 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 ; + } + +} diff --git a/src/main/java/Models/connexion.java b/src/main/java/Models/connexion.java new file mode 100644 index 0000000..7241d4d --- /dev/null +++ b/src/main/java/Models/connexion.java @@ -0,0 +1,276 @@ +package Models; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.ParametreSystem; +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +/** + *@author Maher Ben Tili + */ +public class connexion { + + String url = ParametreSystem.JdbcUrl; + String dbName = ParametreSystem.JdbcDB; + String userName = ParametreSystem.JdbcUser; + String password = ParametreSystem.JdbcPassword; + + /*String url = "jdbc:mysql://localhost:3306/powerpme?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"; + String dbName = "powerpme"; + String userName = "root"; + String password = "bentili";*/ + Connection conn = null; + Statement statement = null; + ResultSet resultat = null; + + public boolean insertion(String req) + { + boolean resulta = false ; + + if(this.ouverture()){ + try{ + int statut = statement.executeUpdate(req); + if(statut>0){ + resulta= true ; + } + } + catch(SQLException ex){ + System.out.println("requête d'insertion : \n" +req); + ShowDialog SD = new ShowDialog(); + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + resulta= false ; + + } + finally { + this.fermeture(); + } + } + else{ + resulta= false ; + } + return resulta ; + } + + + public int MettreAJour(String sql){ + Integer nbr = 0 ; + if(this.ouverture()){ + try{ + nbr = this.executionupdate(sql); + } + catch(SQLException ex){ + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + System.out.println("requête d'insertion : \n" +sql); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + finally { + this.fermeture(); + } + } + return nbr ; + } + + + public String InsertGetLastId(String req) + { + String LastId = null ; + if(this.ouverture()){ + try{ + PreparedStatement pstmt = conn.prepareStatement(req, statement.RETURN_GENERATED_KEYS); + pstmt.executeUpdate(); + ResultSet keys = pstmt.getGeneratedKeys(); + keys.next(); + LastId = keys.getLong(1)+""; + } + catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + + ShowDialog SD = new ShowDialog(); + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + finally { + this.fermeture(); + + } + } + return LastId ; + } + + public ResultSet excutionquery(String req) throws SQLException{ + /* Exécution d'une requête de lecture */ + resultat = statement.executeQuery(req); + /* Récupération des données du résultat de la requête de lecture */ + return resultat; + + } + + public ResultSet FetchALL(String req){ + if(this.ouverture()){ + try{ + // Exécution d'une requête de lecture + resultat = this.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(); + } + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return resultat; + } + + + public ResultSet Fetch(String req){ + if(this.ouverture()){ + try{ + // Exécution d'une requête de lecture + resultat = this.excutionquery(req); + + //on place le curseur sur le dernier tuple + resultat.last(); + + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + } + } + return resultat; + } + + public Integer CoutNumber(String Query){ + Integer Sommme = 0; + if(this.ouverture()){ + try{ + ResultSet resultat = statement.executeQuery(Query); + + 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(Query); + } + finally { + this.fermeture(); + } + } + return Sommme; + } + + + + public int executionupdate(String req) throws SQLException{ + /* Exécution d'une requête de lecture */ + int nbr = statement.executeUpdate(req); + /* Récupération des données du résultat de la requête de lecture */ + this.fermeture(); + return nbr; + + } + + + public CallableStatement executePLSQL(String sql){ + try { + Class.forName( "com.mysql.cj.jdbc.Driver" ); + conn = DriverManager.getConnection (url,userName,password); + return conn.prepareCall(sql); + } + catch (ClassNotFoundException e ) { + System.err.println("Erreur lors du chargement : le driver n'a pas été trouvé dans le classpath !"); + return null; + } + catch (SQLException ex) { + System.err.println("Erreur lors d\'ouverture de la base de données"); + return null; + } + + } + + + + /* Connexion et ouverture de la base de données */ + public boolean ouverture(){ + try { + Class.forName( "com.mysql.cj.jdbc.Driver" ); + conn = DriverManager.getConnection (url,userName,password); + conn.setAutoCommit(false); + statement = conn.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); + return true; + } + catch (ClassNotFoundException e ) { + ShowDialog.setTitre("Erreur lors du chargement : le driver n'a pas été trouvé dans le classpath !"); + ShowDialog.setDetail(e.getMessage()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + return false; + } + catch (SQLException ex) { + ShowDialog.setTitre("Erreur lors d\'ouverture de la base de données"); + ShowDialog.setDetail(ex.getMessage()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + return false; + } + } + + + + /*Femiture de la connexion de base de données*/ + public void fermeture(){ + if ( resultat != null ) { + try { + resultat.close(); + } catch ( SQLException ignore ) { + ShowDialog.setTitre("Erreur lors du Fermeture BD:"); + ShowDialog.setDetail(ignore.getMessage()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + + } + } + + if ( statement != null ) { + try { + statement.close(); + } catch ( SQLException ignore ) { + ShowDialog.setTitre("Error statement: BD:"); + ShowDialog.setDetail(ignore.getMessage()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + } + + if ( conn != null ) { + try { + conn.commit(); + //conn.close(); + } catch ( SQLException ignore ) { + ShowDialog.setTitre("Erreur lors de fermeture de Connexion: "); + ShowDialog.setDetail(ignore.getMessage()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..93bb406 --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,118 @@ +module Controllers { + + requires javafx.controls; + + requires javafx.fxml; + + requires java.sql; + + requires icu4j; + + requires org.controlsfx.controls; + + requires com.gluonhq.charm.glisten; + + requires javafx.web; + requires java.base; + + requires log4j; + + opens Controllers to javafx.fxml; + exports Controllers; + + opens Controllers.Home to javafx.fxml; + exports Controllers.Home; + opens Models.Home to javafx.fxml; + exports Models.Home; + + opens Controllers.BonLivraisonClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.BonLivraisonClt; + opens Models.BonLivraisonClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.BonLivraisonClt; + + opens Controllers.BonReceptionFrs to javafx.fxml, log4j, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.BonReceptionFrs; + opens Models.BonReceptionFrs to javafx.fxml, log4j, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.BonReceptionFrs; + + opens Controllers.Caisse to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.Caisse; + opens Models.Caisse to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.Caisse; + + opens Controllers.Categorie to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.Categorie; + opens Models.Categorie to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.Categorie; + + opens Controllers.ChequeClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.ChequeClt; + opens Models.ChequeClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.ChequeClt; + + opens Controllers.Client to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.Client; + opens Models.Client to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.Client; + + opens Controllers.CommandeClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.CommandeClt; + opens Models.CommandeClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.CommandeClt; + + opens Controllers.DevisClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.DevisClt; + opens Models.DevisClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.DevisClt; + + opens Controllers.Dialog to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.Dialog; + + opens Controllers.FactureClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.FactureClt; + opens Models.FactureClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.FactureClt; + + opens Controllers.FactureFrs to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.FactureFrs; + opens Models.FactureFrs to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.FactureFrs; + + opens Controllers.Fournisseur to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.Fournisseur; + opens Models.Fournisseur to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.Fournisseur; + + + opens Controllers.Produit to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.Produit; + opens Models.Produit to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.Produit; + + opens Controllers.Reglement to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.Reglement; + opens Models.Reglement to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.Reglement; + + opens Controllers.Stock to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.Stock; + opens Models.Stock to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.Stock; + + opens Controllers.TraiteClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.TraiteClt; + opens Models.TraiteClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.TraiteClt; + + opens Controllers.User to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.User; + opens Models.User to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.User; + + opens Controllers.VenteRapideClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Controllers.VenteRapideClt; + opens Models.VenteRapideClt to javafx.fxml, javafx.controls, java.sql, org.controlsfx.controls, com.gluonhq.charm.glisten, javafx.web; + exports Models.VenteRapideClt; + +} + diff --git a/src/main/resources/Public/CSS/StylePrincipal.css b/src/main/resources/Public/CSS/StylePrincipal.css new file mode 100644 index 0000000..6108eb1 --- /dev/null +++ b/src/main/resources/Public/CSS/StylePrincipal.css @@ -0,0 +1,590 @@ +/******************************************************************************* + * * + * Text + Font * + * * + ******************************************************************************/ +/*@font-face{ + font-family: 'Raleway-SemiBold'; src: url('/Fonts/Raleway-SemiBold.ttf'); +} +*/ +.testtext{ + -fx-font-family: "Raleway-SemiBold"; + -fx-font-size:18; +} + +.testtext2{ + -fx-font-family: "Raleway-Medium"; + -fx-font-size:30; + +} + + +/******************************************************************************* + * * + * Progress Indicator * + * * + ******************************************************************************/ +.ProgressIndicator-Default{ + -fx-progress-color:#ffffff; +} + + + +/******************************************************************************* + * * + * AnchorPane + Pane * + * * + ******************************************************************************/ + + +.AnchorPane-Default{ + -fx-background-color:#ffffff; +} + +.Pane-Default{ + -fx-background-color:#ffffff; +} + + +.pane2hautdroit{ + -fx-border-color: #d2d2d2; + -fx-background-color:#ffffff; +} + + + + +/******************************************************************************* + * * + * Icon Print PDF EXCEL * + * * + ******************************************************************************/ +.btn-icon-Show{ + -fx-background-color: #337ab7; + -fx-background-radius: 5; + -fx-background-image: url("../icon/detailbutton.png"); + -fx-background-repeat: stretch; + -fx-background-size: 16 16; + -fx-background-position: 10 10; + -fx-alignment:CENTER; + -fx-font-family: "System"; + -fx-font-size: 10pt; + -fx-text-fill: white; + -fx-font-weight:bold; +} +.icon-Print{ + -fx-background-color: #404040; + -fx-background-radius: 5; + -fx-background-image: url("../icon/icon-print.png"); + -fx-background-repeat: stretch; + -fx-background-size: 32 32; + -fx-background-position: center center; + +} + +.btn-icon-search{ + -fx-background-color: transparent; + -fx-background-image: url("../icon/search.png"); + -fx-background-repeat: stretch; + -fx-background-size: 20 22; + -fx-background-position: 5 9; + -fx-alignment:CENTER_RIGHT; + -fx-font-family: "Arial"; + -fx-font-size: 10pt; + -fx-text-fill: #000000; + -fx-font-weight:bold; + -fx-border-radius: 5 5 5 5; +} +.btn-icon-search:hover{ + -fx-background-color:#EFEFEF; + -fx-border-color: #959595; + -fx-border-radius: 5 5 5 5; + +} + + +.btn-icon-Print{ + -fx-background-color: #404040; + -fx-background-radius: 5; + -fx-background-image: url("../icon/icon-print.png"); + -fx-background-repeat: stretch; + -fx-background-size: 20 22; + -fx-background-position: 5 5; + -fx-alignment:CENTER_RIGHT; + -fx-font-family: "System"; + -fx-font-size: 10pt; + -fx-text-fill: white; + -fx-font-weight:bold; +} +.icon-Print:hover{ + -fx-background-color: #2E2E2E; +} + +.icon-PDF{ + -fx-background-color: #f20606; + -fx-background-radius: 5; + -fx-background-image: url("../icon/icon-pdf.png"); + -fx-background-repeat: stretch; + -fx-background-size: 32 37; + -fx-background-position: center center; +} +.btn-icon-PDF{ + -fx-background-color: #f20606; + -fx-background-radius: 5; + -fx-background-image: url("../icon/icon-pdf.png"); + -fx-background-repeat: stretch; + -fx-background-size: 17 22; + -fx-background-position: 5 5; + -fx-alignment:CENTER_RIGHT; + -fx-font-family: "System"; + -fx-font-size: 10pt; + -fx-text-fill: white; + -fx-font-weight:bold; +} + +.icon-PDF:hover{ + -fx-background-color: #cd0505; +} + +.icon-Excel{ + -fx-background-color: #4DAE4D; + -fx-background-radius: 5; + -fx-background-image: url("../icon/icon-excel.png"); + -fx-background-repeat: stretch; + -fx-background-size: 32 37; + -fx-background-position: center center; + +} +.icon-Excel:hover{ + -fx-background-color: #3c873c; +} + +.btn-icon-Excel{ + -fx-background-color: #4DAE4D; + -fx-background-radius: 5; + -fx-background-image: url("../icon/icon-excel.png"); + -fx-background-repeat: stretch; + -fx-background-size: 17 22; + -fx-background-position: 5 5; + -fx-background-color: #4DAE4D; + -fx-font-family: "System"; + -fx-font-size: 10pt; + -fx-text-fill: white; + -fx-font-weight:bold; +} + +.btn-icon-primary{ + -fx-background-color:#337ab7; +} + +.btn-icon-primary:hover{ + -fx-background-color:#286090; +} + +/******************************************************************************* + * * + * Panel title * + * * + ******************************************************************************/ + +.panel-default{ + -fx-border-color:#E5E5E5; + -fx-border-radius: 5px 5px 0px 0px; + +} +.panel-default-titre{ + -fx-background-color: #F5F5F5; + -fx-background-radius: 5px 5px 0px 0px; +} + +.panel-bleu{ + -fx-border-color:#428BCA; + -fx-border-radius: 5px 5px 0px 0px; + -fx-background-color: #e0e0e0; + +} +.panel-bleu-titre{ + -fx-background-color: #428BCA; + -fx-background-radius: 5px 5px 0px 0px; +} + + +.panel-success{ + -fx-border-color:#4DAE4D; + -fx-border-radius: 5px 5px 0px 0px; + -fx-background-color: #e0e0e0; +} +.panel-success-titre{ + -fx-background-color: #4DAE4D; + -fx-background-radius: 5px 5px 0px 0px; +} + + +.panel-balck{ + -fx-border-color:#000000; + -fx-border-radius: 5px 5px 0px 0px; + -fx-background-color: #e0e0e0; +} +.panel-balck-titre{ + -fx-background-color: #000000; + -fx-background-radius: 5px 5px 0px 0px; +} + +/******************************************************************************* + * * + * Liste de selection * + * * + ******************************************************************************/ + +.liste-select{ + -fx-background-color:#ffffff; + -fx-border-color: #cccccc; + -fx-border-width: 1px; + -fx-border-radius: 3px; +} + +.liste-select:hover{ + -fx-background-color:#E6E6E6; +} + + + + + + + + + + +/******************************************************************************* + * * + * PopupMenu * + * * + ******************************************************************************/ + +.context-menu { + -fx-background-color: white; + -fx-background-insets: 0, 1, 2; + -fx-background-radius: 0 0 0 0, 0 0 0 0, 0 0 0 0; + -fx-padding: 0.333333em 0em 0.333333em 0em; /* 4 1 4 1 */ + -fx-border-color: #EFEFEF; + /* TODO: the border color below is not being respected - it appears as gray instead of black. After this gets fixed remove the comments so that + the border will become black. + */ +/* -fx-border-color: #212121; + -fx-border-style: solid;*/ +} + +.context-menu .separator .line{ + -fx-padding: 0.0em 0.333333em 0.0em 0.333333em; /*0 4 0 4 */ + -fx-border-style: solid; + -fx-background-color: #c2c2c2; + -fx-border-width: 0.5px; +} + +/* TODO: try to scope the menu-item style to the contextmenu */ +.menu-item { + -fx-background-color: transparent; + -fx-padding: 0.666666em 0.999999em 0.4999995em 0.999999em; /*6 12 6 12 */ + +} + +.menu-item .label { + -fx-padding: 0em 0.5em 0em 0em; + -fx-text-fill: #212121; + -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif; + -fx-font-size: 9pt; + +} + + +.menu-item:focused { + -fx-background: -fx-accent; + -fx-background-color: #dedede; +} + +.menu-item:pressed{ + -fx-background-color: #212121; + -fx-text-fill: white; +} + +.menu-item:pressed .label{ + -fx-text-fill: white; +} + + +/******************************************************************************* + * * + * TextField * + * * + ******************************************************************************/ +.text-field:focused{ + -fx-effect: dropshadow(three-pass-box, #66afe9, 10, 0, 0, 0); + -fx-border-color: transparent; + +} + + + + + + + + +/******************************************************************************* + * * + * Button * * + * * + ******************************************************************************/ +.btn-success{ + -fx-background-color: #4DAE4D; + -fx-font-family: "System"; + -fx-font-size: 10pt; + -fx-text-fill: white; + -fx-font-weight:bold; +} +.btn-success:hover{ + -fx-background-color:#3c873c; + -fx-font-family: "System"; + -fx-font-size: 10pt; + -fx-font-weight:bold; +} +.btn-simple{ + -fx-background-color:#FFFFFF; + -fx-border-color: #CCCCCC; + -fx-border-radius: 5 5 5 5; + -fx-font-weight:bold; + -fx-text-fill: #000000; + -fx-font-family: "Arial"; + -fx-font-size: 9pt; +} + +.btn-simple:hover{ + -fx-background-color:#E6E6E6; + -fx-border-color: #ADADAD; +} +.btn-danger{ + -fx-background-color: #f20606; + -fx-font-family: "Arial"; + -fx-font-size: 10pt; + -fx-text-fill: white; + -fx-font-weight:bold; + +} +.btn-danger:hover{ + -fx-background-color:#cd0505; + -fx-font-family: "Arial"; + -fx-font-size: 10pt; + -fx-font-weight:bold; +} + +.btn-default{ + -fx-background-color:#EFEFEF; + -fx-border-color: #959595; + -fx-border-radius: 5 5 5 5; +} +.btn-default:hover{ + -fx-background-color:#E6E6E6; +} + +.btn-primary{ + -fx-background-color:#337ab7; + -fx-font-family: "Arial"; + -fx-font-size: 10pt; + -fx-text-fill: white; + -fx-font-weight:bold; + +} + +.btn-primary:hover{ + -fx-background-color:#286090; + -fx-font-family: "Arial"; + -fx-font-size: 10pt; + -fx-font-weight:bold; +} + +.btn-black{ + -fx-background-color:#373737; + -fx-font-family: "Arial"; + -fx-font-size: 10pt; + -fx-text-fill: white; + -fx-font-weight:bold; + +} +.btn-black:hover{ + -fx-background-color:#2c2c2c; + -fx-font-family: "Arial"; + -fx-font-size: 10pt; + -fx-font-weight:bold; + +} +/******************************************************************************* + * * + * Alert AnchorPane * * + * * + ******************************************************************************/ + +.AnchorPane-Alert{ + -fx-background-color: rgba(0,0,0,0.6); + +} +.Panel-Alert{ + -fx-background-color:#ffffff; + -fx-border-color: #212121; + -fx-border-radius: 10 10 0 0; + -fx-background-radius: 10 10 0 0; + +} +.RectangleTitre-Alert{ + -fx-background-color:linear-gradient(to bottom, #585858, #333333); + -fx-background-radius: 10 10 0 0; +} + +.RectangleProble-Alert{ + -fx-background-color:linear-gradient(to bottom, #E2E2E2, #EDEDED); + -fx-border-color: #B4B4B4; +} + + + +/******************************************************************************* + * * + * TableView * * + * * + ******************************************************************************/ +.table-view:focused { + -fx-background-color: transparent ; + +} + +.table-view .column-header .label { + -fx-font-family: "Verdana"; + -fx-text-fill: black; + -fx-font-size: 9pt; + -fx-alignment: center-left; + +} +.table-view .column-header.Center .label { + -fx-font-family: "Verdana"; + -fx-text-fill: black; + -fx-font-size: 9pt; + -fx-alignment: CENTER; + +} +.table-view .table-row-cell { + -fx-font-family: "Arial"; + -fx-font-size: 11pt; + -fx-text-alignment: center ; +} +.table-column { + -fx-alignment: CENTER_LEFT ; +} + +.table-row-cell:selected{ + -fx-background-color:#90b7d8 ; +} + +.table-view .column-header, .table-view .filler { + -fx-background-color:#ffffff; +} + +.table-view .column-header, .table-view .filler { + -fx-border-color: transparent transparent transparent transparent; + -fx-border-insets: 0 0 0 0; + -fx-border-width: 2px; + +} + +.cerclenextlast:hover{ + -fx-stroke: #3eb472; + -fx-stroke-width: 2; +} + + +/******************************************************************************* + * * + * TablePane * * + * * + ******************************************************************************/ +.Table-Pane { + -fx-border-color: #DDDDDD; +} +.Table-Pane .tab-header-area .tab-header-background{ + -fx-background-color:#F5F5F5; + -fx-border-insets: -1 -1 0 -1; + -fx-border-color: #DDDDDD; +} +.Table-Pane:top .tab-header-area .headers-region .tab:top:selected .tab-container .focus-indicator{ + -fx-border-color: transparent; +} + +.Table-Pane:top .tab-header-area .headers-region .tab:top .tab-container .tab-label .text{ + -fx-fill: #ffffff; +} +.Table-Pane:top .tab-header-area .headers-region .tab:selected:top .tab-container .tab-label .text{ + -fx-fill: #000000; +} +.tab{ + -fx-background-color: #4cae4c; + -fx-padding: 8px; + -fx-background-radius: 0; + -fx-font-weight:bold; +} + +.tab:selected{ + -fx-background-color: #ffffff; + -fx-border-color: #4cae4c; + -fx-border-insets: 0 -2 -2 -2; + -fx-border-width: 2; + -fx-translate-y: 1; + +} + + + +/******************************************************************************* + * * + * SplitPane * + * * + ******************************************************************************/ +.split-pane:vertical .split-pane-divider{ + visibility: false ; +} + +/******************************************************************************* + * * + * Progress Bar * + * * + ******************************************************************************/ +.progress-bar:determinate .bar{ + -fx-background-color: #5fc65f; +} + +.progress-bar:indeterminate .pb-track{ + -fx-background-color: #ffffff; +} + + +/******************************************************************************* + * * + * Chart * + * * + ******************************************************************************/ +.chart-plot-background { + -fx-background-color: transparent; +} +.chart-vertical-grid-lines { + -fx-stroke: transparent; +} +.chart-horizontal-grid-lines { + -fx-stroke: transparent; +} +.chart-alternative-row-fill { + -fx-fill: transparent; + -fx-stroke: transparent; + -fx-stroke-width: 0; +} + +.default-color0.chart-series-line { -fx-stroke: #e9967a; } +.default-color1.chart-series-line { -fx-stroke: #f0e68c; } +.default-color2.chart-series-line { -fx-stroke: #dda0dd; } \ No newline at end of file diff --git a/src/main/resources/Public/CSS/StyleSheetAccordion.css b/src/main/resources/Public/CSS/StyleSheetAccordion.css new file mode 100644 index 0000000..4a71c44 --- /dev/null +++ b/src/main/resources/Public/CSS/StyleSheetAccordion.css @@ -0,0 +1,105 @@ +/* +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. +*/ +/* + Created on : 8 déc. 2014, 13:27:11 + Author : Maher +*/ +/*.paneArccordion{ + -fx-background-color: #d2d2d2; +}*/ +.PaneAccordion{ + -fx-background-color: #373737; +} + +.titled-pane { + -fx-border-color: #2C2C2C; +} +.titled-pane .title{ + -fx-padding: 5; + -fx-background-color: #373737; + -fx-border-insets:0px 0px 0px 0px; + -fx-border-width:0px 0px 2px 0px; + -fx-font-weight:bold; +} + + .titled-pane .title .text{ + -fx-fill: #ffffff; + -fx-font-size: 13px; + -fx-font-family: "inherit"; + -fx-translate-x:15; + + } + + + +.titled-pane .content{ + -fx-background-color: #373737; + -fx-border-color: #2C2C2C; +} + +.titled-pane .title:hover{ + -fx-background-color: #2C2C2C; +} + + + +.titled-pane .title .arrow-button .arrow{ + -fx-background-color:#ffffff; + visibility: hidden; + -fx-padding:18; +} + + + +.dashboard .title .arrow-button{ + -fx-background-image: url("../icon/dashboard.png");-fx-background-repeat: stretch;-fx-background-size: 23px 18px; + -fx-translate-y:6; + -fx-translate-x:10; +} + + +.achat .title .arrow-button{ + -fx-background-image: url("../icon/achat.png");-fx-background-repeat: stretch;-fx-background-size: 30px 28px; + -fx-translate-y:6; + -fx-translate-x:10; +} + +.vente .title .arrow-button{ + -fx-background-image: url("../icon/vente.png");-fx-background-repeat: stretch;-fx-background-size: 28px 20px; + -fx-translate-y:6; + -fx-translate-x:10; +} + +.stock .title .arrow-button{ + -fx-background-image: url("../icon/Stock.png");-fx-background-repeat: stretch;-fx-background-size: 30px 19px; + -fx-translate-y:6; + -fx-translate-x:10; +} + +.outil .title .arrow-button{ + -fx-background-image: url("../icon/outil.png");-fx-background-repeat: stretch;-fx-background-size: 22px 22px; + -fx-translate-y:6; + -fx-translate-x:10; +} + +/*******************************AnchorPane***********************************************/ + + +.AnchorPane{ + -fx-background-color: #2c2c2c; +} +.ButtonAnchorPane{ + -fx-background-color: #2c2c2c; + -fx-text-fill: #a0a0a0; + -fx-font-size: 13px; + -fx-font-weight:bold; +} + + +.ButtonAnchorPane:hover{ + -fx-background-color: #373737; + -fx-text-fill: #FFFFFF; +} diff --git a/src/main/resources/Public/CSS/StyleSheetPanelHaut.css b/src/main/resources/Public/CSS/StyleSheetPanelHaut.css new file mode 100644 index 0000000..9e825b6 --- /dev/null +++ b/src/main/resources/Public/CSS/StyleSheetPanelHaut.css @@ -0,0 +1,50 @@ +/* +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. +*/ +/* + Created on : 8 déc. 2014, 13:40:26 + Author : Maher +*/ + +.paneMenuHaut{ + -fx-border-color: #d2d2d2; +} + +.BouttonMessage{ + -fx-background-color: transparent; +} +.BouttonMessage:hover{ + -fx-background-color: #F7F7F7; + +} + +.BouttonListeProfile{ + -fx-background-color: #ffffff; + +} + +/*****************************************/ +.context-menu { + -fx-skin: "com.sun.javafx.scene.control.skin.ContextMenuSkin"; + -fx-border-color: #d2d2d2; + + +} + +.menu-item { + -fx-background-color: transparent; + -fx-border-width: 0 0 1 0; + -fx-border-color: #ffffff #ffffff #d2d2d2 #ffffff; + -fx-font-size: 9px; + -fx-padding: 5px 30px; + } + +.menu-item:focused { + -fx-background-color:#EEEEEE; +} + +.menu-item:focused .label { + -fx-background-color:#EEEEEE; +} \ No newline at end of file diff --git a/src/main/resources/Public/CSS/StyleSheetPrint.css b/src/main/resources/Public/CSS/StyleSheetPrint.css new file mode 100644 index 0000000..d7c5ae8 --- /dev/null +++ b/src/main/resources/Public/CSS/StyleSheetPrint.css @@ -0,0 +1,47 @@ +/* + Created on : 08 mai. 2023, 13:28:01 + Author : Maher Ben Tili +*/ +/******************************************************************************* + * * + * TableView Print * * + * * + ******************************************************************************/ +.table-view { + -fx-border-color: #000000; + -fx-border-width: 0.5; +} + +.table-view .column-header{ + -fx-border-color: #000000; + -fx-border-width: 0 0.5 0.5 0; + -fx-font-family: "Arial"; + -fx-background-color: #ffffff; +} + +.table-view .table-column{ + -fx-font-family: "Arial"; + -fx-text-fill: black; + -fx-font-size: 7pt; + + -fx-border-color: #000000; + -fx-border-width: 0 0.5 0 0; +} + +.table-view .table-row-cell{ + -fx-border-color: #000000; + -fx-border-width: 0 0 0.5 0; +} + + + +/******************************************************************************* + * * + * GridPane (imprimer) * * + * * + ******************************************************************************/ + +.grid-pane-print{ + -fx-border-color:#000000; + +} \ No newline at end of file diff --git a/src/main/resources/Public/CSS/StyleSheetProfile.css b/src/main/resources/Public/CSS/StyleSheetProfile.css new file mode 100644 index 0000000..6319096 --- /dev/null +++ b/src/main/resources/Public/CSS/StyleSheetProfile.css @@ -0,0 +1,39 @@ +/* +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. +*/ +/* + Created on : 8 déc. 2014, 13:28:01 + Author : Maher +*/ + +.PaneProfilGauche{ + -fx-background-color: #373737; +} + +/**************************Button*********************************************/ +.buttonDecnx{ + -fx-background-color: transparent; +} + + + +.toolbar-button .arrow { + -fx-background-insets: 1 0 -1 0, 0; + -fx-background-color: -fx-mark-color, #FFFFFF; + -fx-padding: 0.25em; /* 3 */ + -fx-shape: "M 0 -3.5 v 7 l 4 -3.5 z"; +} + +.toolbar-button:hover .arrow { + -fx-background-insets: 1 0 -1 0, 0; + -fx-background-color: -fx-mark-highlight-color, -fx-mark-color; + -fx-padding: 0.25em; /* 3 */ + -fx-shape: "M 0 -3.5 v 7 l 4 -3.5 z"; +} + +.toolbar-button:openvertically .arrow { + -fx-padding: 0.166667em 0.333333em 0.166667em 0.333333em; /* 2 4 2 4 */ + -fx-shape: "M 0 0 h 7 l -3.5 4 z"; +} \ No newline at end of file diff --git a/src/main/resources/Public/Fonts/Raleway-Medium.ttf b/src/main/resources/Public/Fonts/Raleway-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..127cdaa5862c4a3450353b9e5c3f8c5367c607c9 GIT binary patch literal 129308 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

hxFW5g(Sc#05dZ$;(cwyf`I)V> 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/Client.png b/src/main/resources/Public/icon/Client.png new file mode 100644 index 0000000000000000000000000000000000000000..ce36bc1b41e64650ccb2dc37751878284a34e9c3 GIT binary patch literal 2003 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/IconUserBleu.png b/src/main/resources/Public/icon/IconUserBleu.png new file mode 100644 index 0000000000000000000000000000000000000000..7471135b6337fb8cfbe6336169b9c05f28b948e4 GIT binary patch literal 962 zcmV;z13mnSP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ{7NUBJ<u|ExL$)m5aY;-MjdTu5J_MP(+dVN(G--NUV{R+Rf7~`4OHE=;INxx z;Bx9UII`b_@DhA<3`a=%x(`!)eqNduYK}#K_HUqVA>N7*(%lBx{pm8>y z{FGyd^c%D{X{WP>fvtpZ+i>bCiiV?n*|9cn11AjimAKbz~h2K1cPpY}g<6G>(8JX>cVD|nt$WCncs?L+_*Z;HAAt0dF(kH0qN;6hq8Kh$gHtkQGM#h{;(jWM&cZHf*IqB!P$}tu#oa5%ZR=K`e<#XRS1l kWo*t0Y%7)-*vt5L03Di8Qp#Exi~s-t07*qoM6N<$f+(D~>Hq)$ literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/ImageMessage.png b/src/main/resources/Public/icon/ImageMessage.png new file mode 100644 index 0000000000000000000000000000000000000000..907f9dc8b0c625ee75e14c2edec81825362df295 GIT binary patch literal 1423 zcmV;A1#tR_P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ>6-h)vRCwC#nQu%JcNoXNw$-ES2rDc-2}Su+V5VCd#z>>C&WsMs6dWU!xSS@U zF(v!?Vr1dPVwP<&d*Kq7$Qc_mk(p+w4I`t`X$8{3#5B+>&1{@l!CDZnp)$l$uWRF8 zP-$Tz|7T5n-re0VxzGLX`#jJ0xm)r0@nb}S0D#|nC&~8+YY}gekm6n=lZ-}=SO8cN zfhSydb7qUxSu^MlAzniyNrQ58*^%->x*q^500914v-r$KM_hvgK*&D`$Hg->&DVG_ z00;mNY3*?6N5Xh9B0K^|N2}fg5D{<-UN5pHuB<}(ySojHR_>(YikQbht5JFScaJ^@ z0A6p_EdZivs=}*Mxs!?{MEnE=d0H}g1s()r&I+b38pp%Y2|dMK3_rlwv{QoVYq-Il zkN8O0jH4j-yWF<$Z16!(?}n@Q;|!g%z}`Dvg4y5^bff38eOvtOK1Zw<>{WN4QVj)9 zTmJC6rQ|0omx<^90EDw%$h_+2^PhH6FjHxAcQ(}g*gl|qes6#$1MR1j^;UNcKf?;a z%*`Nx{*DIy2~+oW?tgy(j&z$&Y;Wjr>-lHdg{gBqtV5XP9RP2F(fUQWpl9SZ3M=K%rN4b!5D=>XY%>_<8@|-KWPDZK>QAK(((H9b+O>WL`AS@52)qg$nI?HiUp@Y7nGUF-uZ#g zXXj&U5vwY##_D9_O=G*OCYlGAH`E`$pEg53n4x|rLh(LxgxNSTlg@jlU0{u1>5U8_ zw58VAWScB+JZE3q{Qd2^-Ve$RWokL0o=icu7G?8gr`{JcA`8XoP**Uu#R@90(8ecP zM3G}DMKRe+=mX95<}Vz+P--NT;r#Un{f+h%$kM1VKj;n)#fV<)C(gP3W|KK zA^pkE1!}!6u&XH7AYCbpYi!|4DRPT;8FcHZ01*AH6PXeH@ZRxdJ^~Ws4?STlWsR&~ df~cAMcL3I!I>!J2002ovPDHLkV1lq7sY(C< literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/ImageNotification.png b/src/main/resources/Public/icon/ImageNotification.png new file mode 100644 index 0000000000000000000000000000000000000000..67e8307ceb7dfaac0f2458b5f2be803cf6007ab9 GIT binary patch literal 446 zcmV;v0YUzWP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-L`g(JRCwCd*uN`AVH5}OkK1b`S*82|l#+}VR!L-1m`F(|n^GnbiIK>LVz-%; zltG#NE~6xqc(Yt(yzlfr=giNkPu+XZbH2Bx?Q#y5Fo{~#t2>O~wrE2My;xNJ>cBR7 zP%hGtVO%=Zjn<-vGqfj!&+;cw_;91Ns;LruNzlp?H1(q)D!v2zMQmB3Z$ux~qvBy2 zGg0xdhJmQ~414H|h=)2HqB$ZST5yE=hM8iMitM7ZnzXu0+EE;gX6T^R1lFr`}!@pL7zfK5V&Og?|_}zr?=eVgP ok(^-}6IG6d_jxug7j5_*0IJ3{5HEPyg8%>k07*qoM6N<$g7)^nOaK4? literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/Logo.png b/src/main/resources/Public/icon/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..32a0ffd2f25d521a47f9ef425f37d4d37a53940d GIT binary patch literal 3212 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/Shopping.png b/src/main/resources/Public/icon/Shopping.png new file mode 100644 index 0000000000000000000000000000000000000000..4e96a891ee4d5d53d21950388c8297b4be781fa2 GIT binary patch literal 895 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP~upCPlzj!9_rx#|NpmK z*6ss(!=WU|FPNd{15fTPCWSw~Yxdau(>*gM=DX-cwr923HT+*==h^!7=I~m)zjRxE z^Fb{A+CW0JSKi(}`#96umC!qdeuB;xSf zshQDD4kE3F!oJ0xM|~D4Ew;Ta?$GuB|7xoxI<{tqKg`+2Kga+3PG8FgVXYU_p;EDc%bfbJcm>QP%x5!fkvO2n@RrZ{Mbm|3hG>Q_?182{Q%%n>^ax7b z4m1s8@7WxE!!bE!!HgNJzR#YllW@U3+kBNyXv5c=t#VPZ$By|)x7fB_U|MjJ;TvPd z70!k@=7$b9-Lj`9xNj`zNLs}-V;$2f_d*?uqst5eS-Fq@D$;jdW^j#DmU}tFoQoR^ z&I#x_?D#V+;>5;_VvIejQ+3WPk>6@5oTu2?`noAt;+PoC887%=fA8t#FVV4K z`tW7@#t(D;tDfXE*byXYnU;dS8sAIk7@=M~S<0JQ-SKhyreQW#W;rXX`_5uT3 zwZt`|BqgyV)hf9t6-Y4{85kPt8XD>vT80=JSs9yH8Jg=Fm|7Va=ye*GqG-s?PsvQH z#H}IzO7}^i21$?&!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$LAip#)78&qol`;+ E0Iu>A+W-In literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/Stock.png b/src/main/resources/Public/icon/Stock.png new file mode 100644 index 0000000000000000000000000000000000000000..87b419cd74c8183252559da3d146c10780cac9e2 GIT binary patch literal 1189 zcmV;W1X}xvP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=D@jB_RCwBqR$YiyRTTcdwfDLE+?nz=gOv=`SXv{bR2CFUW>`KH8Av%nZ$1Bonj@ImqPhVyrIcGV=ifzS7YR3zV+K%o?;kg_X_CK< z6by#za4dB!A}byY02x}L1k7NDXS{Qc-fs*cY+MOw-EVdSI0hJ06|JJcYW8KV>s3`0 zzCgR(MhL9~Tn+vp{~&B{)AW&3f~l>UI={N5K@{`zU4#%I;(ig4X#hO{<3rE{kOq5f z8*ph5J+KDGwaH~>52)t7L*tobTSPVhxZ-^Ag$Qc^2D969&a(u@4LD_HlY@Y0Md43~ z$i)>S9w6iY@)bfjBEsEfb_swtg94UChSj3s4YHtoGT)2pga2z*U)T-6M)6hipaId>|?G@EloQMArD=jNLj z-z8WME&;uw@UM}a?f3il0r+E)R70{c=ZvO_$T>qb10Y1?_3`nsqoa}{IV>%V)_=wr z?**`_D2ks&q!^tqCtO|E&zso^0LVEnI+jtXkBsM>Ai{kkMG;y2j@BfnVoG}eY!#7W zk=4sy0C3K~Kn{3#J-8*TcFw^J5Rr|eT(4d_cnHA6^)e%8OK(TF#uTwU&m+g{gj@$Y zu#jwq4|`QLV`{aT{uN`)B+Yvth9wn5WKLB>UH1jB4B&FkxiK?}H~_fI%sM20BzX^D zeu(OCkX@#foS7Z3s_N;cY3hlI34i74)ovL=>U282l+%m-x_?eYP!z>m-uuHOPXkcE zZd0`>06wPlc24P7N(myequp+Q39vD<3naz{faI~JX^zL3US?HQkCtV5^6c4jhp%0` z_U*Q9+isovZmu^uIk{o`Bilc#`~8p2^nFup7p>O$6yv3o@&S?yfZd_054YRxLjbx8 z>=Y8JdbIHVm4$`gtZM$j%tS<*5XvLsJLjedw$*g2ICtLEekFN-jLiiA<){Ob9P{4aSyj~= zp2U8V@ZN125o|C$hF|BN$WEr5bGw{#Ah{mE`jv)+M%}Gy>%4bcM2HZ=%u3`eiq^AU zL^iM0Q$<`TiekTW?#UYsiJbF}rfGbq)49P91$KH>`#z<7H( literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/Usericon.png b/src/main/resources/Public/icon/Usericon.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9afd14e9d95747508ba4ee80dae44a6a185876 GIT binary patch literal 1248 zcmV<61Rwi}P)500009a7bBm000XU z000XU0RWnu7ytkOAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=W=TXrRCwCVms@NURT#&AXD)l0o!#wrdoQiDXp2BnYfB8!VkIGv7%!L*zz0kW zN(@F4NqjKAm}tU-Ax54IsCaq81jN1=D;KE|Taro$20_3}D^#G=?RL96JF_!BxQoT^ z^u|K@C*Q-&nRCwXT)xW)Z^w4rlsfvZTayed1eOCU0Bpyx9EUF3wtG}X{>`o9fn%p! z=Tlx?-=4QY2;tVp54-?811tfe0Fn?OSStysFJs$#WJ&5|hEkdqROM}u^20m{>;e|J zj8`p$sFsCz0yqM^0{k>>7{j!t3-dCtdj<<#1$>)b!1uYAsv^6?OmpB(GX%*g3UmT( zz*&G3r_X`o%o=7su$S4Z82BK2*|{_@h~ow$%hFWG^cJ9Tds+rO4}7R9vOCPR;gS5_ zgaD`o)=?O32F?Jzu6O2m-#J`-o9)l8Z7RU7e|uJ zqzeyHSb0n<<9=s$Z0MLt(7SEbmPfH2JAb2a4n*rY!-7fg>*0B}?o$Q`xox9Z}0v zbBXxq*aSd3OCQqxx!R>W8%1ZUUBC{2cp~|4NX_FQqVrhqgq=znCL?18Th^`0y{^ax ztD0GW90H!sJ?!i3rZ^JD>rt`oTfIs$EsK1XPMbGB+HS>-@^73A9X+@h=10 zKJPlQb8zVI*VZg+`t;J}q1LZ@&h{l!sT(0ZfRe3i#?LJd9zHSQm_`yQWJOuAcKJh} zloSQ)b8XjSqy2qne}DVI`l_y)vPf&TEU3#}wQN<_eZK!{&$&Ma*R(X$yjfKmY0UMH zj~Q3HdQQJ&+0p@B^G!G=@x_rJZplZ6X%P+vo@#4e^qJ=K==qj?J(l>j|F0WIhei^; zMk+O6WNcHBJ(A{AE5iX_YfX7%RYh@VVZOemm9hKI_ir5>itSb8TO*G6_{*c?KC~zf z2UkAc-tx6aRlM9G*^a|ECx6~BI5e`~tNsThr3{mlVUkE1D6-Pf(Yj>+odn6{z4oU2 z_i3tFF&v8#kH?9}<4C&ZMfZEr{9duLWzqYQP@tT3BJO4hA+wf?Dld!1z2$pgajIBQ3_j@u0Y0000< KMNUMnLSTZRszgly literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/achat.png b/src/main/resources/Public/icon/achat.png new file mode 100644 index 0000000000000000000000000000000000000000..fa6d3772256033def0af9032152e65ac769e565d GIT binary patch literal 1898 zcmV-w2bK7VP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ?@JU2LRCwCFSY4=GR~7!&{yAsnoHKKCZ(@xV(wb6AlA5bVi&}{VsX;~iU}~aN zp&|-C_~MIIAAC`?549i~kc0}+Dn*U`v26^7wp6MpLPP~?h^@8Bjo#e3^K)j-nZ5T~ zKIF{JWbVDmq?&BlFf)7ab-uIKx4yOZP_Nhfj~yAT4DQXnEENdf>M zA}lQ}p)5-f5w6BiN}*P(fy%O6h@$BA0Km-f-alIu#bNLL6GU`2%d!wB!V zAC2SqW&jWo^!xoi0Dk41L#NZZYF@g?Q$#d+&|k{3ysz8s?#%OipZC67t$m^_OXPWe zRRN6;bCKJK;Jq(;z1|}tvNy}JyW=>%v)yi6=bXD1phV;XC=r2D3UM4mL?9wZMC5L* z_4QenJ)I;;m##7@B7%q zxm6U!V_BAcT0{m!^jiRHr5}mNE+T3II0fLPH7N2<0MR<@sO-)I*d!unu(-I0cDs$` z<>ghg-EM!7nT44fw8s zIRY@+Ak0k6d`AWPYzW~PwcG8>Wy5@yWq(jgnX66mq9_h|?>}RlbC=uuR}uLqfUN+| z0yr^=9l%=wYyxmnME+5EN~$E#M09)QvAIp^G; zwbok!yb55?c=+->ht~SZdcFPu01pB9#ssHSm323W$Uy-2PuTw&5$$5;|2XHK2LLsh zEt3-foO4Gi8@B@3HddO@?RHU?r5+FY_&NYyM@mrf@7^kOM@6Is0H!F4X~O->BuQFY z>sbJw1#l2RgNS(Z=FI?*Rr_uPaNES$ctmU>dXtFUR()p?nJ1zxl>;8H)oK^Igv&`k zGo#UH{3Oe=ePeH~|6c_6-Y>OUty_p_QAD7oDUbkAmgUbz9fpYL@$mky!#Vd1GcS(p znJ9{;J$o#K@Ncd4bs>b`c<;XoKru6{wGUWp=gYEuxYcSMYBrl7B7_jo@Ao&%&d&b8 zTH9D&UjEVI;^IRhqBd^ac*oq_+?Oj)JuwO$0GMgtRz#M|vOJn3$tRUkH;Tx!#uzDz z0?ho1wRYYZbHZACoS9d`-tYI3W!V91Z3DmwX8yG?22m94sRXmf%ttR$c%{^pxcRV% z+(Sff)LMUDYke$DQ)1@1YRi^1O>bdl4FFne%*@O*wbr)kEVs_g%GgWk zVv3v1=C_DQi^y=K$|ENNkV+_N4D8DLhzRKXP}Ny3isIy8FnDxTJ6x~Vr{&b{D2ldu z?-z%|;rq1Kz4MNs*OG!nMAGZ^7QFZUNeWFxbP<6u=3^Bxf9}2i)0KpMJ^fQkVRWy& z2-Fk>831OIB>9Mlpx5g?ndf;n-a5ZlT+L>)o2Kb%P?sw+B7!K2KBTq24giuQ`CgJF zJOSuZ=++B`V&-RxqWBaMg)5ST>Xu`e*#S_sTJ8GDJtJLO=j@txnHkQxZQgr535u4M zmZsqpdGB{M8jYXU>-8I|Z0Zux1`*+QyM14t=g(CcHqJvmH#c`6ilR54|4DKp%0dXk zR;zVyk|amtI6k*3eB(EmOMntUI2dsa5#?R-C36H@ZLYX7JW>f=Tl{0yDYe5Gqti4Ed7dN7GGti>BD$4`bWs#96h(2Y^5UU5j(0ofcC}iqHN$JxV*fgl z@UIHUZf3p-z-a*cjWHMwhp(1p8Ag9ljG8|pdSzy22G-iQ4F-d^F!QN2P4`ub{&Je8 zYjSZaPF28W(lq^j9LG0{NFTuBs6p#=I(K>RADiqtMZ~6QdOV7v_k<9J0G71Yo0)l- z=lQz;{BcdKm=;u3JhwL*jR&JBng@`I$V=Y)16u3vjuU)bAf0nt06Y-K@$CQ-=iH0k kZujf8TJ0C>W#)ee0HNJ5YQVQZUjP6A07*qoM6N<$f|xFn(*OVf literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/cheque.png b/src/main/resources/Public/icon/cheque.png new file mode 100644 index 0000000000000000000000000000000000000000..6de6e7c7da535e169107cbe675a6de240cb685ca GIT binary patch literal 507 zcmVK@^5Z+$a``iH*_5&MG2;m2aS6<0IJE`2d11 zAokkWh^4JX>R@GKW$XkmjW;BSniX^oj4&R~Ox)R-%z)>IugU&9n~!idGeU4U91e$L zPbOJTjNu{zRmoRk)LjI+l4fMy%LqIaxhYVt1q;NDRRG>L4T2?g)3f1vNCt}t)J6Qa z3#R5GkW1Q#%Rcj2M&O3J*yq5!u>fR1E#gAe@&zlBQDNQ^coQhIjmRwmo2s)PT3}q# zapVcDKPg#I?5JlQYoE=85b&8TVgJRBv~JP@w~`jYw$}AJ137`dt;h_WSA)QA4^giI zH9`N}FIuN!=yX#MfD92-96CP&Z<0rXy-)(a5@m?tHF`(T);gJ?bA{H2-Uz`)NCBTS zV9I((0oY1R6W|4?&J^mbN)8E5Lkjqe%M8HQ`a&ZY1qH?==L9XSlNmZ^X#H8qn&Ln` ztEqjqNC=pSJ_EfrbNA{x9A~McX7*PBIFrs3G|;_NXU-xpq1M22f(7slSd-F$=6?&o xU;RmBKFSEBL?Hn(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;$w@>(RCwC#-AiucFc5@clhFN7nmhDtW-$pou`KIF)>lAwhD3J%UELxat5wxw z0zKPAd(cZQ6D0cG&jMpG0P4W&H2~x!{p2B2=Vjsk$nD*y;| z0YHEO5T5)3fS?utr~n|40N?@u5I_KM0RX6e01yDQ0RRvH^nU;l0L%dZAOH{m2mk~C z0)R6B01yEDH!cSt01yBO00e+()Br#LAOH{m2mk>C698yBpaH-ER1E+K0F>!u0N??V;Vt z0qRD9ZIdVeYKSJ_bD7VxC>KHvppr z&9{$tngR6r;2B`XQ?SO0U-E!(|2OvWr z0e}GDQ7~`M0N?;o^2n# z+L{@_SEmhuj}`<%$}F(yXW|-1m}39!)5pLT>;j|j|K-~I8yA|{5oUy7)tdXp3(p9{ zOc1PI>$3BWW`B$v;caGbf%@|t;EKu`F@QBg^7n9nJr-4iI>DXRzPUa1n=JlLfA6mS z>%!Q5eL9<*(E?Ibqg4IbEg(hh1Q@(JHV}r$mq*VE!~fdGWoHb31^^A@js>=ctuz1t N002ovPDHLkV1jOFP}u+g literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/client_detail.png b/src/main/resources/Public/icon/client_detail.png new file mode 100644 index 0000000000000000000000000000000000000000..e3515027d8c00edb41baefa48e085344fea2eef1 GIT binary patch literal 1868 zcmZ8h4Ny~87C!Hhg!e*#@FxgDLd&202_iqzv4jLLqJTeD&)0) z?Mh`G5Ltw^UD!d9En1aTc?2Dyf?|PMN-?3W3g}2cg$IQ9_J!S>jHTw@WXR-#*lkfcm;F#RlkqoP=Tox1`knfBG zC~^lNN&yxa)=mQC2LMbd0K#hk>~l}2-i-m^eZM6t@`J*kUXCRn8kGy8)4u$AId{W| z?D^WYiPodGchB=)71ZB5jqB=TvSaEqPR>AO?=Jiwzd8G?`_2@daGu?Cd8O|;e zo0PyyKBzPaf$>C7cQME=rHG;XVvd;TFi{@cLV&=3=rn*e3-a^bLB@aU4&8XZ2gvZZ z9?*>mL2{F$z#3_ef&vtd)queH4SQ}OG00n#0$}9Y17_^KiJ|F)A8>$xI&VP8;QzWF zfDqRsS6HYJur_?FNCWaLj2!UOBAQs-=$Wwy&)0I%dCK>A?HfH<*`CXO- z$TZ(rBbhvo{GQfe^ZtN4l$!h>`(kFJ1>zw7-*UuK1V)OH6+uGSKPmwpU(D)Jm<@RT zXxy=mmfI4DiPEU!+n_r**?@!q{1a{CPMEUbPOfg~ktxgkicd~npxcZ}!{HTUpu{w9gg zRK3`5Lo>@iivd%mP^XH`(SRN=2YQ#g1l$@@URN+z9=owMj1ShRzRR|Ovd(zQQe}w- z=$h?lnf3(8CCO82rfuF0x?5eYz6iv~fff^7NQ}=L+$12?-C!$D3`#>fSbcTn^#!Td z_pu(a+~~ayLE-kZd!cFGeuzrQDO8heq8FKu zABOKY#o((rl%tCh6g>+}3&^bo1naElvh!t~ORp2DOs%tZ5+TuhfD#UDY1hQ9e+Kq`*6`g+au%l#pfiIaHP%C;3o8fM*Cvxux5|!F8#Yc20L|X44U0o!dGQd zKB+sJs!4B3NUyTaa)&N^+P}{4==o`bVbEEmQS}D-IZeIS`l>g4$I-G>>b-~Lr1oWt zw~_bPjbU%keLl?54cXIoWV$Q4bGxlsHL6+Py4n8Qd^B&$tg}>co)bUWyX%6h;aaTX zM!TpbMn*MhIk9}QW1T@0@mbuSxN`mTSjBMqxIMiezgX*Q(44=&t5lszeX=(=iBdDxS`7v*yaR~x!yT2!appa#T)T&i2u)!hoLK=0=$f_O5a-^p@4PCr`N~~FQ+#mR9l%i}4Of9;`IMR2 zS!dfLHXo46ybY$9#A?S5^w}I~E(yHU{!waldHC4F*XRDeSo-BFrr=hmUhB(# zyC*X=q#2_|sigFGdOl=Q&yZM4LK!GcK6}CJ!G8|6)To3lnqQ-jp1e0B`sHjF`>Fdx z&Q)6G{|hmU3Ct&N(N*stLZnPsk|3x(u;*=B+C6d*61`>Y&>T;Is8ATsP}Bve~0d+E2yCL-a6 i=hKgvkG~~=2~^+qOi&gTG literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/client_fidele.png b/src/main/resources/Public/icon/client_fidele.png new file mode 100644 index 0000000000000000000000000000000000000000..ef69d64d0268774cefbd5d6325ec6b150261aff6 GIT binary patch literal 903 zcmX|AZA?=K6us}YrA6Dq7=D#3lp$lZxM5&8wgjF_(N~nNw9O)et!>IIsfcDR8>1P% z6=V}sDr5vikwG+;Ev$l$t;O|&Qeq%0OxYNd*-1jsRU5*GwvfI({`lkGb8>QTa!zvZ z8L8wTXA5r&0C2>(NJb&CS*$3kkL0SyDTqFa7wZ8;yEhBLv>pW|@-?`u5TGW78mKj*_B4>>C#%1A{M3=P_XZ+f zUz-t|rgHcA50~nn^%7l$Ztltlw~49V9~o!M;JL?_36pyx(>tT!Lodxe#9R29r{qD5 z;T0|zx@d6vGw5~#zw%ca1 zfb!MSgwYgaF++_Nqn^8#qKYS1Ek%Yk%4o(n0mLJ}t~Ra3iBKz(--y7SJ~=ARf$}$U zntc^n@I3A8nf3@X+!g4VD)bK07k7~c%Q3^Lj(bZ*%gLz!;k?gQ*;LD3Ax3YaUdQEw zV=MAMwcpxm_rWerwoFj^H2e`L-kyDO`1Igvg027jqcoYiF_ei&Z5J{V>MgedI}>^J z7iwlD@N<>%O;+#fM)eO3p?}x%#wQ#Xq4?a8bGbwp*#^VbCEv%vt=^K#NGd3T;m?E5 z3Kp7Czsaj)B;5=pcVZKH$TOU?dyZ6_(<9PK={KFk}l|Bd0=h!BQ}q@uAET(4_S zto=>?)zh9E!PLmnChuHdK_17x&b^XoY&ITh8}!;7^m_9G8HMG9wT^v;^G@GURSDU*;2&5rQ35MZV{WI z7U-}GM^@jmNlFAp*m{w^9f7N31G6qo`FIME%5c4ks7$eD)_vy8ALq8e1k>?mNnKlD zV))^aa={$=AkKXI<&A4u<_EOvb*gDQ8FpHJSdFRV~ z#}~4$bWX*|ehGT-P;^Pg73(-2BlWY$WGp+n#?4jCoTz`7(cLqNI!jq>>dJtggzN7H ZjzON_JHhu;kA>6|fjD0x>VHpV`X9M!Y^neN literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/client_retard.png b/src/main/resources/Public/icon/client_retard.png new file mode 100644 index 0000000000000000000000000000000000000000..719611a42c41636f7ac949a979450027994506ac GIT binary patch literal 819 zcmXw1eN0ku6ul4dK`2J9jMR`yt7SPFR!*w-OR3ZhwV7!%eXi27TxP2*&G*DwWn-~E z)TTA&tYOWMwZ2?In7ZbgMG<8hrmWQhQ|voX==n!~oO{kaJO7-!dp1S6QNR!41ArhQ zUa^H?dI~(8nVoBMpD{G8C_eKLfFf)P7|QQTV@%1;_$`|Oj)ybhN`Sv!hQ9zDmIByG zfS6i<*#|DsM9NtGcv3??OB?PD z;oUP9=j@f1OU=uozs$lN*7UZfU;EYU03z;N#LU69eA>_~ zTi)6-7)-xYeHwTw?*&(x)342bslK7yg5^yQa8sRFM!6JjEh1)&mN)w7TqIXBK|*?x z0dsa7g3Cl`n!bh|ZwN$9(3no$cKj4_{7H@Ppd6yXebiqg8?j(-qu5gi=D>NC`Rg1A zktB+b-G#y-ubxG-y9B784is8(yBM-0Y?TduEPyQXYsTvZGP+e6%sMcO6I-B4hTvzopSe@i}|K)uF_FRQnqBxuu>&>P5?>qpRJS41FDq3Pm)jw^lL(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=X-PyuRCwB?R!xi)MHGJZs;jGKbm3s|AV0=nNc>kMt3db(7o#53#DpkvQZYsi zXkv^(E<^?6#e)aq8DhL*BpUpQs0l2tW=(*s2Y$p05@+b%s_N;kSM|J1lVvlrJHVH8 zy1MJV_tpEWD&d@i*@!Vh2myo;SB(+zAt~jiBuUmH;+;~;F(HHwA#_3r=R*j`i0H={ z<0JqOA_5|U5CQ<;%DaJBfLJ2pR;~4`N~v{12!wgS%s@oH*LD3F5gimlI7A$sn2111 zxj}2aPbsy2EG;_BA0FLI7B6!CDK>xwSDy&&(V`_{%wWn=uBA zF)i=?w>%3Wg#WCy`>nNmiRi+dxk+p7EqR`UwRSNP9cN~aF|u>+nT8LnwP1`<-uuZ$ z*;@O4x7&q0&!OAx!pzLfvphe1Gcd-y*6DQM^5x5o?n})a5uG!}EVkAH_QSU=Ns`q~ zsFEbPTL=N(`{w(ed2;?sRaL8r=)1n`eT}XV0+dn@%u3VkNs_$I%m6bpGm?lV=6FEP zxevPC?nYzG8!<*R%vI;yb45`=uh;vi@!mQ2UZ>O9V6A;8#@M^cFwq%n?ag3}SzR=@eyW@i1;WX zwy%MB9Ho>i`Z@x{plzMVvNW8MYC?03=thP#%wCf@?~be)F)m7A%u&} z%w<`=TNDN4c@9NUKvh*=Es)<(6veWlD3tg9k^ z06<;W6W;r&EXy8~QmzbU+0!X}8-i&RNWPj4>V? zwGE_{OWW=CvR12gg;;A1S(e?DB+05#?J)Dt$jm=5b2(!FEl$&PPjhz17@J(aJt#Fp zNIAy%eZtIVi0F_~YU?P9X`1c;fLnzSUotbLY5H`UrrWMz(>cn_6T&$MLWqa8))Na| z=57?s3{_P<$;^k7{_SJZd%s^PwO!1;l?_KD$D@)G(Kj*1!vFyP4*-kO{Wfke))D{! N002ovPDHLkV1g(bNx%RA literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/detailbutton.png b/src/main/resources/Public/icon/detailbutton.png new file mode 100644 index 0000000000000000000000000000000000000000..cf28e0fb99e4f078fea29a7e4efe976aabc7d2d7 GIT binary patch literal 501 zcmV(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-dr3q=RCwBylQC-)Q51#08B!<&7NaC2U@(n{q)>=m1WSux8d-y2Awp^q|A2qM z6hVa)Hg*;aE}H$X+R)OyXUUH@Eb>Z!y>{UxxV4idRiKd3wELBijvV@-i^^-ChHsxyI) zt8H~F^;en#cT@9uG+OF=busqm)ZO6p)ahEF1ZE?SAHe+xavGQbP6Lxb2Y4F17H~F) z_#%|I)RXFFa`Zi(bLy3Zx3hyHv_^qrzzv`c^nk~}MPLIspFUoFh7#D0_u)AF33vtc zfsepz;0SOncoopiS2&~YhqZxvM;%s2)uZa9`ZC#HSBvHx+)IRm$m4X1639#>C99yR{3;pFr0 r1pc;4bvX&V`(J_D$%@)hXMPR<;KP6)lm8z900000NkvXXu0mjfGULt9 literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/dialog_error.png b/src/main/resources/Public/icon/dialog_error.png new file mode 100644 index 0000000000000000000000000000000000000000..ba06bec19c6d16f32b7e07cfce32254b529ca88d GIT binary patch literal 2989 zcmV;e3sUrnP)T1Ta7w0*x3AAAH0h(3t24Ndy(6)8Sz$;1mQb zqxC}Xy=On>!#VqK?xVbf5AI}VpR?~dYybaiueJ8tXJ28A;kR63SM!h%LI80f5wth6 zct8g5%vEStT<#em!~kFfFa#J33E4EhhMMu?#}BWns=BqTtgQSd0S6$JO7(PhcAjc)Z$I7E)^@bHxp^2)OeS$02Y`M1_8n|&Y~0b& z(eWwpjWOn8p9BKU|8>rsIZdy>{`$>gocZqN1X_wYBw$`uh4#A;fv>*wHXLqN%Cr-l)x6@D{jt@gf(x zy6}2?5su?mA;4bS>bfArCCPRsltSAoC0Z#|&}yY19;amJP)bTm@jQ=oIt{?-)2A6Y za3FPcb+t`RP4_l8H-8Hp3JC;pen>+@Lygs-5CS2DPeMwL?%c`uZEXnG#fimm;&I$~ z9H*oNCmtu3NZ|JCha22Gu^1w7#1Opap*#n%#k%h6IIw7xW$Qjkda;4Ps5kak_) zyexs>c`c={=_nCvMpB0UaAwaQZkaq8Hx>)=^!D~rRaJE>{(_o_5{LsOWo2dMG7w_z zzx(iEv{D$Y(VmBJ9E?&3*QM%_M{r9@II(As@7P*n;&Gp7;18h>Xzk09G9)o@(j>G} zbbs;*T1sCbmZ(ysPn{w$YE)>-y}i8*9XhleKO2bWJ8>96q7f+D(}NHKE&b4IfmKhR zPUY08#9}cphU2?;W0b;?()SbB^#ux1;KW8s22Pqp`J_qySf0m^AAjtV42T$|P^naC z#ui(CDVoehXTTVP0dzKt@g1JgGiFfv&_f~7(Nm{ljN$mMU1%wBTo)xo!3@|sxW1l2 z_4O#FFvc)&@?>N-%a42a`UHa+x84>FN-=iUtPqIRkmERvo;D5Td33z{Zq9%s?!TYm_uUto zP5zkYcJJogu3c!)BmL7)q`SKjL5RL?6S75Tv!r@@{1=i*j%?kE5Q4F@X5~EZ2BGt| zM;}E=NypBe0F0V8jXzAC8k$YMCeQBL#SibjNBaDEybBjV2#nS_vv}1e1i4PE13?6- zMDMwC2-oGSl`B!%EVs{{8*1Me6Sg%oXQF~cu=3%DL-6_IeE;^_9N)ej+1rZ~tnxPG z3UVFzs!b^B2L&4*AyAnN7k>DGean`S?(Syd^5vl^*;x=mFy`^ca}qPHb(pMqp2v5a zH*;d!Hbg9TDfJKn6Rgkzu4qC|en&y-YuQH^rbzi})hZ6GSb>x>wC`x#&aYNM$F^+Y z_|~mqBIvj-!gVjL6+r~Drqh=R^+_Nc%%%*1R*RANa^*@6tXPo~m7^aG`b>zC<&XRSPc~;0Pw}Duk!iJFNXw*0e4-OLmM}8bjy}Y z@*;9AaGP!bIm#$jiuUGjHnisz3|6c}?YtQHkeKU+c5kbZ5|z#7WU6)sqV<|)z!-xH z1RG;=2Fx$D%a-w%=bz6pqi9NQ?{9zhS;j3`kRwZbUI;##rRJN@b*;qUuLCNR$=R%^ zY&Lx7_UE2s!jdI9nzu4+WQvB^@$={7xGo*rw};?E?FTKv^Vb!H@*|N z;3g7`S-6lf3l|oINc-;o)vNhx&6=Vl0BYvUp?dage_I(;a=(&XF$(p$5?l5LaN=>_ zv9eiW$t1DTQYxQ*n#v%RD5m`{Uwe(O*R2a3f5L(V;g^RfxSF|h@zQAytzBDyBMQ2& zD0IbK$Z=ibrKRD%0Ar|}J)03TX5-l!$M%+XK;W&J~VFSh({xpAnK~xb! zFm~ZWv{D>dzrKLLb)^#dxlpXMG~8AFZu)d8rcEmlX2G{_+Qi}JX52*L(*9RU4y;;* zOsAQ!Xi*M$YaZ4VzuUO6U&k^>HcR^ad6Gkh5KAQdTqxKdMD1A!!I7304sYIk zX#;Qb`=I^&rI+y1Y5u%)X-?7tg}`JWZ7oOnFk3rE8v_*twS=ih7A6dfZucyNvh6*D7Czyq?W zRH`SLOqNGYsBFxbFwM;`C!3pd?zNQAht`XggR58f`I{4qG4zf*3O+8UQmG#NQydR2 zEo2$sTxVzJsbn(gg9+^4?cbl<=FPimP&cYfeBlN94H}dasa)5kv$OLQ{t;9rO27lo zx3{;Swx=Y~6}fuuTxu392+iYW7AF?t?=QZ{-c)ej5M$%!9y$j4?(C z(cRY8cJ#5w9=m7c$dMd6bSNhxRnMPK-Q- zP;5xTaUAyT+jp?OzWx{tp-8$&l-`Lo=Bb7?^R8&+jV#J6XLB&p2F4y;Ko)457 zE|#fOs;9BBaR;#9M2=na<5E{gN5`j&7cYLtk{CB`9HphDK;cg9W|FWU2ZRveAzyG( z*%bwR)yJ$_``_p7L4(y${%+~l^hMKdTdwJtHA3Pyeb5blbaH_~0g++&e>bSWKN)er z|8N$xM6T_9;kr-w#oPo{NA7jdW`Hxm|M27ee}SI?6;v6;ECO3|1JLoH&98BwA5a>! zZr<;1kv`k+1mF}P^QtP+p8+lcY5Z89|Bej$vw-Yt2Am?*jkK4mP5|D%M?k<<6{%5T jD)0CFcQl|)9^n527h2`aUR|C200000NkvXXu0mjf?~knO literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/dialog_notification.png b/src/main/resources/Public/icon/dialog_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..54ba901612db8537bfd6d96a699b7cfda42bcae6 GIT binary patch literal 4118 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 U(LPlx*8l(j07*qoM6N<$g5Zkq*Z=?k literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/dialoginform.png b/src/main/resources/Public/icon/dialoginform.png new file mode 100644 index 0000000000000000000000000000000000000000..ed89dfd7ccea078ab4ec050b9a1cc7c2c7953541 GIT binary patch literal 4722 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 Ap#T5? literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/entropot_sortie72.png b/src/main/resources/Public/icon/entropot_sortie72.png new file mode 100644 index 0000000000000000000000000000000000000000..2f109cdc15fac11a39547ce61190bc6272158eab GIT binary patch literal 5618 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 M07*qoM6N<$g5BrQ&;S4c literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/glyphicon-lock.png b/src/main/resources/Public/icon/glyphicon-lock.png new file mode 100644 index 0000000000000000000000000000000000000000..cf972bdf8a7542073c575c1818166ad9c12733a5 GIT binary patch literal 949 zcmV;m14{gfP)P000^Y1^@s6LVfqm00009a7bBm000XU z000XU0RWnu7ytkOAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZPB}EEGNG&E9XF&>tL4%ipPCsYfym#+$(bhUl zAx6Pf|H<8)dy?P1|8vgGC1%F`;<;ha><#bg<=cCQg0g*ih9;uoJT{O{g4fj6f7|eM zS?@S7Q=A15o0>eKTm1aCZ43aJ?t7|74)9-Y=m43062&1M5 zGI_o*Vyh?Hk9M3oasHRanCHNf5)TzKqA-WKu!IkO(AJVZRNoRZq5?=)>j7Afi$&X{ z!2Xu+{j*~^CQA?iMi}G}E^{4ayRel20Ogb&+s2{eCdqeEEn?IRz3b-ZaCp|21Eee2AT^xMZePXsLH+k&KF zjwr7q#BG5$>Jx}8f^c0%!)phS{_InD$u$VGS;j&qkpL)+-~H~3i=CsRQxgEj7uU?s zrzdSaa@&c;u-KpkAkaXXr3x4iDck%>0*KB;#g+Yif0PK?Ak|5rTYZ>cmK6aL;{a(70TL4PMPHf)9ce5#DntTOih`KY8ipC#7*uWDclG@b z-#aXy$oQXJ8Z#S990ef+MA2l^e0rdtP;#+3b_?SqzHsR5W;Mfv= zCKD4izP^ zt(ockvajmDl`$G##dH3vyI$xfo*AgV(%t>~Z?o}DQVRWuJc5Rh>*{v&Y}~x|n?DBt Xzz$VUDw)7U00000NkvXXu0mjffC;Zh literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/glyphicon-user.png b/src/main/resources/Public/icon/glyphicon-user.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b6d007a86cd48f0e8c30cb1d544eeec6311349 GIT binary patch literal 1205 zcmV;m1WNmfP)P000^Y1^@s6LVfqm00009a7bBm000XU z000XU0RWnu7ytkOAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=J4r-ARCwCFRa?w36E$fF$5!6O$Z-C z{4n_A13om3KR&`2@q^$GsgDwgniwImEm)w2KwGPpgj(#hp{A4$Ltiu8=Q+oZ5)HXC zwJ5rhlbh^w_Fns}efGX&W+sE;m zH|GK&$`*)1ijpWmvwV1yz(izImWI@SJp^GaNK3mu46kzTCI& zOy6j|Wm#AVmSthI?@WDrZ_~Q^#$?*_f+&g1+=v=uI{F8*JF_lW%*Mi?9LQ%`cCdfv z_^Op(_;=*x zB5NWQEW_}ZlqF>7M#bTY`e!0W)3%TrJ3DTxUm?N&MpFr2*{H2ajc;mhhA zGRQ*)IdGnU;uIuQ$Y-u0R&6?ol5(%m3j_cu70OEz-k8rEcj69KSJ`l+f(!}fLW#JV z&w0K|gv__h-7nWTi6>$uy`9|$+XserP(v?Bq8k)L1MNGyJ9`ht67dqQaYFG|U~;z! z*c-3y1=UNTL;%JNn6{Cay)m}^MC&Jqk9^wk@}whT8fS(76O_WwPg++lc5S{jD;kqE zEA!<`;=c=D_`Vd-8NsYCK_=7RgWJo&h)->^EOp^j+bbWpo!M%Q zbLb-oIo57$>fgHaxeqoxy5ifbH)r!Co9;|qJojVEvCmJxFfrq5re%VXe=(?(gzLC4 zORIxzFYZ6__)|}`uxej?ee|2|XC1|uX=r~I>mP#+NJ!_&lka7LDhh}PPa+vmk@;f)H6__o T4b{0#00000NkvXXu0mjfVGkXq literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/icon-excel.png b/src/main/resources/Public/icon/icon-excel.png new file mode 100644 index 0000000000000000000000000000000000000000..165f6119a40eb3e2432dc9b49c499e5e35fbcd4e GIT binary patch literal 2010 zcmV<02POE4P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ@U`a$lRCwCNSWAptM-@HyR=rPm&$nmr*sfSo{+;eX=sj79(eHp69Y!LJSC|>zPzASSu@@Mbd&w?oWDFcam z4--WwlOclM0$e(Ri6Rgiz{*N9J`HRc*TV0kxRZ$EFP*s$p1mYc36;!6_X&c8k zlxh0w;_}X~RF#NW6$+}4r2q&7RjGbcAtF)*096n%RD}SjU0A#|US2ucKqB7fDss$N zd$JrQGYD9=wgUk9&cz>$wzp1@3doqsyS4*FP!SMw^+|-W1NA$Fq64Jy^2$;5eg{Ma z8*@mFdDMG<45}xmW5xgk08}J~D!>df=06@_u1Emt0D#Z)&Gho6J5=O60TB~D3g$cJ zIZ!QRu7XAw7?=U#S`Zp12&xL(>7l!E2wHz{ubBt|pv0Vu za~QmM2Fd2RKMwzO?j0)rG&6UJ=zFTVI1adqK)s(Nh%wW6gN#M*&|#lTmP@B~o5s1VA;`O<_2MD!Y$=Xco&5;lx(p)vz&{k?nO0P-uBt8g@@CITB9 z)}-u4%ggV%7JoPh?zHWVRb;#wGhdT@Yy-soJ_awGsi3b>EcSN)WaIcpGdfap3`AqJhiMBLh!C#! z?_BOJ{KOd3u@f0kPv9T~2q2)t%&!Hs1TokcP!Q|_I9vJ52$z<|4wcEuAr9bQqq}kN z>F&nCBQ>I|s?S07%|w(Gd%M^>a~gn-?aZWM1A93bK%IknKaisMEL4e@EiqeWzD`BH z?Tegzp26oCd{IC}zCp}4HS++l6vgM%yG!C6T$VOc-A>hg2gV`J!a604TE*Z0)3E&*ebvovOm6 zDZFzqQCy8Uh6#eNs>t82S{X&ounj(M;&{AHyoXQInf+%GXn0T$04RsU>0*~^nCIDNpax2dUeAh=6yt?-udedW8bFHE&KDPFF(!NVm6;UEHpk5%CC@ zS3c4`u<^mGh7EZ8Xy@Yb;?m9o;|f_<#U}MsWTK$Wt%fRsc(sqkBiD~7i^%mvbpKS` z&jKjfm@y)q)&AGxmDMMi`LE5s!_BiuFK+LnFjt7CIwBR1*XpY_Fs09eD=d;U2Dy@lOkuy=yEzO>Yh<@nU1U}g|eQ%lH-cR5>&aJByd z6{Y5e+&*PhmU%7$&2K6K0?>)p0XFm3*FqQd`|qlC#KSvxpZ=d7@7=>BA{`OA7pm_! s*2e$ke?%|qCNItvO7u%+{^Gv}0A?X8XN;6|y8r+H07*qoM6N<$f>JNAmH+?% literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/icon-pdf.png b/src/main/resources/Public/icon/icon-pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..049a587cbde58090b018987ddd471730a2390b28 GIT binary patch literal 2238 zcmV;v2toIWP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ^L`g(JRCwCNSZkow;X{a9}st^FR?S;$ZrOp*2NW}X>MQ$+G-dha^ z`w*~fZ2|zr*5(g~8|!zH3doo`y6FIjpdui{5a&Svlp7P4x-hAu$^U;g8{1Hunvw5Kn-q8 zX}-Spl*_ZLRb+#hBb%f@64ejR4FIa+OGE+DCcgv|gy0~A2_tY2fSKP;swWKdaUz10 zRh@#-98Jo6S;ns4e@dLYT2(iQC?%qwi0V~n5G%70GV{xo^Otpdy$3^Afu~adC@~k}9D1kz4x6@~EEjw4 zYn^rW{mka|s`@=ueTSW-S)kre!vXakQdOWaDhg5MMj=+cKLwFhQU#j#Ri)0Y4bE9O za{e!B0*zCgi}RHU4T$KCt|&fgXGqvEee{B{7Pj3!%@5F3)m|7y9q)Y%W47DvHq<+~ zYydVk1OPH7jh2?Kd^OwTAh^!X>{w(1p$fz~sH?^TXoBd8$SG!iD}dCCe2tBPa}GYs zQFgn3vT=ORJ|7uzj7UuwUJ$g}?-J)OIwJ>E2?RnAB^b{%(aTfTm}3MSuC}*6qayHm zhH5y3V)FrCWDlswek1c9AVPRx`MRZ6`=`d3#7-+<76FA;C0uuJCID3h;`sML=fE)) z`A3-zUx6wRMlfj$P#JGxI_{B^HufEjrkik}d5A^<5Y>facYC6YhO9`_Cv>SJVBTCh z@91#!d}a-XFTZr=QfW+W=M$x1CI$0Gn5GReC&+LVRRENUE+JQ4Ou%yhkggtrmL+^y z%+5L5`Dm7T0jTPX5kVCkga{WFF^#7Rz)|=~A~GN{Hf?>0fMcUc+eeO~yR!pPMd3V* zwLm_E9rU5o>zp0{olZg#1nm~01Iwp_ayEeDBJu}fj+yyJRlSRd9tD6Z&mlHw<|v`Y zfZB_Iv7p{wUF_x~ATuOX5kP@#b7TC1iom4lXTw%|QC#(vs@vU)S5_YfaB}a(zrDMC z_}rINF+mYih(;06CumjIjX4PLtQ8X>Id}*`t2M2F6%c(+ygQ{;^=P!XGz4&hh;C^e zKIc9Pf)7LG)Cgh`0gt|WLEJfja(8Ej)bnMi3bGb1%i!{C;*3dhbJ%Jxd*^Qx)nSq6 zu-@Nlj45px-43G1$k;nV;x#trtRRXy%p3s7rO00h!tmE5(ii9EATT9ERfUOTgbNEW zVK@r#Fo2s>^;z%Tw@Ov=-d_Zw%ZTW_W{#t2r*kqLwPPYqRW|{oW@%|rRR2gs?+P>Uvoe-!1a|S7dG6ZneL^*Y95tgUbCW7`dGHh?ZAi;uzjJ6h#5{{>?#>dj}6k-`)9v2_qMz=?AjytmH0QsUQTM4iNpku@ECJ}jr zh>k~#OXHBMeh=098l!dzhJ#sD<`pA|M1iX|i*EP5 zoFvzm!@={R4NiuwRtW&*-Y$mg>u}i+DgtJ%NjNI6&2GmHtgC>=@$~f8e`?ri66RYQ zh{N!4j-tn1l&QX!xL$1Zd8T_JHO%v#Y2+I%FTcO} z@4&-5_f`Er4e#A|NJJ75IRVuV8EfPJ@;{<~%NxbHQi&d7<}dtf0QNVP-!Qe!WdHyG M07*qoM6N<$g0%b!zW@LL literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/icon-print.png b/src/main/resources/Public/icon/icon-print.png new file mode 100644 index 0000000000000000000000000000000000000000..34e57c3834fa33b4f78581b368bab0a765322080 GIT binary patch literal 1492 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 z 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/iconaffecter.png b/src/main/resources/Public/icon/iconaffecter.png new file mode 100644 index 0000000000000000000000000000000000000000..b1f156a4429eb063a4a8b60b3d531c05d7849d2c GIT binary patch literal 826 zcmV-A1I7G_P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;z)3_wRCwB)Q%h`&VH7>zsIy(WqBcuuvo<7Q{j&Vj&im79?y$EJ$n` z@eE=?NDwS!B0+@Mi8Kp@yB4kJ6bsJk=H{H6d(O>eE%S01 zi^z}Bv|{R()|1Ol8(M=H2Pq#nx1QP9`@Hvxuw(^aDmAmB5k?x0Rc)nh<5$x$Fx#|b zHqqdkDhK>3H5g04SOOrfWPzZFC70%AL4zyRgG`4Twz7Toj*n<{-Jy~$l_-wD&`BO-|UbR(ow28+Ia>$v~Eeb&;Z zHIpaU=|6?om4EiBb@$Z`12KQW6NS=X06tufSScZ)Tn9l<&x2#Tu5a!968huC1D&0v zqkFDxFP7+uZH9=WK={KU6K5}<&ewGngWAH^eBuf86hFOvT^Q_Nwt9YxB}T;YP(K~s zb#dF{kAt~XsvdDL6SEi3-LZN5(o=kO%c2Dfb?X1@5=3imKoM&%H6^B zTW=1SuIVOGA`|o?@NbpEU=x6eU_?a4kKMi9{XtoB#>d<~4u?afnIPLSEH?56BVUum zx;mS!s;jjoGEGDb|A)j6AcG)+0HEpL#Ef&qzQT_I0CTT62)1_;@Bjb+07*qoM6N<$ Ef-|aTHvj+t literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/iconalert.png b/src/main/resources/Public/icon/iconalert.png new file mode 100644 index 0000000000000000000000000000000000000000..9641d39bbd926d326778133e448f7d3711956027 GIT binary patch literal 6477 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 fS5|hnFMwh~a!l4S?w!X#BkdZbUEKcwnz%)h literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/icondelete.png b/src/main/resources/Public/icon/icondelete.png new file mode 100644 index 0000000000000000000000000000000000000000..b6beb258e342aeebf5ffb44bf6f331a3356359ef GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9ECDj>}0kbWctD5#L^ z5#-CjP^HSi(9q1l@bf>Ae#yX4YQVtoDuIE)Y6b&?c>bjLqi#U8Z#`WcLn?0dT;A)| zY$$T<Ui#%&iO_lnmls+Q0y0`0O&nd_-5p9zyH1~1y|{gr`CIu- zD$kWqexBoy(4j4pJmH&HHs|gNhh~m7kB{jKf3f0vv;EP%3oPsYK3@~?WP!kU2?_1u zuB%SZ&BPn)xbzCA+>3c67X7noZ^>KNoyXJu9Vwf5lIdjmjT4pi^_9HsQ=eqMn{&PB z%qK}f{flR-UG|)N6H@Xn>6rTGl6Q}etKXa#J6FFj=%c6ohVYA(9aFpfk2OA@b*{MP zli&@{=D;gEA5GTp`II=>?TgIqsfBV&Ce|O~_-M(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-J4r-ARCwBy(!WZbK@bJ-pWY8+K&>QI3PHq1MS?`I6A4ie-@rlxT8j7vHg*zH z#V9_3jRZBFy$}#9MeVfF!bTDNH#U1=xqkP8rq;{PL}ufW%o?H(sJ6`W%_-Hl-Y->{7@m@n{<9v`P* z8HTZo7W~0??BlVh>9-7{85!nqiGExZ8eE^DC+e=&vMxX8+`qB{E0 zPrSiLY@i#rjmDGL;=Cl_Nb$Cy?KvkqCEzEQFAC)=_HdMVYaGIPBOn4uz3aq6p fUGF4cWBqji>`QW_{PZ8C00000NkvXXu0mjfPPD9j literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/iconsave.png b/src/main/resources/Public/icon/iconsave.png new file mode 100644 index 0000000000000000000000000000000000000000..140e2af1f27e236a80e94b32bd2d27685491673f GIT binary patch literal 869 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/search.png b/src/main/resources/Public/icon/search.png new file mode 100644 index 0000000000000000000000000000000000000000..858bdc3db4b56ce2c6a35f01832d1cd1036f5d7b GIT binary patch literal 645 zcmV;00($+4P)Wk4}QQU;79Wuk2&UK_W3)0bz1BH|L^@@-?RT~@4a?QYip~1v<~aB08`O|Zal>e zoX4B~I@hae0LyR;bL)6VYS&o=U_iz7ZrqOGA8-KkF$SYB4O?(A+V8jx6WH1KJnu0B-x>wzz@xag9jEK;KNJr!J4S9rEjBhf&k;fcI5&*3BRKtz{;@CasjS}zoS6#l>P0o9^B0Z zI2(Ri59T!pa4Kw?jz4k%QVtx7>nj+Z8N4&5-q*7CWC0`{j9h4oJz-Lv{rBQ%_-pZ{ zQGlc+c!BA7jeRw?*`>H%vGi`t4W3k4kfh!195$8RyMvc8&&Nidw8yhgv4N$}FcKHA zISQ4IC~mRLbp?@TVM_gZuFZUPf&oO1IUG0F*Q#s-t9w#3GXdJiyP2 zw&U>%!z%9AgcwvSI^M;v9&N+GD(zN9zEp*%tO<)~d5wLb1kqH0G>b0RcwQCaUjig; z$c6aV0ND`D0LX&)+cYeyOL4sGPmh~50ww)zBt|qFKn;j{nE5{dszIdS>1fy2>>Q}n ftvKZVDgW>rs#9%0U@&>V00000NkvXXu0mjfZhR{V literal 0 HcmV?d00001 diff --git a/src/main/resources/Public/icon/successfully.png b/src/main/resources/Public/icon/successfully.png new file mode 100644 index 0000000000000000000000000000000000000000..0ef8fa9404c8fef75d9208a59440ca465bfba858 GIT binary patch literal 4436 zcmV-a5v%TrP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRa1+DSw~RCwC#oqJf7RldhRBBGL{hBs0%$p}G_lt?qi49&wZI>zi{W`>tWh+}4^ zV&lUwGv?zpBP?<_&S}(1N1Q!rl82!(^&n%K3L+X&X?ep7NFKZ(5uQKZ#T?yn*_Zcy z_q+FA-{*Oso_sdz_WQi+{jIfrYpqtdZrwsksyTVdCXi}L-nakHxUJ*dv5t2E{eU2# z56~M30J;NRfKGrP;0ySOzo`YT1J%IyKm~9CC6a$68QMc|%TvXkG;lQK7BS6$`J%ZNiC7v<2 z^*{%J{lGtg0?`9WNSvT9Kn(B%@Hh}`kaGC|kBMh4PzLM{iG z0_6=BPa<#_$OCeLd53XGo)>`}-~;j8l#tl34uDBKac<-X`T>)~ zvjZ@T=c1kt9t_;gx-Zhirz zqAcM{sjE>aQ~d3L4_y_Kr+_pdLfTU^Jp#N2v;nrd8YJU^-=jo_NolJH(bl)L8X{}q zlf(kQm4N7~aM9+mt^i3iun^Y>2y!wUBqLF#iQ7q=XeKjY?%1|tmW_Yc zPS|FoGa=~)%v9S+lDZR+;XQ|cvi+&;|30A0fI>S56Ekrz+Ru^6v=@M1Njqu-M^r%6 zo=N>Dy%W?is2-rIrpn*Ww0?!M1$B|$ki-E=(w6GO5$YdWIDO#sRl%Ku@7Rx1d84ws z1L-CKhfua~=mN<-!1KVp(x&Rc;oHXd>a+pV-W+q^m?Mq-pt7d2s{`rZD{Qt8xU2^x zQ&AT0q*MZA*uBF({mmo4S<~E)>gwy-IGE2CO3uTv|qY4)`)C`ix zMFvui%sI63%AOoLInxwuvif9!3)e5G>Hj?|9N67jK=L%oF;Y@?_8y(vb-pw=a_++L zuHoO?@`snMUsAK(1B5NDhQ!**v>1`Fl%0SK=rZ8o`q=gVVJjdijBJ{E;bYW>Bp&7b zFey6#i3yC!SrWZuxxEQg-l*)Ma+x{{o2mxMBeoBPcjbZA?5F}%y*=+-4 z(eOntgxnKy!-a}H#t}%OfG4Ht-5L;tjic;^WF)S89Hs=sdil{p^jdR}JTA>|os+6H zAYQG!e$==ckJ|&uL%`1@0xirRczORd<>8bRt$UDwy8_N=T$P^*o7)7*qbOH6UVhbdG zEqS}14oGa@ShFol{f_E^&JP?%*;=8cqM910cs1dVJSbUc9FVAhs6ELM$=P~lI=tub zlR7xB4>skOGzQ5a$wK3R^trpwH>pEY-*!gkA@_t7>yXVLYatmZdHAV1w(VH?R?J(k zIxGL^UeS3vd~ya_3yIv3_tSZb?D-GRf7O{~hzp84)Xuxzb&azLvj&nbK!1tFou8Q* z;WJj+6H%tNVgh4wG|r+wjT~8F3CaD)2(&u@8PR)0Zd_2@AtMwf@b18GG|r;4VBii} z1|9X4T>L*EJv;RLZf@k?4aj9xR(S@{>7E$F-TtF6zKRh11yojo^JcUUd;Bt0b_N-vT$C~29qGEd!`I=}c* zag@$*G|7M^BywL3m`4VV+%dY(=n}m%-ty&^5nI08GDCb;OirqQKueHx^K?S|+xuUd zGi1&>J@YKRT-rXfF!Oic{qJ}8I}wg18L))J-^g!xaOdEor>algUsG3;pj95T2haYk zo|Vcvl4aU)V#m`4fTKwUEFtM=L^yi;^*%WzY|5Ka0a547W#;G&$2RzC(5U9oeMWDK z=oV3_SH+S(N=h%kR^H1%fHca0B_u`)S2TC`?S5`z|A|>KficG${?Qa{%K!M=kK@a) zm8+UrSKqGZXAPdUQLm9p#^H?L*VNVc8Vry|8L)(;y%FH(*tTQk#E^+=o0`O$5k6zt zqJ4|hd;@j+%&aR}7x(^G?@u)#98EG{35hdr)inFI@x3~}-}t{w44L?8b3csi5qTl9 zM`ZrN^9NC(vCVNoaoKuIyQdYT%`LiEG}OR=G|GSx?gcjcwD!6A^S(dNo<4B8)oT-J z!_rpAe-J;kuHLab3j^*7IFmFeN$b^BX5`Jt5a)~-8IVS02}v!`RxdcbT6z5#6Bv_Y zuP-pZ-}t|n%gk-;ZFsL%UfHvUX#1HdI9t#+{ZRUAPM-U)MYSzKaziIb%+bA~KbrsW z{I!lGk`R`VyX*9>v6VOM8jzUB+&5-xsDJ2Htty%GO-|I>;PxpO0VFr2dn#^p56Aj!4eldvxqeJhgM|xUJ*3Y>L)Iap<$iR_1EI=_Qge9z&fV8M8!9cT+Q~+P7n5hXc z?K!Y zaJFDn{0H%yHXPd!t95N}b7IX?2TXlat#oJYoVCnN0cq0qjX`o$!$O$q>g%2{mzk$e z$({1fu2Z{0w02@6x0NVA<{nuw zV#Q*uoLFx!Z&lWa7UnNp;6}sTrgX&Go}>`?Ql~XEiXK@ zM~gpO{9;K(Nu-+t@};o7RghEz2Xri)srJX(XWu>g?%aj>3l|uz<<=CfdHO*4fe~&F z2*T#o)%!*P(vuVd|Kr3$n+nbrj7s__ zDgDHi6JB~}UVN#zQ^w(pKX?cr2wNB03JKV7N1IlllwT`=sNo8x6&TpzVGnr-QOpJ$-Tn98ck20own{99Ti zzI6Z6WH+BpwcExmLGllv*hrvUx_+t0gq#WM4_`Q}+BK+~OE*8U@7%s8JP?p#VPl6N zISqVhu!@;#>S_`e?OXJg8o^Bm&mZi*xpZ@)2Lghy?P*6L0oV?lH(KrLZ`D7YbtLOm zM^}_zKlu7GYoqMlOy`AdQ3I0w!21TRsL5Pro}O8lY1eRd<|i{(c-TnhcD;|4GwWV9 zBv@rsQ1ZUbi(mQq${Dsgs%{pWYKy9DdGW1WIw!CWceGunk6l1mF!^WB$Zbv|iW*BSBIDtaQYKmQqbSge@wJ z21$dHv>ezg?c_A=6*f?HFroIwr+i=ua9G+)cO4dOpRabpTI`O?1zyAW3xV#WV$tTg zS|qO3RVLejRzMmMA#JFsihxC;&2c42Kv_`w0Z2tz=aEuh`+>!1yrV(uOOZZAxf<2h7DneMuh}XiSL0FV1l%*D%t|90CYKdTd!js4gvE~rirB-(`wO{x*g4~ z=N){ffVtwoF9W@#y=~GN;7uR{sM9lJy)SC416HA&I{YFKBW-W>C;M$JM=(Z$>Q($K3cK-n}j8JOgufNTQZL!;?+SBIoQxhN;^c!i%4RO1L8^h9YFOM0xYScn{8@K_lif{8@fnSPeEa2zjU{nJ+ zzz5>FY4ienyFjDfM45)(0z?C`z!+e#i@|aDwohrkD;3<^#Tq(aJa3>(#61B#4g?#t zyk)`}{}g3HtO6I5H?FA)lruK6f$qR?;8B#2geaUhIaiBvChC5av)T)Q3$E@sdE@%J zfO51`!|_f7fro%_U;q$?cI!lEP~u5TP@=;M(e~ys35iNNYGJ6mfPO#_&#`(>_fA0000+)2!FZ?e{NL-=_0E0HdCom&=FYA6 zU%%aZ{^$9>_nwdE5>-{zq-h<~$vkF;m{Dec>17Tw^YSarteH#~^PBl&;2pC$ry51o zFjvW3c#;ycDVItG?IC^fF@wzPJc>=z3vv$tTJtEjQjL_Yc+itWz2mflvIiJc__r`O znCJg~|A?Z^Vs)qhyFCI78+_}S>xQw|p7(_au+byHQ-g22V*D7>UEPMB#($L}Q5Jp+(GBWq?ZxKb*#6 z7N6j^SBUIr@-4P~?+3M)mBlsK& zRPQ+T2@}TbboA>Md?utF#Vhnlm@uZ@(NlUQ&xa}bf3*mcCBfZAI>0K`Z16#QSs$?W z^0oSnVZtP56n^WO4;G($6m8$$T0v2Js6EI)2brJ5eC8}g4U5SKPvQV&+>!9FpHfUB zfiDcW`_~xez?p&0ZPeoRmZB|M_3agp4ga9_(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZRYXI>SXyX-5>8RX7gCd66e>UTWeE0B2$rUS zh<>q1M6oc8lKddJ0wpvWgdn9!A3{u-x?V(Q3T6%GCY!p=?bny{z|F(+-1l?WI&gD8 z_jR4?{I7HV=Q`JUP|5MssGq4_>bL4z^}70-+M>3rH`EPTwjNN)A&Y4SG=;ptXMr;n=(PbiM-zAiI9P$+p)7^G90N1}r+{%~=6?qkWErU@ zzbpfe1GQ!5dx0gu_oEH`On7TbL>m7OkL!Vl(&$T};XiRa0oa{l{10GVoaOS8vvQ$s zHd|iJvXd8dvf7&h*d6clYF(PGyytjV2EQkP?||vR`q2vYI~9buU0tjWsrS?cc|EQI z#siN=7S~1z+y`7t@nZ&X8`v0Y4gzzsJf5b$t$r08{iXJ+f2$p8tGY&=ufC~XE93RP zu=hoL_oypMC0CvLkvf=IJRE?Xv4Nq)+&y)hI$ga~0=Q3|s#d9=#8|)DR1CZ~v0$(I zirT2w$EL=sPpB`dd%^?NkJZ=IkrLovCqQ<`*qLOequy2Ts52@|vMF(-devF6;Zm|L z(Y5>(V{avaJJkE?PW7n_&_?yWprt+d9w-BRUtJRGmd048I=0aIGy|=XYXiUu;B>St zLs8Ek2bzGzz}V1T1xy0Ar)2prz+9jY_&H(Y1i^>l`HhTo+NGWgUJt9wBN5Z25ZOY-5;^PrG6MU%ELwc)~oZ>9g*3_Uzu{1t5`;g zvVRv*5Ga=8PqOEl39JO32c9enbvJM|F8Vg$5#apFIu6MK`#viffUq(WF7DP}q(nE7Jnf9;tzIiy;GpxP$y~hU^ zd=K91UhDt8XRke6iH75Ui~^HmlADmmz^Dg5Kz~f$gLR209VChJtmpTTOE2D~v26o4ww zLb6B4&qr_+tR%I-B@*+%g8+d+u<6s3plE;age)gD5x-Kf@Ry(g%=L^NkyWKS=72Nc zIoJk9d)^xf=7S1QO=^O#1+#oP^1umFhB?>l%t{`J?UcUnc?XVxWnfIm*oj~bsk!6N z!9UkzOtp@BihjO-fxDm$G=e5@33O9*Cu0t0N_=&U;;z`}T6`g?-kdE1U&!&CXf+h_ z+rmVPEAfRC@7eY98cYGpEzB3VFi>YGphJ((H5|{>x-jrCK?B{k;-?!H=EbSWW8jYF zKKL%k!<)WoHU=t$!oPv7U~EXvGGWeg8w2|Vg?NLuB1XKJOKztZaY2f^OML4$F#DK|tXB7E5caw13Evb0dy`1s(^P2|a zOC$z53<`9T+UJxG!a|UvbMvLH$#r~ccN-bS2Fc?-r`%eloy|*eddl>WY#+Sv35@Uj z>oh4tIr{Z>vb%<4+M>jB4>$RE!#;AG1C5_P3SVdbt(LBeWx@cnBg{aYi>tWsJ?JE` z#Ib?Uucr1oF2>h|w$Htv-C+h6IWCq77K9n#I6nkL2GJZPo?`;3FWQn8>!)37ixu2C t)|2YHJ)|~bNzkJ;RMHUq|BB(@_zRX%lW?;C7@q(D002ovPDHLkV1i#&o2dW* literal 0 HcmV?d00001 diff --git a/src/main/resources/Views/Authentification.fxml b/src/main/resources/Views/Authentification.fxml new file mode 100644 index 0000000..39329b5 --- /dev/null +++ b/src/main/resources/Views/Authentification.fxml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/BonLivraisonClt/BonLivraisonCltAjouter.fxml b/src/main/resources/Views/BonLivraisonClt/BonLivraisonCltAjouter.fxml new file mode 100644 index 0000000..86f23a8 --- /dev/null +++ b/src/main/resources/Views/BonLivraisonClt/BonLivraisonCltAjouter.fxml @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/Client/GestionClientPersonne.fxml b/src/main/resources/Views/Client/GestionClientPersonne.fxml new file mode 100644 index 0000000..f4eaa44 --- /dev/null +++ b/src/main/resources/Views/Client/GestionClientPersonne.fxml @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/Client/MenuClient.fxml b/src/main/resources/Views/Client/MenuClient.fxml new file mode 100644 index 0000000..1abc18f --- /dev/null +++ b/src/main/resources/Views/Client/MenuClient.fxml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/Client/RechercherClientEntreprise.fxml b/src/main/resources/Views/Client/RechercherClientEntreprise.fxml new file mode 100644 index 0000000..57d9114 --- /dev/null +++ b/src/main/resources/Views/Client/RechercherClientEntreprise.fxml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/Client/RechercherClientPersonne.fxml b/src/main/resources/Views/Client/RechercherClientPersonne.fxml new file mode 100644 index 0000000..fd4ba53 --- /dev/null +++ b/src/main/resources/Views/Client/RechercherClientPersonne.fxml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/CommandeClt/CommandeCltDetail.fxml b/src/main/resources/Views/CommandeClt/CommandeCltDetail.fxml new file mode 100644 index 0000000..638d1ed --- /dev/null +++ b/src/main/resources/Views/CommandeClt/CommandeCltDetail.fxml @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/Devis/DevisCltGestion.fxml b/src/main/resources/Views/Devis/DevisCltGestion.fxml new file mode 100644 index 0000000..4ae4653 --- /dev/null +++ b/src/main/resources/Views/Devis/DevisCltGestion.fxml @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/FactureClt/FactureCltAjouter.fxml b/src/main/resources/Views/FactureClt/FactureCltAjouter.fxml new file mode 100644 index 0000000..b8a96d2 --- /dev/null +++ b/src/main/resources/Views/FactureClt/FactureCltAjouter.fxml @@ -0,0 +1,337 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/FactureFrs/FactureFrsBonReceptionAjouter.fxml b/src/main/resources/Views/FactureFrs/FactureFrsBonReceptionAjouter.fxml new file mode 100644 index 0000000..25980df --- /dev/null +++ b/src/main/resources/Views/FactureFrs/FactureFrsBonReceptionAjouter.fxml @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/Reglement/ReglementAjouter1.fxml b/src/main/resources/Views/Reglement/ReglementAjouter1.fxml new file mode 100644 index 0000000..6372be9 --- /dev/null +++ b/src/main/resources/Views/Reglement/ReglementAjouter1.fxml @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/Views/Client/GestionClientPersonne.fxml b/target/classes/Views/Client/GestionClientPersonne.fxml new file mode 100644 index 0000000..f4eaa44 --- /dev/null +++ b/target/classes/Views/Client/GestionClientPersonne.fxml @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/Views/Client/MenuClient.fxml b/target/classes/Views/Client/MenuClient.fxml new file mode 100644 index 0000000..1abc18f --- /dev/null +++ b/target/classes/Views/Client/MenuClient.fxml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/Views/Client/RechercherClientEntreprise.fxml b/target/classes/Views/Client/RechercherClientEntreprise.fxml new file mode 100644 index 0000000..57d9114 --- /dev/null +++ b/target/classes/Views/Client/RechercherClientEntreprise.fxml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/Views/Client/RechercherClientPersonne.fxml b/target/classes/Views/Client/RechercherClientPersonne.fxml new file mode 100644 index 0000000..fd4ba53 --- /dev/null +++ b/target/classes/Views/Client/RechercherClientPersonne.fxml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/Views/CommandeClt/CommandeCltDetail.fxml b/target/classes/Views/CommandeClt/CommandeCltDetail.fxml new file mode 100644 index 0000000..638d1ed --- /dev/null +++ b/target/classes/Views/CommandeClt/CommandeCltDetail.fxml @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/Views/Devis/DevisCltGestion.fxml b/target/classes/Views/Devis/DevisCltGestion.fxml new file mode 100644 index 0000000..4ae4653 --- /dev/null +++ b/target/classes/Views/Devis/DevisCltGestion.fxml @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/Views/FactureClt/FactureCltAjouter.fxml b/target/classes/Views/FactureClt/FactureCltAjouter.fxml new file mode 100644 index 0000000..b8a96d2 --- /dev/null +++ b/target/classes/Views/FactureClt/FactureCltAjouter.fxml @@ -0,0 +1,337 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/Views/FactureFrs/FactureFrsBonReceptionAjouter.fxml b/target/classes/Views/FactureFrs/FactureFrsBonReceptionAjouter.fxml new file mode 100644 index 0000000..25980df --- /dev/null +++ b/target/classes/Views/FactureFrs/FactureFrsBonReceptionAjouter.fxml @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/Views/Reglement/ReglementAjouter1.fxml b/target/classes/Views/Reglement/ReglementAjouter1.fxml new file mode 100644 index 0000000..6372be9 --- /dev/null +++ b/target/classes/Views/Reglement/ReglementAjouter1.fxml @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +