db.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <?php
  2. header('Access-Control-Allow-Origin: *');
  3. header('Access-Control-Allow-Methods: GET, POST, PUT');
  4. header('Access-Control-Allow-Headers: accept, content-type');
  5. header('Cache-Control: no-cache, must-revalidate');
  6. header('Content-type: application/json');
  7. $dbh = new PDO("mysql:host=localhost;dbname=tasks", "root", "gc01mysql");
  8. $dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
  9. $data = json_decode(file_get_contents('php://input'), true);
  10. $result = array();
  11. switch ($_REQUEST['a']) {
  12. case 'fehlerbericht':
  13. $kunde = $_REQUEST['kunde'];
  14. $datum = $_REQUEST['datum'];
  15. $start = ($_REQUEST['start'] == "null") ? '00:00:00' : $_REQUEST['start'];
  16. $q = $dbh->query("SELECT sm.*, k.whitelist FROM status_meldung sm
  17. INNER JOIN kunden k USING (kunde)
  18. WHERE sm.datum = '{$datum}' AND sm.kunde = '{$kunde}' AND sm.start = '{$start}' LIMIT 1");
  19. $result = $q->fetch(PDO::FETCH_ASSOC);
  20. if ($result) {
  21. $result['fehlerbericht'] = str_replace("\r\`", "`", str_replace("\r\"", "\"", str_replace("\r\n", "", $result['fehlerbericht'])));
  22. $fehlerbericht = json_decode($result['fehlerbericht'], true);
  23. if ($fehlerbericht != "") {
  24. $result['fehlerbericht'] = $fehlerbericht;
  25. }
  26. $result['whitelist'] = (isset($result['whitelist'])) ? json_decode(stripslashes($result['whitelist']), true) : null;
  27. } else {
  28. $result = array();
  29. }
  30. if (isset($result['kommentar_id']) && $result['kommentar_id'] > 0) {
  31. $q = $dbh->query("SELECT sk.* FROM status_kommentar sk
  32. WHERE sk.id = '{$result['kommentar_id']}' ");
  33. $comment = $q->fetch(PDO::FETCH_ASSOC);
  34. } else {
  35. $q = $dbh->query("SELECT sk.* FROM status_kommentar sk
  36. WHERE sk.datum = '{$datum}' AND sk.kunde = '{$kunde}' AND sk.start = '{$start}'
  37. ORDER BY cdate DESC LIMIT 1");
  38. $comment = $q->fetch(PDO::FETCH_ASSOC);
  39. }
  40. $result['kommentar'] = ($comment) ? $comment : array();
  41. break;
  42. case 'zeit':
  43. $q = $dbh->exec("UPDATE kunden SET start_soll = '{$_REQUEST['start_soll']}', ende_soll = '{$_REQUEST['ende_soll']}' WHERE kunde = '{$_REQUEST['kunde']}' ");
  44. $error = $dbh->errorInfo();
  45. if ($error[0] != '00000') {
  46. $result = $error;
  47. } else {
  48. $result = $_REQUEST;
  49. }
  50. break;
  51. case 'whitelist':
  52. $q = $dbh->query("SELECT * FROM kunden WHERE kunde = '{$_REQUEST['kunde']}' ");
  53. $result = $q->fetch(PDO::FETCH_ASSOC);
  54. $whitelist = json_decode(stripslashes($result['whitelist']), true);
  55. if (!is_array($whitelist)) {
  56. $whitelist = array();
  57. }
  58. if ($_REQUEST['aktiv'] == "J") {
  59. if (!isset($whitelist[$_REQUEST['typ']])) {
  60. $whitelist[$_REQUEST['typ']] = array($_REQUEST['wert']);
  61. } else if (in_array($_REQUEST['wert'], $whitelist[$_REQUEST['typ']])) {
  62. $result = array('whitelist' => $whitelist);
  63. break;
  64. } else {
  65. $whitelist[$_REQUEST['typ']][] = $_REQUEST['wert'];
  66. }
  67. } else {
  68. if (!isset($whitelist[$_REQUEST['typ']]) || !in_array($_REQUEST['wert'], $whitelist[$_REQUEST['typ']])) break;
  69. $whitelist[$_REQUEST['typ']] = array_diff($whitelist[$_REQUEST['typ']], array($_REQUEST['wert']));
  70. }
  71. $q = $dbh->exec("UPDATE kunden SET whitelist = '" . addslashes(json_encode($whitelist)) . "' WHERE kunde = '{$_REQUEST['kunde']}' ");
  72. $error = $dbh->errorInfo();
  73. if ($error[0] != '00000') {
  74. $result = $error;
  75. } else {
  76. $result = array('whitelist' => $whitelist);
  77. }
  78. break;
  79. case 'changelog':
  80. $kunde = "Jansen";
  81. $q = $dbh->query("SELECT * FROM kunden_gcstarter WHERE kunde = '{$kunde}' ORDER BY datum DESC LIMIT 1");
  82. $result = $q->fetch(PDO::FETCH_ASSOC);
  83. $r = json_decode(utf8_decode($result['gcstarter']), true);
  84. //echo json_last_error();
  85. $byDate = (isset($r['Kontenzuordnung GAPS.csv.log'])) ? $r['Kontenzuordnung GAPS.csv.log'] : array();
  86. $states = array("neu", "akt", "entf");
  87. $list = array();
  88. foreach($byDate as $entry) {
  89. foreach ($states as $state) {
  90. foreach($entry[$state] as $account) {
  91. $account['Datum'] = $entry['datum'];
  92. $account['Status'] = $state;
  93. $list[] = $account;
  94. }
  95. }
  96. }
  97. $q = $dbh->query("SELECT * FROM kunden_gcstruct WHERE kunde = '{$kunde}' ORDER BY datum DESC LIMIT 1");
  98. $result = $q->fetch(PDO::FETCH_ASSOC);
  99. $struct = json_decode($result['gcstruct'], true);
  100. $result = array('Historie' => $byDate, 'Liste' => $list, 'GCStruct' => $struct);
  101. break;
  102. case 'kunden':
  103. if ($data != null && count($data) > 0) {
  104. foreach ($data as $kunde) {
  105. if (isset($kunde['kunde'])) {
  106. $q = $dbh->exec("UPDATE kunden SET system = '{$kunde['system']}', start_soll = '{$kunde['start_soll']}', ende_soll = '{$kunde['ende_soll']}',
  107. erster_status = '{$kunde['erster_status']}', aktiv = '{$kunde['aktiv']}', woche = '{$kunde['woche']}',
  108. bundesland = '{$kunde['bundesland']}', plz = '{$kunde['plz']}', ort = '{$kunde['ort']}' WHERE kunde = '{$kunde['kunde']}' ");
  109. }
  110. }
  111. }
  112. $q = $dbh->query("SELECT * FROM kunden");
  113. $result = $q->fetchAll(PDO::FETCH_ASSOC);
  114. foreach ($result as $i => $r) {
  115. $result[$i]['whitelist'] = json_decode(stripslashes($r['whitelist']), true);
  116. $result[$i]['ort'] = utf8_decode($r['ort']);
  117. }
  118. break;
  119. case 'tickets':
  120. if ($data != null && count($data) > 0) {
  121. if ($data['id'] == '') {
  122. $q = $dbh->exec("INSERT INTO tickets (datum, benutzer, kunde, kontakt, beschreibung, termin, dauer, status, prioritaet, fortschritt, kategorie, programm, kommentar)
  123. VALUES ('{$data['datum']}', '{$data['benutzer']}', '{$data['kunde']}', '{$data['kontakt']}', '{$data['beschreibung']}', '{$data['termin']}', '{$data['dauer']}',
  124. '{$data['status']}', '{$data['prioritaet']}', '{$data['fortschritt']}', '{$data['kategorie']}', '{$data['programm']}', '{$data['kommentar']}')");
  125. } else {
  126. $q = $dbh->exec("UPDATE tickets SET datum = '{$data['datum']}', benutzer = '{$data['benutzer']}', kunde = '{$data['kunde']}', kontakt = '{$data['kontakt']}',
  127. beschreibung = '{$data['beschreibung']}', termin = '{$data['termin']}', dauer = '{$data['dauer']}', status = '{$data['status']}',
  128. prioritaet = '{$data['prioritaet']}', fortschritt = '{$data['fortschritt']}', kategorie = '{$data['kategorie']}', programm = '{$data['programm']}',
  129. kommentar = '{$data['kommentar']}'
  130. WHERE id = '{$data['id']}' ");
  131. }
  132. }
  133. $q = $dbh->query("SELECT * FROM tickets");
  134. $result = $q->fetchAll(PDO::FETCH_ASSOC);
  135. //print_r($result);
  136. break;
  137. case 'config':
  138. $q = $dbh->query("SELECT kunde, datum FROM kunden_config ORDER BY 1, 2 DESC");
  139. $result = array('options' => array());
  140. while ($row = $q->fetch(PDO::FETCH_ASSOC)) {
  141. $result['options'][$row['kunde']][] = $row['datum'];
  142. }
  143. if (isset($_REQUEST['kunde']) && $_REQUEST['kunde'] != 'undefined') {
  144. if (preg_match('/\d{4}-\d{2}-\d{2}/', $_REQUEST['datum'])) {
  145. $q = $dbh->query("SELECT * FROM kunden_config WHERE kunde = '{$_REQUEST['kunde']}' AND datum = '{$_REQUEST['datum']}'");
  146. } else {
  147. $q = $dbh->query("SELECT * FROM kunden_config WHERE kunde = '{$_REQUEST['kunde']}' ORDER BY datum DESC LIMIT 1");
  148. }
  149. if ($row = $q->fetch(PDO::FETCH_ASSOC)) {
  150. $row['info'] = json_decode($row['info'], true);
  151. $result['current'] = $row;
  152. }
  153. }
  154. break;
  155. case 'benutzer':
  156. $q = $dbh->query("SELECT * FROM benutzer");
  157. $result = $q->fetchAll(PDO::FETCH_ASSOC);
  158. break;
  159. case 'kommentar':
  160. $id = (isset($_REQUEST['id']) && $_REQUEST['id'] != "undefined") ? $_REQUEST['id'] : '';
  161. if ($data != null && count($data) > 0) {
  162. if ($id == '') {
  163. $now = date('Y-m-d H:i:s');
  164. $q = $dbh->exec("INSERT INTO status_kommentar (kunde, datum, start, benutzer, fehler, status, kommentar, cdate)
  165. VALUES ('{$data['kunde']}','{$data['datum']}','{$data['start']}','{$data['benutzer']}','{$data['fehler']}','{$data['status']}','{$data['kommentar']}','{$now}')");
  166. $id = $dbh->lastInsertId();
  167. if ($data['status'] == '7' && $data['benutzer2'] != '') {
  168. $q = $dbh->exec("INSERT INTO status_kommentar (kunde, datum, start, benutzer, fehler, status, kommentar, cdate)
  169. VALUES ('{$data['kunde']}','{$data['datum']}','{$data['start']}','{$data['benutzer2']}','{$data['fehler']}','2','','{$now}')");
  170. $id = $dbh->lastInsertId();
  171. }
  172. $q = $dbh->exec("UPDATE status_meldung SET bearbeitet = '1', kommentar_id = '{$id}'
  173. WHERE kunde = '{$data['kunde']}' AND datum = '{$data['datum']}' AND start = '{$data['start']}' ");
  174. } else {
  175. $q = $dbh->exec("UPDATE status_kommentar SET
  176. benutzer = '{$data['benutzer']}',
  177. fehler = '{$data['fehler']}',
  178. status = '{$data['status']}',
  179. kommentar = '{$data['kommentar']}'
  180. WHERE id = '{$id}' ");
  181. }
  182. }
  183. $q = $dbh->query("SELECT * FROM status_kommentar
  184. WHERE datum > date_add(now(), INTERVAL -32 DAY)
  185. ORDER BY datum DESC, mdate DESC");
  186. $result = $q->fetchAll(PDO::FETCH_ASSOC);
  187. break;
  188. default:
  189. case 'liste':
  190. $datum = (!isset($_REQUEST['datum']) || $_REQUEST['datum'] == '') ? "a.datum > date_add(now(), INTERVAL -32 DAY)" : "a.datum >= '{$_REQUEST['datum']}' ";
  191. $datum_bis = (!isset($_REQUEST['datum_bis']) || $_REQUEST['datum_bis'] == '') ? "a.datum > date_add(now(), INTERVAL -32 DAY)" : "a.datum <= '{$_REQUEST['datum_bis']}' ";
  192. $kunde = (!isset($_REQUEST['kunde']) || $_REQUEST['kunde'] == '') ? "1" : "k.kunde LIKE '%{$_REQUEST['kunde']}%'";
  193. $q = $dbh->query("SELECT DISTINCT a.datum, k.kunde, sm.aufgabe, k.system, a.bundesland, a.feiertag, k.start_soll, k.ende_soll, sm.start, sm.ende, sm.anzahl, if(sk2.id IS NULL, sm.bearbeitet, '1') as bearbeitet,
  194. case
  195. when woche = 'Mo-Fr' then mofr
  196. when woche = 'Mo-Sa' then mosa
  197. when woche = 'Mo-So' then moso
  198. when woche = 'Di-So' then diso
  199. else 1
  200. end * if(sk.status <= 1, 0, 1) * if(sm.anzahl > 0 or (sm.anzahl is null and now() > date_add(concat(a.datum, ' ', k.ende_soll), INTERVAL 1 HOUR)), 1, 0) as fehler,
  201. if(sm.anzahl is null and now() > date_add(concat(a.datum, ' ', k.ende_soll), INTERVAL 1 HOUR), 1, 0) as fehlend,
  202. ifnull(sk.benutzer, '') as benutzer
  203. FROM arbeitstage a
  204. INNER JOIN kunden k USING (bundesland)
  205. LEFT JOIN status_meldung sm USING (datum, kunde)
  206. LEFT JOIN status_kommentar sk ON sm.kommentar_id = sk.id
  207. LEFT JOIN status_kommentar as sk2 ON a.datum = sk2.datum AND k.kunde = sk2.kunde
  208. WHERE {$datum} AND {$datum_bis} AND {$kunde} AND a.datum <= now() AND k.erster_status <= a.datum
  209. AND k.aktiv = 1
  210. ORDER BY a.datum, k.ende_soll");
  211. $result = $q->fetchAll(PDO::FETCH_ASSOC);
  212. if (isset($_REQUEST['events'])) {
  213. $color = array("green", "#bb0", "#b80", "#d55", "#c33", "#a00", '?' => "#999");
  214. $events = array();
  215. foreach ($result as $e) {
  216. if ($e['anzahl'] != '0') {
  217. $event = array();
  218. $anzahl = (!is_null($e['anzahl'])) ? $e['anzahl'] : "?";
  219. $ende = ($e['ende']) ? $e['ende'] : $e['ende_soll'];
  220. $event['title'] = "{$e['kunde']} ({$anzahl})";
  221. $event['start'] = "{$e['datum']}T{$ende}";
  222. $event['end'] = date("Y-m-d H:i:s", strtotime("+1 hour", strtotime($event['start'])));
  223. $event['color'] = ($anzahl > 4) ? "darkred" : $color[$anzahl];
  224. $events[] = $event;
  225. }
  226. }
  227. $result = $events;
  228. }
  229. }
  230. echo json_encode($result);
  231. // print_r($result);
  232. // echo json_last_error();