From 5683322bb7f65c329fe54d385ffcd780a765c688 Mon Sep 17 00:00:00 2001 From: maher Date: Thu, 30 Oct 2025 12:59:45 +0100 Subject: [PATCH] Initial 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 | 36 + conf/print.xml | 95 + jshell.history | 0 nb-configuration.xml | 19 + nbactions.xml | 40 + pom.xml | 147 ++ src/db/H2database_Schema.sql | 982 ++++++++ src/db/H2database_SimpleData.sql | 2104 +++++++++++++++++ src/logs/myStruts1App.log | 1 + src/main/java/Controllers/App.java | 46 + .../AuthentificationController.java | 265 +++ .../BonLivraisonCltAjouterController.java | 410 ++++ ...onLivraisonCltAjouterEtape2Controller.java | 300 +++ ...onLivraisonCltAjouterEtape3Controller.java | 79 + .../BonLivraisonCltDetailController.java | 348 +++ .../BonLivraisonCltGestionController.java | 381 +++ .../BonLivraisonCltPrintController.java | 242 ++ .../BonReceptionAjouterFrsController.java | 619 +++++ .../BonReceptionDetailFrsController.java | 150 ++ .../BonReceptionGestionFrsController.java | 480 ++++ .../Caisse/CaisseEntreController.java | 458 ++++ .../Caisse/CaisseEntrePrintController.java | 78 + .../Caisse/CaisseSortieController.java | 439 ++++ .../Caisse/CaisseSortiePrintController.java | 78 + .../Caisse/FraisAjouterController.java | 221 ++ .../Caisse/FraisDetailController.java | 158 ++ .../Caisse/FraisGestionController.java | 424 ++++ .../Categorie/AjouterCategorieController.java | 118 + .../ChequeClt/ChequeCltDetailController.java | 323 +++ .../ChequeClt/ChequeCltGestionController.java | 484 ++++ .../ChequeCltProvisionController.java | 466 ++++ .../ChequeCltProvisionPrintController.java | 77 + .../ChequeClt/ChequeCltVercerController.java | 274 +++ .../Client/AjouterClientController.java | 51 + .../AjouterClientEntrepriseController.java | 448 ++++ .../AjouterClientPersonneController.java | 373 +++ .../Client/DetailClientController.java | 552 +++++ .../GestionClientEntrepriseController.java | 420 ++++ .../GestionClientPersonneController.java | 415 ++++ .../java/Controllers/Client/ListeClient.java | 82 + .../Client/ListeClientEntreprise.java | 66 + .../Client/MenuClientController.java | 47 + .../RechercherClientEntrepriseController.java | 365 +++ .../RechercherClientPersonneController.java | 396 ++++ .../CommandeClt/CommandeCltDetail.java | 197 ++ ...mmandeCltDialogConfirmationController.java | 198 ++ .../CommandeCltGestionController.java | 466 ++++ .../CommandeCltPasserController.java | 998 ++++++++ .../DevisClt/DevisAjouterController.java | 910 +++++++ .../DevisClt/DevisCltGestionController.java | 427 ++++ .../DevisClt/DevisCltPrintController.java | 249 ++ .../DevisClt/DevisDetailController.java | 192 ++ .../DevisDialogConfirmationController.java | 183 ++ .../DevisClt/DevisImporterController.java | 397 ++++ .../DevisClt/ListProduitDevis.java | 118 + src/main/java/Controllers/Dialog/Dialog.java | 83 + .../Dialog/DialogSuccessController.java | 58 + .../Controllers/Dialog/MessageControle.java | 123 + .../java/Controllers/Dialog/Notification.java | 125 + .../java/Controllers/Dialog/ShowDialog.java | 306 +++ .../FactureCltAjouterController.java | 416 ++++ ...ctureCltAjouterDetailSelectController.java | 185 ++ ...ctureCltAjouterDetailTraiteController.java | 209 ++ ...eCltAjouterPaiementComptentController.java | 194 ++ ...eCltAjouterPaiementFaciliteController.java | 616 +++++ .../FactureCltDetailController.java | 364 +++ ...actureCltDialogConfirmationController.java | 179 ++ .../FactureCltGestionController.java | 457 ++++ .../FactureClt/FactureCltPrintController.java | 228 ++ .../FactureFrsAjouterController.java | 680 ++++++ ...ctureFrsBonReceptionAjouterController.java | 632 +++++ .../FactureFrsDetailController.java | 207 ++ .../FactureFrsGestionController.java | 483 ++++ .../FournisseurGererController.java | 345 +++ .../FournisseurGestionController.java | 396 ++++ .../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 | 324 +++ .../Produit/GestionProduitController.java | 540 +++++ .../Produit/ModifierProduitController.java | 294 +++ .../Produit/RechercherProduitController.java | 469 ++++ .../Reglement/GestionReglementController.java | 561 +++++ .../ReglementAjouter1Controller.java | 423 ++++ .../ReglementAjouter2Controller.java | 494 ++++ .../ReglementAjouter3Controller.java | 255 ++ ...ReglementDialogConfirmationController.java | 226 ++ .../ReglementDialogDetailController.java | 309 +++ .../Reglement/TraiteFrsPrintController.java | 34 + .../Stock/BondeEnterPrintController.java | 76 + .../Stock/BondeEntrerController.java | 537 +++++ .../Stock/BondeEntrerDetailController.java | 175 ++ .../Stock/BondeEntrerDialogConfirmation.java | 247 ++ .../Stock/BondeSortieController.java | 607 +++++ .../Stock/BondeSortieDetailController.java | 169 ++ .../Stock/BondeSortieDialogConfirmation.java | 235 ++ .../Stock/EtatStockCategorieController.java | 437 ++++ .../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 | 406 ++++ .../TraiteClt/TraiteCltGestionController.java | 432 ++++ .../TraiteClt/TraiteCltPrintController.java | 178 ++ .../TraiteCltPrintRetardController.java | 72 + .../TraiteClt/TraiteCltRetardController.java | 450 ++++ .../Controllers/Traitement/Adaptateur.java | 443 ++++ .../java/Controllers/Traitement/MyWindow.java | 114 + .../Traitement/ParametreSystem.java | 203 ++ .../Traitement/TotalHeightTableColumn.java | 72 + .../java/Controllers/Traitement/contro.java | 323 +++ .../Controllers/User/AddUserController.java | 26 + .../User/GestionUtilisateurController.java | 90 + .../Controllers/User/ProfileController.java | 388 +++ .../Step1CommandeCltController.java | 1105 +++++++++ .../Step2BonLivraisonCltController.java | 164 ++ .../Step3FactureCltController.java | 756 ++++++ .../Step4SaveVenteCltController.java | 356 +++ .../VenteRapideCltController.java | 44 + .../VenteSansFactureCltController.java | 1073 +++++++++ .../VenteSansFactureCltDetailController.java | 220 ++ .../BonLivraisonClt/BonLivraisonClt.java | 240 ++ .../BonLivraisonClt/BonLivraisonCltDB.java | 426 ++++ .../BonLivraisonCltGestionList.java | 53 + .../BonLivraisonCltProduitList.java | 67 + .../BonReceptionFrs/BonReceptionDB.java | 278 +++ .../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 | 458 ++++ .../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 | 141 ++ src/main/java/Models/Caisse/Frais.java | 139 ++ src/main/java/Models/Caisse/FraisDB.java | 268 +++ src/main/java/Models/Categorie/Categorie.java | 33 + .../java/Models/Categorie/CategorieDB.java | 134 ++ .../java/Models/Categorie/CategorieListe.java | 25 + src/main/java/Models/ChequeClt/ChequeClt.java | 175 ++ .../java/Models/ChequeClt/ChequeCltDB.java | 1087 +++++++++ .../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 | 212 ++ src/main/java/Models/Client/ClientDB.java | 387 +++ .../java/Models/Client/ClientEntreprise.java | 212 ++ .../Client/ClientEntrepriseContact.java | 162 ++ .../Client/ClientEntrepriseContactDB.java | 160 ++ .../Models/Client/ClientEntrepriseDB.java | 378 +++ .../java/Models/Client/ClientPassager.java | 160 ++ .../java/Models/Client/ClientPassagerDB.java | 106 + .../java/Models/CommandeClt/CommandeClt.java | 237 ++ .../Models/CommandeClt/CommandeCltDB.java | 724 ++++++ .../Models/CommandeClt/CommandeCltListe.java | 71 + .../java/Models/CommandeFrs/CommandeFrs.java | 25 + src/main/java/Models/DevisClt/Devis.java | 228 ++ .../java/Models/DevisClt/DevisCltListe.java | 59 + src/main/java/Models/DevisClt/DevisDB.java | 541 +++++ .../java/Models/FactureClt/FactureClt.java | 423 ++++ .../FactureClt/FactureCltChequeListe.java | 43 + .../java/Models/FactureClt/FactureCltDB.java | 523 ++++ .../Models/FactureClt/FactureCltGestion.java | 88 + .../FactureClt/FactureCltGestionList.java | 65 + .../FactureClt/FactureCltTraiteListe.java | 31 + .../java/Models/FactureFrs/FactureFrs.java | 287 +++ .../java/Models/FactureFrs/FactureFrsDB.java | 570 +++++ .../FactureFrs/FactureFrsProduitList.java | 79 + .../java/Models/Fournisseur/Fournisseur.java | 122 + .../Fournisseur/FournisseurContactDB.java | 123 + .../Fournisseur/FournisseurContactList.java | 70 + .../Models/Fournisseur/FournisseurDB.java | 358 +++ .../Fournisseur/FournisseurGestionList.java | 80 + src/main/java/Models/H2JDBC.java | 111 + src/main/java/Models/Home/HomeDB.java | 112 + .../java/Models/Produit/ListeProduit.java | 123 + src/main/java/Models/Produit/Produit.java | 284 +++ src/main/java/Models/Produit/ProduitDB.java | 345 +++ .../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 | 614 +++++ src/main/java/Models/Reglement/TraiteFrs.java | 75 + src/main/java/Models/SimpleDataAchat.java | 162 ++ src/main/java/Models/SimpleDataVente.java | 477 ++++ src/main/java/Models/Stock/BonEntree.java | 82 + .../java/Models/Stock/BonEntreeListeProd.java | 64 + src/main/java/Models/Stock/BonSortie.java | 81 + src/main/java/Models/Stock/BondeEntrerDB.java | 235 ++ src/main/java/Models/Stock/BondeSortieDB.java | 207 ++ .../java/Models/Stock/ListeMouvement.java | 49 + src/main/java/Models/Stock/StockDB.java | 293 +++ src/main/java/Models/Stock/StockDetail.java | 140 ++ src/main/java/Models/Stock/StockDetailDB.java | 130 + .../java/Models/TraiteClt/DatePickerCell.java | 194 ++ src/main/java/Models/TraiteClt/TraiteClt.java | 98 + .../java/Models/TraiteClt/TraiteCltDB.java | 536 +++++ .../Models/TraiteClt/TraiteCltGestionDB.java | 199 ++ .../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 | 118 + src/main/java/Models/User/ListUsers.java | 60 + src/main/java/Models/User/Profile.java | 117 + src/main/java/Models/User/ProfileDB.java | 184 ++ src/main/java/Models/User/User.java | 51 + .../VenteRapideClt/ListeVenteSansFacture.java | 67 + .../VenteRapideClt/VenteSansFacture.java | 148 ++ .../VenteRapideClt/VenteSansFactureDB.java | 366 +++ src/main/java/module-info.java | 122 + .../resources/Public/CSS/StylePrincipal.css | 601 +++++ .../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 | 86 + .../BonLivraisonCltAjouter.fxml | 313 +++ .../BonLivraisonCltAjouterEtape2.fxml | 413 ++++ .../BonLivraisonCltAjouterEtape3.fxml | 168 ++ .../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 | 250 ++ .../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 | 568 +++++ .../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 | 373 +++ .../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 | 275 +++ src/main/resources/Views/Home/Mentions.fxml | 116 + src/main/resources/Views/Principal.fxml | 296 +++ .../Views/Produit/AjouterProduit.fxml | 455 ++++ .../Views/Produit/GestionProduit.fxml | 232 ++ .../Views/Produit/ModifierProduit.fxml | 405 ++++ .../Views/Produit/RechercherProduit.fxml | 243 ++ .../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 -> 1751 bytes .../AuthentificationController$1.class | Bin 0 -> 1355 bytes .../AuthentificationController$2$1.class | Bin 0 -> 3410 bytes .../AuthentificationController$2.class | Bin 0 -> 1062 bytes .../AuthentificationController$3.class | Bin 0 -> 2952 bytes .../AuthentificationController.class | Bin 0 -> 7654 bytes .../BonLivraisonCltAjouterController$1.class | Bin 0 -> 1895 bytes .../BonLivraisonCltAjouterController$10.class | Bin 0 -> 2337 bytes .../BonLivraisonCltAjouterController$11.class | Bin 0 -> 1824 bytes .../BonLivraisonCltAjouterController$12.class | Bin 0 -> 1795 bytes .../BonLivraisonCltAjouterController$13.class | Bin 0 -> 1828 bytes .../BonLivraisonCltAjouterController$14.class | Bin 0 -> 1799 bytes .../BonLivraisonCltAjouterController$2.class | Bin 0 -> 1269 bytes .../BonLivraisonCltAjouterController$3.class | Bin 0 -> 1480 bytes .../BonLivraisonCltAjouterController$4.class | Bin 0 -> 1269 bytes .../BonLivraisonCltAjouterController$5.class | Bin 0 -> 1269 bytes ...BonLivraisonCltAjouterController$6$1.class | Bin 0 -> 3510 bytes .../BonLivraisonCltAjouterController$6.class | Bin 0 -> 1153 bytes .../BonLivraisonCltAjouterController$7.class | Bin 0 -> 1774 bytes ...BonLivraisonCltAjouterController$8$1.class | Bin 0 -> 2707 bytes .../BonLivraisonCltAjouterController$8.class | Bin 0 -> 1358 bytes .../BonLivraisonCltAjouterController$9.class | Bin 0 -> 1560 bytes ...sonCltAjouterController$ButtonCell$1.class | Bin 0 -> 3825 bytes ...aisonCltAjouterController$ButtonCell.class | Bin 0 -> 2393 bytes .../BonLivraisonCltAjouterController.class | Bin 0 -> 8059 bytes ...raisonCltAjouterEtape2Controller$1$1.class | Bin 0 -> 2388 bytes ...ivraisonCltAjouterEtape2Controller$1.class | Bin 0 -> 2210 bytes ...ivraisonCltAjouterEtape2Controller$2.class | Bin 0 -> 1532 bytes ...nLivraisonCltAjouterEtape2Controller.class | Bin 0 -> 12504 bytes ...raisonCltAjouterEtape3Controller$1$1.class | Bin 0 -> 1852 bytes ...ivraisonCltAjouterEtape3Controller$1.class | Bin 0 -> 1204 bytes ...ivraisonCltAjouterEtape3Controller$2.class | Bin 0 -> 2215 bytes ...nLivraisonCltAjouterEtape3Controller.class | Bin 0 -> 2264 bytes .../BonLivraisonCltDetailController$1$1.class | Bin 0 -> 1870 bytes .../BonLivraisonCltDetailController$1.class | Bin 0 -> 1144 bytes .../BonLivraisonCltDetailController$2.class | Bin 0 -> 4484 bytes ...onLivraisonCltDetailController$3$1$1.class | Bin 0 -> 2468 bytes .../BonLivraisonCltDetailController$3$1.class | Bin 0 -> 2308 bytes .../BonLivraisonCltDetailController$3.class | Bin 0 -> 1981 bytes .../BonLivraisonCltDetailController.class | Bin 0 -> 9954 bytes .../BonLivraisonCltGestionController$1.class | Bin 0 -> 1965 bytes .../BonLivraisonCltGestionController$10.class | Bin 0 -> 1801 bytes .../BonLivraisonCltGestionController$11.class | Bin 0 -> 1834 bytes .../BonLivraisonCltGestionController$12.class | Bin 0 -> 1805 bytes .../BonLivraisonCltGestionController$2.class | Bin 0 -> 1272 bytes .../BonLivraisonCltGestionController$3.class | Bin 0 -> 1483 bytes ...BonLivraisonCltGestionController$4$1.class | Bin 0 -> 3673 bytes .../BonLivraisonCltGestionController$4.class | Bin 0 -> 1156 bytes .../BonLivraisonCltGestionController$5.class | Bin 0 -> 1783 bytes ...BonLivraisonCltGestionController$6$1.class | Bin 0 -> 2732 bytes .../BonLivraisonCltGestionController$6.class | Bin 0 -> 1361 bytes .../BonLivraisonCltGestionController$7.class | Bin 0 -> 1569 bytes .../BonLivraisonCltGestionController$8.class | Bin 0 -> 2341 bytes .../BonLivraisonCltGestionController$9.class | Bin 0 -> 1828 bytes ...sonCltGestionController$ButtonCell$1.class | Bin 0 -> 2343 bytes ...aisonCltGestionController$ButtonCell.class | Bin 0 -> 2411 bytes .../BonLivraisonCltGestionController.class | Bin 0 -> 8240 bytes .../BonLivraisonCltPrintController$1$1.class | Bin 0 -> 2001 bytes .../BonLivraisonCltPrintController$1.class | Bin 0 -> 2014 bytes .../BonLivraisonCltPrintController.class | Bin 0 -> 10332 bytes .../BonReceptionAjouterFrsController$1.class | Bin 0 -> 2026 bytes .../BonReceptionAjouterFrsController$2.class | Bin 0 -> 1855 bytes .../BonReceptionAjouterFrsController$3.class | Bin 0 -> 2026 bytes .../BonReceptionAjouterFrsController$4.class | Bin 0 -> 1855 bytes .../BonReceptionAjouterFrsController$5.class | Bin 0 -> 2477 bytes ...eceptionAjouterFrsController$6$1$1$1.class | Bin 0 -> 1722 bytes ...nReceptionAjouterFrsController$6$1$1.class | Bin 0 -> 5731 bytes ...BonReceptionAjouterFrsController$6$1.class | Bin 0 -> 1206 bytes .../BonReceptionAjouterFrsController$6.class | Bin 0 -> 3054 bytes .../BonReceptionAjouterFrsController$7.class | Bin 0 -> 2710 bytes .../BonReceptionAjouterFrsController$8.class | Bin 0 -> 3205 bytes ...nReceptionAjouterFrsController$9$1$1.class | Bin 0 -> 3549 bytes ...BonReceptionAjouterFrsController$9$1.class | Bin 0 -> 2541 bytes .../BonReceptionAjouterFrsController$9.class | Bin 0 -> 2017 bytes ...ionAjouterFrsController$ButtonCell$1.class | Bin 0 -> 2157 bytes ...ptionAjouterFrsController$ButtonCell.class | Bin 0 -> 2381 bytes .../BonReceptionAjouterFrsController.class | Bin 0 -> 14890 bytes .../BonReceptionDetailFrsController$1$1.class | Bin 0 -> 1580 bytes .../BonReceptionDetailFrsController$1.class | Bin 0 -> 1269 bytes .../BonReceptionDetailFrsController$2.class | Bin 0 -> 4277 bytes .../BonReceptionDetailFrsController.class | Bin 0 -> 4194 bytes .../BonReceptionGestionFrsController$1.class | Bin 0 -> 1950 bytes .../BonReceptionGestionFrsController$10.class | Bin 0 -> 1792 bytes ...onReceptionGestionFrsController$11$1.class | Bin 0 -> 2702 bytes .../BonReceptionGestionFrsController$11.class | Bin 0 -> 1372 bytes .../BonReceptionGestionFrsController$12.class | Bin 0 -> 1578 bytes .../BonReceptionGestionFrsController$13.class | Bin 0 -> 2350 bytes .../BonReceptionGestionFrsController$14.class | Bin 0 -> 1837 bytes .../BonReceptionGestionFrsController$15.class | Bin 0 -> 1808 bytes .../BonReceptionGestionFrsController$16.class | Bin 0 -> 1841 bytes .../BonReceptionGestionFrsController$17.class | Bin 0 -> 1812 bytes .../BonReceptionGestionFrsController$2.class | Bin 0 -> 1424 bytes .../BonReceptionGestionFrsController$3.class | Bin 0 -> 1863 bytes .../BonReceptionGestionFrsController$4.class | Bin 0 -> 1279 bytes .../BonReceptionGestionFrsController$5.class | Bin 0 -> 1490 bytes ...BonReceptionGestionFrsController$6$1.class | Bin 0 -> 2362 bytes .../BonReceptionGestionFrsController$6.class | Bin 0 -> 1153 bytes .../BonReceptionGestionFrsController$7.class | Bin 0 -> 1371 bytes .../BonReceptionGestionFrsController$8.class | Bin 0 -> 1513 bytes ...BonReceptionGestionFrsController$9$1.class | Bin 0 -> 3624 bytes .../BonReceptionGestionFrsController$9.class | Bin 0 -> 1163 bytes ...ionGestionFrsController$ButtonCell$1.class | Bin 0 -> 3229 bytes ...ptionGestionFrsController$ButtonCell.class | Bin 0 -> 2408 bytes .../BonReceptionGestionFrsController.class | Bin 0 -> 9836 bytes .../Caisse/CaisseEntreController$1.class | Bin 0 -> 1837 bytes .../Caisse/CaisseEntreController$10.class | Bin 0 -> 1096 bytes .../Caisse/CaisseEntreController$11$1.class | Bin 0 -> 2307 bytes .../Caisse/CaisseEntreController$11.class | Bin 0 -> 1008 bytes .../Caisse/CaisseEntreController$12.class | Bin 0 -> 1602 bytes .../Caisse/CaisseEntreController$13.class | Bin 0 -> 7299 bytes .../Caisse/CaisseEntreController$2.class | Bin 0 -> 1094 bytes .../Caisse/CaisseEntreController$3.class | Bin 0 -> 1094 bytes .../Caisse/CaisseEntreController$4.class | Bin 0 -> 1094 bytes .../Caisse/CaisseEntreController$5.class | Bin 0 -> 1094 bytes .../Caisse/CaisseEntreController$6.class | Bin 0 -> 1094 bytes .../Caisse/CaisseEntreController$7.class | Bin 0 -> 1094 bytes .../Caisse/CaisseEntreController$8.class | Bin 0 -> 1094 bytes .../Caisse/CaisseEntreController$9.class | Bin 0 -> 1094 bytes .../Caisse/CaisseEntreController.class | Bin 0 -> 9038 bytes .../Caisse/CaisseEntrePrintController.class | Bin 0 -> 3207 bytes .../Caisse/CaisseSortieController$1.class | Bin 0 -> 1844 bytes .../Caisse/CaisseSortieController$10.class | Bin 0 -> 1612 bytes .../Caisse/CaisseSortieController$11.class | Bin 0 -> 6127 bytes .../Caisse/CaisseSortieController$2.class | Bin 0 -> 1101 bytes .../Caisse/CaisseSortieController$3.class | Bin 0 -> 1101 bytes .../Caisse/CaisseSortieController$4.class | Bin 0 -> 1101 bytes .../Caisse/CaisseSortieController$5.class | Bin 0 -> 1101 bytes .../Caisse/CaisseSortieController$6.class | Bin 0 -> 1101 bytes .../Caisse/CaisseSortieController$7.class | Bin 0 -> 1101 bytes .../Caisse/CaisseSortieController$8.class | Bin 0 -> 1101 bytes .../Caisse/CaisseSortieController$9$1.class | Bin 0 -> 2467 bytes .../Caisse/CaisseSortieController$9.class | Bin 0 -> 1013 bytes .../Caisse/CaisseSortieController.class | Bin 0 -> 8005 bytes .../Caisse/CaisseSortiePrintController.class | Bin 0 -> 3219 bytes .../Caisse/FraisAjouterController$1$1.class | Bin 0 -> 1493 bytes .../Caisse/FraisAjouterController$1.class | Bin 0 -> 1048 bytes .../Caisse/FraisAjouterController$2$1.class | Bin 0 -> 1363 bytes .../Caisse/FraisAjouterController$2.class | Bin 0 -> 1753 bytes .../Caisse/FraisAjouterController$3.class | Bin 0 -> 1396 bytes .../Caisse/FraisAjouterController$4.class | Bin 0 -> 1396 bytes .../Caisse/FraisAjouterController$5.class | Bin 0 -> 1396 bytes .../Caisse/FraisAjouterController$6.class | Bin 0 -> 2565 bytes .../Caisse/FraisAjouterController.class | Bin 0 -> 6865 bytes .../Caisse/FraisDetailController$1$1.class | Bin 0 -> 1318 bytes .../Caisse/FraisDetailController$1.class | Bin 0 -> 1102 bytes .../Caisse/FraisDetailController$2.class | Bin 0 -> 1506 bytes .../Caisse/FraisDetailController.class | Bin 0 -> 5022 bytes .../Caisse/FraisGestionController$1.class | Bin 0 -> 1549 bytes .../Caisse/FraisGestionController$10.class | Bin 0 -> 2231 bytes .../Caisse/FraisGestionController$11.class | Bin 0 -> 1718 bytes .../Caisse/FraisGestionController$12.class | Bin 0 -> 1689 bytes .../Caisse/FraisGestionController$13.class | Bin 0 -> 1722 bytes .../Caisse/FraisGestionController$14.class | Bin 0 -> 1693 bytes .../Caisse/FraisGestionController$2$1.class | Bin 0 -> 1966 bytes .../Caisse/FraisGestionController$2.class | Bin 0 -> 1839 bytes .../Caisse/FraisGestionController$3.class | Bin 0 -> 1691 bytes .../Caisse/FraisGestionController$4.class | Bin 0 -> 1164 bytes .../Caisse/FraisGestionController$5.class | Bin 0 -> 1375 bytes .../Caisse/FraisGestionController$6$1.class | Bin 0 -> 3480 bytes .../Caisse/FraisGestionController$6.class | Bin 0 -> 1010 bytes .../Caisse/FraisGestionController$7.class | Bin 0 -> 1669 bytes .../Caisse/FraisGestionController$8$1.class | Bin 0 -> 2549 bytes .../Caisse/FraisGestionController$8.class | Bin 0 -> 1215 bytes .../Caisse/FraisGestionController$9.class | Bin 0 -> 1455 bytes .../FraisGestionController$ButtonCell$1.class | Bin 0 -> 1840 bytes .../FraisGestionController$ButtonCell.class | Bin 0 -> 2219 bytes .../Caisse/FraisGestionController.class | Bin 0 -> 8002 bytes .../AjouterCategorieController.class | Bin 0 -> 5272 bytes .../ChequeCltDetailController$1.class | Bin 0 -> 1545 bytes .../ChequeCltDetailController$2.class | Bin 0 -> 1545 bytes .../ChequeCltDetailController$3$1.class | Bin 0 -> 2227 bytes .../ChequeCltDetailController$3.class | Bin 0 -> 2019 bytes .../ChequeCltDetailController$4$1.class | Bin 0 -> 1220 bytes .../ChequeCltDetailController$4.class | Bin 0 -> 991 bytes .../ChequeCltDetailController$5.class | Bin 0 -> 2015 bytes .../ChequeClt/ChequeCltDetailController.class | Bin 0 -> 10103 bytes .../ChequeCltGestionController$1$1.class | Bin 0 -> 2208 bytes .../ChequeCltGestionController$1.class | Bin 0 -> 2006 bytes .../ChequeCltGestionController$10.class | Bin 0 -> 1759 bytes .../ChequeCltGestionController$11.class | Bin 0 -> 1730 bytes .../ChequeCltGestionController$12.class | Bin 0 -> 1763 bytes .../ChequeCltGestionController$13.class | Bin 0 -> 1734 bytes .../ChequeCltGestionController$2.class | Bin 0 -> 1832 bytes .../ChequeCltGestionController$3.class | Bin 0 -> 1207 bytes .../ChequeCltGestionController$4.class | Bin 0 -> 1418 bytes .../ChequeCltGestionController$5$1.class | Bin 0 -> 3718 bytes .../ChequeCltGestionController$5.class | Bin 0 -> 1067 bytes .../ChequeCltGestionController$6.class | Bin 0 -> 1720 bytes .../ChequeCltGestionController$7$1.class | Bin 0 -> 2691 bytes .../ChequeCltGestionController$7.class | Bin 0 -> 1272 bytes .../ChequeCltGestionController$8.class | Bin 0 -> 1506 bytes .../ChequeCltGestionController$9.class | Bin 0 -> 2270 bytes ...eCltGestionController$ButtonCell$1$1.class | Bin 0 -> 2782 bytes ...queCltGestionController$ButtonCell$1.class | Bin 0 -> 2660 bytes ...hequeCltGestionController$ButtonCell.class | Bin 0 -> 2298 bytes .../ChequeCltGestionController.class | Bin 0 -> 9239 bytes .../ChequeCltProvisionController$1.class | Bin 0 -> 1221 bytes .../ChequeCltProvisionController$10.class | Bin 0 -> 2295 bytes .../ChequeCltProvisionController$11.class | Bin 0 -> 1782 bytes .../ChequeCltProvisionController$12.class | Bin 0 -> 1753 bytes .../ChequeCltProvisionController$13.class | Bin 0 -> 1786 bytes .../ChequeCltProvisionController$14.class | Bin 0 -> 1757 bytes .../ChequeCltProvisionController$2.class | Bin 0 -> 1432 bytes .../ChequeCltProvisionController$3.class | Bin 0 -> 1223 bytes .../ChequeCltProvisionController$4$1.class | Bin 0 -> 2380 bytes .../ChequeCltProvisionController$4.class | Bin 0 -> 1087 bytes .../ChequeCltProvisionController$5.class | Bin 0 -> 5932 bytes .../ChequeCltProvisionController$6$1.class | Bin 0 -> 3624 bytes .../ChequeCltProvisionController$6.class | Bin 0 -> 1085 bytes .../ChequeCltProvisionController$7.class | Bin 0 -> 1738 bytes .../ChequeCltProvisionController$8$1.class | Bin 0 -> 2666 bytes .../ChequeCltProvisionController$8.class | Bin 0 -> 1290 bytes .../ChequeCltProvisionController$9.class | Bin 0 -> 1524 bytes .../ChequeCltProvisionController.class | Bin 0 -> 7932 bytes .../ChequeCltProvisionPrintController.class | Bin 0 -> 3048 bytes .../ChequeCltVercerController$1.class | Bin 0 -> 3335 bytes .../ChequeCltVercerController$2$1$1.class | Bin 0 -> 3219 bytes .../ChequeCltVercerController$2$1.class | Bin 0 -> 1764 bytes .../ChequeCltVercerController$2.class | Bin 0 -> 2004 bytes .../ChequeCltVercerController$3.class | Bin 0 -> 1791 bytes .../ChequeCltVercerController$4.class | Bin 0 -> 1794 bytes .../ChequeCltVercerController$5.class | Bin 0 -> 1787 bytes .../ChequeCltVercerController$6.class | Bin 0 -> 1790 bytes .../ChequeCltVercerController$7.class | Bin 0 -> 2542 bytes .../ChequeCltVercerController$8$1.class | Bin 0 -> 2498 bytes .../ChequeCltVercerController$8.class | Bin 0 -> 1001 bytes .../ChequeClt/ChequeCltVercerController.class | Bin 0 -> 5260 bytes .../Client/AjouterClientController.class | Bin 0 -> 2785 bytes .../AjouterClientEntrepriseController$1.class | Bin 0 -> 2152 bytes ...jouterClientEntrepriseController$2$1.class | Bin 0 -> 1920 bytes .../AjouterClientEntrepriseController$2.class | Bin 0 -> 3690 bytes .../AjouterClientEntrepriseController$3.class | Bin 0 -> 1668 bytes .../AjouterClientEntrepriseController.class | Bin 0 -> 10325 bytes .../AjouterClientPersonneController$1$1.class | Bin 0 -> 1902 bytes .../AjouterClientPersonneController$1.class | Bin 0 -> 3679 bytes .../AjouterClientPersonneController$2.class | Bin 0 -> 1645 bytes .../AjouterClientPersonneController.class | Bin 0 -> 9416 bytes .../Client/DetailClientController$1.class | Bin 0 -> 1226 bytes .../Client/DetailClientController$2.class | Bin 0 -> 1236 bytes .../Client/DetailClientController.class | Bin 0 -> 14078 bytes .../GestionClientEntrepriseController$1.class | Bin 0 -> 2026 bytes ...GestionClientEntrepriseController$10.class | Bin 0 -> 2306 bytes ...GestionClientEntrepriseController$11.class | Bin 0 -> 1793 bytes ...GestionClientEntrepriseController$12.class | Bin 0 -> 1764 bytes ...GestionClientEntrepriseController$13.class | Bin 0 -> 1797 bytes ...GestionClientEntrepriseController$14.class | Bin 0 -> 1768 bytes .../GestionClientEntrepriseController$2.class | Bin 0 -> 1873 bytes .../GestionClientEntrepriseController$3.class | Bin 0 -> 3407 bytes .../GestionClientEntrepriseController$4.class | Bin 0 -> 1234 bytes .../GestionClientEntrepriseController$5.class | Bin 0 -> 1445 bytes ...estionClientEntrepriseController$6$1.class | Bin 0 -> 3353 bytes .../GestionClientEntrepriseController$6.class | Bin 0 -> 1102 bytes .../GestionClientEntrepriseController$7.class | Bin 0 -> 1747 bytes ...estionClientEntrepriseController$8$1.class | Bin 0 -> 2397 bytes .../GestionClientEntrepriseController$8.class | Bin 0 -> 1307 bytes .../GestionClientEntrepriseController$9.class | Bin 0 -> 1533 bytes ...entEntrepriseController$ButtonCell$1.class | Bin 0 -> 3590 bytes ...lientEntrepriseController$ButtonCell.class | Bin 0 -> 2339 bytes .../GestionClientEntrepriseController.class | Bin 0 -> 8149 bytes .../GestionClientPersonneController$1.class | Bin 0 -> 1984 bytes .../GestionClientPersonneController$10.class | Bin 0 -> 1777 bytes .../GestionClientPersonneController$11.class | Bin 0 -> 1748 bytes .../GestionClientPersonneController$12.class | Bin 0 -> 1781 bytes .../GestionClientPersonneController$13.class | Bin 0 -> 1752 bytes .../GestionClientPersonneController$2.class | Bin 0 -> 1809 bytes .../GestionClientPersonneController$3.class | Bin 0 -> 1220 bytes .../GestionClientPersonneController$4.class | Bin 0 -> 1431 bytes .../GestionClientPersonneController$5$1.class | Bin 0 -> 3510 bytes .../GestionClientPersonneController$5.class | Bin 0 -> 1084 bytes .../GestionClientPersonneController$6.class | Bin 0 -> 1729 bytes .../GestionClientPersonneController$7$1.class | Bin 0 -> 2603 bytes .../GestionClientPersonneController$7.class | Bin 0 -> 1289 bytes .../GestionClientPersonneController$8.class | Bin 0 -> 1515 bytes .../GestionClientPersonneController$9.class | Bin 0 -> 2288 bytes ...lientPersonneController$ButtonCell$1.class | Bin 0 -> 3586 bytes ...nClientPersonneController$ButtonCell.class | Bin 0 -> 2311 bytes .../GestionClientPersonneController.class | Bin 0 -> 7932 bytes .../Controllers/Client/ListeClient.class | Bin 0 -> 2244 bytes .../Client/ListeClientEntreprise.class | Bin 0 -> 1599 bytes .../Client/MenuClientController.class | Bin 0 -> 1636 bytes ...chercherClientEntrepriseController$1.class | Bin 0 -> 1252 bytes ...hercherClientEntrepriseController$10.class | Bin 0 -> 1815 bytes ...hercherClientEntrepriseController$11.class | Bin 0 -> 1786 bytes ...chercherClientEntrepriseController$2.class | Bin 0 -> 1463 bytes ...ercherClientEntrepriseController$3$1.class | Bin 0 -> 3359 bytes ...chercherClientEntrepriseController$3.class | Bin 0 -> 1126 bytes ...chercherClientEntrepriseController$4.class | Bin 0 -> 1765 bytes ...ercherClientEntrepriseController$5$1.class | Bin 0 -> 2403 bytes ...chercherClientEntrepriseController$5.class | Bin 0 -> 1331 bytes ...chercherClientEntrepriseController$6.class | Bin 0 -> 1551 bytes ...chercherClientEntrepriseController$7.class | Bin 0 -> 2322 bytes ...chercherClientEntrepriseController$8.class | Bin 0 -> 1809 bytes ...chercherClientEntrepriseController$9.class | Bin 0 -> 1780 bytes ...RechercherClientEntrepriseController.class | Bin 0 -> 9396 bytes ...RechercherClientPersonneController$1.class | Bin 0 -> 1238 bytes ...echercherClientPersonneController$10.class | Bin 0 -> 1799 bytes ...echercherClientPersonneController$11.class | Bin 0 -> 1770 bytes ...RechercherClientPersonneController$2.class | Bin 0 -> 1449 bytes ...chercherClientPersonneController$3$1.class | Bin 0 -> 3534 bytes ...RechercherClientPersonneController$3.class | Bin 0 -> 1108 bytes ...RechercherClientPersonneController$4.class | Bin 0 -> 1747 bytes ...chercherClientPersonneController$5$1.class | Bin 0 -> 2627 bytes ...RechercherClientPersonneController$5.class | Bin 0 -> 1313 bytes ...RechercherClientPersonneController$6.class | Bin 0 -> 1533 bytes ...RechercherClientPersonneController$7.class | Bin 0 -> 2306 bytes ...RechercherClientPersonneController$8.class | Bin 0 -> 1793 bytes ...RechercherClientPersonneController$9.class | Bin 0 -> 1764 bytes .../RechercherClientPersonneController.class | Bin 0 -> 9397 bytes .../CommandeClt/CommandeCltDetail$1.class | Bin 0 -> 2977 bytes .../CommandeClt/CommandeCltDetail$2$1.class | Bin 0 -> 1371 bytes .../CommandeClt/CommandeCltDetail$2.class | Bin 0 -> 1116 bytes .../CommandeClt/CommandeCltDetail$3.class | Bin 0 -> 3953 bytes .../CommandeClt/CommandeCltDetail.class | Bin 0 -> 4390 bytes ...mandeCltDialogConfirmationController.class | Bin 0 -> 8082 bytes .../CommandeCltGestionController$1$1.class | Bin 0 -> 1606 bytes .../CommandeCltGestionController$1.class | Bin 0 -> 2018 bytes .../CommandeCltGestionController$10.class | Bin 0 -> 1506 bytes .../CommandeCltGestionController$11.class | Bin 0 -> 2285 bytes .../CommandeCltGestionController$12.class | Bin 0 -> 1772 bytes .../CommandeCltGestionController$13.class | Bin 0 -> 1743 bytes .../CommandeCltGestionController$14.class | Bin 0 -> 1776 bytes .../CommandeCltGestionController$15.class | Bin 0 -> 1747 bytes .../CommandeCltGestionController$2.class | Bin 0 -> 1843 bytes .../CommandeCltGestionController$3.class | Bin 0 -> 1221 bytes .../CommandeCltGestionController$4.class | Bin 0 -> 1432 bytes .../CommandeCltGestionController$5.class | Bin 0 -> 1221 bytes .../CommandeCltGestionController$6.class | Bin 0 -> 1221 bytes .../CommandeCltGestionController$7$1.class | Bin 0 -> 3718 bytes .../CommandeCltGestionController$7.class | Bin 0 -> 1089 bytes .../CommandeCltGestionController$8.class | Bin 0 -> 1718 bytes .../CommandeCltGestionController$9$1.class | Bin 0 -> 2821 bytes .../CommandeCltGestionController$9.class | Bin 0 -> 1294 bytes ...ndeCltGestionController$ButtonCell$1.class | Bin 0 -> 3949 bytes ...mandeCltGestionController$ButtonCell.class | Bin 0 -> 2325 bytes .../CommandeCltGestionController.class | Bin 0 -> 9254 bytes .../CommandeCltPasserController$1.class | Bin 0 -> 1976 bytes .../CommandeCltPasserController$10$1$1.class | Bin 0 -> 3401 bytes .../CommandeCltPasserController$10$1.class | Bin 0 -> 2489 bytes .../CommandeCltPasserController$10.class | Bin 0 -> 1885 bytes .../CommandeCltPasserController$11.class | Bin 0 -> 3157 bytes .../CommandeCltPasserController$12.class | Bin 0 -> 3154 bytes .../CommandeCltPasserController$13.class | Bin 0 -> 2662 bytes .../CommandeCltPasserController$14$1$1.class | Bin 0 -> 3281 bytes .../CommandeCltPasserController$14$1.class | Bin 0 -> 2471 bytes .../CommandeCltPasserController$14.class | Bin 0 -> 1794 bytes .../CommandeCltPasserController$2.class | Bin 0 -> 1796 bytes .../CommandeCltPasserController$3.class | Bin 0 -> 2411 bytes .../CommandeCltPasserController$4.class | Bin 0 -> 3610 bytes .../CommandeCltPasserController$5.class | Bin 0 -> 1431 bytes .../CommandeCltPasserController$6$1$1.class | Bin 0 -> 5389 bytes .../CommandeCltPasserController$6$1.class | Bin 0 -> 2403 bytes .../CommandeCltPasserController$6.class | Bin 0 -> 1982 bytes .../CommandeCltPasserController$7$1$1.class | Bin 0 -> 3394 bytes .../CommandeCltPasserController$7$1.class | Bin 0 -> 2472 bytes .../CommandeCltPasserController$7.class | Bin 0 -> 1831 bytes .../CommandeCltPasserController$8.class | Bin 0 -> 1812 bytes .../CommandeCltPasserController$9.class | Bin 0 -> 1817 bytes ...andeCltPasserController$ButtonCell$1.class | Bin 0 -> 2064 bytes ...mmandeCltPasserController$ButtonCell.class | Bin 0 -> 2304 bytes .../CommandeCltPasserController.class | Bin 0 -> 20838 bytes .../DevisClt/DevisAjouterController$1.class | Bin 0 -> 1931 bytes .../DevisClt/DevisAjouterController$10.class | Bin 0 -> 3117 bytes .../DevisClt/DevisAjouterController$11.class | Bin 0 -> 3114 bytes .../DevisClt/DevisAjouterController$12.class | Bin 0 -> 2617 bytes .../DevisAjouterController$13$1$1.class | Bin 0 -> 3829 bytes .../DevisAjouterController$13$1.class | Bin 0 -> 2402 bytes .../DevisClt/DevisAjouterController$13.class | Bin 0 -> 1853 bytes .../DevisClt/DevisAjouterController$2.class | Bin 0 -> 1743 bytes .../DevisClt/DevisAjouterController$3.class | Bin 0 -> 2371 bytes .../DevisClt/DevisAjouterController$4.class | Bin 0 -> 3401 bytes .../DevisClt/DevisAjouterController$5.class | Bin 0 -> 1385 bytes .../DevisAjouterController$6$1$1.class | Bin 0 -> 3725 bytes .../DevisClt/DevisAjouterController$6$1.class | Bin 0 -> 2403 bytes .../DevisClt/DevisAjouterController$6.class | Bin 0 -> 1770 bytes .../DevisClt/DevisAjouterController$7.class | Bin 0 -> 1767 bytes .../DevisClt/DevisAjouterController$8.class | Bin 0 -> 1772 bytes .../DevisAjouterController$9$1$1.class | Bin 0 -> 3723 bytes .../DevisClt/DevisAjouterController$9$1.class | Bin 0 -> 2413 bytes .../DevisClt/DevisAjouterController$9.class | Bin 0 -> 1820 bytes .../DevisAjouterController$ButtonCell$1.class | Bin 0 -> 1992 bytes .../DevisAjouterController$ButtonCell.class | Bin 0 -> 2235 bytes .../DevisClt/DevisAjouterController.class | Bin 0 -> 19328 bytes .../DevisCltGestionController$1.class | Bin 0 -> 1774 bytes .../DevisCltGestionController$10.class | Bin 0 -> 1710 bytes .../DevisCltGestionController$11.class | Bin 0 -> 1743 bytes .../DevisCltGestionController$12.class | Bin 0 -> 1714 bytes .../DevisCltGestionController$2.class | Bin 0 -> 1188 bytes .../DevisCltGestionController$3.class | Bin 0 -> 1399 bytes .../DevisCltGestionController$4$1.class | Bin 0 -> 3665 bytes .../DevisCltGestionController$4.class | Bin 0 -> 1044 bytes .../DevisCltGestionController$5.class | Bin 0 -> 1685 bytes .../DevisCltGestionController$6$1.class | Bin 0 -> 2767 bytes .../DevisCltGestionController$6.class | Bin 0 -> 1249 bytes .../DevisCltGestionController$7.class | Bin 0 -> 1471 bytes .../DevisCltGestionController$8.class | Bin 0 -> 2250 bytes .../DevisCltGestionController$9.class | Bin 0 -> 1737 bytes ...visCltGestionController$ButtonCell$1.class | Bin 0 -> 4128 bytes ...DevisCltGestionController$ButtonCell.class | Bin 0 -> 2268 bytes .../DevisClt/DevisCltGestionController.class | Bin 0 -> 8457 bytes .../DevisCltPrintController$1$1.class | Bin 0 -> 2029 bytes .../DevisClt/DevisCltPrintController$1.class | Bin 0 -> 2183 bytes ...evisCltPrintController$ListProdDevis.class | Bin 0 -> 1968 bytes .../DevisClt/DevisCltPrintController.class | Bin 0 -> 8986 bytes .../DevisClt/DevisDetailController$1$1.class | Bin 0 -> 1340 bytes .../DevisClt/DevisDetailController$1.class | Bin 0 -> 1118 bytes .../DevisClt/DevisDetailController$2.class | Bin 0 -> 4035 bytes .../DevisClt/DevisDetailController.class | Bin 0 -> 5300 bytes .../DevisDialogConfirmationController.class | Bin 0 -> 7973 bytes .../DevisClt/DevisImporterController$1.class | Bin 0 -> 1176 bytes .../DevisClt/DevisImporterController$10.class | Bin 0 -> 1731 bytes .../DevisClt/DevisImporterController$11.class | Bin 0 -> 1702 bytes .../DevisClt/DevisImporterController$2.class | Bin 0 -> 1387 bytes .../DevisImporterController$3$1.class | Bin 0 -> 3649 bytes .../DevisClt/DevisImporterController$3.class | Bin 0 -> 1028 bytes .../DevisClt/DevisImporterController$4.class | Bin 0 -> 1673 bytes .../DevisImporterController$5$1.class | Bin 0 -> 2751 bytes .../DevisClt/DevisImporterController$5.class | Bin 0 -> 1233 bytes .../DevisClt/DevisImporterController$6.class | Bin 0 -> 1459 bytes .../DevisClt/DevisImporterController$7.class | Bin 0 -> 2238 bytes .../DevisClt/DevisImporterController$8.class | Bin 0 -> 1725 bytes .../DevisClt/DevisImporterController$9.class | Bin 0 -> 1696 bytes .../DevisClt/DevisImporterController.class | Bin 0 -> 9367 bytes .../DevisClt/ListProduitDevis.class | Bin 0 -> 3745 bytes .../classes/Controllers/Dialog/Dialog$1.class | Bin 0 -> 1106 bytes .../classes/Controllers/Dialog/Dialog.class | Bin 0 -> 3579 bytes .../Dialog/DialogSuccessController.class | Bin 0 -> 2856 bytes .../Controllers/Dialog/MessageControle.class | Bin 0 -> 4702 bytes .../Controllers/Dialog/Notification$1.class | Bin 0 -> 1164 bytes .../Controllers/Dialog/Notification.class | Bin 0 -> 5026 bytes .../Controllers/Dialog/ShowDialog$1.class | Bin 0 -> 1244 bytes .../Controllers/Dialog/ShowDialog$2.class | Bin 0 -> 1241 bytes .../Controllers/Dialog/ShowDialog$3.class | Bin 0 -> 1251 bytes .../Controllers/Dialog/ShowDialog$4.class | Bin 0 -> 1248 bytes .../Controllers/Dialog/ShowDialog$5.class | Bin 0 -> 1248 bytes .../Controllers/Dialog/ShowDialog.class | Bin 0 -> 7767 bytes .../FactureCltAjouterController$1.class | Bin 0 -> 1830 bytes .../FactureCltAjouterController$10.class | Bin 0 -> 2294 bytes .../FactureCltAjouterController$11.class | Bin 0 -> 1781 bytes .../FactureCltAjouterController$12.class | Bin 0 -> 1752 bytes .../FactureCltAjouterController$13.class | Bin 0 -> 1785 bytes .../FactureCltAjouterController$14.class | Bin 0 -> 1756 bytes .../FactureCltAjouterController$2.class | Bin 0 -> 1220 bytes .../FactureCltAjouterController$3.class | Bin 0 -> 1431 bytes .../FactureCltAjouterController$4.class | Bin 0 -> 1220 bytes .../FactureCltAjouterController$5.class | Bin 0 -> 1220 bytes .../FactureCltAjouterController$6$1.class | Bin 0 -> 3713 bytes .../FactureCltAjouterController$6.class | Bin 0 -> 1084 bytes .../FactureCltAjouterController$7.class | Bin 0 -> 1737 bytes .../FactureCltAjouterController$8$1.class | Bin 0 -> 2816 bytes .../FactureCltAjouterController$8.class | Bin 0 -> 1289 bytes .../FactureCltAjouterController$9.class | Bin 0 -> 1523 bytes ...ureCltAjouterController$ButtonCell$1.class | Bin 0 -> 3686 bytes ...ctureCltAjouterController$ButtonCell.class | Bin 0 -> 2308 bytes .../FactureCltAjouterController.class | Bin 0 -> 7873 bytes ...tureCltAjouterDetailSelectController.class | Bin 0 -> 8414 bytes ...tureCltAjouterDetailTraiteController.class | Bin 0 -> 9497 bytes ...CltAjouterPaiementComptentController.class | Bin 0 -> 8177 bytes ...tAjouterPaiementFaciliteController$1.class | Bin 0 -> 2315 bytes ...AjouterPaiementFaciliteController$10.class | Bin 0 -> 1546 bytes ...AjouterPaiementFaciliteController$11.class | Bin 0 -> 1546 bytes ...AjouterPaiementFaciliteController$12.class | Bin 0 -> 1546 bytes ...tAjouterPaiementFaciliteController$2.class | Bin 0 -> 1569 bytes ...tAjouterPaiementFaciliteController$3.class | Bin 0 -> 3018 bytes ...tAjouterPaiementFaciliteController$4.class | Bin 0 -> 2534 bytes ...tAjouterPaiementFaciliteController$5.class | Bin 0 -> 2315 bytes ...tAjouterPaiementFaciliteController$6.class | Bin 0 -> 1587 bytes ...tAjouterPaiementFaciliteController$7.class | Bin 0 -> 1544 bytes ...tAjouterPaiementFaciliteController$8.class | Bin 0 -> 1544 bytes ...tAjouterPaiementFaciliteController$9.class | Bin 0 -> 1544 bytes ...CltAjouterPaiementFaciliteController.class | Bin 0 -> 19110 bytes .../FactureCltDetailController$1$1.class | Bin 0 -> 1567 bytes .../FactureCltDetailController$1.class | Bin 0 -> 1127 bytes .../FactureCltDetailController$2.class | Bin 0 -> 6192 bytes .../FactureCltDetailController$3.class | Bin 0 -> 5264 bytes .../FactureCltDetailController.class | Bin 0 -> 7681 bytes ...ctureCltDialogConfirmationController.class | Bin 0 -> 6621 bytes .../FactureCltGestionController$1$1.class | Bin 0 -> 2129 bytes .../FactureCltGestionController$1.class | Bin 0 -> 2027 bytes .../FactureCltGestionController$10.class | Bin 0 -> 1501 bytes .../FactureCltGestionController$11.class | Bin 0 -> 2278 bytes .../FactureCltGestionController$12.class | Bin 0 -> 1765 bytes .../FactureCltGestionController$13.class | Bin 0 -> 1736 bytes .../FactureCltGestionController$14.class | Bin 0 -> 1769 bytes .../FactureCltGestionController$15.class | Bin 0 -> 1740 bytes .../FactureCltGestionController$2.class | Bin 0 -> 1850 bytes .../FactureCltGestionController$3.class | Bin 0 -> 1212 bytes .../FactureCltGestionController$4.class | Bin 0 -> 1423 bytes .../FactureCltGestionController$5.class | Bin 0 -> 1212 bytes .../FactureCltGestionController$6.class | Bin 0 -> 1212 bytes .../FactureCltGestionController$7$1.class | Bin 0 -> 3641 bytes .../FactureCltGestionController$7.class | Bin 0 -> 1076 bytes .../FactureCltGestionController$8.class | Bin 0 -> 1713 bytes .../FactureCltGestionController$9$1.class | Bin 0 -> 2499 bytes .../FactureCltGestionController$9.class | Bin 0 -> 1281 bytes ...ureCltGestionController$ButtonCell$1.class | Bin 0 -> 3828 bytes ...ctureCltGestionController$ButtonCell.class | Bin 0 -> 2316 bytes .../FactureCltGestionController.class | Bin 0 -> 8608 bytes .../FactureCltPrintController$1$1.class | Bin 0 -> 1936 bytes .../FactureCltPrintController$1.class | Bin 0 -> 1939 bytes .../FactureCltPrintController.class | Bin 0 -> 8944 bytes .../FactureFrsAjouterController$1.class | Bin 0 -> 1971 bytes .../FactureFrsAjouterController$10$1$1.class | Bin 0 -> 3409 bytes .../FactureFrsAjouterController$10$1.class | Bin 0 -> 2463 bytes .../FactureFrsAjouterController$10.class | Bin 0 -> 1946 bytes .../FactureFrsAjouterController$2.class | Bin 0 -> 1790 bytes .../FactureFrsAjouterController$3.class | Bin 0 -> 1971 bytes .../FactureFrsAjouterController$4.class | Bin 0 -> 1790 bytes .../FactureFrsAjouterController$5.class | Bin 0 -> 2426 bytes .../FactureFrsAjouterController$6$1$1$1.class | Bin 0 -> 1637 bytes .../FactureFrsAjouterController$6$1$1.class | Bin 0 -> 5473 bytes .../FactureFrsAjouterController$6$1.class | Bin 0 -> 1121 bytes .../FactureFrsAjouterController$6.class | Bin 0 -> 2999 bytes .../FactureFrsAjouterController$7.class | Bin 0 -> 2655 bytes .../FactureFrsAjouterController$8.class | Bin 0 -> 3150 bytes .../FactureFrsAjouterController$9.class | Bin 0 -> 3147 bytes ...ureFrsAjouterController$ButtonCell$1.class | Bin 0 -> 2066 bytes ...ctureFrsAjouterController$ButtonCell.class | Bin 0 -> 2296 bytes .../FactureFrsAjouterController.class | Bin 0 -> 15008 bytes ...reFrsBonReceptionAjouterController$1.class | Bin 0 -> 2079 bytes ...eFrsBonReceptionAjouterController$10.class | Bin 0 -> 2266 bytes ...eFrsBonReceptionAjouterController$11.class | Bin 0 -> 2210 bytes ...eFrsBonReceptionAjouterController$12.class | Bin 0 -> 2059 bytes ...eFrsBonReceptionAjouterController$13.class | Bin 0 -> 2358 bytes ...eFrsBonReceptionAjouterController$14.class | Bin 0 -> 2339 bytes ...eFrsBonReceptionAjouterController$15.class | Bin 0 -> 1904 bytes ...reFrsBonReceptionAjouterController$2.class | Bin 0 -> 1934 bytes ...reFrsBonReceptionAjouterController$3.class | Bin 0 -> 2079 bytes ...reFrsBonReceptionAjouterController$4.class | Bin 0 -> 1946 bytes ...FrsBonReceptionAjouterController$5$1.class | Bin 0 -> 1669 bytes ...reFrsBonReceptionAjouterController$5.class | Bin 0 -> 1254 bytes ...reFrsBonReceptionAjouterController$6.class | Bin 0 -> 1500 bytes ...reFrsBonReceptionAjouterController$7.class | Bin 0 -> 1500 bytes ...reFrsBonReceptionAjouterController$8.class | Bin 0 -> 1500 bytes ...sBonReceptionAjouterController$9$1$1.class | Bin 0 -> 3483 bytes ...FrsBonReceptionAjouterController$9$1.class | Bin 0 -> 1229 bytes ...reFrsBonReceptionAjouterController$9.class | Bin 0 -> 2782 bytes ...eptionAjouterController$ButtonCell$1.class | Bin 0 -> 1949 bytes ...eceptionAjouterController$ButtonCell.class | Bin 0 -> 2424 bytes ...AjouterController$ButtonCellRemove$1.class | Bin 0 -> 2238 bytes ...onAjouterController$ButtonCellRemove.class | Bin 0 -> 2446 bytes ...tureFrsBonReceptionAjouterController.class | Bin 0 -> 17574 bytes .../FactureFrsDetailController$1$1.class | Bin 0 -> 1463 bytes .../FactureFrsDetailController$1.class | Bin 0 -> 1184 bytes .../FactureFrsDetailController$2.class | Bin 0 -> 4683 bytes .../FactureFrsDetailController.class | Bin 0 -> 4878 bytes .../FactureFrsGestionController$1.class | Bin 0 -> 2102 bytes .../FactureFrsGestionController$10$1.class | Bin 0 -> 3292 bytes .../FactureFrsGestionController$10.class | Bin 0 -> 1080 bytes .../FactureFrsGestionController$11.class | Bin 0 -> 1715 bytes .../FactureFrsGestionController$12$1.class | Bin 0 -> 2445 bytes .../FactureFrsGestionController$12.class | Bin 0 -> 1285 bytes .../FactureFrsGestionController$13.class | Bin 0 -> 1501 bytes .../FactureFrsGestionController$14.class | Bin 0 -> 2278 bytes .../FactureFrsGestionController$15.class | Bin 0 -> 1765 bytes .../FactureFrsGestionController$16.class | Bin 0 -> 1736 bytes .../FactureFrsGestionController$17.class | Bin 0 -> 1769 bytes .../FactureFrsGestionController$18.class | Bin 0 -> 1740 bytes .../FactureFrsGestionController$2$1.class | Bin 0 -> 1751 bytes .../FactureFrsGestionController$2.class | Bin 0 -> 1961 bytes .../FactureFrsGestionController$3.class | Bin 0 -> 1795 bytes .../FactureFrsGestionController$4.class | Bin 0 -> 1808 bytes .../FactureFrsGestionController$5.class | Bin 0 -> 1369 bytes .../FactureFrsGestionController$6.class | Bin 0 -> 1212 bytes .../FactureFrsGestionController$7.class | Bin 0 -> 1423 bytes .../FactureFrsGestionController$8$1.class | Bin 0 -> 2040 bytes .../FactureFrsGestionController$8.class | Bin 0 -> 1078 bytes .../FactureFrsGestionController$9.class | Bin 0 -> 1311 bytes ...ureFrsGestionController$ButtonCell$1.class | Bin 0 -> 3538 bytes ...ctureFrsGestionController$ButtonCell.class | Bin 0 -> 2305 bytes .../FactureFrsGestionController.class | Bin 0 -> 9458 bytes .../FournisseurGererController$1.class | Bin 0 -> 3793 bytes .../FournisseurGererController$2$1.class | Bin 0 -> 1432 bytes .../FournisseurGererController$2.class | Bin 0 -> 1181 bytes .../FournisseurGererController$3.class | Bin 0 -> 3257 bytes .../FournisseurGererController$4.class | Bin 0 -> 5181 bytes .../FournisseurGererController.class | Bin 0 -> 9484 bytes .../FournisseurGestionController$1.class | Bin 0 -> 1873 bytes .../FournisseurGestionController$10.class | Bin 0 -> 1756 bytes .../FournisseurGestionController$11.class | Bin 0 -> 1789 bytes .../FournisseurGestionController$12.class | Bin 0 -> 1760 bytes .../FournisseurGestionController$2.class | Bin 0 -> 1231 bytes .../FournisseurGestionController$3.class | Bin 0 -> 1442 bytes .../FournisseurGestionController$4$1.class | Bin 0 -> 3358 bytes .../FournisseurGestionController$4.class | Bin 0 -> 1099 bytes .../FournisseurGestionController$5.class | Bin 0 -> 1748 bytes .../FournisseurGestionController$6$1.class | Bin 0 -> 2376 bytes .../FournisseurGestionController$6.class | Bin 0 -> 1304 bytes .../FournisseurGestionController$7.class | Bin 0 -> 1534 bytes .../FournisseurGestionController$8.class | Bin 0 -> 2296 bytes .../FournisseurGestionController$9.class | Bin 0 -> 1783 bytes ...isseurGestionController$ButtonCell$1.class | Bin 0 -> 3530 bytes ...rnisseurGestionController$ButtonCell.class | Bin 0 -> 2335 bytes .../FournisseurGestionController.class | Bin 0 -> 8262 bytes .../Controllers/Home/AideController.class | Bin 0 -> 1172 bytes .../Controllers/Home/ContactController.class | Bin 0 -> 1644 bytes .../Home/DashboardController$1$1.class | Bin 0 -> 1774 bytes .../Home/DashboardController$1.class | Bin 0 -> 1010 bytes .../Home/DashboardController$2.class | Bin 0 -> 1918 bytes .../Home/DashboardController.class | Bin 0 -> 3943 bytes .../Controllers/Home/LogicielController.class | Bin 0 -> 1188 bytes .../Controllers/Home/MentionsController.class | Bin 0 -> 1188 bytes target/classes/Controllers/Main.class | Bin 0 -> 418 bytes .../Controllers/PrincipalController$1.class | Bin 0 -> 2395 bytes .../Controllers/PrincipalController$2.class | Bin 0 -> 1546 bytes .../Controllers/PrincipalController$3.class | Bin 0 -> 1549 bytes .../Controllers/PrincipalController.class | Bin 0 -> 11945 bytes .../Produit/AjouterProduitController$1.class | Bin 0 -> 1907 bytes .../Produit/AjouterProduitController$2.class | Bin 0 -> 1981 bytes .../Produit/AjouterProduitController$3.class | Bin 0 -> 1986 bytes .../Produit/AjouterProduitController$4.class | Bin 0 -> 1590 bytes .../AjouterProduitController$5$1.class | Bin 0 -> 1806 bytes .../Produit/AjouterProduitController$5.class | Bin 0 -> 1544 bytes .../AjouterProduitController$6$1.class | Bin 0 -> 1522 bytes .../Produit/AjouterProduitController$6.class | Bin 0 -> 1035 bytes .../Produit/AjouterProduitController$7.class | Bin 0 -> 1284 bytes .../Produit/AjouterProduitController.class | Bin 0 -> 9134 bytes .../Produit/GestionProduitController$1.class | Bin 0 -> 1923 bytes .../Produit/GestionProduitController$10.class | Bin 0 -> 1440 bytes .../Produit/GestionProduitController$11.class | Bin 0 -> 1435 bytes .../Produit/GestionProduitController$12.class | Bin 0 -> 1438 bytes .../Produit/GestionProduitController$13.class | Bin 0 -> 1531 bytes .../GestionProduitController$14$1.class | Bin 0 -> 3122 bytes .../Produit/GestionProduitController$14.class | Bin 0 -> 1032 bytes .../Produit/GestionProduitController$15.class | Bin 0 -> 1673 bytes .../GestionProduitController$16$1.class | Bin 0 -> 2222 bytes .../Produit/GestionProduitController$16.class | Bin 0 -> 1237 bytes .../Produit/GestionProduitController$17.class | Bin 0 -> 1459 bytes .../Produit/GestionProduitController$18.class | Bin 0 -> 2239 bytes .../Produit/GestionProduitController$19.class | Bin 0 -> 1726 bytes .../Produit/GestionProduitController$2.class | Bin 0 -> 1726 bytes .../Produit/GestionProduitController$20.class | Bin 0 -> 1697 bytes .../Produit/GestionProduitController$21.class | Bin 0 -> 1730 bytes .../Produit/GestionProduitController$22.class | Bin 0 -> 1701 bytes .../Produit/GestionProduitController$3.class | Bin 0 -> 3171 bytes .../Produit/GestionProduitController$4.class | Bin 0 -> 1176 bytes .../Produit/GestionProduitController$5.class | Bin 0 -> 1387 bytes .../GestionProduitController$6$1.class | Bin 0 -> 1522 bytes .../Produit/GestionProduitController$6.class | Bin 0 -> 1027 bytes .../Produit/GestionProduitController$7.class | Bin 0 -> 1269 bytes .../Produit/GestionProduitController$8.class | Bin 0 -> 2435 bytes .../Produit/GestionProduitController$9.class | Bin 0 -> 1436 bytes ...estionProduitController$ButtonCell$1.class | Bin 0 -> 3288 bytes .../GestionProduitController$ButtonCell.class | Bin 0 -> 2244 bytes .../Produit/GestionProduitController.class | Bin 0 -> 9648 bytes .../Produit/ModifierProduitController$1.class | Bin 0 -> 2197 bytes .../Produit/ModifierProduitController$2.class | Bin 0 -> 2190 bytes .../Produit/ModifierProduitController$3.class | Bin 0 -> 2195 bytes .../ModifierProduitController$4$1.class | Bin 0 -> 3130 bytes .../Produit/ModifierProduitController$4.class | Bin 0 -> 3628 bytes .../Produit/ModifierProduitController.class | Bin 0 -> 8358 bytes .../RechercherProduitController$1.class | Bin 0 -> 1290 bytes .../RechercherProduitController$10.class | Bin 0 -> 1744 bytes .../RechercherProduitController$11.class | Bin 0 -> 1715 bytes .../RechercherProduitController$12.class | Bin 0 -> 1748 bytes .../RechercherProduitController$13.class | Bin 0 -> 1719 bytes .../RechercherProduitController$2.class | Bin 0 -> 1290 bytes .../RechercherProduitController$3.class | Bin 0 -> 1160 bytes .../RechercherProduitController$4.class | Bin 0 -> 1371 bytes .../RechercherProduitController$5$1.class | Bin 0 -> 3221 bytes .../RechercherProduitController$5.class | Bin 0 -> 1052 bytes .../RechercherProduitController$6.class | Bin 0 -> 1689 bytes .../RechercherProduitController$7$1.class | Bin 0 -> 2250 bytes .../RechercherProduitController$7.class | Bin 0 -> 1257 bytes .../RechercherProduitController$8.class | Bin 0 -> 1475 bytes .../RechercherProduitController$9.class | Bin 0 -> 2255 bytes ...ercherProduitController$ButtonCell$1.class | Bin 0 -> 3495 bytes ...chercherProduitController$ButtonCell.class | Bin 0 -> 2275 bytes .../Produit/RechercherProduitController.class | Bin 0 -> 10169 bytes .../GestionReglementController$1.class | Bin 0 -> 2083 bytes .../GestionReglementController$10$1.class | Bin 0 -> 1637 bytes .../GestionReglementController$10.class | Bin 0 -> 1071 bytes .../GestionReglementController$11.class | Bin 0 -> 1312 bytes .../GestionReglementController$12$1.class | Bin 0 -> 3662 bytes .../GestionReglementController$12.class | Bin 0 -> 1071 bytes .../GestionReglementController$13.class | Bin 0 -> 1722 bytes .../GestionReglementController$14$1.class | Bin 0 -> 2769 bytes .../GestionReglementController$14.class | Bin 0 -> 1276 bytes .../GestionReglementController$15.class | Bin 0 -> 1508 bytes .../GestionReglementController$16.class | Bin 0 -> 2279 bytes .../GestionReglementController$17.class | Bin 0 -> 1766 bytes .../GestionReglementController$18.class | Bin 0 -> 1737 bytes .../GestionReglementController$19.class | Bin 0 -> 1770 bytes .../GestionReglementController$2$1.class | Bin 0 -> 2110 bytes .../GestionReglementController$2.class | Bin 0 -> 1934 bytes .../GestionReglementController$20.class | Bin 0 -> 1741 bytes .../GestionReglementController$3$1.class | Bin 0 -> 1734 bytes .../GestionReglementController$3.class | Bin 0 -> 1934 bytes .../GestionReglementController$4$1.class | Bin 0 -> 2119 bytes .../GestionReglementController$4.class | Bin 0 -> 1934 bytes .../GestionReglementController$5.class | Bin 0 -> 1772 bytes .../GestionReglementController$6.class | Bin 0 -> 1797 bytes .../GestionReglementController$7.class | Bin 0 -> 1609 bytes .../GestionReglementController$8.class | Bin 0 -> 1207 bytes .../GestionReglementController$9.class | Bin 0 -> 1418 bytes ...tionReglementController$ButtonCell$1.class | Bin 0 -> 1964 bytes ...estionReglementController$ButtonCell.class | Bin 0 -> 2286 bytes .../GestionReglementController.class | Bin 0 -> 9970 bytes .../ReglementAjouter1Controller$1.class | Bin 0 -> 2097 bytes .../ReglementAjouter1Controller$10.class | Bin 0 -> 2291 bytes .../ReglementAjouter1Controller$11.class | Bin 0 -> 1837 bytes .../ReglementAjouter1Controller$12.class | Bin 0 -> 1820 bytes .../ReglementAjouter1Controller$13.class | Bin 0 -> 2270 bytes .../ReglementAjouter1Controller$14$1.class | Bin 0 -> 2583 bytes .../ReglementAjouter1Controller$14.class | Bin 0 -> 1212 bytes .../ReglementAjouter1Controller$2.class | Bin 0 -> 1789 bytes .../ReglementAjouter1Controller$3.class | Bin 0 -> 2097 bytes .../ReglementAjouter1Controller$4.class | Bin 0 -> 1969 bytes .../ReglementAjouter1Controller$5.class | Bin 0 -> 1801 bytes .../ReglementAjouter1Controller$6.class | Bin 0 -> 1428 bytes .../ReglementAjouter1Controller$7.class | Bin 0 -> 1428 bytes .../ReglementAjouter1Controller$8.class | Bin 0 -> 1811 bytes .../ReglementAjouter1Controller$9.class | Bin 0 -> 1990 bytes ...ementAjouter1Controller$ButtonCell$1.class | Bin 0 -> 3293 bytes ...glementAjouter1Controller$ButtonCell.class | Bin 0 -> 2297 bytes ...jouter1Controller$ButtonCellRemove$1.class | Bin 0 -> 2053 bytes ...tAjouter1Controller$ButtonCellRemove.class | Bin 0 -> 2319 bytes .../ReglementAjouter1Controller.class | Bin 0 -> 11106 bytes .../ReglementAjouter2Controller$1.class | Bin 0 -> 2306 bytes .../ReglementAjouter2Controller$2.class | Bin 0 -> 1465 bytes .../ReglementAjouter2Controller$3.class | Bin 0 -> 2913 bytes .../ReglementAjouter2Controller$4.class | Bin 0 -> 2429 bytes .../ReglementAjouter2Controller$5.class | Bin 0 -> 2256 bytes .../ReglementAjouter2Controller$6.class | Bin 0 -> 1482 bytes .../ReglementAjouter2Controller$7.class | Bin 0 -> 3335 bytes .../ReglementAjouter2Controller.class | Bin 0 -> 16808 bytes .../ReglementAjouter3Controller$1.class | Bin 0 -> 2555 bytes .../ReglementAjouter3Controller$2$1.class | Bin 0 -> 1635 bytes .../ReglementAjouter3Controller$2.class | Bin 0 -> 1071 bytes .../ReglementAjouter3Controller$3.class | Bin 0 -> 1470 bytes .../ReglementAjouter3Controller.class | Bin 0 -> 9300 bytes ...eglementDialogConfirmationController.class | Bin 0 -> 10476 bytes .../ReglementDialogDetailController$1.class | Bin 0 -> 2579 bytes .../ReglementDialogDetailController$2$1.class | Bin 0 -> 1776 bytes .../ReglementDialogDetailController$2.class | Bin 0 -> 1986 bytes .../ReglementDialogDetailController$3$1.class | Bin 0 -> 1519 bytes .../ReglementDialogDetailController$3.class | Bin 0 -> 1211 bytes .../ReglementDialogDetailController$4.class | Bin 0 -> 1485 bytes .../ReglementDialogDetailController.class | Bin 0 -> 11552 bytes .../Reglement/TraiteFrsPrintController.class | Bin 0 -> 970 bytes .../Stock/BondeEnterPrintController.class | Bin 0 -> 4150 bytes .../Stock/BondeEntrerController$1.class | Bin 0 -> 1631 bytes .../Stock/BondeEntrerController$10.class | Bin 0 -> 1249 bytes .../Stock/BondeEntrerController$11.class | Bin 0 -> 1941 bytes .../Stock/BondeEntrerController$12.class | Bin 0 -> 1941 bytes .../Stock/BondeEntrerController$13.class | Bin 0 -> 1941 bytes .../Stock/BondeEntrerController$14.class | Bin 0 -> 1728 bytes .../Stock/BondeEntrerController$15.class | Bin 0 -> 1372 bytes .../Stock/BondeEntrerController$16.class | Bin 0 -> 4149 bytes .../Stock/BondeEntrerController$2.class | Bin 0 -> 1928 bytes .../Stock/BondeEntrerController$3.class | Bin 0 -> 1748 bytes .../Stock/BondeEntrerController$4.class | Bin 0 -> 2747 bytes .../Stock/BondeEntrerController$5.class | Bin 0 -> 1925 bytes .../Stock/BondeEntrerController$6.class | Bin 0 -> 1747 bytes .../Stock/BondeEntrerController$7$1.class | Bin 0 -> 1673 bytes .../Stock/BondeEntrerController$7.class | Bin 0 -> 990 bytes .../Stock/BondeEntrerController$8.class | Bin 0 -> 1248 bytes .../Stock/BondeEntrerController$9$1.class | Bin 0 -> 1479 bytes .../Stock/BondeEntrerController$9.class | Bin 0 -> 989 bytes .../BondeEntrerController$ButtonCell$1.class | Bin 0 -> 3200 bytes .../BondeEntrerController$ButtonCell.class | Bin 0 -> 2216 bytes ...BondeEntrerController$ButtonCellBE$1.class | Bin 0 -> 1687 bytes .../BondeEntrerController$ButtonCellBE.class | Bin 0 -> 2217 bytes .../Stock/BondeEntrerController.class | Bin 0 -> 10370 bytes .../Stock/BondeEntrerDetailController.class | Bin 0 -> 8698 bytes .../BondeEntrerDialogConfirmation$1.class | Bin 0 -> 1261 bytes .../Stock/BondeEntrerDialogConfirmation.class | Bin 0 -> 8684 bytes .../Stock/BondeSortieController$1.class | Bin 0 -> 1441 bytes .../Stock/BondeSortieController$10.class | Bin 0 -> 1373 bytes .../Stock/BondeSortieController$11.class | Bin 0 -> 4254 bytes .../Stock/BondeSortieController$12$1.class | Bin 0 -> 1796 bytes .../Stock/BondeSortieController$12.class | Bin 0 -> 994 bytes .../Stock/BondeSortieController$13.class | Bin 0 -> 1251 bytes .../Stock/BondeSortieController$14.class | Bin 0 -> 1941 bytes .../Stock/BondeSortieController$15.class | Bin 0 -> 1941 bytes .../Stock/BondeSortieController$16.class | Bin 0 -> 1941 bytes .../Stock/BondeSortieController$17.class | Bin 0 -> 1745 bytes .../Stock/BondeSortieController$2.class | Bin 0 -> 1631 bytes .../Stock/BondeSortieController$3.class | Bin 0 -> 1928 bytes .../Stock/BondeSortieController$4.class | Bin 0 -> 1748 bytes .../Stock/BondeSortieController$5$1.class | Bin 0 -> 1573 bytes .../Stock/BondeSortieController$5.class | Bin 0 -> 4615 bytes .../Stock/BondeSortieController$6.class | Bin 0 -> 1925 bytes .../Stock/BondeSortieController$7.class | Bin 0 -> 1747 bytes .../Stock/BondeSortieController$8$1.class | Bin 0 -> 1479 bytes .../Stock/BondeSortieController$8.class | Bin 0 -> 989 bytes .../Stock/BondeSortieController$9.class | Bin 0 -> 1248 bytes ...BondeSortieController$ButtonCell$1$1.class | Bin 0 -> 1532 bytes .../BondeSortieController$ButtonCell$1.class | Bin 0 -> 4920 bytes .../BondeSortieController$ButtonCell.class | Bin 0 -> 2216 bytes ...BondeSortieController$ButtonCellBE$1.class | Bin 0 -> 1687 bytes .../BondeSortieController$ButtonCellBE.class | Bin 0 -> 2217 bytes .../Stock/BondeSortieController.class | Bin 0 -> 10738 bytes .../Stock/BondeSortieDetailController.class | Bin 0 -> 8792 bytes .../BondeSortieDialogConfirmation$1.class | Bin 0 -> 1261 bytes .../Stock/BondeSortieDialogConfirmation.class | Bin 0 -> 8473 bytes .../EtatStockCategorieController$1.class | Bin 0 -> 1805 bytes .../EtatStockCategorieController$10$1.class | Bin 0 -> 1573 bytes .../EtatStockCategorieController$10.class | Bin 0 -> 1235 bytes .../EtatStockCategorieController$11.class | Bin 0 -> 1322 bytes .../EtatStockCategorieController$12$1.class | Bin 0 -> 1676 bytes .../EtatStockCategorieController$12.class | Bin 0 -> 1318 bytes .../EtatStockCategorieController$13.class | Bin 0 -> 1339 bytes .../EtatStockCategorieController$2.class | Bin 0 -> 1783 bytes .../EtatStockCategorieController$3.class | Bin 0 -> 1652 bytes .../EtatStockCategorieController$4.class | Bin 0 -> 1781 bytes .../EtatStockCategorieController$5.class | Bin 0 -> 1627 bytes .../EtatStockCategorieController$6.class | Bin 0 -> 1629 bytes .../EtatStockCategorieController$7.class | Bin 0 -> 1171 bytes .../EtatStockCategorieController$8.class | Bin 0 -> 1173 bytes .../EtatStockCategorieController$9.class | Bin 0 -> 1174 bytes ...orieController$ButtonCellCategorie$1.class | Bin 0 -> 1954 bytes ...egorieController$ButtonCellCategorie.class | Bin 0 -> 2322 bytes ...egorieController$ButtonCellProduit$1.class | Bin 0 -> 3111 bytes ...ategorieController$ButtonCellProduit.class | Bin 0 -> 2308 bytes .../Stock/EtatStockCategorieController.class | Bin 0 -> 11484 bytes .../Controllers/Stock/ListProduitBon.class | Bin 0 -> 1684 bytes .../Controllers/Stock/ListProduitRech.class | Bin 0 -> 1571 bytes .../Stock/MouvementStockController$1.class | Bin 0 -> 1687 bytes .../Stock/MouvementStockController$10.class | Bin 0 -> 2053 bytes .../Stock/MouvementStockController$2.class | Bin 0 -> 1933 bytes .../Stock/MouvementStockController$3.class | Bin 0 -> 1146 bytes .../Stock/MouvementStockController$4.class | Bin 0 -> 1150 bytes .../Stock/MouvementStockController$5$1.class | Bin 0 -> 2916 bytes .../Stock/MouvementStockController$5.class | Bin 0 -> 1440 bytes .../Stock/MouvementStockController$6.class | Bin 0 -> 2589 bytes .../Stock/MouvementStockController$7.class | Bin 0 -> 2076 bytes .../Stock/MouvementStockController$8.class | Bin 0 -> 2047 bytes .../Stock/MouvementStockController$9.class | Bin 0 -> 2080 bytes .../Stock/MouvementStockController.class | Bin 0 -> 11512 bytes .../Stock/PrintAllCategorieController.class | Bin 0 -> 2577 bytes .../Stock/PrintAllProduitController.class | Bin 0 -> 2676 bytes .../PrintMouvementProduitController.class | Bin 0 -> 3072 bytes .../Stock/PrintSelProduitController.class | Bin 0 -> 2791 bytes .../TraiteCltDetailController$1.class | Bin 0 -> 1367 bytes .../TraiteCltDetailController$2.class | Bin 0 -> 1367 bytes .../TraiteCltDetailController$3.class | Bin 0 -> 1367 bytes .../TraiteCltDetailController$4$1.class | Bin 0 -> 1396 bytes .../TraiteCltDetailController$4.class | Bin 0 -> 1046 bytes .../TraiteCltDetailController$5.class | Bin 0 -> 6274 bytes .../TraiteCltDetailController$6.class | Bin 0 -> 3686 bytes .../TraiteClt/TraiteCltDetailController.class | Bin 0 -> 7760 bytes .../TraiteCltGestionController$1$1.class | Bin 0 -> 2278 bytes .../TraiteCltGestionController$1.class | Bin 0 -> 2006 bytes .../TraiteCltGestionController$10.class | Bin 0 -> 1752 bytes .../TraiteCltGestionController$11.class | Bin 0 -> 1723 bytes .../TraiteCltGestionController$12.class | Bin 0 -> 1756 bytes .../TraiteCltGestionController$13.class | Bin 0 -> 1727 bytes .../TraiteCltGestionController$2.class | Bin 0 -> 1832 bytes .../TraiteCltGestionController$3.class | Bin 0 -> 1200 bytes .../TraiteCltGestionController$4.class | Bin 0 -> 1411 bytes .../TraiteCltGestionController$5$1.class | Bin 0 -> 3512 bytes .../TraiteCltGestionController$5.class | Bin 0 -> 1060 bytes .../TraiteCltGestionController$6.class | Bin 0 -> 1699 bytes .../TraiteCltGestionController$7$1.class | Bin 0 -> 2588 bytes .../TraiteCltGestionController$7.class | Bin 0 -> 1265 bytes .../TraiteCltGestionController$8.class | Bin 0 -> 1485 bytes .../TraiteCltGestionController$9.class | Bin 0 -> 2263 bytes ...iteCltGestionController$ButtonCell$1.class | Bin 0 -> 2409 bytes ...raiteCltGestionController$ButtonCell.class | Bin 0 -> 2294 bytes .../TraiteCltGestionController.class | Bin 0 -> 8014 bytes .../TraiteClt/TraiteCltPrintController.class | Bin 0 -> 5869 bytes .../TraiteCltPrintRetardController.class | Bin 0 -> 3055 bytes .../TraiteCltRetardController$1.class | Bin 0 -> 1155 bytes .../TraiteCltRetardController$10.class | Bin 0 -> 2271 bytes .../TraiteCltRetardController$11.class | Bin 0 -> 1758 bytes .../TraiteCltRetardController$12.class | Bin 0 -> 1729 bytes .../TraiteCltRetardController$13.class | Bin 0 -> 1762 bytes .../TraiteCltRetardController$14.class | Bin 0 -> 1733 bytes .../TraiteCltRetardController$2.class | Bin 0 -> 1411 bytes .../TraiteCltRetardController$3.class | Bin 0 -> 1202 bytes .../TraiteCltRetardController$4$1.class | Bin 0 -> 2314 bytes .../TraiteCltRetardController$4.class | Bin 0 -> 1060 bytes .../TraiteCltRetardController$5.class | Bin 0 -> 5725 bytes .../TraiteCltRetardController$6$1.class | Bin 0 -> 3585 bytes .../TraiteCltRetardController$6.class | Bin 0 -> 1058 bytes .../TraiteCltRetardController$7.class | Bin 0 -> 1705 bytes .../TraiteCltRetardController$8$1.class | Bin 0 -> 2654 bytes .../TraiteCltRetardController$8.class | Bin 0 -> 1263 bytes .../TraiteCltRetardController$9.class | Bin 0 -> 1491 bytes .../TraiteClt/TraiteCltRetardController.class | Bin 0 -> 7750 bytes .../Controllers/Traitement/Adaptateur.class | Bin 0 -> 13585 bytes .../Controllers/Traitement/MyWindow.class | Bin 0 -> 4068 bytes .../Traitement/ParametreSystem.class | Bin 0 -> 6776 bytes .../TotalHeightTableColumn$1$1.class | Bin 0 -> 1718 bytes .../Traitement/TotalHeightTableColumn$1.class | Bin 0 -> 1848 bytes .../Traitement/TotalHeightTableColumn.class | Bin 0 -> 1892 bytes .../Controllers/Traitement/contro.class | Bin 0 -> 6312 bytes .../Controllers/User/AddUserController.class | Bin 0 -> 590 bytes .../User/GestionUtilisateurController$1.class | Bin 0 -> 1765 bytes .../User/GestionUtilisateurController.class | Bin 0 -> 2752 bytes .../User/ProfileController$1.class | Bin 0 -> 1116 bytes .../User/ProfileController$2.class | Bin 0 -> 1118 bytes .../User/ProfileController$3.class | Bin 0 -> 3091 bytes .../User/ProfileController$4.class | Bin 0 -> 3093 bytes .../Controllers/User/ProfileController.class | Bin 0 -> 8884 bytes .../Step1CommandeCltController$1.class | Bin 0 -> 1985 bytes .../Step1CommandeCltController$10.class | Bin 0 -> 2671 bytes .../Step1CommandeCltController$11.class | Bin 0 -> 3166 bytes .../Step1CommandeCltController$12.class | Bin 0 -> 1442 bytes .../Step1CommandeCltController$13.class | Bin 0 -> 3163 bytes .../Step1CommandeCltController$2.class | Bin 0 -> 1807 bytes .../Step1CommandeCltController$3.class | Bin 0 -> 2436 bytes .../Step1CommandeCltController$4$1$1.class | Bin 0 -> 3409 bytes .../Step1CommandeCltController$4$1.class | Bin 0 -> 2479 bytes .../Step1CommandeCltController$4.class | Bin 0 -> 1962 bytes .../Step1CommandeCltController$5$1$1.class | Bin 0 -> 5125 bytes .../Step1CommandeCltController$5$1.class | Bin 0 -> 2418 bytes .../Step1CommandeCltController$5.class | Bin 0 -> 1995 bytes .../Step1CommandeCltController$6$1$1.class | Bin 0 -> 4336 bytes .../Step1CommandeCltController$6$1.class | Bin 0 -> 2487 bytes .../Step1CommandeCltController$6.class | Bin 0 -> 2014 bytes .../Step1CommandeCltController$7.class | Bin 0 -> 1821 bytes .../Step1CommandeCltController$8.class | Bin 0 -> 1826 bytes .../Step1CommandeCltController$9$1$1.class | Bin 0 -> 4125 bytes .../Step1CommandeCltController$9$1.class | Bin 0 -> 2497 bytes .../Step1CommandeCltController$9.class | Bin 0 -> 2064 bytes ...p1CommandeCltController$ButtonCell$1.class | Bin 0 -> 2088 bytes ...tep1CommandeCltController$ButtonCell.class | Bin 0 -> 2319 bytes .../Step1CommandeCltController.class | Bin 0 -> 22483 bytes .../Step2BonLivraisonCltController.class | Bin 0 -> 7538 bytes .../Step3FactureCltController$1.class | Bin 0 -> 2227 bytes .../Step3FactureCltController$10.class | Bin 0 -> 1458 bytes .../Step3FactureCltController$11.class | Bin 0 -> 1458 bytes .../Step3FactureCltController$12.class | Bin 0 -> 1458 bytes .../Step3FactureCltController$2.class | Bin 0 -> 1487 bytes .../Step3FactureCltController$3.class | Bin 0 -> 2930 bytes .../Step3FactureCltController$4.class | Bin 0 -> 2446 bytes .../Step3FactureCltController$5.class | Bin 0 -> 2227 bytes .../Step3FactureCltController$6.class | Bin 0 -> 1499 bytes .../Step3FactureCltController$7.class | Bin 0 -> 1456 bytes .../Step3FactureCltController$8.class | Bin 0 -> 1456 bytes .../Step3FactureCltController$9.class | Bin 0 -> 1456 bytes .../Step3FactureCltController.class | Bin 0 -> 22259 bytes .../Step4SaveVenteCltController$1.class | Bin 0 -> 1175 bytes .../Step4SaveVenteCltController$2.class | Bin 0 -> 3349 bytes .../Step4SaveVenteCltController$3.class | Bin 0 -> 2882 bytes .../Step4SaveVenteCltController$4$1.class | Bin 0 -> 2492 bytes .../Step4SaveVenteCltController$4.class | Bin 0 -> 1105 bytes .../Step4SaveVenteCltController$5.class | Bin 0 -> 2395 bytes .../Step4SaveVenteCltController$6$1.class | Bin 0 -> 1733 bytes .../Step4SaveVenteCltController$6.class | Bin 0 -> 1109 bytes .../Step4SaveVenteCltController$7.class | Bin 0 -> 2584 bytes .../Step4SaveVenteCltController$8$1.class | Bin 0 -> 1867 bytes .../Step4SaveVenteCltController$8.class | Bin 0 -> 1104 bytes .../Step4SaveVenteCltController$9.class | Bin 0 -> 2987 bytes .../Step4SaveVenteCltController.class | Bin 0 -> 8861 bytes .../VenteRapideCltController.class | Bin 0 -> 1680 bytes .../VenteSansFactureCltController$1.class | Bin 0 -> 2003 bytes .../VenteSansFactureCltController$10.class | Bin 0 -> 1463 bytes ...VenteSansFactureCltController$11$1$1.class | Bin 0 -> 3450 bytes .../VenteSansFactureCltController$11$1.class | Bin 0 -> 2513 bytes .../VenteSansFactureCltController$11.class | Bin 0 -> 1990 bytes .../VenteSansFactureCltController$12.class | Bin 0 -> 2946 bytes .../VenteSansFactureCltController$13.class | Bin 0 -> 2689 bytes .../VenteSansFactureCltController$14.class | Bin 0 -> 3184 bytes .../VenteSansFactureCltController$15.class | Bin 0 -> 3181 bytes .../VenteSansFactureCltController$16$1.class | Bin 0 -> 3289 bytes .../VenteSansFactureCltController$16.class | Bin 0 -> 1130 bytes .../VenteSansFactureCltController$17.class | Bin 0 -> 1621 bytes .../VenteSansFactureCltController$18$1.class | Bin 0 -> 2471 bytes .../VenteSansFactureCltController$18.class | Bin 0 -> 1335 bytes .../VenteSansFactureCltController$19.class | Bin 0 -> 1407 bytes .../VenteSansFactureCltController$2.class | Bin 0 -> 1828 bytes .../VenteSansFactureCltController$20.class | Bin 0 -> 2322 bytes .../VenteSansFactureCltController$21.class | Bin 0 -> 1809 bytes .../VenteSansFactureCltController$22.class | Bin 0 -> 1780 bytes .../VenteSansFactureCltController$23.class | Bin 0 -> 1813 bytes .../VenteSansFactureCltController$24.class | Bin 0 -> 1784 bytes .../VenteSansFactureCltController$3.class | Bin 0 -> 2454 bytes .../VenteSansFactureCltController$4.class | Bin 0 -> 1568 bytes .../VenteSansFactureCltController$5.class | Bin 0 -> 1568 bytes .../VenteSansFactureCltController$6.class | Bin 0 -> 1568 bytes .../VenteSansFactureCltController$7$1.class | Bin 0 -> 2178 bytes .../VenteSansFactureCltController$7.class | Bin 0 -> 2095 bytes .../VenteSansFactureCltController$8.class | Bin 0 -> 2051 bytes .../VenteSansFactureCltController$9.class | Bin 0 -> 1926 bytes ...ansFactureCltController$ButtonCell$1.class | Bin 0 -> 2118 bytes ...eSansFactureCltController$ButtonCell.class | Bin 0 -> 2346 bytes ...ltController$ButtonCellOperation$1$1.class | Bin 0 -> 2861 bytes ...eCltController$ButtonCellOperation$1.class | Bin 0 -> 3196 bytes ...eCltController$ButtonCellOperation$2.class | Bin 0 -> 2218 bytes ...ureCltController$ButtonCellOperation.class | Bin 0 -> 3400 bytes .../VenteSansFactureCltController.class | Bin 0 -> 20963 bytes ...teSansFactureCltDetailController$1$1.class | Bin 0 -> 1877 bytes ...enteSansFactureCltDetailController$1.class | Bin 0 -> 1170 bytes ...enteSansFactureCltDetailController$2.class | Bin 0 -> 4921 bytes .../VenteSansFactureCltDetailController.class | Bin 0 -> 6887 bytes .../BonLivraisonClt/BonLivraisonClt.class | Bin 0 -> 5819 bytes .../BonLivraisonClt/BonLivraisonCltDB.class | Bin 0 -> 18933 bytes .../BonLivraisonCltGestionList.class | Bin 0 -> 1523 bytes .../BonLivraisonCltProduitList.class | Bin 0 -> 1898 bytes .../BonReceptionFrs/BonReceptionDB.class | Bin 0 -> 12994 bytes .../BonReceptionFrs/BonReceptionFrs.class | Bin 0 -> 3399 bytes .../BonReceptionGestionDB.class | Bin 0 -> 6923 bytes .../BonReceptionGestionList.class | Bin 0 -> 1818 bytes .../BonReceptionFrs/BonReceptionList.class | Bin 0 -> 1963 bytes .../BonReceptionProduitList.class | Bin 0 -> 2073 bytes target/classes/Models/Caisse/CaisseClt.class | Bin 0 -> 3220 bytes target/classes/Models/Caisse/CaisseDB.class | Bin 0 -> 16650 bytes .../Models/Caisse/CaisseEntreListe.class | Bin 0 -> 2103 bytes .../classes/Models/Caisse/CaisseListe.class | Bin 0 -> 2655 bytes .../Models/Caisse/CaisseSortieListe.class | Bin 0 -> 2089 bytes .../Models/Caisse/CarteBancaireClt.class | Bin 0 -> 2732 bytes .../Models/Caisse/CarteBancaireCltDB.class | Bin 0 -> 6115 bytes target/classes/Models/Caisse/Frais.class | Bin 0 -> 2961 bytes target/classes/Models/Caisse/FraisDB.class | Bin 0 -> 9785 bytes .../classes/Models/Categorie/Categorie.class | Bin 0 -> 834 bytes .../Models/Categorie/CategorieDB.class | Bin 0 -> 5710 bytes .../Models/Categorie/CategorieListe.class | Bin 0 -> 809 bytes .../classes/Models/ChequeClt/ChequeClt.class | Bin 0 -> 4869 bytes .../Models/ChequeClt/ChequeCltDB.class | Bin 0 -> 41913 bytes .../ChequeClt/ChequeCltGestionListe.class | Bin 0 -> 3419 bytes .../ChequeClt/ChequeCltHistoriqueListe.class | Bin 0 -> 2141 bytes .../classes/Models/ChequeClt/ChequeList.class | Bin 0 -> 2573 bytes .../ChequeClt/DatePickerCellCheque$1.class | Bin 0 -> 934 bytes .../ChequeClt/DatePickerCellCheque$2.class | Bin 0 -> 2096 bytes .../ChequeClt/DatePickerCellCheque.class | Bin 0 -> 5123 bytes target/classes/Models/Client/Client.class | Bin 0 -> 5388 bytes target/classes/Models/Client/ClientDB.class | Bin 0 -> 12786 bytes .../Models/Client/ClientEntreprise.class | Bin 0 -> 5241 bytes .../Client/ClientEntrepriseContact.class | Bin 0 -> 3504 bytes .../Client/ClientEntrepriseContactDB.class | Bin 0 -> 6186 bytes .../Models/Client/ClientEntrepriseDB.class | Bin 0 -> 12504 bytes .../Models/Client/ClientPassager.class | Bin 0 -> 3316 bytes .../Models/Client/ClientPassagerDB.class | Bin 0 -> 4748 bytes .../Models/CommandeClt/CommandeClt.class | Bin 0 -> 5682 bytes .../Models/CommandeClt/CommandeCltDB.class | Bin 0 -> 25197 bytes .../Models/CommandeClt/CommandeCltListe.class | Bin 0 -> 1941 bytes .../Models/CommandeFrs/CommandeFrs.class | Bin 0 -> 579 bytes target/classes/Models/DevisClt/Devis.class | Bin 0 -> 5536 bytes .../Models/DevisClt/DevisCltListe.class | Bin 0 -> 1592 bytes target/classes/Models/DevisClt/DevisDB.class | Bin 0 -> 20978 bytes .../Models/FactureClt/FactureClt.class | Bin 0 -> 11706 bytes .../FactureClt/FactureCltChequeListe.class | Bin 0 -> 1225 bytes .../Models/FactureClt/FactureCltDB.class | Bin 0 -> 21614 bytes .../Models/FactureClt/FactureCltGestion.class | Bin 0 -> 1962 bytes .../FactureClt/FactureCltGestionList.class | Bin 0 -> 1607 bytes .../FactureClt/FactureCltTraiteListe.class | Bin 0 -> 872 bytes .../Models/FactureFrs/FactureFrs.class | Bin 0 -> 7124 bytes .../Models/FactureFrs/FactureFrsDB.class | Bin 0 -> 20519 bytes .../FactureFrs/FactureFrsProduitList.class | Bin 0 -> 2222 bytes .../Models/Fournisseur/Fournisseur.class | Bin 0 -> 2871 bytes .../Fournisseur/FournisseurContactDB.class | Bin 0 -> 6704 bytes .../Fournisseur/FournisseurContactList.class | Bin 0 -> 1696 bytes .../Models/Fournisseur/FournisseurDB.class | Bin 0 -> 13037 bytes .../Fournisseur/FournisseurGestionList.class | Bin 0 -> 1986 bytes target/classes/Models/H2JDBC.class | Bin 0 -> 275907 bytes target/classes/Models/Home/HomeDB.class | Bin 0 -> 5120 bytes .../classes/Models/Produit/ListeProduit.class | Bin 0 -> 3742 bytes target/classes/Models/Produit/Produit.class | Bin 0 -> 6081 bytes target/classes/Models/Produit/ProduitDB.class | Bin 0 -> 13442 bytes .../Reglement/CarteElectroniqueFrs.class | Bin 0 -> 1817 bytes .../classes/Models/Reglement/ChequeFrs.class | Bin 0 -> 2456 bytes .../classes/Models/Reglement/Reglement.class | Bin 0 -> 6137 bytes .../Models/Reglement/ReglementDB.class | Bin 0 -> 22140 bytes .../classes/Models/Reglement/TraiteFrs.class | Bin 0 -> 1634 bytes target/classes/Models/SimpleDataAchat.class | Bin 0 -> 7909 bytes target/classes/Models/SimpleDataVente.class | Bin 0 -> 19288 bytes target/classes/Models/Stock/BonEntree.class | Bin 0 -> 2203 bytes .../Models/Stock/BonEntreeListeProd.class | Bin 0 -> 1583 bytes target/classes/Models/Stock/BonSortie.class | Bin 0 -> 2203 bytes .../classes/Models/Stock/BondeEntrerDB.class | Bin 0 -> 9799 bytes .../classes/Models/Stock/BondeSortieDB.class | Bin 0 -> 10414 bytes .../classes/Models/Stock/ListeMouvement.class | Bin 0 -> 1264 bytes target/classes/Models/Stock/StockDB.class | Bin 0 -> 10249 bytes target/classes/Models/Stock/StockDetail.class | Bin 0 -> 3353 bytes .../classes/Models/Stock/StockDetailDB.class | Bin 0 -> 6224 bytes .../Models/TraiteClt/DatePickerCell$1.class | Bin 0 -> 898 bytes .../Models/TraiteClt/DatePickerCell$2.class | Bin 0 -> 2060 bytes .../Models/TraiteClt/DatePickerCell.class | Bin 0 -> 5081 bytes .../classes/Models/TraiteClt/TraiteClt.class | Bin 0 -> 2265 bytes .../Models/TraiteClt/TraiteCltDB.class | Bin 0 -> 21117 bytes .../Models/TraiteClt/TraiteCltGestionDB.class | Bin 0 -> 9279 bytes .../TraiteClt/TraiteCltGestionListe.class | Bin 0 -> 2527 bytes .../TraiteClt/TraiteCltPaiementListe.class | Bin 0 -> 1766 bytes .../classes/Models/TraiteClt/TraiteList.class | Bin 0 -> 1886 bytes .../Models/User/Authentification.class | Bin 0 -> 2232 bytes target/classes/Models/User/ListUserDB.class | Bin 0 -> 4914 bytes target/classes/Models/User/ListUsers.class | Bin 0 -> 1615 bytes target/classes/Models/User/Profile.class | Bin 0 -> 2690 bytes target/classes/Models/User/ProfileDB.class | Bin 0 -> 6975 bytes target/classes/Models/User/User.class | Bin 0 -> 867 bytes .../ListeVenteSansFacture.class | Bin 0 -> 1840 bytes .../VenteRapideClt/VenteSansFacture.class | Bin 0 -> 4154 bytes .../VenteRapideClt/VenteSansFactureDB.class | Bin 0 -> 15298 bytes target/classes/Public/CSS/StylePrincipal.css | 601 +++++ .../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 | 86 + .../BonLivraisonCltAjouter.fxml | 313 +++ .../BonLivraisonCltAjouterEtape2.fxml | 413 ++++ .../BonLivraisonCltAjouterEtape3.fxml | 168 ++ .../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 | 250 ++ 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 | 568 +++++ .../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 | 373 +++ .../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 | 275 +++ target/classes/Views/Home/Mentions.fxml | 116 + target/classes/Views/Principal.fxml | 296 +++ .../classes/Views/Produit/AjouterProduit.fxml | 455 ++++ .../classes/Views/Produit/GestionProduit.fxml | 232 ++ .../Views/Produit/ModifierProduit.fxml | 405 ++++ .../Views/Produit/RechercherProduit.fxml | 243 ++ .../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 -> 2257 bytes target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 1086 +++++++++ .../compile/default-compile/inputFiles.lst | 214 ++ .../default-testCompile/inputFiles.lst | 0 1627 files changed, 111341 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/db/H2database_Schema.sql create mode 100644 src/db/H2database_SimpleData.sql 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/H2JDBC.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/SimpleDataAchat.java create mode 100644 src/main/java/Models/SimpleDataVente.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/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.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.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$12.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$13.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$14$1.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$1.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$20.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$21.class create mode 100644 target/classes/Controllers/Produit/GestionProduitController$22.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/H2JDBC.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/SimpleDataAchat.class create mode 100644 target/classes/Models/SimpleDataVente.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/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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 + + + 40 + 30 + 35 + 30 + 28 + 40 + 40 + + + 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.powerpme.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..af34ed4 --- /dev/null +++ b/nb-configuration.xml @@ -0,0 +1,19 @@ + + + + + + all + JDK_22 + + 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..4d255ca --- /dev/null +++ b/pom.xml @@ -0,0 +1,147 @@ + + 4.0.0 + com.mycompany + PowerPME_Demo + 1.0-SNAPSHOT + + UTF-8 + 11 + 11 + + + + org.openjfx + javafx-controls + 13 + + + org.openjfx + javafx-fxml + 13 + + + org.openjfx + javafx-web + 17.0.7 + jar + + + com.ibm.icu + icu4j + 3.4.4 + + + org.controlsfx + controlsfx + 11.2.1 + jar + + + log4j + log4j + 1.2.17 + + + com.h2database + h2 + 2.1.214 + + + com.google.code.gson + gson + 2.12.1 + jar + + + + + + 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/db/H2database_Schema.sql b/src/db/H2database_Schema.sql new file mode 100644 index 0000000..632a7dd --- /dev/null +++ b/src/db/H2database_Schema.sql @@ -0,0 +1,982 @@ +CREATE TABLE IF NOT EXISTS local ( + nom VARCHAR(300) NOT NULL PRIMARY KEY, + adresse VARCHAR(300), + tele INT, + fax INT +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS profile ( + idprofile INT AUTO_INCREMENT PRIMARY KEY, + nom VARCHAR(45) NOT NULL, + prenom VARCHAR(45) NOT NULL, + naissance DATE, + sexe BOOLEAN, + num_tele INT, + mail VARCHAR(45), + adresse VARCHAR(60), + date_creation DATE, + pays VARCHAR(45) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS authentification ( + idauhentification INT AUTO_INCREMENT PRIMARY KEY, + login VARCHAR(45) NOT NULL, + password VARCHAR(45) NOT NULL, + type_compte VARCHAR(45) NOT NULL, + question_secrete VARCHAR(50) NOT NULL, + reponce_question VARCHAR(50) NOT NULL, + etat_compte BOOLEAN NOT NULL DEFAULT TRUE, + stock_negatif BOOLEAN NOT NULL DEFAULT FALSE, + local_nom VARCHAR(300) NOT NULL, + id_profile INT NOT NULL, + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS client ( + codeclient BIGINT AUTO_INCREMENT PRIMARY KEY, + cin INT NOT NULL, + nomcomplet VARCHAR(300), + nom VARCHAR(300) NOT NULL, + prenom VARCHAR(300) NOT NULL, + naissance DATE NOT NULL, + telefix BIGINT, + telemobile BIGINT, + adresse VARCHAR(400) NOT NULL, + codepostale BIGINT, + mail VARCHAR(300), + sexe BOOLEAN NOT NULL, + date_add TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS categorie ( + nomcategorie VARCHAR(45) NOT NULL PRIMARY KEY, + unitemesure BOOLEAN NOT NULL +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS produit ( + reference VARCHAR(300) NOT NULL PRIMARY KEY, + designation VARCHAR(800) NOT NULL, + nomcategorie_cate VARCHAR(300) NOT NULL, + marque VARCHAR(300), + garantie INT, + prix_achat_ht FLOAT NOT NULL, + tva_achat FLOAT NOT NULL, + prix_achat_ttc FLOAT NOT NULL, + marge FLOAT NOT NULL, + prix_vente_ht FLOAT NOT NULL, + tva_vente FLOAT NOT NULL, + prix_vente_ttc FLOAT NOT NULL, + description TEXT, + qualite INT, + poids VARCHAR(300), + couleur VARCHAR(300), + dimension VARCHAR(300), + vitesse VARCHAR(300), + puissance VARCHAR(300), + capacite VARCHAR(300), + datecreation DATE, + FOREIGN KEY (nomcategorie_cate) REFERENCES categorie (nomcategorie) + ); +COMMIT; + + CREATE TABLE IF NOT EXISTS client ( + codeclient BIGINT AUTO_INCREMENT PRIMARY KEY, + cin INT NOT NULL, + nomcomplet VARCHAR(300), + nom VARCHAR(300) NOT NULL, + prenom VARCHAR(300) NOT NULL, + naissance DATE NOT NULL, + telefix BIGINT, + telemobile BIGINT, + adresse VARCHAR(400) NOT NULL, + codepostale BIGINT, + mail VARCHAR(300), + sexe BOOLEAN NOT NULL, + date_add TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS categorie ( + nomcategorie VARCHAR(45) NOT NULL PRIMARY KEY, + unitemesure BOOLEAN NOT NULL +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS produit ( + reference VARCHAR(300) NOT NULL PRIMARY KEY, + designation VARCHAR(800) NOT NULL, + nomcategorie_cate VARCHAR(300) NOT NULL, + marque VARCHAR(300), + garantie INT, + prix_achat_ht FLOAT NOT NULL, + tva_achat FLOAT NOT NULL, + prix_achat_ttc FLOAT NOT NULL, + marge FLOAT NOT NULL, + prix_vente_ht FLOAT NOT NULL, + tva_vente FLOAT NOT NULL, + prix_vente_ttc FLOAT NOT NULL, + description TEXT, + qualite INT, + poids VARCHAR(300), + couleur VARCHAR(300), + dimension VARCHAR(300), + vitesse VARCHAR(300), + puissance VARCHAR(300), + capacite VARCHAR(300), + datecreation DATE, + FOREIGN KEY (nomcategorie_cate) REFERENCES categorie (nomcategorie) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS cltentreprise ( + idcliententreprise BIGINT AUTO_INCREMENT PRIMARY KEY, + nomentrepise VARCHAR(300) NOT NULL, + gerant VARCHAR(300) NOT NULL, + matricule_fiscale BIGINT, + adresse VARCHAR(400), + telefix BIGINT NOT NULL, + telefix2 BIGINT, + fax BIGINT, + code_postal BIGINT, + mail VARCHAR(400), + date_add TIMESTAMP NOT NULL, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS cltcontact ( + idcltcontact BIGINT AUTO_INCREMENT PRIMARY KEY, + nom VARCHAR(300) NOT NULL, + prenom VARCHAR(300) NOT NULL, + cin BIGINT, + gsm1 BIGINT NOT NULL, + gsm2 VARCHAR(300), + mail VARCHAR(300), + idcltentreprise BIGINT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (idcltentreprise) REFERENCES cltentreprise (idcliententreprise), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS entre ( + id_entre BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + date DATE NOT NULL, + heur TIME NOT NULL, + local_emetteur VARCHAR(45) NOT NULL, + local_recepteur VARCHAR(45) NOT NULL, + transporteur VARCHAR(45), + FOREIGN KEY (local_emetteur) REFERENCES local (nom), + FOREIGN KEY (local_recepteur) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS liste_produit_entre ( + id_bon_entre BIGINT NOT NULL, + reference_produit VARCHAR(300) NOT NULL, + quantite INT, + tva INT, + prix_vente_ttc FLOAT, + designation VARCHAR(800), + FOREIGN KEY (id_bon_entre) REFERENCES entre (id_entre), + FOREIGN KEY (reference_produit) REFERENCES produit (reference) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS sortie ( + id_sortie BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + date DATE NOT NULL, + heur TIME NOT NULL, + local_emetteur VARCHAR(45) NOT NULL, + local_recepteur VARCHAR(45) NOT NULL, + transporteur VARCHAR(45), + FOREIGN KEY (local_emetteur) REFERENCES local (nom), + FOREIGN KEY (local_recepteur) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS liste_produit_sortie ( + id_bon_sortie BIGINT AUTO_INCREMENT NOT NULL, + reference_produit VARCHAR(300) NOT NULL, + quantite INT, + prix_vente_ttc FLOAT, + tva INT, + designation VARCHAR(800), + PRIMARY KEY (id_bon_sortie, reference_produit), + FOREIGN KEY (id_bon_sortie) REFERENCES sortie (id_sortie), + FOREIGN KEY (reference_produit) REFERENCES produit (reference) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS cltpassageur ( + idcltpassageur BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + nom VARCHAR(300) NOT NULL, + prenom VARCHAR(300) NOT NULL, + adresse VARCHAR(300), + sexe SMALLINT NOT NULL, + tele BIGINT, + gsm BIGINT, + naissance DATE, + date_add TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS devisclt ( + iddevis BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + date_creation DATE NOT NULL, + fin_validite DATE, + typeclt SMALLINT NOT NULL, + type_reglement SMALLINT NOT NULL DEFAULT 0, + codeclient BIGINT, + idcliententreprise BIGINT, + idcltpassageur BIGINT, + total_h_t_net FLOAT NOT NULL, + total_tva FLOAT NOT NULL, + timbre_loi FLOAT NOT NULL, + net_a_payer FLOAT NOT NULL, + remise FLOAT NOT NULL DEFAULT 0, + idprofile INT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (codeclient) REFERENCES client (codeclient), + FOREIGN KEY (idcliententreprise) REFERENCES cltentreprise (idcliententreprise), + FOREIGN KEY (idcltpassageur) REFERENCES cltpassageur (idcltpassageur), + FOREIGN KEY (idprofile) REFERENCES profile (idprofile), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS factureclt ( + idfactureclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + type_reglement SMALLINT NOT NULL, + mode_paiement SMALLINT NOT NULL, + date_facture DATE NOT NULL, + typeclt SMALLINT NOT NULL, + idcltentreprise BIGINT, + idcltexiste BIGINT, + idcltpassageur BIGINT, + devise VARCHAR(10), + total_h_t_net FLOAT NOT NULL, + total_tva FLOAT NOT NULL, + remise FLOAT NOT NULL DEFAULT 0, + timbre_loi FLOAT NOT NULL, + net_a_payer FLOAT NOT NULL, + type_facilite SMALLINT, + avance FLOAT DEFAULT 0, + total_montant_traites FLOAT, + nbr_traite INT, + montant_interet FLOAT, + taux_interet FLOAT, + idcommande_commandeclt BIGINT NOT NULL, + id_bon_livraisonclt BIGINT, + profile_idprofile INT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (profile_idprofile) REFERENCES profile (idprofile), + FOREIGN KEY (idcltentreprise) REFERENCES cltentreprise (idcliententreprise), + FOREIGN KEY (idcltexiste) REFERENCES client (codeclient), + FOREIGN KEY (idcltpassageur) REFERENCES cltpassageur (idcltpassageur), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS commandeclt ( + idcommande BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + date_commande DATE NOT NULL, + typeclt SMALLINT NOT NULL, + type_reglement SMALLINT NOT NULL, + codeclient BIGINT, + idcliententreprise BIGINT, + idcltpassageur BIGINT, + total_h_t_net FLOAT NOT NULL, + total_tva FLOAT NOT NULL, + remise FLOAT NOT NULL DEFAULT 0, + timbre_loi FLOAT NOT NULL, + net_a_payer FLOAT NOT NULL, + iddevis BIGINT, + id_bon_livraisonclt BIGINT, + id_factureclt BIGINT, + local_nom VARCHAR(300) NOT NULL, + idprofile_editeur INT NOT NULL, + FOREIGN KEY (codeclient) REFERENCES client (codeclient), + FOREIGN KEY (idcliententreprise) REFERENCES cltentreprise (idcliententreprise), + FOREIGN KEY (idcltpassageur) REFERENCES cltpassageur (idcltpassageur), + FOREIGN KEY (idprofile_editeur) REFERENCES profile (idprofile), + FOREIGN KEY (iddevis) REFERENCES devisclt (iddevis), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS bon_livraisonclt ( + idbon_livraisonclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + type_client SMALLINT NOT NULL, + id_clt_entreprise BIGINT, + id_clt_passageur BIGINT, + id_clt_existe BIGINT, + heur_livraison TIME, + date_livraison_prevu DATE NOT NULL, + adresse_livraison VARCHAR(45) NOT NULL, + transporteur VARCHAR(45), + frais FLOAT, + poids_produit INT, + tele1 VARCHAR(45), + tele2 VARCHAR(45), + devise VARCHAR(10) NOT NULL, + total_h_t_net FLOAT, + total_tva FLOAT, + remise FLOAT, + net_a_payer FLOAT, + id_commandeclt BIGINT NOT NULL, + idprofile_editeur INT NOT NULL, + date_creation DATE NOT NULL, + local_nom VARCHAR(45) NOT NULL, + FOREIGN KEY (idprofile_editeur) REFERENCES profile (idprofile), + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_clt_entreprise) REFERENCES cltentreprise (idcliententreprise), + FOREIGN KEY (id_clt_passageur) REFERENCES cltpassageur (idcltpassageur), + FOREIGN KEY (id_clt_existe) REFERENCES client (codeclient) +); +COMMIT; + +ALTER TABLE factureclt ADD CONSTRAINT CONSTRAINT_INDEX_fact_bon_clt_454 FOREIGN KEY (id_bon_livraisonclt) REFERENCES bon_livraisonclt (idbon_livraisonclt)ON DELETE CASCADE; +ALTER TABLE factureclt ADD CONSTRAINT CONSTRAINT_INDEX_fact_com_clt_547 FOREIGN KEY (idcommande_commandeclt) REFERENCES commandeclt (idcommande)ON DELETE CASCADE; +ALTER TABLE commandeclt ADD CONSTRAINT CONSTRAINT_INDEX_com_fact_clt_884 FOREIGN KEY (id_factureclt) REFERENCES factureclt (idfactureclt) ON DELETE CASCADE; +ALTER TABLE commandeclt ADD CONSTRAINT CONSTRAINT_INDEX_com_bon_liv_clt_2 FOREIGN KEY (id_bon_livraisonclt) REFERENCES bon_livraisonclt (idbon_livraisonclt) ON DELETE CASCADE; + +CREATE TABLE IF NOT EXISTS fournisseur ( + id_fournisseur INT AUTO_INCREMENT PRIMARY KEY, + nom VARCHAR(45) NOT NULL, + adresse VARCHAR(45) NOT NULL, + formes VARCHAR(45), + tele1 BIGINT NOT NULL, + tele2 BIGINT, + fax BIGINT, + mail VARCHAR(45), + site_web VARCHAR(45), + specialite VARCHAR(100) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS commande_frs ( + id_commande_frs INT AUTO_INCREMENT NOT NULL PRIMARY KEY, + date_commande DATE NOT NULL, + heur_commande TIME NOT NULL, + mode_reglement VARCHAR(45) NOT NULL, + devise VARCHAR(45) NOT NULL, + total_h_t_net FLOAT NOT NULL, + total_tva FLOAT NOT NULL, + timbre_loi FLOAT NOT NULL, + net_a_payer FLOAT NOT NULL, + id_fournisseur INT NOT NULL, + id_profile INT NOT NULL, + FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS reglement_frs ( + id_reglement_frs BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + id_fournisseur INT NOT NULL, + montant FLOAT NOT NULL, + date_creation TIMESTAMP NOT NULL, + type_paiement SMALLINT NOT NULL, + mode_paiement SMALLINT, + etat_reglement SMALLINT NOT NULL, + id_profile INT NOT NULL, + FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS facture_frs ( + id_facture_frs BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + numero VARCHAR(45) NOT NULL, + date_creation TIMESTAMP NOT NULL, + type_reglement SMALLINT, + etat_reglement SMALLINT, + devise VARCHAR(10) NOT NULL, + total_h_t_net FLOAT NOT NULL, + remise FLOAT NOT NULL, + total_tva FLOAT NOT NULL, + timbre_loi FLOAT NOT NULL, + net_a_payer FLOAT NOT NULL, + bon_reception SMALLINT, + id_fournisseur INT NOT NULL, + local_reception VARCHAR(300) NOT NULL, + id_commande_frs INT, + id_profile INT NOT NULL, + id_reglement_frs BIGINT, + FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur), + FOREIGN KEY (local_reception) REFERENCES local (nom), + FOREIGN KEY (id_commande_frs) REFERENCES commande_frs (id_commande_frs), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile), + FOREIGN KEY (id_reglement_frs) REFERENCES reglement_frs (id_reglement_frs) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS bonreception_frs ( + id_bonreception BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + numero VARCHAR(45) NOT NULL, + date_reception TIMESTAMP NOT NULL, + transporteur VARCHAR(45), + net_a_payer FLOAT, + id_fournisseur INT NOT NULL, + local_reception VARCHAR(45) NOT NULL, + id_profile INT NOT NULL, + id_facture_frs BIGINT, + FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur), + FOREIGN KEY (local_reception) REFERENCES local (nom), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile), + FOREIGN KEY (id_facture_frs) REFERENCES facture_frs (id_facture_frs) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS cheque_clt ( + id_chequeclt INT AUTO_INCREMENT NOT NULL PRIMARY KEY, + numero VARCHAR(300) NOT NULL, + banque VARCHAR(300) NOT NULL, + montant FLOAT NOT NULL, + nom_complet VARCHAR(400), + etat_cheque SMALLINT, + date_paiement DATE NOT NULL, + date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + id_factureclt BIGINT, + local_nom VARCHAR(300) NOT NULL, + id_profile INT NOT NULL, + FOREIGN KEY (id_factureclt) REFERENCES factureclt (idfactureclt), + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS carte_bancaire_clt ( + id_carte_bancaire BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + num_transation VARCHAR(150) NOT NULL, + nom_banque VARCHAR(45), + num_carte VARCHAR(100), + nom_complet VARCHAR(45), + date_transation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + montant FLOAT NOT NULL, + id_factureclt BIGINT, + local_nom VARCHAR(300) NOT NULL, + id_profile INT NOT NULL, + FOREIGN KEY (id_factureclt) REFERENCES factureclt (idfactureclt), + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS vente_sans_facture ( + id_vente_sans_facture BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + date_vente TIMESTAMP NOT NULL, + paiement SMALLINT NOT NULL, + nom_prenom_client VARCHAR(50), + operation SMALLINT, + date_operation TIMESTAMP, + montant FLOAT NOT NULL, + id_chequeclt INT, + id_carte_bancaire BIGINT, + id_profile INT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (id_chequeclt) REFERENCES cheque_clt (id_chequeclt), + FOREIGN KEY (id_carte_bancaire) REFERENCES carte_bancaire_clt (id_carte_bancaire), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS stock_detail ( + id_detail_stock BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + local_nom VARCHAR(45) NOT NULL, + reference_produit VARCHAR(300) NOT NULL, + quantite FLOAT NOT NULL, + date_add TIMESTAMP NOT NULL, + id_profile INT NOT NULL, + id_bon_entre BIGINT, + id_bon_sortie BIGINT, + id_bon_livraison BIGINT, + id_bon_reception BIGINT, + id_facture_frs BIGINT, + id_vente_sans_facture BIGINT, + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (reference_produit) REFERENCES produit (reference), + FOREIGN KEY (id_bon_entre) REFERENCES entre (id_entre), + FOREIGN KEY (id_bon_sortie) REFERENCES sortie (id_sortie), + FOREIGN KEY (id_bon_livraison) REFERENCES bon_livraisonclt (idbon_livraisonclt), + FOREIGN KEY (id_bon_reception) REFERENCES bonreception_frs (id_bonreception), + FOREIGN KEY (id_facture_frs) REFERENCES facture_frs (id_facture_frs), + FOREIGN KEY (id_vente_sans_facture) REFERENCES vente_sans_facture (id_vente_sans_facture), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS liste_produit_commandeclt ( + id_liste_produit_commandeclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + commande_idcommande BIGINT NOT NULL, + produit_reference VARCHAR(40) NOT NULL, + designation_produit VARCHAR(800) NOT NULL, + quantite INT NOT NULL, + p_u_h_t FLOAT NOT NULL, + remise INT, + p_u_h_t_net FLOAT NOT NULL, + tva INT NOT NULL, + montant FLOAT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (commande_idcommande) REFERENCES commandeclt (idcommande), + FOREIGN KEY (produit_reference) REFERENCES produit (reference), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS traite_clt ( + id_traite BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + date_traite DATE NOT NULL, + montant_traite FLOAT NOT NULL, + date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + id_factureclt BIGINT NOT NULL, + date_paiement TIMESTAMP, + montant_payer FLOAT, + local_nom VARCHAR(300) NOT NULL, + id_profile INT NOT NULL, + FOREIGN KEY (id_factureclt) REFERENCES factureclt (idfactureclt), + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS traite_paiement_espace_clt ( + id_traite_paiement_espace BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + id_traite BIGINT NOT NULL, + date_payer TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + montant_payer FLOAT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + id_profile INT NOT NULL, + FOREIGN KEY (id_traite) REFERENCES traite_clt (id_traite), + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS devis_frs ( + id_devis_frs INT NOT NULL PRIMARY KEY, + id_fournisseur INT NOT NULL, + date_creation DATE NOT NULL, + devis VARCHAR(10) NOT NULL, + total_h_t_net FLOAT NOT NULL, + total_tva FLOAT NOT NULL, + timbre_loi FLOAT NOT NULL, + net_a_payer FLOAT NOT NULL, + id_profile INT NOT NULL, + FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS list_produit_devisclt ( + id_list_produit_devisclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + iddevis_devis BIGINT NOT NULL, + reference_produit VARCHAR(300) NOT NULL, + designation_produit VARCHAR(800) NOT NULL, + quantie INT NOT NULL, + p_u_h_t FLOAT NOT NULL, + remise INT NOT NULL, + p_u_h_t_net FLOAT NOT NULL, + tva INT NOT NULL, + montant FLOAT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (reference_produit) REFERENCES produit (reference), + FOREIGN KEY (iddevis_devis) REFERENCES devisclt (iddevis), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS liste_produit_devis_frs ( + reference_produit VARCHAR(40) NOT NULL PRIMARY KEY, + id_devis_frs INT NOT NULL, + quantite INT NOT NULL, + p_u_h_t FLOAT NOT NULL, + remise INT, + p_u_h_t_net FLOAT NOT NULL, + tva INT NOT NULL, + montant FLOAT NOT NULL, + FOREIGN KEY (reference_produit) REFERENCES produit (reference), + FOREIGN KEY (id_devis_frs) REFERENCES devis_frs (id_devis_frs) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS contact_frs ( + idcontactfrs INT AUTO_INCREMENT NOT NULL PRIMARY KEY, + nom VARCHAR(45) NOT NULL, + prenom VARCHAR(45) NOT NULL, + tele1 BIGINT NOT NULL, + tele2 BIGINT, + email VARCHAR(45), + id_fournisseur INT NOT NULL, + FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS list_prod_factclt ( + id_list_prod_factclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + idfactureclt_factureclt BIGINT NOT NULL, + produit_reference VARCHAR(300) NOT NULL, + designation_produit VARCHAR(800) NOT NULL, + quantite INT NOT NULL, + p_u_h_t FLOAT NOT NULL, + remise INT, + p_u_h_t_net FLOAT NOT NULL, + tva INT NOT NULL, + montant FLOAT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (idfactureclt_factureclt) REFERENCES factureclt (idfactureclt), + FOREIGN KEY (produit_reference) REFERENCES produit (reference), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS liste_prod_livraison ( + id_liste_prod_livraison BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + id_bon_livraison_clt BIGINT NOT NULL, + produit_reference VARCHAR(40) NOT NULL, + designation_produit VARCHAR(800) NOT NULL, + quantite INT NOT NULL, + p_u_h_t FLOAT NOT NULL, + remise INT NOT NULL, + p_u_h_t_net FLOAT NOT NULL, + tva INT NOT NULL, + montant FLOAT NOT NULL, + local_nom VARCHAR(45) NOT NULL, + FOREIGN KEY (id_bon_livraison_clt) REFERENCES bon_livraisonclt (idbon_livraisonclt), + FOREIGN KEY (produit_reference) REFERENCES produit (reference), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS liste_prod_commande_frs ( + id_liste_prod_commande_frs INT AUTO_INCREMENT NOT NULL PRIMARY KEY, + id_commande_frs INT NOT NULL, + designation_produit VARCHAR(45) NOT NULL, + quantite INT NOT NULL, + p_u_h_t FLOAT NOT NULL, + remise INT, + p_u_h_t_net FLOAT NOT NULL, + tva INT NOT NULL, + montant FLOAT NOT NULL, + FOREIGN KEY (id_commande_frs) REFERENCES commande_frs (id_commande_frs) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS list_prod_reception_frs ( + id_achat BIGINT AUTO_INCREMENT NOT NULL, + id_bonreception_frs BIGINT NOT NULL, + reference VARCHAR(300) NOT NULL, + quantite INT NOT NULL, + p_u_h_t FLOAT NOT NULL, + p_u_h_t_net FLOAT NOT NULL, + tva INT NOT NULL, + montant FLOAT NOT NULL, + PRIMARY KEY (id_achat), + FOREIGN KEY (id_bonreception_frs) REFERENCES bonreception_frs (id_bonreception), + FOREIGN KEY (reference) REFERENCES produit (reference) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS list_prod_fact_frs ( + id_list_prod_fact_frs INT AUTO_INCREMENT NOT NULL, + id_facture_frs BIGINT NOT NULL, + reference VARCHAR(40) NOT NULL, + designation_produit VARCHAR(100) NOT NULL, + quantite INT NOT NULL, + p_u_h_t FLOAT NOT NULL, + remise INT, + p_u_h_t_net FLOAT NOT NULL, + tva INT NOT NULL, + montant FLOAT NOT NULL, + PRIMARY KEY (id_list_prod_fact_frs), + FOREIGN KEY (id_facture_frs) REFERENCES facture_frs (id_facture_frs), + FOREIGN KEY (reference) REFERENCES produit (reference) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS factclt_avoir ( + idavoir BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + date_creation VARCHAR(45) NOT NULL, + type_avoir SMALLINT NOT NULL, + devis VARCHAR(45) NOT NULL, + total_h_t_net FLOAT NOT NULL, + total_tva FLOAT NOT NULL, + timbre_loi FLOAT NOT NULL, + net_a_reduire FLOAT NOT NULL, + factureclt_idfactureclt BIGINT NOT NULL, + profile_idprofile INT NOT NULL, + local_nom VARCHAR(45) NOT NULL, + FOREIGN KEY (factureclt_idfactureclt) REFERENCES factureclt (idfactureclt), + FOREIGN KEY (profile_idprofile) REFERENCES profile (idprofile), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS traite_paiement_carte_clt ( + id_traite_paiement_carte BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + id_traite BIGINT NOT NULL, + montant_payer FLOAT NOT NULL, + numero_carte VARCHAR(300) NOT NULL, + banque VARCHAR(300) NOT NULL, + date_payer TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + local_nom VARCHAR(300) NOT NULL, + id_profile INT NOT NULL, + FOREIGN KEY (id_traite) REFERENCES traite_clt (id_traite), + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS traite_paiement_cheque_clt ( + id_traite_paiement_cheque BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + id_traite BIGINT NOT NULL, + montant_payer FLOAT NOT NULL, + numero VARCHAR(300) NOT NULL, + banque VARCHAR(300) NOT NULL, + nom_complet VARCHAR(400), + date_payer DATE NOT NULL, + date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + etat_cheque SMALLINT, + local_nom VARCHAR(300) NOT NULL, + id_profile INT NOT NULL, + FOREIGN KEY (id_traite) REFERENCES traite_clt (id_traite), + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS historique_cheque_clt ( + id_historique_cheque_clt BIGINT AUTO_INCREMENT NOT NULL, + etat_cheque SMALLINT NOT NULL, + date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + id_chequeclt INT, + id_traite_paiement_cheque BIGINT, + local_nom VARCHAR(300) NOT NULL, + id_profile INT NOT NULL, + PRIMARY KEY (id_historique_cheque_clt), + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile), + FOREIGN KEY (id_chequeclt) REFERENCES cheque_clt (id_chequeclt), + FOREIGN KEY (id_traite_paiement_cheque) REFERENCES traite_paiement_cheque_clt (id_traite_paiement_cheque) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS caisseclt ( + id_caisseclt INT AUTO_INCREMENT NOT NULL, + date_mouvement TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + type_mouvement SMALLINT, + id_factureclt BIGINT, + id_avoir_factclt BIGINT, + id_vente_sans_facture BIGINT, + montant FLOAT NOT NULL, + id_traite_paiement_espace BIGINT, + id_traite_paiement_carte BIGINT, + id_traite_paiement_cheque BIGINT, + id_historique_cheque_clt BIGINT, + id_profile INT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + PRIMARY KEY (id_caisseclt), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile), + FOREIGN KEY (id_factureclt) REFERENCES factureclt (idfactureclt), + FOREIGN KEY (id_avoir_factclt) REFERENCES factclt_avoir (idavoir), + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_traite_paiement_espace) REFERENCES traite_paiement_espace_clt (id_traite_paiement_espace), + FOREIGN KEY (id_traite_paiement_carte) REFERENCES traite_paiement_carte_clt (id_traite_paiement_carte), + FOREIGN KEY (id_traite_paiement_cheque) REFERENCES traite_paiement_cheque_clt (id_traite_paiement_cheque), + FOREIGN KEY (id_historique_cheque_clt) REFERENCES historique_cheque_clt (id_historique_cheque_clt), + FOREIGN KEY (id_vente_sans_facture) REFERENCES vente_sans_facture (id_vente_sans_facture) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS bond_retourclt ( + idbonderetourclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + factclt_avoir_idavoir BIGINT NOT NULL, + heur_retour TIME NOT NULL, + date_retour DATE NOT NULL, + transpoteur VARCHAR(45), + quantite INT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (factclt_avoir_idavoir) REFERENCES factclt_avoir (idavoir), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS list_prod_avoir_factclt ( + id_list_prod_avoir_factclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, + idfactclt_avoir_prod BIGINT NOT NULL, + quantite INT NOT NULL, + p_u_h_t FLOAT NOT NULL, + remise FLOAT NOT NULL, + p_u_h_t_net FLOAT NOT NULL, + tva FLOAT NOT NULL, + montant FLOAT NOT NULL, + designation VARCHAR(400), + produit_reference VARCHAR(300), + designation_produit VARCHAR(400), + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (idfactclt_avoir_prod) REFERENCES factclt_avoir (idavoir), + FOREIGN KEY (produit_reference) REFERENCES produit (reference), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS liste_prod_retour ( + id_retour BIGINT NOT NULL PRIMARY KEY, + id_bonde_retourclt BIGINT NOT NULL, + quantite FLOAT NOT NULL, + p_u_h_t FLOAT NOT NULL, + remise FLOAT NOT NULL, + p_u_h_t_net FLOAT NOT NULL, + tva FLOAT NOT NULL, + montant FLOAT NOT NULL, + designation_produit VARCHAR(800) NOT NULL, + local_nom VARCHAR(300) NOT NULL, + FOREIGN KEY (id_bonde_retourclt) REFERENCES bond_retourclt (idbonderetourclt), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS detail_retour ( + id_retour BIGINT NOT NULL, + id_detail BIGINT NOT NULL, + FOREIGN KEY (id_retour) REFERENCES liste_prod_retour (id_retour), + FOREIGN KEY (id_detail) REFERENCES stock_detail (id_detail_stock) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS stock ( + local_nom VARCHAR(300) NOT NULL, + produit_reference VARCHAR(300) NOT NULL, + quantite INT NOT NULL, + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (produit_reference) REFERENCES produit (reference) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS carte_electronique_frs ( + id_carte_electronique_frs BIGINT AUTO_INCREMENT NOT NULL, + id_reglement_frs BIGINT NOT NULL, + numero_transaction VARCHAR(45) NOT NULL, + numero_carte BIGINT, + banque VARCHAR(45), + date_transaction TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + montant FLOAT NOT NULL, + PRIMARY KEY (id_carte_electronique_frs), + FOREIGN KEY (id_reglement_frs) REFERENCES reglement_frs (id_reglement_frs) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS cheque_frs ( + id_cheque_frs BIGINT AUTO_INCREMENT NOT NULL, + id_reglement_frs BIGINT NOT NULL, + numero INT NOT NULL, + banque VARCHAR(45) NOT NULL, + montant FLOAT NOT NULL, + nom_complet VARCHAR(100), + date_paiement DATE NOT NULL, + date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id_cheque_frs), + FOREIGN KEY (id_reglement_frs) REFERENCES reglement_frs (id_reglement_frs) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS traite_frs ( + id_traite_frs BIGINT AUTO_INCREMENT NOT NULL, + id_reglement_frs BIGINT NOT NULL, + montant FLOAT NOT NULL, + date_paiement DATE NOT NULL, + date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id_traite_frs), + FOREIGN KEY (id_reglement_frs) REFERENCES reglement_frs (id_reglement_frs) +); +COMMIT; + +CREATE TABLE IF NOT EXISTS frais ( + id_frais BIGINT AUTO_INCREMENT NOT NULL, + montant FLOAT NOT NULL, + object VARCHAR(500) NOT NULL, + context TEXT, + personne VARCHAR(200), + mode_paiement SMALLINT NOT NULL, + numero VARCHAR(45), + banque VARCHAR(45), + date_cheque DATE, + id_profile INT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + date_creation TIMESTAMP NOT NULL, + PRIMARY KEY (id_frais), + FOREIGN KEY (id_profile) REFERENCES profile (idprofile), + FOREIGN KEY (local_nom) REFERENCES local (nom) +); +COMMIT; + + +CREATE TABLE IF NOT EXISTS liste_prod_vente_sans_facture ( + id_liste_prod_vente_sans_facture BIGINT AUTO_INCREMENT NOT NULL, + id_vente_sans_facture BIGINT NOT NULL, + produit_reference VARCHAR(300) NOT NULL, + designation_produit VARCHAR(800) NOT NULL, + quantite INT NOT NULL, + p_u_h_t FLOAT NOT NULL, + remise FLOAT NOT NULL, + p_u_h_t_net FLOAT NOT NULL, + tva FLOAT NOT NULL, + montant FLOAT NOT NULL, + local_nom VARCHAR(300) NOT NULL, + PRIMARY KEY (id_liste_prod_vente_sans_facture), + FOREIGN KEY (produit_reference) REFERENCES produit (reference), + FOREIGN KEY (local_nom) REFERENCES local (nom), + FOREIGN KEY (id_vente_sans_facture) REFERENCES vente_sans_facture (id_vente_sans_facture) +); +COMMIT; diff --git a/src/db/H2database_SimpleData.sql b/src/db/H2database_SimpleData.sql new file mode 100644 index 0000000..b6b5da3 --- /dev/null +++ b/src/db/H2database_SimpleData.sql @@ -0,0 +1,2104 @@ +INSERT INTO local (nom, adresse, tele, fax) VALUES +('Magasin I', '74 rue 32121', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('Magasin II', '485 rue 65451', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('Magasin III', '15 rue 455631', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('Magasin IV', '2 rue mouez', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000); + +INSERT INTO profile (idprofile, nom, prenom, naissance, sexe, num_tele, mail, adresse, date_creation, pays) VALUES +(2, 'Ben Tili', 'Maher', '1987-09-03', 1, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'maher.tili@gmail.com', '2 rue mouez mornguia', '2015-09-19', 'Tunisie'), +(3, 'Ben Salah', 'Manoubi', '1977-09-03', 1, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'manoubi.salah@yahoo.fr', '22 rue république Denden', '2024-10-19', 'Tunisie'); + +INSERT INTO authentification (idauhentification, login, password, type_compte, question_secrete, reponce_question, etat_compte, stock_negatif, local_nom, id_profile) VALUES +(1, '3', '3', 'Commercial', 'Quel est le nom de votre animal domecile', 'Belle', 1, 1, 'Magasin I', 2), +(2, '1', '1', 'Commercial', 'Quel est le nom de votre animal domecile', 'Recks', 1, 1, 'Magasin I', 3); + +INSERT INTO fournisseur (nom, adresse, formes, tele1, tele2, fax, mail, site_web, specialite) VALUES +('BenJemiaBr', '658 Rue Principale Denden', 'SA', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'fournisseur@benjemia.com', 'www.benjemiabr.com', 'Moto'), +('ABC', '658 Rue EDMM Mornaguia', 'SA', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'fournisseur@abc.com', 'Infomatique'), +('Baite Said', '95 rue jemea Mornaguia', 'SASU', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'baite@said.com', 'www.baitesaide.com', 'Electro'), +('Sumsung', ' 20 Rue Mozart', 'SARL', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'contact@sumsung.com', 'www.sumsung.com', 'Mecanique'), +('Amazfit', ' 74 Rue Hector Berlioz', 'SARL', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'commercial@lg.com', 'www.lg.com', 'Batiment'), +('OTIK', '74 rue saint-exupéry', 'SASU', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'contact@otik.com', 'www.otik.com', 'Fourniture'), +('Free', '9 All des marronniers', 'SNC', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'contact@free.com', 'www.free.com', 'Internet'), +('SEGEHO', '14 rue sainte-famille tunis', 'SASU', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'contactsegeho.com', 'www.segeho.com', 'Médical'), +('Génaral éléctrique', '512 grandom MRRC ', 'SA', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'ge@gmail.com', 'www.ge.com', 'Voiture'), +('BTP', '22 Rue de Villarceau', 'SARL', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'tn.sdfsdf@gail.com', 'www.btp.com', 'Téléphone'), +('AZZT', '265 RUE 15442 MANAR', 'SARL', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'vfsdf@rr.com', NULL, 'Informatique'); + +INSERT INTO categorie (nomcategorie, unitemesure) VALUES +('Accessoire', 1), +('Accessoires appareils auditifs', 1), +('Accessoires de manucure', 1), +('Accessoires optique', 1), +('Accessoires pour hygiène dentaire', 1), +('Accueil', 1), +('Acides aminés', 1), +('Acné', 1), +('Aérosols & accessoires', 1), +('Aide minceur', 1), +('Alimentation par sonde', 1), +('Aliments diététiques', 1), +('Aliments hyperprotéinés', 1), +('Aliments pauvres en protide', 1), +('Allaitement', 1), +('Allergies', 1), +('Amino', 1), +('Aminos', 0), +('Ampoules', 1), +('Ampoules anti-chute', 1), +('Ampoules buvables', 1), +('Anti-chute', 1), +('Anti-chute de cheveux', 1), +('Anti-oxydant', 1), +('Anticerne', 1), +('Antiparasitaires', 1), +('Antiseptiques', 1), +('Aphtes', 1), +('Aphtes : bains de bouche', 1), +('Appareil digestif, acidité & reflux', 1), +('Après-shampoings', 1), +('aqw', 0), +('aqwzsx', 0), +('Aromathérapie', 1), +('Articulation & os', 1), +('Assiettes denfant', 1), +('assse', 0), +('Atrier', 1), +('Aucune categorie', 1), +('Audition', 1), +('Auto bronzant', 1), +('Autre', 1), +('Autres tests', 1), +('azert', 2), +('azsss', 0), +('Bain moussant/Huile de Bain', 1), +('Balances', 1), +('Ballonnements', 1), +('Balneothérapies', 1), +('Bandages', 1), +('Bas de contention', 1), +('Baume après-rasage', 1), +('Bavoirs', 1), +('Beauty @Home ', 1), +('Bébé', 1), +('Béquilles', 1), +('Biberons', 1), +('Bidet', 1), +('Biocide', 1), +('Biscuits bébés', 1), +('Bistouris', 1), +('Blaireaux', 1), +('Blanchiment', 1), +('Blessures et plaies', 1), +('BLOCUS', 1), +('Blush', 1), +('Boissons énergisantes', 1), +('Boisssons pour bébés', 1), +('Boîtes alimentaires bébé', 1), +('Bouchons doreille', 1), +('Bouillottes', 1), +('Bouteille', 0), +('Boutons de fièvre', 1), +('Bronzage homme', 1), +('Brosses a cheveux', 1), +('Brosses à dents', 1), +('Brosses à dents électriques', 1), +('Brulures & coups de soleil', 1), +('Brumisateurs', 1), +('Cannes', 1), +('Cap Drink', 1), +('Cardio-vasculaire : coeur', 1), +('Carte Premium', 1), +('chaise', 0), +('Chauffe-biberons', 1), +('Cheveux', 1), +('Cholesterol', 1), +('Cicatrisant', 1), +('Circulation & jambes lourdes', 1), +('Climatiseur', 0), +('Collier', 1), +('Collyres', 1), +('Colorations', 1), +('Compléments alimentaires', 1), +('Compléments alimentaires beauté', 1), +('Compléments alimentaires pour animaux', 1), +('Compléments alimentaires pour bébé et maman', 1), +('Compléments alimentaires santé', 1), +('Compléments nutritionnels hyperprotéinées', 1), +('Compléments sans lactose', 1), +('Complexe pour diffuseur', 1), +('Comprimés', 1), +('Comprimés & sirops', 1), +('Comprimés, sirops & sachets', 1), +('Confort urinaire', 1), +('Constipation', 1), +('Contour des yeux', 1), +('Contour des yeux homme', 1), +('Coquilles et protèges-mamelons', 1), +('Corne et callosités', 1), +('Corps', 1), +('Corps Fête', 1), +('Cors', 1), +('Cosmétiques', 1), +('Cosmétiques & Beauté', 1), +('Couches bébé', 1), +('Couches et propreté', 1), +('Coupe-poils', 1), +('Coussins anatomiques', 1), +('Crampes intestinales', 1), +('Crayon maquillage', 1), +('Créatine', 1), +('Crème', 1), +('Crème & gel', 1), +('Crème anti-âge', 1), +('Crème dépilatoire', 1), +('Crème et huile de massage', 1), +('Crème hydratante bébé', 1), +('Crème Lavante/ Gel Surgras', 1), +('Crème solaire', 1), +('Crèmes cheveux', 1), +('Crevasses', 1), +('ddxw', 0), +('Déambulateurs', 1), +('Défense naturelle', 1), +('Démaquillants yeux', 1), +('Dentifrices', 1), +('Dentifrices bio aux plantes', 1), +('Dents & stomatologie', 1), +('Déodorants', 1), +('Déodorants homme', 1), +('Désinfectant', 1), +('Détente & sommeil', 1), +('Développement musculaire ', 1), +('Diabète', 1), +('Diarrhée', 1), +('Diététique', 1), +('Diététique du sportif', 1), +('Diététique, nutrition', 1), +('Diffuseurs d’huiles essentielles', 1), +('Digestion', 1), +('Dispositif medical', 1), +('Dissolvants', 1), +('Divers', 1), +('Douleur, fièvre & inflammation', 1), +('Douleurs (migraine et mal de dos) & températu', 1), +('Draineurs anticellulites', 1), +('Durillons', 1), +('Eczema & rougeurs', 1), +('Edulcorant', 1), +('Endurance & Performance', 1), +('Energy', 1), +('Epilateurs électriques', 1), +('Epilation', 1), +('Epilation à la cire', 1), +('Eponge de bain', 1), +('Equilibre féminin & ménopause', 1), +('Escart & cicatrisation', 1), +('Eye liner', 1), +('Fard à paupières', 1), +('Fauteuils roulants', 1), +('FAVORIS', 1), +('Fers à friser', 1), +('FESTIVAL', 1), +('Fête des mères', 1), +('Fête des pères ', 1), +('Fils dentaires', 1), +('Fleurs de bach', 1), +('Fond de teint', 1), +('Forme sexuelle', 1), +('FREE HUGS', 1), +('Gants en latex', 1), +('Gel moussant', 1), +('Gelée royale', 1), +('Gels & mousses de coiffage', 1), +('Gels de rasage', 1), +('Gels douche homme', 1), +('Gels-Mousses à raser', 1), +('Gels/Huiles douches', 1), +('Gélules aux huiles éssentielles', 1), +('Gemmothérapie', 1), +('Gift Orange', 1), +('Gloss', 1), +('Gommage', 1), +('Gommage corps', 1), +('Gommages homme', 1), +('Gommes dentaires', 1), +('Goodies', 1), +('Gouttes & spray nasal', 1), +('Hair Advice ', 1), +('Haleine fraîche', 1), +('Hallus valgux', 1), +('Health', 1), +('Hemoclin', 1), +('Hémorroïdes', 1), +('Homéopathie', 1), +('Homme', 1), +('Huile', 1), +('Huile solaire', 1), +('Huiles cheveux', 1), +('Huiles corporelles', 1), +('Huiles de bain', 1), +('Huiles de massage', 1), +('Huiles essentielles', 1), +('Huiles essentielles bio', 1), +('Huiles pré-rasage', 1), +('Huiles végétales', 1), +('Hydropulseurs', 1), +('Hygiène', 1), +('Hygiène dentaire', 1), +('Hygiène du nez et des oreilles', 1), +('Hygiène féminine', 1), +('Hygiène intime', 1), +('Immunonutrition', 1), +('Incontinence urinaire', 1), +('Inflammation chronique de lintestin', 1), +('Injection', 1), +('Iode', 1), +('Jambes lourdes (veinotoniques)', 1), +('Kinésithérapies', 1), +('Kits allergie', 1), +('Lait après-solaire', 1), +('Lait de toilette pour bébé', 1), +('Lait démaquillant', 1), +('Lait infantile', 1), +('Lait/Crème Hydratante', 1), +('Lames de rasoir', 1), +('Laques', 1), +('Le change de bébé', 1), +('Lentilles de contact', 1), +('Lets go to RIO !', 1), +('Lingettes démaquillantes', 1), +('Lingettes, gels & savons désinfectants', 1), +('Liquides & sirops', 1), +('Lisseurs', 1), +('Lithothérapies', 1), +('Lits médicalisés', 1), +('Lotion micellaire', 1), +('Lotions anti-chute', 1), +('Lotions capillaires', 1), +('Luminothérapies', 1), +('Lunettes de vue', 1), +('Mal des transports', 1), +('Manucure & Pédicure', 1), +('Maquillage', 1), +('Mascara', 1), +('Masque', 1), +('Masque capillaire', 1), +('Matériel médical', 1), +('Matériel pour l’allaitement', 1), +('Matière première', 1), +('Maux de gorge', 1), +('Mémoire', 1), +('Mémoire & concentration', 1), +('Minceur', 1), +('Minceur & Fitness', 1), +('Minceur Summer', 1), +('MINI', 1), +('Module panier', 1), +('Monte-escaliers', 1), +('Mouche bébé', 1), +('Mousse', 1), +('Moyen diagnostique', 1), +('Mycose', 1), +('Mycoses des ongles', 1), +('Nature&Bio', 1), +('Non défini', 1), +('Nutrition & obésité', 1), +('Objets Connectés', 1), +('Oligo-éléments', 1), +('Ongles', 1), +('Ophtalmologie ', 1), +('Optique', 1), +('Orteils douloureux', 1), +('Orthopédie', 1), +('Otologie ', 1), +('Page daccueil', 1), +('Paillettes', 1), +('Pain Dermatologique', 1), +('Palette de maquillage', 1), +('Pansements', 1), +('Pansements et compresses', 1), +('Parapharmacie', 1), +('Parapharmacie & Orthopédie', 1), +('Parfumerie', 1), +('Parfums', 1), +('Parfums pour hommes', 1), +('Pastilles', 1), +('Pastilles & gelules', 1), +('Patch de toilette', 1), +('Patch-inhaler', 1), +('Peau', 1), +('Peignes', 1), +('Peignoirs bébé', 1), +('Phytopharmacie', 1), +('Phytothérapies', 1), +('Pieds', 1), +('Pieds très secs et déshydratés', 1), +('Pierre ponçe', 1), +('Piluliers et boîtes à pilules', 1), +('Pinceau maquillage', 1), +('Pinces à épiler', 1), +('Pipettes', 1), +('Plats pour bébés', 1), +('Pollen', 1), +('Pot d’analyse', 1), +('Pots pour enfants', 1), +('Poudre compacte', 1), +('Poudre libre', 1), +('Préparateur solaire', 1), +('Préservatifs, lubrifiants & stimulateurs', 1), +('Prise de masse', 1), +('Probiotiques', 1), +('Produits anti-poux', 1), +('Produits biologiques', 1), +('Produits de relaxation', 1), +('Produits de soins pour bébés', 1), +('Produits défrisants', 1), +('Produits minceurs', 1), +('Produits pauvres en sucre', 1), +('Produits pour appareils dentaires', 1), +('Produits sans glutens', 1), +('Produits solaires bébé', 1), +('PROMO', 1), +('Protection contre les insectes, rongeurs & ac', 1), +('Protections', 1), +('Protèges-slips', 1), +('Protein', 1), +('Protéines', 1), +('Psychiatrie', 1), +('Rasage', 1), +('Réactif', 1), +('Récupération', 1), +('Régulation intestinale', 1), +('Rein, vessie & prostate', 1), +('Renforcement du système immunitaire', 1), +('Repas de bébé', 1), +('Rhumatisme & rhumatologie', 1), +('Root', 1), +('Rouge à lèvres', 1), +('Sans parabene & sans parfum', 1), +('Savons pour bébés', 1), +('SDFVV', 0), +('Sécheresse buccale', 1), +('Sels de bains', 1), +('Seringues', 1), +('Serum', 1), +('Serviettes hygiéniques', 1), +('Shampoings', 1), +('Shampoings homme', 1), +('Shampoings pour bébé', 1), +('Shampoings secs', 1), +('Shampooings anti-chute', 1), +('Sirop', 1), +('Slim', 1), +('Soins', 1), +('Soins Anti-taches', 1), +('Soins anti-vergetures', 1), +('Soins cheveux homme', 1), +('Soins cheveux sans rinçage', 1), +('Soins corps homme', 1), +('Soins des jambes', 1), +('Soins des mains', 1), +('Soins des pieds', 1), +('Soins du corps', 1), +('Soins du buste', 1), +('Soins du visage', 1), +('Soins hydratants homme', 1), +('Soins peaux jeunes', 1), +('Soins pour le change', 1), +('Soins visage homme', 1), +('Solaire', 1), +('Soldes', 1), +('Soleil', 1), +('Solution lavante', 1), +('Solutions dentaires & gels dentaires', 1), +('Sondes utérine, rectale & trachéale', 1), +('Spécialité, sérum, va', 1), +('Spécialités', 1), +('Sport', 1), +('Spray', 1), +('Spray auriculaire', 1), +('Spray nasal', 1), +('Spray, roller, inhalateur & baume aux huiles', 1), +('Stérilisateurs biberons', 1), +('Sticks lèvres', 1), +('stomatology', 1), +('Stomie', 1), +('Stress & dépression', 1), +('Substituts de repas', 1), +('Sucettes bébé', 1), +('Supplément vitaminique', 1), +('Suppositoire & crème', 1), +('Talcs', 1), +('Tampons hygiéniques', 1), +('Tatouages', 1), +('TELEPHONE', 0), +('Tensiomètres', 1), +('TEST', 2), +('Test de grossesse', 1), +('Tétines de biberons', 1), +('TGB', 0), +('Thermomètres', 1), +('Thermothérapies', 1), +('Tires-laits', 1), +('Toilette de bébé', 1), +('Toilette du visage', 1), +('Tonique', 1), +('Toux grasse', 1), +('Toux sèche', 1), +('toxicology', 1), +('Transats de bain', 1), +('Transpiration', 1), +('Troubles urinaires & gynécologiques', 1), +('Trousses', 1), +('Trousses de secours', 1), +('Trousses Solaires', 1), +('TV', 0), +('Velvet Smooth', 1), +('Vernis à ongles', 1), +('Verrues', 1), +('Verrues & cors', 1), +('Vétérinaire', 1), +('Visage', 1), +('Vitamines', 1), +('Vitamines Enfant', 1), +('Voies Respiratoires', 1), +('xx', 0), +('Yeux', 1), +('Yeux & ophtamologie', 1), +('Zones de pression', 1), +('Zwachtel', 1); + +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(1, 09163816, 'Maher ben tili ben mustapha', 'Ben Tili', 'Maher', '1987-09-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '2 rue moez mornaguia', 1110, 'tn.maher@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(2, 00862870, 'H Ben Drechsel', 'H', 'Drechsel', '1961-11-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '870 Rue 900 France', 900, 'helene.drechsel@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(3, 00863871, 'Julien Ben Caratori', 'Julien', 'Caratori', '1944-09-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '871 Rue 600 France', 600, 'julien.caratori@aliceadsl.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(4, 00875883, 'Nadine Ben Bovy', 'Nadine', 'Bovy', '1959-12-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '883 Rue 106 France', 106, 'nadine.bovy@live.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(6, 00884892, 'Isabelle Ben Crocombette', 'Isabelle', 'Crocombette', '1968-05-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '892 Rue 3000 France', 3000, 'crocombette.eddy@neuf.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(8, 00887895, 'Janine Ben Gajewski', 'Janine', 'Gajewski', '1946-08-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '895 Rue 1863 France', 1863, 'jani.ga@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(9, 00891899, 'Evelyne Ben Collet', 'Evelyne', 'Collet', '1960-12-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '899 Rue 780 France', 780, 'evelyne.collet6@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(10, 00892900, 'Marylin Ben Zaghet', 'Marylin', 'Zaghet', '1973-07-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '900 Rue 3512 France', 3512, 'desseigneursdeso@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(11, 00893901, 'Sylvie Ben Brulard', 'Sylvie', 'Brulard', '1968-06-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '901 Rue 3537 France', 3537, 'sylvie.massage@outlook.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(12, 00897905, 'Sylviane Ben Halleux', 'Sylviane', 'Halleux', '1965-03-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '905 Rue 2924 France', 2924, 'sisihal@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(13, 00902910, 'Dominique Ben Maquet', 'Dominique', 'Maquet', '1962-08-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '910 Rue 1279 France', 1279, 'domaquet@voo.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(14, 00903911, 'Jean Robert Ben Deltour', 'Jean Robert', 'Deltour', '1953-05-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '911 Rue 1600 France', 1600, 'cath-et-jr@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(15, 00905913, 'Lucie Ben Cazzola', 'Lucie', 'Cazzola', '1961-07-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '913 Rue 1414 France', 1414, 'lucie.cazzola@arte.tv', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(16, 00906914, 'Carole Ben Ben Hamou', 'Carole', 'Ben Hamou', '1961-08-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '914 Rue 1487 France', 1487, 'carole.canon@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(17, 00908916, 'Sandra Ben Skwara', 'Sandra', 'Skwara', '1970-10-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '916 Rue 2049 France', 2049, 'sandra@skwara.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(18, 00909917, 'Fran Ben Absil', 'Fran', 'Absil', '1960-09-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '917 Rue 600 France', 600, 'absilfrancoise@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(19, 00914922, 'Isabelle Ben Asseman', 'Isabelle', 'Asseman', '1979-03-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '922 Rue 933 France', 933, 'isasseman@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(20, 00916924, 'Xavier Ben Van Brackel', 'Xavier', 'Van Brackel', '1974-04-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '924 Rue 1900 France', 1900, 'xvanbrackel@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(21, 00922930, 'Anne Ben Pitet', 'Anne', 'Pitet', '1964-05-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '930 Rue 251 France', 251, 'a.pitet@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(22, 00926934, 'Claire Ben Mesplé', 'Claire', 'Mesplé', '1958-04-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '934 Rue 1590 France', 1590, 'clairemesple@club-internet.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(23, 00931939, 'Corinne Ben Kastner', 'Corinne', 'Kastner', '1969-03-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '939 Rue 1295 France', 1295, 'corinne_kastner@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(24, 00932940, 'Pierre Ben Carlioz', 'Pierre', 'Carlioz', '1952-06-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '940 Rue 132 France', 132, 'cavet.carlioz@free.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(25, 00934942, 'Jean-Jacques Ben Grau', 'Jean-Jacques', 'Grau', '1961-12-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '942 Rue 28745 France', 28745, 'alexparis17@yahoo.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(26, 00000311, 'Damien Ben Dardenne', 'Damien', 'Dardenne', '1983-01-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '11 Rue 14693 France', 14693, 'dardennedamien@hotmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(27, 00000715, 'Michael Ben Willems', 'Michael', 'Willems', '2020-07-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '15 Rue 3500 France', 3500, 'willmichfr@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(28, 00000816, 'Emilie Ben Nyssen', 'Emilie', 'Nyssen', '1983-12-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '16 Rue 600 France', 600, 'emilienyssen@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(29, 00000917, 'Monique Ben Peteaux', 'Monique', 'Peteaux', '1953-09-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '17 Rue 1527 France', 1527, 'monique.peteaux@base.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(30, 00001018, 'Pascal Ben Sterckx', 'Pascal', 'Sterckx', '1972-03-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '18 Rue 3422 France', 3422, 'pascal.sterckx@telenet.be', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(31, 00001220, 'Philippe Ben Gillart', 'Philippe', 'Gillart', '1960-12-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '20 Rue 1007 France', 1007, 'gillartph@yahoo.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(32, 00001523, 'Aurélie Ben Veys', 'Aurélie', 'Veys', '1984-08-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '23 Rue 3203 France', 3203, 'aurelie.veys@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(33, 00001725, 'Dexia Credits Logement Ben Bertrandom', 'Dexia Credits Logement', 'Bertrandom', '1958-07-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '25 Rue 1219 France', 1219, 'marylene.bertrandom@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(34, 00002028, 'Virginie Ben Joiret', 'Virginie', 'Joiret', '2016-08-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '28 Rue 1114 France', 1114, 'joiretvirginie@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(35, 00002836, 'Pharmacie Ben De Savoie', 'Pharmacie', 'De Savoie', '1978-08-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '36 Rue 2236 France', 2236, 'thiryannabelle@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(36, 00002937, 'Fran Ben Ost', 'Fran', 'Ost', '1958-05-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '37 Rue 1044 France', 1044, 'francoise.ost@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(37, 00003038, 'Monique Ben Lambert - Ardenne Immo -', 'Monique', 'Lambert - Ardenne Immo -', '1961-07-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '38 Rue 10790 France', 10790, 'lambert.monique@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(38, 00003341, 'Sophie Ben Eggermont-Stevens', 'Sophie', 'Eggermont-Stevens', '1969-09-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '41 Rue 742 France', 742, 'sophiestevenscleol@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(39, 00003644, 'AURELIE Ben THIRION', 'AURELIE', 'THIRION', '1983-09-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '44 Rue 2501 France', 2501, 'thirion_aurelie@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(40, 00003846, 'Vanessa Ben Sanctorum', 'Vanessa', 'Sanctorum', '1981-02-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '46 Rue 1000 France', 1000, 'v.sanctorum@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(41, 00004048, 'Claude Ben Depauw (Archives Communales)', 'Claude', 'Depauw (Archives Communales)', '1955-08-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '48 Rue 2459 France', 2459, 'annedebroux@scarlet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(42, 00004250, 'Aurelie Ben Brion', 'Aurelie', 'Brion', '1979-05-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '50 Rue 2206 France', 2206, 'aureliebrion@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(43, 00004351, 'No Ben Lamotte', 'No', 'Lamotte', '1964-06-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '51 Rue 1147 France', 1147, 'monespacebleu@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(44, 00005159, 'Roanne Ben Serlet', 'Roanne', 'Serlet', '1973-01-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '59 Rue 2132 France', 2132, 'roanne.bernard@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(45, 00006472, 'Mireille Ben Zimmermann', 'Mireille', 'Zimmermann', '1958-11-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '72 Rue 300 France', 300, 'mireille.zimmermann@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(46, 00006674, 'Amandine Ben Van Hoof', 'Amandine', 'Van Hoof', '1984-02-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '74 Rue 1890 France', 1890, 'vanhoof.a@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(47, 00007280, 'Thewis Ben Carine', 'Thewis', 'Carine', '1970-01-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '80 Rue 300 France', 300, 'thewisvan@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(48, 00007886, 'Karine Ben Huynen', 'Karine', 'Huynen', '1962-12-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '86 Rue 3049 France', 3049, 'karine.huynen@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(49, 00008189, 'Benedicte Ben Braibant', 'Benedicte', 'Braibant', '1975-09-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '89 Rue 400 France', 400, 'noelbraibant@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(50, 00008492, 'Christina Ben Bussi', 'Christina', 'Bussi', '1968-10-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '92 Rue 1700 France', 1700, 'titti13@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(51, 00008997, 'Vincent Ben Milazzo', 'Vincent', 'Milazzo', '1962-05-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '97 Rue 1204 France', 1204, 'diabolo_noir_01@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(52, 00093101, 'Pourtois - Vanderveken Ben Chantal', 'Pourtois - Vanderveken', 'Chantal', '1950-10-13', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '101 Rue 345 France', 345, 'chantal.pourtois@gsk.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(53, 00095103, 'Sylvie Ben PORREWECK', 'Sylvie', 'PORREWECK', '1975-01-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '103 Rue 1120 France', 1120, 'sylvie_ziggy@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(54, 00100108, 'Nicolas Ben Neyens', 'Nicolas', 'Neyens', '1987-12-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '108 Rue 567 France', 567, 'n_neyens@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(55, 00102110, 'Tinneke Ben Billet', 'Tinneke', 'Billet', '1978-05-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '110 Rue 913 France', 913, 'tinne_billet@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(56, 00103111, 'Texti Sa Ben Cirichelli Grignard D', 'Texti Sa', 'Cirichelli Grignard D', '1972-02-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '111 Rue 2789 France', 2789, 'dorothee.grignard@yahoo.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(57, 00111119, 'Val Ben Henquet (M', 'Val', 'Henquet (M', '1976-10-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '119 Rue 1200 France', 1200, 'valerie_henquet@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(58, 00114122, 'Laetitia Ben Desplanques', 'Laetitia', 'Desplanques', '1971-01-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '122 Rue 1347 France', 1347, 'l.desplanques@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(59, 00116124, 'Annick Ben Giera', 'Annick', 'Giera', '1966-09-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '124 Rue 600 France', 600, 'giera.annick@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(60, 00123131, 'Christian Ben Guillaume', 'Christian', 'Guillaume', '1950-09-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '131 Rue 700 France', 700, 'genesquif@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(61, 00126134, 'Kristelle Ben Antoine', 'Kristelle', 'Antoine', '1980-01-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '134 Rue 3316 France', 3316, 'kristelle.antoine@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(62, 00128136, 'Cindy Ben Govaert', 'Cindy', 'Govaert', '1988-04-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '136 Rue 3571 France', 3571, 'cindy.g.1988@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(63, 00131139, 'Jamila Ben Chahbouni', 'Jamila', 'Chahbouni', '1970-11-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '139 Rue 353 France', 353, 'jchahbouni@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(64, 00139147, 'Micheline Ben Dassel', 'Micheline', 'Dassel', '1948-10-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '147 Rue 1204 France', 1204, 'mdas@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(65, 00142150, 'Caroline Ben Nava', 'Caroline', 'Nava', '1972-08-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '150 Rue 2519 France', 2519, 'carolinenava@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(66, 00143151, 'Anne Ben Van Goethem', 'Anne', 'Van Goethem', '1964-09-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '151 Rue 4266 France', 4266, 'anne.vangoethem@mae.etat.lu', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(67, 00149157, 'Chantal Ben Lamoline', 'Chantal', 'Lamoline', '1957-01-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '157 Rue 892 France', 892, 'chantal.lamoline@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(68, 00152160, 'Suzanne Ben Dervaux', 'Suzanne', 'Dervaux', '1949-01-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '160 Rue 2036 France', 2036, 'suzannedervaux@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(69, 00158166, 'Ayna Ben Vagapova', 'Ayna', 'Vagapova', '1970-10-29', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '166 Rue 392 France', 392, 'ayna@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(70, 00163171, 'Sandra Ben Carabin', 'Sandra', 'Carabin', '1974-03-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '171 Rue 787 France', 787, 'sandra.carabin@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(71, 00164172, 'Isabelle Ben Van Essche', 'Isabelle', 'Van Essche', '1967-11-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '172 Rue 330 France', 330, 'i.vanessche@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(72, 00168176, 'Jean-Louis Ben Vrancx', 'Jean-Louis', 'Vrancx', '1964-08-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '176 Rue 3400 France', 3400, 'jl.vrancx@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(73, 00174182, 'Christine Ben Maes', 'Christine', 'Maes', '1955-09-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '182 Rue 3227 France', 3227, 'christinemaes@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(74, 00176184, 'L Ben Topet', 'L', 'Topet', '1966-10-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '184 Rue 1536 France', 1536, 'leo.2@skynet.be', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(75, 00182190, 'Janine Ben Jadoulle', 'Janine', 'Jadoulle', '1944-01-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '190 Rue 1963 France', 1963, 'janinej999@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(76, 00191199, 'Damienne Ben Meurisse', 'Damienne', 'Meurisse', '1977-12-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '199 Rue 7089 France', 7089, 'damienne.meurisse@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(77, 00198206, 'Sabyne Ben Debaecker', 'Sabyne', 'Debaecker', '1968-12-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '206 Rue 1706 France', 1706, 's4byne@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(78, 00199207, 'Patrick Ben De Mulder', 'Patrick', 'De Mulder', '1970-01-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '207 Rue 400 France', 400, 'fc155597@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(79, 00202210, 'Eriks Baudoin Ben Laurence Lesuisse', 'Eriks Baudoin', 'Laurence Lesuisse', '1973-11-29', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '210 Rue 6165 France', 6165, 'laurencelessuise@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(80, 00205213, 'Sophie Ben Vermeren', 'Sophie', 'Vermeren', '1971-11-29', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '213 Rue 700 France', 700, 'sophievermeren@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(81, 00206214, 'Francois Ben Racoux', 'Francois', 'Racoux', '1975-06-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '214 Rue 2341 France', 2341, 'francoisrac@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(82, 00210218, 'Contr Ben Marquet Maryse', 'Contr', 'Marquet Maryse', '1954-02-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '218 Rue 1100 France', 1100, 'marybel@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(83, 00212220, 'Yves Ben Roukout', 'Yves', 'Roukout', '1952-09-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '220 Rue 2800 France', 2800, 'pasteurtigrou@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(84, 00215223, 'Liliane Ben Dechamps', 'Liliane', 'Dechamps', '1967-06-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '223 Rue 1800 France', 1800, 'carine022@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(85, 00218226, 'Johan Ben Nothomb', 'Johan', 'Nothomb', '1985-01-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '226 Rue 600 France', 600, 'felix.valerie@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(86, 00220228, 'Isabelle Ben Halin', 'Isabelle', 'Halin', '1973-07-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '228 Rue 2391 France', 2391, 'isahalin@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(87, 00221229, 'Emmanuelle Ben Roulet', 'Emmanuelle', 'Roulet', '1975-09-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '229 Rue 3621 France', 3621, 'eroulet@me.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(88, 00226234, 'Vinciane Ben Lenaerts', 'Vinciane', 'Lenaerts', '1981-11-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '234 Rue 500 France', 500, 'chacham25@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(89, 00234242, 'Anna Ben Amico', 'Anna', 'Amico', '1964-09-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '242 Rue 1988 France', 1988, 'anna.amico.franco@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(90, 00235243, 'Eliane Ben Rolen', 'Eliane', 'Rolen', '1956-11-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '243 Rue 3007 France', 3007, 'eliane.rolen@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(91, 00236244, 'Isabelle Ben Lienard', 'Isabelle', 'Lienard', '1964-07-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '244 Rue 2061 France', 2061, 'is.ange@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(92, 00241249, 'Sylvie Ben Demesse', 'Sylvie', 'Demesse', '1973-05-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '249 Rue 848 France', 848, 'sylvie.demesse@happymany.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(93, 00242250, 'Guy Ben Sonveau', 'Guy', 'Sonveau', '1956-03-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '250 Rue 209 France', 209, 'sonveau.guy@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(94, 00244252, 'Anne-Marie Ben Laurent', 'Anne-Marie', 'Laurent', '2010-09-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '252 Rue 1446 France', 1446, 'bastin.laurent@brutele.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(95, 00247255, 'Herman Ben Christine', 'Herman', 'Christine', '1977-03-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '255 Rue 1200 France', 1200, 'chrisherman@voo.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(96, 00250258, 'Sonia Ben Knappenbergh', 'Sonia', 'Knappenbergh', '1979-01-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '258 Rue 2069 France', 2069, 'soon-ly@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(97, 00258266, 'Marianne Ben Colson', 'Marianne', 'Colson', '1959-04-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '266 Rue 1667 France', 1667, 'marianne2804@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(98, 00263271, 'Dani Ben Dhainaut', 'Dani', 'Dhainaut', '1962-04-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '271 Rue 1266 France', 1266, 'd.dhainaut@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(99, 00267275, 'Catherine Ben Andr', 'Catherine', 'Andr', '1975-04-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '275 Rue 693 France', 693, 'andrcath@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(100, 00268276, 'Martine Ben Walravens Desmet', 'Martine', 'Walravens Desmet', '1952-01-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '276 Rue 2879 France', 2879, 'mm.walravens@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(101, 00269277, 'Liliane Ben Schumacker', 'Liliane', 'Schumacker', '1955-07-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '277 Rue 1756 France', 1756, 'lilianeschumacker@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(102, 00271279, 'Viviane Ben Moucheron', 'Viviane', 'Moucheron', '1956-03-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '279 Rue 1396 France', 1396, 'broceliandev@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(103, 00273281, 'Elisabeth Ben De Maeyer - Dumont', 'Elisabeth', 'De Maeyer - Dumont', '1959-11-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '281 Rue 1900 France', 1900, 'demaeyer.claire@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(104, 00278286, 'Johan Ben Cuche', 'Johan', 'Cuche', '1983-08-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '286 Rue 715 France', 715, 'coyote_23@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(105, 00279287, 'Nelly Ben Demoortel', 'Nelly', 'Demoortel', '1941-01-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '287 Rue 700 France', 700, 'n_demoortel@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(106, 00281289, 'Vanessa Ben Soumoy', 'Vanessa', 'Soumoy', '1979-06-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '289 Rue 600 France', 600, 'vanessa.soumoy@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(107, 00283291, 'Karine Ben Barbot', 'Karine', 'Barbot', '1982-02-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '291 Rue 1611 France', 1611, 'kbarbot56@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(108, 00284292, 'Gilette Ben Meersschaut', 'Gilette', 'Meersschaut', '1956-11-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '292 Rue 160 France', 160, 'gilettestar@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(109, 00287295, 'Kathy Ben Roncada', 'Kathy', 'Roncada', '1958-06-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '295 Rue 1100 France', 1100, 'kr478@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(110, 00289297, 'Catherine Ben Vincent', 'Catherine', 'Vincent', '1968-04-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '297 Rue 1168 France', 1168, 'vt6140472@base.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(111, 00291299, 'Laurence Ben Buyere', 'Laurence', 'Buyere', '1966-06-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '299 Rue 800 France', 800, 'laurence.bruyere@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(112, 00292300, 'Graziella Ben Gillot', 'Graziella', 'Gillot', '1959-07-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '300 Rue 775 France', 775, 'graziella.gillot@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(113, 00293301, 'Anne-Marie Ben Dondelinger', 'Anne-Marie', 'Dondelinger', '1953-06-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '301 Rue 6384 France', 6384, 'am.dondelinger@base.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(114, 00295303, 'Maryse Ben Havaux', 'Maryse', 'Havaux', '1953-02-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '303 Rue 2491 France', 2491, 'mhavaux@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(115, 00302310, 'Fabienne Ben Dohogne', 'Fabienne', 'Dohogne', '1962-06-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '310 Rue 1636 France', 1636, 'fadohogne@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(116, 00303311, 'Anne-France Ben Keuller', 'Anne-France', 'Keuller', '1964-10-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '311 Rue 766 France', 766, 'af.keuller@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(117, 00305313, 'Vanessa Ben Rentiers', 'Vanessa', 'Rentiers', '1977-12-05', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '313 Rue 700 France', 700, 'vanessa.rentiers@brusselsairlines.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(118, 00309317, 'Caroline Ben Didier', 'Caroline', 'Didier', '1976-01-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '317 Rue 152 France', 152, 'carolinedidier71@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(119, 00310318, 'Michel Ben Dewet', 'Michel', 'Dewet', '1954-06-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '318 Rue 8572 France', 8572, 'micheldewet@msn.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(120, 00313321, 'Vincent Ben Lefebvre', 'Vincent', 'Lefebvre', '1967-10-19', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '321 Rue 2102 France', 2102, 'lefebvrevinc@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(121, 00316324, 'Christelle Ben Pradal', 'Christelle', 'Pradal', '1977-06-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '324 Rue 1879 France', 1879, 'christelle.pradal@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(122, 00323331, 'Genevieve Ben Ralet', 'Genevieve', 'Ralet', '1948-07-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '331 Rue 700 France', 700, 'genevieve.ralet@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(123, 00324332, 'Mr Caty Ben Dherte-Istasse', 'Mr Caty', 'Dherte-Istasse', '1981-02-13', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '332 Rue 1000 France', 1000, 'catytim@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(124, 00334342, 'Céine Ben Lamboley', 'Céine', 'Lamboley', '1984-10-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '342 Rue 2554 France', 2554, 'celinel84@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(125, 00336344, 'Margot Ben Dubuisson', 'Margot', 'Dubuisson', '1990-02-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '344 Rue 585 France', 585, 'margot.dubuisson@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(126, 00344352, 'Isabelle Ben Idiart', 'Isabelle', 'Idiart', '1962-12-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '352 Rue 1382 France', 1382, 'isidiart@laposte.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(127, 00346354, 'Fatima Ben Mesnaoui', 'Fatima', 'Mesnaoui', '1958-09-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '354 Rue 5238 France', 5238, 'rasail_fm@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(128, 00350358, 'Claudine Ben Chachan', 'Claudine', 'Chachan', '1982-11-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '358 Rue 1697 France', 1697, 'forza10_@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(129, 00354362, 'Renate Ben Maury', 'Renate', 'Maury', '1950-04-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '362 Rue 807 France', 807, 'renata54@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(130, 00355363, 'Bruno Ben Genin', 'Bruno', 'Genin', '1952-09-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '363 Rue 1000 France', 1000, 'bruno.genin@lgenin.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(131, 00361369, 'Véronique Ben Senepart', 'Véronique', 'Senepart', '1966-02-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '369 Rue 1159 France', 1159, 'chargona@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(132, 00363371, 'Marcel Ben Lamberty', 'Marcel', 'Lamberty', '1986-04-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '371 Rue 669 France', 669, 'closeceline@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(133, 00366374, 'Ramos Ben Isabelle', 'Ramos', 'Isabelle', '1964-10-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '374 Rue 3227 France', 3227, 'rmspa@club-internet.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(134, 00367375, 'Marielle Ben Romann', 'Marielle', 'Romann', '1959-03-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '375 Rue 12474 France', 12474, 'piece01@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(135, 00371379, 'Monique Ben Beaumont', 'Monique', 'Beaumont', '1961-10-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '379 Rue 429 France', 429, 'mick.beau@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(136, 00374382, 'Laurence Ben Bauduin', 'Laurence', 'Bauduin', '1975-02-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '382 Rue 1404 France', 1404, 'laure_bauduin@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(137, 00376384, 'Benedicte Ben Francois', 'Benedicte', 'Francois', '1957-03-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '384 Rue 1805 France', 1805, 'christian.francois@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(138, 00382390, 'Sandra Ben Lebon', 'Sandra', 'Lebon', '1974-07-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '390 Rue 758 France', 758, 'sandra.lebon@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(139, 00383391, 'Mireille Ben Jados', 'Mireille', 'Jados', '1980-02-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '391 Rue 8305 France', 8305, 'ninajados@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(140, 00384392, 'Brigitte Ben Nys', 'Brigitte', 'Nys', '1959-12-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '392 Rue 1396 France', 1396, 'nysrubis@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(141, 00394402, 'Nadia Ben Pallavisino', 'Nadia', 'Pallavisino', '1955-12-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '402 Rue 7619 France', 7619, 'nadia.evrard@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(142, 00395403, 'Theo Ben Hendrikx', 'Theo', 'Hendrikx', '1953-05-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '403 Rue 5331 France', 5331, 'theohendrikx@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(143, 00396404, 'Liliane Ben Berteas', 'Liliane', 'Berteas', '1947-12-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '404 Rue 800 France', 800, '21.lavallee@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(144, 00399407, 'Danielle Ben Roton', 'Danielle', 'Roton', '1951-01-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '407 Rue 2135 France', 2135, 'danielleboullet@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(145, 00402410, 'Marie Ben Kariger', 'Marie', 'Kariger', '1939-08-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '410 Rue 2972 France', 2972, 'juprelle@jkservice.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(146, 00404412, 'Pascale Ben De Jonckheere', 'Pascale', 'De Jonckheere', '1975-06-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '412 Rue 986 France', 986, 'pascale.de.jonckheere@adecco.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(147, 00405413, 'Gis Ben Ducoin', 'Gis', 'Ducoin', '1956-01-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '413 Rue 497 France', 497, 'gisele.ducoin@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(148, 00406414, 'Marcelle Ben Baud', 'Marcelle', 'Baud', '1949-10-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '414 Rue 6037 France', 6037, 'maurice.baud123@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(149, 00409417, 'Luc Ben Sage', 'Luc', 'Sage', '1954-03-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '417 Rue 1816 France', 1816, 'lucdoc3030@aol.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(150, 00410418, 'Nadia Ben Bouroua', 'Nadia', 'Bouroua', '1968-08-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '418 Rue 1178 France', 1178, 'nadiabouroua@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(151, 00414422, 'Laetitia Ben Prasit', 'Laetitia', 'Prasit', '1984-04-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '422 Rue 960 France', 960, 'pticha@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(152, 00418426, 'Jacqueline Ben Dewael', 'Jacqueline', 'Dewael', '1947-02-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '426 Rue 1462 France', 1462, 'lamote-dewael@telenet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(153, 00419427, 'Audrey Ben Hendrkix', 'Audrey', 'Hendrkix', '1979-10-05', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '427 Rue 1535 France', 1535, 'audreyhendrikx@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(154, 00423431, 'Gerard Ben Faramus', 'Gerard', 'Faramus', '1950-09-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '431 Rue 1785 France', 1785, 'gerard.faramus0144@orange.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(155, 00424432, 'Colette Ben Kerstenne', 'Colette', 'Kerstenne', '1948-09-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '432 Rue 465 France', 465, 'colette.kerstenne@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(156, 00428436, 'Philippe Ben Grebent', 'Philippe', 'Grebent', '1957-03-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '436 Rue 2537 France', 2537, 'durandomal.phil@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(157, 00429437, 'Corinne Ben Kubacki', 'Corinne', 'Kubacki', '1960-09-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '437 Rue 510 France', 510, 'corinne.huguet63@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(158, 00431439, 'Luce Ben Beugnies', 'Luce', 'Beugnies', '1979-06-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '439 Rue 900 France', 900, 'lulu.beu@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(159, 00432440, 'Sabrina Ben Salomoni', 'Sabrina', 'Salomoni', '1976-07-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '440 Rue 1050 France', 1050, 'salomoni.sabrina@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(160, 00436444, 'Richard Ben Arena', 'Richard', 'Arena', '1952-10-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '444 Rue 500 France', 500, 'ri1515@aol.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(161, 00441449, 'Olivier Ben Wilmart', 'Olivier', 'Wilmart', '1982-12-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '449 Rue 951 France', 951, 'owilmart@tvcablenet.be', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(162, 00450458, 'Sylvie Ben Fontan', 'Sylvie', 'Fontan', '1957-12-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '458 Rue 800 France', 800, 'sylviefontanmichel@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(163, 00451459, 'Catherine Ben Schwaab', 'Catherine', 'Schwaab', '1957-08-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '459 Rue 828 France', 828, 'cathschwaab@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(164, 00452460, 'Pascale Ben Klein', 'Pascale', 'Klein', '1968-05-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '460 Rue 1606 France', 1606, 'pascale.kloos@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(165, 00453461, 'Michel Ben Magain', 'Michel', 'Magain', '1966-11-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '461 Rue 2514 France', 2514, 'michelmag@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(166, 00457465, 'Chantal Ben Leplat', 'Chantal', 'Leplat', '1959-05-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '465 Rue 1533 France', 1533, 'c.leplat@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(167, 00463471, 'Véronique Ben Desmet', 'Véronique', 'Desmet', '1970-08-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '471 Rue 1200 France', 1200, 'veroniquede@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(168, 00465473, 'Isabelle Ben Coroyer', 'Isabelle', 'Coroyer', '1962-01-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '473 Rue 879 France', 879, 'isabelle.coroyer@laposte.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(169, 00466474, 'Pierre Ben Duerinckx', 'Pierre', 'Duerinckx', '1938-02-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '474 Rue 400 France', 400, 'petrus@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(170, 00467475, 'François Ben Fournier', 'François', 'Fournier', '1963-09-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '475 Rue 212 France', 212, 'famille-fournier175@orange.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(171, 00471479, 'Emmanuel Ben Carin', 'Emmanuel', 'Carin', '1969-09-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '479 Rue 574 France', 574, 'carinemmanuel@aol.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(172, 00478486, 'Sophie Ben Diels', 'Sophie', 'Diels', '1967-09-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '486 Rue 3129 France', 3129, 's.diels@laposte.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(173, 00479487, 'Roger Ben Gaudin', 'Roger', 'Gaudin', '1963-11-19', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '487 Rue 4264 France', 4264, 'rogergaudin@sfr.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(174, 00483491, 'Philippe Ben Cronn', 'Philippe', 'Cronn', '1973-04-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '491 Rue 798 France', 798, 'philippe.cronn@internet.lu', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(175, 00490498, 'Huguette Ben Drygalski', 'Huguette', 'Drygalski', '1949-05-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '498 Rue 1169 France', 1169, 'huguette_2244@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(176, 00491499, 'Lucienne Ben Loiseau', 'Lucienne', 'Loiseau', '1960-08-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '499 Rue 797 France', 797, 'vinceloiseau@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(177, 00493501, 'Franck Ben Ettouati', 'Franck', 'Ettouati', '1964-05-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '501 Rue 8277 France', 8277, 'fettouati@free.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(178, 00497505, 'Pulse Pmc2 Ben Eveline Cellard', 'Pulse Pmc2', 'Eveline Cellard', '1960-06-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '505 Rue 1066 France', 1066, 'eveline.cellard@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(179, 00501509, 'Caroline Ben Deitte', 'Caroline', 'Deitte', '1953-01-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '509 Rue 1178 France', 1178, 'jodeitte@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(180, 00505513, 'Didier Ben Grandomjean', 'Didier', 'Grandomjean', '1957-03-29', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '513 Rue 2639 France', 2639, 'delsauxb@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(181, 00507515, 'Malorie Ben Coupe', 'Malorie', 'Coupe', '1976-09-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '515 Rue 922 France', 922, 'malorie.coupe@dbmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(182, 00514522, 'Claudine Ben Dedoncker', 'Claudine', 'Dedoncker', '1959-01-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '522 Rue 1514 France', 1514, 'cdes5080@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(183, 00515523, 'Annie Ben Rousselle', 'Annie', 'Rousselle', '1950-10-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '523 Rue 2240 France', 2240, 'annie.rousselle@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(184, 00516524, 'Fr Ben Gaillard-Billey', 'Fr', 'Gaillard-Billey', '1965-05-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '524 Rue 4975 France', 4975, 'f-billey@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(185, 00519527, 'Christiane Ben Pierreux', 'Christiane', 'Pierreux', '1964-12-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '527 Rue 1051 France', 1051, 'christiane.pierreux@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(186, 00520528, 'Marie-Christine Ben Tonet', 'Marie-Christine', 'Tonet', '1948-06-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '528 Rue 5601 France', 5601, 'mctonet@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(187, 00525533, 'Denis Ben Neuville', 'Denis', 'Neuville', '1949-08-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '533 Rue 3563 France', 3563, 'denis.neuville@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(188, 00527535, 'Boogaerts Sprl Ben Eliane Cortens', 'Boogaerts Sprl', 'Eliane Cortens', '1958-07-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '535 Rue 600 France', 600, 'eliane.cortens@boogaerts.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(189, 00529537, 'Catherine Ben Viscardy', 'Catherine', 'Viscardy', '1969-05-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '537 Rue 1100 France', 1100, 'joelle.viscardy@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(190, 00531539, 'Fanny Ben Huynen', 'Fanny', 'Huynen', '1977-07-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '539 Rue 2910 France', 2910, 'f-hu@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(191, 00532540, 'Anne Ben Dexpert', 'Anne', 'Dexpert', '1966-07-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '540 Rue 1629 France', 1629, 'annedexpert@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(192, 00535543, 'Ornella Ben De Grandome', 'Ornella', 'De Grandome', '1987-07-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '543 Rue 200 France', 200, 'miss_nesta133@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(193, 00536544, 'Chantal Ben Oberic', 'Chantal', 'Oberic', '1948-10-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '544 Rue 800 France', 800, 'coberic@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(194, 00538546, 'Emmanuel Ben Larrieu', 'Emmanuel', 'Larrieu', '1970-12-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '546 Rue 1629 France', 1629, 'ddlarrieu@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(195, 00545553, 'Jean-Marie Ben Schoenaers', 'Jean-Marie', 'Schoenaers', '1947-09-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '553 Rue 3634 France', 3634, 'jm.schoenaers@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(196, 00546554, 'Christel Ben Vogne', 'Christel', 'Vogne', '1972-06-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '554 Rue 1551 France', 1551, 'christelle.vogne@chuv.ch', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(197, 00553561, 'Monique Ben Stofkooper', 'Monique', 'Stofkooper', '1966-10-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '561 Rue 3200 France', 3200, 'moony_lune@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(198, 00555563, 'Annie Ben Diehl', 'Annie', 'Diehl', '1950-12-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '563 Rue 1115 France', 1115, 'anniediehl@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(199, 00559567, 'C Ben Dejemeppe', 'C', 'Dejemeppe', '1976-06-05', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '567 Rue 1686 France', 1686, 'celinedejemeppe@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(200, 00565573, 'Ester Ben Bram', 'Ester', 'Bram', '1980-12-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '573 Rue 900 France', 900, 'ester_brame@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(201, 00573581, 'Jean-Luc Ben Pluymers', 'Jean-Luc', 'Pluymers', '1958-04-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '581 Rue 380 France', 380, 'jlpluymers@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(202, 00578586, 'Georgette Ben Mainil', 'Georgette', 'Mainil', '1958-10-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '586 Rue 200 France', 200, 'emelinedeclercq05@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(203, 00580588, 'Sylvie Ben Brevalle', 'Sylvie', 'Brevalle', '1959-12-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '588 Rue 1200 France', 1200, 'sylviebrevalle@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(204, 00582590, 'Caroline Ben Piras', 'Caroline', 'Piras', '1983-02-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '590 Rue 1190 France', 1190, 'caroline.piras@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(205, 00584592, 'Annie Ben Pettelaire', 'Annie', 'Pettelaire', '1955-07-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '592 Rue 2623 France', 2623, 'ets.schoni@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(206, 00597605, 'Catherine Ben Tho', 'Catherine', 'Tho', '1972-04-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '605 Rue 850 France', 850, 'kbao@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(207, 00609617, 'Virginie Ben Briot', 'Virginie', 'Briot', '1964-12-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '617 Rue 2575 France', 2575, 'virginiebriot@lfbeauty-fr.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(208, 00610618, 'Fran Ben Bnp Paribas Fortis', 'Fran', 'Bnp Paribas Fortis', '1962-02-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '618 Rue 1977 France', 1977, 'francoise.senterre@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(209, 00616624, 'Marie-Jos Ben Courvoisier', 'Marie-Jos', 'Courvoisier', '1960-06-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '624 Rue 1838 France', 1838, 'mjocourvoisier@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(210, 00618626, 'Jérôme Ben Piguel', 'Jérôme', 'Piguel', '1976-08-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '626 Rue 1208 France', 1208, 'piguel.jerome@orange.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(211, 00619627, 'Simone Ben Hoenner Streich', 'Simone', 'Hoenner Streich', '1947-11-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '627 Rue 849 France', 849, 'simonebersi@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(212, 00620628, 'Maité Ben Angely', 'Maité', 'Angely', '1948-09-29', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '628 Rue 2581 France', 2581, 'maite.angely@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(213, 00624632, 'Evelyne Ben Gailhard', 'Evelyne', 'Gailhard', '1955-05-05', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '632 Rue 424 France', 424, 'evelyne.gailhard@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(214, 00625633, 'Sandra Ben Delattre', 'Sandra', 'Delattre', '1972-08-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '633 Rue 1806 France', 1806, 'delsandra@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(215, 00632640, 'Salima Ben Idrissi', 'Salima', 'Idrissi', '1979-10-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '640 Rue 3253 France', 3253, 'idrissisalima@live.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(216, 00633641, 'Francoise Ben De Gevigney', 'Francoise', 'De Gevigney', '1949-12-19', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '641 Rue 1492 France', 1492, 'fdege@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(217, 00639647, 'Drif Ben Frederique', 'Drif', 'Frederique', '1965-11-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '647 Rue 874 France', 874, 'lolinouche@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(218, 00640648, 'Floriane Ben Mouchel', 'Floriane', 'Mouchel', '1963-01-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '648 Rue 1504 France', 1504, 'florimouche@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(219, 00642650, 'Sylvie Ben Davin Tridot', 'Sylvie', 'Davin Tridot', '1963-12-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '650 Rue 252 France', 252, 'davin.tridot.sylvie@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(220, 00643651, 'Laurence Ben Besse', 'Laurence', 'Besse', '1959-06-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '651 Rue 1100 France', 1100, 'l.besse59@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(221, 00645653, 'Simonne Ben Lhomme', 'Simonne', 'Lhomme', '1955-10-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '653 Rue 1654 France', 1654, 'simone.l_homme@teledisnet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(222, 00646654, 'Marie-Edm Ben Stokis', 'Marie-Edm', 'Stokis', '1956-05-19', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '654 Rue 2600 France', 2600, 'mestokis@live.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(223, 00655663, 'Eliane Ben Avias', 'Eliane', 'Avias', '1955-11-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '663 Rue 931 France', 931, 'eliane.avias@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(224, 00658666, 'Michel Ben Gosse', 'Michel', 'Gosse', '1947-10-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '666 Rue 984 France', 984, 'migjapon@free.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(225, 00661669, 'Corinne Ben Lesage', 'Corinne', 'Lesage', '1974-06-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '669 Rue 1778 France', 1778, 'corinne_lesage@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(226, 00668676, 'Elodie Ben Thuault', 'Elodie', 'Thuault', '1970-09-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '676 Rue 3088 France', 3088, 'emmanuel.elodie@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(227, 00669677, 'David Ben Cohen', 'David', 'Cohen', '1962-06-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '677 Rue 3600 France', 3600, 'd.cohen@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(228, 00674682, 'Jocelyne Ben BROVELLI', 'Jocelyne', 'BROVELLI', '1958-10-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '682 Rue 1380 France', 1380, 'jocelyne-brovelli@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(229, 00678686, 'Buyl Ben Marie Louise', 'Buyl', 'Marie Louise', '1951-11-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '686 Rue 3430 France', 3430, 'marie-louise.buyl@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(230, 00681689, 'Odile Ben Cojean', 'Odile', 'Cojean', '1947-12-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '689 Rue 860 France', 860, 'c-cojean@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(231, 00682690, 'Aur Ben Arnold', 'Aur', 'Arnold', '1975-07-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '690 Rue 2302 France', 2302, 'aurelia.arnold@sfr.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(232, 00693701, 'Caroline Ben Speileux', 'Caroline', 'Speileux', '1971-10-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '701 Rue 768 France', 768, 'caroline.speileux@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(233, 00694702, 'Chlo Ben Malen', 'Chlo', 'Malen', '1979-06-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '702 Rue 1000 France', 1000, 'chloe.malen@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(234, 00697705, 'Adrien Ben Collet', 'Adrien', 'Collet', '1985-03-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '705 Rue 200 France', 200, 'adrien.collet@hotmail.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(235, 00699707, 'Elisabeth Ben Blondeau', 'Elisabeth', 'Blondeau', '1953-10-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '707 Rue 800 France', 800, 'elisabeth.blondeau@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(236, 00700708, 'Patricia Ben Vaillon', 'Patricia', 'Vaillon', '1959-02-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '708 Rue 1321 France', 1321, 'p.viallon@guillaumond.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(237, 00703711, 'Val Ben De Decker', 'Val', 'De Decker', '1971-12-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '711 Rue 600 France', 600, 'valeriededecker@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(238, 00707715, 'Jany Ben Ferraris', 'Jany', 'Ferraris', '1956-03-05', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '715 Rue 748 France', 748, 'jany.ferraris@laposte.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(239, 00708716, 'Laurent Ben Hendrickx', 'Laurent', 'Hendrickx', '1972-06-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '716 Rue 1099 France', 1099, 'labc95911@hotmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(240, 00713721, 'Elisabeth Ben Giuliano', 'Elisabeth', 'Giuliano', '1966-01-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '721 Rue 800 France', 800, 'eli.giu@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(241, 00716724, 'Emilie Ben Mailleux', 'Emilie', 'Mailleux', '1981-11-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '724 Rue 3800 France', 3800, 'emiliemailleux@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(242, 00717725, 'Betina Ben Blasco', 'Betina', 'Blasco', '1971-07-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '725 Rue 800 France', 800, 'betina.ellingsen@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(243, 00720728, 'Michel Ben Nguyen', 'Michel', 'Nguyen', '1970-08-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '728 Rue 2065 France', 2065, 'mng12@free.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(244, 00721729, 'Gaelle Ben Bebronne', 'Gaelle', 'Bebronne', '1983-02-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '729 Rue 426 France', 426, 'bebronne_gaelle@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(245, 00723731, 'Jeannine Ben Reiter', 'Jeannine', 'Reiter', '1943-12-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '731 Rue 2812 France', 2812, 'jeanine@docteur-ramioul.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(246, 00725733, 'Jeroen Ben Weerstra', 'Jeroen', 'Weerstra', '1973-10-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '733 Rue 1412 France', 1412, 'jeroenweerstra@hotmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(247, 00727735, 'Sylvie Ben Mathys', 'Sylvie', 'Mathys', '1965-10-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '735 Rue 663 France', 663, 'sylvie.mathys@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(248, 00728736, 'Véronique Ben Gilson', 'Véronique', 'Gilson', '1961-09-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '736 Rue 3162 France', 3162, 'verogilson@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(249, 00731739, 'Catherine Ben Haest', 'Catherine', 'Haest', '1972-12-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '739 Rue 7531 France', 7531, 'catherine.haest@mensura.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(250, 00733741, 'Christine Ben Daniaux', 'Christine', 'Daniaux', '1958-10-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '741 Rue 1439 France', 1439, 'christine2758@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(251, 00735743, 'Fran Ben Hanze', 'Fran', 'Hanze', '1956-06-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '743 Rue 1969 France', 1969, 'frh.deco@yahoo.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(252, 00746754, 'Nadira Ben Benmousa', 'Nadira', 'Benmousa', '1983-11-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '754 Rue 1560 France', 1560, 'n.adira@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(253, 00750758, 'Anne Ben Gerard', 'Anne', 'Gerard', '1982-10-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '758 Rue 2944 France', 2944, 'a.a.gerard@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(254, 00751759, 'Laurence Ben Thill', 'Laurence', 'Thill', '1978-01-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '759 Rue 1677 France', 1677, 'laurence.thill@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(255, 00753761, 'Astrid Ben Chevance', 'Astrid', 'Chevance', '1986-06-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '761 Rue 2676 France', 2676, 'astrid.chevance@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(256, 00756764, 'Anne Ben Courjaret', 'Anne', 'Courjaret', '1939-11-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '764 Rue 5881 France', 5881, 'ledesert.france@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(257, 00759767, 'Monique Ben Martin', 'Monique', 'Martin', '1948-01-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '767 Rue 726 France', 726, 'martinm51@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(258, 00760768, 'Letot Ben Maryline', 'Letot', 'Maryline', '1963-03-13', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '768 Rue 570 France', 570, 'les4saisons@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(259, 00766774, 'V Ben Forraz', 'V', 'Forraz', '1955-12-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '774 Rue 1036 France', 1036, 'vforraz@msn.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(260, 00774782, 'Philippe Ben Fay', 'Philippe', 'Fay', '1965-08-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '782 Rue 1225 France', 1225, 'fb569606@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(261, 00781789, 'Christine Ben Gissinger', 'Christine', 'Gissinger', '1969-04-13', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '789 Rue 2025 France', 2025, 'patrice13.gissinger@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(262, 00786794, 'B Ben Houet', 'B', 'Houet', '1969-01-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '794 Rue 772 France', 772, 'benedicte.houet@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(263, 00789797, 'Muriel Ben Capet', 'Muriel', 'Capet', '1942-05-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '797 Rue 3135 France', 3135, 'licoya@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(264, 00790798, 'Caroline Ben De Vos', 'Caroline ', 'De Vos', '1967-03-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '798 Rue 1677 France', 1677, 'caroline.devos@cfwb.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(265, 00803811, 'Isabelle Ben Besson', 'Isabelle', 'Besson', '1962-06-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '811 Rue 396 France', 396, 'isabes@laposte.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(266, 00807815, 'Veronique Ben Leclerc', 'Veronique', 'Leclerc', '1962-10-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '815 Rue 195 France', 195, 'thierry.leclerc57@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(267, 00808816, 'Delvaux & Co Ben Pedro Galveias', 'Delvaux & Co', 'Pedro Galveias', '1980-07-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '816 Rue 800 France', 800, 'pedro.galveias@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(268, 00819827, 'Celine Ben Brouzes', 'Celine', 'Brouzes', '1978-11-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '827 Rue 873 France', 873, 'david.minerva@sfr.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(269, 00820828, 'Francine Ben Massart', 'Francine', 'Massart', '1952-02-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '828 Rue 1066 France', 1066, 'francine.massart@belgacom.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(270, 00821829, 'Pascale Ben Claes', 'Pascale', 'Claes', '2968-12-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '829 Rue 2268 France', 2268, 'claes_pascale@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(271, 00822830, 'Fanta Ben Guirassy', 'Fanta', 'Guirassy', '1978-10-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '830 Rue 600 France', 600, 'nafli@msn.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(272, 00837845, 'Beatrice Ben Guiot', 'Beatrice', 'Guiot', '1977-01-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '845 Rue 3367 France', 3367, 'beatriceguiot@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(273, 00842850, 'H Ben Supiot-Bertrandom', 'H', 'Supiot-Bertrandom', '1971-07-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '850 Rue 2538 France', 2538, 'helenetfred@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(274, 00846854, 'Christine Ben Loux', 'Christine', 'Loux', '1961-03-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '854 Rue 1200 France', 1200, 'lchryss@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(275, 00848856, 'Severine Ben Chair', 'Severine', 'Chair', '1981-08-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '856 Rue 551 France', 551, 'michaeldelperdange@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(276, 00849857, 'Patricia Ben Salvi', 'Patricia', 'Salvi', '1964-03-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '857 Rue 2086 France', 2086, 'jm_pat_bs@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(277, 00857865, 'Regine Ben Wilmet', 'Regine', 'Wilmet', '1967-10-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '865 Rue 10545 France', 10545, 'adam.wilmet@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(278, 00858866, 'Béatrice Ben Barbié', 'Béatrice', 'Barbié', '1952-12-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '866 Rue 3981 France', 3981, 'b.jeanpierre@aliceadsl.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(279, 00861869, 'Fran Ben Ribant', 'Fran', 'Ribant', '1952-08-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '869 Rue 7021 France', 7021, 'francoise@ribant.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(280, 00938946, 'Marie-Pierre Ben Esteban', 'Marie-Pierre', 'Esteban', '1971-08-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '946 Rue 200 France', 200, 'mapi.esteban@worldonline.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(281, 00942950, 'Marie-Claire Ben Le Coz', 'Marie-Claire', 'Le Coz', '1947-05-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '950 Rue 365 France', 365, 'lecoz.marie-claire@neuf.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(282, 00945953, 'Catherine Ben Ligot', 'Catherine', 'Ligot', '1961-03-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '953 Rue 1000 France', 1000, 'catherine.ligot@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(283, 00955963, 'Tchichatcheff Ben Amandine', 'Tchichatcheff', 'Amandine', '1976-04-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '963 Rue 1284 France', 1284, 'jfd@cegetel.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(284, 00956964, 'Christian Ben Pevenage', 'Christian', 'Pevenage', '1954-08-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '964 Rue 1905 France', 1905, 'pevenage.christian@skynet.be', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(285, 00957965, 'Arlette Ben Armand', 'Arlette', 'Armand', '1953-07-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '965 Rue 1896 France', 1896, 'armlett@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(286, 00959967, 'Malgorzata Ben Hervouet', 'Malgorzata', 'Hervouet', '1972-08-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '967 Rue 1800 France', 1800, 'malgorzata.hervouet@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(287, 00964972, 'Veronique Ben Dhyne', 'Veronique', 'Dhyne', '1962-01-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '972 Rue 600 France', 600, 'veroniquedhyne@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(288, 00967975, 'Ren Ben Deydier', 'Ren', 'Deydier', '1949-09-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '975 Rue 2580 France', 2580, 'michel.deydier@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(289, 00969977, 'Adeline Ben Muylaert', 'Adeline', 'Muylaert', '1983-04-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '977 Rue 4886 France', 4886, 'adelinemuylaert@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(290, 00972980, 'V Ben Persico', 'V', 'Persico', '1964-02-13', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '980 Rue 1028 France', 1028, 'lilirose37@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(291, 00975983, 'Micheline Ben Razny', 'Micheline', 'Razny', '1941-10-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '983 Rue 4800 France', 4800, 'micheline@razny.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(292, 00977985, 'Jean-Jacques Ben Bertrandom', 'Jean-Jacques', 'Bertrandom', '1940-11-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '985 Rue 1566 France', 1566, 'jean-jacques.bertrandom@gadz.org', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(293, 00980988, 'Marie Ben Krief', 'Marie', 'Krief', '1955-02-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '988 Rue 3923 France', 3923, 'krieff.m@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(294, 00990998, 'Marie-Line Ben Dupé', 'Marie-Line', 'Dupé', '1966-05-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '998 Rue 591 France', 591, 'marielined44@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(295, 00991999, 'Mireille Ben Brignon', 'Mireille', 'Brignon', '1942-05-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '999 Rue 630 France', 630, 'd.brignon@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(296, 09991007, 'Dominique Ben Fourr', 'Dominique', 'Fourr', '1949-02-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1007 Rue 1100 France', 1100, 'dominique-fourre@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(297, 10011009, 'Jacques Ben Pyot', 'Jacques', 'Pyot', '1945-10-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1009 Rue 3200 France', 3200, 'jacques@pyot.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(298, 10031011, 'Sylvie Ben Ardouin', 'Sylvie', 'Ardouin', '1964-05-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1011 Rue 3433 France', 3433, 'choupinette333@live.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(299, 10041012, 'Carlo Ben Pletschette', 'Carlo', 'Pletschette', '1978-04-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1012 Rue 11311 France', 11311, 'carlople@pt.lu', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(300, 10051013, 'Jacqueline Ben Levy', 'Jacqueline', 'Levy', '1948-09-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1013 Rue 2933 France', 2933, 'jacqueline.levy@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(301, 74747478, 'Ali ben jandoubi ben amour', 'Ben jandoubi', 'Ali', '1985-12-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '2 Rue 14475 Ariana', 1120, '', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(302, 09553844, 'Koussay Ben Said Ben Salah Azzabi', 'Azzabi', 'Koussay ', '1992-06-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '13 grandom rue juvisy', 94700, 'Azzabi.Koussay @gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(303, 09158874, 'Sami Azzbi ben ', 'Azzbi', 'Sami', '1987-08-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1547 rue Jema3', 1110, 'sami-azzbi@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(304, 06638847, 'Baiya Ben Maher Ben Mustapha Ben Tili', 'Ben Tili', 'Baiya', '2022-09-19', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '14 rue sainte faille', 1110, 'baiya.ben.tili@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); +INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES +(305, 09165516, 'Rami ben rida ben mod bouziri', 'Bouziri', 'Rami', '2001-10-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '14 rue tarik iben ziya mornguia', 1110, '', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'); + + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1', 'NAG P Stick (30 X 2g)', 'Sport', 'Amazfit', 12, 22.642, 18, 26.717, 12, 25.358, 18, 29.434, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-05-29'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2', 'Tangle Teezer Original - Brosse démêlante Rose', 'MINI', 'Amazfit', 12, 12.355, 18, 14.579, 12, 13.838, 18, 16.062, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-03-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3', 'Trousse Pieds', 'FAVORIS', 'Amazfit', 12, 42.959, 18, 50.691, 12, 48.114, 18, 55.846, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-03'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('4', 'Trousse Solaire SPF50', 'Trousses Solaires', 'Amazfit', 12, 14.793, 18, 17.456, 12, 16.569, 18, 19.231, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-11'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('6', 'Ventouse Cellulite Accessoire', 'Minceur Summer', 'Amazfit', 12, 3.298, 18, 3.891, 12, 3.693, 18, 4.287, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-19'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('8', 'Denolin thé courtois infusion 20 x 2g', 'Spécialités', 'Amazfit', 12, 4.066, 18, 4.798, 12, 4.554, 18, 5.286, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-18'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('9', 'Bilefal thee n 5 100g', 'Spécialité, sérum, va', 'Amazfit', 12, 3.84, 18, 4.531, 12, 4.3, 18, 4.992, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('10', 'Avène Couvrance stick correcteur vert stick 3,5g', 'Anticerne', 'Amazfit', 12, 12.397, 18, 14.628, 12, 13.884, 18, 16.116, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('11', 'EL-BOTA LONG - BANDAGE ANTI-ÉPICONDYLITE SKIN >30CM T2', 'Bandages', 'Amazfit', 12, 32.264, 18, 38.072, 12, 36.136, 18, 41.943, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('12', 'Weleda Élixir de prunellier (prunier sauvage) 200ml', 'Mémoire & concentration', 'Amazfit', 12, 10.368, 18, 12.234, 12, 11.612, 18, 13.478, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('13', 'Oral-b Fil dentaire superfloss 50m', 'Fils dentaires', 'Amazfit', 12, 2.959, 18, 3.491, 12, 3.314, 18, 3.846, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('14', 'Vichy pastille à la menthe 6x10', 'Pastilles', 'Amazfit', 12, 3.302, 18, 3.896, 12, 3.698, 18, 4.292, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('15', 'Homeofresh gomme à mâcher', 'Haleine fraîche', 'SPC Smartee', 12, 1.653, 18, 1.95, 12, 1.851, 18, 2.149, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-15'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('16', 'Phytospecific phytorelaxer défrisage permanent index 2', 'TV', 'RF', 5, 100, 20, 120, 50, 180, 30, 234, '', 12, '', '0xffffffff', '', '', '', '', '2023-05-08'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('100', 'Article de Test', 'Allaitement', 'TESTPROD', 12, 100, 10, 110, 20, 132, 15, 151.8, '', 1, '', '0xffffffff', '', '', '', '', '2020-09-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('101', 'TV Sumsung 4k 55', 'TV', 'SUMSUNG', 12, 1000, 10, 1100, 23, 1353, 20, 1610.4, '', 1, '', '0xffffffff', '', '', '', '', '2022-10-08'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1017565', 'SORIA 14-C ALLERDIN 60 CAPSULE *10014', 'Comprimés & sirops', 'SPC Smartee', 12, 15.802, 18, 18.646, 12, 17.698, 18, 20.542, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1021443', 'Batterie appareil oreille pr 230h 6', 'Audition', 'SPC Smartee', 12, 7.231, 18, 8.533, 12, 8.099, 18, 9.401, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1079656', 'Alphamega Tisane provencale n1 sach 25', 'Constipation', 'SPC Smartee', 12, 8.575, 18, 10.119, 12, 9.605, 18, 11.148, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1080910', 'Arkopharma Activox miel citron sans sucre 24 pastilles ', 'Produits pauvres en sucre', 'SPC Smartee', 12, 6.132, 18, 7.236, 12, 6.868, 18, 7.972, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1096627', 'Saforelle soin lavant doux 250 ml', 'Solution lavante', 'SPC Smartee', 12, 7.066, 18, 8.338, 12, 7.914, 18, 9.186, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1103662', 'ILEODRESS PLUS POCHE DRA.1P.TRANSPARENT 19-60MM 10 G5530', 'Stomie', 'SPC Smartee', 12, 47.425, 18, 55.961, 12, 53.115, 18, 61.652, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-17'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1135367', 'Eucerin Ph5 peau sensible huile de douche 200ml', 'Bain moussant/Huile de Bain', 'SPC Smartee', 12, 8.264, 18, 9.752, 12, 9.256, 18, 10.744, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1203322', 'Coloplast Drainage poche vidable 10 100ml', 'Incontinence urinaire', 'SPC Smartee', 12, 52.009, 18, 61.371, 12, 58.251, 18, 67.612, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-16'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1204098', 'Prodisephar prélude exacto 1 test de grossesse stylo', 'Test de grossesse', 'SPC Smartee', 12, 6.198, 18, 7.314, 12, 6.942, 18, 8.058, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1222272', 'Gaba benelux meridol bain de bouche 400ml', 'Parapharmacie & Orthopédie', 'SPC Smartee', 12, 6.496, 18, 7.666, 12, 7.276, 18, 8.445, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-21'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1223379', 'Scholl Pharma protecteurs de cors ovale - mousse 9 pièces', 'Cors', 'SPC Smartee', 12, 2.802, 18, 3.306, 12, 3.138, 18, 3.642, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-07'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1252576', 'Bomedys nippes pince epiler oblique large 37', 'Pinces à épiler', 'SPC Smartee', 12, 2.76, 18, 3.257, 12, 3.092, 18, 3.588, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1273416', 'Youcky Pince à tiques', 'Antiparasitaires', 'SPC Smartee', 12, 4.223, 18, 4.983, 12, 4.73, 18, 5.49, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-11-14'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1301159', 'PROTECTION TALON ET COUDE 2 MEDIUM-BLEU', 'Pansements et compresses', 'SPC Smartee', 12, 48.066, 18, 56.718, 12, 53.834, 18, 62.486, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-01'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1304104', 'Deba ginkgo fort gélules 120x(60mg)', 'Mémoire', 'SPC Smartee', 12, 24.434, 18, 28.832, 12, 27.366, 18, 31.764, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-27'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1343037', 'Arkogélules Échinacée végétales 45 gélules', 'Phytothérapies', 'SPC Smartee', 12, 8.915, 18, 10.52, 12, 9.985, 18, 11.59, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-31'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1343060', 'Arkogélules Eucalyptus végétales 45 gélules', 'Voies Respiratoires', 'SPC Smartee', 12, 8.915, 18, 10.52, 12, 9.985, 18, 11.59, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-31'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1343656', 'Arkogélules Sauge végétales 45 gélules', 'Nature&Bio', 'SPC Smartee', 12, 8.726, 18, 10.297, 12, 9.774, 18, 11.344, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-31'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1407212', 'Fe & fer complex minerals 60 gelules', 'Défense naturelle', 'SPC Smartee', 12, 0, 18, 0, 12, 0, 18, 0, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-03-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1420850', 'Energetica Natura Bourdaine 100 comprimés', 'Aliments diététiques', 'SPC Smartee', 12, 19.236, 18, 22.698, 12, 21.544, 18, 25.007, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-21'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1433424', 'Omega pharma zincotabs 60 comprimés', 'Rhumatisme & rhumatologie', 'SPC Smartee', 12, 9.387, 18, 11.076, 12, 10.513, 18, 12.203, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1435668', 'Metagenics Milcalm funciomed 39 120 capsules', 'Détente & sommeil', 'SPC Smartee', 12, 21.217, 18, 25.036, 12, 23.763, 18, 27.582, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-15'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1455229', 'Metagenics Green magma 136 136 comprimés', 'Diabète', 'SPC Smartee', 12, 16.5, 18, 19.47, 12, 18.48, 18, 21.45, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1499953', 'Energetica Natura Bromelaine plus 100 comprimés', 'Probiotiques', 'SPC Smartee', 12, 26.17, 18, 30.88, 12, 29.31, 18, 34.021, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-21'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1504034', 'Metagenics Indolplex 60 capsules', 'Rein, vessie & prostate', 'SPC Smartee', 12, 37.726, 18, 44.517, 12, 42.254, 18, 49.044, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1506765', 'Energetica Natura Thyrotabs biotics 90 comprimés', 'Iode', 'SPC Smartee', 12, 24.967, 18, 29.461, 12, 27.963, 18, 32.457, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-07'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1527670', 'Superwhite gel liquide (75ml)', 'Blanchiment', 'SPC Smartee', 12, 3.033, 18, 3.579, 12, 3.397, 18, 3.943, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1530831', 'Clinutren dessert vanille 4x125g cfr 2748309', 'Immunonutrition', 'SPC Smartee', 12, 7.264, 18, 8.572, 12, 8.136, 18, 9.443, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1549518', 'Dermo pain peaux seches 100g', 'Soins du corps', 'SPC Bandini', 12, 3.884, 18, 4.583, 12, 4.35, 18, 5.05, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1549559', 'Klorane Dermo pain peaux delicates 100g', 'Pain Dermatologique', 'SPC Bandini', 12, 3.884, 18, 4.583, 12, 4.35, 18, 5.05, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1572403', 'HYDRABAK COLLYRE 10ML', 'Optique', 'SPC Bandini', 12, 7.471, 18, 8.816, 12, 8.368, 18, 9.712, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-23'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1580000', 'Metagenics Cran max funciomed vegicaps 60x450mg', 'Confort urinaire', 'SPC Bandini', 12, 25.462, 18, 30.045, 12, 28.518, 18, 33.101, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1585397', 'Marque v bicarbonate sodium pdr 250g', 'Autre', 'SPC Bandini', 12, 2.579, 18, 3.043, 12, 2.888, 18, 3.352, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-03'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1597905', 'Caudalie Pulpe Vitaminée Crème yeux et lèvre 15ml', 'Contour des yeux', 'SPC Bandini', 12, 18.527, 18, 21.862, 12, 20.75, 18, 24.085, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-23'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1597939', 'Caudalie Crème gommante douce tube 60ml', 'Cosmétiques & Beauté', 'SPC Bandini', 12, 13.058, 18, 15.409, 12, 14.625, 18, 16.976, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1621564', 'FILMABAK COLLYRE 2% 10 ML', 'Yeux & ophtamologie', 'SPC Bandini', 12, 8.62, 18, 10.171, 12, 9.654, 18, 11.206, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1624279', 'Metagenics Ultraglycem X poudre soluble 700g', 'Produits sans glutens', 'SPC Bandini', 12, 80.179, 18, 94.612, 12, 89.801, 18, 104.233, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-27'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1626894', 'Pranarom Thym satureioide huile essentielle 10ml', 'Huiles essentielles', 'SPC Bandini', 12, 11.075, 18, 13.069, 12, 12.405, 18, 14.398, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1628668', 'FRESUBIN ORIGINAL FIBRE EASY BAG 1L *7539231', 'Alimentation par sonde', 'SPC Bandini', 12, 6.972, 18, 8.227, 12, 7.808, 18, 9.063, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1638832', 'Canderel cankao 250g', 'Edulcorant', 'SPC Bandini', 12, 6.509, 18, 7.681, 12, 7.291, 18, 8.462, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-02-09'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1685544', 'GUM PROXABRUSH REFILLS CLASSIC TAP UFINE 8*414', 'Gommes dentaires', 'SPC Bandini', 12, 3.38, 18, 3.989, 12, 3.786, 18, 4.394, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1718212', 'SÉRUM PHYSIOLOGIQUE & SOLUTION ISOTONIQUE UNIDOSE 9% 30 x 5ML', 'Spray auriculaire', 'SUMSUNG', 12, 5.613, 18, 6.624, 12, 6.287, 18, 7.297, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1727155', 'Ecrinal Durcisseur ongles brillant 10ml', 'Vernis à ongles', 'SUMSUNG', 12, 10.314, 18, 12.171, 12, 11.552, 18, 13.408, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1727213', 'Ecrinal Dissolvant doux 125ml', 'Dissolvants', 'SUMSUNG', 12, 9.702, 18, 11.449, 12, 10.867, 18, 12.613, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1730555', 'Saforelle creme apaisante 50ml', 'Hygiène intime', 'SUMSUNG', 12, 6.198, 18, 7.314, 12, 6.942, 18, 8.058, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1745108', ' Body activ renovateur fl pompe 150ml', 'Soins anti-vergetures', 'SUMSUNG', 12, 24.793, 18, 29.256, 12, 27.769, 18, 32.231, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1750488', 'Furterer Style spray gloss 100ml', 'Gels & mousses de coiffage', 'SUMSUNG', 12, 14.215, 18, 16.774, 12, 15.921, 18, 18.479, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-08'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1750876', 'Marque v bouillotte gel enfant ours rouge 401g', 'Bouillottes', 'SUMSUNG', 12, 11.95, 18, 14.101, 12, 13.384, 18, 15.536, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-03'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1751577', 'Chenidine gel soin de plaie 100g', 'Vétérinaire', 'SUMSUNG', 12, 16.085, 18, 18.98, 12, 18.015, 18, 20.91, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1753763', 'Sportstech fitmeal vanille poudre 630g', 'Diététique du sportif', 'SUMSUNG', 12, 25.934, 18, 30.602, 12, 29.046, 18, 33.714, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1754092', 'Metagenics Sportstech Tribubolan 120 capsules', 'Prise de masse', 'Lenovo', 12, 38.198, 18, 45.074, 12, 42.782, 18, 49.658, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1782200', 'T. LECLERC: FARD À JOUES POUDRÉ ORANGE PERLE 5G', 'Blush', 'Lenovo', 12, 21.479, 18, 25.346, 12, 24.057, 18, 27.923, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1782358', 'T.Leclerc mascara brun m/05', 'Mascara', 'Lenovo', 12, 18.182, 18, 21.455, 12, 20.364, 18, 23.636, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1782390', 'T. LECLERC: OMBRE À PAUPIÈRES POUDRE DUO TAUPE 2.5G', 'Poudre libre', 'Lenovo', 12, 20.661, 18, 24.38, 12, 23.14, 18, 26.86, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-05'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1782564', 'Rhinicur douche nasale + 4 sachets sel rinçage', 'Gouttes & spray nasal', 'Lenovo', 12, 13.943, 18, 16.453, 12, 15.617, 18, 18.126, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-08-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1782648', 'T.Leclerc crayon yeux étain CY/10 1.05G ', 'Eye liner', 'Lenovo', 12, 14.05, 18, 16.579, 12, 15.736, 18, 18.264, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1799972', 'Metagenics Cholarest sc comprimés 60', 'Cardio-vasculaire : coeur', 'Lenovo', 12, 34.255, 18, 40.421, 12, 38.365, 18, 44.531, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('181974', 'Bebisol ciseaux droits', 'Toilette de bébé', 'DELL', 12, 6.81, 18, 8.036, 12, 7.627, 18, 8.853, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-28'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('1854181', 'Anvarex bas thérapeutiques ad-p small', 'Bas de contention', 'DELL', 12, 57.538, 18, 67.895, 12, 64.442, 18, 74.799, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-05'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('195776', 'Wolf bistouri sm manche n 3', 'Bistouris', 'DELL', 12, 5.901, 18, 6.963, 12, 6.609, 18, 7.671, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-07'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('198176', 'Aperop 14x15ml', 'Gelée royale', 'DELL', 12, 9.264, 18, 10.932, 12, 10.376, 18, 12.043, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2021491', 'La Roche-Posay Respectissime démaquillant yeux waterproof 125ml', 'Démaquillants yeux', 'SOUNDCORE', 12, 13.43, 18, 15.847, 12, 15.041, 18, 17.459, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2022630', 'Vichy dercos shampooing énergisant à laminexil 200ml', 'Shampooings anti-chute', 'SOUNDCORE', 12, 10.702, 18, 12.629, 12, 11.987, 18, 13.913, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2023000', 'Vichy soin corp. crème dépilatoire dermo-tolerance 150ml', 'Crème dépilatoire', 'SOUNDCORE', 12, 12.479, 18, 14.726, 12, 13.977, 18, 16.223, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2023760', 'vichy soin corp. cire depilatoire dermo-toler. bde6x2', 'Epilation à la cire', 'SOUNDCORE', 12, 13.347, 18, 15.75, 12, 14.949, 18, 17.351, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2027779', 'Vichy Normaderm stick assechant camouflant anti-imperfections 0,28g', 'Acné', 'SOUNDCORE', 12, 9.876, 18, 11.654, 12, 11.061, 18, 12.839, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-31'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2030534', 'vichy podexine reparateur crevasses 30ml', 'Soins des pieds', 'Smatree', 12, 8.388, 18, 9.898, 12, 9.395, 18, 10.905, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-31'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2030542', 'PODEXINE CRÈME CORRECTEUR CALLOSITÉS 30 ML', 'Manucure & Pédicure', 'Smatree', 12, 7.025, 18, 8.289, 12, 7.868, 18, 9.132, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-31'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2030872', 'La Roche Posay Lipikar surgras douche crème concentré anti-dessèchement 200ml', 'Crème Lavante/ Gel Surgras', 'Smatree', 12, 9.917, 18, 11.702, 12, 11.107, 18, 12.893, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2030963', 'La Roche Posay Cicaplast accélérateur réparateur dermique 40ml', 'Cicatrisant', 'Smatree', 12, 9.339, 18, 11.02, 12, 10.46, 18, 12.14, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-03'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2031037', 'La Roche Posay Anthelios stick zones sensibles ip50+ 9g', 'Crème solaire', 'Smatree', 12, 8.678, 18, 10.24, 12, 9.719, 18, 11.281, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2034338', 'Vichy Homme hydra mag C gel douche 200ml', 'Gels douche homme', 'VSZAPOWER', 12, 9.421, 18, 11.117, 12, 10.552, 18, 12.248, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-17'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2034742', 'vichy homme mousse a raser sans savon 200ml ', 'Gels-Mousses à raser', 'VSZAPOWER', 12, 9.711, 18, 11.459, 12, 10.876, 18, 12.624, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-17'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2035582', 'vichy homme liftactiv yeux creme 15ml ', 'Contour des yeux homme', 'VSZAPOWER', 12, 19.421, 18, 22.917, 12, 21.752, 18, 25.248, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-17'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2035814', 'La Roche Posay Toleriane fluide dermo-nettoyant 400ml', 'Gel moussant', 'VSZAPOWER', 12, 13.802, 18, 16.286, 12, 15.458, 18, 17.942, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2036119', 'La Roche Posay Effaclar eau micellaire purifiante 200ml', 'Toilette du visage', 'VSZAPOWER', 12, 11.983, 18, 14.14, 12, 13.421, 18, 15.579, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2037133', 'Vichy Homme sensibaume mineral 75ml', 'Homme', 'VSZAPOWER', 12, 15.542, 18, 18.339, 12, 17.407, 18, 20.204, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2038073', 'Vichy Capital soleil après soleil soin lacté quotidien 300ml', 'Lait après-solaire', '5Fvie', 12, 16.488, 18, 19.455, 12, 18.466, 18, 21.434, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-31'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2043115', 'T.Leclerc rouge à lèvres transparent voile rt/04', 'Rouge à lèvres', '5Fvie', 12, 14.876, 18, 17.554, 12, 16.661, 18, 19.339, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-05'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2067486', ' homme autobronzant gel hydratant tube 50ml', 'Rasage', '5Fvie', 12, 16.107, 18, 19.007, 12, 18.04, 18, 20.94, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2074375', 'Nobacter gel de rasage 150ml', 'Gels de rasage', '5Fvie', 12, 6.612, 18, 7.802, 12, 7.405, 18, 8.595, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2092815', 'Nutergia Bionisol A liquide 250ml', 'Articulation & os', '5Fvie', 12, 16.981, 18, 20.038, 12, 19.019, 18, 22.075, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2098986', 'Pranarom Mandarine-citrus bio zeste naturel 10ml ', 'Huiles essentielles bio', 'HP', 12, 8.377, 18, 9.885, 12, 9.383, 18, 10.891, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2104685', 'Klorane Petit junior spray démêlant 125ml', 'Lotions capillaires', 'HP', 12, 6.744, 18, 7.958, 12, 7.553, 18, 8.767, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2106813', 'CHONDRO CAPSULES 650MG 300', 'Allergies', 'HP', 12, 105.708, 18, 124.735, 12, 118.392, 18, 137.42, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-09'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2106854', 'Nutrilon bmf pdr 200g cfr 2677078', 'Boisssons pour bébés', 'HP', 12, 19.764, 18, 23.322, 12, 22.136, 18, 25.693, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2139996', 'Glucofen 90 caps', 'Comprimés', 'HP', 12, 16.5, 18, 19.47, 12, 18.48, 18, 21.45, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2147502', 'ENFAMIL AR 1 POUDRE 400G', 'Repas de bébé', 'HP', 12, 9.443, 18, 11.143, 12, 10.577, 18, 12.276, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2164093', 'Parodontax Gel fluor + echinacea tube 75ml', 'Dentifrices bio aux plantes', 'COOLRRPLUS', 12, 4.236, 18, 4.998, 12, 4.744, 18, 5.507, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-23'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2164291', 'Lierac Phytrel ampoule buste 20x5ml', 'Soins du buste', 'COOLRRPLUS', 12, 31.397, 18, 37.048, 12, 35.164, 18, 40.816, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2170975', 'Pranarom Feminaissance accouchement harmonieux huile 5ml', 'Huiles végétales', 'COOLRRPLUS', 12, 10.479, 18, 12.366, 12, 11.737, 18, 13.623, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-18'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2171031', ' aqua-d+ fluide teintmultivithyddore 40ml', 'Maquillage', 'COOLRRPLUS', 12, 19.421, 18, 22.917, 12, 21.752, 18, 25.248, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2171973', 'Uriage Isophy spray nasal 100ml', 'Spray nasal', 'COOLRRPLUS', 12, 6.613, 18, 7.804, 12, 7.407, 18, 8.597, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2171999', 'Uriage 1ere eau lingettes paquet 25', 'Le change de bébé', 'COOLRRPLUS', 12, 5.283, 18, 6.234, 12, 5.917, 18, 6.868, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2172500', 'Pharmalens lentilles de contact dioptrie -11 3', 'Atrier', 'COOLRRPLUS', 12, 17.364, 18, 20.489, 12, 19.447, 18, 22.573, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2173318', 'COMPLEAL.MAN SOJA-NG CAPSULES 60', 'Forme sexuelle', 'COOLRRPLUS', 12, 24.387, 18, 28.776, 12, 27.313, 18, 31.703, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-09'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2187987', 'Nutergia Ergy 3 100 gél', 'Circulation & jambes lourdes', 'COOLRRPLUS', 12, 21.604, 18, 25.492, 12, 24.196, 18, 28.085, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-05'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2199545', 'Nutricia milton 16 comprimés de stérilisation', 'Désinfectant', 'COOLRRPLUS', 12, 7.264, 18, 8.572, 12, 8.136, 18, 9.443, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2200434', 'Weleda Huile minceur aux extraits de bouleau 100ml ', 'Produits minceurs', 'BIKCO', 12, 14.455, 18, 17.056, 12, 16.189, 18, 18.791, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-13'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2215051', 'Nutergia Mycokyl 90 comprimés', 'Régulation intestinale', 'BIKCO', 12, 26.42, 18, 31.176, 12, 29.59, 18, 34.346, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-01'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2222867', 'Newderm pommade protection peau 45g', 'Eczema & rougeurs', 'BIKCO', 12, 3.962, 18, 4.675, 12, 4.438, 18, 5.151, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2229250', 'Herbalgem Ronce macérat 50ml', 'Maux de gorge', 'BIKCO', 12, 23.538, 18, 27.775, 12, 26.362, 18, 30.599, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2229458', 'Herbalgem Baume grandome consoude tube 60g', 'Gemmothérapie', 'BIKCO', 12, 9.05, 18, 10.679, 12, 10.136, 18, 11.764, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-23'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2234359', 'Energetica Natura Optic plus 2 biotics 60 gélules', 'Yeux', 'BIKCO', 12, 29.858, 18, 35.233, 12, 33.442, 18, 38.816, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-08'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2243673', 'Wolf trancheur de pilule', 'Matériel médical', 'BIKCO', 12, 4.198, 18, 4.954, 12, 4.702, 18, 5.458, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-07'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2258218', 'Aproten chicchi 500g', 'Aliments pauvres en protide', 'BIKCO', 12, 4.575, 18, 5.399, 12, 5.125, 18, 5.948, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-02-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2258564', ' soin fluide sans rinçage grenade 100ml', 'Cheveux', 'OxygenOS', 12, 7.62, 18, 8.991, 12, 8.534, 18, 9.906, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2265502', 'SPÉCIFIQUE DRAINEUR CELLULITE DOSETTES 10 x 10ML', 'Minceur', 'OxygenOS', 12, 17.925, 18, 21.151, 12, 20.075, 18, 23.302, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2268415', ' shampoing tournesol vitamine f cheveux colorés 250ml', 'Accueil', 'OxygenOS', 12, 9.909, 18, 11.693, 12, 11.098, 18, 12.882, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-09'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2275675', 'Nutergia Ergysil gel tube 200ml', 'Crème & gel', 'OxygenOS', 12, 28.77, 18, 33.949, 12, 32.222, 18, 37.401, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-28'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2277309', 'Drynites boy xl 8-15 ans 13', 'Couches et propreté', 'OxygenOS', 12, 16.972, 18, 20.027, 12, 19.008, 18, 22.063, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2280006', 'ORAL-B BRAUN CONTRÔLE DE LA PLAQUE DENTAIRE CLEAN D12513', 'Hygiène dentaire', 'OxygenOS', 12, 26.406, 18, 31.159, 12, 29.574, 18, 34.327, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2294221', 'Solidea mi-bas relax 140 unisex corda 3-l', 'Zwachtel', 'OxygenOS', 12, 28.198, 18, 33.274, 12, 31.582, 18, 36.658, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2296432', 'Phytospecific phytorelaxer défrisage permanent index 2', 'Produits défrisants', 'Nord25', 12, 28.926, 18, 34.132, 12, 32.397, 18, 37.603, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-23'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2307551', 'Be Life Co-q10 magnum 60 gélules', 'Récupération', 'Nord25', 12, 24.481, 18, 28.888, 12, 27.419, 18, 31.825, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-13'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2324366', 'Akileine Rouge sels de bain délassants 300g', 'Sels de bains', 'Nord25', 12, 8.545, 18, 10.084, 12, 9.571, 18, 11.109, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2333128', 'Pranarom Feminaissance gommage vergetures huile ess 15ml', 'Gommage corps', 'Nord25', 12, 11.669, 18, 13.77, 12, 13.07, 18, 15.17, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2340313', 'Omron compair pro c29 nebuliseur-compres+kit vvt', 'Aérosols & accessoires', 'Nord25', 12, 1000, 18, 1180, 12, 1321.6, 18, 1559.49, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-01'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2355832', 'METHIO 500 GEL 60x500MG', 'Anti-oxydant', 'Nord25', 12, 14.142, 18, 16.687, 12, 15.838, 18, 18.384, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2356269', 'Tilman origine nez et gorge 28 nr31', 'Comprimés, sirops & sachets', 'Nord25', 12, 11.226, 18, 13.247, 12, 12.574, 18, 14.594, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-18'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2357424', 'Avene Huile corporelle flacon pompe 200ml', 'Huiles corporelles', 'OnePlus', 12, 17.364, 18, 20.489, 12, 19.447, 18, 22.573, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2357432', 'Avene Soin déodorant régulateur flacon bille 50ml', 'Déodorants', 'OnePlus', 12, 9.917, 18, 11.702, 12, 11.107, 18, 12.893, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2373033', 'EPITACT PROTECTEUR POUR HALLUX VALGUS PETIT', 'Protections', 'OnePlus', 12, 20.708, 18, 24.435, 12, 23.192, 18, 26.92, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-21'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2379139', '3m Opticlude comfort maxi 20 pièces 5,7cmx8cm', 'Accessoire', 'OnePlus', 12, 9.405, 18, 11.098, 12, 10.534, 18, 12.226, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-09'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2382257', 'Caudalie Pulpe Vitaminée Crème Anti Rides 40Ml', 'Soins peaux jeunes', 'OnePlus', 12, 23.165, 18, 27.334, 12, 25.945, 18, 30.114, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2384956', 'Klorane Masque après-shampoing au lait de papyrus 150ml', 'Masque capillaire', 'OnePlus', 12, 15.785, 18, 18.626, 12, 17.679, 18, 20.521, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2385763', 'Ducray Nutricerat concentré gainant ultra-nutritif pointes très sèches et très abîmées 75ml', 'Soins cheveux sans rinçage', 'OnePlus', 12, 12.562, 18, 14.823, 12, 14.069, 18, 16.331, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-05'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2387827', 'SPÉCIFIQUE DRAINEUR CELLULITE DOSETTES 20 x 10ML (2x10)', 'Draineurs anticellulites', 'OnePlus', 12, 33.009, 18, 38.951, 12, 36.971, 18, 42.912, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2388346', 'Be life Citrobiotic bio 50ml', 'Produits biologiques', 'IMMORTALS', 12, 12.83, 18, 15.14, 12, 14.37, 18, 16.679, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-13'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2399103', 'Puressentiel Maux de ventre massage aux 15 huiles essentielles 50ml', 'Crampes intestinales', 'IMMORTALS', 12, 15.289, 18, 18.041, 12, 17.124, 18, 19.876, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2404697', 'Nutergia Ergyline 100 capsules', 'Peau', 'IMMORTALS', 12, 21.604, 18, 25.492, 12, 24.196, 18, 28.085, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-27'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2410124', 'Forte pharma Expert cheveux 28 comprimés', 'Ongles', 'IMMORTALS', 12, 14.151, 18, 16.698, 12, 15.849, 18, 18.396, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2415925', 'Avent bec anti-fuite souple +6 mois 2', 'Tétines de biberons', 'IMMORTALS', 12, 6.843, 18, 8.075, 12, 7.664, 18, 8.896, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2428712', 'Phytospecific complexe unifiant 50ml', 'Soins Anti-taches', 'IMMORTALS', 12, 21.488, 18, 25.355, 12, 24.066, 18, 27.934, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-23'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2432920', 'Mustela dermo-pédiatrie stelaprotect fluide 200 ml', 'Cosmétiques', 'IMMORTALS', 12, 9.091, 18, 10.727, 12, 10.182, 18, 11.818, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2443398', 'Phytosun démangeaison 15 ml', 'Complexe pour diffuseur', 'IMMORTALS', 12, 9.05, 18, 10.679, 12, 10.136, 18, 11.764, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-09'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2445153', 'Forte Pharma Expert bronzage 28 comprimés', 'Soleil', 'IMMORTALS', 12, 16.981, 18, 20.038, 12, 19.019, 18, 22.075, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2446128', 'Avene Couvrance 01 blond crayon correcteur sourcils 1,19g', 'Crayon maquillage', 'kwmobile', 12, 11.983, 18, 14.14, 12, 13.421, 18, 15.579, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2447530', 'Tensiometre spotarm i-q142 om', 'Tensiomètres', 'kwmobile', 12, 164.463, 18, 194.066, 12, 184.198, 18, 213.802, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('245266', 'Wolf gant coton a/allergie m paire', 'Gants en latex', 'kwmobile', 12, 2.579, 18, 3.043, 12, 2.888, 18, 3.352, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-07'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2454510', 'Be Life Taurin 500 90 gélules', 'Acides aminés', 'kwmobile', 12, 12.217, 18, 14.416, 12, 13.683, 18, 15.882, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2459386', 'Puressentiel Roller mal des transports aux 7 huiles essentielles 5ml', 'Mal des transports', 'kwmobile', 12, 8.512, 18, 10.045, 12, 9.534, 18, 11.066, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2460418', 'ANTISTAX SPRAY RAFRAÎCHISSANT 75 ML', 'Soins des jambes', 'kwmobile', 12, 9.083, 18, 10.718, 12, 10.173, 18, 11.807, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-18'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2463651', 'Nutergia Ergycare 80 gélules', 'Stress & dépression', 'kwmobile', 12, 21.7, 18, 25.606, 12, 24.304, 18, 28.21, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-27'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2464311', 'T.Leclerc brillant à lèvres 19 orange sanguine 4.2g', 'Gloss', 'kwmobile', 12, 14.876, 18, 17.554, 12, 16.661, 18, 19.339, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-06'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2469302', 'Korres hair dark blond 6n herbe baume colorant sans ammoniaque', 'Colorations', 'kwmobile', 12, 13.264, 18, 15.652, 12, 14.856, 18, 17.244, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-13'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2482065', 'Avent thermomètre flexible 9sec rapid', 'Thermomètres', 'Kena', 12, 9.868, 18, 11.644, 12, 11.052, 18, 12.828, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2483444', 'Evodry spray buccal 50ml', 'Sécheresse buccale', 'Kena', 12, 6.942, 18, 8.192, 12, 7.775, 18, 9.025, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-02-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2486272', 'Resultz 100 ml', 'Produits anti-poux', 'Kena', 12, 10.661, 18, 12.58, 12, 11.94, 18, 13.86, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2491330', ' patches citronella+tea tree 24', 'Parapharmacie', 'Kena', 12, 10.472, 18, 12.357, 12, 11.728, 18, 13.613, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2491363', 'Korres Face grenade 25 lingettes démaquillantes visage-yeux ', 'Lingettes démaquillantes', 'Kena', 12, 7.066, 18, 8.338, 12, 7.914, 18, 9.186, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2492296', 'Marque v semes chaude-froide 20x30cm', 'Orthopédie', 'Kena', 12, 13.843, 18, 16.335, 12, 15.504, 18, 17.996, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-03'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2505758', 'A.Vogel Echinoforce spray gorge 30ml ', 'Spray', 'Kena', 12, 10.84, 18, 12.791, 12, 12.14, 18, 14.092, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2506798', 'Puressentiel Coups de soleil spray aux 8 huiles essentielles 75ml', 'Brulures & coups de soleil', 'NiPoGi', 12, 13.058, 18, 15.408, 12, 14.625, 18, 16.975, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-05'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2513406', '2Pharma Verrukill (gelée) liquide avec 12 applicateurs 5', 'Verrues', 'NiPoGi', 12, 15.905, 18, 18.768, 12, 17.814, 18, 20.677, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2514461', 'Applicateurs vaginaux besins healthcare 5', 'Pansements', 'NiPoGi', 12, 5.708, 18, 6.735, 12, 6.392, 18, 7.42, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-23'); +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2534451', 'Nutergia Végénutril boisson cacao 300g', 'Protéines', 'NiPoGi', 12, 22.547, 18, 26.606, 12, 25.253, 18, 29.311, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2534477', 'Nutergia Vegenutril boisson café pot 300g', 'Aliments hyperprotéinés', 'NiPoGi', 12, 22.547, 18, 26.606, 12, 25.253, 18, 29.311, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2538478', 'Hwb international Maca comprimé 100 x 800mg', 'Hygiène féminine', 'NiPoGi', 12, 18.821, 18, 22.208, 12, 21.079, 18, 24.467, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-06'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2538809', 'T.leclerc ombre à paupières mono bleu nuit 114', 'Fard à paupières', 'NiPoGi', 12, 21.488, 18, 25.355, 12, 24.066, 18, 27.934, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2539203', 'Neuapharma muconet 24 filtres', 'Mouche bébé', 'NiPoGi', 12, 3.471, 18, 4.096, 12, 3.888, 18, 4.512, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2542611', 'BODYSOL MEN: BAUME APRÈS-RASAGE NOUVELLE FORMULE 150ML ', 'Baume après-rasage', 'NiPoGi', 12, 9.868, 18, 11.644, 12, 11.052, 18, 12.828, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2543536', 'Puressentiel Huile massage bio effort musculaire - amica/gaullhérie 100ml', 'Huiles de massage', 'NiPoGi', 12, 13.719, 18, 16.188, 12, 15.365, 18, 17.835, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-09'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2558880', 'Forté Pharma Turbodraine 30 comprimés', 'Aide minceur', 'NiPoGi', 12, 16.981, 18, 20.038, 12, 19.019, 18, 22.075, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2566099', 'Scholl Pharma sels de bain délassants 275g', 'Transpiration', 'NiPoGi', 12, 5.08, 18, 5.994, 12, 5.69, 18, 6.604, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-07'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2570273', 'TOUCHE PRODIGIEUSE PINCEAU PEAUX MATES 6.5ML', 'Pinceau maquillage', 'NiPoGi', 12, 21.066, 18, 24.858, 12, 23.594, 18, 27.386, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2575967', ' Pulpe Vitaminee serum 1eres rides 30ml', 'Crème anti-âge', 'NiPoGi', 12, 23.165, 18, 27.334, 12, 25.945, 18, 30.114, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2580389', 'Ducray Neoptide anti-chute (femme) lotion 3x30ml', 'Anti-chute', 'NiPoGi', 12, 38.02, 18, 44.864, 12, 42.582, 18, 49.426, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2582', 'Protech NAG B caps ( 60 caps)', 'Développement musculaire ', 'NiPoGi', 12, 45.755, 18, 53.991, 12, 51.245, 18, 59.481, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-04-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2582807', 'Puressentiel Base neutre pour bain 100ml', 'Huiles de bain', 'NiPoGi', 12, 7.893, 18, 9.313, 12, 8.84, 18, 10.26, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2587', 'CAP Drink Energy Poire ( 6 x 2g) ', 'Endurance & Performance', 'DAYMARE', 12, 5.66, 18, 6.679, 12, 6.34, 18, 7.358, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-05-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2588', 'CAP Drink MEGAFAT Cassis/Mûre( 6 x 2g)', 'Minceur & Fitness', 'DAYMARE', 12, 5.66, 18, 6.679, 12, 6.34, 18, 7.358, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-05-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2591741', 'Mustela dermo-pédiatrie stelatria crème réparatrice assainissante 40ml', 'Crème hydratante bébé', 'DAYMARE', 12, 8.223, 18, 9.703, 12, 9.21, 18, 10.69, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2595817', ' ALLERPRIL CAPSULES 30', 'Pollen', 'DAYMARE', 12, 9.255, 18, 10.921, 12, 10.365, 18, 12.031, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-08'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2596666', 'FLORA TONIC PLUS CAPSULES 180', 'Pastilles & gelules', 'DAYMARE', 12, 53.302, 18, 62.896, 12, 59.698, 18, 69.292, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-18'); + + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2598811', 'Avent biberon scf663/17 classic pes 260 ml - tétine débit lent', 'Biberons', 'DAYMARE', 12, 9.504, 18, 11.215, 12, 10.645, 18, 12.355, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-10'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2600674', 'EYE CARE: OMBRE À PAUPIÈRES CRÈME SANS PARABÈNES LONG BLEU 6G 0401', 'Palette de maquillage', 'DAYMARE', 12, 15, 18, 17.7, 12, 16.8, 18, 19.5, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-30'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2604247', 'ENLIVE PLUS FLACON POMME 220ML', 'Substituts de repas', 'DAYMARE', 12, 2.264, 18, 2.672, 12, 2.536, 18, 2.943, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2012-08-06'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2608008', 'Probiotical gélules 10 x 400mg', 'Diarrhée', 'DAYMARE', 12, 8.255, 18, 9.741, 12, 9.245, 18, 10.731, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-07-01'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2618700', 'Mustela Bébé crème hydra visage 40ml', 'Bébé', 'DAYMARE', 12, 6.529, 18, 7.704, 12, 7.312, 18, 8.488, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-26'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2618791', 'Mustela Bébé physiobebe avec pompe 750ml', 'Lait de toilette pour bébé', 'Sony', 12, 12.397, 18, 14.628, 12, 13.884, 18, 16.116, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2630309', 'ORAL-B BRAUN CONTRÔLE DE LA PLAQUE DENTAIRE 1000 D205231', 'Brosses à dents', 'Sony', 12, 80.179, 18, 94.612, 12, 89.801, 18, 104.233, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2635399', 'ARTHRODONT PROTECT GEL DENTIFRICE FLUORÉ 75ML', 'Dentifrices', 'Sony', 12, 4.917, 18, 5.802, 12, 5.507, 18, 6.393, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-21'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2642', 'MyBiody Balance: mon check-up santé immédiat', 'Objets Connectés', 'Sony', 12, 189.256, 18, 223.322, 12, 211.967, 18, 246.033, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-08-05'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2648970', 'Energetica natura Biocean hypertonic ampoules 30x10ml', 'Compléments sans lactose', 'Sony', 12, 21.906, 18, 25.849, 12, 24.534, 18, 28.477, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-21'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2663268', 'Angelcare babyphone & détecteur ac420 moniteur mouvements + sons', 'Accessoire', 'Sony', 12, 164.463, 18, 194.066, 12, 184.198, 18, 213.802, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2685642', 'OLVARIT 7 CÉRÉALES NOUVELLE FORMULE 200G', 'Plats pour bébés', 'Sony', 12, 1.387, 18, 1.636, 12, 1.553, 18, 1.803, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2688182', 'Avène Couvrance poudre mosaïque soleil boîtier 9g', 'Poudre compacte', 'Sony', 12, 17.355, 18, 20.479, 12, 19.438, 18, 22.562, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2699288', 'ORAL-B BRAUN CONTROLE DE LA PLAQUE DENTAIRE 500 D16.513 PINK', 'Brosses à dents électriques', 'Sony', 12, 45.446, 18, 53.627, 12, 50.9, 18, 59.08, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2700110', 'Depharm Drill 60 dragées', 'Oligo-éléments', 'Sony', 12, 19.764, 18, 23.322, 12, 22.136, 18, 25.693, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2713808', 'Furterer Style laque végétale 300ml', 'Laques', 'Sony', 12, 14.463, 18, 17.066, 12, 16.198, 18, 18.802, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-08'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2714640', 'Talika smile & kiss 3ml', 'Dents & stomatologie', 'Sony', 12, 22.727, 18, 26.818, 12, 25.455, 18, 29.545, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-06'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2725042', 'SVELT 4 CAPSULE 120', 'Diététique', 'Sony', 12, 26.406, 18, 31.159, 12, 29.574, 18, 34.327, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-09'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2731750', 'PODO HALLUX VALGUS CORRECTEUR LARGE GAUCHE', 'Coussins anatomiques', 'Sony', 12, 16.038, 18, 18.925, 12, 17.962, 18, 20.849, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2733988', 'Difrax tire lait électrique', 'Tires-laits', 'Sony', 12, 156.198, 18, 184.314, 12, 174.942, 18, 203.058, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-18'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2743805', 'vichy fdt aera teint pure creme 35r 30ml', 'Fond de teint', 'Sony', 12, 16.818, 18, 19.845, 12, 18.836, 18, 21.864, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2748044', '1-2 Dry stop auréoles 12 medium', 'Patch de toilette', 'Sony', 12, 3.289, 18, 3.881, 12, 3.684, 18, 4.276, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2753846', 'Isycalm aphtes douloureux & petites plaies', 'Aphtes : bains de bouche', 'Sony', 12, 7.397, 18, 8.728, 12, 8.284, 18, 9.616, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-02-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2757102', 'Nuxe Rêve de miel crème corps ultra-réconfortante 200ml ', 'PROMO', 'Sony', 12, 16.942, 18, 19.992, 12, 18.975, 18, 22.025, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-02-07'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2766582', 'Avent attache-sucette football', 'Sucettes bébé', 'AllStars', 12, 5.744, 18, 6.778, 12, 6.433, 18, 7.467, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-10'); + + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2769180', 'Nutergia Ergysport effort boisson orange poudre pot 450g', 'Boissons énergisantes', 'AllStars', 12, 15.566, 18, 18.368, 12, 17.434, 18, 20.236, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-28'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2784478', 'Cose protect 20 suppositoires ', 'Suppositoire & crème', 'AllStars', 12, 12.755, 18, 15.051, 12, 14.285, 18, 16.581, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2786903', 'Acura herpès labial 3 g', 'Boutons de fièvre', 'AllStars', 12, 7.851, 18, 9.264, 12, 8.793, 18, 10.207, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-05'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2790889', 'Vichy Dercos aminexil pro femme 18 ampoules', 'Ampoules anti-chute', 'AllStars', 12, 53.726, 18, 63.397, 12, 60.174, 18, 69.844, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-12-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2796043', 'Wartner Nail expert fungus 4ml', 'Mycoses des ongles', 'AllStars', 12, 12.355, 18, 14.579, 12, 13.838, 18, 16.062, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2825453', 'Puressentiel Deo stick men bio 50ml', 'Déodorants homme', 'AllStars', 12, 9.669, 18, 11.41, 12, 10.83, 18, 12.57, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-05'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2834885', 'Caudalie Eau fraîche fleur de vigne 50ml', 'Parfums', 'AllStars', 12, 16.241, 18, 19.164, 12, 18.19, 18, 21.113, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-25'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2835403', 'Avene Cold cream crème mains 50ml', 'Soins des mains', 'AllStars', 12, 6.686, 18, 7.889, 12, 7.488, 18, 8.692, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2838068', 'Puressentiel Gaultherie bio-10ml', 'Produits de relaxation', 'AllStars', 12, 7.314, 18, 8.631, 12, 8.192, 18, 9.508, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2865038', 'Herbalgem Sirop refroidissements 150ml', 'Sirop', 'AllStars', 12, 7.736, 18, 9.128, 12, 8.664, 18, 10.057, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-12-05'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('287771', 'Lohmann Stella boite secours legal plus', 'Trousses de secours', 'AllStars', 12, 19.777, 18, 23.337, 12, 22.15, 18, 25.71, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-25'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2881936', 'Vichy Dercos nutriréparateur après shampooing 150ml', 'Après-shampoings', 'AllStars', 12, 12.81, 18, 15.116, 12, 14.347, 18, 16.653, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2883551', 'Avent lunch box 6 mois + scf724/00 fp', 'Boîtes alimentaires bébé', 'AllStars', 12, 12.388, 18, 14.618, 12, 13.875, 18, 16.105, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2884070', 'La Roche Posay Anthelios 50+ stick lèvres 4,7ml', 'Solaire', 'AllStars', 12, 7.149, 18, 8.436, 12, 8.007, 18, 9.293, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('288837', 'Robi combi peigne a poux electrique', 'Peignes', 'AllStars', 12, 32.099, 18, 37.877, 12, 35.951, 18, 41.729, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2902583', 'Aderma Exomega d.e.f.i baume emollient 200ml', 'Corps', 'AllStars', 12, 16.446, 18, 19.407, 12, 18.42, 18, 21.38, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-01-14'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2906816', 'Magnepamyl forte comp 60', 'Diététique, nutrition', 'AllStars', 12, 12.906, 18, 15.229, 12, 14.454, 18, 16.777, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2910404', 'Caudalie Vinosource crème fondante nourrissante 40ml', 'Lait/Crème Hydratante', 'AllStars', 12, 16.372, 18, 19.319, 12, 18.337, 18, 21.284, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2910446', 'Caudalie Masque crème hydratant 50ml', 'Masque', 'AllStars', 12, 14.596, 18, 17.223, 12, 16.348, 18, 18.975, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2912848', 'Avent 4 en 1 stérilisateur électrique vapeur SCF286/02', 'Stérilisateurs biberons', 'AllStars', 12, 89.95, 18, 106.141, 12, 100.744, 18, 116.936, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2929982', 'Akileïne Glamour & confort anti-ampoules tube 75ml', 'Ampoules', 'AllStars', 12, 9.455, 18, 11.156, 12, 10.589, 18, 12.291, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-10-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2944338', 'Arkopharma Activox sirop toux sèche 125ml ', 'Toux sèche', 'AllStars', 12, 7.783, 18, 9.184, 12, 8.717, 18, 10.118, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2951390', 'Korres Body parfum racine de vétiver homme 50ml', 'Parfums pour hommes', 'GOLDORAK', 12, 32.107, 18, 37.887, 12, 35.96, 18, 41.74, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-17'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2952083', 'Caudalie vinoperfect masque peeling enzymatiq 50ml', 'Soins du visage', 'GOLDORAK', 12, 17.645, 18, 20.821, 12, 19.762, 18, 22.938, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2954014', 'Weleda Baby Calendula shampooing corps et cheveux 200ml', 'Shampoings pour bébé', 'GOLDORAK', 12, 7.736, 18, 9.128, 12, 8.664, 18, 10.056, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2966414', 'Biocyte kit lissage brésilien ', 'Lisseurs', 'GOLDORAK', 12, 49.587, 18, 58.512, 12, 55.537, 18, 64.463, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-27'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2971547', 'Caudalie Vinexpert crème bonne mine SPF 15 40ml', 'Crème', 'GOLDORAK', 12, 28.806, 18, 33.991, 12, 32.263, 18, 37.448, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-23'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2971588', 'Caudalie Vinexpert serum anti-age yeux et lèvres 15ml', 'Sticks lèvres', 'GOLDORAK', 12, 27.03, 18, 31.895, 12, 30.273, 18, 35.139, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-23'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('2982197', 'Contralco éthylotest test + ballon', 'Autres tests', 'GOLDORAK', 12, 2.438, 18, 2.877, 12, 2.731, 18, 3.169, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-31'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3002961', 'Uriage Bébé 1er liniment oleothermal crème 400ml', 'Soins pour le change', 'GOLDORAK', 12, 7.453, 18, 8.794, 12, 8.347, 18, 9.689, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3003316', ' astera shampoing apaisant 200ml', 'Soins cheveux homme', 'GOLDORAK', 12, 15.413, 18, 18.188, 12, 17.263, 18, 20.037, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-08'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3008802', 'Saforelle Florgynal tampon probiotique compact normal 9', 'Tampons hygiéniques', 'GOLDORAK', 12, 8.182, 18, 9.655, 12, 9.164, 18, 10.636, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-11-14'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3010253', 'HYABAK PROTECTOR 0,15% 10 ML', 'Accessoires optique', 'GOLDORAK', 12, 13.679, 18, 16.142, 12, 15.321, 18, 17.783, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-27'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3011921', 'Uriage Bariesun huile sèche SPF30 200ml', 'Huile solaire', 'GOLDORAK', 12, 15.455, 18, 18.236, 12, 17.309, 18, 20.091, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3018702', 'Bristol Myers Squibb Enfamil ha digest lipil poudre 800g', 'Lait infantile', 'GOLDORAK', 12, 16.472, 18, 19.437, 12, 18.448, 18, 21.413, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3020443', 'Uriage Bariéderm fissures stick nouveau 22g', 'Crevasses', 'GOLDORAK', 12, 12.81, 18, 15.116, 12, 14.347, 18, 16.653, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3022225', 'Caudalie Eau démaquillante 200ml', 'Lotion micellaire', 'GOLDORAK', 12, 10.452, 18, 12.333, 12, 11.706, 18, 13.587, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3022241', 'Caudalie Lait démaquillant soin doux 200ml', 'Lait démaquillant', 'GOLDORAK', 12, 10.452, 18, 12.333, 12, 11.706, 18, 13.587, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3022282', 'Caudalie Mousse nettoyante 150ml', 'Mousse', 'GOLDORAK', 12, 10.452, 18, 12.333, 12, 11.706, 18, 13.587, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3023397', 'Omnibionta junior siroop 150ml', 'Vitamines Enfant', 'GOLDORAK', 12, 11.274, 18, 13.303, 12, 12.626, 18, 14.656, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3049517', 'THEALOZ GOUTTES OCCULAIRES. 10ML', 'Collyres', 'GOLDORAK', 12, 12.901, 18, 15.223, 12, 14.449, 18, 16.771, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3054905', 'Inneov Densilogy homme 3 month 180 comprimés', 'Anti-chute de cheveux', 'GOLDORAK', 12, 61.321, 18, 72.358, 12, 68.679, 18, 79.717, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-03-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3056207', 'Avene Cleanance mask masque-gommage tube 50ml', 'Gommage', 'GOLDORAK', 12, 11.992, 18, 14.15, 12, 13.431, 18, 15.589, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3056231', 'Avene Cleanance expert soin imperfections légères tube 40ml', 'Visage', 'GOLDORAK', 12, 13.223, 18, 15.603, 12, 14.81, 18, 17.19, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-04-22'); + +INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3063179', 'Somatoline Homme ventre et abdomen intensif nuit 10 150ml', 'Soins corps homme', 'GOLDORAK', 12, 30.579, 18, 36.083, 12, 34.248, 18, 39.752, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-02-16'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3066099', 'Uriage Bébé 1er crème lavante flacon pompe 500ml', 'Savons pour bébés', 'GOLDORAK', 12, 14.057, 18, 16.587, 12, 15.743, 18, 18.274, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3066990', 'La roche posay Anthelios lait compact ip50+ 40ml', 'Produits solaires bébé', 'GOLDORAK', 12, 9.504, 18, 11.215, 12, 10.645, 18, 12.355, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-04-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3069861', 'Lierac Sunific Préparateur Capsules Bronzage', 'Préparateur solaire', 'GOLDORAK', 12, 15.094, 18, 17.811, 12, 16.906, 18, 19.623, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-23'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3073343', 'Vichy Aqualia thermal serum 30ml', 'Serum', 'GOLDORAK', 12, 22.273, 18, 26.282, 12, 24.945, 18, 28.955, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3074663', 'Vichy Dercos nutriréparateur huile pro 150ml', 'Huiles cheveux', 'GOLDORAK', 12, 14.835, 18, 17.505, 12, 16.615, 18, 19.285, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3075504', 'Minceur 24+ fort 28 comprimes', 'Compléments alimentaires', 'GOLDORAK', 12, 19.81, 18, 23.376, 12, 22.187, 18, 25.753, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3081023', 'Klorane Creme de jour sans rinçage au beurre de mangue 125ml', 'Crèmes cheveux', 'GOLDORAK', 12, 8.843, 18, 10.435, 12, 9.904, 18, 11.496, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3093473', 'Avene Cold cream gel nettoyant surgras 200ml', 'Gels/Huiles douches', 'Moulinex', 12, 8.223, 18, 9.703, 12, 9.21, 18, 10.69, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3121043', 'Scholl Crème anti-callosités 60ml ', 'Corne et callosités', 'Moulinex', 12, 7.347, 18, 8.67, 12, 8.229, 18, 9.551, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-07'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3121514', 'Phytosun huile essentielle gaultherie bio 10ml', 'Homéopathie', 'Moulinex', 12, 7.273, 18, 8.582, 12, 8.145, 18, 9.455, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-08'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3140159', 'Forte Pharma Expert collagen 20 sticks', 'Vitamines', 'Moulinex', 12, 28.255, 18, 33.341, 12, 31.645, 18, 36.731, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-21'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3143492', 'Uriage Lingettes démaquillante peau normale-seches 25', 'Root', 'Moulinex', 12, 7.025, 18, 8.289, 12, 7.868, 18, 9.132, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-20'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3144904', 'Dexsil Sport & muscles gel 100ml', 'Crème et huile de massage', 'Moulinex', 12, 16.446, 18, 19.407, 12, 18.42, 18, 21.38, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-28'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3164779', 'Vichy Pureté thermale lotion démaquillante yeux sensibles 150ml', 'Huile', 'Moulinex', 12, 9.463, 18, 11.166, 12, 10.598, 18, 12.302, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-31'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3169331', 'Always Discreet professional pad long 22 ct', 'Protèges-slips', 'Moulinex', 12, 8.256, 18, 9.742, 12, 9.247, 18, 10.733, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-11-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3178811', 'Mustela Maternité baume allaitement 30ml', 'Allaitement', 'Moulinex', 12, 8.719, 18, 10.288, 12, 9.765, 18, 11.335, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-29'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3188232', 'Metagenics Ultrainflamx poudre 14 portions', 'Cholesterol', 'Moulinex', 12, 66.028, 18, 77.913, 12, 73.952, 18, 85.837, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-18'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3188737', 'Vichy Dercos shampooing anti-pelliculaire cheveux secs 200ml', 'Shampoings', 'Moulinex', 12, 10.702, 18, 12.629, 12, 11.987, 18, 13.913, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3195880', 'Forte Pharma Specific ventre plat 28 gélules', 'Digestion', 'Moulinex', 12, 16.981, 18, 20.038, 12, 19.019, 18, 22.075, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-19'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3197316', 'Tena lady mini plus 20 pièces', 'Serviettes hygiéniques', 'Moulinex', 12, 5.057, 18, 5.967, 12, 5.663, 18, 6.574, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-01'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3246584', 'Pranarom Amande douce huile végétale 50ml', 'Aromathérapie', 'Moulinex', 12, 6.321, 18, 7.458, 12, 7.079, 18, 8.217, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-17'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3248937', 'Nutricia Fortimel extra abricot 4x200ml', 'Supplément vitaminique', 'Moulinex', 12, 11.028, 18, 13.013, 12, 12.352, 18, 14.337, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-07-25'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3262367', 'Svr Xerial 50 extrême crème pieds 50ml', 'Durillons', 'Moulinex', 12, 12.81, 18, 15.116, 12, 14.347, 18, 16.653, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-13'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3263951', 'Avene Autobronzant hydratant crème tube 100ml', 'Auto bronzant', 'Moulinex', 12, 14.05, 18, 16.579, 12, 15.736, 18, 18.264, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3281110', 'Expert cheveux lotion 120ml', 'Lotions anti-chute', 'Moulinex', 12, 26.405, 18, 31.158, 12, 29.574, 18, 34.326, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-11-03'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3300993', 'Avene Lotion douceur flacon 200ml', 'Tonique', 'Moulinex', 12, 12.81, 18, 15.116, 12, 14.347, 18, 16.653, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('3384831', 'Caudalie kit voyage 2016', 'Trousses', 'Moulinex', 12, 10, 18, 11.8, 12, 11.2, 18, 13, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-06-17'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('600718', 'Bausch lomb h concentrated cleaner 30ml', 'Lentilles de contact', 'Moulinex', 12, 11.397, 18, 13.448, 12, 12.764, 18, 14.816, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-08'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('619387', 'Marque v lime ongles diamant 15cm', 'Accessoires de manucure', 'Amazfit', 12, 2.81, 18, 3.316, 12, 3.147, 18, 3.653, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-03'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('678581', 'Energetica amorin concentre gutt 30ml', 'Hémorroïdes', 'Amazfit', 12, 21.443, 18, 25.303, 12, 24.017, 18, 27.876, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-07'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('955YPD', 'LIVRE ABC', 'Produits de relaxation', 'Selecta', 0, 15, 10, 16.5, 20, 19.8, 12, 22.176, '', 1, '', '0xffcc80ff', '', '', '100', '', '2020-12-09'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('A', 'test Prod A', 'TV', 'Maqqqq', 12, 350, 12, 392, 80, 705.6, 25, 882, '', 1, '', '0xffffffff', '', '', '', '', '2023-02-11'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('ASD', 'SDFVDC', 'Parfums', 'Amazfit', 1, 350, 10, 385, 18, 454.3, 20, 545.16, '', 1, '', '0xe6b34dff', '', '', '', '', '2020-12-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('AZS', 'SDCSCSDQ', 'TV', 'dsvdf', 5, 3, 2, 3.06, 20, 3.672, 3, 3.782, '

XFVBFGBDFGB

', 1, '', '0xffcc99ff', '', '', '', '', '2020-12-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('C', 'TGK-2021BT', 'Aide minceur', 'JOC', 1, 20, 12, 22.4, 30, 29.12, 18, 34.362, '', 1, '', '0xffffffff', '', '', '', '', '2023-03-12'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('CLIM-18-BLAN', 'CLIMATISEUR PASMA', 'Climatiseur', 'SUMSUNG', 12, 1200, 16, 1392, 30, 1809.6, 18, 2135.33, '', 1, '', '0xffffffff', '', '', '', '', '2017-01-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('ED-DDF54', 'SQDQSDQSD', 'Aliments hyperprotéinés', 'DCDFV', 5, 1000, 18, 1180, 12, 1321, 18, 1558, '', 15, '', '0x000000ff', '', '', '', '', '2020-05-04'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('Q', 'QTM CSDC DFVDFV', 'TV', 'Qtm', 1, 800, 18, 944, 30, 1227.2, 18, 1448.1, '', 1, '', '0xffffffff', '', '', '', '', '2020-12-30'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('rtf', 'cqsdcqsdc', 'ddxw', 'cdx', 1, 3, 15, 3.45, 20, 4.14, 18, 4.885, '', 1, '', '0xffffffff', '', '', '', '', '2020-12-24'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('RTF-847', 'Climatiseur Turbo', 'Climatiseur', 'SUMSUNG', 12, 1000, 16, 1160, 25, 1450, 18, 1711, '', 1, '', '0xffffffff', '15*17', '', '18000', '', '2017-01-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('RTTT52', 'sdcqsdc', 'Accessoire', 'Amazfit', 2, 12, 10, 13.2, 20, 15.84, 18, 18.691, '

QSXQSX

', 1, '', '0xff9999ff', '', '', '', '', '2020-12-09'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('TB', 'dsfvsdvf', 'Jambes lourdes (veinotoniques)', 'hgngfnh', 5, 200, 12, 224, 50, 336, 18, 396.48, '', 1, '', '0xffffffff', '', '', '', '', '2021-10-10'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('TG', 'DVDFV', 'Ampoules', 'RTC', 5, 6, 20, 7.2, 15, 8.28, 9, 9.025, '', 2, '', '0x00000000', '', '', '', '', '2020-12-26'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('Y9', 'Téléphone portable', 'Aphtes', 'HUAWEI', 12, 700, 12, 784, 20, 940.8, 18, 1110.14, '', 1, '', '0xffffffff', '', '', '', '', '2020-12-08'); + + INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES +('Y9i', 'CCVXCV', 'Accessoires appareils auditifs', 'SDCSDC', 12, 350, 10, 385, 20, 462, 20, 554.4, '', 1, '', '0xffffffff', '', '', '', '', '2020-12-09'); + + + +INSERT INTO cltentreprise (nomentrepise, gerant, matricule_fiscale, adresse, telefix, telefix2, fax, code_postal, mail, date_add, `local_nom`) VALUES +('TechSphere Solutions', 'jean Dupont', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '2 Avenue Mohamed V, Tunis', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@techSphere-Solutions.com', now(), 'Magasin I'), +('BlueWave Technologies', 'Marie Lambert', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '3 Rue du Liban, Lac 1, Tunis', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@blueWave-technologies.com', now(), 'Magasin I'), +('GreenLeaf Innovations', 'Ahmed El Mansouri', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '4 Rue Ali Belhouane, Le Bardo, Tunis', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@greenLeaf-innovations.com', now(), 'Magasin I'), +('SilverLine Consulting', 'Sophie Martin', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '5 Avenue de la Liberté, La Marsa, Tunis', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@silverLine-consulting.com', now(), 'Magasin I'), +('BrightFuture Labs', 'Paul Johnson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '10 Rue de Carthage, Sidi Bou Said, Tunis', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@brightFuture-labs.com', now(), 'Magasin I'), +('NovaCore Systems', 'Laura Garcia', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '7 Avenue Habib Thameur, Sfax', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@novaCore-systems.com', now(), 'Magasin I'), +('Skyward Enterprises', 'Michael Brown', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '8 Rue Hédi Chaker, Sfax', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@skyward-enterprises.com', now(), 'Magasin I'), +('EcoPulse Energy', 'Emma Wilson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '9 Avenue Farhat Hached, Sousse', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@ecoPulse-Energy.com', now(), 'Magasin I'), +('StellarEdge Solutions', 'David Lee', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '6 Rue de la République, Sousse', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@stellarEdge-solutions.com', now(), 'Magasin I'), +('QuantumLeap Designs', 'Sarah Kim', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '11 Avenue Taïeb Mhiri, Monastir', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@quantumLeap-designs.com', now(), 'Magasin I'), +('GoldenGate Logistics', 'Jean Dupont', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '12 Rue de la Médina, Monastir', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@goldenGate-logistics.com', now(), 'Magasin I'), +('PureSource Foods', 'Marie Lambert', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '13 Avenue Habib Bourguiba, Bizerte', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@puresource-foods.com', now(), 'Magasin I'), +('UrbanPulse Media', 'Ahmed El Mansouri', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '14 Rue de la Marine, Bizerte', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@urbanPulse-media.com', now(), 'Magasin I'), +('CrimsonPeak Studios', 'Sophie Martin', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '15 Avenue de l''Indépendance, Kairouan', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@crimsonPeak-studios.com', now(), 'Magasin I'), +('AuroraWorks', 'Paul Johnson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '16 Rue Ali Zouaoui, Kairouan', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@auroraworks.com', now(), 'Magasin I'), +('FusionPoint Advisors', 'Laura Garcia', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '17 Avenue de la République, Gabès', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@fusionPoint-Advisors.com', now(), 'Magasin I'), +('ZenithGrowth Partners', 'Michael Brown', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '18 Rue Tahar Sfar, Gabès', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@zenithGrowth-Partners.com', now(), 'Magasin I'), +('EagleEye Analytics', 'Emma Wilson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '19 Avenue Habib Bourguiba, Gafsa', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@eagleEye-Analytics.com', now(), 'Magasin I'), +('SolarFlare Networks', 'David Lee', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '20 Rue de la Gare, Gafsa', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@solarFlare-Networks.com', now(), 'Magasin I'), +('TerraNova Builders', 'Sarah Kim', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '21 Avenue Farhat Hached, Mahdia', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@terraNova-Builders.com', now(), 'Magasin I'), +('OceanBreeze Travel', 'Thomas Anderson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '22 Rue de la Corniche, Mahdia', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@oceanbreeze-travel.com', now(), 'Magasin I'), +('IronClad Security', 'Claire Dubois', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '23 Avenue Habib Thameur, Kasserine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@ironClad-Security.com', now(), 'Magasin I'), +('PinnacleHealth Solutions', 'Lucas Martinez', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '24 Rue de la République, Kasserine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@pinnacleHealth-Solutions.com', now(), 'Magasin I'), +('VividVisions Marketing', 'Olivia White', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '25 Avenue Mohamed Ali, Béja', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@vividVisions-Marketing.com', now(), 'Magasin I'), +('SwiftStream Technologies', 'Daniel Clark', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '26 Rue de l''Indépendance, Béja', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@SwiftStream-Technologies.com', now(), 'Magasin I'), +('EverGreen Farms', 'Chloé Bernard', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '27 Avenue Habib Bourguiba, Jendouba', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@EverGreen-Farms.com', now(), 'Magasin I'), +('CrystalClear Communications', 'Samuel Taylor', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '28 Rue de la Liberté, Jendouba', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@CrystalClear-Communications.com', now(), 'Magasin I'), +('PhoenixRise Consulting', 'Laura Evans', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '29 Avenue de la République, Nabeul', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@PhoenixRise-Consulting.com', now(), 'Magasin I'), +('SummitPeak Ventures', 'Ryan Harris', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '30 Rue des Orangers, Nabeul', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@SummitPeak-Ventures.com', now(), 'Magasin I'), +('BlueHorizon Designs', 'Sophie Turner', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '31 Avenue Habib Thameur, Zaghouan', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@BlueHorizon-Designs.com', now(), 'Magasin I'), +('TrueNorth Strategies', 'Emma Watson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '32 Rue de la Source, Zaghouan', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@TrueNorth-Strategies.com', now(), 'Magasin I'), +('EchoWave Media', 'James Carter', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '33 Avenue de l''Indépendance, Siliana', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@EchoWave-Media.com', now(), 'Magasin I'), +('BrightSpark Education', 'Laura Bennett', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '34 Rue de la Poste, Siliana', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@BrightSpark-Education.com', now(), 'Magasin I'), +('SilverLeaf Finance', 'Alex Johnson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '35 Avenue Habib Bourguiba, Le Kef', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@SilverLeaf-Finance.com', now(), 'Magasin I'), +('RedRock Robotics', 'Sarah Adams', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '36 Rue de la Kasbah, Le Kef', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@RedRock-Robotics.com', now(), 'Magasin I'), +('AquaPulse Solutions', 'John Green', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '37 Avenue Farhat Hached, Médenine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@AquaPulse-Solutions.com', now(), 'Magasin I'), +('GoldenHarvest Foods', 'Emily Davis', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '38 Rue de la République, Médenine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@GoldenHarvest-Foods.com', now(), 'Magasin I'), +('Skyline Innovations', 'Michael Scott', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '39 Avenue Habib Thameur, Tataouine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@Skyline-Innovations.com', now(), 'Magasin I'), +('FrostByte Systems', 'Laura Hill', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '40 Rue de la Palmeraie, Tataouine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@FrostByte-Systems.com', now(), 'Magasin I'), +('UrbanRoots Development', 'Sophie Carter', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '41 Avenue de l''Indépendance, Tozeur', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@UrbanRoots-Development.com', now(), 'Magasin I'), +('LunarGlow Studios', 'David Wilson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '42 Rue des Dattes, Tozeur', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@LunarGlow-Studios.com', now(), 'Magasin I'), +('TerraFirma Engineering', 'Emma Roberts', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '43 Avenue Habib Bourguiba, Kebili', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@TerraFirma-Engineering.com', now(), 'Magasin I'), +('SolarWinds Energy', 'Thomas White', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '44 Rue de l''Oasis, Kebili', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@SolarWinds-Energy.com', now(), 'Magasin I'), +('CrimsonCrest Marketing', 'Laura Green', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '45 Avenue Farhat Hached, Ben Arous', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@CrimsonCrest-Marketing.com', now(), 'Magasin I'), +('BlueSky Analytics', 'Daniel Harris', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '46 Rue de l''Usine, Ben Arous', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@BlueSky-Analytics.com', now(), 'Magasin I'), +('EverBright Solutions', 'Sophie Adams', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '47 Avenue Habib Thameur, Ariana', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@EverBright-Solutions.com', now(), 'Magasin I'), +('IronHorse Logistics', 'John Miller', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '48 Rue de la Mosquée, Ariana', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@IronHorse-Logistics.com', now(), 'Magasin I'), +('PolarisPoint Advisors', 'Laura Turner', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '49 Avenue de la République, Manouba', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@PolarisPoint-Advisors.com', now(), 'Magasin I'), +('GreenPulse Technologies', 'Michael Brown', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '50 Rue de l''Université, Manouba', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@GreenPulse-Technologies.com', now(), 'Magasin I'), +('ApexVision Consulting', 'Emma Wilson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '47 Avenue de l''Indépendance, Zaghouan', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@ApexVision-Consulting.com', now(), 'Magasin I'); + + +INSERT INTO fournisseur (nom, adresse, mail, site_web, specialite, formes, tele1, tele2, fax) VALUES +('TunisTech Solutions','Rue Habib Bourguiba, Tunis','contact@tunistech-solutions.com','www.tunistech-solutions.com','Matériel informatique et logiciels','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('GreenHarvest Foods','Avenue Mohamed V, Sfax','info@greenharvest-foods.com','www.greenharvest-foods.com','Produits agricoles biologiques','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('MediPharma Distribution','Rue Ali Belhouane, Le Bardo, Tunis','sales@medipharma-distribution.com','www.medipharma-distribution.com','Produits pharmaceutiques','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('EcoBuild Materials','Avenue de la Liberté, La Marsa, Tunis','contact@ecobuild-materials.com','www.ecobuild-materials.com','Matériaux de construction écologiques','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisLogistics','Rue du Liban, Lac 1, Tunis','info@tunislogistics.com','www.tunislogistics.com','Services de logistique et transport','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('PureWater Systems','Avenue Habib Thameur, Sfax','support@purewater-systems.com','www.purewater-systems.com','Systèmes de filtration d''eau','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('SolarTunisia Energy','Rue Hédi Chaker, Sfax','contact@solartunisia-energy.com','www.solartunisia-energy.com','Équipements solaires et énergies renouvelables','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisPrint Solutions','Avenue Farhat Hached, Sousse','sales@tunisprint-solutions.com','www.tunisprint-solutions.com','Imprimerie et fournitures de bureau','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('AgriTunis Products','Rue de la République, Sousse','info@agritunis-products.com','www.agritunis-products.com','Produits agricoles et agroalimentaires','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisFurniture Design','Avenue Taïeb Mhiri, Monastir','contact@tunisfurniture-design.com','www.tunisfurniture-design.com','Meubles sur mesure et design','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('Mediterranean Seafood','Rue de la Médina, Monastir','sales@mediterranean-seafood.com','www.mediterranean-seafood.com','Produits de la mer et poissons frais','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisTextile Mills','Avenue Habib Bourguiba, Bizerte','info@tunistextile-mills.com','www.tunistextile-mills.com','Textiles et tissus','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAuto Parts','Rue de la Marine, Bizerte','contact@tunisauto-parts.com','www.tunisauto-parts.com','Pièces détachées automobiles','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisHealth Supplies','Avenue de l''Indépendance, Kairouan','sales@tunishealth-supplies.com','www.tunishealth-supplies.com','Équipements médicaux','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Equipment','Rue Ali Zouaoui, Kairouan','info@tunisagro-equipment.com','www.tunisagro-equipment.com','Machines agricoles','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisPlast Industries','Avenue de la République, Gabès','contact@tunisplast-industries.com','www.tunisplast-industries.com','Produits en plastique','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisChem Solutions','Rue Tahar Sfar, Gabès','sales@tunischem-solutions.com','www.tunischem-solutions.com','Produits chimiques industriels','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisElectro Components','Avenue Habib Bourguiba, Gafsa','info@tuniselectro-components.com','www.tuniselectro-components.com','Composants électroniques','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisWood Crafts','Rue de la Gare, Gafsa','contact@tuniswood-crafts.com','www.tuniswood-crafts.com','Meubles en bois artisanal','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisPack Solutions','Avenue Farhat Hached, Mahdia','sales@tunispack-solutions.com','www.tunispack-solutions.com','Emballages et conditionnement','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisMed Devices','Rue de la Corniche, Mahdia','info@tunismed-devices.com','www.tunismed-devices.com','Dispositifs médicaux','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisOil Services','Avenue Habib Thameur, Kasserine','contact@tunisoil-services.com','www.tunisoil-services.com','Services pétroliers et gaziers','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisPaper Products','Rue de la République, Kasserine','sales@tunispaper-products.com','www.tunispaper-products.com','Produits en papier et carton','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisMetal Works','Avenue Mohamed Ali, Béja','info@tunismetal-works.com','www.tunismetal-works.com','Fabrication métallique','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisGlass Innovations','Rue de l''Indépendance, Béja','contact@tunisglass-innovations.com','www.tunisglass-innovations.com','Verre et miroiterie','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgri Seeds','Avenue Habib Bourguiba, Jendouba','sales@tunisagri-seeds.com','www.tunisagri-seeds.com','Semences agricoles','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisCeramic Arts','Rue de la Liberté, Jendouba','info@tuniscermaic-arts.com','www.tuniscermaic-arts.com','Céramique et poterie','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisBeverage Co','Avenue de la République, Nabeul','contact@tunisbeverage-co.com','www.tunisbeverage-co.com','Boissons et jus naturels','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisLeather Goods','Rue des Orangers, Nabeul','sales@tunisleather-goods.com','www.tunisleather-goods.com','Articles en cuir','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisSolar Power','Avenue Habib Thameur, Zaghouan','info@tunissolar-power.com','www.tunissolar-power.com','Panneaux solaires','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisClean Solutions','Rue de la Source, Zaghouan','contact@tunisclean-solutions.com','www.tunisclean-solutions.com','Produits de nettoyage industriels','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Fertilizers','Avenue de l''Indépendance, Siliana','sales@tunisagro-fertilizers.com','www.tunisagro-fertilizers.com','Engrais agricoles','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisPackaging Solutions','Rue de la Poste, Siliana','info@tunispackaging-solutions.com','www.tunispackaging-solutions.com','Solutions d''emballage','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisOil Refinery','Avenue Habib Bourguiba, Le Kef','contact@tunisoil-refinery.com','www.tunisoil-refinery.com','Raffinage de pétrole','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisStone Works','Rue de la Kasbah, Le Kef','sales@tunisstone-works.com','www.tunisstone-works.com','Pierre et marbre','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Dairy','Avenue Farhat Hached, Médenine','info@tunisagro-dairy.com','www.tunisagro-dairy.com','Produits laitiers','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisFish Exports','Rue de la République, Médenine','contact@tunisfish-exports.com','www.tunisfish-exports.com','Exportation de produits de la mer','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisDesert Dates','Avenue Habib Thameur, Tataouine','sales@tunisdesert-dates.com','www.tunisdesert-dates.com','Dattes et produits dérivés','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisOasis Water','Rue de la Palmeraie, Tataouine','info@tunisoasis-water.com','www.tunisoasis-water.com','Eaux minérales','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisDesert Tours','Avenue de l''Indépendance, Tozeur','contact@tunisdesert-tours.com','www.tunisdesert-tours.com','Tourisme désertique','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisPalm Products','Rue des Dattes, Tozeur','sales@tunispalm-products.com','www.tunispalm-products.com','Produits à base de palmier','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Oils','Avenue Habib Bourguiba, Kebili','info@tunisagro-oils.com','www.tunisagro-oils.com','Huiles végétales','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisDesert Crafts','Rue de l''Oasis, Kebili','contact@tunisdesert-crafts.com','www.tunisdesert-crafts.com','Artisanat local','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Honey','Avenue Farhat Hached, Ben Arous','sales@tunisagro-honey.com','www.tunisagro-honey.com','Miel et produits apicoles','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Spices','Rue de l''Usine, Ben Arous','info@tunisagro-spices.com','www.tunisagro-spices.com','Épices et herbes aromatiques','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Nuts','Avenue Habib Thameur, Ariana','contact@tunisagro-nuts.com','www.tunisagro-nuts.com','Noix et fruits secs','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Olive Oil','Rue de la Mosquée, Ariana','sales@tunisagro-oliveoil.com','www.tunisagro-oliveoil.com','Huile d''olive','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Fruits','Avenue de la République, Manouba','info@tunisagro-fruits.com','www.tunisagro-fruits.com','Fruits frais','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Vegetables','Rue de l''Université, Manouba','contact@tunisagro-vegetables.com','www.tunisagro-vegetables.com','Légumes frais','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000), +('TunisAgro Grains','Avenue de l''Indépendance, Tunis','sales@tunisagro-grains.com','www.tunisagro-grains.com','Céréales et grains','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000); \ No newline at end of file diff --git a/src/logs/myStruts1App.log b/src/logs/myStruts1App.log new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/logs/myStruts1App.log @@ -0,0 +1 @@ + diff --git a/src/main/java/Controllers/App.java b/src/main/java/Controllers/App.java new file mode 100644 index 0000000..711ac46 --- /dev/null +++ b/src/main/java/Controllers/App.java @@ -0,0 +1,46 @@ +package Controllers; + +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.ParametreSystem; +import Models.H2JDBC; +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 { + + H2JDBC h2jdbc = new H2JDBC(); + + @Override + public void start(Stage stage) throws IOException { + + DOMConfigurator.configure("./conf/log4j.xml"); + + h2jdbc.createDB(); + h2jdbc.InsertSimpleData(); + + System.out.println("============================="); + + 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..c3716a7 --- /dev/null +++ b/src/main/java/Controllers/AuthentificationController.java @@ -0,0 +1,265 @@ +package Controllers; + +import Controllers.Traitement.MyWindow; +import Controllers.Traitement.ParametreSystem; +import Models.SimpleDataAchat; +import Models.SimpleDataVente; +import Models.User.Profile; +import Models.User.ProfileDB; +import Models.User.User; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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.ProgressBar; +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 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 Label label; + + @FXML + private TextField Login; + + + @FXML + private AnchorPane Content; + + @FXML + private ImageView ImageViewLogo; + + @FXML + private ProgressBar ProgressBarAuthentification; + + private Service ThreadAuthentification; + + Profile profile; + + int nbrBonEnter ; + int nbrDevisClt ; + int nbrCommandeClt ; + int nbrBonLivraisonClt ; + int nbrFactureClt ; + int nbrBonReception ; + int nbrFactureFrs ; + + Logger logger = Logger.getLogger(AuthentificationController.class.getName()); + + @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() + { + Login.setStyle("-fx-border-color: transparent;"); + Login.setStyle("-fx-border-color: transparent;"); + + String login= Login.getText(); + + Login.setStyle("-fx-border-color: transparent;"); + + ProgressBarAuthentification.setVisible(true); + ThreadAuthentification = new Service(){ + @Override + protected Task createTask(){ + return new Task(){ + @Override + protected Void call() throws Exception{ + + ParametreSystem parametre = new ParametreSystem(); + + boolean resultJsonParametre = parametre.SetJsonParametre("http://powerpme.com/demo/parametre?login="+login); + + if(resultJsonParametre == false) + { + profile = new ProfileDB().getProfileByConnexion("3", "3"); + User.idprofile= profile.getIdprofile(); + User.nom = profile.getNom(); + User.prenom=profile.getPrenom(); + User.UserLocal=profile.getAuthentification().getLocalNom(); + User.SotckNegatif= profile.getAuthentification().isStockNegatif(); + parametre.SetParametre(); + } + + setNbrSimpleData(); + SimpleDataVente simpleDataVente = new SimpleDataVente(); + simpleDataVente.setDataBonEnter(nbrBonEnter); + simpleDataVente.setDataDevisClt(nbrDevisClt); + simpleDataVente.setDataCommandeClt(nbrCommandeClt); + simpleDataVente.setDataBonLivraisonClt(nbrBonLivraisonClt); + simpleDataVente.setDataFactureClt(nbrFactureClt); + + SimpleDataAchat simpleDataAchat = new SimpleDataAchat(); + simpleDataAchat.setDataBonReception(nbrBonReception); + simpleDataAchat.setDataFactureFrs(nbrFactureFrs); + + return null; + } + }; + } + }; + ThreadAuthentification.setOnSucceeded(new EventHandler(){ + @Override + public void handle(WorkerStateEvent event) + { + //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.error("AuthentificationController : Principal.fxml :" + ex.getMessage()); + } + 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()); + } + } + + + private void setNbrSimpleData() + { + 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 elementSimpleData = (Element) doc.getElementsByTagName("SimpleData").item(0); + + String strBonEnter = elementSimpleData.getElementsByTagName("BonEnter").item(0).getTextContent(); + nbrBonEnter = Integer.parseInt(strBonEnter); + + String strDevisClt = elementSimpleData.getElementsByTagName("DevisClt").item(0).getTextContent(); + nbrDevisClt = Integer.parseInt(strDevisClt); + + String strCommandeClt = elementSimpleData.getElementsByTagName("CommandeClt").item(0).getTextContent(); + nbrCommandeClt = Integer.parseInt(strCommandeClt); + + String strBonLivraisonClt = elementSimpleData.getElementsByTagName("BonLivraisonClt").item(0).getTextContent(); + nbrBonLivraisonClt = Integer.parseInt(strBonLivraisonClt); + + String strFactureClt = elementSimpleData.getElementsByTagName("FactureClt").item(0).getTextContent(); + nbrFactureClt = Integer.parseInt(strFactureClt); + + String strBonReception = elementSimpleData.getElementsByTagName("BonReception").item(0).getTextContent(); + nbrBonReception = Integer.parseInt(strBonReception); + + String strFactureFrs = elementSimpleData.getElementsByTagName("FactureFrs").item(0).getTextContent(); + nbrFactureFrs = Integer.parseInt(strFactureFrs); + } + catch (ParserConfigurationException | SAXException | IOException e) { + System.out.println("error AuthentificationController/setNbrSimpleData "+e.getMessage()); + } + } + + private String fetchJsonData(String urlString) throws Exception + { + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuilder content = new StringBuilder(); + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + in.close(); + connection.disconnect(); + + return content.toString(); + } +} diff --git a/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController.java b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController.java new file mode 100644 index 0000000..c1c8bd9 --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterController.java @@ -0,0 +1,410 @@ +package Controllers.BonLivraisonClt; + +import Models.CommandeClt.CommandeCltDB; +import Models.CommandeClt.CommandeCltListe; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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; + + Logger logger = Logger.getLogger(BonLivraisonCltAjouterController.class.getName()); + + @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.error("BonLivraisonCltAjouterController : BonLivraisonCltAjouterEtape2.fxml :" + 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); + } + } + } + + +/****************************************************************************** * + * * + * 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..98e3bd0 --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape2Controller.java @@ -0,0 +1,300 @@ +/* + * 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 org.apache.log4j.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; + + Logger logger = Logger.getLogger(BonLivraisonCltAjouterEtape2Controller.class.getName()); + + @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.error("BonLivraisonCltAjouterEtape2Controller : NextEtap :" + ex.getMessage()); + } + } + + 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..faefdcb --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltAjouterEtape3Controller.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 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 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); + } + }); + 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..f5b795b --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltDetailController.java @@ -0,0 +1,348 @@ +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 org.apache.log4j.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(); + + Logger logger = Logger.getLogger(BonLivraisonCltDetailController.class.getName()); + + public BonLivraisonCltDetailController(){ + try { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltDetail.fxml")); + fxmlLoader.setController(this); + nodeFxml = (Node) fxmlLoader.load(); + } catch (IOException ex) { + logger.error("BonLivraisonCltDetailController : BonLivraisonCltDetail.fxml :" + ex.getMessage()); + } + } + + 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..83d017a --- /dev/null +++ b/src/main/java/Controllers/BonLivraisonClt/BonLivraisonCltGestionController.java @@ -0,0 +1,381 @@ +package Controllers.BonLivraisonClt; + +import Models.BonLivraisonClt.BonLivraisonCltDB; +import Models.BonLivraisonClt.BonLivraisonCltGestionList; +import javafx.scene.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(); + } + } + }); + + 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..a8e82ae --- /dev/null +++ b/src/main/java/Controllers/BonReceptionFrs/BonReceptionAjouterFrsController.java @@ -0,0 +1,619 @@ +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(BonReceptionAjouterFrsController.class.getName()); + + @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().getIdNomFournisseur(); + 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.error("BonReceptionAjouterFrsController : BonReceptionDetailFrs.fxml :" + ex.getMessage()); + } + } + }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.error("CommandeCltPasserController : RechercheProduitButtonAction : BonReceptionAjouterFrs.fxml : " + ex.getMessage()); + } + + } + }); + } + @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(); + + SearchBonReceptionGestionFrs(); + + } + + + 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().getIdNomFournisseur(); + 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..8edca8e --- /dev/null +++ b/src/main/java/Controllers/Caisse/CaisseEntreController.java @@ -0,0 +1,458 @@ +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 javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(CaisseEntreController.class.getName()); + + @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..063e735 --- /dev/null +++ b/src/main/java/Controllers/Caisse/CaisseSortieController.java @@ -0,0 +1,439 @@ +package Controllers.Caisse; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.Caisse.CaisseDB; +import Models.Caisse.CaisseSortieListe; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.util.ResourceBundle; + +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(CaisseSortieController.class.getName()); + + @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..1c05e9e --- /dev/null +++ b/src/main/java/Controllers/Caisse/FraisAjouterController.java @@ -0,0 +1,221 @@ + +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(FraisAjouterController.class.getName()); + + @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 TextAreaContext ; + + @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(TextAreaContext.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.error("FraisAjouterController : AfficherAjouterFraisButtonAction : FraisAjouter.fxml : " + ex.getMessage()); + } + + } + }); + 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..2acc033 --- /dev/null +++ b/src/main/java/Controllers/Caisse/FraisDetailController.java @@ -0,0 +1,158 @@ +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.control.TextArea; +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 TextArea TextAreaContext ; + + @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("")){ + TextAreaContext.setText(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..453e4e4 --- /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 javafx.scene.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..226edb3 --- /dev/null +++ b/src/main/java/Controllers/Categorie/AjouterCategorieController.java @@ -0,0 +1,118 @@ +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 org.apache.log4j.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 Maher Ben Tili + */ +public class AjouterCategorieController implements Initializable { + + Logger logger = Logger.getLogger(AjouterCategorieController.class.getName()); + + 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.error("AjouterCategorieController : AjouterCategorie.fxml :" + ex.getMessage()); + } + } + + + 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..310566e --- /dev/null +++ b/src/main/java/Controllers/ChequeClt/ChequeCltDetailController.java @@ -0,0 +1,323 @@ + +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(ChequeCltDetailController.class.getName()); + + @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.error("ChequeCltDetailController : ChequeCltDetail.fxml :" + ex.getMessage()); + } + } + + 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..b1b29f5 --- /dev/null +++ b/src/main/java/Controllers/ChequeClt/ChequeCltGestionController.java @@ -0,0 +1,484 @@ +package Controllers.ChequeClt; + +import Models.ChequeClt.ChequeCltDB; +import Models.ChequeClt.ChequeCltGestionListe; +import javafx.scene.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(); + } + } + }); + + 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..e09711e --- /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 javafx.scene.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..3209d69 --- /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 javafx.scene.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..aea76a6 --- /dev/null +++ b/src/main/java/Controllers/Client/AjouterClientController.java @@ -0,0 +1,51 @@ + +package Controllers.Client; + +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(AjouterClientController.class.getName()); + + @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.error("AjouterClientController : AjouterClientPersonne.fxml :" + ex.getMessage()); + } + + } + + @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..54b2655 --- /dev/null +++ b/src/main/java/Controllers/Client/AjouterClientPersonneController.java @@ -0,0 +1,373 @@ +/* + * 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.setCodeclient(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"); + } + + + + 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..5bc470b --- /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 Maher Ben Tili + */ +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.setCodeclient(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..f4b5bc5 --- /dev/null +++ b/src/main/java/Controllers/Client/GestionClientEntrepriseController.java @@ -0,0 +1,420 @@ +package Controllers.Client; + +import Models.Client.ClientEntrepriseDB; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(GestionClientEntrepriseController.class.getName()); + + @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.error("GestionClientEntrepriseController : DetailClient.fxml :" + ex.getMessage()); + } + + + } + } + + } + }); + + + 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(); + } + } + }); + + 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.error("GestionClientEntrepriseController : ButtonCell : DetailClient.fxml : " + 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); + } + } + } + + + + +/****************************************************************************** * + * * + * 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..a71afc9 --- /dev/null +++ b/src/main/java/Controllers/Client/GestionClientPersonneController.java @@ -0,0 +1,415 @@ +package Controllers.Client; + +import Models.Client.ClientDB; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(GestionClientPersonneController.class.getName()); + + @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(); + } + } + }); + + 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.error("GestionClientPersonneController : ButtonCell : DetailClient.fxml : " + 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); + } + } + } + + // 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..15eddb3 --- /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 Maher Ben Tili + */ +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..f881230 --- /dev/null +++ b/src/main/java/Controllers/Client/RechercherClientEntrepriseController.java @@ -0,0 +1,365 @@ + package Controllers.Client; + +import Controllers.Traitement.MyWindow; +import Models.Client.ClientEntrepriseDB; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(RechercherClientEntrepriseController.class.getName()); + + @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.error("RechercherClientEntrepriseController : RechercherClientEntreprise.fxml :" + ex.getMessage()); + } + } + + @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..32ee9ab --- /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 javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(RechercherClientPersonneController.class.getName()); + + @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.error("RechercherClientPersonneController : RechercherClientPersonne.fxml :" + ex.getMessage()); + } + } + + @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..ede4fa7 --- /dev/null +++ b/src/main/java/Controllers/CommandeClt/CommandeCltDetail.java @@ -0,0 +1,197 @@ +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(CommandeCltDetail.class.getName()); + + @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.error("CommandeCltDetail : BonLivraisonCltAjouterEtape2.fxml :" + ex.getMessage()); + } + } + }); + + } + + + 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..65fcf7c --- /dev/null +++ b/src/main/java/Controllers/CommandeClt/CommandeCltDialogConfirmationController.java @@ -0,0 +1,198 @@ +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 org.apache.log4j.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 Maher Ben Tili + */ +public class CommandeCltDialogConfirmationController implements Initializable { + /** + * Initializes the controller class. + */ + public Node nodeFxml ; + + Logger logger = Logger.getLogger(CommandeCltDialogConfirmationController.class.getName()); + + @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.error("CommandeCltDialogConfirmationController : CommandeCltDialogConfirmation.fxml :" + ex.getMessage()); + } + } + + 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..c910d09 --- /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.CommandeCltDB; +import Models.CommandeClt.CommandeCltListe; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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.Text; +import javafx.util.Callback; + +/** + * FXML Controller class + * @author Maher Ben Tili + */ +public class CommandeCltGestionController implements Initializable { + + Logger logger = Logger.getLogger(CommandeCltGestionController.class.getName()); + + @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(); + } + }); + + 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.error("CommandeCltGestionController : CommandeCltDetail.fxml :" + 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); + } + } + } + +/****************************************************************************** * + * * + * 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..949ad97 --- /dev/null +++ b/src/main/java/Controllers/CommandeClt/CommandeCltPasserController.java @@ -0,0 +1,998 @@ +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 org.apache.log4j.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 Maher Ben Tili + */ +public class CommandeCltPasserController implements Initializable { + + Logger logger = Logger.getLogger(CommandeCltPasserController.class.getName()); + + @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.error("CommandeCltPasserController : CommandeCltDetail.fxml :" + ex.getMessage()); + } + } + } + }); + + 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()); + + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/CommandeClt/CommandeCltPasser.fxml")); + Parent ParentCommandeClt = (Parent) fxmlLoader.load(); + + CommandeCltPasserController CommandeCltPasser = fxmlLoader.getController(); + + Devis devis = new DevisDB().getDevis(current.getCodeDevis()); + + 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(); + System.out.println("codeclt"+devis.getCodeClient()); + CommandeCltPasser.SetClient(devis.getCodeClient()); + }else if(devis.getTypeClient() == 1){ + CommandeCltPasserController.codecliententre = devis.getCodeClient(); + CommandeCltPasser.SetClientEntre(devis.getCodeClient()); + }else if(devis.getTypeClient() == 2){ + ClientPassager passager = devis.getPassager(); + CommandeCltPasser.Nom.setText(passager.getNom()); + CommandeCltPasser.Prenom.setText(passager.getPrenom()); + CommandeCltPasser.Adresse.setText(passager.getAdresse()); + CommandeCltPasser.TELE1.setText(passager.getTelefixString()); + CommandeCltPasser.TELE2.setText(passager.getTelemobileString()); + } + + 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.error("CommandeCltPasserController : CommandeCltPasser.fxml "+ ex.getMessage()); + } + } + }); + 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.error("CommandeCltPasserController : ClientExisteDejatButtonAction : CommandeCltPasser.fxml " + ex.getMessage()); + } + + } + }); + } + @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.error("CommandeCltPasserController : CommandeCltPasser.fxml :" + ex.getMessage()); + } + + } + }); + } + + @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.error("CommandeCltPasserController : RechercheProduitButtonAction ; CommandeCltPasser.fxml :" + ex.getMessage()); + } + + } + }); + } + @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()); + CltExistNom.setText(client.getNom()); + CltExistPrenom.setText(client.getPrenom()); + CltExistDateNaissance.setText(" "+client.getDateNaissanceString()); + CltExistAdresse.setText(client.getAdresse()); + CltExistTELE1.setText(client.getTelefixString()); + 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..9cc0da7 --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisAjouterController.java @@ -0,0 +1,910 @@ + +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.Client.ClientPassager; +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 org.apache.log4j.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 Maher Ben Tili + */ +public class DevisAjouterController implements Initializable { + + Logger logger = Logger.getLogger(DevisAjouterController.class.getName()); + + @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 private ToggleGroup ToggleGroupSexe; + @FXML private RadioButton SexeHomme; + @FXML private RadioButton SexeFemme; + + @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.error("DevisAjouterController : DevisDetail.fxml :" + ex.getMessage()); + } + } + } + }); + + 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.setDateCreation(Adaptateur.NormalDateFormat(DateCreation.getValue())); + devis.setTypeClient(TypeClient); + devis.setTypeRegementString(ModeReglement.getValue().toString()); + devis.setValidite(Adaptateur.NormalDateFormat(DateFinValidite.getValue())); + + devis.setNetAPayer(DevisNetAPayer.getText()); + devis.setTotalTVA(DevisTotalTVA.getText()); + devis.setTotalHorsTaxNet(DevisTotalHTNet.getText()); + + if(TypeClient == 0) + { + Client client = new ClientDB().getClient(CltExistCode.getText()); + devis.setClient(client); + devis.setCodeClient(CltExistCode.getText()); + } + else if(TypeClient == 1) + { + ClientEntreprise entreprise = new ClientEntrepriseDB().GetClientEtr(CltExistCode.getText()); + devis.setEntreprise(entreprise); + devis.setCodeClient(CltExistCode.getText()); + } + else if(TypeClient == 2) + { + ClientPassager passager = new ClientPassager(); + passager.setNom(DevisNom.getText()); + passager.setPrenom(DevisPrenom.getText()); + passager.setAdresse(DevisAdresse.getText()); + RadioButton SelectedRadioSexe = (RadioButton) ToggleGroupSexe.getSelectedToggle(); + passager.setSexeString(SelectedRadioSexe.getEllipsisString()); + passager.setTelefixString(DevisTELE1.getText()); + passager.setTelemobileString(DevisTELE2.getText()); + devis.setPassager(passager); + } + + //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.error("DevisAjouterController : ClientExisteDejatButtonAction : DevisAjouter.fxml :" + ex.getMessage()); + } + + } + }); + } + @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.error("DevisAjouterController : DevisAjouter.fxml :" + ex.getMessage()); + } + + } + }); + } + + @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(); + + 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.error("DevisAjouterController : RechercheProduitButtonAction :" + ex.getMessage()); + } + + } + }); + } + @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 ; + } + 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..b9729ea --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisCltGestionController.java @@ -0,0 +1,427 @@ +package Controllers.DevisClt; + +import Models.DevisClt.DevisCltListe; +import Models.DevisClt.DevisDB; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 DevisCltGestionController implements Initializable { + + Logger logger = Logger.getLogger(DevisCltGestionController.class.getName()); + + @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(); + } + } + }); + + 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.error("DevisCltGestionController : DevisDetail.fxml :" + 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); + } + } + } + +/****************************************************************************** * + * * + * 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..7793ea6 --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisCltPrintController.java @@ -0,0 +1,249 @@ +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) + { + TextNumDevie.setText(devis.getCodeDevis()); + TextReference.setText(devis.getCodeDevis()); + TextDate.setText(Adaptateur.NormalDateFormat(devis.getDateCreation())); + TextEcheance.setText(devis.getValidite()); + + if(devis.getTypeClient()==0){ + TextClient.setText(devis.getCodeClient()+" - "+devis.getClient().getNom()+" - "+devis.getClient().getPrenom()); + }else if(devis.getTypeClient()==1){ + TextClient.setText(devis.getCodeClient()+" - "+devis.getEntreprise().getNom()+" - "+devis.getEntreprise().getMatricule()); + } + else if(devis.getTypeClient()==2){ + TextClient.setText(devis.getCodeClient()+" - "+devis.getPassager().getNom()+" - "+devis.getPassager().getPrenom()); + } + 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..410415f --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisDetailController.java @@ -0,0 +1,192 @@ +package Controllers.DevisClt; + +import Models.Produit.ListeProduit; +import Controllers.Traitement.Adaptateur; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.DevisClt.Devis; +import Models.DevisClt.DevisDB; +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.getDateCreation())); + DevisFinValidite.setText(devis.getValidite()); + DevisReglement.setText(devis.getTypeRegementString()); + DevisTotalHorsTaxNet.setText(Adaptateur.StringToStringEspace(devis.getTotalHorsTaxNet())); + DevisCode.setText(codedevis); + DevisTypeClt.setText(devis.getTypeClientString()); + + if(devis.getTypeClient()==0) + { + Client client = devis.getClient(); + DevisNom.setText(client.getNom()); + DevisTextPrenom.setVisible(true); + DevisTextMatricule.setVisible(false); + DevisPrenom.setText(client.getPrenom()); + DevisAdresse.setText(client.getAdresse()); + DevisTELE1.setText(client.getTelefixString()); + DevisTELE2.setText(client.getTelemobileString()); + }else if(devis.getTypeClient()==1) + { + ClientEntreprise entreprise = devis.getEntreprise(); + DevisNom.setText(entreprise.getNom()); + DevisTextPrenom.setVisible(false); + DevisTextMatricule.setVisible(true); + DevisPrenom.setText(devis.getMatricule()); + DevisAdresse.setText(entreprise.getAdresse()); + DevisTELE1.setText(entreprise.getTele1String()); + DevisTELE2.setText(entreprise.getTele2String()); + }else if(devis.getTypeClient()==2) + { + ClientPassager passager = devis.getPassager(); + DevisNom.setText(passager.getNom()); + DevisTextPrenom.setVisible(true); + DevisTextMatricule.setVisible(false); + DevisPrenom.setText(passager.getPrenom()); + DevisAdresse.setText(passager.getAdresse()); + DevisTELE1.setText(passager.getTelefixString()); + DevisTELE2.setText(passager.getTelemobileString()); + } + + 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..6c73fdd --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisDialogConfirmationController.java @@ -0,0 +1,183 @@ +package Controllers.DevisClt; + +import Models.Produit.ListeProduit; +import Controllers.Traitement.MyWindow; +import Models.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.DevisClt.Devis; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 Maher Ben Tili + */ +public class DevisDialogConfirmationController implements Initializable { + + public Node nodeFxml ; + + Logger logger = Logger.getLogger(DevisDialogConfirmationController.class.getName()); + + @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.getDateCreation()); + DevisFinValidite.setText(devis.getValidite()); + DevisReglement.setText(devis.getTypeRegement()); + + DevisNetAPayer.setText(devis.getNetAPayer()); + DevisTotalHorsTaxNet.setText(devis.getTotalHorsTaxNet()); + DevisTotalTVA.setText(devis.getTotalTVA()); + DevisTypeClt.setText(devis.getTypeClientString()); + + if(devis.getTypeClient()==0) + { + Client client = devis.getClient(); + DevisNom.setText(client.getNom()); + DevisTextPrenom.setVisible(true); + DevisTextMatricule.setVisible(false); + DevisPrenom.setText(client.getPrenom()); + DevisAdresse.setText(client.getAdresse()); + DevisTELE1.setText(client.getTelefixString()); + DevisTELE2.setText(client.getTelemobileString()); + }else if(devis.getTypeClient()==1) + { + ClientEntreprise entreprise = devis.getEntreprise(); + DevisNom.setText(entreprise.getNom()); + DevisTextPrenom.setVisible(false); + DevisTextMatricule.setVisible(true); + DevisPrenom.setText(devis.getMatricule()); + DevisAdresse.setText(entreprise.getAdresse()); + DevisTELE1.setText(entreprise.getTele1String()); + DevisTELE2.setText(entreprise.getTele2String()); + }else if(devis.getTypeClient()==2) + { + ClientPassager passager = devis.getPassager(); + DevisNom.setText(passager.getNom()); + DevisTextPrenom.setVisible(true); + DevisTextMatricule.setVisible(false); + DevisPrenom.setText(passager.getPrenom()); + DevisAdresse.setText(passager.getAdresse()); + DevisTELE1.setText(passager.getTelefixString()); + DevisTELE2.setText(passager.getTelemobileString()); + } + + 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.error("DevisDialogConfirmationController : DevisDialogConfirmation.fxml :" + ex.getMessage()); + } + } + + 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..bb2d4fa --- /dev/null +++ b/src/main/java/Controllers/DevisClt/DevisImporterController.java @@ -0,0 +1,397 @@ +package Controllers.DevisClt; + +import Controllers.Traitement.MyWindow; +import Models.DevisClt.DevisCltListe; +import Models.DevisClt.DevisDB; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(DevisImporterController.class.getName()); + + @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.error("DevisImporterController : DevisImporter.fxml :" + ex.getMessage()); + } + } + + + + 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..ecb8aaf --- /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 Maher Ben Tili + */ +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..8a8a618 --- /dev/null +++ b/src/main/java/Controllers/Dialog/Dialog.java @@ -0,0 +1,83 @@ + +package Controllers.Dialog; + +import Controllers.Traitement.MyWindow; +import java.io.IOException; +import org.apache.log4j.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 Ben Tili + */ +public class Dialog { + + Logger logger = Logger.getLogger(Dialog.class.getName()); + + 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.error("Dialog : DialogAlert.fxml :" + ex.getMessage()); + } + 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..c9a98e3 --- /dev/null +++ b/src/main/java/Controllers/Dialog/DialogSuccessController.java @@ -0,0 +1,58 @@ +package Controllers.Dialog; + +import Controllers.Traitement.MyWindow; +import java.io.IOException; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(DialogSuccessController.class.getName()); + + 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.error("DialogSuccessController : DialogSuccess.fxml :" + ex.getMessage()); + } + } + + + 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..5634cb0 --- /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 Maher Ben Tili + */ +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..f8444d9 --- /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 javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(FactureCltAjouterController.class.getName()); + + @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.error("FactureCltAjouterController : FactureCltAjouterDetailSelect.fxml :" + 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); + } + } + } + + + +/****************************************************************************** * + * * + * 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..8e49c1a --- /dev/null +++ b/src/main/java/Controllers/FactureClt/FactureCltAjouterDetailSelectController.java @@ -0,0 +1,185 @@ +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(Adaptateur.getDefaultCurrentDate("yyyy-MM-dd")); + 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..093c108 --- /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 Maher Ben Tili + */ +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..6fa0801 --- /dev/null +++ b/src/main/java/Controllers/FactureClt/FactureCltDetailController.java @@ -0,0 +1,364 @@ +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 org.apache.log4j.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 Maher Ben Tili + */ +public class FactureCltDetailController implements Initializable{ + + Logger logger = Logger.getLogger(FactureCltDetailController.class.getName()); + + @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.error("FactureCltDialogConfirmationController : FactureCltDialogConfirmation.fxml :" + ex.getMessage()); + } + } + + 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..d4644bb --- /dev/null +++ b/src/main/java/Controllers/FactureClt/FactureCltGestionController.java @@ -0,0 +1,457 @@ +package Controllers.FactureClt; + +import Models.FactureClt.FactureCltDB; +import javafx.collections.FXCollections; +import Models.FactureClt.FactureCltGestionList; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(FactureCltGestionController.class.getName()); + + @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(); + } + }); + + 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.error("FactureCltGestionController : FactureCltDetail.fxml :" + 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 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..7265d15 --- /dev/null +++ b/src/main/java/Controllers/FactureFrs/FactureFrsAjouterController.java @@ -0,0 +1,680 @@ +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 org.apache.log4j.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 Ben Tili + */ +public class FactureFrsAjouterController implements Initializable { + + Logger logger = Logger.getLogger(FactureFrsAjouterController.class.getName()); + + @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().getIdNomFournisseur(); + 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.error("FactureFrsAjouterController : FactureFrsDetail.fxml :" + ex.getMessage()); + } + }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.error("FactureFrsAjouterController : FactureFrsAjouter.fxml :" + ex.getMessage()); + } + + } + }); + } + @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..57954a4 --- /dev/null +++ b/src/main/java/Controllers/FactureFrs/FactureFrsBonReceptionAjouterController.java @@ -0,0 +1,632 @@ + +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(FactureFrsBonReceptionAjouterController.class.getName()); + + @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().getIdNomFournisseur(); + 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.error("FactureFrsBonReceptionAjouterController : FactureFrsDetail.fxml :" + 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(); + } + + 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 (to_char(BR.date_reception, 'yyyy-mm-dd') = "+"'"+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 (to_char(BR.date_reception, 'yyyy-mm-dd') = "+"'"+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..f36fd21 --- /dev/null +++ b/src/main/java/Controllers/FactureFrs/FactureFrsDetailController.java @@ -0,0 +1,207 @@ +/* + * 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..14acfe8 --- /dev/null +++ b/src/main/java/Controllers/FactureFrs/FactureFrsGestionController.java @@ -0,0 +1,483 @@ +package Controllers.FactureFrs; + +import Models.FactureFrs.FactureFrs; +import Models.FactureFrs.FactureFrsDB; +import Models.Fournisseur.FournisseurDB; +import Models.Stock.StockDB; +import javafx.scene.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(); + } + } + }); + + 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().getIdNomFournisseur(); + 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..d785db9 --- /dev/null +++ b/src/main/java/Controllers/Fournisseur/FournisseurGererController.java @@ -0,0 +1,345 @@ +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(FournisseurGererController.class.getName()); + + @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.error("FournisseurGererController : FournisseurGestion.fxml :" + ex.getMessage()); + } + } + + } + } + }); + + } + + + @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.error("FournisseurGererController : FournisseurGestion.fxml :" + ex.getMessage()); + } + } + } + } + }); + } + + +} diff --git a/src/main/java/Controllers/Fournisseur/FournisseurGestionController.java b/src/main/java/Controllers/Fournisseur/FournisseurGestionController.java new file mode 100644 index 0000000..2f24234 --- /dev/null +++ b/src/main/java/Controllers/Fournisseur/FournisseurGestionController.java @@ -0,0 +1,396 @@ +package Controllers.Fournisseur; + + +import Models.Fournisseur.FournisseurDB; +import Models.Fournisseur.FournisseurGestionList; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(FournisseurGestionController.class.getName()); + + @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(); + } + } + }); + + 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.error("FournisseurGestionController : FournisseurGerer.fxml :" + 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 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..1a35046 --- /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 javafx.scene.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..b0af3be --- /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 org.apache.log4j.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; + + Logger logger = Logger.getLogger(PrincipalController.class.getName()); + + @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.error("PrincipalController : Profile.fxml :" + ex.getMessage()); + } + } + }); + + + /**********************Accueil************************/ + try { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Home/Dashboard.fxml"))); + } catch (IOException ex) { + logger.error("PrincipalController : Dashboard.fxml :" + ex.getMessage()); + } + 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"))); + } + + + + + + /*********************************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"))); + } + + /********************************* Caisse ***********************************/ + + @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"))); + } + + @FXML + private void TraiteCltButtonAction(ActionEvent event) throws IOException { + window.getChildren().clear(); + window.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/TraiteClt/TraiteCltGestion.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..c63029a --- /dev/null +++ b/src/main/java/Controllers/Produit/AjouterProduitController.java @@ -0,0 +1,324 @@ +/* + * 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.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 javafx.scene.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.scene.web.HTMLEditor; +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 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 AjouterProduitQualite ; + @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 ErreurQualite; + @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.ContrNumerique(AjouterProduitQualite, ErreurQualite)&& + 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)){ + + 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(); + } + } + } + } + + + //récuperation des formulaire dans l'objet Produit + private void getProduit() + { + prod.setReference(AjouterProduitReference.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()); + + if(AjouterProduitQualite.getText().isEmpty()){ prod.setQualite(1); } else{ prod.setQualite(Integer.parseInt(AjouterProduitQualite.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(""); + 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..89394a2 --- /dev/null +++ b/src/main/java/Controllers/Produit/GestionProduitController.java @@ -0,0 +1,540 @@ +package Controllers.Produit; + +import Models.Categorie.CategorieDB; +import Models.Produit.Produit; +import Models.Produit.ProduitDB; +import javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(GestionProduitController.class.getName()); + + @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 GestionProduitDesignation; + @FXML private TextField GestionProduitMarque; + @FXML private TextField GestionProduitCategorie; + + + @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.error("GestionProduitController : ModifierProduit.fxml :" + ex.getMessage()); + } + + } + } + + } + }); + + + 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(); + } + } + }); + + 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.error("GestionProduitController : AjouterProduit.fxml :" + ex.getMessage()); + } + + } + }); + } + //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.error("GestionProduitController : ModifierProduit.fxml :" + 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); + } + } + + + + } + + + + + + private void getReferenceProduitOnclick(){ + GestionProduitReference.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if(totalcount<10){ + ListerPages.setVisible(false); + } + else{ + ListerPages.setVisible(true); + } + SearchProduit(); + } + }); + + } + + private void getDesignationProduitOnclick(){ + GestionProduitDesignation.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if(totalcount<10){ + ListerPages.setVisible(false); + } + else{ + ListerPages.setVisible(true); + } + SearchProduit(); + } + }); + + } + + + private void getMarqueProduitOnclick(){ + GestionProduitMarque.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + if(totalcount<10){ + ListerPages.setVisible(false); + } + else{ + ListerPages.setVisible(true); + } + SearchProduit(); + } + }); + + } + + 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(), GestionProduitMarque.getText(), GestionProduitDesignation.getText()); + TableViewListeGestionProduit.setItems(ListProduits); + + totalcount = new ProduitDB().nbrSearchProduit(true, GestionProduitReference.getText(), GestionProduitCategorie.getText(), GestionProduitMarque.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(), GestionProduitMarque.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..50c9079 --- /dev/null +++ b/src/main/java/Controllers/Produit/ModifierProduitController.java @@ -0,0 +1,294 @@ +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(ModifierProduitController.class.getName()); + + public String Reference = GestionProduitController.refprod; + + //private AnchorPane Content ; + @FXML private AnchorPane AnchorPaneModifierprod ; + @FXML private AnchorPane AnchorPaneModifierProduit ; + @FXML private TextField ModifierProduitReference; + @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 ModifierProduitQualite; + @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 ErreurDesignation ; + + @FXML private Text ErreurQualite ; + @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()) ; + ModifierProduitQualite.setText(prod.getQualiteString()); + 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(ModifierProduitQualite, ErreurQualite)&& + 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.error("ModifierProduitController : ModifierProduitButtonAction :" + ex.getMessage()); + } + 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.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.setQualiteString(ModifierProduitQualite.getText()); + + 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..3dd5dd2 --- /dev/null +++ b/src/main/java/Controllers/Produit/RechercherProduitController.java @@ -0,0 +1,469 @@ +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 javafx.scene.control.ProgressBar; +import java.io.IOException; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(RechercherProduitController.class.getName()); + + @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 GestionProduitMarque; + @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.error("RechercherProduitController : RechercherProduit.fxml :" + ex.getMessage()); + } + } + + + 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.error("RechercherProduitController : ButtonCell :" + 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 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(), + GestionProduitMarque.getText(), + GestionProduitDesignation.getText()); + + TableViewListeGestionProduit.setItems(null); + TableViewListeGestionProduit.refresh(); + TableViewListeGestionProduit.setItems(ListeCltPersonne); + + totalcount = new ProduitDB().nbrSearchProduit(StockNegatif, GestionProduitReference.getText(), GestionProduitCategorie.getText(), GestionProduitMarque.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(), + GestionProduitMarque.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..0769d0c --- /dev/null +++ b/src/main/java/Controllers/Reglement/GestionReglementController.java @@ -0,0 +1,561 @@ +package Controllers.Reglement; + +import Models.Fournisseur.FournisseurDB; +import Models.Reglement.Reglement; +import Models.Reglement.ReglementDB; +import javafx.scene.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().getIdNomFournisseur(); + 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..3ca30a2 --- /dev/null +++ b/src/main/java/Controllers/Reglement/ReglementAjouter1Controller.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 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 + */ +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.getIdNomFournisseur(); + 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("to_char(date_creation, 'yyyy-mm-dd')", " = '"+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("to_char(date_creation, 'yyyy-mm-dd')", " = '"+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_fournisseur", " = "+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..b2eb962 --- /dev/null +++ b/src/main/java/Controllers/Reglement/ReglementAjouter2Controller.java @@ -0,0 +1,494 @@ + +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(ReglementAjouter2Controller.class.getName()); + + @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.error("ReglementAjouter2Controller : ReglementAjouter3.fxml :" + ex.getMessage()); + } + } + }); + 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..4c166ea --- /dev/null +++ b/src/main/java/Controllers/Reglement/ReglementDialogConfirmationController.java @@ -0,0 +1,226 @@ + +package Controllers.Reglement; + +import Controllers.CommandeClt.CommandeCltDialogConfirmationController; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.MyWindow; +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(ReglementDialogConfirmationController.class.getName()); + + 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.error("ReglementDialogConfirmationController : ReglementDialogConfirmation.fxml :" + ex.getMessage()); + } + } + + @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..7f2bf30 --- /dev/null +++ b/src/main/java/Controllers/Reglement/ReglementDialogDetailController.java @@ -0,0 +1,309 @@ + +package Controllers.Reglement; + +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(ReglementDialogDetailController.class.getName()); + + 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.error("ReglementDialogDetailController : constructeur :" + ex.getMessage()); + } + } + + @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..52094a4 --- /dev/null +++ b/src/main/java/Controllers/Stock/BondeEntrerController.java @@ -0,0 +1,537 @@ +package Controllers.Stock; + +import Controllers.Dialog.MessageControle; +import Controllers.Dialog.ShowDialog; +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 javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.util.ResourceBundle; +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(BondeEntrerController.class.getName()); + + @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 MarqueBE; + + @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 marque="" ; + + @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, marque, 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(); + marque=MarqueBE.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && marque.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(); + marque=MarqueBE.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && marque.isEmpty()){ + TableViewListeProduitRechercher.setItems(null); + } + else{ + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + + } + }); + + MarqueBE.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + Reference=ReferenceBE.getText(); + designaton=DesignatonBE.getText(); + marque=MarqueBE.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && marque.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(); + marque=MarqueBE.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(DateBE.getValue().toString()); + 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 + bonentree.setDate(DateBE.getValue().toString()); + + 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.error("BondeEntrerController : CreerBonEnterButtonAction :" + ex.getMessage()); + } + } + 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..ddf90f1 --- /dev/null +++ b/src/main/java/Controllers/Stock/BondeEntrerDetailController.java @@ -0,0 +1,175 @@ + +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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(BondeEntrerDetailController.class.getName()); + + @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..1f3a07f --- /dev/null +++ b/src/main/java/Controllers/Stock/BondeSortieController.java @@ -0,0 +1,607 @@ + +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 javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.time.LocalDate; +import java.util.ResourceBundle; + +import org.apache.log4j.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 { + + Logger logger = Logger.getLogger(BondeSortieController.class.getName()); + + @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 MarqueBE; + + @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 marque="" ; + + @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(DateBS.getValue().toString()); + 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.error("BondeSortieController : CreerBonSortieButtonAction :" + ex.getMessage()); + } + } + 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,marque,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(); + marque=MarqueBE.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && marque.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(); + marque=MarqueBE.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && marque.isEmpty()){ + TableViewListeProduitRechercher.setItems(null); + } + else{ + if (ke.getCode().equals(KeyCode.ENTER)) { + SearchProduit(); + } + } + + } + }); + + MarqueBE.setOnKeyReleased(new EventHandler() { + @Override + public void handle(KeyEvent ke) { + Reference=ReferenceBE.getText(); + designaton=DesignatonBE.getText(); + marque=MarqueBE.getText(); + if(Reference.isEmpty() && designaton.isEmpty() && marque.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(); + marque=MarqueBE.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..2b417a1 --- /dev/null +++ b/src/main/java/Controllers/Stock/BondeSortieDetailController.java @@ -0,0 +1,169 @@ + +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 org.apache.log4j.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 BondeSortieDetailController implements Initializable { + + Logger logger = Logger.getLogger(BondeSortieDetailController.class.getName()); + + @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())); + 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..65222fb --- /dev/null +++ b/src/main/java/Controllers/Stock/EtatStockCategorieController.java @@ -0,0 +1,437 @@ +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 javafx.scene.control.ProgressBar; +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; +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; + +/** + * @author Maher Ben Tili + */ +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..551684b --- /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 Maher Ben Tili + */ +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..01b45eb --- /dev/null +++ b/src/main/java/Controllers/TraiteClt/TraiteCltDetailController.java @@ -0,0 +1,406 @@ +package Controllers.TraiteClt; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +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 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.paint.Color; +import javafx.scene.text.Text; +import org.apache.log4j.Logger; + +/** + * 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(); + + Logger logger = Logger.getLogger(TraiteCltDetailController.class.getName()); + + 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.error("TraiteCltDetailController : GetNodeTraiteCltDetail :" + ex.getMessage()); + } + 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 { + while (Resultat.next()) + { + 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..74ac1a6 --- /dev/null +++ b/src/main/java/Controllers/TraiteClt/TraiteCltGestionController.java @@ -0,0 +1,432 @@ +package Controllers.TraiteClt; + +import Models.TraiteClt.TraiteCltGestionDB; +import Models.TraiteClt.TraiteCltGestionListe; +import javafx.scene.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(); + } + } + }); + + 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..57314ab --- /dev/null +++ b/src/main/java/Controllers/TraiteClt/TraiteCltPrintRetardController.java @@ -0,0 +1,72 @@ +package Controllers.TraiteClt; + +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..307ee7f --- /dev/null +++ b/src/main/java/Controllers/TraiteClt/TraiteCltRetardController.java @@ -0,0 +1,450 @@ +package Controllers.TraiteClt; + +import Models.Stock.StockDB; +import Models.TraiteClt.TraiteCltDB; +import Models.TraiteClt.TraiteCltGestionListe; +import javafx.scene.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 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..7f2434f --- /dev/null +++ b/src/main/java/Controllers/Traitement/Adaptateur.java @@ -0,0 +1,443 @@ +/* + * 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.LocalTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Random; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; +import java.util.regex.Pattern; +import javafx.collections.ObservableList; + +/** + * @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":""); + } + } + + + public static List getUniqueRandomObjectList(ObservableList list, int count) + { + List tempList = new ArrayList<>(list); + Collections.shuffle(tempList); + return tempList.subList(0, count); + } + + public static T getRandomObject(ObservableList list) + { + Random random = new Random(); + int randomIndex = random.nextInt(list.size()); + return list.get(randomIndex); + } + + public static int getRandomValueBetween(int min, int max) + { + Random random = new Random(); + return random.nextInt((max - min) + 1) + min; + } + + public static LocalDate getRandomDateBetween(LocalDate minDate, LocalDate maxDate) { + long daysBetween = ChronoUnit.DAYS.between(minDate, maxDate); + long randomDays = ThreadLocalRandom.current().nextLong(daysBetween + 1); + return minDate.plusDays(randomDays); + } + + public static String getRandomTimeBetween(LocalTime minTime, LocalTime maxTime) { + long minSeconds = minTime.toSecondOfDay(); + long maxSeconds = maxTime.toSecondOfDay(); + long randomSeconds = ThreadLocalRandom.current().nextLong(minSeconds, maxSeconds); + + LocalTime randomTime = LocalTime.ofSecondOfDay(randomSeconds); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); + + return randomTime.format(formatter); + } + + public static int[] generateUniqueRandomArray(int size, int maxValue) + { + Random random = new Random(); + Set uniqueValues = new HashSet<>(); + + while (uniqueValues.size() < size) { + int randomValue = random.nextInt(maxValue + 1); + uniqueValues.add(randomValue); + } + + int[] resultArray = new int[size]; + int index = 0; + for (int value : uniqueValues) { + resultArray[index++] = value; + } + + return resultArray; + } + +} diff --git a/src/main/java/Controllers/Traitement/MyWindow.java b/src/main/java/Controllers/Traitement/MyWindow.java new file mode 100644 index 0000000..8d245e9 --- /dev/null +++ b/src/main/java/Controllers/Traitement/MyWindow.java @@ -0,0 +1,114 @@ +/* + * 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 org.apache.log4j.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 Ben Tili + */ +public class MyWindow { + + Logger logger = Logger.getLogger(MyWindow.class.getName()); + + 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.error("MyWindow : Refresh :" + ex.getMessage()); + } + } + + 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..6be662f --- /dev/null +++ b/src/main/java/Controllers/Traitement/ParametreSystem.java @@ -0,0 +1,203 @@ +package Controllers.Traitement; + +import Models.User.User; +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; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.io.BufferedReader; +import java.io.InputStreamReader; + +import java.net.HttpURLConnection; +import java.net.URL; +/** + * @author Maher + */ +public class ParametreSystem +{ + public static boolean ErrorShowLogger ; + public static boolean ErrorShowDialog ; + + 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 boolean SetJsonParametre(String strUrl) + { + try { + URL url = new URL(strUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + if (connection.getResponseCode() == 200) + { + String jsonResponse = fetchJsonData(connection, strUrl); + JsonObject jsonObject = JsonParser.parseString(jsonResponse).getAsJsonObject(); + // Vous pouvez maintenant utiliser les données JSON analysées, par exemple : + User.idprofile = 2; + User.nom = jsonObject.get("UserNom").getAsString(); + User.prenom = jsonObject.get("UserPrenom").getAsString(); + User.UserLocal = "Magasin I"; + User.SotckNegatif= true; + + CompanyName = jsonObject.get("CompanyName").getAsString(); + CompanyPlace = jsonObject.get("CompanyPlace").getAsString(); + CompanyAddress = jsonObject.get("CompanyAddress").getAsString(); + CompanySIREN = jsonObject.get("CompanySIREN").getAsString(); + CompanyMF = jsonObject.get("CompanyMF").getAsString(); + CompanyIF = jsonObject.get("CompanyIF").getAsString(); + CompanyTele = jsonObject.get("CompanyTele").getAsString(); + CompanyFax = jsonObject.get("CompanyFax").getAsString(); + CompanyMail = jsonObject.get("CompanyMail").getAsString(); + CompanySite = jsonObject.get("CompanySite").getAsString(); + + NomLocalPC = "Magasin I"; + Timbre = jsonObject.get("Timbre").getAsString(); + + CurrencySign = jsonObject.get("CurrencySign").getAsString(); + CurrencyName = jsonObject.get("CurrencyName").getAsString(); + CurrencyThousandth = jsonObject.get("CurrencyThousandth").getAsString(); + + Bank = jsonObject.get("Bank").getAsString(); + RIP = jsonObject.get("RIP").getAsString(); + RIB = jsonObject.get("RIB").getAsString(); + return true; + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } + return false; + } + + private String fetchJsonData(HttpURLConnection connection, String urlString) throws Exception + { + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuilder content = new StringBuilder(); + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + in.close(); + connection.disconnect(); + + return content.toString(); + } + + public void SetParametre() + { + ParametreSystem.ErrorShowLogger = true; + ParametreSystem.ErrorShowDialog = true; + + 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 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..77de331 --- /dev/null +++ b/src/main/java/Controllers/Traitement/contro.java @@ -0,0 +1,323 @@ +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 ; + } + } + +} diff --git a/src/main/java/Controllers/User/AddUserController.java b/src/main/java/Controllers/User/AddUserController.java new file mode 100644 index 0000000..0ef6622 --- /dev/null +++ b/src/main/java/Controllers/User/AddUserController.java @@ -0,0 +1,26 @@ +package Controllers.User; + +import Controllers.Dialog.ShowDialog; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.Button; + + + +/** + * @author Maher Ben Tili + */ +public class AddUserController{ + + + @FXML + private Button ajouter; + + + + @FXML + private void handleButtonAction(ActionEvent event){ + + } + +} diff --git a/src/main/java/Controllers/User/GestionUtilisateurController.java b/src/main/java/Controllers/User/GestionUtilisateurController.java new file mode 100644 index 0000000..fb8e14b --- /dev/null +++ b/src/main/java/Controllers/User/GestionUtilisateurController.java @@ -0,0 +1,90 @@ +/* + * 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 Ben Tili + */ +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..64d5c12 --- /dev/null +++ b/src/main/java/Controllers/User/ProfileController.java @@ -0,0 +1,388 @@ +/* + * 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 java.net.URL; +import java.text.SimpleDateFormat; +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; + +/** + * @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; + + 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..c04b38f --- /dev/null +++ b/src/main/java/Controllers/VenteRapideClt/Step1CommandeCltController.java @@ -0,0 +1,1105 @@ +/* + * 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 org.apache.log4j.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 { + + Logger logger = Logger.getLogger(Step1CommandeCltController.class.getName()); + + @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 = devis.getClient(); + Step1CommandeClt.SetClient(); + }else if(devis.getTypeClient() == 1){ + Step1CommandeClt.CltEntreprise = devis.getEntreprise(); + Step1CommandeClt.SetClientEntre(); + }else if(devis.getTypeClient() == 2){ + Step1CommandeClt.CltPassager = devis.getPassager(); + Step1CommandeClt.SetClientPassager(); + } + + 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.error(" CommandeCltPasserController : DevisCltImportButtonAction :" + ex.getMessage()); + } + + } + }); + 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.error("RechercherClientPersonneController : ClientExisteDejatButtonAction :" + ex.getMessage()); + } + + } + }); + } + @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.error("RechercherClientEntrepriseController : ClientExisteDejatButtonAction :" + ex.getMessage()); + } + + } + }); + } + + @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..56821a3 --- /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(Adaptateur.getDefaultCurrentDate("yyyy-MM-dd")); + 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")); + 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.error("VenteSansFactureCltController : SaveVenteButtonAction :" + ex.getMessage()); + } + } + }); + 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 != null){ + 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..f6faed8 --- /dev/null +++ b/src/main/java/Controllers/VenteRapideClt/VenteSansFactureCltDetailController.java @@ -0,0 +1,220 @@ +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 org.apache.log4j.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{ + + Logger logger = Logger.getLogger(VenteSansFactureCltDetailController.class.getName()); + + @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.error("VenteSansFactureCltDetailController : VenteSansFactureCltDetailController :" + ex.getMessage()); + } + } + + 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..e92c73f --- /dev/null +++ b/src/main/java/Models/BonLivraisonClt/BonLivraisonCltDB.java @@ -0,0 +1,426 @@ +package Models.BonLivraisonClt; + +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.H2JDBC; +import Models.Stock.StockDetail; +import Models.Stock.StockDetailDB; +import Models.User.User; +import org.apache.log4j.Logger; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author Maher Ben Tili + */ +public class BonLivraisonCltDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(BonLivraisonCltDB.class.getName()); + contro clt = new contro(); + + public BonLivraisonClt GetBonLivraisonClt(String id_bon_livraison) + { + BonLivraisonClt BonLivraison = new BonLivraisonClt(); + + String req = "SELECT *, to_char(date_livraison_prevu, 'dd/mm/yyyy') as date_livraison, to_char(date_creation, 'dd/mm/yyyy') as creation FROM bon_livraisonclt WHERE (idbon_livraisonclt = "+id_bon_livraison+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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_produit")); + 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){ + String codeclient = resultat.getString("id_clt_existe"); + BonLivraison.setCltPersonne(new ClientDB().getClient(codeclient)); + }else if(BonLivraison.getTypeClient()==1){ + String codeEntreprise = resultat.getString("id_clt_entreprise"); + BonLivraison.setCltEntreprise(new ClientEntrepriseDB().GetClientEtr(codeEntreprise)); + }else if(BonLivraison.getTypeClient()==2){ + String codePassageur = resultat.getString("id_clt_passageur"); + BonLivraison.setCltPassager(new ClientPassagerDB().getPassager(codePassageur)); + } + + String reqprod = "SELECT * FROM liste_prod_livraison WHERE (id_bon_livraison_clt = "+id_bon_livraison+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + ObservableList dataProdDev=FXCollections.observableArrayList(); + try { + ResultSet resulist = h2jdbc.selectFromDB(reqprod); + 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("GetBonLivraisonClt 2 Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonLivraisonCltDB : GetBonLivraisonClt 2 :" + ex.getMessage()); + } + } + } + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonLivraisonCltDB : GetBonLivraisonClt 1 :" + ex.getMessage()); + } + } + return BonLivraison; + } + + + + + + + + + public String AddBonLivraisonClt(BonLivraisonClt bon_livraison) + { + 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 = "now()"; + } + + String DateCreation = "'"+bon_livraison.getDateCreation()+"'"; + if(clt.isStringNull(bon_livraison.getDateCreation())){ + DateCreation = "now()"; + } + + 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_produit, 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+", '"+Adaptateur.addSlashes(bon_livraison.getAdresseLivraison())+"', "+Transporteur+", "+Frais+", "+PoidsProduits+", '"+bon_livraison.getTele1()+"', '"+bon_livraison.getTele2()+"', '"+ParametreSystem.CurrencySign+"', '"+totalhorstaxnet+"', '"+totaltva+"', '"+TotalRemise+"', '"+netapayer+"', '"+bon_livraison.getIdCommande()+"', '"+User.idprofile+"', "+DateCreation+", '"+ParametreSystem.NomLocalPC+"');"; + + String CodeBonLivraison = null; + try { + CodeBonLivraison = h2jdbc.InsertGetLastId(sql); + }catch(SQLException ex){ + System.err.println("AddBonLivraisonClt Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonLivraisonCltDB : AddBonLivraisonClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("AddBonLivraisonClt Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + if(CodeBonLivraison != null) + { + 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+"');"; + + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(Query); + if(nbr>0){ + ListStockDetail.add(new StockDetail(listeprod.getReference(), Adaptateur.StringToFloat(listeprod.getQuantite())* -1, null, null, CodeBonLivraison, null, null, null, bon_livraison.getDateCreation())); + new StockDetailDB().InsertStockDetail(ListStockDetail); + } + }catch(SQLException ex){ + System.err.println("AddBonLivraisonClt Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonLivraisonCltDB : AddBonLivraisonClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + } + return CodeBonLivraison; + } + + public ObservableList GetListBonLivraisonCltSotck(ObservableList DataListeproduit) + { + Integer indice = 0; + + String StringReference = ""; + while(indice BonLivraisonCltProduit = FXCollections.observableArrayList(); + + String req = "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+"); "; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("GetListBonLivraisonCltSotck Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonLivraisonCltDB : GetListBonLivraisonCltSotck :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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.isNumericNotnull(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.isNumericNotnull(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.isNumericNotnull(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, "+ + "to_char(bl_clt.heur_livraison, 'hh:ii') AS heur_livraison, "+ + "to_char(bl_clt.date_livraison_prevu, 'dd/mm/yyyy') AS date_livraison_prevu, "+ + "bl_clt.adresse_livraison, "+ + "bl_clt.transporteur, "+ + "bl_clt.id_commandeclt AS IdCommandeClt, "+ + "f_clt.idfactureclt AS IdFactureClt, "+ + "CASEWHEN(bl_clt.id_clt_entreprise IS NOT NULL, "+ + "bl_clt.id_clt_entreprise, "+ + "CASEWHEN(bl_clt.id_clt_existe IS NOT NULL, "+ + "bl_clt.id_clt_existe, "+ + "CASEWHEN(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+";"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonLivraisonCltDB : :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return data ; + } + + + public Integer nbrSearchBonLivraisonCltGestion(String IdBonLivrasionClt, String DateLivraison, String CodeClient, String IdFactureClt, String Transporteur, String AdresseLivraison) + { + String Where = ""; + + if(!clt.isNumericNotnull(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.isNumericNotnull(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.isNumericNotnull(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; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("SearchBonLivraisonCltGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonLivraisonCltDB : SearchBonLivraisonCltGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..cd5ba27 --- /dev/null +++ b/src/main/java/Models/BonReceptionFrs/BonReceptionDB.java @@ -0,0 +1,278 @@ +/* + * 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 java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import org.apache.log4j.Logger; +import Models.H2JDBC; + +/** + * @author Maher Ben Tili + */ +public class BonReceptionDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(BonReceptionDB.class.getName()); + contro clt = new contro(); + + 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 DateHeur = "'"+BonReception.getDate()+" "+BonReception.getHeur()+"'"; + if(clt.isStringNull(BonReception.getDate())){ + DateHeur = "now()"; + } + + 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+"', "+DateHeur+", "+Transporteur+", "+NetPayer+", '"+Fournisseur+"', '"+Local+"', '"+User.idprofile+"', "+IdFactureFrs+")"; + try { + String IdBonReception = h2jdbc.InsertGetLastId(Query); + if(IdBonReception != null) + { + 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; i getBonReceptionProduitList(String IdBonReception) + { + String req = "SELECT * FROM list_prod_reception_frs, produit WHERE (id_bonreception_frs = "+IdBonReception+") AND (list_prod_reception_frs.reference = produit.reference) ;"; + + ObservableList ObservableListBonReceptionProduit= FXCollections.observableArrayList(); + try { + ResultSet ResultListBonRecepProd = h2jdbc.selectFromDB(req); + 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("getBonReceptionProduitList Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonReceptionDB : getBonReceptionProduitList :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ObservableListBonReceptionProduit; + } + + + public ObservableList getBonReceptionNotFact(String KeyWordSearch) + { + String req = "SELECT BR.*, to_char(BR.date_reception, 'dd/mm/yyyy') as date_recep, to_char(BR.date_reception, 'hh:ii') as heur_recep, F.nom " + + " FROM bonreception_frs BR, fournisseur F " + + " WHERE (BR.id_fournisseur = F.id_fournisseur) AND (id_facture_frs IS NULL) "+KeyWordSearch+" " + + " ORDER BY BR.id_bonreception DESC;"; + + ObservableList ObservableListBonReception= FXCollections.observableArrayList(); + try { + ResultSet ResultListBonRecepProd = h2jdbc.selectFromDB(req); + 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("getBonReceptionNotFact Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonReceptionDB : getBonReceptionNotFact :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ObservableListBonReception; + } + + + + public ObservableList getBonReceptionByFact(String IdFacture) + { + ObservableList ObservableListBonReception= FXCollections.observableArrayList(); + + String req = "SELECT BR.*, to_char(BR.date_reception, 'dd/mm/yyyy') as date_recep, to_char(BR.date_reception, 'hh:ii') as heur_recep, F.nom FROM bonreception_frs BR, fournisseur F WHERE (BR.id_fournisseur = F.id_fournisseur) AND (id_facture_frs = "+IdFacture+") ORDER BY BR.id_bonreception DESC;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("getBonReceptionByFact Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonReceptionDB : getBonReceptionByFact :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..92dd245 --- /dev/null +++ b/src/main/java/Models/BonReceptionFrs/BonReceptionGestionDB.java @@ -0,0 +1,159 @@ +package Models.BonReceptionFrs; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.contro; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.ParametreSystem; +import org.apache.log4j.Logger; +import Models.H2JDBC; + +/** + * @author Maher Ben Tili + */ +public class BonReceptionGestionDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(BonReceptionGestionDB.class.getName()); + 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.isNumericNotnull(Numero)){ + Where += " (BR.numero = '"+Numero+"') AND "; + } + + if(!clt.isStringNull(Transporteur)){ + Where += " (BR.transporteur LIKE '%"+Adaptateur.addSlashes(Transporteur)+"%') AND "; + } + + if(!clt.isNumericNotnull(Facture)){ + Where += " (BR.id_facture_frs = '"+Facture+"') AND "; + } + + if(!clt.isStringNull(DateReception)){ + Where += " (CAST(BR.date_reception AS DATE) = '"+DateReception+"') AND "; + } + + if(!clt.isNumericNotnull(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_fournisseur) AND " + Where; + }else{ + Where = " WHERE (BR.id_fournisseur = F.id_fournisseur) "; + } + + String req="SELECT BR.*, to_char(BR.date_reception, 'dd/mm/yyyy') as DateReception, to_char(BR.date_reception, 'hh:ii:ss') as HeurReception , F.nom " + + " FROM bonreception_frs BR, fournisseur F " + + Where + + " ORDER BY BR.date_reception DESC " + + "LIMIT "+debut+" , "+nbr+" ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("SearchBonReceptionGestionFrs Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonReceptionGestionDB : SearchBonReceptionGestionFrs :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return data ; + } + + public Integer nbrBonReceptionGestionFrsGestion(String Numero, String Transporteur, String Facture, String DateReception, String Fournisseur, String LocalReception) + { + String Where = ""; + + if(!clt.isNumericNotnull(Numero)){ + Where += " (id_bonreception = '"+Numero+"') AND "; + } + + if(!clt.isStringNull(Transporteur)){ + Where += " (transporteur LIKE '%"+Adaptateur.addSlashes(Transporteur)+"%') AND "; + } + + if(!clt.isNumericNotnull(Facture)){ + Where += " (id_facture_frs = '"+Facture+"') AND "; + } + + if(!clt.isStringNull(DateReception)){ + Where += " (CAST(date_reception AS DATE) = '"+DateReception+"') AND "; + } + + if(!clt.isNumericNotnull(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; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BonReceptionGestionDB : :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..fb296f2 --- /dev/null +++ b/src/main/java/Models/Caisse/CaisseDB.java @@ -0,0 +1,458 @@ +package Models.Caisse; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.ChequeClt.ChequeClt; +import Models.ChequeClt.ChequeCltDB; +import Models.FactureClt.FactureClt; +import Models.FactureClt.FactureCltDB; +import Models.H2JDBC; +import Models.TraiteClt.TraiteCltDB; +import Models.User.User; +import Models.VenteRapideClt.VenteSansFacture; +import Models.VenteRapideClt.VenteSansFactureDB; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Map; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + +/** + * @author maher Ben Tili + */ +public class CaisseDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(CaisseDB.class.getName()); + contro clt = new contro(); + + public String AddCaisse(CaisseClt caisse) + { + String DateMouvement = "now()"; + if(!clt.isStringNull(caisse.getDateMouvement())){ + DateMouvement = "'"+caisse.getDateMouvement()+"'"; + } + + 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 ("+DateMouvement+", "+caisse.getTypeMouvement()+", "+caisse.getIdTraitePaiementEspace()+", "+caisse.getIdTraitePaiementCarte()+", "+caisse.getIdTraitePaiementCheque()+", "+caisse.getCodeFactureClt()+", "+caisse.getIdAvoirFactClt()+", "+caisse.getIdHistoriqueCheque()+","+caisse.getIdVenteSansFactureClt()+", "+caisse.getMontant()+", '"+ParametreSystem.NomLocalPC+"', "+User.idprofile+")"; + String nbr = "0"; + try { + nbr = h2jdbc.InsertGetLastId(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CaisseClt : AddCaisse :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return nbr; + } + + 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 req = " SELECT VSF.*, C.numero, C.banque, B.num_transation, B.nom_banque, to_char(date_operation, 'dd/mm/yyyy hh:ii') 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 (CAST(VSF.date_operation AS DATE) BETWEEN '"+DateDebut+"' AND '"+DateFin+"'); "; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error(" :GetDataAvoirVSF :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + return DataAvoirVSFList; + } + + public ObservableList GetDataFraisFrs(String Datedebut, String DateFin) + { + ObservableList DataFraisList = FXCollections.observableArrayList(); + + String req = " SELECT *, to_char(date_creation, 'dd/mm/yyyy hh:ii') as date_creat " + + " FROM frais " + + " WHERE (CAST(date_creation AS DATE) BETWEEN '"+Datedebut+"' AND '"+DateFin+"') "; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error(" : GetDataFraisFrs :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return DataFraisList; + } + + public ObservableList GetDataReglementFrs(String Datedebut, String DateFin) + { + ObservableList DataReglementList = FXCollections.observableArrayList(); + + String req = " SELECT R.*, F.id_fournisseur, F.nom, R.date_creation as datecreation, to_char(R.date_creation, 'dd/mm/yyyy hh:ii') 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_fournisseur = R.id_fournisseur) " + + " 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 (CAST(R.date_creation AS DATE) BETWEEN '"+Datedebut+"' AND '"+DateFin+"')" + + " AND (R.mode_paiement NOT LIKE '3'); "; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + String id_reglement = resultat.getString("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("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("montant"); + espece = resultat.getString("id_fournisseur")+"-"+resultat.getString("nom"); + }else if(mode_paiement.equals("1")){ + type_mouvement = "Chèque"; + cheque = resultat.getString("numero")+"-"+resultat.getString("banque"); + montant = resultat.getFloat("montant"); + }else if(mode_paiement.equals("2")){ + type_mouvement = "Carte Bancaire"; + carte_bancaire = resultat.getString("numero_transaction")+"-"+resultat.getString("banque"); + montant = resultat.getFloat("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()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("GetDataReglementFrs : GetDataReglementFrs :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return DataReglementList; + } + + public ObservableList GetDataTraiteFrs(String Datedebut, String DateFin) + { + ObservableList DataReglementList = FXCollections.observableArrayList(); + + String req = " SELECT *, " + + " to_char(T.date_creation, 'dd/mm/yyyy') as date_pai " + + " FROM traite_frs T, reglement_frs R, fournisseur F " + + " WHERE (T.id_reglement_frs = R.id_reglement_frs) " + + " AND (R.id_fournisseur = F.id_fournisseur) " + + " AND (T.date_paiement BETWEEN '"+Datedebut+"' AND '"+DateFin+"'); "; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + String id_reglement = resultat.getString("id_traite_frs"); + + Float montant = resultat.getFloat("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()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CaisseDB : GetDataTraiteFrs :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return DataReglementList; + } + + public ObservableList GetDataCaisseCltEnter(String Datedebut, String DateFin) + { + String req = " SELECT id_caisseclt, to_char(date_mouvement, 'dd/mm/yyyy hh:ii') 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 (CAST(date_mouvement AS DATE) BETWEEN '"+Datedebut+"' AND '"+DateFin+"') " + + " AND (local_nom ='"+ParametreSystem.NomLocalPC+"') " + + " AND (type_mouvement IN (0,1,2,3,4,5)); "; + + ObservableList CaisseCltEnterList = FXCollections.observableArrayList(); + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error(" : GetDataCaisseCltEnter :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..ca9d568 --- /dev/null +++ b/src/main/java/Models/Caisse/CarteBancaireCltDB.java @@ -0,0 +1,141 @@ +package Models.Caisse; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.H2JDBC; +import java.sql.ResultSet; +import java.sql.SQLException; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class CarteBancaireCltDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(CarteBancaireCltDB.class.getName()); + 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 req = "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()+"')"; + + String IdCarteBancaire = null; + try { + IdCarteBancaire = h2jdbc.InsertGetLastId(req); + CarteBancaire.setIdCarteBancaire(IdCarteBancaire); + }catch(SQLException ex){ + System.err.println("SetCarteBancaire Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CarteBancaireCltDB : SetCarteBancaire :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return CarteBancaire; + } + + public CarteBancaireClt getCarteBancaireClt(String IdCarteBancaire) + { + CarteBancaireClt CarteBancaire = new CarteBancaireClt(); + + String req = "SELECT *, to_char(date_transation, 'dd/mm/yyyy hh:ii:ss') as date_time_transation FROM carte_bancaire_clt WHERE id_carte_bancaire = "+IdCarteBancaire+";"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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("getCarteBancaireClt Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CarteBancaireCltDB : getCarteBancaireClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return CarteBancaire; + } + + public CarteBancaireClt getCarteBancaireByFactureClt(String IdFactureClt) + { + CarteBancaireClt CarteBancaire = new CarteBancaireClt(); + + String req = "SELECT *, to_char(date_transation, 'dd/mm/yyyy hh:ii:ss') as date_time_transation FROM carte_bancaire_clt WHERE id_factureclt = "+IdFactureClt+";"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CarteBancaireCltDB : getCarteBancaireByFactureClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..f489ffc --- /dev/null +++ b/src/main/java/Models/Caisse/FraisDB.java @@ -0,0 +1,268 @@ + +package Models.Caisse; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.H2JDBC; +import Models.User.Profile; +import Models.User.ProfileDB; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class FraisDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(FraisDB.class.getName()); + contro clt = new contro(); + + public Frais getFrais(String IdFrais) + { + Frais frais = new Frais(); + String req = "SELECT *, to_char(date_cheque, 'dd/mm/yyyy') as datecheque, to_char(date_creation, 'dd/mm/yyyy hh:ii') as datecreation FROM frais WHERE id_frais = "+IdFrais+" ;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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("getFrais Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FraisDB : getFrais :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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 req = "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()+"');"; + + String IdFrais = null; + try { + IdFrais = h2jdbc.InsertGetLastId(req); + frais.setIdFrais(IdFrais); + }catch(SQLException ex){ + System.err.println("setFrais Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FraisDB : setFrais :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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.isNumericNotnull(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 += " (CAST(frais.date_creation AS DATE) = '"+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 *, to_char(frais.date_creation, 'dd/mm/yyyy hh:ii') as date_creat " + + " FROM frais, profile " + + Where + + "ORDER BY id_frais DESC " + + "LIMIT "+debut+" , "+nbr+" ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("SearchFraisGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FraisDB : SearchFraisGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ListFrais; + } + + public Integer nbrFraisGestion(String CodeFrais, String ObjectFrais, String Presonne, String Locale, String Paiement, String DateCreation ) + { + String Where = ""; + + if(!clt.isNumericNotnull(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 += " (CAST(date_creation AS DATE) = '"+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; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FraisDB : nbrFraisGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..89e5d93 --- /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 Maher Ben Tili + */ +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..8c549f5 --- /dev/null +++ b/src/main/java/Models/Categorie/CategorieDB.java @@ -0,0 +1,134 @@ +package Models.Categorie; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.ParametreSystem; +import Models.H2JDBC; +import org.apache.log4j.Logger; +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 CategorieDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(CategorieDB.class.getName()); + + public boolean addCategorie(Categorie categorie) + { + String req = "INSERT INTO categorie (nomcategorie, unitemesure) VALUES ('"+categorie.getNomcategorie()+"', '"+categorie.getUnitemesure()+"');"; + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("addCategorie Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CategorieDB : addCategorie :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + + + public boolean verifyCategorie(String cat) + { + String sql="SELECT COUNT(*) FROM categorie WHERE nomcategorie LIKE '"+cat+"' ;"; + int nombreLignes = 0; + try { + ResultSet resultat = h2jdbc.selectFromDB(sql); + resultat.next(); + nombreLignes = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CategorieDB : verifyCategorie :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nombreLignes>0); + } + + + public ArrayList getListCategorie() + { + ArrayList listcategorie = new ArrayList<>(); + String req = "SELECT nomcategorie FROM categorie ;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + String nomcategorie=resultat.getString("nomcategorie"); + listcategorie.add(nomcategorie); + } + } catch(SQLException ex){ + System.err.println("getListCategorie Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CategorieDB : getListCategorie :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return listcategorie ; + } + + public ObservableList GetCategorie(String Local, String NomCategorie){ + + ObservableList DataCategorieListe = FXCollections.observableArrayList(); + + NomCategorie = NomCategorie.replaceAll("'","\\\\'"); + + String req = " 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; "; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("GetCategorie Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CategorieDB : GetCategorie :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..19c0659 --- /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 Maher Ben Tili + */ +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..a3b18b4 --- /dev/null +++ b/src/main/java/Models/ChequeClt/ChequeCltDB.java @@ -0,0 +1,1087 @@ +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 org.apache.log4j.Logger; +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.H2JDBC; +import Models.User.ProfileDB; + +/** + * @author Maher Ben Tili + */ +public class ChequeCltDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(ChequeCltDB.class.getName()); + 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, to_char(C.date_paiement, 'dd/mm/yyyy') 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);"; + + try { + ResultSet Result = h2jdbc.selectFromDB(req); + while (Result.next()){ + 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("getChequeCltByIdHistorique Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : getChequeCltByIdHistorique :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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, to_char(C.date_paiement, 'dd/mm/yyyy') 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);"; + try { + ResultSet Result = h2jdbc.selectFromDB(req); + while (Result.next()){ + 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("getChequeCltByFacture Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : getChequeCltByFacture :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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, to_char(C.date_paiement, 'dd/mm/yyyy') 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, " + + " to_char(C.date_payer, 'dd/mm/yyyy') 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);"; + } + try { + ResultSet Result = h2jdbc.selectFromDB(req); + while (Result.next()){ + 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("getChequeClt Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : getChequeClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return Cheque; + } + + + public ObservableList getListChequeHistorique(String id_cheque, Integer source) + { + ObservableList ListChequeHistorique = FXCollections.observableArrayList(); + + String req = ""; + if(source == 0){ + req = "SELECT C.id_historique_cheque_clt, C.etat_cheque, to_char(C.date, 'dd/mm/yyyy') AS date_operation, to_char(date, 'hh:ii:ss') 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){ + req = "SELECT C.id_historique_cheque_clt, C.etat_cheque, to_char(C.date, 'dd/mm/yyyy') AS date_operation, to_char(date, 'hh:ii:ss') 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) ; "; + } + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : getListChequeHistorique :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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()+"', now(), "+Cheque.getCodeFactureClt()+", '"+ParametreSystem.NomLocalPC+"', "+User.idprofile+")"; + String id = null; + try { + id = h2jdbc.InsertGetLastId(req); + }catch(SQLException ex){ + System.err.println("AddChequeClt Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : AddChequeClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return id; + } + + 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.isNumericNotnull(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.isNumericNotnull(CodeClt)){ + WhereReq1 += " ( (O.codeclient = '"+CodeClt+"') OR (E.idcliententreprise = '"+CodeClt+"' ) ) AND "; + WhereReq2 += " ( (O.codeclient = '"+CodeClt+"') OR (E.idcliententreprise = '"+CodeClt+"' ) ) AND "; + } + + if(!clt.isNumericNotnull(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.isNumericNotnull(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, to_char(C.date_paiement, 'dd/mm/yyyy') 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, to_char(C.date_payer, 'dd/mm/yyyy') 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 = h2jdbc.selectFromDB(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("SearchChequeCltGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : SearchChequeCltGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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.isNumericNotnull(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.isNumericNotnull(CodeClt)){ + WhereReq1 += " ( (O.codeclient = '"+CodeClt+"') OR (E.idcliententreprise = '"+CodeClt+"' ) ) AND "; + WhereReq2 += " ( (O.codeclient = '"+CodeClt+"') OR (E.idcliententreprise = '"+CodeClt+"' ) ) AND "; + } + + if(!clt.isNumericNotnull(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.isNumericNotnull(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 = h2jdbc.selectFromDB(req); + while (resultat.next()){ + Sommme += resultat.getInt("nbr_cheque"); + } + } catch(SQLException ex){ + System.err.println("nbrChequeCltGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : nbrChequeCltGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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+"', now(), '"+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+"', now(), '"+Cheque.getCodeChequeClt()+"', '"+ParametreSystem.NomLocalPC+"', '"+User.idprofile+"');"; + QueryUpdate = "UPDATE traite_paiement_cheque_clt SET etat_cheque='"+Etat+"' WHERE id_traite_paiement_cheque='"+Cheque.getCodeChequeClt()+"';"; + } + try { + h2jdbc.InsertUpdateDeleteInTable(QueryUpdate); + }catch(SQLException ex){ + System.err.println("setHistoriqueCheque Erreur SQL ! \n"+ex.getMessage()); + System.out.println(QueryUpdate); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : setHistoriqueCheque :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + String IdHistoriqueCheque = null; + try { + IdHistoriqueCheque = h2jdbc.InsertGetLastId(QueryINSERT); + }catch(SQLException ex){ + System.err.println("setHistoriqueCheque Erreur SQL ! \n"+ex.getMessage()); + System.out.println(QueryINSERT); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : setHistoriqueCheque :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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, to_char(C.date_paiement, 'dd/mm/yyyy') 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, to_char(C.date_payer, 'dd/mm/yyyy') 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 = h2jdbc.selectFromDB(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){ + System.err.println("GetDataChequeAverser Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : GetDataChequeAverser :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + 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+"');"; + try { + NbrUpdate += h2jdbc.InsertUpdateDeleteInTable(QueryUpdate1); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(QueryUpdate1); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : UpdateChequeCltVerser :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + String QueryInsert1 = "INSERT INTO historique_cheque_clt (etat_cheque, date, id_chequeclt, local_nom, id_profile) VALUES "; + for (String IdCheque : AryChequeClt) { + QueryInsert1 += " ('1', now(), '"+IdCheque+"', '"+ParametreSystem.NomLocalPC+"', '"+User.idprofile+"'),"; + } + QueryInsert1 = QueryInsert1.substring(0, QueryInsert1.length()-1) + ";"; + try { + h2jdbc.InsertUpdateDeleteInTable(QueryInsert1); + }catch(SQLException ex){ + System.err.println("UpdateChequeCltVerser Erreur SQL ! \n"+ex.getMessage()); + System.out.println(QueryInsert1); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : UpdateChequeCltVerser :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + 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+"');"; + try { + NbrUpdate += h2jdbc.InsertUpdateDeleteInTable(QueryUpdate2); + }catch(SQLException ex){ + System.err.println("UpdateChequeCltVerser Erreur SQL ! \n"+ex.getMessage()); + System.out.println(QueryUpdate2); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : UpdateChequeCltVerser :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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', now(), '"+IdCheque+"', '"+ParametreSystem.NomLocalPC+"', '"+User.idprofile+"'),"; + } + QueryInsert2 = QueryInsert2.substring(0, QueryInsert2.length()-1) + ";"; + try { + h2jdbc.InsertUpdateDeleteInTable(QueryInsert2); + }catch(SQLException ex){ + System.err.println("UpdateChequeCltVerser Erreur SQL ! \n"+ex.getMessage()); + System.out.println(QueryInsert2); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : UpdateChequeCltVerser :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + 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 += " (CAST (C.date_paiement AS DATE) >= '"+DateDebut+"') AND "; + WhereReq2 += " (CAST(C.date_payer AS DATE) >= '"+DateDebut+"') AND "; + } + + if(!clt.isNumericNotnull(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.isNumericNotnull(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, to_char(C.date_paiement, 'dd/mm/yyyy') 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, to_char(C.date_payer, 'dd/mm/yyyy') 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 = h2jdbc.selectFromDB(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){ + System.err.println("SearchChequeCltProvision Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : SearchChequeCltProvision :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + 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 += " (CAST(C.date_paiement AS DATE) >= '"+DateDebut+"') AND "; + WhereReq2 += " (CAST(C.date_payer AS DATE) >= '"+DateDebut+"') AND "; + } + + if(!clt.isNumericNotnull(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.isNumericNotnull(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; + try { + ResultSet resultat1 = h2jdbc.selectFromDB(req1); + resultat1.next(); + sommme1 = resultat1.getInt(1); + } catch(SQLException ex){ + System.err.println("nbrChequeCltProvision Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req1); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : nbrChequeCltProvision :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + try { + ResultSet resultat2 = h2jdbc.selectFromDB(req2); + resultat2.next(); + sommme2 = resultat2.getInt(1); + } catch(SQLException ex){ + System.err.println("nbrChequeCltProvision Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req2); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : nbrChequeCltProvision :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return sommme1 + sommme2 ; + } + + + public ChequeClt getChequeClt(String IdCheque){ + + ChequeClt Cheque = new ChequeClt(); + + String req = "SELECT * FROM cheque_clt WHERE id_chequeclt = "+IdCheque+";"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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("getChequeClt Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ChequeCltDB : getChequeClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..bfc1f80 --- /dev/null +++ b/src/main/java/Models/Client/Client.java @@ -0,0 +1,212 @@ +package Models.Client; + +import java.time.LocalDate; +import java.util.Date; + +/** + * @author Maher Ben Tili + */ +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 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..fde7b42 --- /dev/null +++ b/src/main/java/Models/Client/ClientDB.java @@ -0,0 +1,387 @@ +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.H2JDBC; +import java.io.UnsupportedEncodingException; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class ClientDB { + + Logger logger = Logger.getLogger(ClientDB.class.getName()); + H2JDBC h2jdbc = new H2JDBC(); + contro clt = new contro(); + ShowDialog SD = new ShowDialog(); + + public boolean addClient(Client clt) + { + 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+"', now());"; + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("addClient Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientDB : addClient :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + 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+"');"; + + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientDB : :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + public Client getClient(String code) + { + Client clt = new Client(); + String sql="SELECT *, to_char(naissance, 'dd/mm/yyyy') AS naissance_string FROM client WHERE (codeclient= "+code+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet resultat = h2jdbc.selectFromDB(sql); + while (resultat.next()){ + clt.setCodeclient(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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientDB : getClient :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return clt ; + } + + public int getidClient() + { + + int id =0 ; + String sql="SELECT MAX(codeclient) FROM client WHERE (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet Resultat = h2jdbc.selectFromDB(sql); + Resultat.next(); + id = Resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientDB : :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return id ; + } + + + public boolean verifyIdClient(int id) + { + boolean result = false; + String sql="SELECT codeclient FROM client WHERE (codeclient= "+id+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet resultat = h2jdbc.selectFromDB(sql); + resultat.last(); + if(resultat.getRow()>0){ + result= true ; + } + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientDB : verifyIdClient :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return result; + } + + public boolean verifyCinClient(int cin) + { + int resultCIN = 0; + String sql="SELECT COUNT(codeclient) FROM client WHERE (cin= "+cin+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + try { + ResultSet Resultat = h2jdbc.selectFromDB(sql); + Resultat.next(); + resultCIN = Resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientDB : verifyCinClient :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (resultCIN>0); + } + + /********************************** 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.isNumericNotnull(Code)){ + Where += " (codeclient = '"+Adaptateur.addSlashes(Code)+"') AND "; + } + + if(!clt.isNumericNotnull(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 += " (CAST(naissance AS DATE) = '"+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 *, to_char(naissance, 'dd/mm/yyyy') AS naissance_string " + + "FROM client " + + Where + + "ORDER BY codeclient DESC " + + "LIMIT "+debut+" , "+nbr+" ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("SearchCltPersonneGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientDB : SearchCltPersonneGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return data ; + } + + public Integer nbrCltPersonneGestion( String Code, String Cin, String NomComplet, String Nom, String Prenom, String Naissance) + { + String Where = ""; + + if(!clt.isNumericNotnull(Code)){ + Where += " (codeclient = '"+Adaptateur.addSlashes(Code)+"') AND "; + } + + if(!clt.isNumericNotnull(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 += " (CAST(naissance AS DATE) = '"+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; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("nbrCltPersonneGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientDB : nbrCltPersonneGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return sommme ; + } + + public ObservableList getAllClient() + { + ObservableList data = FXCollections.observableArrayList(); + + String req="SELECT *, to_char(naissance, 'dd/mm/yyyy') AS naissance_string FROM client ORDER BY codeclient DESC ; "; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + Client client = new Client(); + client.setCodeclient(resultat.getString( "codeclient" )); + client.setCinString(resultat.getString( "cin" )); + client.setNomcomplet(resultat.getString("nomcomplet")); + client.setNom(resultat.getString("nom")); + client.setPrenom(resultat.getString("prenom")); + client.setNaissance(resultat.getDate("naissance")); + client.setAdresse(resultat.getString("adresse")); + client.setTelefixString(resultat.getString( "telefix" )); + client.setTelemobileString(resultat.getString( "telemobile" )); + client.setSexe(resultat.getInt( "sexe" )); + data.add(client); + } + } catch(SQLException ex){ + System.err.println("SearchCltPersonneGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientDB : getAllClient :" + ex.getMessage()); + } + } + return data ; + } +} 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..625e82a --- /dev/null +++ b/src/main/java/Models/Client/ClientEntrepriseContactDB.java @@ -0,0 +1,160 @@ +package Models.Client; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.H2JDBC; +import org.apache.log4j.Logger; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * @author Maher Ben Tili + */ +public class ClientEntrepriseContactDB { + + Logger logger = Logger.getLogger(ClientEntrepriseContactDB.class.getName()); + + H2JDBC h2jdbc = new H2JDBC(); + + contro clt = new contro(); + + ShowDialog SD = new ShowDialog(); + + public boolean addClientEntrepriseContact(ClientEntrepriseContact CltEtrCon) + { + String req = "INSERT INTO cltcontact (nom, prenom, cin, gsm1, gsm2, mail, idcltentreprise, local_nom) VALUES ('"+CltEtrCon.getNom()+"', '"+CltEtrCon.getPrenom()+"', "+CltEtrCon.getCIN()+", "+CltEtrCon.getTele1()+", "+CltEtrCon.getTele2()+", '"+CltEtrCon.getMail()+"', '"+CltEtrCon.getIdcltentreprise()+"', '"+ParametreSystem.NomLocalPC+"'); " ; + + int nbrInsert = 0; + try { + nbrInsert = h2jdbc.InsertUpdateDeleteInTable(req); + } catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseContactDB : addClientEntrepriseContact :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + return (nbrInsert>0); + } + + public ClientEntrepriseContact getContactByIdContact(String idContactEtr) + { + ClientEntrepriseContact ContactEtr = new ClientEntrepriseContact(); + + String sql="SELECT * FROM cltcontact WHERE (codeclient= "+idContactEtr+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(sql); + while (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); + + logger.error("ClientEntrepriseContactDB : getContactByIdContact :" + ex.getMessage()); + + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + return ContactEtr ; + } + + public ClientEntrepriseContact getContactByIdEntreprise(String idEtr) + { + ClientEntrepriseContact ContactEtr = new ClientEntrepriseContact(); + + String sql="SELECT * FROM cltcontact WHERE (idcltentreprise= "+idEtr+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(sql); + while (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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseContactDB : getContactByIdEntreprise :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ContactEtr ; + } + + + public boolean updateEtrContact(ClientEntrepriseContact ContactEtr) + { + 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()+"');"; + + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseContactDB : updateEtrContact :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + +} diff --git a/src/main/java/Models/Client/ClientEntrepriseDB.java b/src/main/java/Models/Client/ClientEntrepriseDB.java new file mode 100644 index 0000000..4bd3710 --- /dev/null +++ b/src/main/java/Models/Client/ClientEntrepriseDB.java @@ -0,0 +1,378 @@ +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.H2JDBC; +import Models.Home.HomeDB; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + + +/** + * @author Maher Ben Tili + */ +public class ClientEntrepriseDB { + + H2JDBC h2jdbc = new H2JDBC(); + Logger logger = Logger.getLogger(HomeDB.class.getName()); + contro clt = new contro(); + ShowDialog SD = new ShowDialog(); + + public boolean verifyCodeEntreprise(int code) + { + int nbr = 0 ; + + String sql="SELECT COUNT(*) FROM cltentreprise WHERE (idcliententreprise = "+code+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet resultat = h2jdbc.selectFromDB(sql); + resultat.next(); + nbr = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseDB : verifyCodeEntreprise :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + return (nbr>0) ; + } + + + + public ClientEntreprise GetClientEtr(String CodeEtr) + { + ClientEntreprise ClientEtr = new ClientEntreprise(); + + String sql="SELECT * FROM cltentreprise WHERE (idcliententreprise = "+CodeEtr+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + + ResultSet resultat = h2jdbc.selectFromDB(sql); + try { + while (resultat.next()){ + 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.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseDB : GetClientEtr :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + return ClientEtr ; + } + + public int getidClientEtr() + { + int id = -1 ; + + String sql = "SELECT MAX(idcliententreprise) FROM cltentreprise WHERE local_nom = '"+ParametreSystem.NomLocalPC+"';"; + + ResultSet Resultat = h2jdbc.selectFromDB(sql); + try { + Resultat.next(); + id = Resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseDB : getidClientEtr :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + 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+"', now());"; + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseDB : addEntreprise :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + + public boolean updateEntreprise(ClientEntreprise CltEtr) + { + 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()+"');"; + + int nbrCltentreprise = 0; + try { + nbrCltentreprise = h2jdbc.InsertUpdateDeleteInTable(req); + if(nbrCltentreprise>0){ + return new ClientEntrepriseContactDB().updateEtrContact(CltEtr.getContact()); + }else{ + return false; + } + }catch(SQLException ex){ + + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseDB : updateEntreprise :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + 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.isNumericNotnull(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.isNumericNotnull(MatriculeEtr)){ + Where += " (matricule_fiscale ='"+Adaptateur.addSlashes(MatriculeEtr)+"') AND "; + } + + if(!clt.isStringNull(AdresseEtr)){ + Where += " (adresse LIKE'%"+Adaptateur.addSlashes(AdresseEtr)+"%') AND "; + } + + if(!clt.isNumericNotnull(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+" ;"; + + ResultSet resultat = h2jdbc.selectFromDB(req); + try { + 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); + + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseDB : SearchCltEntrepriseGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + return data ; + } + + public Integer nbrCltEntrepriseGestion(String CodeEtr, String NomEtr, String GerantEtr, String MatriculeEtr, String AdresseEtr, String TelephoneEtr) + { + String Where = ""; + + if(!clt.isNumericNotnull(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.isNumericNotnull(MatriculeEtr)){ + Where += " (matricule_fiscale ='"+Adaptateur.addSlashes(MatriculeEtr)+"') AND "; + } + + if(!clt.isStringNull(AdresseEtr)){ + Where += " (adresse LIKE'%"+Adaptateur.addSlashes(AdresseEtr)+"%') AND "; + } + + if(!clt.isNumericNotnull(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; + try { + ResultSet Resultat = h2jdbc.selectFromDB(req); + Resultat.next(); + sommme = Resultat.getInt(1); + } catch(SQLException ex){ + + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseDB : nbrCltEntrepriseGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + + SD.ShowAletDialog(); + } + } + return sommme ; + } + + public ObservableList getAllCltEntreprise() + { + ObservableList data = FXCollections.observableArrayList(); + + String req="SELECT * FROM cltentreprise ORDER BY idcliententreprise DESC "; + + ResultSet resultat = h2jdbc.selectFromDB(req); + try { + while (resultat.next()) + { + ClientEntreprise cltEntreprise = new ClientEntreprise(); + cltEntreprise.setCodeString(resultat.getString("idcliententreprise")); + cltEntreprise.setNom(resultat.getString("nomentrepise")); + cltEntreprise.setGerant(resultat.getString("gerant")); + cltEntreprise.setMatricule(resultat.getString("matricule_fiscale")); + cltEntreprise.setAdresse(resultat.getString("adresse")); + cltEntreprise.setTele1String(resultat.getString("telefix")); + cltEntreprise.setTele2String(resultat.getString("telefix2")); + data.add(cltEntreprise); + } + } catch(SQLException ex){ + + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientEntrepriseDB : SearchCltEntrepriseGestion :" + ex.getMessage()); + } + } + + return data ; + } +} diff --git a/src/main/java/Models/Client/ClientPassager.java b/src/main/java/Models/Client/ClientPassager.java new file mode 100644 index 0000000..c9b2cc2 --- /dev/null +++ b/src/main/java/Models/Client/ClientPassager.java @@ -0,0 +1,160 @@ +package Models.Client; + +/** + * @author Maher Ben Tili + */ +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 "Femme"; + }else if(sexe == 1){ + return "Homme"; + }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..4206b13 --- /dev/null +++ b/src/main/java/Models/Client/ClientPassagerDB.java @@ -0,0 +1,106 @@ +package Models.Client; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.H2JDBC; +import org.apache.log4j.Logger; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * @author Maher Ben Tili + */ +public class ClientPassagerDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(ClientPassagerDB.class.getName()); + contro clt = new contro(); + + public ClientPassager getPassager(String CodeClt) + { + ClientPassager CltPassager = new ClientPassager(); + String sql="SELECT * FROM cltpassageur WHERE (idcltpassageur = "+CodeClt+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet resultat = h2jdbc.selectFromDB(sql); + while (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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientPassagerDB : getClient :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return CltPassager; + } + + + + + public ClientPassager addPassager(ClientPassager CltPassager) + { + String Nom = "'"+Adaptateur.addSlashes(CltPassager.getNom())+"'"; + String Prenom = "'"+Adaptateur.addSlashes(CltPassager.getPrenom())+"'"; + String Adresse = "null"; + String Naissance = "null"; + String Tele = "null"; + String Gsm = "null"; + + if(!clt.isStringNull(CltPassager.getNaissance())){ + Naissance = "'"+CltPassager.getNaissance()+"'"; + } + + if(!clt.isStringNull(CltPassager.getAdresse())){ + Adresse = "'"+Adaptateur.addSlashes(CltPassager.getAdresse())+"'"; + } + + if(!clt.isStringNull(CltPassager.getTelefixString())){ + Tele = "'"+CltPassager.getTelefixString()+"'"; + } + + if(!clt.isStringNull(CltPassager.getTelemobileString())){ + Gsm = "'"+CltPassager.getTelemobileString()+"'"; + } + + String req = "INSERT INTO cltpassageur (nom, prenom, adresse, sexe, naissance, tele, gsm, local_nom, date_add) VALUES ("+Nom+", "+Prenom+", "+Adresse+", "+CltPassager.getSexe()+", "+Naissance+", "+Tele+", "+Gsm+", '"+ParametreSystem.NomLocalPC+"', now());"; + + String code = null; + try { + code = h2jdbc.InsertGetLastId(req); + CltPassager.setCodeclient(code); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ClientPassagerDB : addPassager :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..434c749 --- /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 Maher Ben Tili + */ +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..ff6ce35 --- /dev/null +++ b/src/main/java/Models/CommandeClt/CommandeCltDB.java @@ -0,0 +1,724 @@ +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.H2JDBC; +import Models.User.User; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class CommandeCltDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(CommandeCltDB.class.getName()); + 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 = "now()"; + + 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 = null; + try { + codecommandeclt = h2jdbc.InsertGetLastId(sql); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : AddCommandeClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + if(codecommandeclt != null) + { + 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+"');"; + + try { + h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : AddCommandeClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + } + return commandeclt ; + } + + public CommandeClt getCommandeClt(String codecommande) + { + CommandeClt commandeclt = new CommandeClt() ; + String req = "SELECT * FROM commandeclt where (idcommande = "+codecommande+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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.getPassager(resultat.getString("idcltpassageur"))); + } + + String reqprod = "SELECT * FROM liste_produit_commandeclt where (commande_idcommande = "+codecommande+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ObservableList dataProdDev=FXCollections.observableArrayList(); + ResultSet resulist = h2jdbc.selectFromDB(reqprod); + 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 exprod){ + System.err.println("Erreur SQL ! \n"+exprod.getMessage()); + System.out.println(reqprod); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : getCommandeClt :" + exprod.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(exprod.getMessage()+"\n"+exprod.getSQLState()); + SD.ShowAletDialog(); + } + } + } + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : getCommandeClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return commandeclt ; + } + + + public boolean UpdateCommandeCltSetIdBonLivraison(String codecommande, String id_bon_livraion) + { + String req = "UPDATE commandeclt SET id_bon_livraisonclt='"+id_bon_livraion+"' WHERE (idcommande='"+codecommande+"') AND (local_nom='"+ParametreSystem.NomLocalPC+"');"; + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : UpdateCommandeCltSetIdBonLivraison :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + + public boolean UpdateCommandeCltSetIdFacture(String codecommande, String id_facture) + { + if( clt.isStringNull(codecommande) || clt.isStringNull(id_facture) ){ + return false; + } + String req = "UPDATE commandeclt SET id_factureclt='"+id_facture+"' WHERE (idcommande='"+codecommande+"') AND (local_nom='"+ParametreSystem.NomLocalPC+"');"; + + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : UpdateCommandeCltSetIdFacture :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + /********************************** 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.isNumericNotnull(CodeCommande)){ + Where += " (comm.idcommande LIKE '%"+Adaptateur.addSlashes(CodeCommande)+"%') AND "; + } + + if(!clt.isNumericNotnull(CodeDevis)){ + Where += " (comm.iddevis LIKE '%"+Adaptateur.addSlashes(CodeDevis)+"%') AND "; + } + + + if(!clt.isNumericNotnull(CodeClient)){ + Where += " ((comm.idcliententreprise LIKE '%"+CodeClient+"%') OR (comm.codeclient LIKE '%"+CodeClient+"%') OR (comm.idcltpassageur LIKE '%"+CodeClient+"%')) AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (CAST(comm.date_commande AS DATE) = '"+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, to_char(comm.date_commande, 'dd/mm/yyyy') 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+ " ;" ; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : SearchCommande :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + 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.isNumericNotnull(CodeCommande)){ + Where += " (comm.idcommande LIKE '%"+Adaptateur.addSlashes(CodeCommande)+"%') AND "; + } + + if(!clt.isNumericNotnull(CodeClient)){ + Where += " ((comm.idcliententreprise LIKE '%"+CodeClient+"%') OR (comm.codeclient LIKE '%"+CodeClient+"%') OR (comm.idcltpassageur LIKE '%"+CodeClient+"%')) AND "; + } + + if(!clt.isNumericNotnull(CodeDevis)){ + Where += " (comm.iddevis LIKE '%"+Adaptateur.addSlashes(CodeDevis)+"%') AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (CAST(comm.date_commande AS DATE) = '"+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; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : nbrSearchCommande :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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, to_char(comm.date_commande, 'dd/mm/yyyy') 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, to_char(comm.date_commande, 'dd/mm/yyyy') 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+" ;"; + } + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : getdata :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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+"');"; + } + String sommme = "0"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getString(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : nbrCommandeCltGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return sommme ; + } + + + public ObservableList SearchCommandeCltNotBonLivrison(Integer debut, Integer nbr, String CodeCommande, String DateCreation, String TypeRegement) + { + ObservableList data = FXCollections.observableArrayList(); + + String Where = ""; + + if(!clt.isNumericNotnull(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, to_char(comm.date_commande, 'dd/mm/yyyy') 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+";"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : SearchCommandeCltNotBonLivrison :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return data ; + } + + public Integer nbrCommandeCltNotBonLivrison(String CodeCommande, String DateCreation, String TypeRegement) + { + String Where = ""; + + if(!clt.isNumericNotnull(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; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : nbrCommandeCltNotBonLivrison :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return sommme ; + } + + public ObservableList getAllCommandesClt() + { + ObservableList Commandes = FXCollections.observableArrayList(); + String req = "SELECT * FROM commandeclt;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + CommandeClt commandeclt = new CommandeClt() ; + 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.getPassager(resultat.getString("idcltpassageur"))); + } + + String reqprod = "SELECT * FROM liste_produit_commandeclt where (commande_idcommande = "+resultat.getString("idcommande")+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ObservableList dataProdDev=FXCollections.observableArrayList(); + ResultSet resulist = h2jdbc.selectFromDB(reqprod); + 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 exprod){ + System.err.println("Erreur SQL ! \n"+exprod.getMessage()); + System.out.println(reqprod); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : getCommandeClt :" + exprod.getMessage()); + } + } + Commandes.add(commandeclt); + } + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("CommandeCltDB : getCommandeClt :" + ex.getMessage()); + } + } + return Commandes ; + } +} 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..6300a7d --- /dev/null +++ b/src/main/java/Models/DevisClt/Devis.java @@ -0,0 +1,228 @@ +/* + * 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.Client.Client; +import Models.Client.ClientEntreprise; +import Models.Client.ClientPassager; +import Models.Produit.ListeProduit; +import javafx.collections.ObservableList; + +/** + * + * @author Maher Ben Tili + */ +public class Devis { + + private Integer TypeClient ; //0 Personne 1 Entreprise 2 Passager + private String CodeDevis ; + private String CodeClient ; + private Client client; + private ClientEntreprise entreprise; + private ClientPassager passager; + 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 String DateCreation; + + 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 Client getClient() { + return client; + } + + public void setClient(Client client) { + this.client = client; + } + + public ClientPassager getPassager() { + return passager; + } + + public void setPassager(ClientPassager passager) { + this.passager = passager; + } + + public ClientEntreprise getEntreprise() { + return entreprise; + } + + public void setEntreprise(ClientEntreprise entreprise) { + this.entreprise = entreprise; + } + + + public String getTimbre() { + return timbre; + } + + public void setTimbre(String timbre) { + this.timbre = timbre; + } + + 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 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 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; + } + + public String getDateCreation() { + return DateCreation; + } + + public void setDateCreation(String DateCreation) { + this.DateCreation = DateCreation; + } + +} 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..38fa585 --- /dev/null +++ b/src/main/java/Models/DevisClt/DevisDB.java @@ -0,0 +1,541 @@ +package Models.DevisClt; + +import Controllers.Dialog.ShowDialog; +import Models.Produit.ListeProduit; +import Controllers.Traitement.Adaptateur; +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.Client.ClientPassagerDB; +import Models.H2JDBC; +import Models.User.User; +import org.apache.log4j.Logger; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author Maher Ben Tili + */ +public class DevisDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(DevisDB.class.getName()); + + contro clt = new contro(); + + public String AddDevis(Devis devis) + { + String codedevis = null ; + + String datecreation = Adaptateur.DatabaseDateFormat(devis.getDateCreation()); + 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.getTypeRegement()+"', '"+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.getTypeRegement()+"', '"+codeclient+"', "+totalhorstaxnet+", "+totaltva+", "+remise+", '"+ParametreSystem.Timbre+"', "+netapayer+", "+User.idprofile+", '"+ParametreSystem.NomLocalPC+"');"; + } + if(devis.getTypeClient()==2){ + //insertion de passager + ClientPassager CltPassager = new ClientPassagerDB().addPassager(devis.getPassager()); + if(!CltPassager.getCodeclient().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.getTypeRegement()+"', '"+CltPassager.getCodeclient()+"', '"+totalhorstaxnet+"', '"+totaltva+"', '"+remise+"', '"+ParametreSystem.Timbre+"', '"+netapayer+"', '"+User.idprofile+"', '"+ParametreSystem.NomLocalPC+"');"; + } + } + + try { + codedevis = h2jdbc.InsertGetLastId(sql); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("DevisDB : AddDevis :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("AddDevis : Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + if(codedevis != null) + { + String reqListeProduit = ""; + String PrixHT ; + String Remise ; + String TotalHT ; + String TVA ; + String TotalTTC ; + try { + 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(",","."); + + reqListeProduit = "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+"');"; + h2jdbc.InsertUpdateDeleteInTable(reqListeProduit); + } + }catch(SQLException ex){ + System.err.println("AddDevis Erreur SQL ! \n"+ex.getMessage()); + System.out.println(reqListeProduit); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("DevisDB : AddDevis :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + return codedevis ; + } + + public Devis getDevis(String codedevis) + { + Devis devis = new Devis(); + + String req = "SELECT iddevis, date_creation, to_char(fin_validite, 'dd/mm/yyyy') as fin_validite , type_reglement, typeclt, codeclient, 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+"'); "; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + devis.setCodeDevis(resultat.getString("iddevis")); + devis.setTypeRegement(resultat.getString("type_reglement")); + devis.setDateCreation(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){ + Client client = new ClientDB().getClient(resultat.getString("codeclient")); + devis.setClient(client); + devis.setCodeClient(resultat.getString("codeclient")); + }else if(devis.getTypeClient()==1){ + ClientEntreprise entreprise = new ClientEntrepriseDB().GetClientEtr(resultat.getString("idcliententreprise")); + devis.setEntreprise(entreprise); + devis.setCodeClient(resultat.getString("idcliententreprise")); + }else if(devis.getTypeClient()==2){ + ClientPassager passager= new ClientPassagerDB().getPassager(resultat.getString("idcltpassageur")); + devis.setPassager(passager); + devis.setCodeClient(resultat.getString("idcltpassageur")); + } + + ObservableList dataProdDev=FXCollections.observableArrayList(); + String reqprod = "SELECT * FROM list_produit_devisclt where iddevis_devis = "+codedevis+" AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet resulist = h2jdbc.selectFromDB(reqprod); + 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()); + System.out.println(reqprod); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("DevisDB : getDevis : " + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + } catch(SQLException ex){ + System.err.println("getDevis Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("DevisDB : getDevis :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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.isNumericNotnull(CodeDevis)){ + Where += " (D.iddevis LIKE '%"+Adaptateur.addSlashes(CodeDevis)+"%') AND "; + } + + if(!clt.isNumericNotnull(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 += " (CAST(D.date_creation AS DATE) = '"+DateCreation+"') AND "; + } + + String LeftJoin = ""; + if(!clt.isStringNull(NameClient) || !clt.isNumericNotnull(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.isNumericNotnull(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, to_char(D.date_creation, 'dd/mm/yyyy') as date_creation , to_char(D.fin_validite, 'dd/mm/yyyy') 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+" ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("DevisDB : SearchDevisCltGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + return data ; + } + + public Integer nbrDevisCltGestion(String CodeDevis, String CodeClient, String Reglement, String DateCreation, String NameClient, String CinClient) + { + String Where = ""; + + if(!clt.isNumericNotnull(CodeDevis)){ + Where += " (D.iddevis LIKE '%"+Adaptateur.addSlashes(CodeDevis)+"%') AND "; + } + + if(!clt.isNumericNotnull(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 += " (CAST(D.date_creation AS DATE) = '"+DateCreation+"') AND "; + } + + String LeftJoin = ""; + if(!clt.isStringNull(NameClient) || !clt.isNumericNotnull(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.isNumericNotnull(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; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("nbrDevisCltGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("DevisDB : nbrDevisCltGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return sommme ; + } + + + /**********************************Controller Import *******************************/ + public ObservableList getdataImport(String tab,String mot, Integer debut, Integer nbr) + { + ObservableList data=FXCollections.observableArrayList(); + + String req="SELECT DC.iddevis, to_char(DC.date_creation, 'dd/mm/yyyy') as date_creation , to_char(DC.fin_validite, 'dd/mm/yyyy') 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 (CAST(DC.fin_validite AS DATE) > 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, to_char(DC.date_creation, 'dd/mm/yyyy') as date_creation , to_char(DC.fin_validite, 'dd/mm/yyyy') as fin_validite , DC.type_reglement, DC.codeclient, DC.typeclt, DC.idcliententreprise, DC.idcltpassageur, DC.net_a_payer FROM devisclt DC WHERE (CAST(DC.fin_validite AS DATE) > 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+" ;"; + } + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("getdataImport Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("DevisDB : getdataImport :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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 (CAST(DC.fin_validite AS DATE) > 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 (CAST(DC.fin_validite AS DATE) > 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+"') ;"; + } + + String sommme = "0"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getString(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("DevisDB : :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return sommme; + } + + + public ObservableList getAllDevis() + { + ObservableList data =FXCollections.observableArrayList(); + + String req = "SELECT iddevis, date_creation, to_char(fin_validite, 'dd/mm/yyyy') as fin_validite , type_reglement, typeclt, codeclient, idcliententreprise, idcltpassageur, total_h_t_net, total_tva, timbre_loi, net_a_payer, idprofile, remise FROM devisclt ; "; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + Devis devis = new Devis(); + devis.setCodeDevis(resultat.getString("iddevis")); + devis.setTypeRegement(resultat.getString("type_reglement")); + devis.setDateCreation(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){ + Client client = new ClientDB().getClient(resultat.getString("codeclient")); + devis.setClient(client); + devis.setCodeClient(resultat.getString("codeclient")); + }else if(devis.getTypeClient()==1){ + ClientEntreprise entreprise = new ClientEntrepriseDB().GetClientEtr(resultat.getString("idcliententreprise")); + devis.setEntreprise(entreprise); + devis.setCodeClient(resultat.getString("idcliententreprise")); + }else if(devis.getTypeClient()==2){ + ClientPassager passager= new ClientPassagerDB().getPassager(resultat.getString("idcltpassageur")); + devis.setPassager(passager); + devis.setCodeClient(resultat.getString("idcltpassageur")); + } + + ObservableList dataProdDev=FXCollections.observableArrayList(); + String reqprod = "SELECT * FROM list_produit_devisclt where iddevis_devis = "+resultat.getString("iddevis")+" AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet resulist = h2jdbc.selectFromDB(reqprod); + 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()); + System.out.println(reqprod); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("DevisDB : getAllDevis :" + ex.getMessage()); + } + } + data.add(devis); + } + } catch(SQLException ex){ + System.err.println("getDevis Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("DevisDB : getAllDevis :" + ex.getMessage()); + } + } + return data ; + } + +} diff --git a/src/main/java/Models/FactureClt/FactureClt.java b/src/main/java/Models/FactureClt/FactureClt.java new file mode 100644 index 0000000..7f748c6 --- /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 Maher Ben Tili + */ +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..5dff35e --- /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 Maher Ben Tili + */ +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..6f5c107 --- /dev/null +++ b/src/main/java/Models/FactureClt/FactureCltDB.java @@ -0,0 +1,523 @@ +package Models.FactureClt; + +import Controllers.Dialog.ShowDialog; +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.H2JDBC; +import Models.TraiteClt.TraiteClt; +import Models.TraiteClt.TraiteCltDB; +import org.apache.log4j.Logger; +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 { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(FactureCltDB.class.getName()); + 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 DateFacture = "now()"; + if(!clt.isStringNull(factureclt.getDateFacture())){ + DateFacture = "'"+factureclt.getDateFacture()+"'"; + Caisse.setDateMouvement(factureclt.getDateFacture()); + } + + 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+"', "+DateFacture+", '"+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+"', "+DateFacture+", '"+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+"', "+DateFacture+", '"+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 = null; + try { + codeFactureclt = h2jdbc.InsertGetLastId(sql); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureCltDB : AddFactureClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + 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().equals("1")) + { + ChequeClt ChequeClt = factureclt.getCheque(); + ChequeClt.setCodeFactureClt(codeFactureclt); + new ChequeCltDB().AddChequeClt(ChequeClt); + } + //ModePaiement 2 :carte bancaire + else if(factureclt.getModePaiement().equals("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+"');"; + + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureCltDB : :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + + + 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 *, to_char(date_facture, 'dd/mm/yyyy') as datefacture FROM factureclt WHERE (idfactureclt = "+codefacture+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"') ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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().getPassager(Codeclient)); + } + + String reqprod = "SELECT * FROM list_prod_factclt WHERE (idfactureclt_factureclt = "+codefacture+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet resulist = h2jdbc.selectFromDB(reqprod); + 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); + } catch(SQLException exProd){ + System.err.println("Erreur SQL ! \n"+exProd.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureCltDB : getFactureClt(list prod) :" + exProd.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(exProd.getMessage()+"\n"+exProd.getSQLState()); + SD.ShowAletDialog(); + } + } + //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()) + { + String ReqListeTraite = "SELECT *, to_char(date_creation, 'dd/mm/yyyy') as DateCreation ,to_char(date_traite, 'dd/mm/yyyy') as DateTraite ,to_char(date_paiement, 'dd/mm/yyyy') as DatePaiement FROM traite_clt WHERE (id_factureclt = "+codefacture+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet ResultListeTraite = h2jdbc.selectFromDB(ReqListeTraite); + 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); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(ReqListeTraite); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureCltDB : getFactureClt(Traite) :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + else if(factureClt.getTypeFaciliteBoolean() == false) + { + String ReqListeChequeClt = "SELECT id_chequeclt, numero, banque, montant, nom_complet, to_char(date_paiement, 'dd/mm/yyyy') AS DatePaiement, to_char(date_creation, 'dd/mm/yyyy') AS DateCreation , id_factureclt FROM cheque_clt WHERE (id_factureclt = "+codefacture+") AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet ResultListeChequeClt = h2jdbc.selectFromDB(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("ReqListeChequeClt Erreur SQL ! \n"+ex.getMessage()); + System.out.println(ReqListeChequeClt); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureCltDB : getFactureClt(Cheque) :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + } + } + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureCltDB :getFactureClt(Facture) :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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.isNumericNotnull(CodeFacture)){ + Where += " (idfactureclt LIKE '%"+Adaptateur.addSlashes(CodeFacture)+"%') AND "; + } + + if(!clt.isNumericNotnull(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.isNumericNotnull(CodeCommande)){ + Where += " (idcommande_commandeclt LIKE '%"+Adaptateur.addSlashes(CodeCommande)+"%') AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (CAST(date_facture AS DATE) = '"+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, to_char(date_facture, 'dd/mm/yyyy') as date_facture "+ + "FROM factureclt " + + Where + + " ORDER BY date_facture DESC "+ + " LIMIT "+debut+" , "+nbr+";"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureCltDB :SearchFactureCltGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return data ; + } + + + public Integer nbrFactureCltGestion(String CodeFacture, String CodeClient, String Reglement, String CodeCommande, String DateCreation) + { + String Where = ""; + + if(!clt.isNumericNotnull(CodeFacture)){ + Where += " (idfactureclt LIKE '%"+Adaptateur.addSlashes(CodeFacture)+"%') AND "; + } + + if(!clt.isNumericNotnull(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.isNumericNotnull(CodeCommande)){ + Where += " (idcommande_commandeclt LIKE '%"+Adaptateur.addSlashes(CodeCommande)+"%') AND "; + } + + if(!clt.isStringNull(DateCreation)){ + Where += " (CAST(date_facture AS DATE) = '"+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; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureCltDB : nbrFactureCltGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..dc67974 --- /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 Maher Ben Tili + */ +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..b97b3a5 --- /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 Maher Ben Tili + */ +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..6ed2757 --- /dev/null +++ b/src/main/java/Models/FactureFrs/FactureFrsDB.java @@ -0,0 +1,570 @@ +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 java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import Controllers.Dialog.ShowDialog; +import org.apache.log4j.Logger; +import Models.H2JDBC; + +/** + * @author Maher Ben Tili + */ +public class FactureFrsDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(FactureFrsDB.class.getName()); + 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_fournisseur, 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+"');"; + try { + String IdFacture = h2jdbc.InsertGetLastId(Query); + if(IdFacture != null) + { + 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 0) + { + String ListIdBonReception = ""; + for(int j=0; j 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 req = "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_fournisseur, 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+"');"; + + try { + String IdFacture = h2jdbc.InsertGetLastId(req); + if(IdFacture != null) + { + 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; i ListeBonReception = BonRecepDB.getBonReceptionByFact(resultat.getString("id_facture_frs")); + Facture.setListeBonReception(ListeBonReception); + } + } + } + } catch(SQLException ex){ + System.err.println("getFactureFrs Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureFrsDB : getFactureFrs :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + return Facture; + } + + + public ObservableList getFactureProduitList(String IdFactureFrs) + { + ObservableList ListProd = FXCollections.observableArrayList(); + + String req = "SELECT * FROM list_prod_fact_frs WHERE (id_facture_frs = "+IdFactureFrs+");"; + + try { + ResultSet ResultListProd = h2jdbc.selectFromDB(req); + 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("getFactureProduitList Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureFrsDB : getFactureProduitList :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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.isNumericNotnull(NumeroFacture)){ + Where += " (numero = '"+NumeroFacture+"') AND "; + } + + if(!clt.isNumericNotnull(IdFournisseur)){ + Where += " (id_fournisseur = '"+IdFournisseur+"') AND "; + } + + if(!clt.isStringNull(LocalReception)){ + Where += " (local_reception = '"+LocalReception+"') AND "; + } + + if(!clt.isStringNull(DateReception)){ + Where += " (CAST(date_creation AS DATE) = '"+DateReception+"') AND "; + } + + if(!Where.equals("")){ + Where = Where.substring(0, Where.length() - 4); + Where = "WHERE " + Where; + } + + String req="SELECT *, to_char(date_creation, 'dd/mm/yyyy') as date_recep, to_char(date_creation, 'hh:ii') as heur_recep " + + "FROM facture_frs " + + Where + + "ORDER BY id_facture_frs DESC " + + " LIMIT "+debut+" , "+nbr+";"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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_fournisseur")); + Facture.setFournisseur(Frs); + + ListFactureFrs.add(Facture); + } + } catch(SQLException ex){ + System.err.println("SearchFactureFrsGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureFrsDB : SearchFactureFrsGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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_fournisseur = '"+IdFournisseur+"') AND "; + } + + if(!clt.isStringNull(LocalReception)){ + Where += " (local_reception = '"+LocalReception+"') AND "; + } + + if(!clt.isStringNull(DateReception)){ + Where += " (CAST(date_creation AS DATE) = '"+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; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("nbrFactureFrsGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureFrsDB : nbrFactureFrsGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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 *, to_char(date_creation, 'dd/mm/yyyy') as date_recep, to_char(date_creation, 'hh:ii') as heur_recep FROM facture_frs WHERE ("+tab+" "+mot+") AND (id_reglement_frs IS NULL) ORDER BY id_facture_frs DESC "+Limit+" ;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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_fournisseur")); + Facture.setFournisseur(Frs); + + ListFactureFrs.add(Facture); + } + } catch(SQLException ex){ + System.err.println("getDataFactureFrs Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureFrsDB : getDataFactureFrs :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ListFactureFrs; + } + + + public String nbrFactureFrs(String tab, String mot) + { + String req = "SELECT count(*) FROM facture_frs WHERE "+tab+" "+mot+" ;"; + int sommme =0; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureFrsDB : nbrFactureFrs :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return Integer.toString(sommme) ; + } + + + public ObservableList getFactureByIdReglement(String IdReglement) + { + ObservableList ListFactureFrs = FXCollections.observableArrayList(); + String req="SELECT *, to_char(date_creation, 'dd/mm/yyyy') as date_recep, to_char(date_creation, 'hh:ii') as heur_recep FROM facture_frs WHERE id_reglement_frs = "+IdReglement+" ORDER BY id_facture_frs DESC ;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FactureFrsDB : getFactureByIdReglement :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..9cd3b30 --- /dev/null +++ b/src/main/java/Models/Fournisseur/FournisseurContactDB.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.Fournisseur; + +import Controllers.Traitement.contro; + +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.ParametreSystem; +import org.apache.log4j.Logger; +import Models.H2JDBC; + +/** + * @author Maher Ben Tili + */ +public class FournisseurContactDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(FournisseurContactDB.class.getName()); + contro clt= new contro(); + + public int UpdListFournisseurContact(String Code, String Nom, String Prenom, String Tele1, String Tele2, String Mail) + { + 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 req = "UPDATE contact_frs SET nom = "+Nom+", prenom = "+Prenom+", tele1 = "+Tele1+", tele2 = "+Tele2+", email = "+Mail+" WHERE idcontactfrs = "+Code+";"; + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("UpdListFournisseurContact Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurContactDB : UpdListFournisseurContact :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return nbr; + } + + public boolean SetListFournisseurContact(ObservableList ObservableContactList, String IdFournisseur) + { + String Query = "INSERT INTO contact_frs (nom, prenom, tele1, tele2, email, id_fournisseur) VALUES "; + + 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)+";"; + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(Query); + }catch(SQLException ex){ + System.err.println("SetListFournisseurContact Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurContactDB : SetListFournisseurContact :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + public ObservableList GetListFournisseurContact(String CodeFrs) + { + ObservableList ObservableListContactFrs = FXCollections.observableArrayList(); + + String req = "SELECT * FROM contact_frs WHERE (id_fournisseur = "+CodeFrs+");"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("GetListFournisseurContact Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurContactDB : GetListFournisseurContact :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..d27eea0 --- /dev/null +++ b/src/main/java/Models/Fournisseur/FournisseurDB.java @@ -0,0 +1,358 @@ +package Models.Fournisseur; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import Controllers.Dialog.ShowDialog; +import org.apache.log4j.Logger; +import Models.H2JDBC; + +/** + * @author Maher Ben Tili + */ +public class FournisseurDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(FournisseurDB.class.getName()); + contro clt = new contro(); + + //methode qui permet de récupére la liste des locals souf le local qui appartin l'utilisateur + public ArrayList getIdNomFournisseur() + { + ArrayList listFournisseur = new ArrayList<>(); + String req = "SELECT CONCAT(id_fournisseur,' - ',nom) AS nameFrs FROM fournisseur ORDER BY id_fournisseur DESC;"; //local avec la quel appartient l'utilisateur + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + listFournisseur.add(resultat.getString("nameFrs")); + } + } catch(SQLException ex){ + System.err.println("getAllFournisseur Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurDB : getAllFournisseur :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return listFournisseur ; + } + + //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_fournisseur DESC;"; //local avec la quel appartient l'utilisateur + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + listFournisseur.add(resultat.getString(colonne)); + } + } catch(SQLException ex){ + System.err.println("getAllFournisseur Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurDB : getAllFournisseur :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return listFournisseur ; + } + + + public Fournisseur GetFournisseurDB(String CodeFrs) + { + Fournisseur fournisseur= new Fournisseur(); + + String req = "SELECT * FROM fournisseur WHERE (id_fournisseur = "+CodeFrs+");"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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("GetFournisseurDB Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurDB : GetFournisseurDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return fournisseur; + } + + public Fournisseur SetFournisseurDB(Fournisseur Frs) + { + 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 req = "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+");"; + + try { + String CodeFrs = h2jdbc.InsertGetLastId(req); + Frs.setCode(CodeFrs); + int SizeContactFrs = Frs.getContactFrs().size(); + if(SizeContactFrs > 0){ + FournisseurContactDB FrsContactDB= new FournisseurContactDB(); + FrsContactDB.SetListFournisseurContact(Frs.getContactFrs(), CodeFrs); + } + }catch(SQLException ex){ + System.err.println("SetFournisseurDB Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurDB : SetFournisseurDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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 req = "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_fournisseur = "+Frs.getCode()+" ;"; + boolean Result = false; + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + Result = (nbr>0); + }catch(SQLException ex){ + System.err.println("UpdFournisseurDB Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurDB : UpdFournisseurDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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.isNumericNotnull(CodeFournisseur)){ + Where += " (id_fournisseur = '"+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_fournisseur, nom, adresse, formes, tele1, tele2, fax, mail, site_web, specialite " + + "FROM fournisseur " + + Where + + "ORDER BY id_fournisseur DESC " + + "LIMIT "+debut+" , "+nbr+" ;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + String id_fournisseur = resultat.getString("id_fournisseur"); + 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_fournisseur, nom, adresse, type_organisation, tele1, tele2, fax, mail, site_web, specialite)); + } + } catch(SQLException ex){ + System.err.println("SearchFournisseurGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurDB : SearchFournisseurGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return data ; + } + + public Integer nbrFournisseurGestion(String CodeFournisseur, String NomFournisseur, String AdresseFournisseur, String TeleFournisseur, String FaxFournisseur, String MailFournisseur) + { + String Where = ""; + + if(!clt.isNumericNotnull(CodeFournisseur)){ + Where += " (id_fournisseur = '"+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_fournisseur) " + + " FROM fournisseur " + + Where+ " ;"; + + int sommme =0; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("nbrFournisseurGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurDB : nbrFournisseurGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return sommme ; + } + + public ObservableList getAllFournisseurs() + { + ObservableList data =FXCollections.observableArrayList(); + + String req="SELECT id_fournisseur, nom, adresse, formes, tele1, tele2, fax, mail, site_web, specialite " + + "FROM fournisseur " + + "ORDER BY id_fournisseur DESC ;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + Fournisseur fournisseur = new Fournisseur(); + fournisseur.setCode(resultat.getString("id_fournisseur")); + 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")); + data.add(fournisseur); + } + } catch(SQLException ex){ + System.err.println("SearchFournisseurGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("FournisseurDB : SearchFournisseurGestion :" + ex.getMessage()); + } + } + return data ; + } + +} 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/H2JDBC.java b/src/main/java/Models/H2JDBC.java new file mode 100644 index 0000000..0eedbaa --- /dev/null +++ b/src/main/java/Models/H2JDBC.java @@ -0,0 +1,111 @@ +package Models; + +import java.sql.*; + +public class H2JDBC { + + Connection conn = null; + Statement stmt = null; + + public ResultSet selectFromDB(String Query) + { + ResultSet rs = null; + if(this.openDB()){ + try { + rs = stmt.executeQuery(Query); + } catch (SQLException e) { + System.out.println(e.getErrorCode()); + System.out.println(e.getMessage()); + System.out.println(Query); + } + } + return rs; + } + + public boolean openDB() + { + try { + Class.forName("org.h2.Driver"); + conn = DriverManager.getConnection("jdbc:h2:mem:powerpmedb", "maher", "bentili"); + stmt = conn.createStatement(); + } catch (SQLException e) { + System.err.println(e.getClass().getName() + ": " + e.getMessage()); + return false; + } catch (ClassNotFoundException ex) { + System.err.println("openDB "+ex.getMessage()); + return false; + } + return true; + } + + + public int InsertUpdateDeleteInTable(String Query) throws SQLException + { + int nbr = 0; + if(this.openDB()) + { + nbr = stmt.executeUpdate(Query); + } + return nbr; + } + + public String InsertGetLastId(String req) throws SQLException + { + String LastId = null ; + if(this.openDB()){ + PreparedStatement pstmt = conn.prepareStatement(req, stmt.RETURN_GENERATED_KEYS); + pstmt.executeUpdate(); + ResultSet keys = pstmt.getGeneratedKeys(); + keys.next(); + LastId = keys.getString(1); + } + return LastId ; + } + + + public boolean createDB() + { + boolean result = false; + if(this.openDB()) + { + try { + //String contentQuery = new String(Files.readAllBytes(Paths.get("./src/db/H2database_Schema.sql"))); + String contentQuery = "CREATE TABLE IF NOT EXISTS local ( nom VARCHAR(300) NOT NULL PRIMARY KEY, adresse VARCHAR(300), tele INT, fax INT);COMMIT;CREATE TABLE IF NOT EXISTS profile ( idprofile INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(45) NOT NULL, prenom VARCHAR(45) NOT NULL, naissance DATE, sexe BOOLEAN, num_tele INT, mail VARCHAR(45), adresse VARCHAR(60), date_creation DATE, pays VARCHAR(45));COMMIT;CREATE TABLE IF NOT EXISTS authentification ( idauhentification INT AUTO_INCREMENT PRIMARY KEY, login VARCHAR(45) NOT NULL, password VARCHAR(45) NOT NULL, type_compte VARCHAR(45) NOT NULL, question_secrete VARCHAR(50) NOT NULL, reponce_question VARCHAR(50) NOT NULL, etat_compte BOOLEAN NOT NULL DEFAULT TRUE, stock_negatif BOOLEAN NOT NULL DEFAULT FALSE, local_nom VARCHAR(300) NOT NULL, id_profile INT NOT NULL, FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS client ( codeclient BIGINT AUTO_INCREMENT PRIMARY KEY, cin INT NOT NULL, nomcomplet VARCHAR(300), nom VARCHAR(300) NOT NULL, prenom VARCHAR(300) NOT NULL, naissance DATE NOT NULL, telefix BIGINT, telemobile BIGINT, adresse VARCHAR(400) NOT NULL, codepostale BIGINT, mail VARCHAR(300), sexe BOOLEAN NOT NULL, date_add TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS categorie ( nomcategorie VARCHAR(45) NOT NULL PRIMARY KEY, unitemesure BOOLEAN NOT NULL);COMMIT;CREATE TABLE IF NOT EXISTS produit ( reference VARCHAR(300) NOT NULL PRIMARY KEY, designation VARCHAR(800) NOT NULL, nomcategorie_cate VARCHAR(300) NOT NULL, marque VARCHAR(300), garantie INT, prix_achat_ht FLOAT NOT NULL, tva_achat FLOAT NOT NULL, prix_achat_ttc FLOAT NOT NULL, marge FLOAT NOT NULL, prix_vente_ht FLOAT NOT NULL, tva_vente FLOAT NOT NULL, prix_vente_ttc FLOAT NOT NULL, description TEXT, qualite INT, poids VARCHAR(300), couleur VARCHAR(300), dimension VARCHAR(300), vitesse VARCHAR(300), puissance VARCHAR(300), capacite VARCHAR(300), datecreation DATE, FOREIGN KEY (nomcategorie_cate) REFERENCES categorie (nomcategorie) );COMMIT; CREATE TABLE IF NOT EXISTS client ( codeclient BIGINT AUTO_INCREMENT PRIMARY KEY, cin INT NOT NULL, nomcomplet VARCHAR(300), nom VARCHAR(300) NOT NULL, prenom VARCHAR(300) NOT NULL, naissance DATE NOT NULL, telefix BIGINT, telemobile BIGINT, adresse VARCHAR(400) NOT NULL, codepostale BIGINT, mail VARCHAR(300), sexe BOOLEAN NOT NULL, date_add TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT; CREATE TABLE IF NOT EXISTS categorie ( nomcategorie VARCHAR(45) NOT NULL PRIMARY KEY, unitemesure BOOLEAN NOT NULL);COMMIT;CREATE TABLE IF NOT EXISTS produit ( reference VARCHAR(300) NOT NULL PRIMARY KEY, designation VARCHAR(800) NOT NULL, nomcategorie_cate VARCHAR(300) NOT NULL, marque VARCHAR(300), garantie INT, prix_achat_ht FLOAT NOT NULL, tva_achat FLOAT NOT NULL, prix_achat_ttc FLOAT NOT NULL, marge FLOAT NOT NULL, prix_vente_ht FLOAT NOT NULL, tva_vente FLOAT NOT NULL, prix_vente_ttc FLOAT NOT NULL, description TEXT, qualite INT, poids VARCHAR(300), couleur VARCHAR(300), dimension VARCHAR(300), vitesse VARCHAR(300), puissance VARCHAR(300), capacite VARCHAR(300), datecreation DATE, FOREIGN KEY (nomcategorie_cate) REFERENCES categorie (nomcategorie));COMMIT; CREATE TABLE IF NOT EXISTS cltentreprise ( idcliententreprise BIGINT AUTO_INCREMENT PRIMARY KEY, nomentrepise VARCHAR(300) NOT NULL, gerant VARCHAR(300) NOT NULL, matricule_fiscale BIGINT, adresse VARCHAR(400), telefix BIGINT NOT NULL, telefix2 BIGINT, fax BIGINT, code_postal BIGINT, mail VARCHAR(400), date_add TIMESTAMP NOT NULL, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS cltcontact ( idcltcontact BIGINT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(300) NOT NULL, prenom VARCHAR(300) NOT NULL, cin BIGINT, gsm1 BIGINT NOT NULL, gsm2 VARCHAR(300), mail VARCHAR(300), idcltentreprise BIGINT NOT NULL, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (idcltentreprise) REFERENCES cltentreprise (idcliententreprise), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS entre ( id_entre BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, date DATE NOT NULL, heur TIME NOT NULL, local_emetteur VARCHAR(45) NOT NULL, local_recepteur VARCHAR(45) NOT NULL, transporteur VARCHAR(45), FOREIGN KEY (local_emetteur) REFERENCES local (nom), FOREIGN KEY (local_recepteur) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS liste_produit_entre ( id_bon_entre BIGINT NOT NULL, reference_produit VARCHAR(300) NOT NULL, quantite INT, tva INT, prix_vente_ttc FLOAT, designation VARCHAR(800), FOREIGN KEY (id_bon_entre) REFERENCES entre (id_entre), FOREIGN KEY (reference_produit) REFERENCES produit (reference));COMMIT;CREATE TABLE IF NOT EXISTS sortie ( id_sortie BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, date DATE NOT NULL, heur TIME NOT NULL, local_emetteur VARCHAR(45) NOT NULL, local_recepteur VARCHAR(45) NOT NULL, transporteur VARCHAR(45), FOREIGN KEY (local_emetteur) REFERENCES local (nom), FOREIGN KEY (local_recepteur) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS liste_produit_sortie ( id_bon_sortie BIGINT AUTO_INCREMENT NOT NULL, reference_produit VARCHAR(300) NOT NULL, quantite INT, prix_vente_ttc FLOAT, tva INT, designation VARCHAR(800), PRIMARY KEY (id_bon_sortie, reference_produit), FOREIGN KEY (id_bon_sortie) REFERENCES sortie (id_sortie), FOREIGN KEY (reference_produit) REFERENCES produit (reference));COMMIT;CREATE TABLE IF NOT EXISTS cltpassageur ( idcltpassageur BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, nom VARCHAR(300) NOT NULL, prenom VARCHAR(300) NOT NULL, adresse VARCHAR(300), sexe SMALLINT NOT NULL, tele BIGINT, gsm BIGINT, naissance DATE, date_add TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS devisclt ( iddevis BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, date_creation DATE NOT NULL, fin_validite DATE, typeclt SMALLINT NOT NULL, type_reglement SMALLINT NOT NULL DEFAULT 0, codeclient BIGINT, idcliententreprise BIGINT, idcltpassageur BIGINT, total_h_t_net FLOAT NOT NULL, total_tva FLOAT NOT NULL, timbre_loi FLOAT NOT NULL, net_a_payer FLOAT NOT NULL, remise FLOAT NOT NULL DEFAULT 0, idprofile INT NOT NULL, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (codeclient) REFERENCES client (codeclient), FOREIGN KEY (idcliententreprise) REFERENCES cltentreprise (idcliententreprise), FOREIGN KEY (idcltpassageur) REFERENCES cltpassageur (idcltpassageur), FOREIGN KEY (idprofile) REFERENCES profile (idprofile), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS factureclt ( idfactureclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, type_reglement SMALLINT NOT NULL, mode_paiement SMALLINT NOT NULL, date_facture DATE NOT NULL, typeclt SMALLINT NOT NULL, idcltentreprise BIGINT, idcltexiste BIGINT, idcltpassageur BIGINT, devise VARCHAR(10), total_h_t_net FLOAT NOT NULL, total_tva FLOAT NOT NULL, remise FLOAT NOT NULL DEFAULT 0, timbre_loi FLOAT NOT NULL, net_a_payer FLOAT NOT NULL, type_facilite SMALLINT, avance FLOAT DEFAULT 0, total_montant_traites FLOAT, nbr_traite INT, montant_interet FLOAT, taux_interet FLOAT, idcommande_commandeclt BIGINT NOT NULL, id_bon_livraisonclt BIGINT, profile_idprofile INT NOT NULL, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (profile_idprofile) REFERENCES profile (idprofile), FOREIGN KEY (idcltentreprise) REFERENCES cltentreprise (idcliententreprise), FOREIGN KEY (idcltexiste) REFERENCES client (codeclient), FOREIGN KEY (idcltpassageur) REFERENCES cltpassageur (idcltpassageur), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS commandeclt ( idcommande BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, date_commande DATE NOT NULL, typeclt SMALLINT NOT NULL, type_reglement SMALLINT NOT NULL, codeclient BIGINT, idcliententreprise BIGINT, idcltpassageur BIGINT, total_h_t_net FLOAT NOT NULL, total_tva FLOAT NOT NULL, remise FLOAT NOT NULL DEFAULT 0, timbre_loi FLOAT NOT NULL, net_a_payer FLOAT NOT NULL, iddevis BIGINT, id_bon_livraisonclt BIGINT, id_factureclt BIGINT, local_nom VARCHAR(300) NOT NULL, idprofile_editeur INT NOT NULL, FOREIGN KEY (codeclient) REFERENCES client (codeclient), FOREIGN KEY (idcliententreprise) REFERENCES cltentreprise (idcliententreprise), FOREIGN KEY (idcltpassageur) REFERENCES cltpassageur (idcltpassageur), FOREIGN KEY (idprofile_editeur) REFERENCES profile (idprofile), FOREIGN KEY (iddevis) REFERENCES devisclt (iddevis), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS bon_livraisonclt ( idbon_livraisonclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, type_client SMALLINT NOT NULL, id_clt_entreprise BIGINT, id_clt_passageur BIGINT, id_clt_existe BIGINT, heur_livraison TIME, date_livraison_prevu DATE NOT NULL, adresse_livraison VARCHAR(45) NOT NULL, transporteur VARCHAR(45), frais FLOAT, poids_produit INT, tele1 VARCHAR(45), tele2 VARCHAR(45), devise VARCHAR(10) NOT NULL, total_h_t_net FLOAT, total_tva FLOAT, remise FLOAT, net_a_payer FLOAT, id_commandeclt BIGINT NOT NULL, idprofile_editeur INT NOT NULL, date_creation DATE NOT NULL, local_nom VARCHAR(45) NOT NULL, FOREIGN KEY (idprofile_editeur) REFERENCES profile (idprofile), FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_clt_entreprise) REFERENCES cltentreprise (idcliententreprise), FOREIGN KEY (id_clt_passageur) REFERENCES cltpassageur (idcltpassageur), FOREIGN KEY (id_clt_existe) REFERENCES client (codeclient));COMMIT;ALTER TABLE factureclt ADD CONSTRAINT CONSTRAINT_INDEX_fact_bon_clt_454 FOREIGN KEY (id_bon_livraisonclt) REFERENCES bon_livraisonclt (idbon_livraisonclt)ON DELETE CASCADE;ALTER TABLE factureclt ADD CONSTRAINT CONSTRAINT_INDEX_fact_com_clt_547 FOREIGN KEY (idcommande_commandeclt) REFERENCES commandeclt (idcommande)ON DELETE CASCADE;ALTER TABLE commandeclt ADD CONSTRAINT CONSTRAINT_INDEX_com_fact_clt_884 FOREIGN KEY (id_factureclt) REFERENCES factureclt (idfactureclt) ON DELETE CASCADE;ALTER TABLE commandeclt ADD CONSTRAINT CONSTRAINT_INDEX_com_bon_liv_clt_2 FOREIGN KEY (id_bon_livraisonclt) REFERENCES bon_livraisonclt (idbon_livraisonclt) ON DELETE CASCADE;CREATE TABLE IF NOT EXISTS fournisseur ( id_fournisseur INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(45) NOT NULL, adresse VARCHAR(45) NOT NULL, formes VARCHAR(45), tele1 BIGINT NOT NULL, tele2 BIGINT, fax BIGINT, mail VARCHAR(45), site_web VARCHAR(45), specialite VARCHAR(100));COMMIT;CREATE TABLE IF NOT EXISTS commande_frs ( id_commande_frs INT AUTO_INCREMENT NOT NULL PRIMARY KEY, date_commande DATE NOT NULL, heur_commande TIME NOT NULL, mode_reglement VARCHAR(45) NOT NULL, devise VARCHAR(45) NOT NULL, total_h_t_net FLOAT NOT NULL, total_tva FLOAT NOT NULL, timbre_loi FLOAT NOT NULL, net_a_payer FLOAT NOT NULL, id_fournisseur INT NOT NULL, id_profile INT NOT NULL, FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS reglement_frs ( id_reglement_frs BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, id_fournisseur INT NOT NULL, montant FLOAT NOT NULL, date_creation TIMESTAMP NOT NULL, type_paiement SMALLINT NOT NULL, mode_paiement SMALLINT, etat_reglement SMALLINT NOT NULL, id_profile INT NOT NULL, FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS facture_frs ( id_facture_frs BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, numero VARCHAR(45) NOT NULL, date_creation TIMESTAMP NOT NULL, type_reglement SMALLINT, etat_reglement SMALLINT, devise VARCHAR(10) NOT NULL, total_h_t_net FLOAT NOT NULL, remise FLOAT NOT NULL, total_tva FLOAT NOT NULL, timbre_loi FLOAT NOT NULL, net_a_payer FLOAT NOT NULL, bon_reception SMALLINT, id_fournisseur INT NOT NULL, local_reception VARCHAR(300) NOT NULL, id_commande_frs INT, id_profile INT NOT NULL, id_reglement_frs BIGINT, FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur), FOREIGN KEY (local_reception) REFERENCES local (nom), FOREIGN KEY (id_commande_frs) REFERENCES commande_frs (id_commande_frs), FOREIGN KEY (id_profile) REFERENCES profile (idprofile), FOREIGN KEY (id_reglement_frs) REFERENCES reglement_frs (id_reglement_frs));COMMIT;CREATE TABLE IF NOT EXISTS bonreception_frs ( id_bonreception BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, numero VARCHAR(45) NOT NULL, date_reception TIMESTAMP NOT NULL, transporteur VARCHAR(45), net_a_payer FLOAT, id_fournisseur INT NOT NULL, local_reception VARCHAR(45) NOT NULL, id_profile INT NOT NULL, id_facture_frs BIGINT, FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur), FOREIGN KEY (local_reception) REFERENCES local (nom), FOREIGN KEY (id_profile) REFERENCES profile (idprofile), FOREIGN KEY (id_facture_frs) REFERENCES facture_frs (id_facture_frs));COMMIT;CREATE TABLE IF NOT EXISTS cheque_clt ( id_chequeclt INT AUTO_INCREMENT NOT NULL PRIMARY KEY, numero VARCHAR(300) NOT NULL, banque VARCHAR(300) NOT NULL, montant FLOAT NOT NULL, nom_complet VARCHAR(400), etat_cheque SMALLINT, date_paiement DATE NOT NULL, date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, id_factureclt BIGINT, local_nom VARCHAR(300) NOT NULL, id_profile INT NOT NULL, FOREIGN KEY (id_factureclt) REFERENCES factureclt (idfactureclt), FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS carte_bancaire_clt ( id_carte_bancaire BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, num_transation VARCHAR(150) NOT NULL, nom_banque VARCHAR(45), num_carte VARCHAR(100), nom_complet VARCHAR(45), date_transation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, montant FLOAT NOT NULL, id_factureclt BIGINT, local_nom VARCHAR(300) NOT NULL, id_profile INT NOT NULL, FOREIGN KEY (id_factureclt) REFERENCES factureclt (idfactureclt), FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS vente_sans_facture ( id_vente_sans_facture BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, date_vente TIMESTAMP NOT NULL, paiement SMALLINT NOT NULL, nom_prenom_client VARCHAR(50), operation SMALLINT, date_operation TIMESTAMP, montant FLOAT NOT NULL, id_chequeclt INT, id_carte_bancaire BIGINT, id_profile INT NOT NULL, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (id_chequeclt) REFERENCES cheque_clt (id_chequeclt), FOREIGN KEY (id_carte_bancaire) REFERENCES carte_bancaire_clt (id_carte_bancaire), FOREIGN KEY (id_profile) REFERENCES profile (idprofile), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS stock_detail ( id_detail_stock BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, local_nom VARCHAR(45) NOT NULL, reference_produit VARCHAR(300) NOT NULL, quantite FLOAT NOT NULL, date_add TIMESTAMP NOT NULL, id_profile INT NOT NULL, id_bon_entre BIGINT, id_bon_sortie BIGINT, id_bon_livraison BIGINT, id_bon_reception BIGINT, id_facture_frs BIGINT, id_vente_sans_facture BIGINT, FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (reference_produit) REFERENCES produit (reference), FOREIGN KEY (id_bon_entre) REFERENCES entre (id_entre), FOREIGN KEY (id_bon_sortie) REFERENCES sortie (id_sortie), FOREIGN KEY (id_bon_livraison) REFERENCES bon_livraisonclt (idbon_livraisonclt), FOREIGN KEY (id_bon_reception) REFERENCES bonreception_frs (id_bonreception), FOREIGN KEY (id_facture_frs) REFERENCES facture_frs (id_facture_frs), FOREIGN KEY (id_vente_sans_facture) REFERENCES vente_sans_facture (id_vente_sans_facture), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS liste_produit_commandeclt ( id_liste_produit_commandeclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, commande_idcommande BIGINT NOT NULL, produit_reference VARCHAR(40) NOT NULL, designation_produit VARCHAR(800) NOT NULL, quantite INT NOT NULL, p_u_h_t FLOAT NOT NULL, remise INT, p_u_h_t_net FLOAT NOT NULL, tva INT NOT NULL, montant FLOAT NOT NULL, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (commande_idcommande) REFERENCES commandeclt (idcommande), FOREIGN KEY (produit_reference) REFERENCES produit (reference), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS traite_clt ( id_traite BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, date_traite DATE NOT NULL, montant_traite FLOAT NOT NULL, date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, id_factureclt BIGINT NOT NULL, date_paiement TIMESTAMP, montant_payer FLOAT, local_nom VARCHAR(300) NOT NULL, id_profile INT NOT NULL, FOREIGN KEY (id_factureclt) REFERENCES factureclt (idfactureclt), FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS traite_paiement_espace_clt ( id_traite_paiement_espace BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, id_traite BIGINT NOT NULL, date_payer TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, montant_payer FLOAT NOT NULL, local_nom VARCHAR(300) NOT NULL, id_profile INT NOT NULL, FOREIGN KEY (id_traite) REFERENCES traite_clt (id_traite), FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS devis_frs ( id_devis_frs INT NOT NULL PRIMARY KEY, id_fournisseur INT NOT NULL, date_creation DATE NOT NULL, devis VARCHAR(10) NOT NULL, total_h_t_net FLOAT NOT NULL, total_tva FLOAT NOT NULL, timbre_loi FLOAT NOT NULL, net_a_payer FLOAT NOT NULL, id_profile INT NOT NULL, FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS list_produit_devisclt ( id_list_produit_devisclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, iddevis_devis BIGINT NOT NULL, reference_produit VARCHAR(300) NOT NULL, designation_produit VARCHAR(800) NOT NULL, quantie INT NOT NULL, p_u_h_t FLOAT NOT NULL, remise INT NOT NULL, p_u_h_t_net FLOAT NOT NULL, tva INT NOT NULL, montant FLOAT NOT NULL, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (reference_produit) REFERENCES produit (reference), FOREIGN KEY (iddevis_devis) REFERENCES devisclt (iddevis), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS liste_produit_devis_frs ( reference_produit VARCHAR(40) NOT NULL PRIMARY KEY, id_devis_frs INT NOT NULL, quantite INT NOT NULL, p_u_h_t FLOAT NOT NULL, remise INT, p_u_h_t_net FLOAT NOT NULL, tva INT NOT NULL, montant FLOAT NOT NULL, FOREIGN KEY (reference_produit) REFERENCES produit (reference), FOREIGN KEY (id_devis_frs) REFERENCES devis_frs (id_devis_frs));COMMIT;CREATE TABLE IF NOT EXISTS contact_frs ( idcontactfrs INT AUTO_INCREMENT NOT NULL PRIMARY KEY, nom VARCHAR(45) NOT NULL, prenom VARCHAR(45) NOT NULL, tele1 BIGINT NOT NULL, tele2 BIGINT, email VARCHAR(45), id_fournisseur INT NOT NULL, FOREIGN KEY (id_fournisseur) REFERENCES fournisseur (id_fournisseur));COMMIT;CREATE TABLE IF NOT EXISTS list_prod_factclt ( id_list_prod_factclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, idfactureclt_factureclt BIGINT NOT NULL, produit_reference VARCHAR(300) NOT NULL, designation_produit VARCHAR(800) NOT NULL, quantite INT NOT NULL, p_u_h_t FLOAT NOT NULL, remise INT, p_u_h_t_net FLOAT NOT NULL, tva INT NOT NULL, montant FLOAT NOT NULL, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (idfactureclt_factureclt) REFERENCES factureclt (idfactureclt), FOREIGN KEY (produit_reference) REFERENCES produit (reference), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS liste_prod_livraison ( id_liste_prod_livraison BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, id_bon_livraison_clt BIGINT NOT NULL, produit_reference VARCHAR(40) NOT NULL, designation_produit VARCHAR(800) NOT NULL, quantite INT NOT NULL, p_u_h_t FLOAT NOT NULL, remise INT NOT NULL, p_u_h_t_net FLOAT NOT NULL, tva INT NOT NULL, montant FLOAT NOT NULL, local_nom VARCHAR(45) NOT NULL, FOREIGN KEY (id_bon_livraison_clt) REFERENCES bon_livraisonclt (idbon_livraisonclt), FOREIGN KEY (produit_reference) REFERENCES produit (reference), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS liste_prod_commande_frs ( id_liste_prod_commande_frs INT AUTO_INCREMENT NOT NULL PRIMARY KEY, id_commande_frs INT NOT NULL, designation_produit VARCHAR(45) NOT NULL, quantite INT NOT NULL, p_u_h_t FLOAT NOT NULL, remise INT, p_u_h_t_net FLOAT NOT NULL, tva INT NOT NULL, montant FLOAT NOT NULL, FOREIGN KEY (id_commande_frs) REFERENCES commande_frs (id_commande_frs));COMMIT;CREATE TABLE IF NOT EXISTS list_prod_reception_frs ( id_achat BIGINT AUTO_INCREMENT NOT NULL, id_bonreception_frs BIGINT NOT NULL, reference VARCHAR(300) NOT NULL, quantite INT NOT NULL, p_u_h_t FLOAT NOT NULL, p_u_h_t_net FLOAT NOT NULL, tva INT NOT NULL, montant FLOAT NOT NULL, PRIMARY KEY (id_achat), FOREIGN KEY (id_bonreception_frs) REFERENCES bonreception_frs (id_bonreception), FOREIGN KEY (reference) REFERENCES produit (reference));COMMIT;CREATE TABLE IF NOT EXISTS list_prod_fact_frs ( id_list_prod_fact_frs INT AUTO_INCREMENT NOT NULL, id_facture_frs BIGINT NOT NULL, reference VARCHAR(40) NOT NULL, designation_produit VARCHAR(100) NOT NULL, quantite INT NOT NULL, p_u_h_t FLOAT NOT NULL, remise INT, p_u_h_t_net FLOAT NOT NULL, tva INT NOT NULL, montant FLOAT NOT NULL, PRIMARY KEY (id_list_prod_fact_frs), FOREIGN KEY (id_facture_frs) REFERENCES facture_frs (id_facture_frs), FOREIGN KEY (reference) REFERENCES produit (reference));COMMIT;CREATE TABLE IF NOT EXISTS factclt_avoir ( idavoir BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, date_creation VARCHAR(45) NOT NULL, type_avoir SMALLINT NOT NULL, devis VARCHAR(45) NOT NULL, total_h_t_net FLOAT NOT NULL, total_tva FLOAT NOT NULL, timbre_loi FLOAT NOT NULL, net_a_reduire FLOAT NOT NULL, factureclt_idfactureclt BIGINT NOT NULL, profile_idprofile INT NOT NULL, local_nom VARCHAR(45) NOT NULL, FOREIGN KEY (factureclt_idfactureclt) REFERENCES factureclt (idfactureclt), FOREIGN KEY (profile_idprofile) REFERENCES profile (idprofile), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS traite_paiement_carte_clt ( id_traite_paiement_carte BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, id_traite BIGINT NOT NULL, montant_payer FLOAT NOT NULL, numero_carte VARCHAR(300) NOT NULL, banque VARCHAR(300) NOT NULL, date_payer TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, local_nom VARCHAR(300) NOT NULL, id_profile INT NOT NULL, FOREIGN KEY (id_traite) REFERENCES traite_clt (id_traite), FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS traite_paiement_cheque_clt ( id_traite_paiement_cheque BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, id_traite BIGINT NOT NULL, montant_payer FLOAT NOT NULL, numero VARCHAR(300) NOT NULL, banque VARCHAR(300) NOT NULL, nom_complet VARCHAR(400), date_payer DATE NOT NULL, date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, etat_cheque SMALLINT, local_nom VARCHAR(300) NOT NULL, id_profile INT NOT NULL, FOREIGN KEY (id_traite) REFERENCES traite_clt (id_traite), FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_profile) REFERENCES profile (idprofile));COMMIT;CREATE TABLE IF NOT EXISTS historique_cheque_clt ( id_historique_cheque_clt BIGINT AUTO_INCREMENT NOT NULL, etat_cheque SMALLINT NOT NULL, date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, id_chequeclt INT, id_traite_paiement_cheque BIGINT, local_nom VARCHAR(300) NOT NULL, id_profile INT NOT NULL, PRIMARY KEY (id_historique_cheque_clt), FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_profile) REFERENCES profile (idprofile), FOREIGN KEY (id_chequeclt) REFERENCES cheque_clt (id_chequeclt), FOREIGN KEY (id_traite_paiement_cheque) REFERENCES traite_paiement_cheque_clt (id_traite_paiement_cheque));COMMIT;CREATE TABLE IF NOT EXISTS caisseclt ( id_caisseclt INT AUTO_INCREMENT NOT NULL, date_mouvement TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, type_mouvement SMALLINT, id_factureclt BIGINT, id_avoir_factclt BIGINT, id_vente_sans_facture BIGINT, montant FLOAT NOT NULL, id_traite_paiement_espace BIGINT, id_traite_paiement_carte BIGINT, id_traite_paiement_cheque BIGINT, id_historique_cheque_clt BIGINT, id_profile INT NOT NULL, local_nom VARCHAR(300) NOT NULL, PRIMARY KEY (id_caisseclt), FOREIGN KEY (id_profile) REFERENCES profile (idprofile), FOREIGN KEY (id_factureclt) REFERENCES factureclt (idfactureclt), FOREIGN KEY (id_avoir_factclt) REFERENCES factclt_avoir (idavoir), FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_traite_paiement_espace) REFERENCES traite_paiement_espace_clt (id_traite_paiement_espace), FOREIGN KEY (id_traite_paiement_carte) REFERENCES traite_paiement_carte_clt (id_traite_paiement_carte), FOREIGN KEY (id_traite_paiement_cheque) REFERENCES traite_paiement_cheque_clt (id_traite_paiement_cheque), FOREIGN KEY (id_historique_cheque_clt) REFERENCES historique_cheque_clt (id_historique_cheque_clt), FOREIGN KEY (id_vente_sans_facture) REFERENCES vente_sans_facture (id_vente_sans_facture));COMMIT;CREATE TABLE IF NOT EXISTS bond_retourclt ( idbonderetourclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, factclt_avoir_idavoir BIGINT NOT NULL, heur_retour TIME NOT NULL, date_retour DATE NOT NULL, transpoteur VARCHAR(45), quantite INT NOT NULL, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (factclt_avoir_idavoir) REFERENCES factclt_avoir (idavoir), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS list_prod_avoir_factclt ( id_list_prod_avoir_factclt BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, idfactclt_avoir_prod BIGINT NOT NULL, quantite INT NOT NULL, p_u_h_t FLOAT NOT NULL, remise FLOAT NOT NULL, p_u_h_t_net FLOAT NOT NULL, tva FLOAT NOT NULL, montant FLOAT NOT NULL, designation VARCHAR(400), produit_reference VARCHAR(300), designation_produit VARCHAR(400), local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (idfactclt_avoir_prod) REFERENCES factclt_avoir (idavoir), FOREIGN KEY (produit_reference) REFERENCES produit (reference), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS liste_prod_retour ( id_retour BIGINT NOT NULL PRIMARY KEY, id_bonde_retourclt BIGINT NOT NULL, quantite FLOAT NOT NULL, p_u_h_t FLOAT NOT NULL, remise FLOAT NOT NULL, p_u_h_t_net FLOAT NOT NULL, tva FLOAT NOT NULL, montant FLOAT NOT NULL, designation_produit VARCHAR(800) NOT NULL, local_nom VARCHAR(300) NOT NULL, FOREIGN KEY (id_bonde_retourclt) REFERENCES bond_retourclt (idbonderetourclt), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS detail_retour ( id_retour BIGINT NOT NULL, id_detail BIGINT NOT NULL, FOREIGN KEY (id_retour) REFERENCES liste_prod_retour (id_retour), FOREIGN KEY (id_detail) REFERENCES stock_detail (id_detail_stock));COMMIT;CREATE TABLE IF NOT EXISTS stock ( local_nom VARCHAR(300) NOT NULL, produit_reference VARCHAR(300) NOT NULL, quantite INT NOT NULL, FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (produit_reference) REFERENCES produit (reference));COMMIT;CREATE TABLE IF NOT EXISTS carte_electronique_frs ( id_carte_electronique_frs BIGINT AUTO_INCREMENT NOT NULL, id_reglement_frs BIGINT NOT NULL, numero_transaction VARCHAR(45) NOT NULL, numero_carte BIGINT, banque VARCHAR(45), date_transaction TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, montant FLOAT NOT NULL, PRIMARY KEY (id_carte_electronique_frs), FOREIGN KEY (id_reglement_frs) REFERENCES reglement_frs (id_reglement_frs));COMMIT;CREATE TABLE IF NOT EXISTS cheque_frs ( id_cheque_frs BIGINT AUTO_INCREMENT NOT NULL, id_reglement_frs BIGINT NOT NULL, numero INT NOT NULL, banque VARCHAR(45) NOT NULL, montant FLOAT NOT NULL, nom_complet VARCHAR(100), date_paiement DATE NOT NULL, date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id_cheque_frs), FOREIGN KEY (id_reglement_frs) REFERENCES reglement_frs (id_reglement_frs));COMMIT;CREATE TABLE IF NOT EXISTS traite_frs ( id_traite_frs BIGINT AUTO_INCREMENT NOT NULL, id_reglement_frs BIGINT NOT NULL, montant FLOAT NOT NULL, date_paiement DATE NOT NULL, date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id_traite_frs), FOREIGN KEY (id_reglement_frs) REFERENCES reglement_frs (id_reglement_frs));COMMIT;CREATE TABLE IF NOT EXISTS frais ( id_frais BIGINT AUTO_INCREMENT NOT NULL, montant FLOAT NOT NULL, object VARCHAR(500) NOT NULL, context TEXT, personne VARCHAR(200), mode_paiement SMALLINT NOT NULL, numero VARCHAR(45), banque VARCHAR(45), date_cheque DATE, id_profile INT NOT NULL, local_nom VARCHAR(300) NOT NULL, date_creation TIMESTAMP NOT NULL, PRIMARY KEY (id_frais), FOREIGN KEY (id_profile) REFERENCES profile (idprofile), FOREIGN KEY (local_nom) REFERENCES local (nom));COMMIT;CREATE TABLE IF NOT EXISTS liste_prod_vente_sans_facture ( id_liste_prod_vente_sans_facture BIGINT AUTO_INCREMENT NOT NULL, id_vente_sans_facture BIGINT NOT NULL, produit_reference VARCHAR(300) NOT NULL, designation_produit VARCHAR(800) NOT NULL, quantite INT NOT NULL, p_u_h_t FLOAT NOT NULL, remise FLOAT NOT NULL, p_u_h_t_net FLOAT NOT NULL, tva FLOAT NOT NULL, montant FLOAT NOT NULL, local_nom VARCHAR(300) NOT NULL, PRIMARY KEY (id_liste_prod_vente_sans_facture), FOREIGN KEY (produit_reference) REFERENCES produit (reference), FOREIGN KEY (local_nom) REFERENCES local (nom), FOREIGN KEY (id_vente_sans_facture) REFERENCES vente_sans_facture (id_vente_sans_facture));COMMIT;"; + result = stmt.execute(contentQuery); + //} catch (IOException ex) { + //System.out.println("erreur createDB: "+ex.getMessage()); + }catch (Exception e) { + System.out.println("erreur createDB: "+e.getMessage()); + } + } + return result; + } + + public boolean InsertSimpleData() + { + boolean result = false; + if(this.openDB()) + { + try { + //String contentQuery = new String(Files.readAllBytes(Paths.get("./src/db/H2database_SimpleData.sql"))); + //result = stmt.execute(contentQuery); + + String contentQueryLocal = " INSERT INTO local (nom, adresse, tele, fax) VALUES('Magasin I', '74 rue 32121', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('Magasin II', '485 rue 65451', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('Magasin III', '15 rue 455631', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('Magasin IV', '2 rue mouez', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000);INSERT INTO profile (idprofile, nom, prenom, naissance, sexe, num_tele, mail, adresse, date_creation, pays) VALUES(2, 'Ben Tili', 'Maher', '1987-09-03', 1, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'maher.tili@gmail.com', '2 rue mouez mornguia', '2015-09-19', 'Tunisie'),(3, 'Ben Salah', 'Manoubi', '1977-09-03', 1, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'manoubi.salah@yahoo.fr', '22 rue république Denden', '2024-10-19', 'Tunisie');INSERT INTO authentification (idauhentification, login, password, type_compte, question_secrete, reponce_question, etat_compte, stock_negatif, local_nom, id_profile) VALUES(1, '3', '3', 'Commercial', 'Quel est le nom de votre animal domecile', 'Belle', 1, 1, 'Magasin I', 2),(2, '1', '1', 'Commercial', 'Quel est le nom de votre animal domecile', 'Recks', 1, 1, 'Magasin I', 3);INSERT INTO fournisseur (nom, adresse, formes, tele1, tele2, fax, mail, site_web, specialite) VALUES('BenJemiaBr', '658 Rue Principale Denden', 'SA', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'fournisseur@benjemia.com', 'www.benjemiabr.com', 'Moto'),('ABC', '658 Rue EDMM Mornaguia', 'SA', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'fournisseur@abc.com', 'Infomatique'),('Baite Said', '95 rue jemea Mornaguia', 'SASU', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'baite@said.com', 'www.baitesaide.com', 'Electro'),('Sumsung', ' 20 Rue Mozart', 'SARL', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'contact@sumsung.com', 'www.sumsung.com', 'Mecanique'),('Amazfit', ' 74 Rue Hector Berlioz', 'SARL', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'commercial@lg.com', 'www.lg.com', 'Batiment'),('OTIK', '74 rue saint-exupéry', 'SASU', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'contact@otik.com', 'www.otik.com', 'Fourniture'),('Free', '9 All des marronniers', 'SNC', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'contact@free.com', 'www.free.com', 'Internet'),('SEGEHO', '14 rue sainte-famille tunis', 'SASU', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'contactsegeho.com', 'www.segeho.com', 'Médical'),('Génaral éléctrique', '512 grandom MRRC ', 'SA', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'ge@gmail.com', 'www.ge.com', 'Voiture'),('BTP', '22 Rue de Villarceau', 'SARL', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'tn.sdfsdf@gail.com', 'www.btp.com', 'Téléphone'),('AZZT', '265 RUE 15442 MANAR', 'SARL', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, 'vfsdf@rr.com', NULL, 'Informatique');INSERT INTO categorie (nomcategorie, unitemesure) VALUES('Accessoire', 1),('Accessoires appareils auditifs', 1),('Accessoires de manucure', 1),('Accessoires optique', 1),('Accessoires pour hygiène dentaire', 1),('Accueil', 1),('Acides aminés', 1),('Acné', 1),('Aérosols & accessoires', 1),('Aide minceur', 1),('Alimentation par sonde', 1),('Aliments diététiques', 1),('Aliments hyperprotéinés', 1),('Aliments pauvres en protide', 1),('Allaitement', 1),('Allergies', 1),('Amino', 1),('Aminos', 0),('Ampoules', 1),('Ampoules anti-chute', 1),('Ampoules buvables', 1),('Anti-chute', 1),('Anti-chute de cheveux', 1),('Anti-oxydant', 1),('Anticerne', 1),('Antiparasitaires', 1),('Antiseptiques', 1),('Aphtes', 1),('Aphtes : bains de bouche', 1),('Appareil digestif, acidité & reflux', 1),('Après-shampoings', 1),('aqw', 0),('aqwzsx', 0),('Aromathérapie', 1),('Articulation & os', 1),('Assiettes denfant', 1),('assse', 0),('Atrier', 1),('Aucune categorie', 1),('Audition', 1),('Auto bronzant', 1),('Autre', 1),('Autres tests', 1),('azert', 2),('azsss', 0),('Bain moussant/Huile de Bain', 1),('Balances', 1),('Ballonnements', 1),('Balneothérapies', 1),('Bandages', 1),('Bas de contention', 1),('Baume après-rasage', 1),('Bavoirs', 1),('Beauty @Home ', 1),('Bébé', 1),('Béquilles', 1),('Biberons', 1),('Bidet', 1),('Biocide', 1),('Biscuits bébés', 1),('Bistouris', 1),('Blaireaux', 1),('Blanchiment', 1),('Blessures et plaies', 1),('BLOCUS', 1),('Blush', 1),('Boissons énergisantes', 1),('Boisssons pour bébés', 1),('Boîtes alimentaires bébé', 1),('Bouchons doreille', 1),('Bouillottes', 1),('Bouteille', 0),('Boutons de fièvre', 1),('Bronzage homme', 1),('Brosses a cheveux', 1),('Brosses à dents', 1),('Brosses à dents électriques', 1),('Brulures & coups de soleil', 1),('Brumisateurs', 1),('Cannes', 1),('Cap Drink', 1),('Cardio-vasculaire : coeur', 1),('Carte Premium', 1),('chaise', 0),('Chauffe-biberons', 1),('Cheveux', 1),('Cholesterol', 1),('Cicatrisant', 1),('Circulation & jambes lourdes', 1),('Climatiseur', 0),('Collier', 1),('Collyres', 1),('Colorations', 1),('Compléments alimentaires', 1),('Compléments alimentaires beauté', 1),('Compléments alimentaires pour animaux', 1),('Compléments alimentaires pour bébé et maman', 1),('Compléments alimentaires santé', 1),('Compléments nutritionnels hyperprotéinées', 1),('Compléments sans lactose', 1),('Complexe pour diffuseur', 1),('Comprimés', 1),('Comprimés & sirops', 1),('Comprimés, sirops & sachets', 1),('Confort urinaire', 1),('Constipation', 1),('Contour des yeux', 1),('Contour des yeux homme', 1),('Coquilles et protèges-mamelons', 1),('Corne et callosités', 1),('Corps', 1),('Corps Fête', 1),('Cors', 1),('Cosmétiques', 1),('Cosmétiques & Beauté', 1),('Couches bébé', 1),('Couches et propreté', 1),('Coupe-poils', 1),('Coussins anatomiques', 1),('Crampes intestinales', 1),('Crayon maquillage', 1),('Créatine', 1),('Crème', 1),('Crème & gel', 1),('Crème anti-âge', 1),('Crème dépilatoire', 1),('Crème et huile de massage', 1),('Crème hydratante bébé', 1),('Crème Lavante/ Gel Surgras', 1),('Crème solaire', 1),('Crèmes cheveux', 1),('Crevasses', 1),('ddxw', 0),('Déambulateurs', 1),('Défense naturelle', 1),('Démaquillants yeux', 1),('Dentifrices', 1),('Dentifrices bio aux plantes', 1),('Dents & stomatologie', 1),('Déodorants', 1),('Déodorants homme', 1),('Désinfectant', 1),('Détente & sommeil', 1),('Développement musculaire ', 1),('Diabète', 1),('Diarrhée', 1),('Diététique', 1),('Diététique du sportif', 1),('Diététique, nutrition', 1),('Diffuseurs d’huiles essentielles', 1),('Digestion', 1),('Dispositif medical', 1),('Dissolvants', 1),('Divers', 1),('Douleur, fièvre & inflammation', 1),('Douleurs (migraine et mal de dos) & températu', 1),('Draineurs anticellulites', 1),('Durillons', 1),('Eczema & rougeurs', 1),('Edulcorant', 1),('Endurance & Performance', 1),('Energy', 1),('Epilateurs électriques', 1),('Epilation', 1),('Epilation à la cire', 1),('Eponge de bain', 1),('Equilibre féminin & ménopause', 1),('Escart & cicatrisation', 1),('Eye liner', 1),('Fard à paupières', 1),('Fauteuils roulants', 1),('FAVORIS', 1),('Fers à friser', 1),('FESTIVAL', 1),('Fête des mères', 1),('Fête des pères ', 1),('Fils dentaires', 1),('Fleurs de bach', 1),('Fond de teint', 1),('Forme sexuelle', 1),('FREE HUGS', 1),('Gants en latex', 1),('Gel moussant', 1),('Gelée royale', 1),('Gels & mousses de coiffage', 1),('Gels de rasage', 1),('Gels douche homme', 1),('Gels-Mousses à raser', 1),('Gels/Huiles douches', 1),('Gélules aux huiles éssentielles', 1),('Gemmothérapie', 1),('Gift Orange', 1),('Gloss', 1),('Gommage', 1),('Gommage corps', 1),('Gommages homme', 1),('Gommes dentaires', 1),('Goodies', 1),('Gouttes & spray nasal', 1),('Hair Advice ', 1),('Haleine fraîche', 1),('Hallus valgux', 1),('Health', 1),('Hemoclin', 1),('Hémorroïdes', 1),('Homéopathie', 1),('Homme', 1),('Huile', 1),('Huile solaire', 1),('Huiles cheveux', 1),('Huiles corporelles', 1),('Huiles de bain', 1),('Huiles de massage', 1),('Huiles essentielles', 1),('Huiles essentielles bio', 1),('Huiles pré-rasage', 1),('Huiles végétales', 1),('Hydropulseurs', 1),('Hygiène', 1),('Hygiène dentaire', 1),('Hygiène du nez et des oreilles', 1),('Hygiène féminine', 1),('Hygiène intime', 1),('Immunonutrition', 1),('Incontinence urinaire', 1),('Inflammation chronique de lintestin', 1),('Injection', 1),('Iode', 1),('Jambes lourdes (veinotoniques)', 1),('Kinésithérapies', 1),('Kits allergie', 1),('Lait après-solaire', 1),('Lait de toilette pour bébé', 1),('Lait démaquillant', 1),('Lait infantile', 1),('Lait/Crème Hydratante', 1),('Lames de rasoir', 1),('Laques', 1),('Le change de bébé', 1),('Lentilles de contact', 1),('Lets go to RIO !', 1),('Lingettes démaquillantes', 1),('Lingettes, gels & savons désinfectants', 1),('Liquides & sirops', 1),('Lisseurs', 1),('Lithothérapies', 1),('Lits médicalisés', 1),('Lotion micellaire', 1),('Lotions anti-chute', 1),('Lotions capillaires', 1),('Luminothérapies', 1),('Lunettes de vue', 1),('Mal des transports', 1),('Manucure & Pédicure', 1),('Maquillage', 1),('Mascara', 1),('Masque', 1),('Masque capillaire', 1),('Matériel médical', 1),('Matériel pour l’allaitement', 1),('Matière première', 1),('Maux de gorge', 1),('Mémoire', 1),('Mémoire & concentration', 1),('Minceur', 1),('Minceur & Fitness', 1),('Minceur Summer', 1),('MINI', 1),('Module panier', 1),('Monte-escaliers', 1),('Mouche bébé', 1),('Mousse', 1),('Moyen diagnostique', 1),('Mycose', 1),('Mycoses des ongles', 1),('Nature&Bio', 1),('Non défini', 1),('Nutrition & obésité', 1),('Objets Connectés', 1),('Oligo-éléments', 1),('Ongles', 1),('Ophtalmologie ', 1),('Optique', 1),('Orteils douloureux', 1),('Orthopédie', 1),('Otologie ', 1),('Page daccueil', 1),('Paillettes', 1),('Pain Dermatologique', 1),('Palette de maquillage', 1),('Pansements', 1),('Pansements et compresses', 1),('Parapharmacie', 1),('Parapharmacie & Orthopédie', 1),('Parfumerie', 1),('Parfums', 1),('Parfums pour hommes', 1),('Pastilles', 1),('Pastilles & gelules', 1),('Patch de toilette', 1),('Patch-inhaler', 1),('Peau', 1),('Peignes', 1),('Peignoirs bébé', 1),('Phytopharmacie', 1),('Phytothérapies', 1),('Pieds', 1),('Pieds très secs et déshydratés', 1),('Pierre ponçe', 1),('Piluliers et boîtes à pilules', 1),('Pinceau maquillage', 1),('Pinces à épiler', 1),('Pipettes', 1),('Plats pour bébés', 1),('Pollen', 1),('Pot d’analyse', 1),('Pots pour enfants', 1),('Poudre compacte', 1),('Poudre libre', 1),('Préparateur solaire', 1),('Préservatifs, lubrifiants & stimulateurs', 1),('Prise de masse', 1),('Probiotiques', 1),('Produits anti-poux', 1),('Produits biologiques', 1),('Produits de relaxation', 1),('Produits de soins pour bébés', 1),('Produits défrisants', 1),('Produits minceurs', 1),('Produits pauvres en sucre', 1),('Produits pour appareils dentaires', 1),('Produits sans glutens', 1),('Produits solaires bébé', 1),('PROMO', 1),('Protection contre les insectes, rongeurs & ac', 1),('Protections', 1),('Protèges-slips', 1),('Protein', 1),('Protéines', 1),('Psychiatrie', 1),('Rasage', 1),('Réactif', 1),('Récupération', 1),('Régulation intestinale', 1),('Rein, vessie & prostate', 1),('Renforcement du système immunitaire', 1),('Repas de bébé', 1),('Rhumatisme & rhumatologie', 1),('Root', 1),('Rouge à lèvres', 1),('Sans parabene & sans parfum', 1),('Savons pour bébés', 1),('SDFVV', 0),('Sécheresse buccale', 1),('Sels de bains', 1),('Seringues', 1),('Serum', 1),('Serviettes hygiéniques', 1),('Shampoings', 1),('Shampoings homme', 1),('Shampoings pour bébé', 1),('Shampoings secs', 1),('Shampooings anti-chute', 1),('Sirop', 1),('Slim', 1),('Soins', 1),('Soins Anti-taches', 1),('Soins anti-vergetures', 1),('Soins cheveux homme', 1),('Soins cheveux sans rinçage', 1),('Soins corps homme', 1),('Soins des jambes', 1),('Soins des mains', 1),('Soins des pieds', 1),('Soins du corps', 1),('Soins du buste', 1),('Soins du visage', 1),('Soins hydratants homme', 1),('Soins peaux jeunes', 1),('Soins pour le change', 1),('Soins visage homme', 1),('Solaire', 1),('Soldes', 1),('Soleil', 1),('Solution lavante', 1),('Solutions dentaires & gels dentaires', 1),('Sondes utérine, rectale & trachéale', 1),('Spécialité, sérum, va', 1),('Spécialités', 1),('Sport', 1),('Spray', 1),('Spray auriculaire', 1),('Spray nasal', 1),('Spray, roller, inhalateur & baume aux huiles', 1),('Stérilisateurs biberons', 1),('Sticks lèvres', 1),('stomatology', 1),('Stomie', 1),('Stress & dépression', 1),('Substituts de repas', 1),('Sucettes bébé', 1),('Supplément vitaminique', 1),('Suppositoire & crème', 1),('Talcs', 1),('Tampons hygiéniques', 1),('Tatouages', 1),('TELEPHONE', 0),('Tensiomètres', 1),('TEST', 2),('Test de grossesse', 1),('Tétines de biberons', 1),('TGB', 0),('Thermomètres', 1),('Thermothérapies', 1),('Tires-laits', 1),('Toilette de bébé', 1),('Toilette du visage', 1),('Tonique', 1),('Toux grasse', 1),('Toux sèche', 1),('toxicology', 1),('Transats de bain', 1),('Transpiration', 1),('Troubles urinaires & gynécologiques', 1),('Trousses', 1),('Trousses de secours', 1),('Trousses Solaires', 1),('TV', 0),('Velvet Smooth', 1),('Vernis à ongles', 1),('Verrues', 1),('Verrues & cors', 1),('Vétérinaire', 1),('Visage', 1),('Vitamines', 1),('Vitamines Enfant', 1),('Voies Respiratoires', 1),('xx', 0),('Yeux', 1),('Yeux & ophtamologie', 1),('Zones de pression', 1),('Zwachtel', 1);"; + String contentQueryClient1 = " INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES (1, 09163816, 'Maher ben tili ben mustapha', 'Ben Tili', 'Maher', '1987-09-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '2 rue moez mornaguia', 1110, 'tn.maher@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (2, 00862870, 'H Ben Drechsel', 'H', 'Drechsel', '1961-11-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '870 Rue 900 France', 900, 'helene.drechsel@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (3, 00863871, 'Julien Ben Caratori', 'Julien', 'Caratori', '1944-09-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '871 Rue 600 France', 600, 'julien.caratori@aliceadsl.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (4, 00875883, 'Nadine Ben Bovy', 'Nadine', 'Bovy', '1959-12-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '883 Rue 106 France', 106, 'nadine.bovy@live.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (6, 00884892, 'Isabelle Ben Crocombette', 'Isabelle', 'Crocombette', '1968-05-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '892 Rue 3000 France', 3000, 'crocombette.eddy@neuf.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (8, 00887895, 'Janine Ben Gajewski', 'Janine', 'Gajewski', '1946-08-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '895 Rue 1863 France', 1863, 'jani.ga@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (9, 00891899, 'Evelyne Ben Collet', 'Evelyne', 'Collet', '1960-12-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '899 Rue 780 France', 780, 'evelyne.collet6@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (10, 00892900, 'Marylin Ben Zaghet', 'Marylin', 'Zaghet', '1973-07-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '900 Rue 3512 France', 3512, 'desseigneursdeso@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (11, 00893901, 'Sylvie Ben Brulard', 'Sylvie', 'Brulard', '1968-06-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '901 Rue 3537 France', 3537, 'sylvie.massage@outlook.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (12, 00897905, 'Sylviane Ben Halleux', 'Sylviane', 'Halleux', '1965-03-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '905 Rue 2924 France', 2924, 'sisihal@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (13, 00902910, 'Dominique Ben Maquet', 'Dominique', 'Maquet', '1962-08-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '910 Rue 1279 France', 1279, 'domaquet@voo.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (14, 00903911, 'Jean Robert Ben Deltour', 'Jean Robert', 'Deltour', '1953-05-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '911 Rue 1600 France', 1600, 'cath-et-jr@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (15, 00905913, 'Lucie Ben Cazzola', 'Lucie', 'Cazzola', '1961-07-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '913 Rue 1414 France', 1414, 'lucie.cazzola@arte.tv', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (16, 00906914, 'Carole Ben Ben Hamou', 'Carole', 'Ben Hamou', '1961-08-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '914 Rue 1487 France', 1487, 'carole.canon@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (17, 00908916, 'Sandra Ben Skwara', 'Sandra', 'Skwara', '1970-10-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '916 Rue 2049 France', 2049, 'sandra@skwara.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (18, 00909917, 'Fran Ben Absil', 'Fran', 'Absil', '1960-09-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '917 Rue 600 France', 600, 'absilfrancoise@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (19, 00914922, 'Isabelle Ben Asseman', 'Isabelle', 'Asseman', '1979-03-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '922 Rue 933 France', 933, 'isasseman@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (20, 00916924, 'Xavier Ben Van Brackel', 'Xavier', 'Van Brackel', '1974-04-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '924 Rue 1900 France', 1900, 'xvanbrackel@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (21, 00922930, 'Anne Ben Pitet', 'Anne', 'Pitet', '1964-05-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '930 Rue 251 France', 251, 'a.pitet@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (22, 00926934, 'Claire Ben Mesplé', 'Claire', 'Mesplé', '1958-04-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '934 Rue 1590 France', 1590, 'clairemesple@club-internet.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (23, 00931939, 'Corinne Ben Kastner', 'Corinne', 'Kastner', '1969-03-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '939 Rue 1295 France', 1295, 'corinne_kastner@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (24, 00932940, 'Pierre Ben Carlioz', 'Pierre', 'Carlioz', '1952-06-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '940 Rue 132 France', 132, 'cavet.carlioz@free.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (25, 00934942, 'Jean-Jacques Ben Grau', 'Jean-Jacques', 'Grau', '1961-12-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '942 Rue 28745 France', 28745, 'alexparis17@yahoo.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (26, 00000311, 'Damien Ben Dardenne', 'Damien', 'Dardenne', '1983-01-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '11 Rue 14693 France', 14693, 'dardennedamien@hotmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (27, 00000715, 'Michael Ben Willems', 'Michael', 'Willems', '2020-07-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '15 Rue 3500 France', 3500, 'willmichfr@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (28, 00000816, 'Emilie Ben Nyssen', 'Emilie', 'Nyssen', '1983-12-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '16 Rue 600 France', 600, 'emilienyssen@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (29, 00000917, 'Monique Ben Peteaux', 'Monique', 'Peteaux', '1953-09-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '17 Rue 1527 France', 1527, 'monique.peteaux@base.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (30, 00001018, 'Pascal Ben Sterckx', 'Pascal', 'Sterckx', '1972-03-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '18 Rue 3422 France', 3422, 'pascal.sterckx@telenet.be', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (31, 00001220, 'Philippe Ben Gillart', 'Philippe', 'Gillart', '1960-12-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '20 Rue 1007 France', 1007, 'gillartph@yahoo.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (32, 00001523, 'Aurélie Ben Veys', 'Aurélie', 'Veys', '1984-08-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '23 Rue 3203 France', 3203, 'aurelie.veys@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (33, 00001725, 'Dexia Credits Logement Ben Bertrandom', 'Dexia Credits Logement', 'Bertrandom', '1958-07-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '25 Rue 1219 France', 1219, 'marylene.bertrandom@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (34, 00002028, 'Virginie Ben Joiret', 'Virginie', 'Joiret', '2016-08-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '28 Rue 1114 France', 1114, 'joiretvirginie@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (35, 00002836, 'Pharmacie Ben De Savoie', 'Pharmacie', 'De Savoie', '1978-08-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '36 Rue 2236 France', 2236, 'thiryannabelle@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (36, 00002937, 'Fran Ben Ost', 'Fran', 'Ost', '1958-05-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '37 Rue 1044 France', 1044, 'francoise.ost@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (37, 00003038, 'Monique Ben Lambert - Ardenne Immo -', 'Monique', 'Lambert - Ardenne Immo -', '1961-07-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '38 Rue 10790 France', 10790, 'lambert.monique@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (38, 00003341, 'Sophie Ben Eggermont-Stevens', 'Sophie', 'Eggermont-Stevens', '1969-09-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '41 Rue 742 France', 742, 'sophiestevenscleol@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (39, 00003644, 'AURELIE Ben THIRION', 'AURELIE', 'THIRION', '1983-09-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '44 Rue 2501 France', 2501, 'thirion_aurelie@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (40, 00003846, 'Vanessa Ben Sanctorum', 'Vanessa', 'Sanctorum', '1981-02-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '46 Rue 1000 France', 1000, 'v.sanctorum@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (41, 00004048, 'Claude Ben Depauw (Archives Communales)', 'Claude', 'Depauw (Archives Communales)', '1955-08-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '48 Rue 2459 France', 2459, 'annedebroux@scarlet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (42, 00004250, 'Aurelie Ben Brion', 'Aurelie', 'Brion', '1979-05-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '50 Rue 2206 France', 2206, 'aureliebrion@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (43, 00004351, 'No Ben Lamotte', 'No', 'Lamotte', '1964-06-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '51 Rue 1147 France', 1147, 'monespacebleu@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (44, 00005159, 'Roanne Ben Serlet', 'Roanne', 'Serlet', '1973-01-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '59 Rue 2132 France', 2132, 'roanne.bernard@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (45, 00006472, 'Mireille Ben Zimmermann', 'Mireille', 'Zimmermann', '1958-11-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '72 Rue 300 France', 300, 'mireille.zimmermann@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (46, 00006674, 'Amandine Ben Van Hoof', 'Amandine', 'Van Hoof', '1984-02-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '74 Rue 1890 France', 1890, 'vanhoof.a@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (47, 00007280, 'Thewis Ben Carine', 'Thewis', 'Carine', '1970-01-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '80 Rue 300 France', 300, 'thewisvan@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (48, 00007886, 'Karine Ben Huynen', 'Karine', 'Huynen', '1962-12-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '86 Rue 3049 France', 3049, 'karine.huynen@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (49, 00008189, 'Benedicte Ben Braibant', 'Benedicte', 'Braibant', '1975-09-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '89 Rue 400 France', 400, 'noelbraibant@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (50, 00008492, 'Christina Ben Bussi', 'Christina', 'Bussi', '1968-10-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '92 Rue 1700 France', 1700, 'titti13@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (51, 00008997, 'Vincent Ben Milazzo', 'Vincent', 'Milazzo', '1962-05-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '97 Rue 1204 France', 1204, 'diabolo_noir_01@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (52, 00093101, 'Pourtois - Vanderveken Ben Chantal', 'Pourtois - Vanderveken', 'Chantal', '1950-10-13', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '101 Rue 345 France', 345, 'chantal.pourtois@gsk.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (53, 00095103, 'Sylvie Ben PORREWECK', 'Sylvie', 'PORREWECK', '1975-01-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '103 Rue 1120 France', 1120, 'sylvie_ziggy@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (54, 00100108, 'Nicolas Ben Neyens', 'Nicolas', 'Neyens', '1987-12-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '108 Rue 567 France', 567, 'n_neyens@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (55, 00102110, 'Tinneke Ben Billet', 'Tinneke', 'Billet', '1978-05-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '110 Rue 913 France', 913, 'tinne_billet@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (56, 00103111, 'Texti Sa Ben Cirichelli Grignard D', 'Texti Sa', 'Cirichelli Grignard D', '1972-02-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '111 Rue 2789 France', 2789, 'dorothee.grignard@yahoo.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (57, 00111119, 'Val Ben Henquet (M', 'Val', 'Henquet (M', '1976-10-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '119 Rue 1200 France', 1200, 'valerie_henquet@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (58, 00114122, 'Laetitia Ben Desplanques', 'Laetitia', 'Desplanques', '1971-01-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '122 Rue 1347 France', 1347, 'l.desplanques@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (59, 00116124, 'Annick Ben Giera', 'Annick', 'Giera', '1966-09-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '124 Rue 600 France', 600, 'giera.annick@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (60, 00123131, 'Christian Ben Guillaume', 'Christian', 'Guillaume', '1950-09-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '131 Rue 700 France', 700, 'genesquif@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (61, 00126134, 'Kristelle Ben Antoine', 'Kristelle', 'Antoine', '1980-01-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '134 Rue 3316 France', 3316, 'kristelle.antoine@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (62, 00128136, 'Cindy Ben Govaert', 'Cindy', 'Govaert', '1988-04-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '136 Rue 3571 France', 3571, 'cindy.g.1988@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (63, 00131139, 'Jamila Ben Chahbouni', 'Jamila', 'Chahbouni', '1970-11-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '139 Rue 353 France', 353, 'jchahbouni@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (64, 00139147, 'Micheline Ben Dassel', 'Micheline', 'Dassel', '1948-10-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '147 Rue 1204 France', 1204, 'mdas@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (65, 00142150, 'Caroline Ben Nava', 'Caroline', 'Nava', '1972-08-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '150 Rue 2519 France', 2519, 'carolinenava@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (66, 00143151, 'Anne Ben Van Goethem', 'Anne', 'Van Goethem', '1964-09-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '151 Rue 4266 France', 4266, 'anne.vangoethem@mae.etat.lu', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (67, 00149157, 'Chantal Ben Lamoline', 'Chantal', 'Lamoline', '1957-01-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '157 Rue 892 France', 892, 'chantal.lamoline@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (68, 00152160, 'Suzanne Ben Dervaux', 'Suzanne', 'Dervaux', '1949-01-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '160 Rue 2036 France', 2036, 'suzannedervaux@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (69, 00158166, 'Ayna Ben Vagapova', 'Ayna', 'Vagapova', '1970-10-29', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '166 Rue 392 France', 392, 'ayna@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (70, 00163171, 'Sandra Ben Carabin', 'Sandra', 'Carabin', '1974-03-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '171 Rue 787 France', 787, 'sandra.carabin@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (71, 00164172, 'Isabelle Ben Van Essche', 'Isabelle', 'Van Essche', '1967-11-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '172 Rue 330 France', 330, 'i.vanessche@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (72, 00168176, 'Jean-Louis Ben Vrancx', 'Jean-Louis', 'Vrancx', '1964-08-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '176 Rue 3400 France', 3400, 'jl.vrancx@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (73, 00174182, 'Christine Ben Maes', 'Christine', 'Maes', '1955-09-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '182 Rue 3227 France', 3227, 'christinemaes@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (74, 00176184, 'L Ben Topet', 'L', 'Topet', '1966-10-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '184 Rue 1536 France', 1536, 'leo.2@skynet.be', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (75, 00182190, 'Janine Ben Jadoulle', 'Janine', 'Jadoulle', '1944-01-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '190 Rue 1963 France', 1963, 'janinej999@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (76, 00191199, 'Damienne Ben Meurisse', 'Damienne', 'Meurisse', '1977-12-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '199 Rue 7089 France', 7089, 'damienne.meurisse@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (77, 00198206, 'Sabyne Ben Debaecker', 'Sabyne', 'Debaecker', '1968-12-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '206 Rue 1706 France', 1706, 's4byne@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (78, 00199207, 'Patrick Ben De Mulder', 'Patrick', 'De Mulder', '1970-01-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '207 Rue 400 France', 400, 'fc155597@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (79, 00202210, 'Eriks Baudoin Ben Laurence Lesuisse', 'Eriks Baudoin', 'Laurence Lesuisse', '1973-11-29', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '210 Rue 6165 France', 6165, 'laurencelessuise@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (80, 00205213, 'Sophie Ben Vermeren', 'Sophie', 'Vermeren', '1971-11-29', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '213 Rue 700 France', 700, 'sophievermeren@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (81, 00206214, 'Francois Ben Racoux', 'Francois', 'Racoux', '1975-06-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '214 Rue 2341 France', 2341, 'francoisrac@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (82, 00210218, 'Contr Ben Marquet Maryse', 'Contr', 'Marquet Maryse', '1954-02-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '218 Rue 1100 France', 1100, 'marybel@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (83, 00212220, 'Yves Ben Roukout', 'Yves', 'Roukout', '1952-09-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '220 Rue 2800 France', 2800, 'pasteurtigrou@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (84, 00215223, 'Liliane Ben Dechamps', 'Liliane', 'Dechamps', '1967-06-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '223 Rue 1800 France', 1800, 'carine022@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (85, 00218226, 'Johan Ben Nothomb', 'Johan', 'Nothomb', '1985-01-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '226 Rue 600 France', 600, 'felix.valerie@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (86, 00220228, 'Isabelle Ben Halin', 'Isabelle', 'Halin', '1973-07-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '228 Rue 2391 France', 2391, 'isahalin@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (87, 00221229, 'Emmanuelle Ben Roulet', 'Emmanuelle', 'Roulet', '1975-09-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '229 Rue 3621 France', 3621, 'eroulet@me.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (88, 00226234, 'Vinciane Ben Lenaerts', 'Vinciane', 'Lenaerts', '1981-11-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '234 Rue 500 France', 500, 'chacham25@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (89, 00234242, 'Anna Ben Amico', 'Anna', 'Amico', '1964-09-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '242 Rue 1988 France', 1988, 'anna.amico.franco@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (90, 00235243, 'Eliane Ben Rolen', 'Eliane', 'Rolen', '1956-11-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '243 Rue 3007 France', 3007, 'eliane.rolen@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (91, 00236244, 'Isabelle Ben Lienard', 'Isabelle', 'Lienard', '1964-07-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '244 Rue 2061 France', 2061, 'is.ange@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (92, 00241249, 'Sylvie Ben Demesse', 'Sylvie', 'Demesse', '1973-05-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '249 Rue 848 France', 848, 'sylvie.demesse@happymany.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (93, 00242250, 'Guy Ben Sonveau', 'Guy', 'Sonveau', '1956-03-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '250 Rue 209 France', 209, 'sonveau.guy@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (94, 00244252, 'Anne-Marie Ben Laurent', 'Anne-Marie', 'Laurent', '2010-09-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '252 Rue 1446 France', 1446, 'bastin.laurent@brutele.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (95, 00247255, 'Herman Ben Christine', 'Herman', 'Christine', '1977-03-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '255 Rue 1200 France', 1200, 'chrisherman@voo.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (96, 00250258, 'Sonia Ben Knappenbergh', 'Sonia', 'Knappenbergh', '1979-01-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '258 Rue 2069 France', 2069, 'soon-ly@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (97, 00258266, 'Marianne Ben Colson', 'Marianne', 'Colson', '1959-04-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '266 Rue 1667 France', 1667, 'marianne2804@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (98, 00263271, 'Dani Ben Dhainaut', 'Dani', 'Dhainaut', '1962-04-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '271 Rue 1266 France', 1266, 'd.dhainaut@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (99, 00267275, 'Catherine Ben Andr', 'Catherine', 'Andr', '1975-04-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '275 Rue 693 France', 693, 'andrcath@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (100, 00268276, 'Martine Ben Walravens Desmet', 'Martine', 'Walravens Desmet', '1952-01-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '276 Rue 2879 France', 2879, 'mm.walravens@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (101, 00269277, 'Liliane Ben Schumacker', 'Liliane', 'Schumacker', '1955-07-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '277 Rue 1756 France', 1756, 'lilianeschumacker@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (102, 00271279, 'Viviane Ben Moucheron', 'Viviane', 'Moucheron', '1956-03-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '279 Rue 1396 France', 1396, 'broceliandev@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (103, 00273281, 'Elisabeth Ben De Maeyer - Dumont', 'Elisabeth', 'De Maeyer - Dumont', '1959-11-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '281 Rue 1900 France', 1900, 'demaeyer.claire@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (104, 00278286, 'Johan Ben Cuche', 'Johan', 'Cuche', '1983-08-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '286 Rue 715 France', 715, 'coyote_23@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (105, 00279287, 'Nelly Ben Demoortel', 'Nelly', 'Demoortel', '1941-01-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '287 Rue 700 France', 700, 'n_demoortel@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (106, 00281289, 'Vanessa Ben Soumoy', 'Vanessa', 'Soumoy', '1979-06-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '289 Rue 600 France', 600, 'vanessa.soumoy@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (107, 00283291, 'Karine Ben Barbot', 'Karine', 'Barbot', '1982-02-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '291 Rue 1611 France', 1611, 'kbarbot56@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (108, 00284292, 'Gilette Ben Meersschaut', 'Gilette', 'Meersschaut', '1956-11-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '292 Rue 160 France', 160, 'gilettestar@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (109, 00287295, 'Kathy Ben Roncada', 'Kathy', 'Roncada', '1958-06-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '295 Rue 1100 France', 1100, 'kr478@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (110, 00289297, 'Catherine Ben Vincent', 'Catherine', 'Vincent', '1968-04-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '297 Rue 1168 France', 1168, 'vt6140472@base.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (111, 00291299, 'Laurence Ben Buyere', 'Laurence', 'Buyere', '1966-06-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '299 Rue 800 France', 800, 'laurence.bruyere@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (112, 00292300, 'Graziella Ben Gillot', 'Graziella', 'Gillot', '1959-07-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '300 Rue 775 France', 775, 'graziella.gillot@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (113, 00293301, 'Anne-Marie Ben Dondelinger', 'Anne-Marie', 'Dondelinger', '1953-06-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '301 Rue 6384 France', 6384, 'am.dondelinger@base.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (114, 00295303, 'Maryse Ben Havaux', 'Maryse', 'Havaux', '1953-02-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '303 Rue 2491 France', 2491, 'mhavaux@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (115, 00302310, 'Fabienne Ben Dohogne', 'Fabienne', 'Dohogne', '1962-06-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '310 Rue 1636 France', 1636, 'fadohogne@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (116, 00303311, 'Anne-France Ben Keuller', 'Anne-France', 'Keuller', '1964-10-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '311 Rue 766 France', 766, 'af.keuller@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (117, 00305313, 'Vanessa Ben Rentiers', 'Vanessa', 'Rentiers', '1977-12-05', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '313 Rue 700 France', 700, 'vanessa.rentiers@brusselsairlines.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (118, 00309317, 'Caroline Ben Didier', 'Caroline', 'Didier', '1976-01-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '317 Rue 152 France', 152, 'carolinedidier71@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (119, 00310318, 'Michel Ben Dewet', 'Michel', 'Dewet', '1954-06-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '318 Rue 8572 France', 8572, 'micheldewet@msn.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (120, 00313321, 'Vincent Ben Lefebvre', 'Vincent', 'Lefebvre', '1967-10-19', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '321 Rue 2102 France', 2102, 'lefebvrevinc@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (121, 00316324, 'Christelle Ben Pradal', 'Christelle', 'Pradal', '1977-06-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '324 Rue 1879 France', 1879, 'christelle.pradal@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (122, 00323331, 'Genevieve Ben Ralet', 'Genevieve', 'Ralet', '1948-07-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '331 Rue 700 France', 700, 'genevieve.ralet@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (123, 00324332, 'Mr Caty Ben Dherte-Istasse', 'Mr Caty', 'Dherte-Istasse', '1981-02-13', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '332 Rue 1000 France', 1000, 'catytim@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (124, 00334342, 'Céine Ben Lamboley', 'Céine', 'Lamboley', '1984-10-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '342 Rue 2554 France', 2554, 'celinel84@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (125, 00336344, 'Margot Ben Dubuisson', 'Margot', 'Dubuisson', '1990-02-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '344 Rue 585 France', 585, 'margot.dubuisson@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (126, 00344352, 'Isabelle Ben Idiart', 'Isabelle', 'Idiart', '1962-12-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '352 Rue 1382 France', 1382, 'isidiart@laposte.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (127, 00346354, 'Fatima Ben Mesnaoui', 'Fatima', 'Mesnaoui', '1958-09-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '354 Rue 5238 France', 5238, 'rasail_fm@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (128, 00350358, 'Claudine Ben Chachan', 'Claudine', 'Chachan', '1982-11-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '358 Rue 1697 France', 1697, 'forza10_@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (129, 00354362, 'Renate Ben Maury', 'Renate', 'Maury', '1950-04-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '362 Rue 807 France', 807, 'renata54@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (130, 00355363, 'Bruno Ben Genin', 'Bruno', 'Genin', '1952-09-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '363 Rue 1000 France', 1000, 'bruno.genin@lgenin.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (131, 00361369, 'Véronique Ben Senepart', 'Véronique', 'Senepart', '1966-02-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '369 Rue 1159 France', 1159, 'chargona@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (132, 00363371, 'Marcel Ben Lamberty', 'Marcel', 'Lamberty', '1986-04-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '371 Rue 669 France', 669, 'closeceline@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (133, 00366374, 'Ramos Ben Isabelle', 'Ramos', 'Isabelle', '1964-10-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '374 Rue 3227 France', 3227, 'rmspa@club-internet.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (134, 00367375, 'Marielle Ben Romann', 'Marielle', 'Romann', '1959-03-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '375 Rue 12474 France', 12474, 'piece01@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (135, 00371379, 'Monique Ben Beaumont', 'Monique', 'Beaumont', '1961-10-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '379 Rue 429 France', 429, 'mick.beau@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (136, 00374382, 'Laurence Ben Bauduin', 'Laurence', 'Bauduin', '1975-02-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '382 Rue 1404 France', 1404, 'laure_bauduin@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (137, 00376384, 'Benedicte Ben Francois', 'Benedicte', 'Francois', '1957-03-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '384 Rue 1805 France', 1805, 'christian.francois@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (138, 00382390, 'Sandra Ben Lebon', 'Sandra', 'Lebon', '1974-07-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '390 Rue 758 France', 758, 'sandra.lebon@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (139, 00383391, 'Mireille Ben Jados', 'Mireille', 'Jados', '1980-02-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '391 Rue 8305 France', 8305, 'ninajados@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (140, 00384392, 'Brigitte Ben Nys', 'Brigitte', 'Nys', '1959-12-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '392 Rue 1396 France', 1396, 'nysrubis@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (141, 00394402, 'Nadia Ben Pallavisino', 'Nadia', 'Pallavisino', '1955-12-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '402 Rue 7619 France', 7619, 'nadia.evrard@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (142, 00395403, 'Theo Ben Hendrikx', 'Theo', 'Hendrikx', '1953-05-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '403 Rue 5331 France', 5331, 'theohendrikx@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (143, 00396404, 'Liliane Ben Berteas', 'Liliane', 'Berteas', '1947-12-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '404 Rue 800 France', 800, '21.lavallee@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (144, 00399407, 'Danielle Ben Roton', 'Danielle', 'Roton', '1951-01-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '407 Rue 2135 France', 2135, 'danielleboullet@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (145, 00402410, 'Marie Ben Kariger', 'Marie', 'Kariger', '1939-08-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '410 Rue 2972 France', 2972, 'juprelle@jkservice.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (146, 00404412, 'Pascale Ben De Jonckheere', 'Pascale', 'De Jonckheere', '1975-06-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '412 Rue 986 France', 986, 'pascale.de.jonckheere@adecco.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (147, 00405413, 'Gis Ben Ducoin', 'Gis', 'Ducoin', '1956-01-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '413 Rue 497 France', 497, 'gisele.ducoin@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (148, 00406414, 'Marcelle Ben Baud', 'Marcelle', 'Baud', '1949-10-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '414 Rue 6037 France', 6037, 'maurice.baud123@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (149, 00409417, 'Luc Ben Sage', 'Luc', 'Sage', '1954-03-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '417 Rue 1816 France', 1816, 'lucdoc3030@aol.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I');"; + String contentQueryClient2 = " INSERT INTO client (codeclient, cin, nomcomplet, nom, prenom, naissance, telefix, telemobile, adresse, codepostale, mail, sexe, date_add, local_nom) VALUES (150, 00410418, 'Nadia Ben Bouroua', 'Nadia', 'Bouroua', '1968-08-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '418 Rue 1178 France', 1178, 'nadiabouroua@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (151, 00414422, 'Laetitia Ben Prasit', 'Laetitia', 'Prasit', '1984-04-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '422 Rue 960 France', 960, 'pticha@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (152, 00418426, 'Jacqueline Ben Dewael', 'Jacqueline', 'Dewael', '1947-02-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '426 Rue 1462 France', 1462, 'lamote-dewael@telenet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (153, 00419427, 'Audrey Ben Hendrkix', 'Audrey', 'Hendrkix', '1979-10-05', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '427 Rue 1535 France', 1535, 'audreyhendrikx@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (154, 00423431, 'Gerard Ben Faramus', 'Gerard', 'Faramus', '1950-09-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '431 Rue 1785 France', 1785, 'gerard.faramus0144@orange.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (155, 00424432, 'Colette Ben Kerstenne', 'Colette', 'Kerstenne', '1948-09-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '432 Rue 465 France', 465, 'colette.kerstenne@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (156, 00428436, 'Philippe Ben Grebent', 'Philippe', 'Grebent', '1957-03-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '436 Rue 2537 France', 2537, 'durandomal.phil@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (157, 00429437, 'Corinne Ben Kubacki', 'Corinne', 'Kubacki', '1960-09-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '437 Rue 510 France', 510, 'corinne.huguet63@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (158, 00431439, 'Luce Ben Beugnies', 'Luce', 'Beugnies', '1979-06-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '439 Rue 900 France', 900, 'lulu.beu@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (159, 00432440, 'Sabrina Ben Salomoni', 'Sabrina', 'Salomoni', '1976-07-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '440 Rue 1050 France', 1050, 'salomoni.sabrina@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (160, 00436444, 'Richard Ben Arena', 'Richard', 'Arena', '1952-10-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '444 Rue 500 France', 500, 'ri1515@aol.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (161, 00441449, 'Olivier Ben Wilmart', 'Olivier', 'Wilmart', '1982-12-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '449 Rue 951 France', 951, 'owilmart@tvcablenet.be', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (162, 00450458, 'Sylvie Ben Fontan', 'Sylvie', 'Fontan', '1957-12-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '458 Rue 800 France', 800, 'sylviefontanmichel@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (163, 00451459, 'Catherine Ben Schwaab', 'Catherine', 'Schwaab', '1957-08-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '459 Rue 828 France', 828, 'cathschwaab@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (164, 00452460, 'Pascale Ben Klein', 'Pascale', 'Klein', '1968-05-07', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '460 Rue 1606 France', 1606, 'pascale.kloos@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (165, 00453461, 'Michel Ben Magain', 'Michel', 'Magain', '1966-11-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '461 Rue 2514 France', 2514, 'michelmag@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (166, 00457465, 'Chantal Ben Leplat', 'Chantal', 'Leplat', '1959-05-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '465 Rue 1533 France', 1533, 'c.leplat@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (167, 00463471, 'Véronique Ben Desmet', 'Véronique', 'Desmet', '1970-08-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '471 Rue 1200 France', 1200, 'veroniquede@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (168, 00465473, 'Isabelle Ben Coroyer', 'Isabelle', 'Coroyer', '1962-01-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '473 Rue 879 France', 879, 'isabelle.coroyer@laposte.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (169, 00466474, 'Pierre Ben Duerinckx', 'Pierre', 'Duerinckx', '1938-02-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '474 Rue 400 France', 400, 'petrus@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (170, 00467475, 'François Ben Fournier', 'François', 'Fournier', '1963-09-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '475 Rue 212 France', 212, 'famille-fournier175@orange.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (171, 00471479, 'Emmanuel Ben Carin', 'Emmanuel', 'Carin', '1969-09-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '479 Rue 574 France', 574, 'carinemmanuel@aol.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (172, 00478486, 'Sophie Ben Diels', 'Sophie', 'Diels', '1967-09-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '486 Rue 3129 France', 3129, 's.diels@laposte.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (173, 00479487, 'Roger Ben Gaudin', 'Roger', 'Gaudin', '1963-11-19', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '487 Rue 4264 France', 4264, 'rogergaudin@sfr.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (174, 00483491, 'Philippe Ben Cronn', 'Philippe', 'Cronn', '1973-04-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '491 Rue 798 France', 798, 'philippe.cronn@internet.lu', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (175, 00490498, 'Huguette Ben Drygalski', 'Huguette', 'Drygalski', '1949-05-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '498 Rue 1169 France', 1169, 'huguette_2244@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (176, 00491499, 'Lucienne Ben Loiseau', 'Lucienne', 'Loiseau', '1960-08-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '499 Rue 797 France', 797, 'vinceloiseau@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (177, 00493501, 'Franck Ben Ettouati', 'Franck', 'Ettouati', '1964-05-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '501 Rue 8277 France', 8277, 'fettouati@free.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (178, 00497505, 'Pulse Pmc2 Ben Eveline Cellard', 'Pulse Pmc2', 'Eveline Cellard', '1960-06-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '505 Rue 1066 France', 1066, 'eveline.cellard@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (179, 00501509, 'Caroline Ben Deitte', 'Caroline', 'Deitte', '1953-01-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '509 Rue 1178 France', 1178, 'jodeitte@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (180, 00505513, 'Didier Ben Grandomjean', 'Didier', 'Grandomjean', '1957-03-29', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '513 Rue 2639 France', 2639, 'delsauxb@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (181, 00507515, 'Malorie Ben Coupe', 'Malorie', 'Coupe', '1976-09-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '515 Rue 922 France', 922, 'malorie.coupe@dbmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (182, 00514522, 'Claudine Ben Dedoncker', 'Claudine', 'Dedoncker', '1959-01-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '522 Rue 1514 France', 1514, 'cdes5080@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (183, 00515523, 'Annie Ben Rousselle', 'Annie', 'Rousselle', '1950-10-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '523 Rue 2240 France', 2240, 'annie.rousselle@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (184, 00516524, 'Fr Ben Gaillard-Billey', 'Fr', 'Gaillard-Billey', '1965-05-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '524 Rue 4975 France', 4975, 'f-billey@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (185, 00519527, 'Christiane Ben Pierreux', 'Christiane', 'Pierreux', '1964-12-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '527 Rue 1051 France', 1051, 'christiane.pierreux@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (186, 00520528, 'Marie-Christine Ben Tonet', 'Marie-Christine', 'Tonet', '1948-06-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '528 Rue 5601 France', 5601, 'mctonet@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (187, 00525533, 'Denis Ben Neuville', 'Denis', 'Neuville', '1949-08-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '533 Rue 3563 France', 3563, 'denis.neuville@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (188, 00527535, 'Boogaerts Sprl Ben Eliane Cortens', 'Boogaerts Sprl', 'Eliane Cortens', '1958-07-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '535 Rue 600 France', 600, 'eliane.cortens@boogaerts.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (189, 00529537, 'Catherine Ben Viscardy', 'Catherine', 'Viscardy', '1969-05-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '537 Rue 1100 France', 1100, 'joelle.viscardy@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (190, 00531539, 'Fanny Ben Huynen', 'Fanny', 'Huynen', '1977-07-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '539 Rue 2910 France', 2910, 'f-hu@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (191, 00532540, 'Anne Ben Dexpert', 'Anne', 'Dexpert', '1966-07-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '540 Rue 1629 France', 1629, 'annedexpert@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (192, 00535543, 'Ornella Ben De Grandome', 'Ornella', 'De Grandome', '1987-07-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '543 Rue 200 France', 200, 'miss_nesta133@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (193, 00536544, 'Chantal Ben Oberic', 'Chantal', 'Oberic', '1948-10-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '544 Rue 800 France', 800, 'coberic@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (194, 00538546, 'Emmanuel Ben Larrieu', 'Emmanuel', 'Larrieu', '1970-12-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '546 Rue 1629 France', 1629, 'ddlarrieu@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (195, 00545553, 'Jean-Marie Ben Schoenaers', 'Jean-Marie', 'Schoenaers', '1947-09-28', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '553 Rue 3634 France', 3634, 'jm.schoenaers@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (196, 00546554, 'Christel Ben Vogne', 'Christel', 'Vogne', '1972-06-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '554 Rue 1551 France', 1551, 'christelle.vogne@chuv.ch', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (197, 00553561, 'Monique Ben Stofkooper', 'Monique', 'Stofkooper', '1966-10-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '561 Rue 3200 France', 3200, 'moony_lune@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (198, 00555563, 'Annie Ben Diehl', 'Annie', 'Diehl', '1950-12-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '563 Rue 1115 France', 1115, 'anniediehl@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (199, 00559567, 'C Ben Dejemeppe', 'C', 'Dejemeppe', '1976-06-05', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '567 Rue 1686 France', 1686, 'celinedejemeppe@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (200, 00565573, 'Ester Ben Bram', 'Ester', 'Bram', '1980-12-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '573 Rue 900 France', 900, 'ester_brame@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (201, 00573581, 'Jean-Luc Ben Pluymers', 'Jean-Luc', 'Pluymers', '1958-04-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '581 Rue 380 France', 380, 'jlpluymers@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (202, 00578586, 'Georgette Ben Mainil', 'Georgette', 'Mainil', '1958-10-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '586 Rue 200 France', 200, 'emelinedeclercq05@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (203, 00580588, 'Sylvie Ben Brevalle', 'Sylvie', 'Brevalle', '1959-12-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '588 Rue 1200 France', 1200, 'sylviebrevalle@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (204, 00582590, 'Caroline Ben Piras', 'Caroline', 'Piras', '1983-02-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '590 Rue 1190 France', 1190, 'caroline.piras@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (205, 00584592, 'Annie Ben Pettelaire', 'Annie', 'Pettelaire', '1955-07-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '592 Rue 2623 France', 2623, 'ets.schoni@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (206, 00597605, 'Catherine Ben Tho', 'Catherine', 'Tho', '1972-04-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '605 Rue 850 France', 850, 'kbao@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (207, 00609617, 'Virginie Ben Briot', 'Virginie', 'Briot', '1964-12-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '617 Rue 2575 France', 2575, 'virginiebriot@lfbeauty-fr.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (208, 00610618, 'Fran Ben Bnp Paribas Fortis', 'Fran', 'Bnp Paribas Fortis', '1962-02-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '618 Rue 1977 France', 1977, 'francoise.senterre@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (209, 00616624, 'Marie-Jos Ben Courvoisier', 'Marie-Jos', 'Courvoisier', '1960-06-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '624 Rue 1838 France', 1838, 'mjocourvoisier@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (210, 00618626, 'Jérôme Ben Piguel', 'Jérôme', 'Piguel', '1976-08-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '626 Rue 1208 France', 1208, 'piguel.jerome@orange.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (211, 00619627, 'Simone Ben Hoenner Streich', 'Simone', 'Hoenner Streich', '1947-11-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '627 Rue 849 France', 849, 'simonebersi@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (212, 00620628, 'Maité Ben Angely', 'Maité', 'Angely', '1948-09-29', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '628 Rue 2581 France', 2581, 'maite.angely@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (213, 00624632, 'Evelyne Ben Gailhard', 'Evelyne', 'Gailhard', '1955-05-05', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '632 Rue 424 France', 424, 'evelyne.gailhard@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (214, 00625633, 'Sandra Ben Delattre', 'Sandra', 'Delattre', '1972-08-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '633 Rue 1806 France', 1806, 'delsandra@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (215, 00632640, 'Salima Ben Idrissi', 'Salima', 'Idrissi', '1979-10-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '640 Rue 3253 France', 3253, 'idrissisalima@live.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (216, 00633641, 'Francoise Ben De Gevigney', 'Francoise', 'De Gevigney', '1949-12-19', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '641 Rue 1492 France', 1492, 'fdege@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (217, 00639647, 'Drif Ben Frederique', 'Drif', 'Frederique', '1965-11-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '647 Rue 874 France', 874, 'lolinouche@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (218, 00640648, 'Floriane Ben Mouchel', 'Floriane', 'Mouchel', '1963-01-15', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '648 Rue 1504 France', 1504, 'florimouche@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (219, 00642650, 'Sylvie Ben Davin Tridot', 'Sylvie', 'Davin Tridot', '1963-12-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '650 Rue 252 France', 252, 'davin.tridot.sylvie@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (220, 00643651, 'Laurence Ben Besse', 'Laurence', 'Besse', '1959-06-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '651 Rue 1100 France', 1100, 'l.besse59@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (221, 00645653, 'Simonne Ben Lhomme', 'Simonne', 'Lhomme', '1955-10-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '653 Rue 1654 France', 1654, 'simone.l_homme@teledisnet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (222, 00646654, 'Marie-Edm Ben Stokis', 'Marie-Edm', 'Stokis', '1956-05-19', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '654 Rue 2600 France', 2600, 'mestokis@live.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (223, 00655663, 'Eliane Ben Avias', 'Eliane', 'Avias', '1955-11-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '663 Rue 931 France', 931, 'eliane.avias@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (224, 00658666, 'Michel Ben Gosse', 'Michel', 'Gosse', '1947-10-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '666 Rue 984 France', 984, 'migjapon@free.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (225, 00661669, 'Corinne Ben Lesage', 'Corinne', 'Lesage', '1974-06-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '669 Rue 1778 France', 1778, 'corinne_lesage@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (226, 00668676, 'Elodie Ben Thuault', 'Elodie', 'Thuault', '1970-09-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '676 Rue 3088 France', 3088, 'emmanuel.elodie@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (227, 00669677, 'David Ben Cohen', 'David', 'Cohen', '1962-06-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '677 Rue 3600 France', 3600, 'd.cohen@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (228, 00674682, 'Jocelyne Ben BROVELLI', 'Jocelyne', 'BROVELLI', '1958-10-01', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '682 Rue 1380 France', 1380, 'jocelyne-brovelli@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (229, 00678686, 'Buyl Ben Marie Louise', 'Buyl', 'Marie Louise', '1951-11-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '686 Rue 3430 France', 3430, 'marie-louise.buyl@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (230, 00681689, 'Odile Ben Cojean', 'Odile', 'Cojean', '1947-12-18', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '689 Rue 860 France', 860, 'c-cojean@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (231, 00682690, 'Aur Ben Arnold', 'Aur', 'Arnold', '1975-07-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '690 Rue 2302 France', 2302, 'aurelia.arnold@sfr.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (232, 00693701, 'Caroline Ben Speileux', 'Caroline', 'Speileux', '1971-10-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '701 Rue 768 France', 768, 'caroline.speileux@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (233, 00694702, 'Chlo Ben Malen', 'Chlo', 'Malen', '1979-06-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '702 Rue 1000 France', 1000, 'chloe.malen@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (234, 00697705, 'Adrien Ben Collet', 'Adrien', 'Collet', '1985-03-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '705 Rue 200 France', 200, 'adrien.collet@hotmail.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (235, 00699707, 'Elisabeth Ben Blondeau', 'Elisabeth', 'Blondeau', '1953-10-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '707 Rue 800 France', 800, 'elisabeth.blondeau@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (236, 00700708, 'Patricia Ben Vaillon', 'Patricia', 'Vaillon', '1959-02-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '708 Rue 1321 France', 1321, 'p.viallon@guillaumond.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (237, 00703711, 'Val Ben De Decker', 'Val', 'De Decker', '1971-12-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '711 Rue 600 France', 600, 'valeriededecker@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (238, 00707715, 'Jany Ben Ferraris', 'Jany', 'Ferraris', '1956-03-05', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '715 Rue 748 France', 748, 'jany.ferraris@laposte.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (239, 00708716, 'Laurent Ben Hendrickx', 'Laurent', 'Hendrickx', '1972-06-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '716 Rue 1099 France', 1099, 'labc95911@hotmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (240, 00713721, 'Elisabeth Ben Giuliano', 'Elisabeth', 'Giuliano', '1966-01-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '721 Rue 800 France', 800, 'eli.giu@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (241, 00716724, 'Emilie Ben Mailleux', 'Emilie', 'Mailleux', '1981-11-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '724 Rue 3800 France', 3800, 'emiliemailleux@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (242, 00717725, 'Betina Ben Blasco', 'Betina', 'Blasco', '1971-07-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '725 Rue 800 France', 800, 'betina.ellingsen@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (243, 00720728, 'Michel Ben Nguyen', 'Michel', 'Nguyen', '1970-08-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '728 Rue 2065 France', 2065, 'mng12@free.fr', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (244, 00721729, 'Gaelle Ben Bebronne', 'Gaelle', 'Bebronne', '1983-02-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '729 Rue 426 France', 426, 'bebronne_gaelle@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (245, 00723731, 'Jeannine Ben Reiter', 'Jeannine', 'Reiter', '1943-12-12', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '731 Rue 2812 France', 2812, 'jeanine@docteur-ramioul.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (246, 00725733, 'Jeroen Ben Weerstra', 'Jeroen', 'Weerstra', '1973-10-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '733 Rue 1412 France', 1412, 'jeroenweerstra@hotmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (247, 00727735, 'Sylvie Ben Mathys', 'Sylvie', 'Mathys', '1965-10-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '735 Rue 663 France', 663, 'sylvie.mathys@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (248, 00728736, 'Véronique Ben Gilson', 'Véronique', 'Gilson', '1961-09-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '736 Rue 3162 France', 3162, 'verogilson@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (249, 00731739, 'Catherine Ben Haest', 'Catherine', 'Haest', '1972-12-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '739 Rue 7531 France', 7531, 'catherine.haest@mensura.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (250, 00733741, 'Christine Ben Daniaux', 'Christine', 'Daniaux', '1958-10-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '741 Rue 1439 France', 1439, 'christine2758@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (251, 00735743, 'Fran Ben Hanze', 'Fran', 'Hanze', '1956-06-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '743 Rue 1969 France', 1969, 'frh.deco@yahoo.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (252, 00746754, 'Nadira Ben Benmousa', 'Nadira', 'Benmousa', '1983-11-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '754 Rue 1560 France', 1560, 'n.adira@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (253, 00750758, 'Anne Ben Gerard', 'Anne', 'Gerard', '1982-10-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '758 Rue 2944 France', 2944, 'a.a.gerard@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (254, 00751759, 'Laurence Ben Thill', 'Laurence', 'Thill', '1978-01-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '759 Rue 1677 France', 1677, 'laurence.thill@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (255, 00753761, 'Astrid Ben Chevance', 'Astrid', 'Chevance', '1986-06-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '761 Rue 2676 France', 2676, 'astrid.chevance@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (256, 00756764, 'Anne Ben Courjaret', 'Anne', 'Courjaret', '1939-11-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '764 Rue 5881 France', 5881, 'ledesert.france@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (257, 00759767, 'Monique Ben Martin', 'Monique', 'Martin', '1948-01-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '767 Rue 726 France', 726, 'martinm51@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (258, 00760768, 'Letot Ben Maryline', 'Letot', 'Maryline', '1963-03-13', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '768 Rue 570 France', 570, 'les4saisons@live.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (259, 00766774, 'V Ben Forraz', 'V', 'Forraz', '1955-12-17', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '774 Rue 1036 France', 1036, 'vforraz@msn.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (260, 00774782, 'Philippe Ben Fay', 'Philippe', 'Fay', '1965-08-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '782 Rue 1225 France', 1225, 'fb569606@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (261, 00781789, 'Christine Ben Gissinger', 'Christine', 'Gissinger', '1969-04-13', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '789 Rue 2025 France', 2025, 'patrice13.gissinger@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (262, 00786794, 'B Ben Houet', 'B', 'Houet', '1969-01-20', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '794 Rue 772 France', 772, 'benedicte.houet@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (263, 00789797, 'Muriel Ben Capet', 'Muriel', 'Capet', '1942-05-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '797 Rue 3135 France', 3135, 'licoya@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (264, 00790798, 'Caroline Ben De Vos', 'Caroline ', 'De Vos', '1967-03-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '798 Rue 1677 France', 1677, 'caroline.devos@cfwb.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (265, 00803811, 'Isabelle Ben Besson', 'Isabelle', 'Besson', '1962-06-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '811 Rue 396 France', 396, 'isabes@laposte.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (266, 00807815, 'Veronique Ben Leclerc', 'Veronique', 'Leclerc', '1962-10-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '815 Rue 195 France', 195, 'thierry.leclerc57@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (267, 00808816, 'Delvaux & Co Ben Pedro Galveias', 'Delvaux & Co', 'Pedro Galveias', '1980-07-10', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '816 Rue 800 France', 800, 'pedro.galveias@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (268, 00819827, 'Celine Ben Brouzes', 'Celine', 'Brouzes', '1978-11-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '827 Rue 873 France', 873, 'david.minerva@sfr.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (269, 00820828, 'Francine Ben Massart', 'Francine', 'Massart', '1952-02-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '828 Rue 1066 France', 1066, 'francine.massart@belgacom.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (270, 00821829, 'Pascale Ben Claes', 'Pascale', 'Claes', '2968-12-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '829 Rue 2268 France', 2268, 'claes_pascale@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (271, 00822830, 'Fanta Ben Guirassy', 'Fanta', 'Guirassy', '1978-10-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '830 Rue 600 France', 600, 'nafli@msn.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (272, 00837845, 'Beatrice Ben Guiot', 'Beatrice', 'Guiot', '1977-01-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '845 Rue 3367 France', 3367, 'beatriceguiot@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (273, 00842850, 'H Ben Supiot-Bertrandom', 'H', 'Supiot-Bertrandom', '1971-07-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '850 Rue 2538 France', 2538, 'helenetfred@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (274, 00846854, 'Christine Ben Loux', 'Christine', 'Loux', '1961-03-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '854 Rue 1200 France', 1200, 'lchryss@hotmail.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (275, 00848856, 'Severine Ben Chair', 'Severine', 'Chair', '1981-08-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '856 Rue 551 France', 551, 'michaeldelperdange@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (276, 00849857, 'Patricia Ben Salvi', 'Patricia', 'Salvi', '1964-03-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '857 Rue 2086 France', 2086, 'jm_pat_bs@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (277, 00857865, 'Regine Ben Wilmet', 'Regine', 'Wilmet', '1967-10-03', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '865 Rue 10545 France', 10545, 'adam.wilmet@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (278, 00858866, 'Béatrice Ben Barbié', 'Béatrice', 'Barbié', '1952-12-16', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '866 Rue 3981 France', 3981, 'b.jeanpierre@aliceadsl.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (279, 00861869, 'Fran Ben Ribant', 'Fran', 'Ribant', '1952-08-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '869 Rue 7021 France', 7021, 'francoise@ribant.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (280, 00938946, 'Marie-Pierre Ben Esteban', 'Marie-Pierre', 'Esteban', '1971-08-23', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '946 Rue 200 France', 200, 'mapi.esteban@worldonline.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (281, 00942950, 'Marie-Claire Ben Le Coz', 'Marie-Claire', 'Le Coz', '1947-05-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '950 Rue 365 France', 365, 'lecoz.marie-claire@neuf.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (282, 00945953, 'Catherine Ben Ligot', 'Catherine', 'Ligot', '1961-03-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '953 Rue 1000 France', 1000, 'catherine.ligot@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (283, 00955963, 'Tchichatcheff Ben Amandine', 'Tchichatcheff', 'Amandine', '1976-04-21', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '963 Rue 1284 France', 1284, 'jfd@cegetel.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (284, 00956964, 'Christian Ben Pevenage', 'Christian', 'Pevenage', '1954-08-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '964 Rue 1905 France', 1905, 'pevenage.christian@skynet.be', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (285, 00957965, 'Arlette Ben Armand', 'Arlette', 'Armand', '1953-07-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '965 Rue 1896 France', 1896, 'armlett@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (286, 00959967, 'Malgorzata Ben Hervouet', 'Malgorzata', 'Hervouet', '1972-08-25', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '967 Rue 1800 France', 1800, 'malgorzata.hervouet@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (287, 00964972, 'Veronique Ben Dhyne', 'Veronique', 'Dhyne', '1962-01-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '972 Rue 600 France', 600, 'veroniquedhyne@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (288, 00967975, 'Ren Ben Deydier', 'Ren', 'Deydier', '1949-09-30', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '975 Rue 2580 France', 2580, 'michel.deydier@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (289, 00969977, 'Adeline Ben Muylaert', 'Adeline', 'Muylaert', '1983-04-04', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '977 Rue 4886 France', 4886, 'adelinemuylaert@hotmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (290, 00972980, 'V Ben Persico', 'V', 'Persico', '1964-02-13', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '980 Rue 1028 France', 1028, 'lilirose37@yahoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (291, 00975983, 'Micheline Ben Razny', 'Micheline', 'Razny', '1941-10-11', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '983 Rue 4800 France', 4800, 'micheline@razny.net', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (292, 00977985, 'Jean-Jacques Ben Bertrandom', 'Jean-Jacques', 'Bertrandom', '1940-11-22', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '985 Rue 1566 France', 1566, 'jean-jacques.bertrandom@gadz.org', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (293, 00980988, 'Marie Ben Krief', 'Marie', 'Krief', '1955-02-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '988 Rue 3923 France', 3923, 'krieff.m@free.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (294, 00990998, 'Marie-Line Ben Dupé', 'Marie-Line', 'Dupé', '1966-05-31', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '998 Rue 591 France', 591, 'marielined44@orange.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (295, 00991999, 'Mireille Ben Brignon', 'Mireille', 'Brignon', '1942-05-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '999 Rue 630 France', 630, 'd.brignon@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (296, 09991007, 'Dominique Ben Fourr', 'Dominique', 'Fourr', '1949-02-09', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1007 Rue 1100 France', 1100, 'dominique-fourre@wanadoo.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (297, 10011009, 'Jacques Ben Pyot', 'Jacques', 'Pyot', '1945-10-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1009 Rue 3200 France', 3200, 'jacques@pyot.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (298, 10031011, 'Sylvie Ben Ardouin', 'Sylvie', 'Ardouin', '1964-05-27', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1011 Rue 3433 France', 3433, 'choupinette333@live.fr', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (299, 10041012, 'Carlo Ben Pletschette', 'Carlo', 'Pletschette', '1978-04-02', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1012 Rue 11311 France', 11311, 'carlople@pt.lu', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (300, 10051013, 'Jacqueline Ben Levy', 'Jacqueline', 'Levy', '1948-09-24', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1013 Rue 2933 France', 2933, 'jacqueline.levy@skynet.be', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (301, 74747478, 'Ali ben jandoubi ben amour', 'Ben jandoubi', 'Ali', '1985-12-14', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '2 Rue 14475 Ariana', 1120, '', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (302, 09553844, 'Koussay Ben Said Ben Salah Azzabi', 'Azzabi', 'Koussay ', '1992-06-26', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '13 grandom rue juvisy', 94700, 'Azzabi.Koussay @gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (303, 09158874, 'Sami Azzbi ben ', 'Azzbi', 'Sami', '1987-08-06', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '1547 rue Jema3', 1110, 'sami-azzbi@gmail.com', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (304, 06638847, 'Baiya Ben Maher Ben Mustapha Ben Tili', 'Ben Tili', 'Baiya', '2022-09-19', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '14 rue sainte faille', 1110, 'baiya.ben.tili@gmail.com', 0, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I'), (305, 09165516, 'Rami ben rida ben mod bouziri', 'Bouziri', 'Rami', '2001-10-08', FLOOR(RAND() * (28999999 - 28000000+ 1)) + 28000000, FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000, '14 rue tarik iben ziya mornguia', 1110, '', 1, DATEADD(DAY, FLOOR(RAND() * (DATEDIFF(DAY, '2022-01-01', '2025-12-31') + 1)), '2022-01-01'), 'Magasin I');"; + String contentQueryProduit1 = " INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES('1', 'NAG P Stick (30 X 2g)', 'Sport', 'Amazfit', 12, 22.642, 18, 26.717, 12, 25.358, 18, 29.434, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-05-29'),('2', 'Tangle Teezer Original - Brosse démêlante Rose', 'MINI', 'Amazfit', 12, 12.355, 18, 14.579, 12, 13.838, 18, 16.062, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-03-30'), ('3', 'Trousse Pieds', 'FAVORIS', 'Amazfit', 12, 42.959, 18, 50.691, 12, 48.114, 18, 55.846, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-03'), ('4', 'Trousse Solaire SPF50', 'Trousses Solaires', 'Amazfit', 12, 14.793, 18, 17.456, 12, 16.569, 18, 19.231, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-11'),('6', 'Ventouse Cellulite Accessoire', 'Minceur Summer', 'Amazfit', 12, 3.298, 18, 3.891, 12, 3.693, 18, 4.287, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-19'),('8', 'Denolin thé courtois infusion 20 x 2g', 'Spécialités', 'Amazfit', 12, 4.066, 18, 4.798, 12, 4.554, 18, 5.286, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-18'), ('9', 'Bilefal thee n 5 100g', 'Spécialité, sérum, va', 'Amazfit', 12, 3.84, 18, 4.531, 12, 4.3, 18, 4.992, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-20'), ('10', 'Avène Couvrance stick correcteur vert stick 3,5g', 'Anticerne', 'Amazfit', 12, 12.397, 18, 14.628, 12, 13.884, 18, 16.116, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-11'), ('11', 'EL-BOTA LONG - BANDAGE ANTI-ÉPICONDYLITE SKIN >30CM T2', 'Bandages', 'Amazfit', 12, 32.264, 18, 38.072, 12, 36.136, 18, 41.943, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-11'), ('12', 'Weleda Élixir de prunellier (prunier sauvage) 200ml', 'Mémoire & concentration', 'Amazfit', 12, 10.368, 18, 12.234, 12, 11.612, 18, 13.478, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-19'), ('13', 'Oral-b Fil dentaire superfloss 50m', 'Fils dentaires', 'Amazfit', 12, 2.959, 18, 3.491, 12, 3.314, 18, 3.846, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-10'), ('14', 'Vichy pastille à la menthe 6x10', 'Pastilles', 'Amazfit', 12, 3.302, 18, 3.896, 12, 3.698, 18, 4.292, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-30'), ('15', 'Homeofresh gomme à mâcher', 'Haleine fraîche', 'SPC Smartee', 12, 1.653, 18, 1.95, 12, 1.851, 18, 2.149, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-15'), ('16', 'Phytospecific phytorelaxer défrisage permanent index 2', 'TV', 'RF', 5, 100, 20, 120, 50, 180, 30, 234, '', 12, '', '0xffffffff', '', '', '', '', '2023-05-08'), ('100', 'Article de Test', 'Allaitement', 'TESTPROD', 12, 100, 10, 110, 20, 132, 15, 151.8, '', 1, '', '0xffffffff', '', '', '', '', '2020-09-26'), ('101', 'TV Sumsung 4k 55', 'TV', 'SUMSUNG', 12, 1000, 10, 1100, 23, 1353, 20, 1610.4, '', 1, '', '0xffffffff', '', '', '', '', '2022-10-08'), ('1017565', 'SORIA 14-C ALLERDIN 60 CAPSULE *10014', 'Comprimés & sirops', 'SPC Smartee', 12, 15.802, 18, 18.646, 12, 17.698, 18, 20.542, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-02'), ('1021443', 'Batterie appareil oreille pr 230h 6', 'Audition', 'SPC Smartee', 12, 7.231, 18, 8.533, 12, 8.099, 18, 9.401, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-30'), ('1079656', 'Alphamega Tisane provencale n1 sach 25', 'Constipation', 'SPC Smartee', 12, 8.575, 18, 10.119, 12, 9.605, 18, 11.148, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-04'), ('1080910', 'Arkopharma Activox miel citron sans sucre 24 pastilles ', 'Produits pauvres en sucre', 'SPC Smartee', 12, 6.132, 18, 7.236, 12, 6.868, 18, 7.972, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-24'), ('1096627', 'Saforelle soin lavant doux 250 ml', 'Solution lavante', 'SPC Smartee', 12, 7.066, 18, 8.338, 12, 7.914, 18, 9.186, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-30'), ('1103662', 'ILEODRESS PLUS POCHE DRA.1P.TRANSPARENT 19-60MM 10 G5530', 'Stomie', 'SPC Smartee', 12, 47.425, 18, 55.961, 12, 53.115, 18, 61.652, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-17'), ('1135367', 'Eucerin Ph5 peau sensible huile de douche 200ml', 'Bain moussant/Huile de Bain', 'SPC Smartee', 12, 8.264, 18, 9.752, 12, 9.256, 18, 10.744, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-22'), ('1203322', 'Coloplast Drainage poche vidable 10 100ml', 'Incontinence urinaire', 'SPC Smartee', 12, 52.009, 18, 61.371, 12, 58.251, 18, 67.612, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-16'), ('1204098', 'Prodisephar prélude exacto 1 test de grossesse stylo', 'Test de grossesse', 'SPC Smartee', 12, 6.198, 18, 7.314, 12, 6.942, 18, 8.058, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-29'), ('1222272', 'Gaba benelux meridol bain de bouche 400ml', 'Parapharmacie & Orthopédie', 'SPC Smartee', 12, 6.496, 18, 7.666, 12, 7.276, 18, 8.445, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-21'), ('1223379', 'Scholl Pharma protecteurs de cors ovale - mousse 9 pièces', 'Cors', 'SPC Smartee', 12, 2.802, 18, 3.306, 12, 3.138, 18, 3.642, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-07'), ('1252576', 'Bomedys nippes pince epiler oblique large 37', 'Pinces à épiler', 'SPC Smartee', 12, 2.76, 18, 3.257, 12, 3.092, 18, 3.588, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-10'), ('1273416', 'Youcky Pince à tiques', 'Antiparasitaires', 'SPC Smartee', 12, 4.223, 18, 4.983, 12, 4.73, 18, 5.49, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-11-14'), ('1301159', 'PROTECTION TALON ET COUDE 2 MEDIUM-BLEU', 'Pansements et compresses', 'SPC Smartee', 12, 48.066, 18, 56.718, 12, 53.834, 18, 62.486, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-01'), ('1304104', 'Deba ginkgo fort gélules 120x(60mg)', 'Mémoire', 'SPC Smartee', 12, 24.434, 18, 28.832, 12, 27.366, 18, 31.764, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-27'), ('1343037', 'Arkogélules Échinacée végétales 45 gélules', 'Phytothérapies', 'SPC Smartee', 12, 8.915, 18, 10.52, 12, 9.985, 18, 11.59, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-31'), ('1343060', 'Arkogélules Eucalyptus végétales 45 gélules', 'Voies Respiratoires', 'SPC Smartee', 12, 8.915, 18, 10.52, 12, 9.985, 18, 11.59, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-31'), ('1343656', 'Arkogélules Sauge végétales 45 gélules', 'Nature&Bio', 'SPC Smartee', 12, 8.726, 18, 10.297, 12, 9.774, 18, 11.344, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-31'), ('1407212', 'Fe & fer complex minerals 60 gelules', 'Défense naturelle', 'SPC Smartee', 12, 0, 18, 0, 12, 0, 18, 0, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-03-04'), ('1420850', 'Energetica Natura Bourdaine 100 comprimés', 'Aliments diététiques', 'SPC Smartee', 12, 19.236, 18, 22.698, 12, 21.544, 18, 25.007, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-21'), ('1433424', 'Omega pharma zincotabs 60 comprimés', 'Rhumatisme & rhumatologie', 'SPC Smartee', 12, 9.387, 18, 11.076, 12, 10.513, 18, 12.203, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-20'), ('1435668', 'Metagenics Milcalm funciomed 39 120 capsules', 'Détente & sommeil', 'SPC Smartee', 12, 21.217, 18, 25.036, 12, 23.763, 18, 27.582, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-15'), ('1455229', 'Metagenics Green magma 136 136 comprimés', 'Diabète', 'SPC Smartee', 12, 16.5, 18, 19.47, 12, 18.48, 18, 21.45, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-22'), ('1499953', 'Energetica Natura Bromelaine plus 100 comprimés', 'Probiotiques', 'SPC Smartee', 12, 26.17, 18, 30.88, 12, 29.31, 18, 34.021, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-21'), ('1504034', 'Metagenics Indolplex 60 capsules', 'Rein, vessie & prostate', 'SPC Smartee', 12, 37.726, 18, 44.517, 12, 42.254, 18, 49.044, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-29'), ('1506765', 'Energetica Natura Thyrotabs biotics 90 comprimés', 'Iode', 'SPC Smartee', 12, 24.967, 18, 29.461, 12, 27.963, 18, 32.457, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-07'), ('1527670', 'Superwhite gel liquide (75ml)', 'Blanchiment', 'SPC Smartee', 12, 3.033, 18, 3.579, 12, 3.397, 18, 3.943, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-11'), ('1530831', 'Clinutren dessert vanille 4x125g cfr 2748309', 'Immunonutrition', 'SPC Smartee', 12, 7.264, 18, 8.572, 12, 8.136, 18, 9.443, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-26'), ('1549518', 'Dermo pain peaux seches 100g', 'Soins du corps', 'SPC Bandini', 12, 3.884, 18, 4.583, 12, 4.35, 18, 5.05, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'), ('1549559', 'Klorane Dermo pain peaux delicates 100g', 'Pain Dermatologique', 'SPC Bandini', 12, 3.884, 18, 4.583, 12, 4.35, 18, 5.05, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'), ('1572403', 'HYDRABAK COLLYRE 10ML', 'Optique', 'SPC Bandini', 12, 7.471, 18, 8.816, 12, 8.368, 18, 9.712, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-23'), ('1580000', 'Metagenics Cran max funciomed vegicaps 60x450mg', 'Confort urinaire', 'SPC Bandini', 12, 25.462, 18, 30.045, 12, 28.518, 18, 33.101, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-26'), ('1585397', 'Marque v bicarbonate sodium pdr 250g', 'Autre', 'SPC Bandini', 12, 2.579, 18, 3.043, 12, 2.888, 18, 3.352, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-03'), ('1597905', 'Caudalie Pulpe Vitaminée Crème yeux et lèvre 15ml', 'Contour des yeux', 'SPC Bandini', 12, 18.527, 18, 21.862, 12, 20.75, 18, 24.085, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-23'), ('1597939', 'Caudalie Crème gommante douce tube 60ml', 'Cosmétiques & Beauté', 'SPC Bandini', 12, 13.058, 18, 15.409, 12, 14.625, 18, 16.976, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'), ('1621564', 'FILMABAK COLLYRE 2% 10 ML', 'Yeux & ophtamologie', 'SPC Bandini', 12, 8.62, 18, 10.171, 12, 9.654, 18, 11.206, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-02'), ('1624279', 'Metagenics Ultraglycem X poudre soluble 700g', 'Produits sans glutens', 'SPC Bandini', 12, 80.179, 18, 94.612, 12, 89.801, 18, 104.233, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-27'), ('1626894', 'Pranarom Thym satureioide huile essentielle 10ml', 'Huiles essentielles', 'SPC Bandini', 12, 11.075, 18, 13.069, 12, 12.405, 18, 14.398, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-02'), ('1628668', 'FRESUBIN ORIGINAL FIBRE EASY BAG 1L *7539231', 'Alimentation par sonde', 'SPC Bandini', 12, 6.972, 18, 8.227, 12, 7.808, 18, 9.063, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-22'), ('1638832', 'Canderel cankao 250g', 'Edulcorant', 'SPC Bandini', 12, 6.509, 18, 7.681, 12, 7.291, 18, 8.462, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-02-09'), ('1685544', 'GUM PROXABRUSH REFILLS CLASSIC TAP UFINE 8*414', 'Gommes dentaires', 'SPC Bandini', 12, 3.38, 18, 3.989, 12, 3.786, 18, 4.394, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-11'), ('1718212', 'SÉRUM PHYSIOLOGIQUE & SOLUTION ISOTONIQUE UNIDOSE 9% 30 x 5ML', 'Spray auriculaire', 'SUMSUNG', 12, 5.613, 18, 6.624, 12, 6.287, 18, 7.297, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-24'), ('1727155', 'Ecrinal Durcisseur ongles brillant 10ml', 'Vernis à ongles', 'SUMSUNG', 12, 10.314, 18, 12.171, 12, 11.552, 18, 13.408, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-24'), ('1727213', 'Ecrinal Dissolvant doux 125ml', 'Dissolvants', 'SUMSUNG', 12, 9.702, 18, 11.449, 12, 10.867, 18, 12.613, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-24'), ('1730555', 'Saforelle creme apaisante 50ml', 'Hygiène intime', 'SUMSUNG', 12, 6.198, 18, 7.314, 12, 6.942, 18, 8.058, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-30'), ('1745108', ' Body activ renovateur fl pompe 150ml', 'Soins anti-vergetures', 'SUMSUNG', 12, 24.793, 18, 29.256, 12, 27.769, 18, 32.231, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'), ('1750488', 'Furterer Style spray gloss 100ml', 'Gels & mousses de coiffage', 'SUMSUNG', 12, 14.215, 18, 16.774, 12, 15.921, 18, 18.479, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-08'), ('1750876', 'Marque v bouillotte gel enfant ours rouge 401g', 'Bouillottes', 'SUMSUNG', 12, 11.95, 18, 14.101, 12, 13.384, 18, 15.536, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-03'), ('1751577', 'Chenidine gel soin de plaie 100g', 'Vétérinaire', 'SUMSUNG', 12, 16.085, 18, 18.98, 12, 18.015, 18, 20.91, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-26'), ('1753763', 'Sportstech fitmeal vanille poudre 630g', 'Diététique du sportif', 'SUMSUNG', 12, 25.934, 18, 30.602, 12, 29.046, 18, 33.714, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-02'), ('1754092', 'Metagenics Sportstech Tribubolan 120 capsules', 'Prise de masse', 'Lenovo', 12, 38.198, 18, 45.074, 12, 42.782, 18, 49.658, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-26'), ('1782200', 'T. LECLERC: FARD À JOUES POUDRÉ ORANGE PERLE 5G', 'Blush', 'Lenovo', 12, 21.479, 18, 25.346, 12, 24.057, 18, 27.923, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'), ('1782358', 'T.Leclerc mascara brun m/05', 'Mascara', 'Lenovo', 12, 18.182, 18, 21.455, 12, 20.364, 18, 23.636, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-04'), ('1782390', 'T. LECLERC: OMBRE À PAUPIÈRES POUDRE DUO TAUPE 2.5G', 'Poudre libre', 'Lenovo', 12, 20.661, 18, 24.38, 12, 23.14, 18, 26.86, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-05'), ('1782564', 'Rhinicur douche nasale + 4 sachets sel rinçage', 'Gouttes & spray nasal', 'Lenovo', 12, 13.943, 18, 16.453, 12, 15.617, 18, 18.126, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-08-19'), ('1782648', 'T.Leclerc crayon yeux étain CY/10 1.05G ', 'Eye liner', 'Lenovo', 12, 14.05, 18, 16.579, 12, 15.736, 18, 18.264, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-04'), ('1799972', 'Metagenics Cholarest sc comprimés 60', 'Cardio-vasculaire : coeur', 'Lenovo', 12, 34.255, 18, 40.421, 12, 38.365, 18, 44.531, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-19'), ('181974', 'Bebisol ciseaux droits', 'Toilette de bébé', 'DELL', 12, 6.81, 18, 8.036, 12, 7.627, 18, 8.853, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-28');"; + String contentQueryProduit2 = " INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite, datecreation) VALUES('1854181', 'Anvarex bas thérapeutiques ad-p small', 'Bas de contention', 'DELL', 12, 57.538, 18, 67.895, 12, 64.442, 18, 74.799, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-05'),('195776', 'Wolf bistouri sm manche n 3', 'Bistouris', 'DELL', 12, 5.901, 18, 6.963, 12, 6.609, 18, 7.671, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-07'), ('198176', 'Aperop 14x15ml', 'Gelée royale', 'DELL', 12, 9.264, 18, 10.932, 12, 10.376, 18, 12.043, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-04'), ('2021491', 'La Roche-Posay Respectissime démaquillant yeux waterproof 125ml', 'Démaquillants yeux', 'SOUNDCORE', 12, 13.43, 18, 15.847, 12, 15.041, 18, 17.459, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'), ('2022630', 'Vichy dercos shampooing énergisant à laminexil 200ml', 'Shampooings anti-chute', 'SOUNDCORE', 12, 10.702, 18, 12.629, 12, 11.987, 18, 13.913, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-29'), ('2023000', 'Vichy soin corp. crème dépilatoire dermo-tolerance 150ml', 'Crème dépilatoire', 'SOUNDCORE', 12, 12.479, 18, 14.726, 12, 13.977, 18, 16.223, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'), ('2023760', 'vichy soin corp. cire depilatoire dermo-toler. bde6x2', 'Epilation à la cire', 'SOUNDCORE', 12, 13.347, 18, 15.75, 12, 14.949, 18, 17.351, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'), ('2027779', 'Vichy Normaderm stick assechant camouflant anti-imperfections 0,28g', 'Acné', 'SOUNDCORE', 12, 9.876, 18, 11.654, 12, 11.061, 18, 12.839, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-31'), ('2030534', 'vichy podexine reparateur crevasses 30ml', 'Soins des pieds', 'Smatree', 12, 8.388, 18, 9.898, 12, 9.395, 18, 10.905, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-31'), ('2030542', 'PODEXINE CRÈME CORRECTEUR CALLOSITÉS 30 ML', 'Manucure & Pédicure', 'Smatree', 12, 7.025, 18, 8.289, 12, 7.868, 18, 9.132, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-31'), ('2030872', 'La Roche Posay Lipikar surgras douche crème concentré anti-dessèchement 200ml', 'Crème Lavante/ Gel Surgras', 'Smatree', 12, 9.917, 18, 11.702, 12, 11.107, 18, 12.893, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'), ('2030963', 'La Roche Posay Cicaplast accélérateur réparateur dermique 40ml', 'Cicatrisant', 'Smatree', 12, 9.339, 18, 11.02, 12, 10.46, 18, 12.14, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-03'), ('2031037', 'La Roche Posay Anthelios stick zones sensibles ip50+ 9g', 'Crème solaire', 'Smatree', 12, 8.678, 18, 10.24, 12, 9.719, 18, 11.281, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'), ('2034338', 'Vichy Homme hydra mag C gel douche 200ml', 'Gels douche homme', 'VSZAPOWER', 12, 9.421, 18, 11.117, 12, 10.552, 18, 12.248, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-17'), ('2034742', 'vichy homme mousse a raser sans savon 200ml ', 'Gels-Mousses à raser', 'VSZAPOWER', 12, 9.711, 18, 11.459, 12, 10.876, 18, 12.624, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-17'), ('2035582', 'vichy homme liftactiv yeux creme 15ml ', 'Contour des yeux homme', 'VSZAPOWER', 12, 19.421, 18, 22.917, 12, 21.752, 18, 25.248, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-17'), ('2035814', 'La Roche Posay Toleriane fluide dermo-nettoyant 400ml', 'Gel moussant', 'VSZAPOWER', 12, 13.802, 18, 16.286, 12, 15.458, 18, 17.942, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'), ('2036119', 'La Roche Posay Effaclar eau micellaire purifiante 200ml', 'Toilette du visage', 'VSZAPOWER', 12, 11.983, 18, 14.14, 12, 13.421, 18, 15.579, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'), ('2037133', 'Vichy Homme sensibaume mineral 75ml', 'Homme', 'VSZAPOWER', 12, 15.542, 18, 18.339, 12, 17.407, 18, 20.204, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-29'), ('2038073', 'Vichy Capital soleil après soleil soin lacté quotidien 300ml', 'Lait après-solaire', '5Fvie', 12, 16.488, 18, 19.455, 12, 18.466, 18, 21.434, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-31'), ('2043115', 'T.Leclerc rouge à lèvres transparent voile rt/04', 'Rouge à lèvres', '5Fvie', 12, 14.876, 18, 17.554, 12, 16.661, 18, 19.339, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-05'), ('2067486', ' homme autobronzant gel hydratant tube 50ml', 'Rasage', '5Fvie', 12, 16.107, 18, 19.007, 12, 18.04, 18, 20.94, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'), ('2074375', 'Nobacter gel de rasage 150ml', 'Gels de rasage', '5Fvie', 12, 6.612, 18, 7.802, 12, 7.405, 18, 8.595, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-11'), ('2092815', 'Nutergia Bionisol A liquide 250ml', 'Articulation & os', '5Fvie', 12, 16.981, 18, 20.038, 12, 19.019, 18, 22.075, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-26'), ('2098986', 'Pranarom Mandarine-citrus bio zeste naturel 10ml ', 'Huiles essentielles bio', 'HP', 12, 8.377, 18, 9.885, 12, 9.383, 18, 10.891, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-20'), ('2104685', 'Klorane Petit junior spray démêlant 125ml', 'Lotions capillaires', 'HP', 12, 6.744, 18, 7.958, 12, 7.553, 18, 8.767, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'), ('2106813', 'CHONDRO CAPSULES 650MG 300', 'Allergies', 'HP', 12, 105.708, 18, 124.735, 12, 118.392, 18, 137.42, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-09'), ('2106854', 'Nutrilon bmf pdr 200g cfr 2677078', 'Boisssons pour bébés', 'HP', 12, 19.764, 18, 23.322, 12, 22.136, 18, 25.693, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'), ('2139996', 'Glucofen 90 caps', 'Comprimés', 'HP', 12, 16.5, 18, 19.47, 12, 18.48, 18, 21.45, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-02'), ('2147502', 'ENFAMIL AR 1 POUDRE 400G', 'Repas de bébé', 'HP', 12, 9.443, 18, 11.143, 12, 10.577, 18, 12.276, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-24'), ('2164093', 'Parodontax Gel fluor + echinacea tube 75ml', 'Dentifrices bio aux plantes', 'COOLRRPLUS', 12, 4.236, 18, 4.998, 12, 4.744, 18, 5.507, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-23'), ('2164291', 'Lierac Phytrel ampoule buste 20x5ml', 'Soins du buste', 'COOLRRPLUS', 12, 31.397, 18, 37.048, 12, 35.164, 18, 40.816, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'), ('2170975', 'Pranarom Feminaissance accouchement harmonieux huile 5ml', 'Huiles végétales', 'COOLRRPLUS', 12, 10.479, 18, 12.366, 12, 11.737, 18, 13.623, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-18'), ('2171031', ' aqua-d+ fluide teintmultivithyddore 40ml', 'Maquillage', 'COOLRRPLUS', 12, 19.421, 18, 22.917, 12, 21.752, 18, 25.248, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'), ('2171973', 'Uriage Isophy spray nasal 100ml', 'Spray nasal', 'COOLRRPLUS', 12, 6.613, 18, 7.804, 12, 7.407, 18, 8.597, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-19'), ('2171999', 'Uriage 1ere eau lingettes paquet 25', 'Le change de bébé', 'COOLRRPLUS', 12, 5.283, 18, 6.234, 12, 5.917, 18, 6.868, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-19'), ('2172500', 'Pharmalens lentilles de contact dioptrie -11 3', 'Atrier', 'COOLRRPLUS', 12, 17.364, 18, 20.489, 12, 19.447, 18, 22.573, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-24'), ('2173318', 'COMPLEAL.MAN SOJA-NG CAPSULES 60', 'Forme sexuelle', 'COOLRRPLUS', 12, 24.387, 18, 28.776, 12, 27.313, 18, 31.703, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-09'), ('2187987', 'Nutergia Ergy 3 100 gél', 'Circulation & jambes lourdes', 'COOLRRPLUS', 12, 21.604, 18, 25.492, 12, 24.196, 18, 28.085, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-05'), ('2199545', 'Nutricia milton 16 comprimés de stérilisation', 'Désinfectant', 'COOLRRPLUS', 12, 7.264, 18, 8.572, 12, 8.136, 18, 9.443, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'), ('2200434', 'Weleda Huile minceur aux extraits de bouleau 100ml ', 'Produits minceurs', 'BIKCO', 12, 14.455, 18, 17.056, 12, 16.189, 18, 18.791, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-13'), ('2215051', 'Nutergia Mycokyl 90 comprimés', 'Régulation intestinale', 'BIKCO', 12, 26.42, 18, 31.176, 12, 29.59, 18, 34.346, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-01'), ('2222867', 'Newderm pommade protection peau 45g', 'Eczema & rougeurs', 'BIKCO', 12, 3.962, 18, 4.675, 12, 4.438, 18, 5.151, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-26'), ('2229250', 'Herbalgem Ronce macérat 50ml', 'Maux de gorge', 'BIKCO', 12, 23.538, 18, 27.775, 12, 26.362, 18, 30.599, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-04'), ('2229458', 'Herbalgem Baume grandome consoude tube 60g', 'Gemmothérapie', 'BIKCO', 12, 9.05, 18, 10.679, 12, 10.136, 18, 11.764, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-23'), ('2234359', 'Energetica Natura Optic plus 2 biotics 60 gélules', 'Yeux', 'BIKCO', 12, 29.858, 18, 35.233, 12, 33.442, 18, 38.816, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-08'), ('2243673', 'Wolf trancheur de pilule', 'Matériel médical', 'BIKCO', 12, 4.198, 18, 4.954, 12, 4.702, 18, 5.458, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-07'), ('2258218', 'Aproten chicchi 500g', 'Aliments pauvres en protide', 'BIKCO', 12, 4.575, 18, 5.399, 12, 5.125, 18, 5.948, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-02-11'), ('2258564', ' soin fluide sans rinçage grenade 100ml', 'Cheveux', 'OxygenOS', 12, 7.62, 18, 8.991, 12, 8.534, 18, 9.906, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'), ('2265502', 'SPÉCIFIQUE DRAINEUR CELLULITE DOSETTES 10 x 10ML', 'Minceur', 'OxygenOS', 12, 17.925, 18, 21.151, 12, 20.075, 18, 23.302, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-19'), ('2268415', ' shampoing tournesol vitamine f cheveux colorés 250ml', 'Accueil', 'OxygenOS', 12, 9.909, 18, 11.693, 12, 11.098, 18, 12.882, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-09'), ('2275675', 'Nutergia Ergysil gel tube 200ml', 'Crème & gel', 'OxygenOS', 12, 28.77, 18, 33.949, 12, 32.222, 18, 37.401, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-28'), ('2277309', 'Drynites boy xl 8-15 ans 13', 'Couches et propreté', 'OxygenOS', 12, 16.972, 18, 20.027, 12, 19.008, 18, 22.063, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-24'), ('2280006', 'ORAL-B BRAUN CONTRÔLE DE LA PLAQUE DENTAIRE CLEAN D12513', 'Hygiène dentaire', 'OxygenOS', 12, 26.406, 18, 31.159, 12, 29.574, 18, 34.327, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-04'), ('2294221', 'Solidea mi-bas relax 140 unisex corda 3-l', 'Zwachtel', 'OxygenOS', 12, 28.198, 18, 33.274, 12, 31.582, 18, 36.658, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-12'), ('2296432', 'Phytospecific phytorelaxer défrisage permanent index 2', 'Produits défrisants', 'Nord25', 12, 28.926, 18, 34.132, 12, 32.397, 18, 37.603, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-23'), ('2307551', 'Be Life Co-q10 magnum 60 gélules', 'Récupération', 'Nord25', 12, 24.481, 18, 28.888, 12, 27.419, 18, 31.825, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-13'), ('2324366', 'Akileine Rouge sels de bain délassants 300g', 'Sels de bains', 'Nord25', 12, 8.545, 18, 10.084, 12, 9.571, 18, 11.109, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-19'), ('2333128', 'Pranarom Feminaissance gommage vergetures huile ess 15ml', 'Gommage corps', 'Nord25', 12, 11.669, 18, 13.77, 12, 13.07, 18, 15.17, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-20'), ('2340313', 'Omron compair pro c29 nebuliseur-compres+kit vvt', 'Aérosols & accessoires', 'Nord25', 12, 1000, 18, 1180, 12, 1321.6, 18, 1559.49, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-01'), ('2355832', 'METHIO 500 GEL 60x500MG', 'Anti-oxydant', 'Nord25', 12, 14.142, 18, 16.687, 12, 15.838, 18, 18.384, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-11'), ('2356269', 'Tilman origine nez et gorge 28 nr31', 'Comprimés, sirops & sachets', 'Nord25', 12, 11.226, 18, 13.247, 12, 12.574, 18, 14.594, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-18'), ('2357424', 'Avene Huile corporelle flacon pompe 200ml', 'Huiles corporelles', 'OnePlus', 12, 17.364, 18, 20.489, 12, 19.447, 18, 22.573, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'), ('2357432', 'Avene Soin déodorant régulateur flacon bille 50ml', 'Déodorants', 'OnePlus', 12, 9.917, 18, 11.702, 12, 11.107, 18, 12.893, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'), ('2373033', 'EPITACT PROTECTEUR POUR HALLUX VALGUS PETIT', 'Protections', 'OnePlus', 12, 20.708, 18, 24.435, 12, 23.192, 18, 26.92, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-21'), ('2379139', '3m Opticlude comfort maxi 20 pièces 5,7cmx8cm', 'Accessoire', 'OnePlus', 12, 9.405, 18, 11.098, 12, 10.534, 18, 12.226, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-09'), ('2382257', 'Caudalie Pulpe Vitaminée Crème Anti Rides 40Ml', 'Soins peaux jeunes', 'OnePlus', 12, 23.165, 18, 27.334, 12, 25.945, 18, 30.114, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'), ('2384956', 'Klorane Masque après-shampoing au lait de papyrus 150ml', 'Masque capillaire', 'OnePlus', 12, 15.785, 18, 18.626, 12, 17.679, 18, 20.521, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'), ('2385763', 'Ducray Nutricerat concentré gainant ultra-nutritif pointes très sèches et très abîmées 75ml', 'Soins cheveux sans rinçage', 'OnePlus', 12, 12.562, 18, 14.823, 12, 14.069, 18, 16.331, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-05'), ('2387827', 'SPÉCIFIQUE DRAINEUR CELLULITE DOSETTES 20 x 10ML (2x10)', 'Draineurs anticellulites', 'OnePlus', 12, 33.009, 18, 38.951, 12, 36.971, 18, 42.912, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-22'), ('2388346', 'Be life Citrobiotic bio 50ml', 'Produits biologiques', 'IMMORTALS', 12, 12.83, 18, 15.14, 12, 14.37, 18, 16.679, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-13'), ('2399103', 'Puressentiel Maux de ventre massage aux 15 huiles essentielles 50ml', 'Crampes intestinales', 'IMMORTALS', 12, 15.289, 18, 18.041, 12, 17.124, 18, 19.876, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-12'), ('2404697', 'Nutergia Ergyline 100 capsules', 'Peau', 'IMMORTALS', 12, 21.604, 18, 25.492, 12, 24.196, 18, 28.085, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-27'), ('2410124', 'Forte pharma Expert cheveux 28 comprimés', 'Ongles', 'IMMORTALS', 12, 14.151, 18, 16.698, 12, 15.849, 18, 18.396, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-20'), ('2415925', 'Avent bec anti-fuite souple +6 mois 2', 'Tétines de biberons', 'IMMORTALS', 12, 6.843, 18, 8.075, 12, 7.664, 18, 8.896, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-10'), ('2428712', 'Phytospecific complexe unifiant 50ml', 'Soins Anti-taches', 'IMMORTALS', 12, 21.488, 18, 25.355, 12, 24.066, 18, 27.934, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-23'), ('2432920', 'Mustela dermo-pédiatrie stelaprotect fluide 200 ml', 'Cosmétiques', 'IMMORTALS', 12, 9.091, 18, 10.727, 12, 10.182, 18, 11.818, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'), ('2443398', 'Phytosun démangeaison 15 ml', 'Complexe pour diffuseur', 'IMMORTALS', 12, 9.05, 18, 10.679, 12, 10.136, 18, 11.764, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-09'), ('2445153', 'Forte Pharma Expert bronzage 28 comprimés', 'Soleil', 'IMMORTALS', 12, 16.981, 18, 20.038, 12, 19.019, 18, 22.075, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-20'), ('2446128', 'Avene Couvrance 01 blond crayon correcteur sourcils 1,19g', 'Crayon maquillage', 'kwmobile', 12, 11.983, 18, 14.14, 12, 13.421, 18, 15.579, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'), ('2447530', 'Tensiometre spotarm i-q142 om', 'Tensiomètres', 'kwmobile', 12, 164.463, 18, 194.066, 12, 184.198, 18, 213.802, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-19'), ('245266', 'Wolf gant coton a/allergie m paire', 'Gants en latex', 'kwmobile', 12, 2.579, 18, 3.043, 12, 2.888, 18, 3.352, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-07'), ('2454510', 'Be Life Taurin 500 90 gélules', 'Acides aminés', 'kwmobile', 12, 12.217, 18, 14.416, 12, 13.683, 18, 15.882, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-11'), ('2459386', 'Puressentiel Roller mal des transports aux 7 huiles essentielles 5ml', 'Mal des transports', 'kwmobile', 12, 8.512, 18, 10.045, 12, 9.534, 18, 11.066, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-12'), ('2460418', 'ANTISTAX SPRAY RAFRAÎCHISSANT 75 ML', 'Soins des jambes', 'kwmobile', 12, 9.083, 18, 10.718, 12, 10.173, 18, 11.807, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-18'), ('2463651', 'Nutergia Ergycare 80 gélules', 'Stress & dépression', 'kwmobile', 12, 21.7, 18, 25.606, 12, 24.304, 18, 28.21, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-27'), ('2464311', 'T.Leclerc brillant à lèvres 19 orange sanguine 4.2g', 'Gloss', 'kwmobile', 12, 14.876, 18, 17.554, 12, 16.661, 18, 19.339, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-06'), ('2469302', 'Korres hair dark blond 6n herbe baume colorant sans ammoniaque', 'Colorations', 'kwmobile', 12, 13.264, 18, 15.652, 12, 14.856, 18, 17.244, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-13'), ('2482065', 'Avent thermomètre flexible 9sec rapid', 'Thermomètres', 'Kena', 12, 9.868, 18, 11.644, 12, 11.052, 18, 12.828, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-10'), ('2483444', 'Evodry spray buccal 50ml', 'Sécheresse buccale', 'Kena', 12, 6.942, 18, 8.192, 12, 7.775, 18, 9.025, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-02-26'), ('2486272', 'Resultz 100 ml', 'Produits anti-poux', 'Kena', 12, 10.661, 18, 12.58, 12, 11.94, 18, 13.86, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-22'), ('2491330', ' patches citronella+tea tree 24', 'Parapharmacie', 'Kena', 12, 10.472, 18, 12.357, 12, 11.728, 18, 13.613, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'), ('2491363', 'Korres Face grenade 25 lingettes démaquillantes visage-yeux ', 'Lingettes démaquillantes', 'Kena', 12, 7.066, 18, 8.338, 12, 7.914, 18, 9.186, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-10'), ('2492296', 'Marque v semes chaude-froide 20x30cm', 'Orthopédie', 'Kena', 12, 13.843, 18, 16.335, 12, 15.504, 18, 17.996, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-03'), ('2505758', 'A.Vogel Echinoforce spray gorge 30ml ', 'Spray', 'Kena', 12, 10.84, 18, 12.791, 12, 12.14, 18, 14.092, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-29'), ('2506798', 'Puressentiel Coups de soleil spray aux 8 huiles essentielles 75ml', 'Brulures & coups de soleil', 'NiPoGi', 12, 13.058, 18, 15.408, 12, 14.625, 18, 16.975, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-05'), ('2513406', '2Pharma Verrukill (gelée) liquide avec 12 applicateurs 5', 'Verrues', 'NiPoGi', 12, 15.905, 18, 18.768, 12, 17.814, 18, 20.677, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-26'), ('2514461', 'Applicateurs vaginaux besins healthcare 5', 'Pansements', 'NiPoGi', 12, 5.708, 18, 6.735, 12, 6.392, 18, 7.42, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-23'), ('2534451', 'Nutergia Végénutril boisson cacao 300g', 'Protéines', 'NiPoGi', 12, 22.547, 18, 26.606, 12, 25.253, 18, 29.311, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-11'), ('2534477', 'Nutergia Vegenutril boisson café pot 300g', 'Aliments hyperprotéinés', 'NiPoGi', 12, 22.547, 18, 26.606, 12, 25.253, 18, 29.311, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-11'), ('2538478', 'Hwb international Maca comprimé 100 x 800mg', 'Hygiène féminine', 'NiPoGi', 12, 18.821, 18, 22.208, 12, 21.079, 18, 24.467, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-06'), ('2538809', 'T.leclerc ombre à paupières mono bleu nuit 114', 'Fard à paupières', 'NiPoGi', 12, 21.488, 18, 25.355, 12, 24.066, 18, 27.934, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-04'), ('2539203', 'Neuapharma muconet 24 filtres', 'Mouche bébé', 'NiPoGi', 12, 3.471, 18, 4.096, 12, 3.888, 18, 4.512, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'), ('2542611', 'BODYSOL MEN: BAUME APRÈS-RASAGE NOUVELLE FORMULE 150ML ', 'Baume après-rasage', 'NiPoGi', 12, 9.868, 18, 11.644, 12, 11.052, 18, 12.828, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'), ('2543536', 'Puressentiel Huile massage bio effort musculaire - amica/gaullhérie 100ml', 'Huiles de massage', 'NiPoGi', 12, 13.719, 18, 16.188, 12, 15.365, 18, 17.835, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-09'), ('2558880', 'Forté Pharma Turbodraine 30 comprimés', 'Aide minceur', 'NiPoGi', 12, 16.981, 18, 20.038, 12, 19.019, 18, 22.075, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-19'), ('2566099', 'Scholl Pharma sels de bain délassants 275g', 'Transpiration', 'NiPoGi', 12, 5.08, 18, 5.994, 12, 5.69, 18, 6.604, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-07'), ('2570273', 'TOUCHE PRODIGIEUSE PINCEAU PEAUX MATES 6.5ML', 'Pinceau maquillage', 'NiPoGi', 12, 21.066, 18, 24.858, 12, 23.594, 18, 27.386, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'), ('2575967', ' Pulpe Vitaminee serum 1eres rides 30ml', 'Crème anti-âge', 'NiPoGi', 12, 23.165, 18, 27.334, 12, 25.945, 18, 30.114, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'), ('2580389', 'Ducray Neoptide anti-chute (femme) lotion 3x30ml', 'Anti-chute', 'NiPoGi', 12, 38.02, 18, 44.864, 12, 42.582, 18, 49.426, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'), ('2582', 'Protech NAG B caps ( 60 caps)', 'Développement musculaire ', 'NiPoGi', 12, 45.755, 18, 53.991, 12, 51.245, 18, 59.481, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-04-22'), ('2582807', 'Puressentiel Base neutre pour bain 100ml', 'Huiles de bain', 'NiPoGi', 12, 7.893, 18, 9.313, 12, 8.84, 18, 10.26, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-11'), ('2587', 'CAP Drink Energy Poire ( 6 x 2g) ', 'Endurance & Performance', 'DAYMARE', 12, 5.66, 18, 6.679, 12, 6.34, 18, 7.358, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-05-29'), ('2588', 'CAP Drink MEGAFAT Cassis/Mûre( 6 x 2g)', 'Minceur & Fitness', 'DAYMARE', 12, 5.66, 18, 6.679, 12, 6.34, 18, 7.358, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-05-29'), ('2591741', 'Mustela dermo-pédiatrie stelatria crème réparatrice assainissante 40ml', 'Crème hydratante bébé', 'DAYMARE', 12, 8.223, 18, 9.703, 12, 9.21, 18, 10.69, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'), ('2595817', ' ALLERPRIL CAPSULES 30', 'Pollen', 'DAYMARE', 12, 9.255, 18, 10.921, 12, 10.365, 18, 12.031, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-08'),('2596666', 'FLORA TONIC PLUS CAPSULES 180', 'Pastilles & gelules', 'DAYMARE', 12, 53.302, 18, 62.896, 12, 59.698, 18, 69.292, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-18'), ('2598811', 'Avent biberon scf663/17 classic pes 260 ml - tétine débit lent', 'Biberons', 'DAYMARE', 12, 9.504, 18, 11.215, 12, 10.645, 18, 12.355, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-10'),('2600674', 'EYE CARE: OMBRE À PAUPIÈRES CRÈME SANS PARABÈNES LONG BLEU 6G 0401', 'Palette de maquillage', 'DAYMARE', 12, 15, 18, 17.7, 12, 16.8, 18, 19.5, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-30'),('2604247', 'ENLIVE PLUS FLACON POMME 220ML', 'Substituts de repas', 'DAYMARE', 12, 2.264, 18, 2.672, 12, 2.536, 18, 2.943, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2012-08-06'),('2608008', 'Probiotical gélules 10 x 400mg', 'Diarrhée', 'DAYMARE', 12, 8.255, 18, 9.741, 12, 9.245, 18, 10.731, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-07-01'),('2618700', 'Mustela Bébé crème hydra visage 40ml', 'Bébé', 'DAYMARE', 12, 6.529, 18, 7.704, 12, 7.312, 18, 8.488, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-26'),('2618791', 'Mustela Bébé physiobebe avec pompe 750ml', 'Lait de toilette pour bébé', 'Sony', 12, 12.397, 18, 14.628, 12, 13.884, 18, 16.116, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'),('2630309', 'ORAL-B BRAUN CONTRÔLE DE LA PLAQUE DENTAIRE 1000 D205231', 'Brosses à dents', 'Sony', 12, 80.179, 18, 94.612, 12, 89.801, 18, 104.233, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-04'), ('2635399', 'ARTHRODONT PROTECT GEL DENTIFRICE FLUORÉ 75ML', 'Dentifrices', 'Sony', 12, 4.917, 18, 5.802, 12, 5.507, 18, 6.393, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-21'), ('2642', 'MyBiody Balance: mon check-up santé immédiat', 'Objets Connectés', 'Sony', 12, 189.256, 18, 223.322, 12, 211.967, 18, 246.033, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-08-05'), ('2648970', 'Energetica natura Biocean hypertonic ampoules 30x10ml', 'Compléments sans lactose', 'Sony', 12, 21.906, 18, 25.849, 12, 24.534, 18, 28.477, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-21'), ('2663268', 'Angelcare babyphone & détecteur ac420 moniteur mouvements + sons', 'Accessoire', 'Sony', 12, 164.463, 18, 194.066, 12, 184.198, 18, 213.802, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-26'), ('2685642', 'OLVARIT 7 CÉRÉALES NOUVELLE FORMULE 200G', 'Plats pour bébés', 'Sony', 12, 1.387, 18, 1.636, 12, 1.553, 18, 1.803, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'), ('2688182', 'Avène Couvrance poudre mosaïque soleil boîtier 9g', 'Poudre compacte', 'Sony', 12, 17.355, 18, 20.479, 12, 19.438, 18, 22.562, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-11'), ('2699288', 'ORAL-B BRAUN CONTROLE DE LA PLAQUE DENTAIRE 500 D16.513 PINK', 'Brosses à dents électriques', 'Sony', 12, 45.446, 18, 53.627, 12, 50.9, 18, 59.08, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-04'), ('2700110', 'Depharm Drill 60 dragées', 'Oligo-éléments', 'Sony', 12, 19.764, 18, 23.322, 12, 22.136, 18, 25.693, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-19'), ('2713808', 'Furterer Style laque végétale 300ml', 'Laques', 'Sony', 12, 14.463, 18, 17.066, 12, 16.198, 18, 18.802, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-08'), ('2714640', 'Talika smile & kiss 3ml', 'Dents & stomatologie', 'Sony', 12, 22.727, 18, 26.818, 12, 25.455, 18, 29.545, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-06'), ('2725042', 'SVELT 4 CAPSULE 120', 'Diététique', 'Sony', 12, 26.406, 18, 31.159, 12, 29.574, 18, 34.327, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-09'), ('2731750', 'PODO HALLUX VALGUS CORRECTEUR LARGE GAUCHE', 'Coussins anatomiques', 'Sony', 12, 16.038, 18, 18.925, 12, 17.962, 18, 20.849, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-11'), ('2733988', 'Difrax tire lait électrique', 'Tires-laits', 'Sony', 12, 156.198, 18, 184.314, 12, 174.942, 18, 203.058, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-18'), ('2743805', 'vichy fdt aera teint pure creme 35r 30ml', 'Fond de teint', 'Sony', 12, 16.818, 18, 19.845, 12, 18.836, 18, 21.864, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'), ('2748044', '1-2 Dry stop auréoles 12 medium', 'Patch de toilette', 'Sony', 12, 3.289, 18, 3.881, 12, 3.684, 18, 4.276, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-12'), ('2753846', 'Isycalm aphtes douloureux & petites plaies', 'Aphtes : bains de bouche', 'Sony', 12, 7.397, 18, 8.728, 12, 8.284, 18, 9.616, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-02-26'), ('2757102', 'Nuxe Rêve de miel crème corps ultra-réconfortante 200ml ', 'PROMO', 'Sony', 12, 16.942, 18, 19.992, 12, 18.975, 18, 22.025, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-02-07'), ('2766582', 'Avent attache-sucette football', 'Sucettes bébé', 'AllStars', 12, 5.744, 18, 6.778, 12, 6.433, 18, 7.467, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-10'), ('2769180', 'Nutergia Ergysport effort boisson orange poudre pot 450g', 'Boissons énergisantes', 'AllStars', 12, 15.566, 18, 18.368, 12, 17.434, 18, 20.236, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-28'), ('2784478', 'Cose protect 20 suppositoires ', 'Suppositoire & crème', 'AllStars', 12, 12.755, 18, 15.051, 12, 14.285, 18, 16.581, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-26'), ('2786903', 'Acura herpès labial 3 g', 'Boutons de fièvre', 'AllStars', 12, 7.851, 18, 9.264, 12, 8.793, 18, 10.207, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-05'), ('2790889', 'Vichy Dercos aminexil pro femme 18 ampoules', 'Ampoules anti-chute', 'AllStars', 12, 53.726, 18, 63.397, 12, 60.174, 18, 69.844, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-12-26'), ('2796043', 'Wartner Nail expert fungus 4ml', 'Mycoses des ongles', 'AllStars', 12, 12.355, 18, 14.579, 12, 13.838, 18, 16.062, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-29'), ('2825453', 'Puressentiel Deo stick men bio 50ml', 'Déodorants homme', 'AllStars', 12, 9.669, 18, 11.41, 12, 10.83, 18, 12.57, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-05'), ('2834885', 'Caudalie Eau fraîche fleur de vigne 50ml', 'Parfums', 'AllStars', 12, 16.241, 18, 19.164, 12, 18.19, 18, 21.113, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-25'), ('2835403', 'Avene Cold cream crème mains 50ml', 'Soins des mains', 'AllStars', 12, 6.686, 18, 7.889, 12, 7.488, 18, 8.692, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-11'), ('2838068', 'Puressentiel Gaultherie bio-10ml', 'Produits de relaxation', 'AllStars', 12, 7.314, 18, 8.631, 12, 8.192, 18, 9.508, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-11'), ('2865038', 'Herbalgem Sirop refroidissements 150ml', 'Sirop', 'AllStars', 12, 7.736, 18, 9.128, 12, 8.664, 18, 10.057, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-12-05'), ('287771', 'Lohmann Stella boite secours legal plus', 'Trousses de secours', 'AllStars', 12, 19.777, 18, 23.337, 12, 22.15, 18, 25.71, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-25'), ('2881936', 'Vichy Dercos nutriréparateur après shampooing 150ml', 'Après-shampoings', 'AllStars', 12, 12.81, 18, 15.116, 12, 14.347, 18, 16.653, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-29'), ('2883551', 'Avent lunch box 6 mois + scf724/00 fp', 'Boîtes alimentaires bébé', 'AllStars', 12, 12.388, 18, 14.618, 12, 13.875, 18, 16.105, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-10'), ('2884070', 'La Roche Posay Anthelios 50+ stick lèvres 4,7ml', 'Solaire', 'AllStars', 12, 7.149, 18, 8.436, 12, 8.007, 18, 9.293, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-04'), ('288837', 'Robi combi peigne a poux electrique', 'Peignes', 'AllStars', 12, 32.099, 18, 37.877, 12, 35.951, 18, 41.729, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-20'), ('2902583', 'Aderma Exomega d.e.f.i baume emollient 200ml', 'Corps', 'AllStars', 12, 16.446, 18, 19.407, 12, 18.42, 18, 21.38, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-01-14'), ('2906816', 'Magnepamyl forte comp 60', 'Diététique, nutrition', 'AllStars', 12, 12.906, 18, 15.229, 12, 14.454, 18, 16.777, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-20'), ('2910404', 'Caudalie Vinosource crème fondante nourrissante 40ml', 'Lait/Crème Hydratante', 'AllStars', 12, 16.372, 18, 19.319, 12, 18.337, 18, 21.284, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-24'), ('2910446', 'Caudalie Masque crème hydratant 50ml', 'Masque', 'AllStars', 12, 14.596, 18, 17.223, 12, 16.348, 18, 18.975, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-24'), ('2912848', 'Avent 4 en 1 stérilisateur électrique vapeur SCF286/02', 'Stérilisateurs biberons', 'AllStars', 12, 89.95, 18, 106.141, 12, 100.744, 18, 116.936, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-10'), ('2929982', 'Akileïne Glamour & confort anti-ampoules tube 75ml', 'Ampoules', 'AllStars', 12, 9.455, 18, 11.156, 12, 10.589, 18, 12.291, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-10-29'), ('2944338', 'Arkopharma Activox sirop toux sèche 125ml ', 'Toux sèche', 'AllStars', 12, 7.783, 18, 9.184, 12, 8.717, 18, 10.118, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-11-24'), ('2951390', 'Korres Body parfum racine de vétiver homme 50ml', 'Parfums pour hommes', 'GOLDORAK', 12, 32.107, 18, 37.887, 12, 35.96, 18, 41.74, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-17'), ('2952083', 'Caudalie vinoperfect masque peeling enzymatiq 50ml', 'Soins du visage', 'GOLDORAK', 12, 17.645, 18, 20.821, 12, 19.762, 18, 22.938, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-24'), ('2954014', 'Weleda Baby Calendula shampooing corps et cheveux 200ml', 'Shampoings pour bébé', 'GOLDORAK', 12, 7.736, 18, 9.128, 12, 8.664, 18, 10.056, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'), ('2966414', 'Biocyte kit lissage brésilien ', 'Lisseurs', 'GOLDORAK', 12, 49.587, 18, 58.512, 12, 55.537, 18, 64.463, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-27'), ('2971547', 'Caudalie Vinexpert crème bonne mine SPF 15 40ml', 'Crème', 'GOLDORAK', 12, 28.806, 18, 33.991, 12, 32.263, 18, 37.448, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-23'), ('2971588', 'Caudalie Vinexpert serum anti-age yeux et lèvres 15ml', 'Sticks lèvres', 'GOLDORAK', 12, 27.03, 18, 31.895, 12, 30.273, 18, 35.139, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-23'), ('2982197', 'Contralco éthylotest test + ballon', 'Autres tests', 'GOLDORAK', 12, 2.438, 18, 2.877, 12, 2.731, 18, 3.169, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-31'), ('3002961', 'Uriage Bébé 1er liniment oleothermal crème 400ml', 'Soins pour le change', 'GOLDORAK', 12, 7.453, 18, 8.794, 12, 8.347, 18, 9.689, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-19'), ('3003316', ' astera shampoing apaisant 200ml', 'Soins cheveux homme', 'GOLDORAK', 12, 15.413, 18, 18.188, 12, 17.263, 18, 20.037, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-08'), ('3008802', 'Saforelle Florgynal tampon probiotique compact normal 9', 'Tampons hygiéniques', 'GOLDORAK', 12, 8.182, 18, 9.655, 12, 9.164, 18, 10.636, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-11-14'), ('3010253', 'HYABAK PROTECTOR 0,15% 10 ML', 'Accessoires optique', 'GOLDORAK', 12, 13.679, 18, 16.142, 12, 15.321, 18, 17.783, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-01-27'), ('3011921', 'Uriage Bariesun huile sèche SPF30 200ml', 'Huile solaire', 'GOLDORAK', 12, 15.455, 18, 18.236, 12, 17.309, 18, 20.091, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-20'), ('3018702', 'Bristol Myers Squibb Enfamil ha digest lipil poudre 800g', 'Lait infantile', 'GOLDORAK', 12, 16.472, 18, 19.437, 12, 18.448, 18, 21.413, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-24'), ('3020443', 'Uriage Bariéderm fissures stick nouveau 22g', 'Crevasses', 'GOLDORAK', 12, 12.81, 18, 15.116, 12, 14.347, 18, 16.653, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-06-19'), ('3022225', 'Caudalie Eau démaquillante 200ml', 'Lotion micellaire', 'GOLDORAK', 12, 10.452, 18, 12.333, 12, 11.706, 18, 13.587, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'), ('3022241', 'Caudalie Lait démaquillant soin doux 200ml', 'Lait démaquillant', 'GOLDORAK', 12, 10.452, 18, 12.333, 12, 11.706, 18, 13.587, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'), ('3022282', 'Caudalie Mousse nettoyante 150ml', 'Mousse', 'GOLDORAK', 12, 10.452, 18, 12.333, 12, 11.706, 18, 13.587, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-22'), ('3023397', 'Omnibionta junior siroop 150ml', 'Vitamines Enfant', 'GOLDORAK', 12, 11.274, 18, 13.303, 12, 12.626, 18, 14.656, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-20'), ('3049517', 'THEALOZ GOUTTES OCCULAIRES. 10ML', 'Collyres', 'GOLDORAK', 12, 12.901, 18, 15.223, 12, 14.449, 18, 16.771, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-02'), ('3054905', 'Inneov Densilogy homme 3 month 180 comprimés', 'Anti-chute de cheveux', 'GOLDORAK', 12, 61.321, 18, 72.358, 12, 68.679, 18, 79.717, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2013-03-04'), ('3056207', 'Avene Cleanance mask masque-gommage tube 50ml', 'Gommage', 'GOLDORAK', 12, 11.992, 18, 14.15, 12, 13.431, 18, 15.589, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-11'), ('3056231', 'Avene Cleanance expert soin imperfections légères tube 40ml', 'Visage', 'GOLDORAK', 12, 13.223, 18, 15.603, 12, 14.81, 18, 17.19, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-04-22'), ('3063179', 'Somatoline Homme ventre et abdomen intensif nuit 10 150ml', 'Soins corps homme', 'GOLDORAK', 12, 30.579, 18, 36.083, 12, 34.248, 18, 39.752, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-02-16'), ('3066099', 'Uriage Bébé 1er crème lavante flacon pompe 500ml', 'Savons pour bébés', 'GOLDORAK', 12, 14.057, 18, 16.587, 12, 15.743, 18, 18.274, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-19'), ('3066990', 'La roche posay Anthelios lait compact ip50+ 40ml', 'Produits solaires bébé', 'GOLDORAK', 12, 9.504, 18, 11.215, 12, 10.645, 18, 12.355, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-04-10'), ('3069861', 'Lierac Sunific Préparateur Capsules Bronzage', 'Préparateur solaire', 'GOLDORAK', 12, 15.094, 18, 17.811, 12, 16.906, 18, 19.623, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-05-23'), ('3073343', 'Vichy Aqualia thermal serum 30ml', 'Serum', 'GOLDORAK', 12, 22.273, 18, 26.282, 12, 24.945, 18, 28.955, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'), ('3074663', 'Vichy Dercos nutriréparateur huile pro 150ml', 'Huiles cheveux', 'GOLDORAK', 12, 14.835, 18, 17.505, 12, 16.615, 18, 19.285, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-29'), ('3075504', 'Minceur 24+ fort 28 comprimes', 'Compléments alimentaires', 'GOLDORAK', 12, 19.81, 18, 23.376, 12, 22.187, 18, 25.753, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-19'), ('3081023', 'Klorane Creme de jour sans rinçage au beurre de mangue 125ml', 'Crèmes cheveux', 'GOLDORAK', 12, 8.843, 18, 10.435, 12, 9.904, 18, 11.496, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-02'), ('3093473', 'Avene Cold cream gel nettoyant surgras 200ml', 'Gels/Huiles douches', 'Moulinex', 12, 8.223, 18, 9.703, 12, 9.21, 18, 10.69, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'), ('3121043', 'Scholl Crème anti-callosités 60ml ', 'Corne et callosités', 'Moulinex', 12, 7.347, 18, 8.67, 12, 8.229, 18, 9.551, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-07'), ('3121514', 'Phytosun huile essentielle gaultherie bio 10ml', 'Homéopathie', 'Moulinex', 12, 7.273, 18, 8.582, 12, 8.145, 18, 9.455, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-06-08'), ('3140159', 'Forte Pharma Expert collagen 20 sticks', 'Vitamines', 'Moulinex', 12, 28.255, 18, 33.341, 12, 31.645, 18, 36.731, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-21'), ('3143492', 'Uriage Lingettes démaquillante peau normale-seches 25', 'Root', 'Moulinex', 12, 7.025, 18, 8.289, 12, 7.868, 18, 9.132, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-10-20'), ('3144904', 'Dexsil Sport & muscles gel 100ml', 'Crème et huile de massage', 'Moulinex', 12, 16.446, 18, 19.407, 12, 18.42, 18, 21.38, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-28'), ('3164779', 'Vichy Pureté thermale lotion démaquillante yeux sensibles 150ml', 'Huile', 'Moulinex', 12, 9.463, 18, 11.166, 12, 10.598, 18, 12.302, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-31'), ('3169331', 'Always Discreet professional pad long 22 ct', 'Protèges-slips', 'Moulinex', 12, 8.256, 18, 9.742, 12, 9.247, 18, 10.733, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2014-11-24'), ('3178811', 'Mustela Maternité baume allaitement 30ml', 'Allaitement', 'Moulinex', 12, 8.719, 18, 10.288, 12, 9.765, 18, 11.335, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-29'), ('3188232', 'Metagenics Ultrainflamx poudre 14 portions', 'Cholesterol', 'Moulinex', 12, 66.028, 18, 77.913, 12, 73.952, 18, 85.837, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-18'), ('3188737', 'Vichy Dercos shampooing anti-pelliculaire cheveux secs 200ml', 'Shampoings', 'Moulinex', 12, 10.702, 18, 12.629, 12, 11.987, 18, 13.913, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-30'), ('3195880', 'Forte Pharma Specific ventre plat 28 gélules', 'Digestion', 'Moulinex', 12, 16.981, 18, 20.038, 12, 19.019, 18, 22.075, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-03-19'), ('3197316', 'Tena lady mini plus 20 pièces', 'Serviettes hygiéniques', 'Moulinex', 12, 5.057, 18, 5.967, 12, 5.663, 18, 6.574, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-09-01'), ('3246584', 'Pranarom Amande douce huile végétale 50ml', 'Aromathérapie', 'Moulinex', 12, 6.321, 18, 7.458, 12, 7.079, 18, 8.217, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-05-17'), ('3248937', 'Nutricia Fortimel extra abricot 4x200ml', 'Supplément vitaminique', 'Moulinex', 12, 11.028, 18, 13.013, 12, 12.352, 18, 14.337, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-07-25'), ('3262367', 'Svr Xerial 50 extrême crème pieds 50ml', 'Durillons', 'Moulinex', 12, 12.81, 18, 15.116, 12, 14.347, 18, 16.653, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-09-13'), ('3263951', 'Avene Autobronzant hydratant crème tube 100ml', 'Auto bronzant', 'Moulinex', 12, 14.05, 18, 16.579, 12, 15.736, 18, 18.264, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'), ('3281110', 'Expert cheveux lotion 120ml', 'Lotions anti-chute', 'Moulinex', 12, 26.405, 18, 31.158, 12, 29.574, 18, 34.326, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2015-11-03'), ('3300993', 'Avene Lotion douceur flacon 200ml', 'Tonique', 'Moulinex', 12, 12.81, 18, 15.116, 12, 14.347, 18, 16.653, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-04-12'), ('3384831', 'Caudalie kit voyage 2016', 'Trousses', 'Moulinex', 12, 10, 18, 11.8, 12, 11.2, 18, 13, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2016-06-17'), ('600718', 'Bausch lomb h concentrated cleaner 30ml', 'Lentilles de contact', 'Moulinex', 12, 11.397, 18, 13.448, 12, 12.764, 18, 14.816, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-08'), ('619387', 'Marque v lime ongles diamant 15cm', 'Accessoires de manucure', 'Amazfit', 12, 2.81, 18, 3.316, 12, 3.147, 18, 3.653, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2011-08-03'), ('678581', 'Energetica amorin concentre gutt 30ml', 'Hémorroïdes', 'Amazfit', 12, 21.443, 18, 25.303, 12, 24.017, 18, 27.876, '', 1, NULL , '0xffffffff', NULL , NULL , NULL , NULL , '2010-12-07'), ('955YPD', 'LIVRE ABC', 'Produits de relaxation', 'Selecta', 0, 15, 10, 16.5, 20, 19.8, 12, 22.176, '', 1, '', '0xffcc80ff', '', '', '100', '', '2020-12-09'), ('A', 'test Prod A', 'TV', 'Maqqqq', 12, 350, 12, 392, 80, 705.6, 25, 882, '', 1, '', '0xffffffff', '', '', '', '', '2023-02-11'), ('ASD', 'SDFVDC', 'Parfums', 'Amazfit', 1, 350, 10, 385, 18, 454.3, 20, 545.16, '', 1, '', '0xe6b34dff', '', '', '', '', '2020-12-24'), ('AZS', 'SDCSCSDQ', 'TV', 'dsvdf', 5, 3, 2, 3.06, 20, 3.672, 3, 3.782, '

XFVBFGBDFGB

', 1, '', '0xffcc99ff', '', '', '', '', '2020-12-30'), ('C', 'TGK-2021BT', 'Aide minceur', 'JOC', 1, 20, 12, 22.4, 30, 29.12, 18, 34.362, '', 1, '', '0xffffffff', '', '', '', '', '2023-03-12'), ('CLIM-18-BLAN', 'CLIMATISEUR PASMA', 'Climatiseur', 'SUMSUNG', 12, 1200, 16, 1392, 30, 1809.6, 18, 2135.33, '', 1, '', '0xffffffff', '', '', '', '', '2017-01-10'), ('ED-DDF54', 'SQDQSDQSD', 'Aliments hyperprotéinés', 'DCDFV', 5, 1000, 18, 1180, 12, 1321, 18, 1558, '', 15, '', '0x000000ff', '', '', '', '', '2020-05-04'), ('Q', 'QTM CSDC DFVDFV', 'TV', 'Qtm', 1, 800, 18, 944, 30, 1227.2, 18, 1448.1, '', 1, '', '0xffffffff', '', '', '', '', '2020-12-30'), ('rtf', 'cqsdcqsdc', 'ddxw', 'cdx', 1, 3, 15, 3.45, 20, 4.14, 18, 4.885, '', 1, '', '0xffffffff', '', '', '', '', '2020-12-24'), ('RTF-847', 'Climatiseur Turbo', 'Climatiseur', 'SUMSUNG', 12, 1000, 16, 1160, 25, 1450, 18, 1711, '', 1, '', '0xffffffff', '15*17', '', '18000', '', '2017-01-10'), ('RTTT52', 'sdcqsdc', 'Accessoire', 'Amazfit', 2, 12, 10, 13.2, 20, 15.84, 18, 18.691, '

QSXQSX

', 1, '', '0xff9999ff', '', '', '', '', '2020-12-09'), ('TB', 'dsfvsdvf', 'Jambes lourdes (veinotoniques)', 'hgngfnh', 5, 200, 12, 224, 50, 336, 18, 396.48, '', 1, '', '0xffffffff', '', '', '', '', '2021-10-10'), ('TG', 'DVDFV', 'Ampoules', 'RTC', 5, 6, 20, 7.2, 15, 8.28, 9, 9.025, '', 2, '', '0x00000000', '', '', '', '', '2020-12-26'), ('Y9', 'Téléphone portable', 'Aphtes', 'HUAWEI', 12, 700, 12, 784, 20, 940.8, 18, 1110.14, '', 1, '', '0xffffffff', '', '', '', '', '2020-12-08'), ('Y9i', 'CCVXCV', 'Accessoires appareils auditifs', 'SDCSDC', 12, 350, 10, 385, 20, 462, 20, 554.4, '', 1, '', '0xffffffff', '', '', '', '', '2020-12-09'); "; + String contentQueryCltEntreprise = " INSERT INTO cltentreprise (nomentrepise, gerant, matricule_fiscale, adresse, telefix, telefix2, fax, code_postal, mail, date_add, `local_nom`) VALUES('TechSphere Solutions', 'jean Dupont', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '2 Avenue Mohamed V, Tunis', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@techSphere-Solutions.com', now(), 'Magasin I'),('BlueWave Technologies', 'Marie Lambert', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '3 Rue du Liban, Lac 1, Tunis', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@blueWave-technologies.com', now(), 'Magasin I'),('GreenLeaf Innovations', 'Ahmed El Mansouri', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '4 Rue Ali Belhouane, Le Bardo, Tunis', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@greenLeaf-innovations.com', now(), 'Magasin I'),('SilverLine Consulting', 'Sophie Martin', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '5 Avenue de la Liberté, La Marsa, Tunis', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@silverLine-consulting.com', now(), 'Magasin I'),('BrightFuture Labs', 'Paul Johnson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '10 Rue de Carthage, Sidi Bou Said, Tunis', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@brightFuture-labs.com', now(), 'Magasin I'),('NovaCore Systems', 'Laura Garcia', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '7 Avenue Habib Thameur, Sfax', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@novaCore-systems.com', now(), 'Magasin I'),('Skyward Enterprises', 'Michael Brown', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '8 Rue Hédi Chaker, Sfax', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@skyward-enterprises.com', now(), 'Magasin I'),('EcoPulse Energy', 'Emma Wilson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '9 Avenue Farhat Hached, Sousse', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@ecoPulse-Energy.com', now(), 'Magasin I'),('StellarEdge Solutions', 'David Lee', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '6 Rue de la République, Sousse', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@stellarEdge-solutions.com', now(), 'Magasin I'),('QuantumLeap Designs', 'Sarah Kim', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '11 Avenue Taïeb Mhiri, Monastir', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@quantumLeap-designs.com', now(), 'Magasin I'),('GoldenGate Logistics', 'Jean Dupont', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '12 Rue de la Médina, Monastir', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@goldenGate-logistics.com', now(), 'Magasin I'),('PureSource Foods', 'Marie Lambert', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '13 Avenue Habib Bourguiba, Bizerte', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@puresource-foods.com', now(), 'Magasin I'),('UrbanPulse Media', 'Ahmed El Mansouri', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '14 Rue de la Marine, Bizerte', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@urbanPulse-media.com', now(), 'Magasin I'),('CrimsonPeak Studios', 'Sophie Martin', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '15 Avenue de l''Indépendance, Kairouan', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@crimsonPeak-studios.com', now(), 'Magasin I'),('AuroraWorks', 'Paul Johnson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '16 Rue Ali Zouaoui, Kairouan', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@auroraworks.com', now(), 'Magasin I'),('FusionPoint Advisors', 'Laura Garcia', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '17 Avenue de la République, Gabès', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@fusionPoint-Advisors.com', now(), 'Magasin I'),('ZenithGrowth Partners', 'Michael Brown', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '18 Rue Tahar Sfar, Gabès', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@zenithGrowth-Partners.com', now(), 'Magasin I'),('EagleEye Analytics', 'Emma Wilson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '19 Avenue Habib Bourguiba, Gafsa', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@eagleEye-Analytics.com', now(), 'Magasin I'),('SolarFlare Networks', 'David Lee', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '20 Rue de la Gare, Gafsa', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@solarFlare-Networks.com', now(), 'Magasin I'),('TerraNova Builders', 'Sarah Kim', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '21 Avenue Farhat Hached, Mahdia', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@terraNova-Builders.com', now(), 'Magasin I'),('OceanBreeze Travel', 'Thomas Anderson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '22 Rue de la Corniche, Mahdia', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@oceanbreeze-travel.com', now(), 'Magasin I'),('IronClad Security', 'Claire Dubois', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '23 Avenue Habib Thameur, Kasserine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@ironClad-Security.com', now(), 'Magasin I'),('PinnacleHealth Solutions', 'Lucas Martinez', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '24 Rue de la République, Kasserine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@pinnacleHealth-Solutions.com', now(), 'Magasin I'),('VividVisions Marketing', 'Olivia White', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '25 Avenue Mohamed Ali, Béja', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@vividVisions-Marketing.com', now(), 'Magasin I'),('SwiftStream Technologies', 'Daniel Clark', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '26 Rue de l''Indépendance, Béja', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@SwiftStream-Technologies.com', now(), 'Magasin I'),('EverGreen Farms', 'Chloé Bernard', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '27 Avenue Habib Bourguiba, Jendouba', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@EverGreen-Farms.com', now(), 'Magasin I'),('CrystalClear Communications', 'Samuel Taylor', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '28 Rue de la Liberté, Jendouba', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@CrystalClear-Communications.com', now(), 'Magasin I'),('PhoenixRise Consulting', 'Laura Evans', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '29 Avenue de la République, Nabeul', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@PhoenixRise-Consulting.com', now(), 'Magasin I'),('SummitPeak Ventures', 'Ryan Harris', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '30 Rue des Orangers, Nabeul', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@SummitPeak-Ventures.com', now(), 'Magasin I'),('BlueHorizon Designs', 'Sophie Turner', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '31 Avenue Habib Thameur, Zaghouan', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@BlueHorizon-Designs.com', now(), 'Magasin I'),('TrueNorth Strategies', 'Emma Watson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '32 Rue de la Source, Zaghouan', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@TrueNorth-Strategies.com', now(), 'Magasin I'),('EchoWave Media', 'James Carter', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '33 Avenue de l''Indépendance, Siliana', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@EchoWave-Media.com', now(), 'Magasin I'),('BrightSpark Education', 'Laura Bennett', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '34 Rue de la Poste, Siliana', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@BrightSpark-Education.com', now(), 'Magasin I'),('SilverLeaf Finance', 'Alex Johnson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '35 Avenue Habib Bourguiba, Le Kef', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@SilverLeaf-Finance.com', now(), 'Magasin I'),('RedRock Robotics', 'Sarah Adams', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '36 Rue de la Kasbah, Le Kef', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@RedRock-Robotics.com', now(), 'Magasin I'),('AquaPulse Solutions', 'John Green', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '37 Avenue Farhat Hached, Médenine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@AquaPulse-Solutions.com', now(), 'Magasin I'),('GoldenHarvest Foods', 'Emily Davis', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '38 Rue de la République, Médenine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@GoldenHarvest-Foods.com', now(), 'Magasin I'),('Skyline Innovations', 'Michael Scott', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '39 Avenue Habib Thameur, Tataouine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@Skyline-Innovations.com', now(), 'Magasin I'),('FrostByte Systems', 'Laura Hill', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '40 Rue de la Palmeraie, Tataouine', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@FrostByte-Systems.com', now(), 'Magasin I'),('UrbanRoots Development', 'Sophie Carter', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '41 Avenue de l''Indépendance, Tozeur', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@UrbanRoots-Development.com', now(), 'Magasin I'),('LunarGlow Studios', 'David Wilson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '42 Rue des Dattes, Tozeur', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@LunarGlow-Studios.com', now(), 'Magasin I'),('TerraFirma Engineering', 'Emma Roberts', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '43 Avenue Habib Bourguiba, Kebili', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@TerraFirma-Engineering.com', now(), 'Magasin I'),('SolarWinds Energy', 'Thomas White', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '44 Rue de l''Oasis, Kebili', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@SolarWinds-Energy.com', now(), 'Magasin I'),('CrimsonCrest Marketing', 'Laura Green', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '45 Avenue Farhat Hached, Ben Arous', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@CrimsonCrest-Marketing.com', now(), 'Magasin I'),('BlueSky Analytics', 'Daniel Harris', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '46 Rue de l''Usine, Ben Arous', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@BlueSky-Analytics.com', now(), 'Magasin I'),('EverBright Solutions', 'Sophie Adams', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '47 Avenue Habib Thameur, Ariana', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@EverBright-Solutions.com', now(), 'Magasin I'),('IronHorse Logistics', 'John Miller', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '48 Rue de la Mosquée, Ariana', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@IronHorse-Logistics.com', now(), 'Magasin I'),('PolarisPoint Advisors', 'Laura Turner', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '49 Avenue de la République, Manouba', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@PolarisPoint-Advisors.com', now(), 'Magasin I'),('GreenPulse Technologies', 'Michael Brown', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '50 Rue de l''Université, Manouba', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@GreenPulse-Technologies.com', now(), 'Magasin I'),('ApexVision Consulting', 'Emma Wilson', FLOOR(RAND() * (999999999 - 100000000+ 1)) + 100000000, '47 Avenue de l''Indépendance, Zaghouan', FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000, FLOOR(RAND() * (9999 - 1000+ 1)) + 1000, 'contact@ApexVision-Consulting.com', now(), 'Magasin I'); "; + String contentQueryCltFournisseur =" INSERT INTO fournisseur (nom, adresse, mail, site_web, specialite, formes, tele1, tele2, fax) VALUES('TunisTech Solutions','Rue Habib Bourguiba, Tunis','contact@tunistech-solutions.com','www.tunistech-solutions.com','Matériel informatique et logiciels','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('GreenHarvest Foods','Avenue Mohamed V, Sfax','info@greenharvest-foods.com','www.greenharvest-foods.com','Produits agricoles biologiques','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('MediPharma Distribution','Rue Ali Belhouane, Le Bardo, Tunis','sales@medipharma-distribution.com','www.medipharma-distribution.com','Produits pharmaceutiques','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('EcoBuild Materials','Avenue de la Liberté, La Marsa, Tunis','contact@ecobuild-materials.com','www.ecobuild-materials.com','Matériaux de construction écologiques','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisLogistics','Rue du Liban, Lac 1, Tunis','info@tunislogistics.com','www.tunislogistics.com','Services de logistique et transport','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('PureWater Systems','Avenue Habib Thameur, Sfax','support@purewater-systems.com','www.purewater-systems.com','Systèmes de filtration d''eau','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('SolarTunisia Energy','Rue Hédi Chaker, Sfax','contact@solartunisia-energy.com','www.solartunisia-energy.com','Équipements solaires et énergies renouvelables','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisPrint Solutions','Avenue Farhat Hached, Sousse','sales@tunisprint-solutions.com','www.tunisprint-solutions.com','Imprimerie et fournitures de bureau','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('AgriTunis Products','Rue de la République, Sousse','info@agritunis-products.com','www.agritunis-products.com','Produits agricoles et agroalimentaires','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisFurniture Design','Avenue Taïeb Mhiri, Monastir','contact@tunisfurniture-design.com','www.tunisfurniture-design.com','Meubles sur mesure et design','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('Mediterranean Seafood','Rue de la Médina, Monastir','sales@mediterranean-seafood.com','www.mediterranean-seafood.com','Produits de la mer et poissons frais','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisTextile Mills','Avenue Habib Bourguiba, Bizerte','info@tunistextile-mills.com','www.tunistextile-mills.com','Textiles et tissus','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAuto Parts','Rue de la Marine, Bizerte','contact@tunisauto-parts.com','www.tunisauto-parts.com','Pièces détachées automobiles','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisHealth Supplies','Avenue de l''Indépendance, Kairouan','sales@tunishealth-supplies.com','www.tunishealth-supplies.com','Équipements médicaux','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Equipment','Rue Ali Zouaoui, Kairouan','info@tunisagro-equipment.com','www.tunisagro-equipment.com','Machines agricoles','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisPlast Industries','Avenue de la République, Gabès','contact@tunisplast-industries.com','www.tunisplast-industries.com','Produits en plastique','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisChem Solutions','Rue Tahar Sfar, Gabès','sales@tunischem-solutions.com','www.tunischem-solutions.com','Produits chimiques industriels','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisElectro Components','Avenue Habib Bourguiba, Gafsa','info@tuniselectro-components.com','www.tuniselectro-components.com','Composants électroniques','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisWood Crafts','Rue de la Gare, Gafsa','contact@tuniswood-crafts.com','www.tuniswood-crafts.com','Meubles en bois artisanal','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisPack Solutions','Avenue Farhat Hached, Mahdia','sales@tunispack-solutions.com','www.tunispack-solutions.com','Emballages et conditionnement','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisMed Devices','Rue de la Corniche, Mahdia','info@tunismed-devices.com','www.tunismed-devices.com','Dispositifs médicaux','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisOil Services','Avenue Habib Thameur, Kasserine','contact@tunisoil-services.com','www.tunisoil-services.com','Services pétroliers et gaziers','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisPaper Products','Rue de la République, Kasserine','sales@tunispaper-products.com','www.tunispaper-products.com','Produits en papier et carton','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisMetal Works','Avenue Mohamed Ali, Béja','info@tunismetal-works.com','www.tunismetal-works.com','Fabrication métallique','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisGlass Innovations','Rue de l''Indépendance, Béja','contact@tunisglass-innovations.com','www.tunisglass-innovations.com','Verre et miroiterie','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgri Seeds','Avenue Habib Bourguiba, Jendouba','sales@tunisagri-seeds.com','www.tunisagri-seeds.com','Semences agricoles','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisCeramic Arts','Rue de la Liberté, Jendouba','info@tuniscermaic-arts.com','www.tuniscermaic-arts.com','Céramique et poterie','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisBeverage Co','Avenue de la République, Nabeul','contact@tunisbeverage-co.com','www.tunisbeverage-co.com','Boissons et jus naturels','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisLeather Goods','Rue des Orangers, Nabeul','sales@tunisleather-goods.com','www.tunisleather-goods.com','Articles en cuir','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisSolar Power','Avenue Habib Thameur, Zaghouan','info@tunissolar-power.com','www.tunissolar-power.com','Panneaux solaires','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisClean Solutions','Rue de la Source, Zaghouan','contact@tunisclean-solutions.com','www.tunisclean-solutions.com','Produits de nettoyage industriels','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Fertilizers','Avenue de l''Indépendance, Siliana','sales@tunisagro-fertilizers.com','www.tunisagro-fertilizers.com','Engrais agricoles','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisPackaging Solutions','Rue de la Poste, Siliana','info@tunispackaging-solutions.com','www.tunispackaging-solutions.com','Solutions d''emballage','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisOil Refinery','Avenue Habib Bourguiba, Le Kef','contact@tunisoil-refinery.com','www.tunisoil-refinery.com','Raffinage de pétrole','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisStone Works','Rue de la Kasbah, Le Kef','sales@tunisstone-works.com','www.tunisstone-works.com','Pierre et marbre','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Dairy','Avenue Farhat Hached, Médenine','info@tunisagro-dairy.com','www.tunisagro-dairy.com','Produits laitiers','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisFish Exports','Rue de la République, Médenine','contact@tunisfish-exports.com','www.tunisfish-exports.com','Exportation de produits de la mer','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisDesert Dates','Avenue Habib Thameur, Tataouine','sales@tunisdesert-dates.com','www.tunisdesert-dates.com','Dattes et produits dérivés','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisOasis Water','Rue de la Palmeraie, Tataouine','info@tunisoasis-water.com','www.tunisoasis-water.com','Eaux minérales','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisDesert Tours','Avenue de l''Indépendance, Tozeur','contact@tunisdesert-tours.com','www.tunisdesert-tours.com','Tourisme désertique','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisPalm Products','Rue des Dattes, Tozeur','sales@tunispalm-products.com','www.tunispalm-products.com','Produits à base de palmier','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Oils','Avenue Habib Bourguiba, Kebili','info@tunisagro-oils.com','www.tunisagro-oils.com','Huiles végétales','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisDesert Crafts','Rue de l''Oasis, Kebili','contact@tunisdesert-crafts.com','www.tunisdesert-crafts.com','Artisanat local','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Honey','Avenue Farhat Hached, Ben Arous','sales@tunisagro-honey.com','www.tunisagro-honey.com','Miel et produits apicoles','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Spices','Rue de l''Usine, Ben Arous','info@tunisagro-spices.com','www.tunisagro-spices.com','Épices et herbes aromatiques','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Nuts','Avenue Habib Thameur, Ariana','contact@tunisagro-nuts.com','www.tunisagro-nuts.com','Noix et fruits secs','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Olive Oil','Rue de la Mosquée, Ariana','sales@tunisagro-oliveoil.com','www.tunisagro-oliveoil.com','Huile d''olive','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Fruits','Avenue de la République, Manouba','info@tunisagro-fruits.com','www.tunisagro-fruits.com','Fruits frais','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Vegetables','Rue de l''Université, Manouba','contact@tunisagro-vegetables.com','www.tunisagro-vegetables.com','Légumes frais','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000),('TunisAgro Grains','Avenue de l''Indépendance, Tunis','sales@tunisagro-grains.com','www.tunisagro-grains.com','Céréales et grains','SARL',FLOOR(RAND() * (52999999 - 52000000+ 1)) + 52000000,FLOOR(RAND() * (21999999 - 21000000+ 1)) + 21000000,FLOOR(RAND() * (71999999 - 71000000+ 1)) + 71000000); "; + result = stmt.execute(contentQueryLocal+contentQueryClient1+contentQueryClient2+contentQueryProduit1+contentQueryProduit2+contentQueryCltEntreprise+contentQueryCltFournisseur); + //} catch (IOException ex) { + //System.out.println("erreur InsertSimpleData: "+ex.getMessage()); + }catch (Exception e) { + System.out.println("erreur InsertSimpleData: "+ e.getMessage()); + } + } + return result; + } + + +} \ No newline at end of file diff --git a/src/main/java/Models/Home/HomeDB.java b/src/main/java/Models/Home/HomeDB.java new file mode 100644 index 0000000..ea21683 --- /dev/null +++ b/src/main/java/Models/Home/HomeDB.java @@ -0,0 +1,112 @@ +package Models.Home; + +import Controllers.Traitement.ParametreSystem; +import Models.H2JDBC; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; +import org.apache.log4j.Logger; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.chart.PieChart; +import javafx.scene.chart.XYChart; + +/** + * @author Maher + */ +public class HomeDB { + + H2JDBC h2jdbc = new H2JDBC(); + Logger logger = Logger.getLogger(HomeDB.class.getName()); + + public Map HomeNbr() + { + Map map = new HashMap<>(); + + String Query = " SELECT 'factureclt' AS colHome, COUNT(idfactureclt) AS nbr " + + " FROM factureclt "+ + " WHERE (YEAR(date_facture) = to_char(now(), 'yyyy')) AND (local_nom LIKE '"+ParametreSystem.NomLocalPC+"') "+ + + " UNION "+ + + " SELECT 'client' AS colHome, COUNT(codeclient) AS nbr "+ + " FROM client "+ + " WHERE (YEAR(date_add) = to_char(now(), 'yyyy')) AND (local_nom LIKE '"+ParametreSystem.NomLocalPC+"') "+ + + " UNION "+ + + " SELECT 'cheque' AS colHome, COUNT(id_chequeclt) AS nbr "+ + " FROM cheque_clt "+ + " WHERE (YEAR(date_creation) = to_char(now(), 'yyyy')) AND (local_nom LIKE '"+ParametreSystem.NomLocalPC+"'); "; + ResultSet Resultat = h2jdbc.selectFromDB(Query); + try { + 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); + logger.error("HomeDB : HomeNbr :" + ex.getMessage()); + } + + return map; + } + + + + public XYChart.Series HomeChiffreAffaireByMois() + { + XYChart.Series series1 = new XYChart.Series(); + + String Query = " SELECT to_char(date_facture,'yyyy-mm') 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; "; + + ResultSet Resultat = h2jdbc.selectFromDB(Query); + try{ + 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); + logger.error("HomeDB : HomeChiffreAffaireByMois :" + ex.getMessage()); + } + + 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; "; + + ResultSet Resultat = h2jdbc.selectFromDB(Query); + try{ + 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); + logger.error("HomeDB : HomeVente :" + ex.getMessage()); + } + + 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..162f848 --- /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 Maher Ben Tili + */ +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..2c0d06b --- /dev/null +++ b/src/main/java/Models/Produit/Produit.java @@ -0,0 +1,284 @@ +/* + * 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; + + + + +/** + * + * @author Maher Ben Tili + */ +public class Produit { + private String reference; + private String designation; + private String categorie; + private String marque; + private String couleur; + private String description; + private Integer garantie ; + private Integer qualite ; + + 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 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.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 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 getQualite() { + return qualite; + } + + public void setQualite(Integer qualite) { + this.qualite = qualite; + } + + public String getQualiteString() { + return qualite.toString(); + } + + public void setQualiteString(String qualite) { + if(qualite==null){ + this.qualite = 1 ; + }else{ + try{ + this.qualite = Integer.valueOf(qualite); + }catch(Exception ex){ + this.qualite = 1 ; + } + } + } + + 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..0fe4818 --- /dev/null +++ b/src/main/java/Models/Produit/ProduitDB.java @@ -0,0 +1,345 @@ +package Models.Produit; + + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.H2JDBC; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class ProduitDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + contro clt = new contro(); + + Logger logger = Logger.getLogger(ProduitDB.class.getName()); + + public Produit getProduit (String ref) + { + Produit prod = new Produit(); + String req = "SELECT * FROM produit WHERE reference LIKE '"+ref+"' ; "; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + prod.setCapacite(resultat.getString("capacite")); + prod.setCategorie(resultat.getString("nomcategorie_cate")); + prod.setCouleur(resultat.getString("couleur")); + prod.setDescription(resultat.getString("description")); + prod.setDesignation(resultat.getString("designation")); + prod.setDimensions(resultat.getString("dimension")); + prod.setGarantie(resultat.getInt("garantie")); + + prod.setQualiteString(resultat.getString("qualite")); + prod.setMarque(resultat.getString("marque")); + prod.setPoids(resultat.getString("poids")); + prod.setPuissance(resultat.getString("puissance")); + prod.setReference(resultat.getString("reference")); + + 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()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ProduitDB : getProduit :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return prod ; + } + + public Integer UpdateProduit (Produit prod, String ref) + { + String Garantie = "NULL"; + if(prod.getGarantie() != null){ + Garantie = "'"+prod.getGarantie()+"'"; + } + + String sql = "UPDATE produit SET reference= '"+prod.getReference()+"', designation= '"+prod.getDesignation()+"', nomcategorie_cate = '"+prod.getCategorie()+"', marque= '"+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 = '"+prod.getDescription()+"', poids = '"+prod.getPoids()+"', couleur = '"+prod.getCouleur()+"', dimension = '"+prod.getDimensions()+"', vitesse= '"+prod.getVitesse()+"', puissance= '"+prod.getPuissance()+"', capacite='"+prod.getCapacite()+"' WHERE produit.reference = '"+ref+"';" ; + + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(sql); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(sql); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ProduitDB : UpdateProduit :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return nbr; + } + + /********************************** Search *******************************/ + + public ObservableList SearchProduit(Integer debut, Integer nbr, Boolean stock, String Reference, String Category, String Marque, 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(Marque)){ + Where += " (p.marque LIKE '%"+Adaptateur.addSlashes(Marque)+"%') AND "; + } + + if(!clt.isStringNull(Designation)){ + Where += " (p.designation LIKE '%"+Adaptateur.addSlashes(Designation)+"%') AND "; + } + + String req="SELECT p.reference, 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.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+" ;"; + } + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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 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, 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ProduitDB : :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return data ; + } + + + public Integer nbrSearchProduit(Boolean stock, String Reference, String Category, String Marque, 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(Marque)){ + Where += " (p.marque LIKE '%"+Adaptateur.addSlashes(Marque)+"%') 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; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ProduitDB : nbrSearchProduit :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return sommme ; + } + + + + /******************************************************************************/ + public boolean addProduit(Produit prod) + { + String Garantie = "NULL"; + if(prod.getGarantie() != null){ + Garantie = "'"+prod.getGarantie()+"'"; + } + String Qualite = "NULL"; + if(prod.getQualite()!= null){ + Qualite = "'"+prod.getQualite()+"'"; + } + + String req ="INSERT INTO produit (reference, designation, nomcategorie_cate, marque, garantie, prix_achat_ht, tva_achat, prix_achat_ttc, marge, prix_vente_ht, tva_vente, prix_vente_ttc, description, qualite, poids, couleur, dimension, vitesse, puissance, capacite,datecreation) VALUES ('"+prod.getReference()+"', '"+prod.getDesignation()+"', '"+prod.getCategorie()+"', '"+prod.getMarque()+"', "+Garantie+", '"+prod.getPrixachatht().replace(',','.')+"', '"+prod.getTvaachat().replace(',','.')+"', '"+prod.getPrixachatttc().replace(',','.')+"', '"+prod.getMarge().replace(',','.')+"', '"+prod.getPrixventeht().replace(',','.')+"', '"+prod.getTvavente().replace(',','.')+"', '"+prod.getPrixventettc().replace(',','.')+"', '"+prod.getDescription().replaceAll("'", "\\\\'")+"', "+Qualite+", '"+prod.getPoids()+"', '"+prod.getCouleur()+"', '"+prod.getDimensions()+"', '"+prod.getVitesse()+"', '"+prod.getPuissance()+"', '"+prod.getCapacite()+"', now());"; + + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ProduitDB : addProduit :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + public boolean verifyReferenceProduit(String ref) + { + String req = "SELECT COUNT(*) FROM produit WHERE reference LIKE '"+ref+"';"; + int nbr = 0; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.last(); + nbr = resultat.getRow(); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ProduitDB : verifyReferenceProduit :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0) ; + } + + + public ObservableList getAllProduits() + { + ObservableList data =FXCollections.observableArrayList(); + + String req="SELECT * FROM produit p ORDER BY p.datecreation DESC"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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 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, designation, marque, nomcategorie, "0", 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ProduitDB : :" + ex.getMessage()); + } + } + return data ; + } + +} 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..871aa18 --- /dev/null +++ b/src/main/java/Models/Reglement/ReglementDB.java @@ -0,0 +1,614 @@ +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 Controllers.Dialog.ShowDialog; +import Controllers.Traitement.ParametreSystem; +import org.apache.log4j.Logger; +import Models.H2JDBC; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author Maher Ben Tili + */ +public class ReglementDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(ReglementDB.class.getName()); + 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_fournisseur, 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+"');"; + try { + String IdNumero = h2jdbc.InsertGetLastId(Query); + reglement.setNumero(IdNumero); + if(IdNumero != null) + { + 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+");"; + h2jdbc.InsertUpdateDeleteInTable(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); + } + } + } + }catch(SQLException ex){ + System.err.println("setReglementDB Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : setReglementDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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.isNumericNotnull(Numero)){ + Where += " (R.id_reglement_frs = '"+Numero+"') AND "; + } + + if(!clt.isNumericNotnull(IdFournisseur)){ + Where += " (R.id_fournisseur = '"+IdFournisseur+"') AND "; + } + + if(!clt.isFloatNotnull(Montant)){ + Where += " (R.montant = '"+Montant+"') AND "; + } + + if(!clt.isStringNull(DatePayer)){ + Where += " (CAST(R.date_creation AS DATE) = '"+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_fournisseur = R.id_fournisseur) AND " + Where; + }else{ + Where =" WHERE (F.id_fournisseur = R.id_fournisseur) "; + } + + String req="SELECT *, to_char(date_creation, 'dd/mm/yyyy hh:ii') as date_creat " + + " FROM reglement_frs R, fournisseur F " + + Where + + " ORDER BY id_reglement_frs DESC " + + "LIMIT "+debut+" , "+nbr+" ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + Reglement reglement = new Reglement(); + + reglement.setNumero(resultat.getString("id_reglement_frs")); + + Fournisseur fournisseur = new Fournisseur(); + fournisseur.setCode(resultat.getString("id_fournisseur")); + 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("SearchGestionReglementGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error(" ReglementDB : SearchGestionReglementGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ListReglement; + } + + public Integer nbrGestionReglementGestion(String Numero, String IdFournisseur, String Montant, String DatePayer, String TypeRegement, String Paiement) + { + String Where = ""; + + if(!clt.isNumericNotnull(Numero)){ + Where += " (id_reglement_frs = '"+Numero+"') AND "; + } + + if(!clt.isNumericNotnull(IdFournisseur)){ + Where += " (id_fournisseur = '"+IdFournisseur+"') AND "; + } + + if(!clt.isFloatNotnull(Montant)){ + Where += " (montant = '"+Montant+"') AND "; + } + + if(!clt.isStringNull(DatePayer)){ + Where += " (CAST(date_creation AS DATE) = '"+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(*) FROM reglement_frs " + Where+ " ;"; + + int sommme =0; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("nbrGestionReglementGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : nbrGestionReglementGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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 *, to_char(date_creation, 'dd/mm/yyyy hh:ii') as date_creat FROM reglement_frs R, fournisseur F WHERE (F.id_fournisseur = R.id_fournisseur) AND ("+tab+" "+mot+") ORDER BY id_reglement_frs DESC "+Limit+" ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + Reglement reglement = new Reglement(); + + reglement.setNumero(resultat.getString("id_reglement_frs")); + + //Fournisseur Frs = new FournisseurDB().GetFournisseurDB(resultat.getString("id_fournisseur")); + //Facture.setFournisseur(Frs); + Fournisseur fournisseur = new Fournisseur(); + fournisseur.setCode(resultat.getString("id_fournisseur")); + 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : getDataReglement :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ListReglement; + } + + public String nbrReglementFrs(String tab, String mot){ + + String req = "SELECT count(*) FROM reglement_frs R, fournisseur F WHERE (F.id_fournisseur = R.id_fournisseur) AND ("+tab+" "+mot+") ;"; + + int sommme = 0; + try { + ResultSet resultat = h2jdbc.selectFromDB(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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error(" ReglementDB : nbrReglementFrs :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return Integer.toString(sommme) ; + } + + public Reglement getReglementDB(String IdReglement) + { + Reglement reglement = new Reglement(); + String req = "SELECT * FROM reglement_frs WHERE id_reglement_frs = "+IdReglement+" ;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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_fournisseur"))); + 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("getReglementDB Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : getReglementDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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()+"', now() ),"; + } + ListValue = ListValue.substring(0, ListValue.length()-1) + ";"; + + String req = "INSERT INTO cheque_frs (id_reglement_frs, numero, banque, montant, nom_complet, date_paiement, date_creation) VALUES "+ListValue; + + try { + h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : setListChequeDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + + 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 + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : getListChequeDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ListCheque; + } + + public void setListTraiteDB(ObservableList ListTraite, String IdReglement) + { + String ListValue = ""; + for(TraiteFrs Traite : ListTraite ) { + ListValue += "('"+IdReglement+"', '"+Traite.getMontant().replace(",",".")+"', '"+Traite.getDatePaiement()+"', now()),"; + } + ListValue = ListValue.substring(0, ListValue.length()-1) + ";"; + + String req = "INSERT INTO traite_frs (id_reglement_frs, montant, date_paiement, date_creation) VALUES "+ListValue; + + try { + h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : setListTraiteDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + + 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 + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("getListTraiteDB Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : getListTraiteDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ListTraite; + } + + public ChequeFrs setChequeDB(ChequeFrs Cheque, String IdReglement) + { + String req = "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()+"', now() )"; + try { + String IdCheque= h2jdbc.InsertGetLastId(req); + Cheque.setCodeChequeFrs(IdCheque); + }catch(SQLException ex){ + System.err.println("setChequeDB Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : setChequeDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return Cheque; + } + + public ChequeFrs getChequeDB(String IdReglement) + { + String req = "SELECT * FROM cheque_frs WHERE id_reglement_frs = "+IdReglement+";"; + ChequeFrs Cheque = new ChequeFrs(); + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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("getChequeDB Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : getChequeDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + return Cheque; + } + + public CarteElectroniqueFrs setCarteElectroniqueDB(CarteElectroniqueFrs CarteElectronique, String IdReglement) + { + String req = "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(",",".")+"')"; + try { + String IdCart = h2jdbc.InsertGetLastId(req); + CarteElectronique.setCodeCarte(IdCart); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : setCarteElectroniqueDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return CarteElectronique; + } + + public CarteElectroniqueFrs getCarteElectroniqueDB(String IdReglement) + { + CarteElectroniqueFrs CarteElectronique = new CarteElectroniqueFrs(); + String req = "SELECT *, to_char(date_transaction, 'dd/mm/yyyy') as date_trans, to_char(date_transaction, 'hh:ii') as heur_trans FROM carte_electronique_frs WHERE id_reglement_frs = "+IdReglement+";"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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("getCarteElectroniqueDB Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ReglementDB : getCarteElectroniqueDB :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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/SimpleDataAchat.java b/src/main/java/Models/SimpleDataAchat.java new file mode 100644 index 0000000..a6ab8dd --- /dev/null +++ b/src/main/java/Models/SimpleDataAchat.java @@ -0,0 +1,162 @@ +package Models; + +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Models.BonReceptionFrs.BonReceptionDB; +import Models.BonReceptionFrs.BonReceptionFrs; +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.Produit.Produit; +import Models.Produit.ProduitDB; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author Maher Ben Tili + */ +public class SimpleDataAchat { + + ObservableList Fournisseurs = null; + ObservableList Transporteurs = null; + ObservableList Magasins = null; + ObservableList Produits = null; + + public SimpleDataAchat() { + Produits = new ProduitDB().getAllProduits(); + Fournisseurs = new FournisseurDB().getAllFournisseurs(); + Transporteurs = FXCollections.observableArrayList("Mabrouk Gillot", "Manoubi Dewet", "Salah Dubuisson", "Ali Romann", "Sabir Kariger"); + Magasins = FXCollections.observableArrayList("Magasin II", "Magasin III", "Magasin IV"); + } + + public void setDataFactureFrs(int nbrFactureFrs) + { + int[] uniqueArray = Adaptateur.generateUniqueRandomArray(nbrFactureFrs, 10000); + for(int i=0; i randomProduits = Adaptateur.getUniqueRandomObjectList(Produits, Adaptateur.getRandomValueBetween(2, 25) ); + ObservableList listeProduit = getListProduits(randomProduits); + Facture.setListProduit(listeProduit); + float netaPayer = 0; float Remises = 0; float totalTVA = 0; float total_H_T_Net= 0; + + //calcule + for(ListeProduit liste : listeProduit){ + 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("%", "")); + + totalTVA = totalTVA + ((totaht * tva) /100) ; + Remises = Remises + (prix_U_H_T * remises)/100 ; + total_H_T_Net = total_H_T_Net + totaht ; + } + + float timbre = Adaptateur.StringToFloat(ParametreSystem.Timbre); + netaPayer = total_H_T_Net + totalTVA + timbre ; + Facture.setTotalTVA(Adaptateur.floatDeleZero(totalTVA)); + Facture.setRemise(Adaptateur.floatDeleZero(Remises)); + Facture.setNetAPayer(Adaptateur.floatDeleZero(netaPayer)); + Facture.setTimbre(ParametreSystem.Timbre); + Facture.setTotalHorsTaxNet(Adaptateur.floatDeleZero(total_H_T_Net)); + + Facture.setTypeReglement(null); + Facture.setEtatReglement(null); + new FactureFrsDB().setFactureFrsDB(Facture); + } + } + + public void setDataBonReception(int nbrBonReception) + { + int[] uniqueArray = Adaptateur.generateUniqueRandomArray(nbrBonReception, 10000); + for(int i=0; i randomProduits = Adaptateur.getUniqueRandomObjectList(Produits, Adaptateur.getRandomValueBetween(2, 25) ); + ObservableList ListProduitBons = FXCollections.observableArrayList(); + float netaPayer = 0; + float Remises = 0; + float totalTVA = 0; + float total_H_T_Net= 0; + for(Produit prod : randomProduits) + { + float qte = (float) Adaptateur.getRandomValueBetween(1, 7); + float remises = (float) Adaptateur.getRandomValueBetween(1, 30); + float prix_U_H_T = Adaptateur.StringToFloat(prod.getPrixachatht()) ; + float tva = Adaptateur.StringToFloat(prod.getTvaachat()); + float totaht = Adaptateur.StringToFloat(prod.getPrixachatht()) ; + float totalttc = totaht + ((totaht * tva)/100) ; + + totalTVA = totalTVA + ((totaht * tva) /100) ; + Remises = Remises + (prix_U_H_T * remises)/100 ; + total_H_T_Net = total_H_T_Net + totaht ; + + ListProduitBons.add(new BonReceptionProduitList("", "", prod.getReference(), "", Adaptateur.floatDeleZero(qte), prod.getPrixachatht(), Adaptateur.floatDeleZero(totaht), prod.getTvaachat(), Adaptateur.floatDeleZero(totalttc))); + } + BonReception.setListProduit(ListProduitBons); + + netaPayer = total_H_T_Net + totalTVA ; + BonReception.setNetPayer(Adaptateur.floatDeleZero(netaPayer)); + + new BonReceptionDB().setBonReceptionFrsDB(BonReception); + } + } + + private ObservableList getListProduits(List listProduits) + { + ObservableList ListProduit = FXCollections.observableArrayList(); + for(Produit prod : listProduits){ + float prixht = Adaptateur.StringToFloat(prod.getPrixventeht()) ; + float tva = Adaptateur.StringToFloat(prod.getTvavente()); + float qte = (float) Adaptateur.getRandomValueBetween(1, 7); + float remise = (float) Adaptateur.getRandomValueBetween(1, 30); + float totalht = (prixht - ((prixht * remise)/100))* qte ; + float totalttc = totalht + ((totalht * tva)/100) ; + + ListProduit.add(new ListeProduit(prod.getReference(), prod.getDesignation(), Adaptateur.floatDeleZero(qte), prod.getPrixventeht(), Adaptateur.floatDeleZero(remise), Adaptateur.floatDeleZero(totalht), prod.getTvavente(), Adaptateur.floatDeleZero(totalttc))); + } + return ListProduit; + } + +} diff --git a/src/main/java/Models/SimpleDataVente.java b/src/main/java/Models/SimpleDataVente.java new file mode 100644 index 0000000..315f072 --- /dev/null +++ b/src/main/java/Models/SimpleDataVente.java @@ -0,0 +1,477 @@ +package Models; + +import Controllers.Stock.ListProduitBon; +import Controllers.Traitement.Adaptateur; +import static Controllers.Traitement.Adaptateur.DatabaseDateLocalDate; +import static Controllers.Traitement.Adaptateur.StringToLocalDate; +import Controllers.Traitement.ParametreSystem; +import Models.BonLivraisonClt.BonLivraisonClt; +import Models.BonLivraisonClt.BonLivraisonCltDB; +import Models.Caisse.CarteBancaireClt; +import Models.ChequeClt.ChequeClt; +import Models.ChequeClt.ChequeList; +import Models.Client.Client; +import Models.Client.ClientDB; +import Models.Client.ClientEntreprise; +import Models.Client.ClientEntrepriseDB; +import Models.CommandeClt.CommandeClt; +import Models.CommandeClt.CommandeCltDB; +import Models.DevisClt.Devis; +import Models.DevisClt.DevisDB; +import Models.FactureClt.FactureClt; +import Models.FactureClt.FactureCltDB; +import Models.Produit.ListeProduit; +import Models.Produit.Produit; +import Models.Produit.ProduitDB; +import Models.Stock.BonEntree; +import Models.Stock.BondeEntrerDB; +import Models.TraiteClt.TraiteClt; +import Models.TraiteClt.TraiteList; +import Models.User.User; +import java.sql.Time; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * @author Maher Ben Tili + */ +public class SimpleDataVente { + + ObservableList Produits = null; + + ObservableList ClientEntreprises = null; + ObservableList Clients = null; + ObservableList Transporteurs = null; + ObservableList Magasins = null; + ObservableList Banques = null; + + public SimpleDataVente() + { + Produits = new ProduitDB().getAllProduits(); + ClientEntreprises = new ClientEntrepriseDB().getAllCltEntreprise(); + Clients = new ClientDB().getAllClient(); + Transporteurs = FXCollections.observableArrayList("Mabrouk Gillot", "Manoubi Dewet", "Salah Dubuisson", "Ali Romann", "Sabir Kariger"); + Magasins = FXCollections.observableArrayList("Magasin II", "Magasin III", "Magasin IV"); + Banques = FXCollections.observableArrayList("STB", "BNA", "BH", "BFPME", "BTS", "BTE", "BTL", "TSB", "ATB","ABC", "BIAT", "BT", "Amen Bank", "AttijariBank"); + } + + + public void setDataBonEnter(int nbrBonEnter) + { + int[] uniqueArray = Adaptateur.generateUniqueRandomArray(nbrBonEnter, 10000); + + for(int i=0; i randomProduits = Adaptateur.getUniqueRandomObjectList(Produits, Adaptateur.getRandomValueBetween(2, 25) ); + ObservableList ListProduitBons = getListProduitBons(randomProduits); + + new BondeEntrerDB().addBonEntrer(BonEntre, ListProduitBons); + } + } + + public void setDataFactureClt(int nbrFacture) + { + FactureClt Facture = new FactureClt(); + + ObservableList commandes = new CommandeCltDB().getAllCommandesClt(); + for(int i=0; i dataList = FXCollections.observableArrayList(); + for(int t=0; t ListTraites = new ArrayList(); + for(int t1=0; t1 dataListCheque = FXCollections.observableArrayList(); + int NumeroCheque = Adaptateur.getRandomValueBetween(10, 300); + String BanqueCheque = Adaptateur.getRandomObject(Banques); + + for(int c=0; c ListCheque = new ArrayList(); + for(int c1=0; c1 commandes = new CommandeCltDB().getAllCommandesClt(); + + + for(int i=0; i randomProduits = Adaptateur.getUniqueRandomObjectList(Produits, Adaptateur.getRandomValueBetween(2, 10) ); + ObservableList listeProduit = getListProduits(randomProduits); + commandeclt.setListeproduit(listeProduit); + + int TypeClient = Adaptateur.getRandomValueBetween(0, 1); + commandeclt.setTypeClient(TypeClient); + if(TypeClient == 0){ + Client randomClient = Adaptateur.getRandomObject(Clients); + commandeclt.setCltPersonne(randomClient); + }else if(TypeClient == 1){ + ClientEntreprise randomEntreprise = Adaptateur.getRandomObject(ClientEntreprises); + commandeclt.setCltEntreprise(randomEntreprise); + } + commandeclt.setTypeRegement(String.valueOf(Adaptateur.getRandomValueBetween(0, 1))); + + Map map = CalculeTotalProduits(listeProduit); + commandeclt.setNetAPayer(map.get("NetaPayer").toString()); + commandeclt.setTotalTVA(map.get("TotalTVA").toString()); + commandeclt.setTotalHorsTaxNet(map.get("Total_H_T_Net").toString()); + commandeclt.setRemise(map.get("Remise").toString()); + }else if(importDevis == 1){ + ObservableList ListAllDevis = new DevisDB().getAllDevis(); + Devis randomDevis = Adaptateur.getRandomObject(ListAllDevis); + + commandeclt.setCodeDevis(randomDevis.getCodeDevis()); + commandeclt.setDate(randomDevis.getDateCreation()); + commandeclt.setListeproduit(randomDevis.getListeproduit()); + + commandeclt.setTypeClient(randomDevis.getTypeClient()); + if(randomDevis.getTypeClient() == 0){ + commandeclt.setCltPersonne(randomDevis.getClient()); + }else if(randomDevis.getTypeClient() == 1){ + commandeclt.setCltEntreprise(randomDevis.getEntreprise()); + } + commandeclt.setTypeRegement(randomDevis.getTypeRegement()); + commandeclt.setNetAPayer(randomDevis.getNetAPayer()); + commandeclt.setTotalTVA(randomDevis.getTotalTVA()); + commandeclt.setTotalHorsTaxNet(randomDevis.getTotalHorsTaxNet()); + commandeclt.setRemise(randomDevis.getRemise()); + } + new CommandeCltDB().AddCommandeClt(commandeclt); + } + } + + + public void setDataDevisClt(int nbrDevis) + { + for(int i=0; i randomProduits = Adaptateur.getUniqueRandomObjectList(Produits, Adaptateur.getRandomValueBetween(2, 10) ); + ObservableList listeProduit = getListProduits(randomProduits); + devis.setListeproduit(listeProduit); + + LocalDate date = Adaptateur.getRandomDateBetween(LocalDate.of(2022, 1, 1), LocalDate.of(2025, 12, 31)); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); + String formattedDate = date.format(formatter); + devis.setDateCreation(formattedDate); + + int TypeClient = Adaptateur.getRandomValueBetween(0, 1); + devis.setTypeClient(TypeClient); + if(TypeClient == 0){ + Client randomClient = Adaptateur.getRandomObject(Clients); + devis.setClient(randomClient); + devis.setCodeClient(randomClient.getCodeclient()); + }else if(TypeClient == 1){ + ClientEntreprise randomEntreprise = Adaptateur.getRandomObject(ClientEntreprises); + devis.setEntreprise(randomEntreprise); + devis.setCodeClient(randomEntreprise.getCodeString()); + } + + String dateFinValidite = date.plusMonths(1).format(formatter); + devis.setValidite(dateFinValidite); + + Map map = CalculeTotalProduits(listeProduit); + devis.setNetAPayer(map.get("NetaPayer").toString()); + devis.setTotalTVA(map.get("TotalTVA").toString()); + devis.setTotalHorsTaxNet(map.get("Total_H_T_Net").toString()); + devis.setRemise(map.get("Remise").toString()); + + devis.setTypeRegement(String.valueOf(Adaptateur.getRandomValueBetween(0, 1))); + + new DevisDB().AddDevis(devis); + } + } + + + + + + private ObservableList getListProduits(List listProduits) + { + ObservableList ListProduit = FXCollections.observableArrayList(); + for(Produit prod : listProduits){ + float prixht = Adaptateur.StringToFloat(prod.getPrixventeht()) ; + float tva = Adaptateur.StringToFloat(prod.getTvavente()); + float qte = (float) Adaptateur.getRandomValueBetween(1, 7); + float remise = (float) Adaptateur.getRandomValueBetween(1, 30) ; + float totalht = (prixht - ((prixht * remise)/100))* qte ; + float totalttc = totalht + ((totalht * tva)/100) ; + + ListProduit.add(new ListeProduit(prod.getReference(), prod.getDesignation(), Adaptateur.floatDeleZero(qte), prod.getPrixventeht(), Adaptateur.floatDeleZero(remise), Adaptateur.floatDeleZero(totalht), prod.getTvavente(), Adaptateur.floatDeleZero(totalttc))); + } + return ListProduit; + } + + private ObservableList getListProduitBons(List listProduits) + { + ObservableList ListProduitBons = FXCollections.observableArrayList(); + for(Produit prod : listProduits){ + float prixht = Adaptateur.StringToFloat(prod.getPrixventeht()) ; + float tva = Adaptateur.StringToFloat(prod.getTvavente()); + float qte = (float) Adaptateur.getRandomValueBetween(1, 7); + float remise = (float) Adaptateur.getRandomValueBetween(1, 30) ; + float totalht = (prixht - ((prixht * remise)/100))* qte ; + float totalttc = totalht + ((totalht * tva)/100) ; + + ListProduitBons.add(new ListProduitBon(prod.getReference(), prod.getDesignation(), prod.getMarque(), prod.getCategorie(), Adaptateur.floatDeleZero(totalttc), Adaptateur.floatDeleZero(qte), prod.getTvavente())); + } + return ListProduitBons; + } + + private Map CalculeTotalProduits(ObservableList listProduits) + { + float NetaPayer = 0; + float Remise = 0; + float TotalTVA = 0; + float Total_H_T_Net= 0; + + //calcule + for(ListeProduit liste : listProduits){ + 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("%", "")); + + 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 ; + } + + Map map = new HashMap<>(); + map.put("NetaPayer", NetaPayer); + map.put("Remise", Remise); + map.put("TotalTVA", TotalTVA); + map.put("Total_H_T_Net", Total_H_T_Net); + + return map; + } +} diff --git a/src/main/java/Models/Stock/BonEntree.java b/src/main/java/Models/Stock/BonEntree.java new file mode 100644 index 0000000..4ffe8a5 --- /dev/null +++ b/src/main/java/Models/Stock/BonEntree.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.Stock; +import Controllers.Stock.ListProduitBon; +import java.sql.Time; +import javafx.collections.ObservableList; + +/** + * @author Maher Ben Tili + */ +public class BonEntree { + + private String id ; + private String 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 String getDate() { + return date; + } + + public void setDate(String 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..5a92410 --- /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 Maher Ben Tili + */ +public class BonSortie { + private String id ; + private String 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 String getDate() { + return date; + } + + public void setDate(String 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..7f402e5 --- /dev/null +++ b/src/main/java/Models/Stock/BondeEntrerDB.java @@ -0,0 +1,235 @@ +package Models.Stock; + +import Controllers.Dialog.ShowDialog; +import Controllers.Stock.BondeEntrerDetailController; +import Controllers.Stock.ListProduitBon; +import Controllers.Stock.ListProduitRech; +import static Controllers.Traitement.Adaptateur.StringToFloat; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.H2JDBC; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class BondeEntrerDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(BondeEntrerDB.class.getName()); + contro clt = new contro(); + + public ObservableList getdataProdBE(String ref,String desig,String marq,String catego) + { + ObservableList data = FXCollections.observableArrayList(); + + String req = "SELECT * FROM produit WHERE reference LIKE '%"+ref+"%' AND nomcategorie_cate LIKE '%"+catego+"%' AND designation LIKE '%"+desig+"%' AND marque LIKE '%"+marq+"%' ORDER BY datecreation DESC ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BondeEntrerDB : getdataProdBE :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return data ; + } + + + public boolean VerifyIdBonEnter(String idbonenter) + { + //true id exsiste false n'exsiste pas + int nombreLignes = 0 ; + + String req="SELECT COUNT(*) FROM entre WHERE id_entre = "+idbonenter+" ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + nombreLignes = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BondeEntrerDB : VerifyIdBonEnter :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nombreLignes>0) ; + } + + + /******************************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) + { + int nbr = 0; + + String dateBonEnter = "'"+mybe.getDate()+"'"; + if(clt.isStringNull(mybe.getDate())){ + dateBonEnter = "now()"; + } + + String req = "INSERT INTO entre (id_entre, date, heur, local_emetteur, local_recepteur, transporteur) VALUES ('"+mybe.getId()+"', "+dateBonEnter+", now(), '"+mybe.getLocal_emetteur()+"', '"+mybe.getLocal_recepteur()+"', '"+mybe.getTransporteur()+"');"; + + try { + String IdEnter = h2jdbc.InsertGetLastId(req); + if(IdEnter != null) + { + String Query = "INSERT INTO liste_produit_entre (id_bon_entre, reference_produit, designation ,quantite, tva, prix_vente_ttc) VALUES "; + + 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, mybe.getDate())); + } + Query = Query.substring(0, Query.length()-1)+";"; + + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(Query); + + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BondeEntrerDB : :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + new StockDetailDB().InsertStockDetail(ListStockDetail); + + BondeEntrerDetailController.id_bondentree = mybe.getId() ; + } + }catch(SQLException ex){ + System.err.println("addBonEntrer Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BondeEntrerDB : addBonEntrer :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + + /******************************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+" ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + bonenter.setId(resultat.getString("id_entre")); + bonenter.setDate(resultat.getString("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")); + } + String reqPro = "SELECT * FROM liste_produit_entre , produit WHERE reference=reference_produit AND id_bon_entre= "+id_BonEntree+" ;"; + ObservableList data = FXCollections.observableArrayList(); + try { + ResultSet resultatListePro = h2jdbc.selectFromDB(reqPro); + 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("getBonEntree Erreur SQL ! \n"+ex.getMessage()); + System.out.println(reqPro); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BondeEntrerDB : getBonEntree :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } catch(SQLException ex){ + System.err.println("getBonEntree Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BondeEntrerDB : getBonEntree :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..3da62ba --- /dev/null +++ b/src/main/java/Models/Stock/BondeSortieDB.java @@ -0,0 +1,207 @@ +package Models.Stock; + +import Controllers.Dialog.ShowDialog; +import Controllers.Stock.BondeSortieDetailController; +import Controllers.Stock.ListProduitBon; +import Controllers.Stock.ListProduitRech; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.H2JDBC; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class BondeSortieDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(BondeSortieDB.class.getName()); + contro clt = new contro(); + + public ObservableList getdataProdBS(String ref, String desig, String marq, 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 '%"+ref+"%' AND p.nomcategorie_cate LIKE '%"+catego+"%' AND p.designation LIKE '%"+desig+"%' AND p.marque LIKE '%"+marq+"%' 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 '%"+ref+"%' AND p.nomcategorie_cate LIKE '%"+catego+"%' AND p.designation LIKE '%"+desig+"%' AND p.marque LIKE '%"+marq+"%' ORDER BY p.datecreation DESC ;"; + } + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("getdataProdBS Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BondeSortieDB : getdataProdBS :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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 ; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + q = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("GetQuantiteStock Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BondeSortieDB : GetQuantiteStock :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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+"' ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + bonsortie.setId(resultat.getString("id_sortie")); + bonsortie.setDate(resultat.getString("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")); + } + + String reqPro = "SELECT * FROM liste_produit_sortie , produit WHERE reference=reference_produit AND id_bon_sortie= "+id_BonSortie+" ;"; + ResultSet resultatListePro = h2jdbc.selectFromDB(reqPro); + 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("getBonSortie Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BondeSortieDB : getBonSortie :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return bonsortie ; + } + + + + public boolean addBonSortie(BonSortie mybe) + { + Boolean result= false ; + int nbr = 0; + + String dateBonSortie = "'"+mybe.getDate()+"'"; + if(clt.isStringNull(mybe.getDate())){ + dateBonSortie = "now()"; + } + + String req = "INSERT INTO sortie (date, heur, local_emetteur, local_recepteur, transporteur) VALUES ("+dateBonSortie+", now(), '"+mybe.getLocal_emetteur()+"', '"+mybe.getLocal_recepteur()+"', '"+mybe.getTransporteur()+"');"; + try { + String IdSortie = h2jdbc.InsertGetLastId(req); + if(IdSortie != null) + { + 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, mybe.getDate())); + } + Query = Query.substring(0, Query.length()-1)+";"; + + nbr = h2jdbc.InsertUpdateDeleteInTable(Query); + + new StockDetailDB().InsertStockDetail(ListStockDetail); + + BondeSortieDetailController.id_bonsortie = IdSortie ; + } + } catch(SQLException ex){ + System.err.println("addBonSortie Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("BondeSortieDB : addBonSortie :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + + + + + + + + +} 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..8c838a0 --- /dev/null +++ b/src/main/java/Models/Stock/StockDB.java @@ -0,0 +1,293 @@ +package Models.Stock; + +import Controllers.Dialog.ShowDialog; +import static Controllers.Traitement.Adaptateur.StringDeleZero; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.H2JDBC; +import Models.Produit.ListeProduit; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + + +public class StockDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(StockDB.class.getName()); + + 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 (CAST(date_add AS DATE) >= '"+date_debut+"') "; + } + String req = " SELECT *, to_char(date_add, 'dd/mm/yyyy hh:ii') 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+";"; + } + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("getDataStockDetail Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("StockDB : getDataStockDetail :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ListMouvement; + } + + public String getNbrStockDetail(String local, String reference, String date_debut) + { + String WhereDate = ""; + if(!Controle.isStringNull(date_debut)){ + WhereDate = " AND (CAST(date_add AS DATE) >= '"+date_debut+"') "; + } + + String req = " SELECT COUNT(*) "; + req += " FROM stock_detail "; + req += " WHERE (local_nom LIKE '"+local+"') "; + req += WhereDate; + req += " AND (reference_produit LIKE '"+reference+"'); "; + + String sommme = "0"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getString(1); + } catch(SQLException ex){ + System.err.println("getNbrStockDetail Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("StockDB : getNbrStockDetail :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return 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 req = " 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; "; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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("getProduitInStock Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("StockDB : getProduitInStock :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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 + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + listLocale.add(resultat.getString("nom")); + } + } catch(SQLException ex){ + System.err.println("getAllListLocal Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("StockDB : getAllListLocal :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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 + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + listLocale.add(resultat.getString("nom")); + } + } catch(SQLException ex){ + System.err.println("getListLocal Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("StockDB : getListLocal :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return listLocale ; + } + + + public ArrayList getListCategorie() + { + ArrayList listCategorie = new ArrayList<>(); + String req = "SELECT * FROM categorie ;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + listCategorie.add(resultat.getString("nomcategorie")); + } + } catch(SQLException ex){ + System.err.println("getListCategorie Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("StockDB : getListCategorie :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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')"; + try { + h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("DeleteProdStock Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("StockDB : DeleteProdStock :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } +} diff --git a/src/main/java/Models/Stock/StockDetail.java b/src/main/java/Models/Stock/StockDetail.java new file mode 100644 index 0000000..459ad2c --- /dev/null +++ b/src/main/java/Models/Stock/StockDetail.java @@ -0,0 +1,140 @@ +/* + * 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, String date_add) { + 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; + this.date_add = date_add; + } + + + + + 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..9663f29 --- /dev/null +++ b/src/main/java/Models/Stock/StockDetailDB.java @@ -0,0 +1,130 @@ +package Models.Stock; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.BonLivraisonClt.BonLivraisonCltDB; +import Models.H2JDBC; +import javafx.collections.ObservableList; +import Models.User.User; +import java.sql.ResultSet; +import java.sql.SQLException; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class StockDetailDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(BonLivraisonCltDB.class.getName()); + contro clt = new contro(); + + public boolean InsertStockDetail(ObservableList ListStockDetail) + { + 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(); + + String DateAdd = "'"+ValStockDetail.getDate_add()+"'"; + if(clt.isStringNull(ValStockDetail.getDate_add())){ + DateAdd = "now()"; + } + + 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"; + } + 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 " + + "('"+ParametreSystem.NomLocalPC+"', '"+ReferenceProduit+"', '"+Quantite+"', "+DateAdd+", '"+User.idprofile+"', "+IdBonEntre+", "+IdBonSortie+", "+IdBonLivraison+", "+IdBonReception+", "+IdFactureFrs+", "+IdVenteSansFacture+" );"; + + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(Query); + if(nbr>0){ + Mouvement(ReferenceProduit, ParametreSystem.NomLocalPC); + } + }catch(SQLException ex){ + System.err.println("InsertStockDetail Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("StockDetailDB : InsertStockDetail :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("AddBonLivraisonClt Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + } + return true; + } + + public void Mouvement(String referenceProd, String localNom) + { + String req = "SELECT sum(quantite) FROM stock_detail WHERE (reference_produit LIKE '"+referenceProd+"') AND (local_nom LIKE '"+localNom+"')"; + int NewQuantite ; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + NewQuantite = resultat.getInt(1); + if(NewQuantite == 0) + { + h2jdbc.InsertUpdateDeleteInTable("DELETE FROM stock WHERE (local_nom LIKE '"+referenceProd+"') AND (produit_reference LIKE '"+localNom+"');"); + }else{ + String req2 = "SELECT COUNT(*) FROM stock WHERE (produit_reference LIKE '"+referenceProd+"') AND (local_nom LIKE '"+localNom+"')"; + ResultSet resultat2 = h2jdbc.selectFromDB(req2); + resultat2.next(); + int nbr = resultat2.getInt(1); + if(nbr == 0){ + h2jdbc.InsertUpdateDeleteInTable("INSERT INTO stock (local_nom, produit_reference, quantite) VALUES('"+localNom+"', '"+referenceProd+"', "+NewQuantite+");"); + }else{ + h2jdbc.InsertUpdateDeleteInTable("UPDATE stock SET quantite="+NewQuantite+" WHERE (local_nom='"+localNom+"') AND (produit_reference='"+referenceProd+"')"); + } + } + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("StockDetailDB : Mouvement :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } +} 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..31129c5 --- /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 Maher Ben Tili + */ +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..2b0bd2c --- /dev/null +++ b/src/main/java/Models/TraiteClt/TraiteCltDB.java @@ -0,0 +1,536 @@ +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.H2JDBC; +import Models.User.User; +import org.apache.log4j.Logger; +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 Maher Ben Tili + */ +public class TraiteCltDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(TraiteCltDB.class.getName()); + contro clt = new contro(); + + public Map GetChequePaiementTraite(String IdTraitePaiementCheque) + { + Map map = new HashMap<>(); + + String req = " SELECT t_p_c_clt.numero, t_p_c_clt.banque, t_clt.id_traite, " + + " f_clt.typeclt, " + + " c.nom AS nomPer, c.prenom AS prenomPer, " + + " e_clt.nomentrepise, e_clt.matricule_fiscale, " + + " p_clt.nom AS nomPass, p_clt.prenom AS prenomPass, " + + " 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+"');"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + map.put("IdTraite", resultat.getString("id_traite")); + map.put("numero", resultat.getString("numero")); + map.put("banque", resultat.getString("banque")); + if(resultat.getInt("typeclt") == 0){ + map.put("Nom", resultat.getString("nomPer")); + map.put("Prenom", resultat.getString("prenomPer")); + }else if(resultat.getInt("typeclt") == 1){ + map.put("Nom", resultat.getString("nomentrepise")); + map.put("Prenom", resultat.getString("matricule_fiscale")); + }else if(resultat.getInt("typeclt") == 2){ + map.put("Nom", resultat.getString("nomPass")); + map.put("Prenom", resultat.getString("prenomPass")); + } + } + } catch(SQLException ex){ + System.err.println("GetChequePaiementTraite Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("TraiteCltDBGetChequePaiementTraite : GetChequePaiementTraite :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + + return map; + } + + public Map GetCartePaiementTraite(String id_traite_paiement_carte) + { + Map map = new HashMap<>(); + + String req = " SELECT t_p_c_clt.numero_carte, t_p_c_clt.banque, t_clt.id_traite," + + " f_clt.typeclt, " + + " c.nom AS nomPer, c.prenom AS prenomPer, " + + " e_clt.nomentrepise, e_clt.matricule_fiscale, " + + " p_clt.nom AS nomPass, p_clt.prenom AS prenomPass, " + + " 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+"');"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + map.put("IdTraite", resultat.getString("id_traite")); + map.put("numero_carte", resultat.getString("numero_carte")); + map.put("banque", resultat.getString("banque")); + if(resultat.getInt("typeclt") == 0){ + map.put("Nom", resultat.getString("nomPer")); + map.put("Prenom", resultat.getString("prenomPer")); + }else if(resultat.getInt("typeclt") == 1){ + map.put("Nom", resultat.getString("nomentrepise")); + map.put("Prenom", resultat.getString("matricule_fiscale")); + }else if(resultat.getInt("typeclt") == 2){ + map.put("Nom", resultat.getString("nomPass")); + map.put("Prenom", resultat.getString("prenomPass")); + } + } + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("TraiteCltDB : GetCartePaiementTraite :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return map; + } + + public Map GetEspacePaiementTraite(String id_traite_paiement_espace) + { + Map map = new HashMap<>(); + + String req = " SELECT " + + " t_clt.id_traite, " + + " f_clt.typeclt, " + + " c.nom AS nomPer, c.prenom AS prenomPer, " + + " e_clt.nomentrepise, e_clt.matricule_fiscale, " + + " p_clt.nom AS nomPass, p_clt.prenom AS prenomPass, " + + " 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+"');"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + map.put("IdTraite", resultat.getString("id_traite")); + if(resultat.getInt("typeclt") == 0){ + map.put("Nom", resultat.getString("nomPer")); + map.put("Prenom", resultat.getString("prenomPer")); + }else if(resultat.getInt("typeclt") == 1){ + map.put("Nom", resultat.getString("nomentrepise")); + map.put("Prenom", resultat.getString("matricule_fiscale")); + }else if(resultat.getInt("typeclt") == 2){ + map.put("Nom", resultat.getString("nomPass")); + map.put("Prenom", resultat.getString("prenomPass")); + } + } + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("TraiteCltDB : GetEspacePaiementTraite :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("GetEspacePaiementTraite Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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, to_char(date_payer, 'dd/mm/yyyy') AS date_paiement, to_char(date_payer, 'hh:ii:ss') 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, to_char(date_payer, 'dd/mm/yyyy') AS date_paiement, to_char(date_payer, 'hh:ii:ss') 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, to_char(date_payer, 'dd/mm/yyyy') AS date_paiement, to_char(date_payer, 'hh:ii:ss') AS heur_paiement, montant_payer FROM traite_paiement_carte_clt WHERE (id_traite = '"+IdTraite+"') AND (local_nom = '"+ParametreSystem.NomLocalPC+"');"; + try { + ResultSet Resultat = h2jdbc.selectFromDB(QueryEspace); + 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("getListPaiementTraiteClt Erreur SQL ! \n"+ex.getMessage()); + System.out.println(QueryEspace); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("TraiteCltDB : getListPaiementTraiteClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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.isNumericNotnull(IdFacture)){ + WhereReq1 += " (T.id_factureclt = '"+IdFacture+"') AND "; + } + + if(!clt.isStringNull(DateDebut)){ + WhereReq1 += " (T.date_traite >= '"+DateDebut+"') AND "; + } + + if(!clt.isNumericNotnull(CodeClt)){ + WhereReq1 += " ( (C.codeclient = '"+CodeClt+"') OR (E.idcliententreprise = '"+CodeClt+"' ) ) AND "; + } + + if(!clt.isNumericNotnull(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, to_char(T.date_traite, 'dd/mm/yyyy') 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 ; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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){ + System.err.println("SearchTraiteCltRetard Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("TraiteCltDB : SearchTraiteCltRetard :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("TraiteCltDB Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + 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; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("nbrTraiteCltRetard Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("TraiteCltDB : nbrTraiteCltRetard :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..e610379 --- /dev/null +++ b/src/main/java/Models/TraiteClt/TraiteCltGestionDB.java @@ -0,0 +1,199 @@ +package Models.TraiteClt; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Controllers.Traitement.contro; +import Models.H2JDBC; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class TraiteCltGestionDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(TraiteCltGestionDB.class.getName()); + contro clt = new contro(); + + public ResultSet GetDetailTraite(String IdTraiteClt) + { + String req = "SELECT T.*, F.typeclt, F.net_a_payer, to_char(date_traite, 'dd/mm/yyyy') AS date_traite_format, " + + "CASE WHEN montant_traite >= montant_payer THEN '1' WHEN date_traite >= now() OR date_traite >= date_paiement THEN '2' ELSE '3' END 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+") "; + + return h2jdbc.selectFromDB(req); + } + + + + /********************************** 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.isNumericNotnull(idTraite)){ + Where += " (T.id_traite = '"+Adaptateur.addSlashes(idTraite)+"') AND "; + } + + if(!clt.isNumericNotnull(idFactureclt)){ + Where += " (F.idfactureclt = '"+Adaptateur.addSlashes(idFactureclt)+"') AND "; + } + + if(!clt.isNumericNotnull(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.isNumericNotnull(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, " + + "CASE WHEN montant_traite >= montant_payer THEN '1' WHEN date_traite >= now() OR date_traite >= date_paiement THEN '2' ELSE '3' END 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 { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date date_system = sdf.parse(sdf.format(new Date())); + ResultSet resultat = h2jdbc.selectFromDB(req); + 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"); + } + 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); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("TraiteCltGestionDB : GetDetailTraite :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } catch (ParseException ex) { + logger.error("TraiteCltGestionDB : GetDetailTraite :" + ex.getMessage()); + } + return DataListTraiteClt; + } + + + public Integer nbrSearchTraiteClt(String idTraite, String idFactureclt, String dateTraite, String codeClient, String cin, String nom) + { + String Where = ""; + + if(!clt.isNumericNotnull(idTraite)){ + Where += " (T.id_traite = '"+Adaptateur.addSlashes(idTraite)+"') AND "; + } + + if(!clt.isNumericNotnull(idFactureclt)){ + Where += " (F.idfactureclt = '"+Adaptateur.addSlashes(idFactureclt)+"') AND "; + } + + if(!clt.isNumericNotnull(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.isNumericNotnull(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; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("nbrSearchTraiteClt Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("TraiteCltGestionDB : nbrSearchTraiteClt :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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..a7a7ad5 --- /dev/null +++ b/src/main/java/Models/User/ListUserDB.java @@ -0,0 +1,118 @@ +package Models.User; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.ParametreSystem; +import Models.H2JDBC; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class ListUserDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(ListUserDB.class.getName()); + + public String nbrUsers() + { + String req = "SELECT COUNT(idprofile) FROM profile , authentification WHERE idprofile = idauhentification ;"; + String sommme = "0"; + try { + ResultSet Resultat = h2jdbc.selectFromDB(req); + Resultat.next(); + sommme = Resultat.getString(1); + } catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ListUserDB : nbrUsers :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return 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+" ;"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ListUserDB : rechercheData :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return data ; + } + + + + public ObservableList getdata() + { + ObservableList data=FXCollections.observableArrayList(); + String req = "SELECT idprofile , type_compte, login , nom , prenom , num_tele FROM profile , authentificationWHERE idprofile = idauhentification ;"; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + 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()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ListUserDB : getdata :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + 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..7e8a815 --- /dev/null +++ b/src/main/java/Models/User/Profile.java @@ -0,0 +1,117 @@ +package Models.User; + +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..6f61e43 --- /dev/null +++ b/src/main/java/Models/User/ProfileDB.java @@ -0,0 +1,184 @@ +package Models.User; + +import Controllers.Dialog.ShowDialog; +import Controllers.Traitement.Adaptateur; +import Controllers.Traitement.ParametreSystem; +import Models.H2JDBC; +import java.sql.ResultSet; +import java.sql.SQLException; +import org.apache.log4j.Logger; + +/** + * @author Maher Ben Tili + */ +public class ProfileDB { + + Logger logger = Logger.getLogger(ProfileDB.class.getName()); + H2JDBC h2jdbc = new H2JDBC(); + + 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)+"') ;"; + + try{ + ResultSet resultat = h2jdbc.selectFromDB(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.setTypeCompte(resultat.getString("type_compte")); + authentification.setQuestionSecrete(resultat.getString("question_secrete")); + authentification.setReponceQuestion(resultat.getString("reponce_question")); + 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")); + profile.setPays(resultat.getString("pays")); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + if(ParametreSystem.ErrorShowLogger) + { + logger.error(" : :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + } + 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+" ;"; + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ProfileDB : updateAuthentification :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + public boolean updateProfile(int idprofile, Profile profile) + { + String req = "UPDATE profile 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()+", adresse = '"+Adaptateur.addSlashes(profile.getAdresse())+"', pays = '"+Adaptateur.addSlashes(profile.getPays())+"' WHERE (idprofile = "+idprofile+"); "; + int nbr = 0; + try { + nbr = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ProfileDB : updateProfile :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + } + return (nbr>0); + } + + + + + 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+"') ;"; + + ResultSet resultat = h2jdbc.selectFromDB(req); + try { + while (resultat.next()) { + Authentification authentification = new Authentification(); + authentification.setIdAuthentification(resultat.getString("idauhentification")); + authentification.setLogin(resultat.getString("login")); + authentification.setPassword(resultat.getString("password")); + authentification.setTypeCompte(resultat.getString("type_compte")); + authentification.setQuestionSecrete(resultat.getString("question_secrete")); + authentification.setReponceQuestion(resultat.getString("reponce_question")); + 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")); + myprofile.setPays(resultat.getString("pays")); + } + } catch (SQLException ex) { + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("ProfileDB : getpro :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + ShowDialog SD = new ShowDialog(); + SD.ShowAletDialog(); + } + } + + 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..07317c4 --- /dev/null +++ b/src/main/java/Models/VenteRapideClt/VenteSansFactureDB.java @@ -0,0 +1,366 @@ +package Models.VenteRapideClt; + +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.Caisse.CarteBancaireClt; +import Models.Caisse.CarteBancaireCltDB; +import Models.ChequeClt.ChequeCltDB; +import Models.H2JDBC; +import Models.Produit.ListeProduit; +import Models.Stock.StockDetail; +import Models.Stock.StockDetailDB; +import Models.User.User; +import java.sql.ResultSet; +import java.sql.SQLException; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.apache.log4j.Logger; + +/** + * @author Maher + */ +public class VenteSansFactureDB { + + H2JDBC h2jdbc = new H2JDBC(); + ShowDialog SD = new ShowDialog(); + Logger logger = Logger.getLogger(VenteSansFactureDB.class.getName()); + + contro clt = new contro(); + + public boolean DeleteVenteSansFacture(VenteSansFacture Vente) + { + String IdVenteSansFacture = Vente.getIdVenteSansFacture(); + + String req = "UPDATE vente_sans_facture SET operation = '1', date_operation = now() WHERE vente_sans_facture.id_vente_sans_facture = "+IdVenteSansFacture+";" ; + int updateVSF = 0; + try { + updateVSF = h2jdbc.InsertUpdateDeleteInTable(req); + }catch(SQLException ex){ + System.err.println("DeleteVenteSansFacture Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("VenteSansFactureDB : DeleteVenteSansFacture :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + 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, Vente.getDateVente())); + } + } + 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 DateVente = "now()"; + if(!clt.isStringNull(Vente.getDateVente())){ + DateVente = "'"+Vente.getDateVente()+"'"; + } + + + 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 ("+DateVente+", '"+Vente.getPaiement()+"', "+NomPrenomClient+", null, '"+Montant+"', "+IdChequeClt+", "+IdCarteBancaire+", '"+User.idprofile+"', '"+ParametreSystem.NomLocalPC+"');"; + + String IdVenteSansFacture = null; + try { + IdVenteSansFacture = h2jdbc.InsertGetLastId(Query); + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("VenteSansFactureDB : SetVenteSansFacture :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("SetVenteSansFacture Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + + if(IdVenteSansFacture != null) + { + Vente.setIdVenteSansFacture(IdVenteSansFacture); + + ObservableList ListStockDetail = FXCollections.observableArrayList(); + + String QueryProd = "INSERT INTO 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 += "('"+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, Vente.getDateVente())); + } + } + if(req != "") + { + req = req.substring(0, req.length()-1) + ";"; + try { + int nbr = h2jdbc.InsertUpdateDeleteInTable(QueryProd+req); + if(nbr>0){ + new StockDetailDB().InsertStockDetail(ListStockDetail); + Caisse.setIdVenteSansFactureClt(IdVenteSansFacture); + Caisse.setMontant(Montant); + new CaisseDB().AddCaisse(Caisse); + } + }catch(SQLException ex){ + System.err.println("Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("VenteSansFactureDB : SetVenteSansFacture :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + } + } + return Vente; + } + + + + public VenteSansFacture getVenteSansFacture(String IdVenteSansFacture) + { + VenteSansFacture venteSansFacture = new VenteSansFacture(); + + String req = "SELECT *, to_char(date_vente, 'dd/mm/yyyy hh:ii:ss') as datetime_vente FROM vente_sans_facture WHERE id_vente_sans_facture = "+IdVenteSansFacture+";"; + + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + while (resultat.next()){ + 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("getVenteSansFacture Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("VenteSansFactureDB : getVenteSansFacture :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return venteSansFacture; + } + + + + + public ObservableList getListProduit(String IdVenteSansFacture) + { + ObservableList ListProd = FXCollections.observableArrayList(); + + String req = "SELECT * FROM liste_prod_vente_sans_facture WHERE id_vente_sans_facture = "+IdVenteSansFacture+";"; + + try { + ResultSet ResultListProd = h2jdbc.selectFromDB(req); + 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("getListProduit Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("VenteSansFactureDB : getListProduit :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ListProd; + } + + public ObservableList SearchVenteSansFactureGestion(Integer debut, Integer nbr, String Code, String Montant, String Date) + { + ObservableList ListeVSF = FXCollections.observableArrayList(); + String WhereCondition = ""; + + if(!clt.isNumericNotnull(Code)){ + WhereCondition += " (VSF.id_vente_sans_facture = '"+Code+"') AND"; + } + if(!clt.isStringNull(Date)){ + WhereCondition += " (CAST(VSF.date_vente AS DATE) = '"+Date+"' ) AND"; + } + if(!clt.isFloatNotnull(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, to_char(VSF.date_vente, 'dd/mm/yyyy hh:ii:ss') AS date_vente , VSF.paiement, VSF.nom_prenom_client, VSF.montant, VSF.operation, to_char(VSF.date_operation, 'dd/mm/yyyy hh:ii:ss') 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 = h2jdbc.selectFromDB(Query); + 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("SearchVenteSansFactureGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(Query); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("VenteSansFactureDB : SearchVenteSansFactureGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return ListeVSF; + } + + public Integer nbrVenteSansFactureGestion(String Code, String Montant, String Date) + { + String WhereCondition = ""; + + if(!clt.isNumericNotnull(Code)){ + WhereCondition += " (VSF.id_vente_sans_facture = '"+Code+"') AND"; + } + if(!clt.isStringNull(Date)){ + WhereCondition += " (CAST(VSF.date_vente AS DATE) = '"+Date+"' ) AND"; + } + if(!clt.isFloatNotnull(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; + try { + ResultSet resultat = h2jdbc.selectFromDB(req); + resultat.next(); + sommme = resultat.getInt(1); + } catch(SQLException ex){ + System.err.println("nbrVenteSansFactureGestion Erreur SQL ! \n"+ex.getMessage()); + System.out.println(req); + if(ParametreSystem.ErrorShowLogger) + { + logger.error("VenteSansFactureDB : nbrVenteSansFactureGestion :" + ex.getMessage()); + } + if(ParametreSystem.ErrorShowDialog) + { + ShowDialog.setTitre("Erreur SQL !"); + ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState()); + SD.ShowAletDialog(); + } + } + return sommme ; + } + +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..768f73a --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,122 @@ +module Controllers { + + requires javafx.controls; + + requires javafx.fxml; + + requires java.sql; + + requires icu4j; + + requires org.controlsfx.controls; + + requires javafx.web; + + requires java.base; + + requires log4j; + + requires com.google.gson; + + 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; + + opens Controllers.Traitement to javafx.fxml, com.google.code.gson; + exports Controllers.Traitement; + +} + diff --git a/src/main/resources/Public/CSS/StylePrincipal.css b/src/main/resources/Public/CSS/StylePrincipal.css new file mode 100644 index 0000000..4907fc1 --- /dev/null +++ b/src/main/resources/Public/CSS/StylePrincipal.css @@ -0,0 +1,601 @@ +/******************************************************************************* + * * + * 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; +} + +.progress-bar > .track { + -fx-background-radius: 0 0 0 0; + -fx-background-color:#ffffff; +} + + + +.progress-bar > .bar { + -fx-background-color:#3282F6; + -fx-background-insets: 1 1 1 1; + -fx-padding: 0.40em; +} + +/******************************************************************************* + * * + * 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 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 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..e3bc6bf --- /dev/null +++ b/src/main/resources/Views/Authentification.fxml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/Views/BonLivraisonClt/BonLivraisonCltAjouter.fxml b/src/main/resources/Views/BonLivraisonClt/BonLivraisonCltAjouter.fxml new file mode 100644 index 0000000..9698945 --- /dev/null +++ b/src/main/resources/Views/BonLivraisonClt/BonLivraisonCltAjouter.fxml @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +