FctContrôle.bas 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. Option Compare Database
  2. 'fonctions de contrôle du bon fonctionnement de l'appli
  3. Public Function connexion()
  4. 'connexion de l'utilisateur
  5. Dim val As Integer
  6. Dim login, sql, VERSION As String
  7. login = CurrentUser
  8. val = acces(login)
  9. VERSION = parametre("VERSION")
  10. 'maj des infos dans ztblUtilisateur, et dans tbl_paramutil si besoin
  11. If val > 0 Then
  12. 'utilisateur reconnu: on met à jour ses infos
  13. sql = "UPDATE ztblUtilisateurs SET ztblUtilisateurs.VersionAppli = '" & VERSION & "', ztblUtilisateurs.DerniereConnexion = '" & Date & "' " & _
  14. "WHERE (((ztblUtilisateurs.login)='" & login & "'));"
  15. connexion = 1
  16. Else
  17. 'nouvel utilisateur
  18. sql = "INSERT INTO ztblUtilisateurs ( login, acces, VersionAppli, DerniereConnexion ) " & _
  19. "SELECT '" & login & "' AS Expr1, 'consult' AS Expr2, '" & VERSION & "' AS Expr3, '" & Date & "' AS Expr4;"
  20. Call PremCo(login)
  21. connexion = 0
  22. End If
  23. DoCmd.SetWarnings False
  24. DoCmd.RunSQL sql
  25. DoCmd.SetWarnings True
  26. End Function
  27. Sub PremCo(ByVal login As String)
  28. Dim sql, impr As String
  29. DoCmd.SetWarnings False
  30. 'ajout des lignes dans paramètres utilisateur
  31. sql = "INSERT INTO tbl_ParamUtil ( Parametre, Description, [User] ) " & _
  32. "SELECT tbl_ParamUtil.Parametre, First(tbl_ParamUtil.Description) AS PremierDeDescription, '" & login & "' AS Expr1 " & _
  33. "From tbl_ParamUtil " & _
  34. "GROUP BY tbl_ParamUtil.Parametre;"
  35. DoCmd.RunSQL sql
  36. 'choix de l'imprimante
  37. impr = NomImpr(True)
  38. sql = "UPDATE tbl_ParamUtil SET tbl_ParamUtil.Valeur = '" & impr & "' " & _
  39. "WHERE (((tbl_ParamUtil.Parametre)='Imprimante') AND ((tbl_ParamUtil.User)='" & login & "'));"
  40. DoCmd.RunSQL sql
  41. DoCmd.SetWarnings True
  42. End Sub
  43. Public Function VerifEtat(Tbl As String, ByVal CodeAgent As String, ByVal moisRH As Integer, ByVal anneeRH As Integer, avertissement As Integer)
  44. Dim critere, msg As String
  45. 'vérification des données stockées davant la création d'un formulaire
  46. 'si données non validées, suppression, sinon, invalidation
  47. 'avertissement: si 0, pas de message d'vartissement avant execution des requêtes; si 1: avertissement
  48. critere = "[CodeAgent]='" & CodeAgent & "' AND [MoisRH]=" & moisRH & " AND [AnneeRH]=" & anneeRH
  49. VerifEtat = 0
  50. If Nz(DCount("[IDSuivi]", Tbl, critere), 0) >= 1 Then
  51. If DLookup("[Etat]", "tbl_SuiviRH", critere) = "Importé" Then
  52. 'msg = "Voulez vous mettre à jour les données déjà enregistrées dans la table [" & Tbl & "]?"
  53. Else
  54. If acces(CurrentUser) = 2 Then
  55. msg = "[ADMIN] Ce formulaire a déja été validé/édité. Voulez vous vraiment recréer les formulaires?"
  56. Else
  57. MsgBox "Ces données ont déja été validées. Veuillez contacter un administrateur."
  58. VerifEtat = -1
  59. Exit Function
  60. End If
  61. End If
  62. If Len(msg) > 0 Then
  63. If MsgBox(msg, vbYesNo, Tbl) = vbNo Then
  64. VerifEtat = -1
  65. Exit Function
  66. End If
  67. End If
  68. Call suppression(Tbl, CodeAgent, moisRH, anneeRH, avertissement)
  69. End If
  70. End Function
  71. Public Sub ControleMenu()
  72. Dim critere As String
  73. 'contrôle l'affichage du menu en fonction de l'état des données
  74. CodeAgent = forms![frm_menu].lst_agent.Column(0)
  75. moisRH = forms![frm_menu].lst_mois.Column(0)
  76. anneeRH = forms![frm_menu].lst_annee.Column(0)
  77. If anneeRH > 2000 And moisRH <= 12 And moisRH > 0 Then
  78. critere = "[Valide]=True AND [MoisRH]=" & moisRH & " AND [AnneeRH]=" & anneeRH
  79. If Not Nz(DCount("[IDSuivi]", "tbl_SuiviRH", critere), 0) >= 1 Then
  80. VerrouMenu (1)
  81. End If
  82. If CodeAgent <> "" Then
  83. critere = "[Valide]=True AND [CodeAgent]='" & CodeAgent & "' AND [MoisRH]=" & moisRH & " AND [AnneeRH]=" & anneeRH
  84. If Nz(DCount("[IDSuivi]", "tbl_SuiviRH", critere), 0) = 1 Then
  85. 'fichier importé
  86. If DLookup("[Etat]", "tbl_SuiviRH", critere) = "Importé" Or DLookup("[Etat]", "tbl_SuiviRH", critere) = "Invalidé" Then
  87. If DCount("[IDSuivi]", "tbl_FormHS", critere) > 0 And DCount("[IDSuivi]", "tbl_FormDep", critere) > 0 Then
  88. 'données importées et analysées
  89. 'vérif:
  90. If VerifCompteLignes(CodeAgent, moisRH, anneeRH) = 1 Then
  91. 'apparemment pas d'erreur d'analyse
  92. VerrouMenu (3)
  93. Else
  94. MsgBox "Attention: il est possible que des erreurs se soient produites lors de l'analyse des données. Il est conseillé de remettre à jour les données."
  95. VerrouMenu (3)
  96. End If
  97. Else
  98. 'données importées pas analysées
  99. VerrouMenu (2)
  100. End If
  101. ElseIf DLookup("[Etat]", "tbl_SuiviRH", critere) = "Validé" Then
  102. 'validé ou edité
  103. VerrouMenu (4)
  104. If DLookup("[Edite]", "tbl_SuiviRH", critere) = True Then
  105. forms![frm_menu].Edition.Caption = "Edité le " & DLookup("[DateEdition]", "tbl_SuiviRH", critere)
  106. forms![frm_menu].Edition.Visible = True
  107. End If
  108. End If
  109. ElseIf Nz(DCount("[IDSuivi]", "tbl_SuiviRH", critere), 0) > 1 Then
  110. 'erreur de suivi
  111. MsgBox "Attention: plusieurs lignes sont considérées comme valides dans la table de suivi pour cet agent et cette période."
  112. VerrouMenu (1)
  113. Else
  114. 'les données n'ont pas été importées
  115. VerrouMenu (1)
  116. End If
  117. Else
  118. If Nz(DCount("[IDSuivi]", "tbl_SuiviRH", critere), 0) >= 1 Then
  119. VerrouMenu (6)
  120. Else
  121. VerrouMenu (5)
  122. End If
  123. End If
  124. Else
  125. VerrouMenu (0)
  126. End If
  127. End Sub
  128. Public Function VerifCompteLignes(ByVal CodeAgent As String, ByVal moisRH As Integer, ByVal anneeRH As Integer)
  129. Dim critere As String
  130. critere = "[CodeAgent]='" & CodeAgent & "' AND [MoisRH]=" & moisRH & " AND [AnneeRH]=" & anneeRH
  131. If DCount("[DateRH]", "r_NbJoursImport", critere) = DCount("[IDSuivi]", "tbl_FormHS", critere) And DCount("[DateRH]", "r_NbJoursImport", critere) = DCount("[IDSuivi]", "tbl_FormDep", critere) Then
  132. VerifCompteLignes = 1 'ok
  133. Else
  134. VerifCompteLignes = 0 'erreur
  135. End If
  136. End Function
  137. Public Function PeriodeAgent(CodeAgent As String, ByVal moisRH As Integer, ByVal anneeRH As Integer)
  138. 'retourne le code de la période de validité correspondante à l'agent pour le mois et l'année indiqués
  139. 'renvoie 0 si code non trouvé
  140. 'Si le mois et/ou l'année entrés en paramètres sont à 0, on prend les valeurs du formulaire menu
  141. Dim rs As DAO.Recordset
  142. Dim critere As String
  143. Dim DateRH As Date
  144. If CurrentProject.AllForms("frm_Menu").IsLoaded Then
  145. If moisRH = 0 Then moisRH = CInt(forms![frm_menu].[mois])
  146. If anneeRH = 0 Then anneeRH = CInt(forms![frm_menu].[Annee])
  147. 'ElseIf CurrentProject.AllForms("frm_chargement").IsLoaded Then
  148. ' If moisRH = 0 Then moisRH = CInt(Forms![frm_chargement].[mois])
  149. ' If anneeRH = 0 Then anneeRH = CInt(Forms![frm_chargement].[Annee])
  150. Else
  151. PeriodeAgent = 0
  152. Exit Function
  153. End If
  154. critere = "[CodeAgent]='" & CodeAgent & "'"
  155. DateRH = CDate("15/" & moisRH & "/" & anneeRH)
  156. Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_PeriodeAgent WHERE " & critere & ";")
  157. 'Debug.Print "SELECT * FROM tbl_PeriodeAgent WHERE " & critere & ";"
  158. If Not rs.RecordCount > 0 Then
  159. PeriodeAgent = 0
  160. Exit Function
  161. End If
  162. rs.MoveFirst
  163. Do Until DateRH >= rs![DateInf] And (DateRH <= rs![DateSup] Or IsNull(rs![DateSup]))
  164. rs.MoveNext
  165. If rs.EOF = True Then
  166. PeriodeAgent = 0
  167. Exit Function
  168. End If
  169. Loop
  170. PeriodeAgent = CInt(rs![CodePeriode])
  171. End Function
  172. Public Function PeriodeBareme(NomBareme As String, ByVal moisRH As Integer, ByVal anneeRH As Integer)
  173. 'retourne le code de la période de validité correspondante au barême pour le mois et l'année indiqués
  174. 'renvoie 0 si code non trouvé
  175. 'si le mois et l'année entrés en paramètres sont égaux à 0, on prend ceux du menu
  176. Dim rs As DAO.Recordset
  177. Dim critere As String
  178. Dim DateRH As Date
  179. If CurrentProject.AllForms("frm_Menu").IsLoaded Then
  180. If moisRH = 0 Then moisRH = CInt(forms![frm_menu].[mois])
  181. If anneeRH = 0 Then anneeRH = CInt(forms![frm_menu].[Annee])
  182. ElseIf CurrentProject.AllForms("frm_chargement").IsLoaded Then
  183. If moisRH = 0 Then moisRH = CInt(forms![frm_chargement].[mois])
  184. If anneeRH = 0 Then anneeRH = CInt(forms![frm_chargement].[Annee])
  185. Else
  186. PeriodeBareme = 0
  187. Exit Function
  188. End If
  189. 'MsgBox "periode bareme: " & moisRH & "/" & anneeRH
  190. critere = "[NomBareme]='" & NomBareme & "'"
  191. DateRH = CDate("15/" & moisRH & "/" & anneeRH)
  192. Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_PeriodeBareme WHERE " & critere & ";")
  193. If Not rs.RecordCount > 0 Then
  194. PeriodeBareme = 0
  195. Exit Function
  196. End If
  197. rs.MoveFirst
  198. Do Until DateRH >= rs![DateInf] And (DateRH <= rs![DateSup] Or IsNull(rs![DateSup]))
  199. rs.MoveNext
  200. If rs.EOF = True Then
  201. PeriodeBareme = 0
  202. Exit Function
  203. End If
  204. Loop
  205. PeriodeBareme = rs![CodePeriode]
  206. End Function
  207. Public Function CtrlValidite(ByVal table As String, ByVal Champ1_valeur As String, ByVal NvelleDateInf As Date)
  208. 'cette fonction vérifie que la nouvelle période n'entre pas en conflit avec une autre période
  209. 'elle est utilisée au sein de la fonction NvellePeriode
  210. Dim rs As DAO.Recordset
  211. Dim sql, champ1_nom As String
  212. Set rs = CurrentDb.OpenRecordset(table)
  213. champ1_nom = rs.Fields(0).Name
  214. Set rs = Nothing
  215. sql = "SELECT * FROM " & table & " WHERE [" & table & "].[" & champ1_nom & "]='" & Champ1_valeur & "' ORDER BY [DateInf];"
  216. Set rs = CurrentDb.OpenRecordset(sql)
  217. 'si pas d'autres périodes
  218. If rs.RecordCount = 0 Then Exit Function
  219. rs.MoveFirst
  220. Do Until rs.EOF = True
  221. If Not IsNull(rs![DateSup]) = True Then
  222. If NvelleDateInf <= rs![DateSup] And NvelleDateInf >= rs![DateInf] Then
  223. ' la nouvelle date est comprise dans une période déja existante, la fonction renvoie le code de cette période
  224. CtrlValidite = rs![CodePeriode]
  225. Exit Function
  226. End If
  227. End If
  228. rs.MoveNext
  229. Loop
  230. 'la nouvelle date n'est pas comprise dans une période existante, mais elle peut être antérieure
  231. ' à une période existante, auquelle cas la date de fin devra être automatiquement remplie
  232. rs.MoveFirst
  233. Do Until rs.EOF = True
  234. If Not IsNull(rs![DateSup]) = True Then
  235. If NvelleDateInf <= rs![DateInf] Then
  236. 'la fonction renvoie le code de cette période en négatif
  237. CtrlValidite = -1 * rs![CodePeriode]
  238. Exit Function
  239. End If
  240. End If
  241. rs.MoveNext
  242. Loop
  243. CtrlValidite = 0
  244. End Function
  245. Function CtrlBareme(NomBareme As String, PeriodeValidite As Integer)
  246. Dim rs As DAO.Recordset
  247. Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_Periodebareme WHERE [NomBareme]='" & NomBareme & "' AND [PeriodeValidite]=" & PeriodeValidite)
  248. End Function
  249. Public Function VerifPeriodeAgent(CodeAgent As String)
  250. 'cette fonction vérifie la cohérence des périodes affectées aux données de l'agent
  251. 'elle renvoie une chaine de caractères constituée du code de l'agent et de chaque date manquante dans la table des périodes
  252. Dim rs As DAO.Recordset
  253. Dim sql As String
  254. Dim pbm As String
  255. Dim dat As Date
  256. Dim i, k As Integer
  257. sql = "SELECT tbl_PeriodeAgent.CodeAgent, tbl_PeriodeAgent.DateInf, tbl_PeriodeAgent.DateSup, tbl_PeriodeAgent.CodePeriode " & _
  258. "FROM tbl_PeriodeAgent " & _
  259. "WHERE (((tbl_PeriodeAgent.CodeAgent)='" & CodeAgent & "')) " & _
  260. "ORDER BY tbl_PeriodeAgent.DateInf;"
  261. Set rs = CurrentDb.OpenRecordset(sql)
  262. If Not rs.RecordCount > 0 Then
  263. VerifPeriodeAgent = CodeAgent & ";" & "Tout"
  264. Exit Function
  265. End If
  266. dat = #1/1/2013# 'attention: format mois/jour/annee
  267. pbm = ""
  268. Do Until dat >= Date
  269. Ok = 0
  270. rs.MoveFirst
  271. Do Until rs.EOF = True
  272. If dat <= Nz(rs![DateSup], Date) And dat >= rs![DateInf] Then Ok = 1
  273. rs.MoveNext
  274. Loop
  275. If Ok = 0 Then
  276. k = 0
  277. For i = 0 To UBound(Split(pbm, ";"))
  278. If Split(pbm, ";")(i) = Month(dat) & "/" & Year(dat) Then k = 1
  279. Next i
  280. If k = 0 Then pbm = pbm & Month(dat) & "/" & Year(dat) & ";" 'on évite les doublons
  281. End If
  282. dat = dat + 1
  283. Loop
  284. If pbm <> "" Then
  285. pbm = CodeAgent & ";" & pbm
  286. pbm = Left(pbm, Len(pbm) - 1)
  287. End If
  288. rs.Close
  289. Set rs = Nothing
  290. VerifPeriodeAgent = pbm
  291. End Function
  292. Public Function VerifPeriodeBareme(NomBareme As String)
  293. 'cette fonction vérifie la cohérence des périodes affectées aux baremes
  294. 'elle renvoie une chaine de caractères constituée du nom du bareme et de chaque date manquante dans la table des périodes
  295. Dim rs As DAO.Recordset
  296. Dim sql As String
  297. Dim pbm As String
  298. Dim dat As Date
  299. Dim i, k As Integer
  300. sql = "SELECT tbl_PeriodeBareme.NomBareme, tbl_PeriodeBareme.DateInf, tbl_PeriodeBareme.DateSup " & _
  301. "FROM tbl_PeriodeBareme " & _
  302. "WHERE (((tbl_PeriodeBareme.NomBareme)='" & NomBareme & "')) " & _
  303. "ORDER BY tbl_PeriodeBareme.DateInf;"
  304. Set rs = CurrentDb.OpenRecordset(sql)
  305. If Not rs.RecordCount > 0 Then
  306. VerifPeriodeBareme = NomBareme & ";" & "Tout"
  307. Exit Function
  308. End If
  309. dat = #1/1/2013# 'attention: format mois/jour/annee
  310. pbm = ""
  311. Do Until dat >= Date
  312. Ok = 0
  313. rs.MoveFirst
  314. Do Until rs.EOF = True
  315. If dat <= Nz(rs![DateSup], Date) And dat >= rs![DateInf] Then Ok = 1
  316. rs.MoveNext
  317. Loop
  318. If Ok = 0 Then
  319. k = 0
  320. For i = 0 To UBound(Split(pbm, ";"))
  321. If Split(pbm, ";")(i) = Month(dat) & "/" & Year(dat) Then k = 1
  322. Next i
  323. If k = 0 Then pbm = pbm & Month(dat) & "/" & Year(dat) & ";" 'on évite les doublons
  324. End If
  325. dat = dat + 1
  326. Loop
  327. If pbm <> "" Then
  328. pbm = NomBareme & ";" & pbm
  329. pbm = Left(pbm, Len(pbm) - 1)
  330. End If
  331. rs.Close
  332. Set rs = Nothing
  333. VerifPeriodeBareme = pbm
  334. End Function
  335. Public Function VerificationComplete()
  336. 'lance les différentes fonctions de vérification et remplit éventuellement la table tmp_problemes
  337. Dim rs1, rs_pbm As DAO.Recordset
  338. Dim tmp, ErreurPeriode, ErreurDonnees As String
  339. Dim i As Integer
  340. 'vidage de la table tmp_problemes
  341. DoCmd.SetWarnings False
  342. DoCmd.RunSQL "DELETE * FROM tmp_problemes;"
  343. DoCmd.SetWarnings True
  344. ErreurPeriode = ""
  345. ErreurDonnees = ""
  346. Set rs_pbm = CurrentDb.OpenRecordset("tmp_problemes")
  347. 'Verification des périodes:
  348. Set rs1 = CurrentDb.OpenRecordset("SELECT tbl_Agents.CodeAgent FROM tbl_Agents GROUP BY tbl_Agents.CodeAgent;")
  349. rs1.MoveFirst
  350. Do Until rs1.EOF = True
  351. tmp = VerifPeriodeAgent(rs1![CodeAgent])
  352. If tmp <> "" Then
  353. For i = 1 To UBound(Split(tmp, ";"))
  354. rs_pbm.AddNew
  355. rs_pbm![ObjetConcerne] = Split(tmp, ";")(0)
  356. rs_pbm![erreur] = "Date(s) Manquantes(s) pour la gestion des périodes des données agent"
  357. rs_pbm![Detail] = Split(tmp, ";")(i)
  358. rs_pbm.Update
  359. Next i
  360. ErreurPeriode = "Erreurs détectées dans le paramétrage des périodes (cf. tmp_problemes)"
  361. End If
  362. rs1.MoveNext
  363. Loop
  364. rs1.Close
  365. Set rs1 = CurrentDb.OpenRecordset("SELECT tbl_baremes.NomBareme FROM tbl_baremes GROUP BY tbl_baremes.NomBareme;")
  366. rs1.MoveFirst
  367. Do Until rs1.EOF = True
  368. tmp = VerifPeriodeBareme(rs1![NomBareme])
  369. If tmp <> "" Then
  370. For i = 1 To UBound(Split(tmp, ";"))
  371. rs_pbm.AddNew
  372. rs_pbm![ObjetConcerne] = Split(tmp, ";")(0)
  373. rs_pbm![erreur] = "Date(s) Manquantes(s) pour la gestion des périodes du bareme"
  374. rs_pbm![Detail] = Split(tmp, ";")(i)
  375. rs_pbm.Update
  376. Next i
  377. ErreurPeriode = "Erreurs détectées dans le paramétrage des périodes (cf. tmp_problemes)"
  378. End If
  379. rs1.MoveNext
  380. Loop
  381. rs1.Close
  382. 'vérification de la cohérence des données des tables
  383. tmp = VerifTables()
  384. If tmp <> "" Then
  385. For i = 1 To UBound(Split(tmp, ";"))
  386. rs_pbm.AddNew
  387. rs_pbm![ObjetConcerne] = Split(tmp, ";")(0)
  388. rs_pbm![erreur] = "Données incohérentes/manquantes"
  389. rs_pbm![Detail] = Split(tmp, ";")(i)
  390. rs_pbm.Update
  391. Next i
  392. ErreurDonnees = "Erreurs détectées dans la cohérence des données des tables (cf. tmp_problemes)"
  393. End If
  394. If rs_pbm.RecordCount > 0 Then
  395. End If
  396. If Len(ErreurPeriode) > 0 Or Len(ErreurDonnees) > 0 Then
  397. VerificationComplete = ErreurPeriode & vbNewLine & ErreurDonnees
  398. Else
  399. VerificationComplete = ""
  400. End If
  401. End Function
  402. Public Function VerifTables()
  403. 'vérification de la cohérence des données des tables
  404. Dim pbm As String
  405. Dim rs As DAO.Recordset
  406. Dim i As Integer
  407. pbm = ""
  408. 'tbl_agents
  409. Set rs = CurrentDb.OpenRecordset("SELECT tbl_Agents.CodeAgent, tbl_Agents.TypeVehicule, tbl_Agents.DateAutorisationVP, tbl_Agents.PuissanceFiscVP, tbl_Agents.NbKmAutorisesVP " & _
  410. "FROM tbl_Agents " & _
  411. "WHERE ((tbl_Agents.TypeVehicule)<>'4') AND ((((tbl_Agents.TypeVehicule) Is Not Null)) OR (((tbl_Agents.DateAutorisationVP) Is Not Null)) OR (((tbl_Agents.PuissanceFiscVP) Is Not Null)) OR (((tbl_Agents.NbKmAutorisesVP) Is Not Null)));")
  412. rs.MoveFirst
  413. Do Until rs.EOF = True
  414. 'verif des données véhicules
  415. For i = 1 To rs.Fields.Count - 1
  416. If IsNull(rs.Fields(i).Value) Then pbm = pbm & ";Agent " & rs![CodeAgent] & ": champ manquant [" & rs.Fields(i).Name & "]"
  417. Next
  418. rs.MoveNext
  419. Loop
  420. If Left(pbm, 1) = ";" Then pbm = Right(pbm, Len(pbm) - 1)
  421. If pbm <> "" Then pbm = "tbl_Agents;" & pbm
  422. VerifTables = pbm
  423. End Function
  424. Public Function VerifRepas(CodeAgent As String, DateRH As Date)
  425. 'vérification des données à l'import: un agent n'a le droit qu'à un repas par jour
  426. '0 -> ok ; -1 -> non
  427. VerifRepas = -1
  428. If Nz(DSum("repas", "tbl_ImportRH", "[CodeAgent]='" & CodeAgent & "' and [DateRH]=#" & Format(DateRH, "mm-dd-yyyy") & "#"), 0) > 1 Then VerifRepas = 0
  429. End Function
  430. Public Function VerifDroit(ByVal IdImportRH As Long)
  431. 'vérification des données à l'import: un agent n'a le droit à des frais que s'il s'est rendu ailleurs que sur sa residence admin
  432. '1 -> a le droit ; 0 -> pas le droit, mais pas de données ; -1 pas le droit et des données
  433. Dim ResAdm As String
  434. Dim rs As DAO.Recordset
  435. Dim sortie As Integer
  436. 'attention aux périodes de validité des données
  437. ResAdm = Nz(DLookup("ResidenceAdmin", "tbl_Agents", "[CodeAgent]='" & CodeAgent & "' AND [PeriodeValidite]=" & PeriodeAgent(CodeAgent, Month(DateRH), Year(DateRH))), "")
  438. VerifDroit = 0
  439. If Len(ResAdm) = 0 Then Exit Function
  440. sortie = 0
  441. Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_ImportRH WHERE [CodeAgent]='" & CodeAgent & "' AND [DateRH]=#" & Format(DateRH, "mm-dd-yyyy") & "#;")
  442. 'Debug.Print "SELECT * FROM tbl_ImportRH WHERE [CodeAgent]='" & CodeAgent & "' AND [DateRH]=#" & Format(DateRH, "mm-dd-yyyy") & "#;"
  443. If Not rs.RecordCount > 0 Then Exit Function
  444. rs.MoveFirst
  445. Do Until rs.EOF = True
  446. If Not rs![Localisation] Like ResAdm Then sortie = sortie + 1
  447. rs.MoveNext
  448. Loop
  449. If sortie = 0 Then
  450. VerifDroit = 0
  451. rs.MoveFirst
  452. Do Until rs.EOF = True
  453. If rs![Repas] > 0 Or rs![DistanceTranche1] > 0 Or rs![DistanceTranche2] > 0 Then VerifDroit = 0
  454. rs.MoveNext
  455. Loop
  456. End If
  457. End Function
  458. Public Function VerifVP(CodeAgent As String, DateRH As Date)
  459. 'On Error GoTo fin
  460. Dim sql As String
  461. VerifVP = -1
  462. sql = "SELECT tbl_ImportRH.IdImportRH, tbl_ImportRH.CodeAgent, tbl_ImportRH.DateRH, tbl_ImportRH.VehiculePersoTranche1, tbl_ImportRH.VehiculePersoTranche2, " & _
  463. "tbl_Agents.TypeVehicule " & _
  464. "FROM tbl_ImportRH INNER JOIN tbl_Agents ON tbl_ImportRH.CodeAgent = tbl_Agents.CodeAgent " & _
  465. "WHERE (tbl_ImportRH.CodeAgent='" & CodeAgent & "' AND tbl_ImportRH.DateRH=#" & Format(DateRH, "mm-dd-yyyy") & "#) AND " & _
  466. "(tbl_ImportRH.VehiculePersoTranche1='True' OR tbl_ImportRH.VehiculePersoTranche2='True') AND tbl_Agents.TypeVehicule='4';"
  467. 'Debug.Print sql
  468. Set rs = CurrentDb.OpenRecordset(sql)
  469. If rs.RecordCount > 0 Then VerifVP = 0
  470. fin:
  471. On Error Resume Next
  472. rs.Close
  473. End Function
  474. Public Function VerifImport(CodeAgent As String, moisRH As Integer, anneeRH As Integer)
  475. On Error GoTo err
  476. 'procède à l'examen des données brutes lors de l'import
  477. Dim rs As DAO.Recordset
  478. VerifImport = ""
  479. If Len(CodeAgent) = 0 Or Not moisRH > 0 Or Not moisRH < 13 Or Not anneeRH > 2000 Then Exit Function
  480. Set rs = CurrentDb.OpenRecordset("SELECT * FROM r_DonneesImport WHERE [CodeAgent]='" & CodeAgent & "' AND [MoisRH]=" & moisRH & " AND [AnneeRH]=" & anneeRH & ";")
  481. If Not rs.RecordCount > 0 Then Exit Function
  482. rs.MoveFirst
  483. Do Until rs.EOF = True
  484. If rs![FraisValide] = False Then
  485. VerifImport = " -> DONNEES A VERIFIER"
  486. Exit Function
  487. End If
  488. rs.MoveNext
  489. Loop
  490. rs.Close
  491. Set rs = CurrentDb.OpenRecordset("SELECT * FROM r_DonneesImport2 WHERE [CodeAgent]='" & CodeAgent & "' AND [MoisRH]=" & moisRH & " AND [AnneeRH]=" & anneeRH & ";")
  492. If Not rs.RecordCount > 0 Then Exit Function
  493. rs.MoveFirst
  494. Do Until rs.EOF = True
  495. 'If VerifDroit(CodeAgent, rs![DateRH]) = -1 Or VerifRepas(CodeAgent, rs![DateRH]) = -1 Or VerifVP(CodeAgent, rs![DateRH]) = -1 Then
  496. If VerifRepas(CodeAgent, rs![DateRH]) = 0 Or VerifVP(CodeAgent, rs![DateRH]) = 0 Then
  497. VerifImport = " -> DONNEES A VERIFIER"
  498. Exit Function
  499. End If
  500. rs.MoveNext
  501. Loop
  502. rs.Close
  503. Exit Function
  504. err:
  505. VerifImport = "Impossible de vérifier les données"
  506. End Function
  507. Public Function VerifDonneesExport(ByVal CodeAgent As String, ByVal moisRH As Integer, ByVal anneeRH As Integer) As Boolean
  508. 'procède à l'examen des données lors de l'export vers PERIPLE
  509. On Error GoTo fin
  510. VerifDonneesExport = True
  511. If Len(VerifImport(CodeAgent, moisRH, anneeRH)) > 0 Then VerifDonneesExport = False
  512. fin:
  513. On Error Resume Next
  514. Exit Function
  515. err:
  516. MsgBox "Des erreurs se sont produites lors de la vérification des données, veuillez contacter un administrateur"
  517. VerifDonneesExport = False
  518. GoTo fin
  519. End Function