tanss.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. <?php
  2. require __DIR__ . '/../vendor/autoload.php';
  3. use GuzzleHttp\Client;
  4. use GuzzleHttp\Psr7;
  5. use GuzzleHttp\Exception\ClientException;
  6. setlocale(LC_ALL, 'de_DE', 'de_DE.UTF-8');
  7. class tanss
  8. {
  9. private $tanssurl = "https://tanss.vision4it.de/";
  10. private $token4devices = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJERVZJQ0VfTUFOQUdFTUVOVCIsImV4cCI6MTczMTY4MTI3OSwidHlwZSI6IkRFVklDRV9NQU5BR0VNRU5UIiwiaW5mbyI6IjEwMDEifQ.GSIUYg3OlPVSE6nMfx_0RpbzV267iHovjo105uUAQ4NqbuTRAFZCVNBMdyzkCaymM_Jk0xL37ZvSt0Pr_LS0pO56aJSj2TBTOGqFVh4Z-vVuRiqLarHlJsye_Cxw4rsaGoKgcXDpFQiZ5aPj2e1LpQkFtEhqx-wcxOq7_JnieAM";
  11. //private $token4tanssx = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJUQU5TU19BUFAiLCJleHAiOjE2NzIyMTkyNzYsInR5cGUiOiJUQU5TU19BUFAifQ.REWqktC1irfeIY3QZL8YKelmqvHepmtpkJqm3O_gmSj0bVJWpPw1xF3mV1ICwLoLYm_oy7S6CB-Cxe6gHRHCCBVbr1uFbhpo5sk7cjuqFrfCOS6A5gc6a29vNLihnWXaGD3LwzsVgA7xqfUQVBxdofUbkfxOwAJUOjpzztG_Pus";
  12. private $token4monitor = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJNT05JVE9SSU5HIiwiZXhwIjoxNjc2NTQ4NzQ4LCJ0eXBlIjoiTU9OSVRPUklORyJ9.G1a85W2Gpgm72epAxioyjY4i-3bfxwMkyxGvSwcjAzjb8_bwArMPSdaTV7dJrO1MAJBhgXfhU-MICtcBFi8FMrOrd9t2WJGIgsLKPI2Bg7OYkEatS4b2mQGTggtA27b2FvoPIviPv6snL8CIPkO5-iOGBaDhIi0SW2BlY7goLss";
  13. private $token4phone = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJQSE9ORSIsImV4cCI6MTY5MjM2NjU2NCwidHlwZSI6IlBIT05FIn0.ON4AnJi0uVUa7eFizkaEfITos1m4JyslZ2-TqTD7tN4aAw21-megGv7xwMIZxQOvHUVDSVoLuWbBQ1QW1iWxOgMdgds0d6vC99Z4iQ2ulLE7SQckmDzgA2Qx4f6BQ2_PqdcmdZa0pQ0JxcHb_xlaZptu7gtcMP52Bu9XRRrUUHg";
  14. private $token4erp = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJFUlAiLCJleHAiOjE3MzcwMzEyNTcsInR5cGUiOiJFUlAiLCJpbmZvIjoiMTAwMSJ9.aT-qT51skgjuEQuaHm-aAXYom1vHLQTqVeDBbJSHVohTHFP1uH8NSfZRJ6-AFxb0k8E3gdHNzHXsHLC69bdp60sJQWK45Dkqf1YsszSK_hhfqKberibSIFkUjs3LCSDTvH5Yn9FIolnE7m8PNN9Yu8X9JS1Ayae8FZxaI7jpUMc";
  15. //private $token4remoteSupports = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJSRU1PVEVfU1VQUE9SVCIsImV4cCI6MTY5Mjk2NTUyNCwidHlwZSI6IlJFTU9URV9TVVBQT1JUIiwiaW5mbyI6IjEwMDEifQ.nE19B7tJCnnUhIyHgE5NxyFHBj-RpSLWJ5bnM65KNMlfzHt47DfLFISSN7YuUHr3onYCIrwVAs9KyjBj03i4vRGmR8XmxizUbGtjmJkbRurO5XCBByYvJn0e1wxQKx_-YnAbPNtiyosiyH9TWktgHyVA4UVDUTnHRsmxD7k3nyU";
  16. private $token4remoteSupports = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJSRU1PVEVfU1VQUE9SVCIsImV4cCI6MTY5NzI5NDAxNiwidHlwZSI6IlJFTU9URV9TVVBQT1JUIiwiaW5mbyI6IjEwMDIifQ.nrZJR0_X2JY0-42EAfv9Fib4ZelGV0wh1iviKFjBxooGwNc5hbUGf4-5_IYYNaTh8Y5inOaxQMlFz3mj2QPiP85nsOeAC30F5_qW442IqnemntQrssd-WbCHxL2-ocl61iMWXMBPIja2BISu61-oXSWVT1WvMHyS0IFv_CFt718";
  17. private $headers4tickets = "";
  18. private $headers4devices = "";
  19. private $headers4erp = "";
  20. private $userheader = "";
  21. public $logintoken = "";
  22. public $loggedin = false;
  23. public $username = "";
  24. public $password = "";
  25. public $employeeId = 0;
  26. public $expire = 0;
  27. protected $cookieFileLocation = './cookie.txt';
  28. private $client = "";
  29. private $db = null;
  30. public $dbhost = "10.7.50.52";
  31. public $dbuser = "tanss_ro";
  32. public $dbpass = "-QqZg)nTJa2)#";
  33. function __construct()
  34. {
  35. $this->headers4tickets = ["apiToken: ". $this->token4monitor , "Content-Type: application/json"];
  36. $this->headers4devices = ["apiToken" => $this->token4devices , "Content-Type" => "application/json"];
  37. $this->headers4erp = ["apiToken" => $this->token4erp , "Content-Type" => "application/json"];
  38. $this->cookieFileLocation = dirname(__FILE__).'/cookie.txt';
  39. $this->client = new \GuzzleHttp\Client([ 'base_uri' => $this->tanssurl, 'debug' => false, 'verify' => false , "Content-Type" => "application/json;charset=ISO-8859-1"]);
  40. }
  41. public function login($username,$password,$refreshToken="")
  42. {
  43. if ($refreshToken=="") {
  44. $headers=["user"=> $username , "password" => $password ];
  45. } else {
  46. $headers=["user" => $username , "password" => $password, "logintoken" => $refreshToken];
  47. }
  48. $response = $this->client->request( 'GET', '/backend/api/v1/user/login', ['headers' => $headers] );
  49. // Ergebnisse ermitteln
  50. $statuscode = $response->getStatusCode();
  51. $header = $response->getHeaders();
  52. $body = json_decode($response->getBody()->getContents());
  53. // Ergebnis Object bauen
  54. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body];
  55. if ($ergobj->statuscode == 200 && $ergobj->body->meta->text <> "Unsuccesful login attempt") {
  56. $this->logintoken = $ergobj->body->content->apiKey;
  57. $this->userHeader = ["apiToken" => $ergobj->body->content->apiKey];
  58. $this->username = $username;
  59. $this->password = $password;
  60. $this->employeeId = $ergobj->body->content->employeeId;
  61. $this->expire = $ergobj->body->content->expire;
  62. $retvalue = 200;
  63. } else {
  64. $this->logintoken = "";
  65. $this->username = "";
  66. $this->password = "";
  67. $this->userHeader = "";
  68. $this->employeeId = 0;
  69. $this->expire = 0;
  70. $retvalue = 403;
  71. }
  72. return $retvalue;
  73. }
  74. public function readsession(&$session)
  75. {
  76. $this->loggedin = $session['loggedin'];
  77. $this->logintoken = $session['id'];
  78. $this->userHeader = $session["userHeader"];
  79. $this->username = $session["username"];
  80. $this->password = $session["password"];
  81. $this->employeeId = $session["employeeId"];
  82. $this->expire = $session["expire"];
  83. }
  84. public function writesession(&$session)
  85. {
  86. $session['loggedin'] = $this->loggedin;
  87. $session['id'] = $this->logintoken;
  88. $session["userHeader"] = $this->userHeader;
  89. $session["name"] = $this->username;
  90. $session["password"] = $this->password;
  91. $session["employeeId"] = $this->employeeId;
  92. $session["expire"] = $this->expire;
  93. }
  94. public function ticketlist()
  95. {
  96. try {
  97. $response = $this->client->request( 'GET', '/backend/api/v1/tickets/own', ['headers' => $this->userHeader] );
  98. $statuscode = $response->getStatusCode();
  99. $header = $response->getHeaders();
  100. $body = json_decode($response->getBody()->getContents());
  101. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body];
  102. if ($ergobj->statuscode == 200) {
  103. $retvalue = $ergobj;
  104. } else {
  105. $retvalue = (object)[];
  106. }
  107. }
  108. catch (Exception $e) {
  109. $retvalue = (object)[];
  110. echo "<pre>Fehler: ";
  111. echo Psr7\Message::toString($e->getRequest());
  112. echo Psr7\Message::toString($e->getResponse());
  113. echo "</pre>";
  114. }
  115. return $retvalue;
  116. }
  117. public function ticketlistAll()
  118. {
  119. try {
  120. $response = $this->client->request( 'GET', '/backend/api/v1/tickets/technician', ['headers' => $this->userHeader] );
  121. $statuscode = $response->getStatusCode();
  122. $header = $response->getHeaders();
  123. $body = json_decode($response->getBody()->getContents());
  124. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body];
  125. if ($ergobj->statuscode == 200) {
  126. $retvalue = $ergobj;
  127. } else {
  128. $retvalue = (object)[];
  129. }
  130. }
  131. catch (Exception $e) {
  132. $retvalue = (object)[];
  133. echo "<pre>Fehler: ";
  134. echo Psr7\Message::toString($e->getRequest());
  135. echo Psr7\Message::toString($e->getResponse());
  136. echo "</pre>";
  137. }
  138. return $retvalue;
  139. }
  140. public function addticket($body = [])
  141. {
  142. try {
  143. //$response = $this->client->request( 'POST', '/backend/api/v1/tickets', ['headers' => $this->userHeader, 'json' => $body] );
  144. $response = $this->client->request( 'POST', '/backend/api/erp/v1/tickets', ['headers' => $this->headers4erp, 'json' => $body] );
  145. $statuscode = $response->getStatusCode();
  146. $header = $response->getHeaders();
  147. $body = json_decode($response->getBody()->getContents());
  148. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body];
  149. if ($ergobj->statuscode == 201) {
  150. $retvalue = $ergobj;
  151. } else {
  152. $retvalue = (object)[];
  153. }
  154. }
  155. catch (Exception $e) {
  156. $retvalue = (object)[];
  157. echo "<pre>Fehler: ";
  158. echo Psr7\Message::toString($e->getRequest());
  159. echo Psr7\Message::toString($e->getResponse());
  160. echo "</pre>";
  161. }
  162. return $retvalue;
  163. }
  164. public function searchperipheries($name = "", $type = 0, $companyId = 0)
  165. {
  166. try {
  167. $body = [
  168. "companyId" => $companyId,
  169. "branches" => "COMPANY_ONLY",
  170. "active" => "ACTIVE_ONLY",
  171. "peripheryTypeId" => $type
  172. ];
  173. $response = $this->client->request( 'PUT', '/backend/api/deviceManagement/v1/peripheries', ['headers' => $this->headers4devices, 'json' => $body ] );
  174. $statuscode = $response->getStatusCode();
  175. $header = $response->getHeaders();
  176. $body = json_decode($response->getBody()->getContents());
  177. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body];
  178. if ($ergobj->statuscode == 201) {
  179. $obj = $ergobj;
  180. //echo "<pre>";var_dump($obj);echo "</pre>";
  181. $retvalue = array_column($obj->content, null, 'name')[$name] ?? false;
  182. } else {
  183. $retvalue = false;
  184. }
  185. }
  186. catch (Exception $e) {
  187. $retvalue = (object)[];
  188. echo "<pre>Fehler: ";
  189. echo Psr7\Message::toString($e->getRequest());
  190. echo Psr7\Message::toString($e->getResponse());
  191. echo "</pre>";
  192. }
  193. return $retvalue;
  194. }
  195. public function searchDevice($name = "", $servers = "PCS_ONLY", $companyId = 0)
  196. {
  197. try {
  198. $body = [
  199. "companyId" => $companyId,
  200. "branches" => "COMPANY_ONLY",
  201. "active" => "ACTIVE_ONLY",
  202. "peripheryTypeId" => $type
  203. ];
  204. $response = $this->client->request( 'PUT', '/backend/api/deviceManagement/v1/pcs', ['headers' => $this->headers4devices, 'json' => $body ] );
  205. $statuscode = $response->getStatusCode();
  206. $header = $response->getHeaders();
  207. $body = json_decode($response->getBody()->getContents());
  208. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body];
  209. if ($ergobj->statuscode == 201) {
  210. $obj = $ergobj;
  211. //echo "<pre>";var_dump($obj->body->content);echo "</pre>";
  212. $retvalue = array_column($obj->body->content, null, 'name')[$name] ?? false;
  213. } else {
  214. $retvalue = false;
  215. }
  216. }
  217. catch (Exception $e) {
  218. $retvalue = (object)[];
  219. echo "<pre>Fehler: ";
  220. echo Psr7\Message::toString($e->getRequest());
  221. echo Psr7\Message::toString($e->getResponse());
  222. echo "</pre>";
  223. }
  224. return $retvalue;
  225. }
  226. public function timestamp()
  227. {
  228. try {
  229. $response = $this->client->request( 'GET', '/backend/api/v1/timestamps', ['headers' => $this->userHeader] );
  230. $statuscode = $response->getStatusCode();
  231. $header = $response->getHeaders();
  232. $body = json_decode($response->getBody()->getContents());
  233. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body];
  234. if ($ergobj->statuscode == 200) {
  235. $retvalue = $ergobj;
  236. } else {
  237. $retvalue = (object)[];
  238. }
  239. }
  240. catch (Exception $e) {
  241. $retvalue = (object)[];
  242. echo "<pre>Fehler: ";
  243. echo Psr7\Message::toString($e->getRequest());
  244. echo Psr7\Message::toString($e->getResponse());
  245. echo "</pre>";
  246. }
  247. return $retvalue;
  248. }
  249. public function settimestamp($state)
  250. {
  251. $body = [
  252. "employeeId" => $this->employeeId,
  253. "state" => strtoupper($state),
  254. "type" => "WORK",
  255. "date" => time(),
  256. "autoPause" => true
  257. ];
  258. var_dump($body);
  259. try {
  260. $response = $this->client->request( 'POST', '/backend/api/v1/timestamps', ['headers' => $this->userHeader, 'json' => $body, "query" => "autoPause=true" ] );
  261. $statuscode = $response->getStatusCode();
  262. $header = $response->getHeaders();
  263. $body = json_decode($response->getBody()->getContents());
  264. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body];
  265. if ($ergobj->statuscode == 201) {
  266. $retvalue = $ergobj;
  267. } else {
  268. $retvalue = (object)[];
  269. }
  270. }
  271. catch (Exception $e)
  272. {
  273. $retvalue = (object)[];
  274. echo "<pre>Fehler: ";
  275. echo Psr7\Message::toString($e->getRequest());
  276. echo Psr7\Message::toString($e->getResponse());
  277. echo "</pre>";
  278. }
  279. return $retvalue;
  280. }
  281. public function getCalls($employeeId = 0)
  282. {
  283. $body = [
  284. "timeframe" => [
  285. "from" => (time() - (12 * 60 * 60)) ,
  286. "to" => time()
  287. ],
  288. "numberFilters" => [],
  289. "showTrysAsWell" => true,
  290. "employeeId" => $employeeId ,
  291. "numberInfos" => true
  292. ];
  293. try {
  294. $response = $this->client->request(
  295. 'put',
  296. '/backend/api/calls/v1',
  297. ['headers' => [
  298. "apiToken" => $this->token4phone,
  299. "Content-Type" => "application/json"
  300. ],
  301. 'json' => $body ]
  302. );
  303. $statuscode = $response->getStatusCode();
  304. $header = $response->getHeaders();
  305. $body = json_decode($response->getBody()->getContents());
  306. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body ];
  307. if ($ergobj->statuscode == 200) {
  308. $retvalue = $ergobj;
  309. } else {
  310. $retvalue = (object)[];
  311. }
  312. }
  313. catch (Exception $e) {
  314. $retvalue = (object)[];
  315. echo "<pre>Fehler: ";
  316. echo Psr7\Message::toString($e->getRequest());
  317. echo Psr7\Message::toString($e->getResponse());
  318. echo "</pre>";
  319. }
  320. return $retvalue;
  321. }
  322. public function getChats($employeeId = 0)
  323. {
  324. $body = [
  325. "employeeId" => $employeeId ,
  326. "onlyExpectedTimeExpired" => false,
  327. "status" => "OPEN",
  328. "loadMessages" => "NONE",
  329. "showOnlyParticapatedChat" => true,
  330. "loadMessages" => "NONE"
  331. ];
  332. try {
  333. $response = $this->client->request(
  334. 'PUT',
  335. '/backend/api/v1/chats',
  336. ['headers' => [ "apiToken" => $this->userHeader ] ,
  337. 'json' => $body ]
  338. );
  339. $statuscode = $response->getStatusCode();
  340. $header = $response->getHeaders();
  341. $body = json_decode($response->getBody()->getContents());
  342. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body ];
  343. if ($ergobj->statuscode == 200) {
  344. $retvalue = $ergobj;
  345. } else {
  346. $retvalue = (object)[];
  347. }
  348. }
  349. catch (Exception $e) {
  350. $retvalue = (object)[];
  351. echo "<pre>Fehler: ";
  352. echo Psr7\Message::toString($e->getRequest());
  353. echo Psr7\Message::toString($e->getResponse());
  354. echo "</pre>";
  355. }
  356. return $retvalue;
  357. }
  358. public function getTasks_API($employeeId = 0,$companyId = 0,$typeId = 0, $text = "")
  359. {
  360. $from = new DateTime('today midnight');
  361. $to= new DateTime();
  362. $to->add(new DateInterval('P7D'));
  363. $body = ["timeframe" => [ "from" => $from->getTimestamp(), "to" => $to->getTimestamp()] ];
  364. ($employeeId>0) ? $body[] = ["employeeId" => $employeeId] : null;
  365. ($companyId>0) ? $body[] = ["companyId" => $companyId] : null;
  366. ($typeId>0) ? $body[] = ["typeId" => $typeId] : ["typeId" => 3];
  367. ($text>0) ? $body[] = ["text" => $text] : null;
  368. //print_r($body);
  369. try {
  370. $response = $this->client->request(
  371. 'PUT',
  372. '/backend/api/remoteSupports/v1',
  373. ['headers' => [ "apiToken" => $this->token4remoteSupports] ,
  374. 'json' => $body ]
  375. );
  376. $statuscode = $response->getStatusCode();
  377. $header = $response->getHeaders();
  378. $body = json_decode($response->getBody()->getContents());
  379. $ergobj = (object) ["statuscode" => $statuscode, "header" => $header, "body" => $body ];
  380. //var_dump($this->logintoken);
  381. if ($ergobj->statuscode == 200) {
  382. $retvalue = $ergobj;
  383. } else {
  384. $retvalue = (object)[];
  385. }
  386. }
  387. catch (Exception $e) {
  388. $retvalue = (object)[];
  389. echo "<pre>Fehler: ";
  390. echo Psr7\Message::toString($e->getRequest());
  391. echo Psr7\Message::toString($e->getResponse());
  392. echo "</pre>";
  393. }
  394. return $retvalue;
  395. }
  396. public function timeDifference( $date_1, $date_2, $differenceFormat = "%m Monate %d Tage %H Stunden %i Minuten" )
  397. {
  398. $datetime1 = new DateTime();
  399. $datetime1->setTimestamp($date_1);
  400. $datetime2 = new DateTime();
  401. $datetime2->setTimestamp($date_2);
  402. $interval = $datetime1->diff($datetime2);
  403. return $interval->format($differenceFormat);
  404. }
  405. function openMysql() {
  406. $this->db = new PDO("mysql:host=".$this->dbhost.";charset=utf8;dbname=tanss", $this->dbuser, $this->dbpass, array(PDO::ATTR_PERSISTENT => false, PDO::ATTR_TIMEOUT => 5, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
  407. }
  408. public function getTasks($employeeId = 0) {
  409. $sql_termine = 'SELECT
  410. leistungen.ID,
  411. leistungen.datum as termin_start,
  412. leistungen.dauer*60+leistungen.datum as termin_ende,
  413. leistungen.dauer/60 as termin_dauer,
  414. leistungen.text as info,
  415. mitarbeiter.name as techniker,
  416. firmen.name as kunde,
  417. leistungen.tepID as typ
  418. FROM tanss.leistungen
  419. left outer join mitarbeiter on leistungen.mitarbeiterID = mitarbeiter.ID
  420. left outer join firmen on leistungen.firmenID = firmen.ID
  421. WHERE FROM_UNIXTIME(datum,"%Y-%m-%d") >= date(now())
  422. AND leistungen.tepID in (2,3)
  423. ' . ( ($employeeId>0) ? "AND mitarbeiter.ID = ".$employeeId : "" ). '
  424. ORDER BY datum ASC
  425. ';
  426. // Verbindung öffnen
  427. $this->openMysql();
  428. // SQL ausführen: Termine
  429. $datasql = $this->db->query($sql_termine, PDO::FETCH_ASSOC);
  430. $data_termine = $datasql->fetchAll(PDO::FETCH_OBJ);
  431. //$dbcount_termine = $datasql->rowCount();
  432. // Verbindung schließen
  433. $this->db = null;
  434. return $data_termine;
  435. }
  436. }