status_tag.sql 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. SELECT DISTINCT sm.kunde,
  2. sm.aufgabe,
  3. sm.datum,
  4. datediff(now(), sm.datum) as datum_diff,
  5. k.system,
  6. k.bundesland,
  7. sm.start,
  8. sm.ende,
  9. ka.start_soll,
  10. ifnull(case
  11. when dayofweek(sm.datum) = 2 then ka.ende_mo
  12. when dayofweek(sm.datum) = 3 then ka.ende_di
  13. when dayofweek(sm.datum) = 4 then ka.ende_mi
  14. when dayofweek(sm.datum) = 5 then ka.ende_do
  15. when dayofweek(sm.datum) = 6 then ka.ende_fr
  16. when dayofweek(sm.datum) = 7 then ka.ende_sa
  17. else ka.ende_so
  18. end, ka.ende_soll) as ende_soll,
  19. sm.anzahl,
  20. sm.bearbeitet,
  21. ifnull(sk.benutzer, '') as benutzer,
  22. case
  23. when sm.bearbeitet = '1' then 'bearbeitet'
  24. when ka.start_soll is NULL then 'manuell'
  25. when sm.anzahl != 0 then 'fehlerhaft'
  26. when concat(sm.datum, ' ', sm.ende) > date_add(concat(sm.datum, ' ', ka.ende_soll), INTERVAL 1 HOUR) then 'verspaetet'
  27. when sm.anzahl = 0 then 'fehlerfrei'
  28. else 'undefiniert'
  29. end as `status`
  30. FROM status_meldung sm
  31. INNER JOIN kunden k USING (kunde)
  32. LEFT JOIN kunden_aufgabe ka USING (kunde, aufgabe)
  33. LEFT JOIN status_kommentar sk ON sm.kommentar_id = sk.id
  34. LEFT JOIN status_kommentar as sk2 ON sm.datum = sk2.datum AND sm.kunde = sk2.kunde
  35. WHERE sm.datum <= now()
  36. AND datediff(now(), sm.datum) <= 7
  37. AND k.aktiv = 1
  38. AND (ka.aktiv IS NULL OR ka.aktiv = 1)
  39. UNION
  40. SELECT DISTINCT k.kunde,
  41. ka.aufgabe,
  42. a.datum,
  43. datediff(now(), a.datum) as datum_diff,
  44. k.system,
  45. a.bundesland,
  46. NULL as start,
  47. NULL as ende,
  48. ka.start_soll,
  49. ka.ende_soll,
  50. -1 as anzahl,
  51. 0 as bearbeitet,
  52. '' as benutzer,
  53. case
  54. when now() > date_add(concat(a.datum, ' ', ka.ende_soll), INTERVAL 1 HOUR) then 'fehlend'
  55. else 'anstehend'
  56. end as `status`
  57. FROM arbeitstage a
  58. INNER JOIN kunden k USING (bundesland)
  59. INNER JOIN kunden_aufgabe ka USING (kunde)
  60. LEFT JOIN status_meldung sm USING (datum, kunde, aufgabe)
  61. WHERE a.datum <= now()
  62. AND datediff(now(), a.datum) <= 7
  63. AND k.aktiv = 1
  64. AND ka.aktiv = 1
  65. AND sm.start IS NULL
  66. ORDER BY 1, 2, 4