pour ceux que ça intéresse, car n'ayant pas de projets de développement en ce moment, j'ai fait ce petit programme qui calcule les dates de paiement de la retraite, mais pas les sommes versées.
Ce programme est largement améliorable.
Code : Tout sélectionner
;Date de paiement de la retraite
;par Micoute 7 juin 2019
;remis à jour le 17 juin 2019
EnableExplicit
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration Gadgets
#Txt_Enonce
#Str_Annee
#Lst_Paiements
#Btn_Quitter
EndEnumeration
Enumeration Polices
#Police
EndEnumeration
Structure sMois
Nom.s
Numero.i
EndStructure
Structure sJour
Nom.s
Numero.i
EndStructure
Structure Retraite
NomMois.s
NomJour.s
J.i
M.i
A.i
EndStructure
LoadFont(#Police, "Verdana", 12)
SetGadgetFont(#PB_Default, FontID(#Police))
Global Evenement, i, Jour, Mois, Annee = Year(Date()), Retraite.Retraite
Global Dim TabNomMois.sMois(12), Dim TabNomJours.sJour(6)
For i = 1 To 12
TabNomMois(i)\Nom=StringField("janvier février mars avril mai juin juillet août septembre octobre novembre décembre",i," ")
TabNomMois(i)\Numero=i
Next i
For i = 0 To 6
TabNomJours(i)\Nom=StringField("dimanche lundi mardi mercredi jeudi vendredi samedi",i+1," ")
TabNomJours(i)\Numero=i
Next i
Declare.s Paiement_Retraite(Annee, Mois)
Declare Programme_principal()
Declare Quitter()
Programme_principal()
Procedure Programme_principal()
If OpenWindow(#Fenetre_principale, 0, 0, 380, 380, "Retraite", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(#Txt_Enonce, 20, 20, 360, 20, "jours de paiement de la retraite en " + Annee)
ListIconGadget(#Lst_Paiements, 30, 60, 330, 270, "Date", 320, #LVS_NOCOLUMNHEADER)
ButtonGadget(#Btn_Quitter, 140, 350, 100, 20, "Quitter")
i = 1
While i <= 11
Paiement_Retraite(Annee, i)
i + 1
AddGadgetItem(#Lst_Paiements, i, Retraite\NomMois + " : " + Retraite\NomJour + " " + Retraite\J + " " +TabNomMois(i)\Nom + " " + Retraite\A)
Wend
Paiement_Retraite(Annee + 1, 12)
AddGadgetItem(#Lst_Paiements, i, "décembre" + " : " + Retraite\NomJour + " " + Retraite\J + " " +TabNomMois(1)\Nom + " " + Retraite\A)
BindGadgetEvent(#Btn_Quitter, @Quitter())
EndIf
EndProcedure
Procedure Quitter()
Select EventType()
Case #PB_EventType_LeftClick
CloseWindow(#Fenetre_principale)
End
EndSelect
EndProcedure
Repeat
Evenement = WaitWindowEvent()
Select Evenement
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn_Quitter
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Procedure.s Paiement_Retraite(Annee, Mois)
Protected Jour = 9, JourSem = 1 ;lundi
Protected DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
;Le paiement est effectué le jour ouvré le plus proche du 9, mais jamais après
If DayOfWeek(DatePaiement) = 0 ;Si c'est un dimanche, on enlève 2 jours
JourSem = 5
Jour = 7
DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
ElseIf DayOfWeek(DatePaiement) = 6 ;Si c'est un samedi, on enlève 1 jour
JourSem = 5
Jour = 8
If mois = 5 ;Si c'est le 8 mai, on soustrait 1 jour
jour = 7
EndIf
DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
EndIf
Retraite\A = Annee
Retraite\J = Day(Date(Annee, Mois, Jour, 0, 0, 0))
Retraite\NomJour = TabNomJours(DayOfWeek(DatePaiement) + 1)\Nom
Retraite\M = Mois
Retraite\NomMois = TabNomMois(Mois)\Nom
EndProcedure