Code : Tout sélectionner
Enumeration Fichiers
#FichierJSON
EndEnumeration
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration Gadgets
#Nom
#Dosage
#Unite
#Matin
#Midi
#Soir
#QteParBoite
#DteDeb
#DteFin
#QteJour
#QteMois
#BtesMois
#DoseJour
#DoseMois
#FinStock
#ListeMedicaments
#Btn_Nouveau
#Btn_Maj
#Btn_Supprimer
#Btn_Quitter
EndEnumeration
;-Structure
Structure Med
Nom.s ;Nom du médicament
DoseUnite.f ;Dosage médicament
Unite.s ;Unité de dosage
;Conditionnement.s ;Comprimés ou autre
QteMat.f ;Quantité matin
QteMid.f ;Quantité midi
QteSoir.f ;Quantité soir
QteParBoite.i ;Nombre par boite
DebutTraitement.s ;Date début du traitement
FinTraitement.s ;Date fin du traitement
Qtejour.f ;Qte journalière
Qtemois.f ;Qte mensuelle
Dosejour.f ;Nombre par jour
Dosemois.f ;Nombre par mois
NbBoites.i ;Nombre de boites
FinStock.s ;Date fin de stock
EndStructure
Global NewList Medicaments.Med()
Global FichierJSON$ = "GESMED JSON V1. JSON"
Declare Ouvrir_Fenetre_principale()
Declare ChargerMedicaments()
Declare GestionEvenements()
Declare NouveauMedicament()
Declare SelectionMedicament()
Declare SupprimerMedicament()
Declare MajMedicaments()
Declare SauvegardeMedicaments()
Declare Quitter()
Ouvrir_Fenetre_principale()
Procedure Ouvrir_Fenetre_principale()
If OpenWindow(#Fenetre_principale, 425, 186, 1070, 680, "GESMED JSON V1 avec sauvegarde automatique Micoute 23/05/2016", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
StringGadget(#Nom, 5, 5, 145, 30, "")
StringGadget(#Dosage, 155, 5, 50, 30, "")
StringGadget(#Unite, 210, 5, 45, 30, "")
StringGadget(#Matin, 260, 5, 35, 30, "")
StringGadget(#Midi, 300, 5, 35, 30, "")
StringGadget(#Soir, 340, 5, 35, 30, "")
StringGadget(#QteParBoite, 380, 5, 40, 30, "")
DateGadget(#DteDeb, 425, 5, 150, 30)
StringGadget(#DteFin, 580, 5, 96, 30, "")
StringGadget(#BtesMois, 775, 5, 70, 30, "")
StringGadget(#QteJour, 680, 5, 40, 30, "")
StringGadget(#QteMois, 725, 5, 45, 30, "")
StringGadget(#DoseJour, 850, 5, 50, 30, "")
StringGadget(#DoseMois, 905, 5, 60, 30, "")
StringGadget(#FinStock, 970, 5, 96, 30, "")
ListIconGadget(#ListeMedicaments, 5, 40, 1060, 560, "Nom", 145, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
AddGadgetColumn(#ListeMedicaments, 1, "Dosage", 60)
AddGadgetColumn(#ListeMedicaments, 2, "Unité", 40)
AddGadgetColumn(#ListeMedicaments, 3, "Matin", 40)
AddGadgetColumn(#ListeMedicaments, 4, "Midi", 40)
AddGadgetColumn(#ListeMedicaments, 5, "Soir", 40)
AddGadgetColumn(#ListeMedicaments, 6, "Qte/b", 50)
AddGadgetColumn(#ListeMedicaments, 7, "Date début", 155)
AddGadgetColumn(#ListeMedicaments, 8, "Date fin", 105)
AddGadgetColumn(#ListeMedicaments, 9, "Qte/J", 45)
AddGadgetColumn(#ListeMedicaments, 10, "Qte/M", 45)
AddGadgetColumn(#ListeMedicaments, 11, "Btes/M", 75)
AddGadgetColumn(#ListeMedicaments, 12, "Dose/J", 55)
AddGadgetColumn(#ListeMedicaments, 13, "Dose/M", 65)
AddGadgetColumn(#ListeMedicaments, 14, "Fin stock", 100)
ButtonGadget(#Btn_Nouveau, 10, 620, 140, 40, "Nouveau")
ButtonGadget(#Btn_Maj, 330, 620, 140, 40, "Ajouter")
ButtonGadget(#Btn_Supprimer, 635, 620, 140, 40, "Supprimer", #PB_Button_Toggle)
ButtonGadget(#Btn_Quitter, 840, 620, 220, 40, "Quitter sans sauvegarder")
For i = #DteFin To #FinStock
DisableGadget(i, 1)
Next i
; Polices
For i = #Btn_Nouveau To #Btn_Quitter
SetGadgetFont(i, FontID(LoadFont(#PB_Any, "FontAwesome", 16, #PB_Font_Bold|#PB_Font_HighQuality)))
Next i
For i = #Nom To #FinStock
SetGadgetFont(i, FontID(LoadFont(#PB_Any, "FontAwesome", 16, #PB_Font_Bold|#PB_Font_HighQuality)))
Next i
;Contrôle de la saisie (le nom est obligatoire)
BindGadgetEvent(#nom, @GestionEvenements())
;Mise en place d'un nouveau médicament
BindGadgetEvent(#Btn_Nouveau, @NouveauMedicament())
;Un médicament est sélectionné dans la liste
BindGadgetEvent(#ListeMedicaments, @SelectionMedicament())
;Ajout ou modification d'un médicament
BindGadgetEvent(#Btn_Maj, @MajMedicaments())
;Suppression d'un médicament
BindGadgetEvent(#Btn_Supprimer, @SupprimerMedicament())
;Fermeture de l'application et sauvegarde des médicaments
BindEvent(#PB_Event_CloseWindow, @SauvegardeMedicaments())
BindGadgetEvent(#Btn_Quitter, @Quitter())
;Lecture des médicaments
ChargerMedicaments()
;L'application est prête pour la saisie d'un médicament
NouveauMedicament()
Repeat
Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf
EndProcedure
Procedure Quitter()
CloseWindow(#Fenetre_principale)
End
EndProcedure
;Chargement des médicaments enregistrés
Procedure ChargerMedicaments()
If ReadFile(#FichierJSON, FichierJSON$)
CloseFile(#FichierJSON)
;Lecture du fichier JSON
LoadJSON(#FichierJSON, FichierJSON$, #PB_JSON_NoCase)
;Extraction de la chaine JSON vers la liste de médicaments
ExtractJSONList(JSONValue(#FichierJSON), Medicaments())
;Affichage de la liste des médicaments
ForEach Medicaments()
With Medicaments()
AddGadgetItem(#ListeMedicaments, -1, \Nom+#LF$+\DoseUnite+#LF$+\Unite+#LF$+\QteMat+#LF$+\QteMid+#LF$+\QteSoir+#LF$+\QteParBoite+#LF$+\DebutTraitement+#LF$+
\FinTraitement+#LF$+\QteJour+#LF$+\QteMois+#LF$+\NbBoites+#LF$+\DoseJour+#LF$+\DoseMois+#LF$+\FinStock)
SetGadgetItemData(#ListeMedicaments, CountGadgetItems(#ListeMedicaments)-1, ListIndex(Medicaments()))
EndWith
Next
EndIf
EndProcedure
;Gestionnaire de contrôle de la saisie
Procedure GestionEvenements()
Protected Evenement = EventType()
Select Evenement
Case #PB_EventType_Change
If Trim(GetGadgetText(#Nom)) <> ""
DisableGadget(#Btn_Nouveau, #False)
DisableGadget(#Btn_Maj, #False)
Else
DisableGadget(#Btn_Nouveau, #True)
DisableGadget(#Btn_Maj, #True)
EndIf
EndSelect
EndProcedure
;Nouveau médicament (Raz des champs de saisie)
Procedure NouveauMedicament()
SetWindowData(#Fenetre_principale, 0) ;C'est une création
SetGadgetText(#nom, "")
SetGadgetText(#Dosage, "")
SetGadgetText(#Unite, "")
SetGadgetText(#Matin, "")
SetGadgetText(#Midi, "")
SetGadgetText(#Soir, "")
SetGadgetText(#QteParBoite, "")
SetGadgetText(#DteDeb, "")
SetGadgetText(#DteFin, "")
SetGadgetText(#QteJour, "")
SetGadgetText(#QteMois, "")
SetGadgetText(#DoseJour, "")
SetGadgetText(#DoseMois, "")
SetGadgetText(#BtesMois, "")
SetGadgetText(#FinStock, "")
DisableGadget(#Btn_Nouveau, #True)
DisableGadget(#Btn_Maj, #True)
DisableGadget(#Btn_Supprimer, #True)
SetGadgetText(#Btn_Maj, "Ajouter")
SetActiveGadget(#Nom)
EndProcedure
;Un médicament est sélectionné dans la liste
Procedure SelectionMedicament()
Protected Item = GetGadgetState(#ListeMedicaments)
If Item <> -1
SelectElement(Medicaments(), GetGadgetItemData(#ListeMedicaments, Item))
With Medicaments()
SetGadgetText(#nom, \Nom)
SetGadgetText(#Dosage, StrF(\DoseUnite))
SetGadgetText(#Unite, \Unite)
SetGadgetText(#Matin, StrF(\QteMat))
SetGadgetText(#Midi, StrF(\QteMid))
SetGadgetText(#Soir, StrF(\QteSoir))
SetGadgetText(#QteParBoite, Str(\QteParBoite))
SetGadgetText(#DteDeb, \DebutTraitement)
SetGadgetText(#DteFin, \FinTraitement)
SetGadgetText(#QteJour, StrF(\Qtejour))
SetGadgetText(#QteMois, StrF(\Qtemois))
SetGadgetText(#DoseJour, StrF(\Dosejour))
SetGadgetText(#DoseMois, StrF(\Dosemois))
SetGadgetText(#BtesMois, Str(\NbBoites))
SetGadgetText(#FinStock, \FinStock)
EndWith
EndIf
;C'est une modification de médicament
SetWindowData(#Fenetre_principale, 1)
DisableGadget(#Btn_Nouveau, #False)
DisableGadget(#Btn_Maj, #False)
DisableGadget(#Btn_Supprimer, #False)
SetGadgetText(#Btn_Maj, "Modifier")
SetActiveGadget(#Nom)
EndProcedure
;Suppression d'un médicament
Procedure SupprimerMedicament()
If MessageRequester("Information", "Etes-vous sûr de vouloir supprimer un médicament ?" + #CRLF$ +
"Cette action est irrémédiable !", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
SetWindowData(#Fenetre_principale, 3) ;C'est une suppression
MajMedicaments()
EndIf
EndProcedure
;Gestionnaire de mise à jour des médicaments
Procedure MajMedicaments()
Protected.s Nom = GetGadgetText(#Nom)
Protected.f DoseUnite = ValF(GetGadgetText(#Dosage))
Protected.s Unite = GetGadgetText(#Unite)
Protected.f QteMat = ValF(GetGadgetText(#Matin))
Protected.f QteMid = ValF(GetGadgetText(#Midi))
Protected.f QteSoir = ValF(GetGadgetText(#Soir))
Protected.i QteParBoite = Val(GetGadgetText(#QteParBoite))
Protected.s DebutTraitement = GetGadgetText(#DteDeb)
Protected.s FinTraitement = FormatDate("%dd/%mm/%yyyy", AddDate(GetGadgetState(#DteDeb), #PB_Date_Day, 30))
Protected.f QteJour = QteMat + QteMid + QteSoir
Protected.f QteMois = QteJour * 30
Protected.f DoseJour = DoseUnite * QteJour
Protected.f DoseMois = DoseJour * 30
Protected.i NbBoites = Round(QteMois / QteParBoite, #PB_Round_Up)
Protected.s FinStock = FormatDate("%dd/%mm/%yyyy",AddDate(GetGadgetState(#DteDeb), #PB_Date_Day, 30 + (NbBoites * QteParBoite) - QteMois))
;Debug "Début "+FormatDate("%dd/%mm/%yyyy",GetGadgetState(#DteDeb)) + " Fin " + FormatDate("%dd/%mm/%yyyy", AddDate(GetGadgetState(#DteDeb), #PB_Date_Day, 30)) +
; " Stock "+ FormatDate("%dd/%mm/%yyyy", AddDate(GetGadgetState(#DteDeb), #PB_Date_Day, 30 + (NbBoites * QteParBoite) - QteMois))
;Debug "Nbre boites " + NbBoites + " Qte/boite " + QteParBoite + " Qte/mois " + QteMois + " = " + Str((NbBoites * QteParBoite) - QteMois)
Select GetWindowData(#Fenetre_principale)
Case 0 ;Création d'un médicament
AddElement(Medicaments())
With Medicaments()
\Nom = Nom
\DoseUnite = DoseUnite
\Unite = Unite
\QteMat = QteMat
\QteMid = QteMid
\QteSoir = QteSoir
\QteParBoite = QteParBoite
\DebutTraitement = DebutTraitement
\FinTraitement = FinTraitement
\Qtejour = QteJour
\Qtemois = QteMois
\Dosejour = DoseJour
\Dosemois = DoseMois
\NbBoites = NbBoites
\FinStock = FinStock
AddGadgetItem(#ListeMedicaments, -1, \Nom+#LF$+\DoseUnite+#LF$+\Unite+#LF$+\QteMat+#LF$+\QteMid+#LF$+\QteSoir+#LF$+\QteParBoite+#LF$+\DebutTraitement+#LF$+
\FinTraitement+#LF$+\QteJour+#LF$+\QteMois+#LF$+\NbBoites+#LF$+\DoseJour+#LF$+\DoseMois+#LF$+\FinStock)
SetGadgetItemData(#ListeMedicaments, CountGadgetItems(#ListeMedicaments)-1, ListIndex(Medicaments()))
EndWith
Case 1 ;Modification d'un médicament
With Medicaments()
\Nom = Nom
\DoseUnite = DoseUnite
\Unite = Unite
\QteMat = QteMat
\QteMid = QteMid
\QteSoir = QteSoir
\QteParBoite = QteParBoite
\DebutTraitement = DebutTraitement
\FinTraitement = FinTraitement
\Qtejour = QteJour
\Qtemois = QteMois
\Dosejour = DoseJour
\Dosemois = DoseMois
\NbBoites = NbBoites
\FinStock = FinStock
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), \Nom,0)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), StrF(\DoseUnite),1)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), \Unite,2)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), StrF(\QteMat),3)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), StrF(\QteMid),4)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), StrF(\QteSoir),5)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), Str(\QteParBoite),6)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), \DebutTraitement,7)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), \FinTraitement,8)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), StrF(\Qtejour),9)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), StrF(\Qtemois),10)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), StrF(\Dosejour),11)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), StrF(\Dosemois),12)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), Str(\NbBoites),13)
SetGadgetItemText(#ListeMedicaments, ListIndex(Medicaments()), \FinStock,14)
EndWith
NouveauMedicament()
Case 3 ;Suppression d'un médicament
RemoveGadgetItem(#ListeMedicaments, ListIndex(Medicaments()))
DeleteElement(Medicaments())
;Mise à jour des index de liaison ListiconGadget <-> Medicaments()
ForEach Medicaments()
SetGadgetItemData(#ListeMedicaments, ListIndex(Medicaments()), ListIndex(Medicaments()))
Next
EndSelect
EndProcedure
;Sauvegarde automatique des médicaments à la fermeture de l'application
Procedure SauvegardeMedicaments()
;Création d'un objet JSON
CreateJSON(#FichierJSON)
;Insertion de la liste chainée "Medicaments" dans l'objet JSON
InsertJSONList(JSONValue(#FichierJSON), Medicaments())
;Sauvegarde du fichier
SaveJSON(#FichierJSON, FichierJSON$, #PB_JSON_PrettyPrint)
EndProcedure