Browse Source

letzte Anpassungen

Robert Bedner 7 years ago
parent
commit
02f31f9eac

+ 5 - 5
.idea/Fehlerbericht.iml

@@ -19,16 +19,16 @@
     <orderEntry type="module-library">
       <library name="PHARS">
         <CLASSES>
-          <root url="phar://D:/xampp/Twig/composer.phar" />
+          <root url="phar://D:/xampp/Twig/composer.phar/" />
         </CLASSES>
         <SOURCES>
-          <root url="phar://D:/xampp/Twig/composer.phar" />
+          <root url="phar://D:/xampp/Twig/composer.phar/" />
         </SOURCES>
       </library>
     </orderEntry>
     <orderEntry type="library" name="Node.js Dependencies for Fehlerbericht" level="project" />
     <orderEntry type="library" name="Node.js Dependencies for Fehlerbericht" level="project" />
-    <orderEntry type="library" name="Node.js v0.10.21 Core Modules" level="application" />
+    <orderEntry type="library" name="Node.js Dependencies for Kasse" level="project" />
+    <orderEntry type="library" name="Fehlerbericht node_modules" level="project" />
   </component>
-</module>
-
+</module>

+ 3 - 0
.idea/copyright/profiles_settings.xml

@@ -0,0 +1,3 @@
+<component name="CopyrightManager">
+  <settings default="" />
+</component>

+ 417 - 36
.idea/dataSources.ids

@@ -1,45 +1,426 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <component name="dataSourceStorage">
-  <data-source source="LOCAL" name="MySQL - tasks@localhost" uuid="c2a557d7-ac30-4c20-8f83-36bdbba56509">
+  <data-source name="MySQL - tasks@localhost" uuid="c2a557d7-ac30-4c20-8f83-36bdbba56509">
     <database-info product="MySQL" version="5.5.27" jdbc-version="4.0" driver-name="MySQL Connector Java" driver-version="mysql-connector-java-5.1.31 ( Revision: alexander.soklakov@oracle.com-20140520065950-groqzzbvxprqdmnz )">
       <extra-name-characters>#@</extra-name-characters>
       <identifier-quote-string>`</identifier-quote-string>
     </database-info>
     <case-sensitivity plain-identifiers="lower" quoted-identifiers="lower"/>
-    <schema name="" catalog="tasks"/>
-    <table name="arbeitstage" schema="" catalog="tasks" type="TABLE">
-      <column name="bundesland" sqlType="VARCHAR" length="5" precision="0" nullable="false" jdbcType="12" def="Jyc="/>
-      <column name="datum" sqlType="DATE" length="10" precision="0" nullable="false" jdbcType="91" def="JzAwMDAtMDAtMDAn"/>
-      <column name="wochentag" sqlType="VARCHAR" length="5" precision="0" nullable="false" jdbcType="12" def="Jyc="/>
-      <column name="feiertag" sqlType="VARCHAR" length="50" precision="0" nullable="false" jdbcType="12" def="Jyc="/>
-      <column name="mofr" sqlType="TINYINT" length="3" precision="0" nullable="false" jdbcType="-6" def="MA=="/>
-      <column name="mosa" sqlType="TINYINT" length="3" precision="0" nullable="false" jdbcType="-6" def="MA=="/>
-      <column name="moso" sqlType="TINYINT" length="3" precision="0" nullable="false" jdbcType="-6" def="MA=="/>
-      <column name="diso" sqlType="TINYINT" length="3" precision="0" nullable="false" jdbcType="-6" def="MA=="/>
-      <primary-key name="PRIMARY" columns="bundesland,datum"/>
-    </table>
-    <table name="kunden" schema="" catalog="tasks" type="TABLE">
-      <column name="kunde" sqlType="VARCHAR" length="50" precision="0" nullable="false" jdbcType="12"/>
-      <column name="system" sqlType="VARCHAR" length="50" precision="0" nullable="false" jdbcType="12"/>
-      <column name="start" sqlType="TIME" length="8" precision="0" nullable="false" jdbcType="92"/>
-      <column name="ende" sqlType="TIME" length="8" precision="0" nullable="false" jdbcType="92"/>
-      <column name="erster_status" sqlType="DATE" length="10" precision="0" nullable="false" jdbcType="91"/>
-      <column name="aktiv" sqlType="TINYINT" length="3" precision="0" nullable="false" jdbcType="-6" def="MQ=="/>
-      <column name="woche" sqlType="VARCHAR" length="10" precision="0" nullable="false" jdbcType="12" def="J01vLVNhJw=="/>
-      <column name="bundesland" sqlType="VARCHAR" length="5" precision="0" nullable="false" jdbcType="12" def="J0hFJw=="/>
-      <primary-key name="PRIMARY" columns="kunde"/>
-    </table>
-    <table name="statusmail" schema="" catalog="tasks" type="TABLE">
-      <column name="kunde" sqlType="VARCHAR" length="50" precision="0" nullable="false" jdbcType="12"/>
-      <column name="datum" sqlType="DATE" length="10" precision="0" nullable="false" jdbcType="91"/>
-      <column name="start" sqlType="TIME" length="8" precision="0" nullable="false" jdbcType="92"/>
-      <column name="ende" sqlType="TIME" length="8" precision="0" nullable="false" jdbcType="92"/>
-      <column name="logdatei" sqlType="TEXT" length="65535" precision="0" nullable="false" jdbcType="-1"/>
-      <column name="fehlerbericht" sqlType="TEXT" length="65535" precision="0" nullable="false" jdbcType="-1"/>
-      <column name="anzahl" sqlType="TINYINT" length="3" precision="0" nullable="false" jdbcType="-6"/>
-      <column name="bearbeitet" sqlType="TINYINT" length="3" precision="0" nullable="false" jdbcType="-6"/>
-      <column name="kommentar" sqlType="TEXT" length="65535" precision="0" nullable="false" jdbcType="-1"/>
-      <primary-key name="PRIMARY" columns="kunde,datum,start"/>
-    </table>
+    <database-model serializer="dbm" rdbms="MYSQL" format-version="2.5">
+      <schema id="1" name="tasks"/>
+      <table id="2" parent="1" name="arbeitstage"/>
+      <table id="3" parent="1" name="benutzer"/>
+      <table id="4" parent="1" name="kunden"/>
+      <table id="5" parent="1" name="kunden_config"/>
+      <table id="6" parent="1" name="kunden_gcstarter"/>
+      <table id="7" parent="1" name="kunden_gcstruct"/>
+      <table id="8" parent="1" name="status_kommentar"/>
+      <table id="9" parent="1" name="status_meldung"/>
+      <table id="10" parent="1" name="status_meldung_historie"/>
+      <table id="11" parent="1" name="tickets"/>
+      <column id="12" parent="2" name="bundesland">
+        <mandatory>1</mandatory>
+        <data-type>varchar(5)</data-type>
+        <default-expression>&apos;&apos;</default-expression>
+      </column>
+      <column id="13" parent="2" name="datum">
+        <mandatory>1</mandatory>
+        <data-type>date</data-type>
+        <default-expression>&apos;0000-00-00&apos;</default-expression>
+      </column>
+      <column id="14" parent="2" name="wochentag">
+        <mandatory>1</mandatory>
+        <data-type>varchar(5)</data-type>
+        <default-expression>&apos;&apos;</default-expression>
+      </column>
+      <column id="15" parent="2" name="feiertag">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+        <default-expression>&apos;&apos;</default-expression>
+      </column>
+      <column id="16" parent="2" name="mofr">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+        <default-expression>&apos;0&apos;</default-expression>
+      </column>
+      <column id="17" parent="2" name="mosa">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+        <default-expression>&apos;0&apos;</default-expression>
+      </column>
+      <column id="18" parent="2" name="moso">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+        <default-expression>&apos;0&apos;</default-expression>
+      </column>
+      <column id="19" parent="2" name="diso">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+        <default-expression>&apos;0&apos;</default-expression>
+      </column>
+      <key id="20" parent="2" name="PRIMARY">
+        <columns>bundesland
+datum</columns>
+        <primary>1</primary>
+      </key>
+      <column id="21" parent="3" name="benutzer">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="22" parent="3" name="name">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="23" parent="3" name="vorname">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="24" parent="3" name="email">
+        <mandatory>1</mandatory>
+        <data-type>varchar(100)</data-type>
+      </column>
+      <column id="25" parent="3" name="passwort">
+        <mandatory>1</mandatory>
+        <data-type>varchar(255)</data-type>
+      </column>
+      <key id="26" parent="3" name="PRIMARY">
+        <columns>benutzer</columns>
+        <primary>1</primary>
+      </key>
+      <column id="27" parent="4" name="kunde">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="28" parent="4" name="system">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="29" parent="4" name="start_soll">
+        <mandatory>1</mandatory>
+        <data-type>time</data-type>
+      </column>
+      <column id="30" parent="4" name="ende_soll">
+        <mandatory>1</mandatory>
+        <data-type>time</data-type>
+      </column>
+      <column id="31" parent="4" name="erster_status">
+        <mandatory>1</mandatory>
+        <data-type>date</data-type>
+      </column>
+      <column id="32" parent="4" name="version">
+        <mandatory>1</mandatory>
+        <data-type>date</data-type>
+      </column>
+      <column id="33" parent="4" name="beta_version">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+        <default-expression>&apos;0&apos;</default-expression>
+      </column>
+      <column id="34" parent="4" name="aktiv">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+        <default-expression>&apos;1&apos;</default-expression>
+      </column>
+      <column id="35" parent="4" name="woche">
+        <mandatory>1</mandatory>
+        <data-type>varchar(10)</data-type>
+        <default-expression>&apos;Mo-Sa&apos;</default-expression>
+      </column>
+      <column id="36" parent="4" name="bundesland">
+        <mandatory>1</mandatory>
+        <data-type>varchar(5)</data-type>
+        <default-expression>&apos;HE&apos;</default-expression>
+      </column>
+      <column id="37" parent="4" name="plz">
+        <mandatory>1</mandatory>
+        <data-type>varchar(10)</data-type>
+      </column>
+      <column id="38" parent="4" name="ort">
+        <mandatory>1</mandatory>
+        <data-type>varchar(100)</data-type>
+      </column>
+      <column id="39" parent="4" name="whitelist">
+        <mandatory>1</mandatory>
+        <data-type>mediumtext</data-type>
+      </column>
+      <key id="40" parent="4" name="PRIMARY">
+        <columns>kunde</columns>
+        <primary>1</primary>
+      </key>
+      <column id="41" parent="5" name="kunde">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="42" parent="5" name="datum">
+        <mandatory>1</mandatory>
+        <data-type>date</data-type>
+      </column>
+      <column id="43" parent="5" name="info">
+        <mandatory>1</mandatory>
+        <data-type>longtext</data-type>
+      </column>
+      <key id="44" parent="5" name="PRIMARY">
+        <columns>kunde
+datum</columns>
+        <primary>1</primary>
+      </key>
+      <column id="45" parent="6" name="kunde">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="46" parent="6" name="datum">
+        <mandatory>1</mandatory>
+        <data-type>date</data-type>
+      </column>
+      <column id="47" parent="6" name="gcstarter">
+        <mandatory>1</mandatory>
+        <data-type>longtext</data-type>
+      </column>
+      <key id="48" parent="6" name="PRIMARY">
+        <columns>kunde
+datum</columns>
+        <primary>1</primary>
+      </key>
+      <column id="49" parent="7" name="kunde">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="50" parent="7" name="datum">
+        <mandatory>1</mandatory>
+        <data-type>date</data-type>
+      </column>
+      <column id="51" parent="7" name="gcstruct">
+        <mandatory>1</mandatory>
+        <data-type>longtext</data-type>
+      </column>
+      <key id="52" parent="7" name="PRIMARY">
+        <columns>kunde
+datum</columns>
+        <primary>1</primary>
+      </key>
+      <column id="53" parent="8" name="id">
+        <mandatory>1</mandatory>
+        <data-type>int(11)</data-type>
+        <sequence-identity>1</sequence-identity>
+      </column>
+      <column id="54" parent="8" name="datum">
+        <mandatory>1</mandatory>
+        <data-type>date</data-type>
+      </column>
+      <column id="55" parent="8" name="kunde">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="56" parent="8" name="start">
+        <mandatory>1</mandatory>
+        <data-type>time</data-type>
+      </column>
+      <column id="57" parent="8" name="benutzer">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="58" parent="8" name="fehler">
+        <mandatory>1</mandatory>
+        <data-type>int(11)</data-type>
+      </column>
+      <column id="59" parent="8" name="status">
+        <mandatory>1</mandatory>
+        <data-type>int(11)</data-type>
+      </column>
+      <column id="60" parent="8" name="kommentar">
+        <mandatory>1</mandatory>
+        <data-type>text</data-type>
+      </column>
+      <column id="61" parent="8" name="mdate">
+        <mandatory>1</mandatory>
+        <data-type>timestamp</data-type>
+        <default-expression>&apos;CURRENT_TIMESTAMP&apos;</default-expression>
+      </column>
+      <column id="62" parent="8" name="cdate">
+        <mandatory>1</mandatory>
+        <data-type>timestamp</data-type>
+        <default-expression>&apos;0000-00-00 00:00:00&apos;</default-expression>
+      </column>
+      <index id="63" parent="8" name="datum-kunde-start">
+        <columns>datum
+kunde
+start</columns>
+        <desc-columns></desc-columns>
+      </index>
+      <key id="64" parent="8" name="PRIMARY">
+        <columns>id</columns>
+        <primary>1</primary>
+      </key>
+      <column id="65" parent="9" name="datum">
+        <mandatory>1</mandatory>
+        <data-type>date</data-type>
+      </column>
+      <column id="66" parent="9" name="kunde">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="67" parent="9" name="aufgabe">
+        <mandatory>1</mandatory>
+        <data-type>varchar(30)</data-type>
+      </column>
+      <column id="68" parent="9" name="start">
+        <mandatory>1</mandatory>
+        <data-type>time</data-type>
+      </column>
+      <column id="69" parent="9" name="ende">
+        <mandatory>1</mandatory>
+        <data-type>time</data-type>
+      </column>
+      <column id="70" parent="9" name="fehlerbericht">
+        <mandatory>1</mandatory>
+        <data-type>longtext</data-type>
+      </column>
+      <column id="71" parent="9" name="anzahl">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+      </column>
+      <column id="72" parent="9" name="bearbeitet">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+      </column>
+      <column id="73" parent="9" name="kommentar_id">
+        <mandatory>1</mandatory>
+        <data-type>int(11)</data-type>
+      </column>
+      <index id="74" parent="9" name="kunde">
+        <columns>kunde</columns>
+        <desc-columns></desc-columns>
+      </index>
+      <key id="75" parent="9" name="PRIMARY">
+        <columns>datum
+kunde
+aufgabe
+start</columns>
+        <primary>1</primary>
+      </key>
+      <column id="76" parent="10" name="datum">
+        <mandatory>1</mandatory>
+        <data-type>date</data-type>
+      </column>
+      <column id="77" parent="10" name="kunde">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="78" parent="10" name="aufgabe">
+        <mandatory>1</mandatory>
+        <data-type>varchar(30)</data-type>
+      </column>
+      <column id="79" parent="10" name="start">
+        <mandatory>1</mandatory>
+        <data-type>time</data-type>
+      </column>
+      <column id="80" parent="10" name="ende">
+        <mandatory>1</mandatory>
+        <data-type>time</data-type>
+      </column>
+      <column id="81" parent="10" name="fehlerbericht">
+        <mandatory>1</mandatory>
+        <data-type>longtext</data-type>
+      </column>
+      <column id="82" parent="10" name="anzahl">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+      </column>
+      <column id="83" parent="10" name="bearbeitet">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+      </column>
+      <column id="84" parent="10" name="kommentar_id">
+        <mandatory>1</mandatory>
+        <data-type>int(11)</data-type>
+      </column>
+      <index id="85" parent="10" name="kunde">
+        <columns>kunde</columns>
+        <desc-columns></desc-columns>
+      </index>
+      <key id="86" parent="10" name="PRIMARY">
+        <columns>datum
+kunde
+aufgabe
+start</columns>
+        <primary>1</primary>
+      </key>
+      <column id="87" parent="11" name="id">
+        <mandatory>1</mandatory>
+        <data-type>int(11)</data-type>
+        <sequence-identity>1</sequence-identity>
+      </column>
+      <column id="88" parent="11" name="datum">
+        <mandatory>1</mandatory>
+        <data-type>date</data-type>
+      </column>
+      <column id="89" parent="11" name="benutzer">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="90" parent="11" name="kunde">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="91" parent="11" name="kontakt">
+        <mandatory>1</mandatory>
+        <data-type>varchar(50)</data-type>
+      </column>
+      <column id="92" parent="11" name="beschreibung">
+        <mandatory>1</mandatory>
+        <data-type>mediumtext</data-type>
+      </column>
+      <column id="93" parent="11" name="termin">
+        <mandatory>1</mandatory>
+        <data-type>datetime</data-type>
+      </column>
+      <column id="94" parent="11" name="dauer">
+        <mandatory>1</mandatory>
+        <data-type>time</data-type>
+      </column>
+      <column id="95" parent="11" name="status">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+      </column>
+      <column id="96" parent="11" name="prioritaet">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+      </column>
+      <column id="97" parent="11" name="fortschritt">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+      </column>
+      <column id="98" parent="11" name="kategorie">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+      </column>
+      <column id="99" parent="11" name="programm">
+        <mandatory>1</mandatory>
+        <data-type>tinyint(4)</data-type>
+      </column>
+      <column id="100" parent="11" name="kommentar">
+        <mandatory>1</mandatory>
+        <data-type>mediumtext</data-type>
+      </column>
+      <column id="101" parent="11" name="mdate">
+        <mandatory>1</mandatory>
+        <data-type>timestamp</data-type>
+        <default-expression>&apos;CURRENT_TIMESTAMP&apos;</default-expression>
+      </column>
+      <column id="102" parent="11" name="cdate">
+        <mandatory>1</mandatory>
+        <data-type>timestamp</data-type>
+        <default-expression>&apos;0000-00-00 00:00:00&apos;</default-expression>
+      </column>
+      <index id="103" parent="11" name="datum-kunde-start">
+        <columns>datum
+kunde</columns>
+        <desc-columns></desc-columns>
+      </index>
+      <key id="104" parent="11" name="PRIMARY">
+        <columns>id</columns>
+        <primary>1</primary>
+      </key>
+    </database-model>
   </data-source>
 </component>

+ 10 - 0
.idea/dataSources.local.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="dataSourceStorageLocal">
+    <data-source name="MySQL - tasks@localhost" uuid="c2a557d7-ac30-4c20-8f83-36bdbba56509">
+      <user-name>root</user-name>
+      <user-password>dfcddfc9df9adf9bdfc7dfd3dfd9dfdbdfc6</user-password>
+      <schema-pattern>tasks.*</schema-pattern>
+    </data-source>
+  </component>
+</project>

+ 2 - 7
.idea/dataSources.xml

@@ -1,20 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="DataSourceManagerImpl" format="xml" hash="1620145237">
+  <component name="DataSourceManagerImpl" format="xml" hash="810972342">
     <data-source source="LOCAL" name="MySQL - tasks@localhost" uuid="c2a557d7-ac30-4c20-8f83-36bdbba56509">
       <driver-ref>mysql</driver-ref>
       <synchronize>true</synchronize>
       <jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>
       <jdbc-url>jdbc:mysql://localhost:3306/tasks</jdbc-url>
-      <user-name>root</user-name>
-      <user-password>dfcddfc9df9adf9bdfc7dfd3dfd9dfdbdfc6</user-password>
-      <schema-pattern>tasks.*</schema-pattern>
       <driver-properties>
         <property name="zeroDateTimeBehavior" value="convertToNull" />
         <property name="tinyInt1isBit" value="false" />
       </driver-properties>
-      <libraries />
     </data-source>
   </component>
-</project>
-
+</project>

+ 9 - 0
.idea/dictionaries/Robert_Bedner.xml

@@ -0,0 +1,9 @@
+<component name="ProjectDictionaryState">
+  <dictionary name="Robert Bedner">
+    <words>
+      <w>dbname</w>
+      <w>imap</w>
+      <w>smtp</w>
+    </words>
+  </dictionary>
+</component>

+ 3 - 4
.idea/jsLibraryMappings.xml

@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="JavaScriptLibraryMappings">
-    <file url="file://$PROJECT_DIR$" libraries="{Node.js Dependencies for Kasse}" />
-    <file url="PROJECT" libraries="{Node.js v0.10.21 Core Modules}" />
+    <file url="file://$PROJECT_DIR$" libraries="{Fehlerbericht node_modules, Node.js Dependencies for Kasse}" />
+    <includedPredefinedLibrary name="Node.js Core" />
   </component>
-</project>
-
+</project>

+ 14 - 0
.idea/libraries/Fehlerbericht_node_modules.xml

@@ -0,0 +1,14 @@
+<component name="libraryTable">
+  <library name="Fehlerbericht node_modules" type="javaScript">
+    <properties>
+      <option name="frameworkName" value="node_modules" />
+      <sourceFilesUrls>
+        <item url="file://$PROJECT_DIR$/node_modules" />
+      </sourceFilesUrls>
+    </properties>
+    <CLASSES>
+      <root url="file://$PROJECT_DIR$/node_modules" />
+    </CLASSES>
+    <SOURCES />
+  </library>
+</component>

+ 0 - 5
.idea/misc.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectRootManager" version="2" />
-</project>
-

+ 1 - 2
.idea/modules.xml

@@ -5,5 +5,4 @@
       <module fileurl="file://$PROJECT_DIR$/.idea/Fehlerbericht.iml" filepath="$PROJECT_DIR$/.idea/Fehlerbericht.iml" />
     </modules>
   </component>
-</project>
-
+</project>

+ 6 - 0
.idea/sqldialects.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="SqlDialectMappings">
+    <file url="file://$PROJECT_DIR$" dialect="MySQL" />
+  </component>
+</project>

+ 2 - 3
.idea/vcs.xml

@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="VcsDirectoryMappings">
-    <mapping directory="" vcs="" />
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
   </component>
-</project>
-
+</project>

+ 459 - 402
.idea/workspace.xml

@@ -1,9 +1,37 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ChangeListManager">
-    <list default="true" id="e6a1298f-f559-449e-a74b-e7d36fe3b7cd" name="Default" comment="" />
+    <list default="true" id="e6a1298f-f559-449e-a74b-e7d36fe3b7cd" name="Default" comment="">
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/dictionaries/Robert_Bedner.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Fehlerbericht_node_modules.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/sqldialects.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/ImportController.php" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/app/scripts/controllers/main.js" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/dataSources.ids" afterPath="$PROJECT_DIR$/.idea/dataSources.ids" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/Fehlerbericht.iml" afterPath="$PROJECT_DIR$/.idea/Fehlerbericht.iml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/dataSources.xml" afterPath="$PROJECT_DIR$/.idea/dataSources.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/jsLibraryMappings.xml" afterPath="$PROJECT_DIR$/.idea/jsLibraryMappings.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/modules.xml" afterPath="$PROJECT_DIR$/.idea/modules.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/vcs.xml" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/db.php" afterPath="$PROJECT_DIR$/app/db.php" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/import.bat" afterPath="$PROJECT_DIR$/app/import.bat" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/import.php" afterPath="$PROJECT_DIR$/app/import.php" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/index.html" afterPath="$PROJECT_DIR$/app/index.html" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/scripts/app.js" afterPath="$PROJECT_DIR$/app/scripts/app.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/scripts/controllers/changelog.js" afterPath="$PROJECT_DIR$/app/scripts/controllers/changelog.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/scripts/controllers/config.js" afterPath="$PROJECT_DIR$/app/scripts/controllers/config.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/scripts/controllers/customers.js" afterPath="$PROJECT_DIR$/app/scripts/controllers/customers.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/scripts/controllers/overview.js" afterPath="$PROJECT_DIR$/app/scripts/controllers/overview.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/views/changelog.html" afterPath="$PROJECT_DIR$/app/views/changelog.html" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/views/config.html" afterPath="$PROJECT_DIR$/app/views/config.html" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/views/overview.html" afterPath="$PROJECT_DIR$/app/views/overview.html" />
+    </list>
     <ignored path="Fehlerbericht.iws" />
     <ignored path=".idea/workspace.xml" />
+    <ignored path=".idea/dataSources.local.xml" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="TRACKING_ENABLED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -14,8 +42,22 @@
   <component name="CreatePatchCommitExecutor">
     <option name="PATCH_PATH" value="" />
   </component>
-  <component name="DaemonCodeAnalyzer">
-    <disable_hints />
+  <component name="DatabaseView">
+    <option name="GROUP_SCHEMA" value="true" />
+    <option name="GROUP_CONTENTS" value="false" />
+    <option name="SORT_POSITIONED" value="false" />
+    <option name="SHOW_TABLE_DETAILS" value="true" />
+    <option name="SHOW_EMPTY_GROUPS" value="false" />
+    <PATH>
+      <PATH_ELEMENT>
+        <option name="myItemId" />
+        <option name="myItemType" value="com.intellij.database.view.DatabaseStructure$Root" />
+      </PATH_ELEMENT>
+      <PATH_ELEMENT>
+        <option name="myItemId" value="MySQL - tasks@localhost" />
+        <option name="myItemType" value="com.intellij.database.view.DbNodeDescriptor" />
+      </PATH_ELEMENT>
+    </PATH>
   </component>
   <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
   <component name="FavoritesManager">
@@ -23,123 +65,74 @@
   </component>
   <component name="FileEditorManager">
     <leaf>
-      <file leaf-file-name="overview.js" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/scripts/controllers/overview.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="134" column="42" selection-start="4291" selection-end="4291" vertical-scroll-proportion="0.0" vertical-offset="1887" max-vertical-offset="7956">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="import.php" pinned="false" current="false" current-in-tab="false">
+      <file leaf-file-name="import.php" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/app/import.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="161" column="14" selection-start="5783" selection-end="5783" vertical-scroll-proportion="0.0" vertical-offset="1275" max-vertical-offset="3179">
-              <folding>
-                <marker date="1436342278387" expanded="true" signature="2565:2609" placeholder="SELECT kunde..kunden..." />
-                <marker date="1436342278387" expanded="true" signature="5582:5719" placeholder="INSERT INTO ..." />
-                <marker date="1436342278387" expanded="true" signature="5981:6072" placeholder="UPDATE kunde..." />
-                <marker date="1436342278387" expanded="true" signature="5981:6016" placeholder="UPDATE kunde..." />
-                <marker date="1436342278387" expanded="true" signature="5981:6017" placeholder="UPDATE kunde..." />
-                <marker date="1436342278387" expanded="true" signature="5981:6043" placeholder="UPDATE kunde..." />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="changelog.js" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/scripts/controllers/changelog.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="42" column="14" selection-start="1524" selection-end="1524" vertical-scroll-proportion="0.0" vertical-offset="714" max-vertical-offset="1309">
+            <state relative-caret-position="513">
+              <caret line="19" column="12" selection-start-line="19" selection-start-column="12" selection-end-line="19" selection-end-column="12" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="index.html" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/index.html">
+      <file leaf-file-name="db.php" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/db.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="76" column="15" selection-start="2011" selection-end="2011" vertical-scroll-proportion="0.0" vertical-offset="1292" max-vertical-offset="3009">
+            <state relative-caret-position="189">
+              <caret line="7" column="50" selection-start-line="7" selection-start-column="15" selection-end-line="7" selection-end-column="50" />
               <folding>
-                <marker date="1436345457746" expanded="true" signature="2155:2308" placeholder="..." />
+                <marker date="1458731689849" expanded="true" signature="718:906" placeholder="SELECT sm.*,... status_meldung" />
+                <marker date="1458731689849" expanded="true" signature="1507:1598" placeholder="SELECT sk.* status_kommentar" />
+                <marker date="1458731689849" expanded="true" signature="1682:1850" placeholder="SELECT sk.* status_kommentar" />
+                <marker date="1458731689849" expanded="true" signature="2009:2144" placeholder="UPDATE kunde... " />
+                <marker date="1458731689849" expanded="true" signature="2318:2375" placeholder="SELECT * FRO... kunden" />
+                <marker date="1458731689849" expanded="true" signature="3152:3264" placeholder="UPDATE kunde... " />
+                <marker date="1458731689849" expanded="true" signature="3485:3568" placeholder="SELECT * FRO... kunden_gcstarter" />
+                <marker date="1458731689849" expanded="true" signature="4015:4097" placeholder="SELECT * FRO... kunden_gcstruct" />
+                <marker date="1458731689849" expanded="true" signature="4417:4784" placeholder="UPDATE kunde... " />
+                <marker date="1458731689849" expanded="true" signature="4824:4844" placeholder="SELECT * FRO... kunden" />
+                <marker date="1458731689849" expanded="true" signature="4994:5464" placeholder="INSERT INTO tickets... " />
+                <marker date="1458731689849" expanded="true" signature="5501:6020" placeholder="UPDATE ticke... " />
+                <marker date="1458731689849" expanded="true" signature="6054:6075" placeholder="SELECT * FRO... tickets" />
+                <marker date="1458731689849" expanded="true" signature="6169:6207" placeholder="SELECT kunde... kunden_config" />
+                <marker date="1458731689849" expanded="true" signature="6518:6617" placeholder="SELECT * FRO... kunden_config" />
+                <marker date="1458731689849" expanded="true" signature="6655:6747" placeholder="SELECT * FRO... kunden_config" />
+                <marker date="1458731689849" expanded="true" signature="6940:6962" placeholder="SELECT * FRO... benutzer" />
+                <marker date="1458731689849" expanded="true" signature="7229:7492" placeholder="INSERT INTO status_kommentar... " />
+                <marker date="1458731689849" expanded="true" signature="7613:7845" placeholder="INSERT INTO status_kommentar... " />
+                <marker date="1458731689849" expanded="true" signature="7910:8079" placeholder="UPDATE statu... " />
+                <marker date="1458731689849" expanded="true" signature="8118:8338" placeholder="UPDATE statu... " />
+                <marker date="1458731689849" expanded="true" signature="8372:8498" placeholder="SELECT * FRO... status_kommentar" />
+                <marker date="1458731689849" expanded="true" signature="9046:10209" placeholder="SELECT DISTI... arbeitstage" />
               </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="db.php" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/db.php">
+      <file leaf-file-name="ImportController.php" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/app/ImportController.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state line="71" column="0" selection-start="2741" selection-end="2741" vertical-scroll-proportion="0.0" vertical-offset="714" max-vertical-offset="3655">
+            <state relative-caret-position="663">
+              <caret line="129" column="49" selection-start-line="129" selection-start-column="49" selection-end-line="129" selection-end-column="49" />
               <folding>
-                <marker date="1436345128737" expanded="true" signature="653:946" placeholder="SELECT sm.*,..status_meldung..." />
-                <marker date="1436345128737" expanded="true" signature="1329:1464" placeholder="UPDATE kunde..." />
-                <marker date="1436345128737" expanded="true" signature="1638:1695" placeholder="SELECT * FRO..kunden..." />
-                <marker date="1436345128737" expanded="true" signature="2760:3394" placeholder="..." />
-                <marker date="1436345128737" expanded="true" signature="2816:2899" placeholder="SELECT * FRO..kunden_gcstarter..." />
-                <marker date="1436345128737" expanded="true" signature="3524:3891" placeholder="UPDATE kunde..." />
-                <marker date="1436345128737" expanded="true" signature="3931:3951" placeholder="SELECT * FRO..kunden..." />
-                <marker date="1436345128737" expanded="true" signature="4045:4083" placeholder="SELECT kunde..kunden_config..." />
-                <marker date="1436345128737" expanded="true" signature="4394:4493" placeholder="SELECT * FRO..kunden_config..." />
-                <marker date="1436345128737" expanded="true" signature="4531:4623" placeholder="SELECT * FRO..kunden_config..." />
-                <marker date="1436345128737" expanded="true" signature="4816:4838" placeholder="SELECT * FRO..benutzer..." />
-                <marker date="1436345128737" expanded="true" signature="5071:5334" placeholder="INSERT INTO ..." />
-                <marker date="1436345128737" expanded="true" signature="5455:5687" placeholder="INSERT INTO ..." />
-                <marker date="1436345128737" expanded="true" signature="5752:5921" placeholder="UPDATE statu..." />
-                <marker date="1436345128737" expanded="true" signature="5960:6180" placeholder="UPDATE statu..." />
-                <marker date="1436345128737" expanded="true" signature="6214:6340" placeholder="SELECT * FRO..status_kommentar..." />
-                <marker date="1436345128737" expanded="true" signature="6715:7801" placeholder="SELECT a.dat..arbeitstage..." />
+                <marker date="1459840407321" expanded="true" signature="2780:2824" placeholder="SELECT kunde... kunden" />
+                <marker date="1459840407321" expanded="true" signature="4047:4173" placeholder="INSERT INTO status_meldung... " />
+                <marker date="1459840407321" expanded="true" signature="4508:4645" placeholder="INSERT INTO kunden... " />
+                <marker date="1459840407321" expanded="true" signature="4937:5028" placeholder="UPDATE kunde... " />
+                <marker date="1459840407321" expanded="true" signature="5097:5178" placeholder="SELECT * FRO... kunden_config" />
+                <marker date="1459840407321" expanded="true" signature="5356:5438" placeholder="INSERT INTO kunden_config... " />
+                <marker date="1459840407321" expanded="true" signature="5356:5462" placeholder="INSERT INTO kunden_config... " />
+                <marker date="1459840407321" expanded="true" signature="5540:5624" placeholder="SELECT * FRO... kunden_gcstarter" />
+                <marker date="1459840407321" expanded="true" signature="5810:5900" placeholder="INSERT INTO kunden_gcstarter... " />
+                <marker date="1459840407321" expanded="true" signature="5810:5927" placeholder="INSERT INTO kunden_gcstarter... " />
+                <marker date="1459840407321" expanded="true" signature="6004:6087" placeholder="SELECT * FRO... kunden_gcstruct" />
+                <marker date="1459840407321" expanded="true" signature="6271:6359" placeholder="INSERT INTO kunden_gcstruct... " />
+                <marker date="1459840407321" expanded="true" signature="6271:6385" placeholder="INSERT INTO kunden_gcstruct... " />
               </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="app.js" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/scripts/app.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="58" column="10" selection-start="2093" selection-end="2093" vertical-scroll-proportion="0.0" vertical-offset="115" max-vertical-offset="2210">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="changelog.html" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/views/changelog.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="92" column="67" selection-start="4578" selection-end="4578" vertical-scroll-proportion="0.0" vertical-offset="923" max-vertical-offset="1802">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="main.css" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/styles/main.css">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="83" column="19" selection-start="1477" selection-end="1477" vertical-scroll-proportion="0.0" vertical-offset="488" max-vertical-offset="1530">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="overview.html" pinned="false" current="true" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/app/views/overview.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="419" column="0" selection-start="24363" selection-end="24363" vertical-scroll-proportion="0.43986255" vertical-offset="6739" max-vertical-offset="9401">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="stats.js" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/scripts/controllers/stats.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state line="61" column="0" selection-start="2825" selection-end="2830" vertical-scroll-proportion="0.0" vertical-offset="1037" max-vertical-offset="1139">
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
     </leaf>
   </component>
   <component name="FindManager">
@@ -147,45 +140,30 @@
       <setting name="OPEN_NEW_TAB" value="false" />
     </FindUsagesManager>
   </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
   <component name="IdeDocumentHistory">
-    <option name="changedFiles">
+    <option name="CHANGED_PATHS">
       <list>
-        <option value="$PROJECT_DIR$/app/views/main.html" />
-        <option value="$PROJECT_DIR$/package.json" />
-        <option value="$PROJECT_DIR$/app/bower_components/bootstrap/bower.json" />
-        <option value="$PROJECT_DIR$/app/scripts/controllers/main.js" />
-        <option value="$PROJECT_DIR$/app/views/calendar.html" />
-        <option value="$PROJECT_DIR$/bower.json" />
-        <option value="$USER_HOME$/Desktop/GAPS.xml.json" />
-        <option value="$USER_HOME$/Desktop/GAPS_Vers_taegl.xml.json" />
-        <option value="$USER_HOME$/Desktop/Tasks_Test/config/info/info.json" />
-        <option value="D:/Downloads/fehlerbericht.json" />
-        <option value="D:/Downloads/info.json" />
-        <option value="$USER_HOME$/Desktop/Tasks_Test/config/GAPS_Vers.xml" />
-        <option value="$PROJECT_DIR$/app/views/customers.html" />
-        <option value="$PROJECT_DIR$/app/scripts/controllers/config.js" />
-        <option value="$PROJECT_DIR$/app/scripts/controllers/customers.js" />
-        <option value="$PROJECT_DIR$/app/scripts/controllers/stats.js" />
-        <option value="$PROJECT_DIR$/app/views/stats.html" />
-        <option value="$PROJECT_DIR$/app/views/config.html" />
-        <option value="$PROJECT_DIR$/app/scripts/controllers/calendar.js" />
-        <option value="$PROJECT_DIR$/app/scripts/controllers/overview.js" />
         <option value="$PROJECT_DIR$/app/import.php" />
-        <option value="$PROJECT_DIR$/app/scripts/controllers/status.js" />
-        <option value="$PROJECT_DIR$/app/db.php" />
-        <option value="$PROJECT_DIR$/app/scripts/app.js" />
-        <option value="$PROJECT_DIR$/app/index.html" />
-        <option value="$PROJECT_DIR$/app/views/changelog.html" />
-        <option value="$PROJECT_DIR$/app/scripts/controllers/changelog.js" />
-        <option value="$PROJECT_DIR$/app/styles/main.css" />
-        <option value="$PROJECT_DIR$/app/views/overview.html" />
+        <option value="$PROJECT_DIR$/app/ImportController.php" />
       </list>
     </option>
   </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true">
+    <gruntfile path="$PROJECT_DIR$/Gruntfile.js" />
+  </component>
+  <component name="JsBuildToolPackageJson" detection-done="true">
+    <package-json value="$PROJECT_DIR$/package.json" />
+  </component>
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+  </component>
   <component name="PhpServers">
-    <option name="servers">
-      <server host="localhost" name="localhost" use_path_mappings="true" />
-    </option>
+    <servers>
+      <server host="localhost" id="241c5460-0f2f-4546-84ee-dc65d34fae3f" name="localhost" use_path_mappings="true" />
+    </servers>
   </component>
   <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" interpreter_name="PHP 5.4.7">
     <include_path>
@@ -196,10 +174,10 @@
     </include_path>
   </component>
   <component name="ProjectFrameBounds">
-    <option name="x" value="-1928" />
-    <option name="y" value="506" />
-    <option name="width" value="1937" />
-    <option name="height" value="1216" />
+    <option name="x" value="-2568" />
+    <option name="y" value="175" />
+    <option name="width" value="2576" />
+    <option name="height" value="1456" />
   </component>
   <component name="ProjectInspectionProfilesVisibleTreeState">
     <entry key="Project Default">
@@ -231,7 +209,7 @@
     <option name="STATE" value="0" />
   </component>
   <component name="ProjectView">
-    <navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
+    <navigator currentView="ProjectPane" proportions="" version="1">
       <flattenPackages />
       <showMembers />
       <showModules />
@@ -241,8 +219,11 @@
       <autoscrollToSource />
       <autoscrollFromSource />
       <sortByType />
+      <manualOrder />
+      <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
+      <pane id="Scratches" />
       <pane id="Scope" />
       <pane id="ProjectPane">
         <subPane>
@@ -259,7 +240,7 @@
             </PATH_ELEMENT>
             <PATH_ELEMENT>
               <option name="myItemId" value="Fehlerbericht" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+              <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
             </PATH_ELEMENT>
           </PATH>
           <PATH>
@@ -269,87 +250,11 @@
             </PATH_ELEMENT>
             <PATH_ELEMENT>
               <option name="myItemId" value="Fehlerbericht" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+              <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
               <option name="myItemId" value="app" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Fehlerbericht" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Fehlerbericht" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="app" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="views" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Fehlerbericht" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Fehlerbericht" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="app" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="styles" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Fehlerbericht" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Fehlerbericht" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="app" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="scripts" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Fehlerbericht" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Fehlerbericht" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="app" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="scripts" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="controllers" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+              <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
             </PATH_ELEMENT>
           </PATH>
         </subPane>
@@ -358,14 +263,14 @@
   </component>
   <component name="PropertiesComponent">
     <property name="options.splitter.main.proportions" value="0.3" />
-    <property name="options.lastSelected" value="Settings.JavaScript.Linters.JSHint" />
-    <property name="last_opened_file_path" value="D:/dev/msysgit/cmd/git.exe" />
+    <property name="options.lastSelected" value="Configurable.PHP.Servers" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/../GcPortal" />
     <property name="options.splitter.details.proportions" value="0.2" />
     <property name="options.searchVisible" value="true" />
     <property name="WebServerToolWindowFactoryState" value="false" />
     <property name="LayoutCode.rearrangeEntriesHTML" value="false" />
     <property name="LayoutCode.rearrangeEntriesJavaScript" value="false" />
-    <property name="FullScreen" value="false" />
+    <property name="FullScreen" value="true" />
     <property name="LayoutCode.rearrangeEntriesPHP" value="false" />
     <property name="dynamic.classpath" value="false" />
     <property name="SearchEverywhereHistory" value="$" />
@@ -373,9 +278,18 @@
     <property name="recentsLimit" value="5" />
     <property name="LayoutCode.rearrangeEntriesPlain text" value="false" />
     <property name="LayoutCode.rearrangeEntriesXML" value="false" />
+    <property name="settings.editor.selected.configurable" value="SQL Dialects" />
+    <property name="settings.editor.splitter.proportion" value="0.2" />
+    <property name="full.screen.before.presentation.mode" value="true" />
+    <property name="javascript.nodejs.core.library.configured.version" value="0.12.2" />
+    <property name="js-jscs-nodeInterpreter" value="D:\dev\nodejs\node.exe" />
   </component>
   <component name="RecentsManager">
+    <key name="MoveFile.RECENT_KEYS">
+      <recent name="D:\Projekte\GlobalCube\Fehlerbericht\app" />
+    </key>
     <key name="CopyFile.RECENT_KEYS">
+      <recent name="D:\Projekte\GlobalCube\Fehlerbericht\app" />
       <recent name="D:\Projekte\GlobalCube\Fehlerbericht\app\views" />
       <recent name="D:\Projekte\GlobalCube\Fehlerbericht\app\scripts\controllers" />
     </key>
@@ -387,31 +301,51 @@
       <ConfigurationWrapper RunnerId="PhpRunner" />
       <method />
     </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerKarma" factoryName="Karma" config-file="">
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
+      <method />
+    </configuration>
+    <configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" working-dir="">
+      <method />
+    </configuration>
     <configuration default="true" type="PHPUnitRunConfigurationType" factoryName="PHPUnit">
       <TestRunner />
       <method />
     </configuration>
-    <configuration default="true" type="JavaScriptTestRunnerKarma" factoryName="Karma" singleton="true" config-file="">
-      <envs />
+    <configuration default="true" type="PhpBehatConfigurationType" factoryName="Behat">
+      <BehatRunner />
       <method />
     </configuration>
     <configuration default="true" type="PhpLocalRunConfigurationType" factoryName="PHP Console">
       <method />
     </configuration>
-    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug" singleton="true">
+    <configuration default="true" type="PhpUnitRemoteRunConfigurationType" factoryName="PHPUnit on Server" server_id="a1abbac4-cd22-4815-a449-74c0820d3842" server_name="localhost">
       <method />
     </configuration>
-    <configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" working-dir="">
-      <browser start="false" url="" with-js-debugger="false" />
+    <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
       <method />
     </configuration>
-    <configuration default="true" type="PhpUnitRemoteRunConfigurationType" factoryName="PHPUnit on Server" server_id="a1abbac4-cd22-4815-a449-74c0820d3842" server_name="localhost">
+    <configuration default="true" type="js.build_tools.npm" factoryName="npm">
+      <command value="run-script" />
+      <scripts />
+      <node-interpreter value="project" />
+      <envs />
       <method />
     </configuration>
-    <configuration default="true" type="com.intellij.persistence.run.ConsoleRunConfigurationType" factoryName="Query Language Console">
-      <option name="VM_PARAMETERS" value="" />
-      <option name="USER_CFG_CLASS" />
-      <option name="CONTEXT_PROVIDER" />
+    <configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>DIRECTORY</test-kind>
+      <test-directory />
+      <recursive>false</recursive>
       <method />
     </configuration>
     <list size="1">
@@ -423,376 +357,499 @@
       </list>
     </recent_temporary>
   </component>
-  <component name="ShelveChangesManager" show_recycled="false" />
-  <component name="SvnConfiguration" maxAnnotateRevisions="500" myUseAcceleration="nothing" myAutoUpdateAfterCommit="false" cleanupOnStartRun="false" SSL_PROTOCOLS="all">
-    <option name="USER" value="" />
-    <option name="PASSWORD" value="" />
-    <option name="mySSHConnectionTimeout" value="30000" />
-    <option name="mySSHReadTimeout" value="30000" />
-    <option name="LAST_MERGED_REVISION" />
-    <option name="MERGE_DRY_RUN" value="false" />
-    <option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
-    <option name="UPDATE_LOCK_ON_DEMAND" value="false" />
-    <option name="IGNORE_SPACES_IN_MERGE" value="false" />
-    <option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" />
-    <option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
-    <option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
-    <option name="FORCE_UPDATE" value="false" />
-    <option name="IGNORE_EXTERNALS" value="false" />
-    <myIsUseDefaultProxy>false</myIsUseDefaultProxy>
+  <component name="ShelveChangesManager" show_recycled="false">
+    <option name="remove_strategy" value="false" />
+  </component>
+  <component name="SvnConfiguration" myUseAcceleration="nothing">
+    <configuration />
   </component>
   <component name="TaskManager">
     <task active="true" id="Default" summary="Default task">
       <changelist id="e6a1298f-f559-449e-a74b-e7d36fe3b7cd" name="Default" comment="" />
       <created>1405605327285</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
       <updated>1405605327285</updated>
+      <workItem from="1459760119124" duration="774000" />
+      <workItem from="1459760908455" duration="7849000" />
     </task>
     <servers />
   </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="8623000" />
+  </component>
   <component name="ToolWindowManager">
-    <frame x="-1928" y="506" width="1937" height="1216" extended-state="0" />
+    <frame x="-2568" y="175" width="2576" height="1456" extended-state="6" />
     <editor active="true" />
     <layout>
-      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.1534296" sideWeight="0.4997397" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
-      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.15200417" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
-      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.1534296" sideWeight="0.5002603" order="7" side_tool="true" content_ui="tabs" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32911393" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
-      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32911393" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
-      <window_info id="Command Line Tools Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32911393" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.09340223" sideWeight="0.5" order="3" side_tool="false" content_ui="combo" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Grunt " active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17371601" sideWeight="0.504372" order="10" side_tool="true" content_ui="tabs" />
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.07114468" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32779455" sideWeight="0.49841017" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="npm" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17371601" sideWeight="0.49562797" order="9" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="true" content_ui="tabs" />
+      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Command Line Tools Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32911393" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32911393" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
     </layout>
+    <layout-to-restore>
+      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17749244" sideWeight="0.5026911" order="8" side_tool="true" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Command Line Tools Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32911393" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
+      <window_info id="npm" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32911393" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.17418772" sideWeight="0.49730894" order="10" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.13155803" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Grunt " active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.0727345" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32851985" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="true" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+    </layout-to-restore>
   </component>
   <component name="Vcs.Log.UiProperties">
     <option name="RECENTLY_FILTERED_USER_GROUPS">
       <collection />
     </option>
+    <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
+      <collection />
+    </option>
   </component>
   <component name="VcsContentAnnotationSettings">
     <option name="myLimit" value="2678400000" />
   </component>
-  <component name="VcsManagerConfiguration">
-    <option name="myTodoPanelSettings">
-      <TodoPanelSettings />
-    </option>
-  </component>
   <component name="XDebuggerManager">
     <breakpoint-manager />
+    <watches-manager />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/app/index.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="64" column="41" selection-start="2338" selection-end="2338" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="2040" />
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/app/views/overview.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="6" column="0" selection-start="483" selection-end="483" vertical-scroll-proportion="0.0" vertical-offset="102" max-vertical-offset="255" />
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/overview.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="23" column="43" selection-start="709" selection-end="714" vertical-scroll-proportion="0.0" vertical-offset="391" max-vertical-offset="561" />
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/app/views/main.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="12" column="20" selection-start="649" selection-end="657" vertical-scroll-proportion="0.0" vertical-offset="204" max-vertical-offset="1173" />
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/main.js">
+    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/tickets.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="24" column="49" selection-start="568" selection-end="586" vertical-scroll-proportion="0.0" vertical-offset="948" max-vertical-offset="1870" />
+        <state relative-caret-position="0">
+          <caret line="24" column="49" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/scripts/app.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="31" column="15" selection-start="697" selection-end="697" vertical-scroll-proportion="0.0" vertical-offset="527" max-vertical-offset="663" />
+        <state relative-caret-position="0">
+          <caret line="31" column="15" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/index.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="64" column="41" selection-start="2336" selection-end="2336" vertical-scroll-proportion="0.0" vertical-offset="923" max-vertical-offset="2023" />
+        <state relative-caret-position="0">
+          <caret line="64" column="41" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/views/overview.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="9" column="0" selection-start="492" selection-end="492" vertical-scroll-proportion="0.0" vertical-offset="153" max-vertical-offset="255" />
+        <state relative-caret-position="0">
+          <caret line="9" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/scripts/controllers/overview.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="23" column="43" selection-start="709" selection-end="714" vertical-scroll-proportion="0.0" vertical-offset="391" max-vertical-offset="561" />
+        <state relative-caret-position="0">
+          <caret line="23" column="43" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/views/main.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="12" column="20" selection-start="649" selection-end="657" vertical-scroll-proportion="0.0" vertical-offset="204" max-vertical-offset="1173" />
+        <state relative-caret-position="0">
+          <caret line="12" column="20" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/main.js">
+    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/tickets.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="24" column="49" selection-start="568" selection-end="586" vertical-scroll-proportion="0.0" vertical-offset="948" max-vertical-offset="1870" />
+        <state relative-caret-position="0">
+          <caret line="24" column="49" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/scripts/app.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="31" column="15" selection-start="697" selection-end="697" vertical-scroll-proportion="0.0" vertical-offset="527" max-vertical-offset="663" />
+        <state relative-caret-position="0">
+          <caret line="31" column="15" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/index.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="64" column="41" selection-start="2336" selection-end="2336" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="2023" />
+        <state relative-caret-position="0">
+          <caret line="64" column="41" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/views/overview.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="9" column="0" selection-start="492" selection-end="492" vertical-scroll-proportion="0.0" vertical-offset="153" max-vertical-offset="255" />
+        <state relative-caret-position="0">
+          <caret line="9" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/scripts/controllers/overview.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="23" column="43" selection-start="709" selection-end="714" vertical-scroll-proportion="0.0" vertical-offset="391" max-vertical-offset="561" />
+        <state relative-caret-position="0">
+          <caret line="23" column="43" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/views/main.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="12" column="20" selection-start="649" selection-end="657" vertical-scroll-proportion="0.0" vertical-offset="204" max-vertical-offset="1173" />
+        <state relative-caret-position="0">
+          <caret line="12" column="20" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/main.js">
+    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/tickets.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="24" column="49" selection-start="568" selection-end="586" vertical-scroll-proportion="0.0" vertical-offset="948" max-vertical-offset="1870" />
+        <state relative-caret-position="0">
+          <caret line="24" column="49" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/scripts/app.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="31" column="15" selection-start="697" selection-end="697" vertical-scroll-proportion="0.0" vertical-offset="527" max-vertical-offset="663" />
-      </provider>
-    </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/phpstorm.jar!/resources/html5-schema/block.rnc">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="198" column="22" selection-start="4044" selection-end="4044" vertical-scroll-proportion="0.46529284" vertical-offset="2937" max-vertical-offset="3859" />
+        <state relative-caret-position="0">
+          <caret line="31" column="15" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/phpstorm.jar!/resources/html5-schema/block.rnc" />
     <entry file="file://$PROJECT_DIR$/.travis.yml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="610" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/.jshintrc">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="610" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/.gitattributes">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="610" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/.editorconfig">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="610" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/.bowerrc">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="610" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/bower_components/bootstrap/bower.json">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="22" column="50" selection-start="642" selection-end="642" vertical-scroll-proportion="0.0" vertical-offset="164" max-vertical-offset="748" />
+        <state relative-caret-position="0">
+          <caret line="22" column="50" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/bower_components/fullcalendar/bower.json">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="2" column="19" selection-start="42" selection-end="47" vertical-scroll-proportion="-1.3076923" vertical-offset="0" max-vertical-offset="731" />
+        <state relative-caret-position="0">
+          <caret line="2" column="19" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://D:/Downloads/fehlerbericht.json">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="1709" column="20" selection-start="77156" selection-end="77156" vertical-scroll-proportion="-0.65384614" vertical-offset="29036" max-vertical-offset="29648" />
+        <state relative-caret-position="0">
+          <caret line="1709" column="20" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
     <entry file="file://D:/Downloads/info.json">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="28050" column="6" selection-start="819398" selection-end="819398" vertical-scroll-proportion="-6.1153846" vertical-offset="476691" max-vertical-offset="477275" />
+        <state relative-caret-position="0">
+          <caret line="28050" column="6" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/main.js">
+    <entry file="file://$PROJECT_DIR$/Gruntfile.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="11" column="0" selection-start="244" selection-end="244" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="357" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/import.bat">
+    <entry file="file://$PROJECT_DIR$/package.json">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="785" />
+        <state relative-caret-position="0">
+          <caret line="29" column="41" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/customers.js">
+    <entry file="file://$PROJECT_DIR$/bower.json">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="14" column="23" selection-start="376" selection-end="376" vertical-scroll-proportion="0.0" vertical-offset="68" max-vertical-offset="1632" />
+        <state relative-caret-position="0">
+          <caret line="17" column="27" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Gruntfile.js">
+    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/calendar.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="-1.299363" vertical-offset="1020" max-vertical-offset="7106" />
+        <state relative-caret-position="0">
+          <caret line="16" column="58" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/package.json">
+    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/stats.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="29" column="41" selection-start="948" selection-end="948" vertical-scroll-proportion="0.6192358" vertical-offset="23" max-vertical-offset="782" />
+        <state relative-caret-position="0">
+          <caret line="61" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/views/stats.html">
+    <entry file="file://$PROJECT_DIR$/app/styles/main.css">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="19" column="6" selection-start="668" selection-end="668" vertical-scroll-proportion="0.0" vertical-offset="323" max-vertical-offset="425" />
+        <state relative-caret-position="0">
+          <caret line="30" column="32" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/views/customers.html">
+    <entry file="file://$PROJECT_DIR$/app/robots.txt">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="29" column="18" selection-start="859" selection-end="1355" vertical-scroll-proportion="0.0" vertical-offset="102" max-vertical-offset="4573" />
+        <state relative-caret-position="0">
+          <caret line="3" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/bower.json">
+    <entry file="file://$PROJECT_DIR$/app/views/customers.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="17" column="27" selection-start="541" selection-end="541" vertical-scroll-proportion="0.38076416" vertical-offset="0" max-vertical-offset="759" />
+        <state relative-caret-position="0">
+          <caret line="29" column="18" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/config.js">
+    <entry file="file://$PROJECT_DIR$/app/import.bat">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="3" column="60" selection-start="110" selection-end="110" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1037" />
+        <state relative-caret-position="0">
+          <caret line="3" column="27" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/views/main.html">
+    <entry file="file://$PROJECT_DIR$/app/backup.php">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="12" column="20" selection-start="649" selection-end="657" vertical-scroll-proportion="-0.65384614" vertical-offset="187" max-vertical-offset="1173" />
+        <state relative-caret-position="0">
+          <caret line="23" column="10" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/views/calendar.html">
+    <entry file="file://$PROJECT_DIR$/app/scripts/app.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="20" selection-start="20" selection-end="20" vertical-scroll-proportion="-0.0" vertical-offset="0" max-vertical-offset="136" />
+        <state relative-caret-position="0">
+          <caret line="58" column="10" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/calendar.js">
+    <entry file="file://$PROJECT_DIR$/app/views/main.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="16" column="58" selection-start="530" selection-end="530" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="442" />
+        <state relative-caret-position="0">
+          <caret line="12" column="20" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/views/config.html">
+    <entry file="file://$PROJECT_DIR$/app/views/calendar.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="32" column="45" selection-start="1401" selection-end="1401" vertical-scroll-proportion="0.0" vertical-offset="544" max-vertical-offset="850" />
+        <state relative-caret-position="0">
+          <caret line="0" column="20" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/import.php">
+    <entry file="file://$PROJECT_DIR$/app/index.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="161" column="14" selection-start="5783" selection-end="5783" vertical-scroll-proportion="0.0" vertical-offset="1275" max-vertical-offset="3179">
-          <folding>
-            <marker date="1436342278387" expanded="true" signature="2565:2609" placeholder="SELECT kunde..kunden..." />
-            <marker date="1436342278387" expanded="true" signature="5582:5719" placeholder="INSERT INTO ..." />
-            <marker date="1436342278387" expanded="true" signature="5981:6072" placeholder="UPDATE kunde..." />
-            <marker date="1436342278387" expanded="true" signature="5981:6016" placeholder="UPDATE kunde..." />
-            <marker date="1436342278387" expanded="true" signature="5981:6017" placeholder="UPDATE kunde..." />
-            <marker date="1436342278387" expanded="true" signature="5981:6043" placeholder="UPDATE kunde..." />
-          </folding>
+        <state relative-caret-position="0">
+          <caret line="161" column="54" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/stats.js">
+    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/customers.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="61" column="0" selection-start="2825" selection-end="2830" vertical-scroll-proportion="0.0" vertical-offset="234" max-vertical-offset="1139">
-          <folding />
+        <state relative-caret-position="0">
+          <caret line="72" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/scripts/controllers/overview.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="134" column="42" selection-start="4291" selection-end="4291" vertical-scroll-proportion="0.0" vertical-offset="1887" max-vertical-offset="7956">
-          <folding />
+        <state relative-caret-position="0">
+          <caret line="447" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/db.php">
+    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/tickets.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="71" column="0" selection-start="2741" selection-end="2741" vertical-scroll-proportion="0.0" vertical-offset="714" max-vertical-offset="3655">
-          <folding>
-            <marker date="1436345128737" expanded="true" signature="653:946" placeholder="SELECT sm.*,..status_meldung..." />
-            <marker date="1436345128737" expanded="true" signature="1329:1464" placeholder="UPDATE kunde..." />
-            <marker date="1436345128737" expanded="true" signature="1638:1695" placeholder="SELECT * FRO..kunden..." />
-            <marker date="1436345128737" expanded="true" signature="2760:3394" placeholder="..." />
-            <marker date="1436345128737" expanded="true" signature="2816:2899" placeholder="SELECT * FRO..kunden_gcstarter..." />
-            <marker date="1436345128737" expanded="true" signature="3524:3891" placeholder="UPDATE kunde..." />
-            <marker date="1436345128737" expanded="true" signature="3931:3951" placeholder="SELECT * FRO..kunden..." />
-            <marker date="1436345128737" expanded="true" signature="4045:4083" placeholder="SELECT kunde..kunden_config..." />
-            <marker date="1436345128737" expanded="true" signature="4394:4493" placeholder="SELECT * FRO..kunden_config..." />
-            <marker date="1436345128737" expanded="true" signature="4531:4623" placeholder="SELECT * FRO..kunden_config..." />
-            <marker date="1436345128737" expanded="true" signature="4816:4838" placeholder="SELECT * FRO..benutzer..." />
-            <marker date="1436345128737" expanded="true" signature="5071:5334" placeholder="INSERT INTO ..." />
-            <marker date="1436345128737" expanded="true" signature="5455:5687" placeholder="INSERT INTO ..." />
-            <marker date="1436345128737" expanded="true" signature="5752:5921" placeholder="UPDATE statu..." />
-            <marker date="1436345128737" expanded="true" signature="5960:6180" placeholder="UPDATE statu..." />
-            <marker date="1436345128737" expanded="true" signature="6214:6340" placeholder="SELECT * FRO..status_kommentar..." />
-            <marker date="1436345128737" expanded="true" signature="6715:7801" placeholder="SELECT a.dat..arbeitstage..." />
-          </folding>
+        <state relative-caret-position="0">
+          <caret line="109" column="34" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/index.html">
+    <entry file="file://$PROJECT_DIR$/app/views/tickets.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="76" column="15" selection-start="2011" selection-end="2011" vertical-scroll-proportion="0.0" vertical-offset="566" max-vertical-offset="3009">
-          <folding>
-            <marker date="1436345457746" expanded="true" signature="2155:2308" placeholder="..." />
-          </folding>
+        <state relative-caret-position="0">
+          <caret line="231" column="128" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/views/stats.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="1" column="125" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/scripts/controllers/changelog.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="42" column="14" selection-start="1524" selection-end="1524" vertical-scroll-proportion="0.0" vertical-offset="153" max-vertical-offset="1309">
-          <folding />
+        <state relative-caret-position="0">
+          <caret line="33" column="45" selection-start-line="33" selection-start-column="45" selection-end-line="33" selection-end-column="45" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/scripts/app.js">
+    <entry file="file://$PROJECT_DIR$/app/views/overview.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="58" column="10" selection-start="2093" selection-end="2093" vertical-scroll-proportion="0.0" vertical-offset="115" max-vertical-offset="2210">
-          <folding />
+        <state relative-caret-position="0">
+          <caret line="222" column="0" selection-start-line="222" selection-start-column="0" selection-end-line="222" selection-end-column="0" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/app/views/changelog.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="92" column="67" selection-start="4578" selection-end="4578" vertical-scroll-proportion="0.0" vertical-offset="923" max-vertical-offset="1802">
-          <folding />
+        <state relative-caret-position="0">
+          <caret line="103" column="13" selection-start-line="103" selection-start-column="13" selection-end-line="103" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/styles/main.css">
+    <entry file="file://$PROJECT_DIR$/app/scripts/controllers/config.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="83" column="19" selection-start="1477" selection-end="1477" vertical-scroll-proportion="0.0" vertical-offset="488" max-vertical-offset="1530">
-          <folding />
+        <state relative-caret-position="0">
+          <caret line="30" column="69" selection-start-line="30" selection-start-column="69" selection-end-line="30" selection-end-column="69" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/views/overview.html">
+    <entry file="file://$PROJECT_DIR$/app/views/config.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="419" column="0" selection-start="24363" selection-end="24363" vertical-scroll-proportion="0.43986255" vertical-offset="6739" max-vertical-offset="9401">
+        <state relative-caret-position="0">
+          <caret line="22" column="37" selection-start-line="22" selection-start-column="37" selection-end-line="22" selection-end-column="37" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/db.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="189">
+          <caret line="7" column="50" selection-start-line="7" selection-start-column="15" selection-end-line="7" selection-end-column="50" />
+          <folding>
+            <marker date="1458731689849" expanded="true" signature="718:906" placeholder="SELECT sm.*,... status_meldung" />
+            <marker date="1458731689849" expanded="true" signature="1507:1598" placeholder="SELECT sk.* status_kommentar" />
+            <marker date="1458731689849" expanded="true" signature="1682:1850" placeholder="SELECT sk.* status_kommentar" />
+            <marker date="1458731689849" expanded="true" signature="2009:2144" placeholder="UPDATE kunde... " />
+            <marker date="1458731689849" expanded="true" signature="2318:2375" placeholder="SELECT * FRO... kunden" />
+            <marker date="1458731689849" expanded="true" signature="3152:3264" placeholder="UPDATE kunde... " />
+            <marker date="1458731689849" expanded="true" signature="3485:3568" placeholder="SELECT * FRO... kunden_gcstarter" />
+            <marker date="1458731689849" expanded="true" signature="4015:4097" placeholder="SELECT * FRO... kunden_gcstruct" />
+            <marker date="1458731689849" expanded="true" signature="4417:4784" placeholder="UPDATE kunde... " />
+            <marker date="1458731689849" expanded="true" signature="4824:4844" placeholder="SELECT * FRO... kunden" />
+            <marker date="1458731689849" expanded="true" signature="4994:5464" placeholder="INSERT INTO tickets... " />
+            <marker date="1458731689849" expanded="true" signature="5501:6020" placeholder="UPDATE ticke... " />
+            <marker date="1458731689849" expanded="true" signature="6054:6075" placeholder="SELECT * FRO... tickets" />
+            <marker date="1458731689849" expanded="true" signature="6169:6207" placeholder="SELECT kunde... kunden_config" />
+            <marker date="1458731689849" expanded="true" signature="6518:6617" placeholder="SELECT * FRO... kunden_config" />
+            <marker date="1458731689849" expanded="true" signature="6655:6747" placeholder="SELECT * FRO... kunden_config" />
+            <marker date="1458731689849" expanded="true" signature="6940:6962" placeholder="SELECT * FRO... benutzer" />
+            <marker date="1458731689849" expanded="true" signature="7229:7492" placeholder="INSERT INTO status_kommentar... " />
+            <marker date="1458731689849" expanded="true" signature="7613:7845" placeholder="INSERT INTO status_kommentar... " />
+            <marker date="1458731689849" expanded="true" signature="7910:8079" placeholder="UPDATE statu... " />
+            <marker date="1458731689849" expanded="true" signature="8118:8338" placeholder="UPDATE statu... " />
+            <marker date="1458731689849" expanded="true" signature="8372:8498" placeholder="SELECT * FRO... status_kommentar" />
+            <marker date="1458731689849" expanded="true" signature="9046:10209" placeholder="SELECT DISTI... arbeitstage" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/import.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="513">
+          <caret line="19" column="12" selection-start-line="19" selection-start-column="12" selection-end-line="19" selection-end-column="12" />
           <folding />
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/app/ImportController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="663">
+          <caret line="129" column="49" selection-start-line="129" selection-start-column="49" selection-end-line="129" selection-end-column="49" />
+          <folding>
+            <marker date="1459840407321" expanded="true" signature="2780:2824" placeholder="SELECT kunde... kunden" />
+            <marker date="1459840407321" expanded="true" signature="4047:4173" placeholder="INSERT INTO status_meldung... " />
+            <marker date="1459840407321" expanded="true" signature="4508:4645" placeholder="INSERT INTO kunden... " />
+            <marker date="1459840407321" expanded="true" signature="4937:5028" placeholder="UPDATE kunde... " />
+            <marker date="1459840407321" expanded="true" signature="5097:5178" placeholder="SELECT * FRO... kunden_config" />
+            <marker date="1459840407321" expanded="true" signature="5356:5438" placeholder="INSERT INTO kunden_config... " />
+            <marker date="1459840407321" expanded="true" signature="5356:5462" placeholder="INSERT INTO kunden_config... " />
+            <marker date="1459840407321" expanded="true" signature="5540:5624" placeholder="SELECT * FRO... kunden_gcstarter" />
+            <marker date="1459840407321" expanded="true" signature="5810:5900" placeholder="INSERT INTO kunden_gcstarter... " />
+            <marker date="1459840407321" expanded="true" signature="5810:5927" placeholder="INSERT INTO kunden_gcstarter... " />
+            <marker date="1459840407321" expanded="true" signature="6004:6087" placeholder="SELECT * FRO... kunden_gcstruct" />
+            <marker date="1459840407321" expanded="true" signature="6271:6359" placeholder="INSERT INTO kunden_gcstruct... " />
+            <marker date="1459840407321" expanded="true" signature="6271:6385" placeholder="INSERT INTO kunden_gcstruct... " />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ScopeChooserConfigurable.UI">
+        <settings>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
   </component>
-</project>
-
+</project>

+ 247 - 0
app/ImportController.php

@@ -0,0 +1,247 @@
+<?php
+class ImportController
+{
+	public $fail;
+
+	private $dbh;
+	private $imap;
+
+	private $customers;
+	private $version;
+
+	private $currentErrorCount;
+
+
+	public function __construct ($database, $imap)
+	{
+		$this->dbh = new PDO($database['connect'], $database['user'], $database['password']);
+		$this->dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
+		$this->imap = $imap;
+
+		$this->loadCustomers();
+	}
+
+	public function Workflow ()
+	{
+		$this->connectToServer();
+		$this->importMails();
+		$this->closeConnection();
+	}
+
+
+	private function findAdditionalErrors ($fb, $whiteList)
+	{
+		$fb = str_replace("\r\`", "`", str_replace("\r\"", "\"", str_replace("\r\n", "", $fb)));
+		$report = json_decode($fb, true);
+
+		if (!$report) {
+			return addslashes($fb);
+		}
+
+		if ($whiteList) {
+			if (!isset($whiteList['Layer'])) $whiteList['Layer'] = array();
+			if (!isset($whiteList['Report'])) $whiteList['Report'] = array();
+			if (!isset($whiteList['User'])) $whiteList['User'] = array();
+		}
+
+		foreach ($report as $i => $log) {
+			if (preg_match("/\.bat$/", $log['Name'])) {
+				$report[$i]['Errors'][0] = htmlentities($report[$i]['Errors'][0]);
+				$report[$i]['Errors'][0] = preg_replace("/!! Bitte E-Mailadresse fuer Statusbericht angeben !!/im", "! Bitte E-Mailadresse fuer Statusbericht angeben !", $report[$i]['Errors'][0]);
+				$report[$i]['Errors'][0] = preg_replace("/!! SMTP-Konfiguration bitte anpassen !!/im", "! SMTP-Konfiguration bitte anpassen !", $report[$i]['Errors'][0]);
+				$count = 0;
+				$report[$i]['Errors'][0] = preg_replace("/(!![^\n]*!!)/im", "<b>$1</b>", $report[$i]['Errors'][0], -1, $count);
+				$count2 = 0;
+				$report[$i]['Errors'][0] = preg_replace("/\((\w{2}\d{4})\)( [^\r]*)/im", "<b><a href='http://rbs06/wiki/$1' target='_blank'>($1)</a>$2</b>", $report[$i]['Errors'][0], -1, $count2);
+				//die(print($log['Errors'][0]));
+				if ($count > 0 || $count2 > 0) {
+					$report[$i]['ErrorLevel'] = 2;
+					for ($j = 1; $j < $count; $j++) {
+						$report[$i]['Errors'][] = "";
+					}
+					$this->currentErrorCount += 1;
+				}
+			} else if ($whiteList && count($report[$i]['Errors']) > 0 && ($report[$i]['Type'] == 'Versand' || $report[$i]['Type'] == 'Portal')) {
+				$report[$i]['Errors2'] = array();
+				foreach ($report[$i]['Errors'] as $j => $e) {
+					if (in_array($e['Layer'], $whiteList['Layer']) || in_array($e['Report'], $whiteList['Report']) || in_array($e['User'], $whiteList['User'])) {
+						$report[$i]['Errors2'][] = $report[$i]['Errors'][$j];
+						unset($report[$i]['Errors'][$j]);
+					}
+				}
+				if (count($report[$i]['Errors']) == 0) {
+					$report[$i]['ErrorLevel'] = 3;
+					$this->currentErrorCount -= 1;
+				}
+			}
+		}
+		return addslashes(json_encode($report));
+	}
+
+	private function loadCustomers ()
+	{
+		$q = $this->dbh->query("SELECT kunde, whitelist, version FROM kunden");
+		$customerQuery = $q->fetchAll(PDO::FETCH_ASSOC);
+		$this->customers = array();
+		$this->version = array();
+		foreach ($customerQuery as $c) {
+			$this->customers[$c['kunde']] = json_decode(stripslashes($c['whitelist']), true);
+			$this->version[$c['kunde']] = $c['version'];
+		}
+	}
+
+	private function connectToServer ()
+	{
+		$this->fail = false;
+		$this->imap['connect'] = imap_open($this->imap['server'], $this->imap['user'], $this->imap['password']) or die("Could not open Mailbox - try again later!");
+		$this->imap['message_count'] = imap_num_msg($this->imap['connect']);
+		if ($this->imap['message_count'] > 40) {
+			$this->imap['message_count'] = 40;
+			$this->fail = true;
+		}
+	}
+
+	private function importMails ()
+	{
+		for ($m = 1; $m <= $this->imap['message_count']; $m++) {
+			$this->currentErrorCount = 0;
+			$header = imap_headerinfo($this->imap['connect'], $m);
+			$rec = explode(";", $header->Subject);
+
+			if (count($rec) < 5) continue;
+			if (count($rec) < 6) {
+				$rec[] = "";
+			}
+
+			$attachments = $this->getAttachments($m, @$this->customers[$rec[0]]);
+
+			$rec[] = $attachments['fehlerbericht'];
+			$rec[4] += $this->currentErrorCount;
+
+			/** @noinspection SqlInsertValues */
+			$insertQuery = "INSERT INTO status_meldung (kunde, start, ende, datum, anzahl, aufgabe, fehlerbericht) VALUES ('" . implode("','", $rec) . "')";
+			$c = $this->dbh->query($insertQuery);
+			if ($c) {
+				imap_delete($this->imap['connect'], $m);
+			} else {
+				if (strtotime($header->MailDate) < strtotime("-5 days")) {
+					imap_delete($this->imap['connect'], $m);
+				}
+				print_r($this->dbh->errorInfo());
+			}
+
+
+			if (!isset($customers[$rec[0]])) {
+				$this->dbh->query("INSERT INTO kunden (kunde, start_soll, ende_soll, erster_status, system) VALUES ('{$rec[0]}', '{$rec[1]}', '{$rec[2]}', '{$rec[3]}', '?')");
+				$customers[$rec[0]] = array();
+			}
+
+			$ver = "";
+			if (preg_match("/Version:\s*(\d{4}-\d{2}-\d{2})_?(\w*)?/", $attachments['fehlerbericht'], $ver) && (!isset($version[$rec[0]]) || $version[$rec[0]] != $ver[1])) {
+				$beta = ($ver[2] == "beta") ? '1' : '0';
+				$this->dbh->query("UPDATE kunden SET version = '{$ver[1]}', beta_version = '{$beta}' WHERE kunde = '{$rec[0]}'");
+			}
+
+			if ($attachments['info']) {
+				$q = $this->dbh->query("SELECT * FROM kunden_config WHERE kunde = '{$rec[0]}' ORDER BY datum DESC LIMIT 1");
+				$last = ($q && $q->rowCount() == 1) ? $q->fetch(PDO::FETCH_ASSOC) : false;
+				if (!$last || addslashes($last['info']) != $attachments['info']) {
+					$this->dbh->query("INSERT INTO kunden_config (kunde, datum, info) VALUES ('{$rec[0]}', '{$rec[3]}', '{$attachments['info']}')");
+				}
+			}
+
+			if ($attachments['starter']) {
+				$q = $this->dbh->query("SELECT * FROM kunden_gcstarter WHERE kunde = '{$rec[0]}' ORDER BY datum DESC LIMIT 1");
+				$last = ($q && $q->rowCount() == 1) ? $q->fetch(PDO::FETCH_ASSOC) : false;
+				if (!$last || addslashes($last['gcstarter']) != $attachments['starter']) {
+					$this->dbh->query("INSERT INTO kunden_gcstarter (kunde, datum, gcstarter) VALUES ('{$rec[0]}', '{$rec[3]}', '{$attachments['starter']}')");
+				}
+			}
+
+			if ($attachments['struct']) {
+				$q = $this->dbh->query("SELECT * FROM kunden_gcstruct WHERE kunde = '{$rec[0]}' ORDER BY datum DESC LIMIT 1");
+				$last = ($q && $q->rowCount() == 1) ? $q->fetch(PDO::FETCH_ASSOC) : false;
+				if (!$last || addslashes($last['gcstruct']) != $attachments['struct']) {
+					$this->dbh->query("INSERT INTO kunden_gcstruct (kunde, datum, gcstruct) VALUES ('{$rec[0]}', '{$rec[3]}', '{$attachments['struct']}')");
+				}
+			}
+		}
+	}
+
+	private function closeConnection () {
+		imap_expunge($this->imap['connect']);
+		imap_close($this->imap['connect']);
+	}
+
+	private function getAttachments ($m, $customer = null)
+	{
+		$structure = imap_fetchstructure($this->imap['connect'], $m);
+		$attachments = array();
+		if (isset($structure->parts) && count($structure->parts)) {
+
+			for ($i = 0; $i < count($structure->parts); $i++) {
+
+				$attachments[$i] = array(
+					'is_attachment' => false,
+					'filename' => '',
+					'name' => '',
+					'attachment' => ''
+				);
+
+				if ($structure->parts[$i]->ifdparameters) {
+					foreach ($structure->parts[$i]->dparameters as $object) {
+						if (strtolower($object->attribute) == 'filename') {
+							$attachments[$i]['is_attachment'] = true;
+							$attachments[$i]['filename'] = $object->value;
+						}
+					}
+				}
+
+				if ($structure->parts[$i]->ifparameters) {
+					foreach ($structure->parts[$i]->parameters as $object) {
+						if (strtolower($object->attribute) == 'name') {
+							$attachments[$i]['is_attachment'] = true;
+							$attachments[$i]['name'] = $object->value;
+						}
+					}
+				}
+
+				if ($attachments[$i]['is_attachment']) {
+					$attachments[$i]['attachment'] = imap_fetchbody($this->imap['connect'], $m, $i + 1);
+					if ($structure->parts[$i]->encoding == 3) { // 3 = BASE64
+						$attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
+					} elseif ($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
+						$attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
+					}
+				}
+			}
+		}
+
+		$result = array(
+			'fehlerbericht' => 0,
+			'info' => 0,
+			'starter' => 0,
+			'struct' => 0
+		);
+
+		$result['fehlerbericht'] = addslashes(trim(imap_fetchbody($this->imap['connect'], $m, '1')));
+
+		foreach ($attachments as $key => $attachment) {
+			if ($attachment['is_attachment']) {
+				if ($attachment['filename'] == "info.json") {
+					$result['info'] = addslashes($attachment['attachment']);
+				}
+				if ($attachment['filename'] == "gcstarter.json") {
+					$result['starter'] = addslashes($attachment['attachment']);
+				}
+				if ($attachment['filename'] == "gcstruct.json") {
+					$result['struct'] = addslashes($attachment['attachment']);
+				}
+				if ($attachment['filename'] == "fehlerbericht.json") {
+					$result['fehlerbericht'] = $this->findAdditionalErrors($attachment['attachment'], $customer);
+				}
+			}
+		}
+		return $result;
+	}
+}

+ 5 - 0
app/backup.bat

@@ -0,0 +1,5 @@
+@echo off
+cd /d "%~dp0"
+set PHP="D:\dev\xampp\php"
+
+%PHP%\php backup.php

+ 29 - 0
app/backup.php

@@ -0,0 +1,29 @@
+<?php
+header('Access-Control-Allow-Origin: *');
+header('Cache-Control: no-cache, must-revalidate');
+header('Content-type: application/json');
+
+$datum = date("Y-m-d", strtotime("-3 month"));
+
+$dbh = new PDO("mysql:host=localhost;dbname=tasks", "root", "gc01mysql");
+$dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
+
+echo "Daten ab {$datum} werden archiviert.\r\n";
+
+$insertQuery = "INSERT INTO status_meldung_historie SELECT * FROM status_meldung WHERE datum <= '{$datum}' ";
+$c = $dbh->query($insertQuery);
+
+if (!$c) {
+	echo $dbh->errorInfo();
+	die();
+}
+
+$deleteQuery = "DELETE FROM status_meldung WHERE datum <= '{$datum}' ";
+$c = $dbh->query($deleteQuery);
+
+if (!$c) {
+	echo $dbh->errorInfo();
+	die();
+}
+
+echo "Erfolgreich abgeschlossen.\r\n";

+ 64 - 15
app/db.php

@@ -9,24 +9,43 @@ $dbh = new PDO("mysql:host=localhost;dbname=tasks", "root", "gc01mysql");
 $dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
 
 $data = json_decode(file_get_contents('php://input'), true);
+$result = array();
 
 switch ($_REQUEST['a']) {
 	case 'fehlerbericht':
 		$kunde = $_REQUEST['kunde'];
 		$datum = $_REQUEST['datum'];
-		$start = $_REQUEST['start'];
+		$start = ($_REQUEST['start'] == "null") ? '00:00:00' : $_REQUEST['start'];
 
 		if (count($data) > 0) {
 
 		} else {
-			$q = $dbh->query("SELECT sm.*, ifnull(sk.benutzer, '') as benutzer, k.whitelist FROM status_meldung sm
+			$q = $dbh->query("SELECT sm.*, k.whitelist FROM status_meldung sm
 			 				  INNER JOIN kunden k USING (kunde)
-			 				  LEFT JOIN status_kommentar sk USING (datum, kunde, start)
 							  WHERE sm.datum = '{$datum}' AND sm.kunde = '{$kunde}' AND sm.start = '{$start}' LIMIT 1");
 			$result = $q->fetch(PDO::FETCH_ASSOC);
-			$result['fehlerbericht'] = str_replace("\r\`", "`", str_replace("\r\"", "\"", str_replace("\r\n", "", $result['fehlerbericht'])));
-			$result['fehlerbericht'] = json_decode($result['fehlerbericht'], true);
-			$result['whitelist'] = json_decode(stripslashes($result['whitelist']), true);
+			if ($result) {
+				$result['fehlerbericht'] = str_replace("\r\`", "`", str_replace("\r\"", "\"", str_replace("\r\n", "", $result['fehlerbericht'])));
+				$fehlerbericht = json_decode($result['fehlerbericht'], true);
+				if ($fehlerbericht) {
+					$result['fehlerbericht'] = $fehlerbericht;
+				}
+
+				$result['whitelist'] = (isset($result['whitelist'])) ? json_decode(stripslashes($result['whitelist']), true) : null;
+			} else {
+				$result = array();
+			}
+			if (isset($result['kommentar_id']) && $result['kommentar_id'] > 0) {
+				$q = $dbh->query("SELECT sk.* FROM status_kommentar sk
+							      WHERE sk.id = '{$result['kommentar_id']}' ");
+				$comment = $q->fetch(PDO::FETCH_ASSOC);	
+			} else {
+				$q = $dbh->query("SELECT sk.* FROM status_kommentar sk
+							      WHERE sk.datum = '{$datum}' AND sk.kunde = '{$kunde}' AND sk.start = '{$start}' 
+								  ORDER BY cdate DESC LIMIT 1");
+				$comment = $q->fetch(PDO::FETCH_ASSOC);
+			}
+			$result['kommentar'] = ($comment) ? $comment : array();
 		}
 		break;
 
@@ -71,7 +90,7 @@ switch ($_REQUEST['a']) {
 		break;
 
 	case 'changelog':
-		$kunde = "Pichel Hartmannsdorf";
+		$kunde = "Entenmann";
 		$q = $dbh->query("SELECT * FROM kunden_gcstarter WHERE kunde = '{$kunde}' ORDER BY datum DESC LIMIT 1");
 		$result = $q->fetch(PDO::FETCH_ASSOC);
 		$r = json_decode($result['gcstarter'], true);
@@ -90,7 +109,12 @@ switch ($_REQUEST['a']) {
 				}
 			}
 		}
-		$result = array('Historie' => $byDate, 'Liste' => $list);
+
+		$q = $dbh->query("SELECT * FROM kunden_gcstruct WHERE kunde = '{$kunde}' ORDER BY datum DESC LIMIT 1");
+		$result = $q->fetch(PDO::FETCH_ASSOC);
+		$struct = json_decode($result['gcstruct'], true);
+
+		$result = array('Historie' => $byDate, 'Liste' => $list, 'GCStruct' => $struct);
 
 		break;
 	case 'kunden':
@@ -105,10 +129,32 @@ switch ($_REQUEST['a']) {
 		}
 		$q = $dbh->query("SELECT * FROM kunden");
 		$result = $q->fetchAll(PDO::FETCH_ASSOC);
+		foreach ($result as $i => $r) {
+			$result[$i]['whitelist'] = json_decode(stripslashes($r['whitelist']), true);
+			$result[$i]['ort'] = utf8_decode($r['ort']);
+		}
+		break;
+
+	case 'tickets':
+		if (count($data) > 0) {
+			if ($data['id'] == '') {
+				$q = $dbh->exec("INSERT INTO tickets (datum, benutzer, kunde, kontakt, beschreibung, termin, dauer, status, prioritaet, fortschritt, kategorie, programm, kommentar)
+									VALUES ('{$data['datum']}', '{$data['benutzer']}', '{$data['kunde']}', '{$data['kontakt']}', '{$data['beschreibung']}', '{$data['termin']}', '{$data['dauer']}',
+										'{$data['status']}', '{$data['prioritaet']}', '{$data['fortschritt']}', '{$data['kategorie']}', '{$data['programm']}', '{$data['kommentar']}')");
+			} else {
+				$q = $dbh->exec("UPDATE tickets SET datum = '{$data['datum']}', benutzer = '{$data['benutzer']}', kunde = '{$data['kunde']}', kontakt = '{$data['kontakt']}',
+										beschreibung = '{$data['beschreibung']}', termin = '{$data['termin']}', dauer = '{$data['dauer']}',	status = '{$data['status']}',
+										prioritaet = '{$data['prioritaet']}', fortschritt = '{$data['fortschritt']}', kategorie = '{$data['kategorie']}', programm = '{$data['programm']}',
+										kommentar = '{$data['kommentar']}'
+								 WHERE id = '{$data['id']}' ");
+			}
+		}
+		$q = $dbh->query("SELECT * FROM tickets");
+		$result = $q->fetchAll(PDO::FETCH_ASSOC);
 		break;
 
 	case 'config':
-		$q = $dbh->query("SELECT kunde, datum FROM kunden_config");
+		$q = $dbh->query("SELECT kunde, datum FROM kunden_config ORDER BY 1, 2 DESC");
 		$result = array('options' => array());
 		while ($row = $q->fetch(PDO::FETCH_ASSOC)) {
 			$result['options'][$row['kunde']][] = $row['datum'];
@@ -131,7 +177,7 @@ switch ($_REQUEST['a']) {
 		$result = $q->fetchAll(PDO::FETCH_ASSOC);
 		break;
 	case 'kommentar':
-		$id = (isset($_REQUEST['id'])) ? $_REQUEST['id'] : '';
+		$id = (isset($_REQUEST['id']) && $_REQUEST['id'] != "undefined") ? $_REQUEST['id'] : '';
 
 		if (count($data) > 0) {
 			if ($id == '') {
@@ -165,11 +211,11 @@ switch ($_REQUEST['a']) {
 		break;
 	default:
 	case 'liste':
-		$datum = (!isset($_REQUEST['datum']) || $_REQUEST['datum'] == '') ? "a.datum > date_add(now(), INTERVAL -32 DAY)" : "a.datum = '{$_REQUEST['datum']}' ";
+		$datum = (!isset($_REQUEST['datum']) || $_REQUEST['datum'] == '') ? "a.datum > date_add(now(), INTERVAL -32 DAY)" : "a.datum >= '{$_REQUEST['datum']}' ";
+		$datum_bis = (!isset($_REQUEST['datum_bis']) || $_REQUEST['datum_bis'] == '') ? "a.datum > date_add(now(), INTERVAL -32 DAY)" : "a.datum <= '{$_REQUEST['datum_bis']}' ";
 		$kunde = (!isset($_REQUEST['kunde']) || $_REQUEST['kunde'] == '') ? "1" : "k.kunde LIKE '%{$_REQUEST['kunde']}%'";
 
-		$q = $dbh->query("SELECT a.datum, k.kunde, k.system, a.bundesland, a.feiertag, k.start_soll, k.ende_soll, sm.start, sm.ende, sm.anzahl, sm.bearbeitet,
-								timediff(sm.ende, k.ende_soll) - timediff(sm.start, k.start_soll) as abweichung,
+		$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,
 								case
 								 when woche = 'Mo-Fr' then mofr
 								 when woche = 'Mo-Sa' then mosa
@@ -183,7 +229,9 @@ switch ($_REQUEST['a']) {
 							INNER JOIN kunden k USING (bundesland)
 							LEFT JOIN status_meldung sm USING (datum, kunde)
 							LEFT JOIN status_kommentar sk ON sm.kommentar_id = sk.id
-							WHERE {$datum} AND {$kunde} AND a.datum <= now() AND k.erster_status <= a.datum
+							LEFT JOIN status_kommentar as sk2 ON a.datum = sk2.datum AND k.kunde = sk2.kunde
+
+							WHERE {$datum} AND {$datum_bis} AND {$kunde} AND a.datum <= now() AND k.erster_status <= a.datum
 							AND k.aktiv = 1
 							ORDER BY a.datum, k.ende_soll");
 		$result = $q->fetchAll(PDO::FETCH_ASSOC);
@@ -207,4 +255,5 @@ switch ($_REQUEST['a']) {
 			$result = $events;
 		}
 }
-echo json_encode($result);
+echo json_encode($result);
+// echo json_last_error();

+ 6 - 1
app/import.bat

@@ -1,2 +1,7 @@
+@echo off
 cd /d "%~dp0"
-php import.php
+set PHP="D:\dev\xampp\php"
+
+:task
+  %PHP%\php import.php
+if errorlevel = 23 goto task

+ 12 - 173
app/import.php

@@ -3,180 +3,19 @@ header('Access-Control-Allow-Origin: *');
 header('Cache-Control: no-cache, must-revalidate');
 header('Content-type: application/json');
 
-$dbh = new PDO("mysql:host=localhost;dbname=tasks", "root", "gc01mysql");
-$dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
+require_once (dirname(__FILE__). "/ImportController.php");
 
-$server = "{imap.1und1.de:993/imap/ssl}INBOX";
-$user = "status@global-cube.de";
-$passwd = "gc01smtp";
+$database['connect'] = 'mysql:host=localhost;dbname=tasks';
+$database['user'] = 'root';
+$database['password'] = 'gc01mysql';
 
-function fehlerberichtAufbereiten ($fehlerbericht, &$fehlerAnzahl, $whitelist) {
-	$fehlerbericht = str_replace("\r\`", "`", str_replace("\r\"", "\"", str_replace("\r\n", "", $fehlerbericht)));
-	$fehlerbericht = json_decode($fehlerbericht, true);
+$imap['server'] = "{imap.1und1.de:993/imap/ssl}INBOX";
+$imap['user'] = "status@global-cube.de";
+$imap['password'] = "gc01smtp";
 
-	if ($whitelist) {
-		if (!isset($whitelist['Layer'])) $whitelist['Layer'] = array();
-		if (!isset($whitelist['Report'])) $whitelist['Report'] = array();
-		if (!isset($whitelist['User'])) $whitelist['User'] = array();
-	}
+$importCtrl = new ImportController($database, $imap);
+$importCtrl->Workflow();
 
-	foreach ($fehlerbericht as $i => $log) {
-		if (preg_match("/\.bat$/", $log['Name'])) {
-			$fehlerbericht[$i]['Errors'][0] = preg_replace("/!! Bitte E-Mailadresse fuer Statusbericht angeben !!/im", "! Bitte E-Mailadresse fuer Statusbericht angeben !", $fehlerbericht[$i]['Errors'][0]);
-			$fehlerbericht[$i]['Errors'][0] = preg_replace("/!! SMTP-Konfiguration bitte anpassen !!/im", "! SMTP-Konfiguration bitte anpassen !", $fehlerbericht[$i]['Errors'][0]);
-
-			$count = 0;
-			$fehlerbericht[$i]['Errors'][0] = preg_replace("/(!![^\n]*!!)/im", "<b>$1</b>",$fehlerbericht[$i]['Errors'][0], -1, $count);
-			$count2 = 0;
-			$fehlerbericht[$i]['Errors'][0] = preg_replace("/(\(\w{2}\d{4}\) [^\r]*)/im", "<b>$1</b>", $fehlerbericht[$i]['Errors'][0], -1, $count2);
-			//die(print($log['Errors'][0]));
-			if ($count > 0 || $count2 > 0) {
-				$fehlerbericht[$i]['ErrorLevel'] = 2;
-				for ($j = 1; $j < $count; $j++) {
-					$fehlerbericht[$i]['Errors'][] = "";
-				}
-				$fehlerAnzahl += 1;
-			}
-		} else if ($whitelist && count($fehlerbericht[$i]['Errors']) > 0 && ($fehlerbericht[$i]['Type'] == 'Versand' || $fehlerbericht[$i]['Type'] == 'Portal')) {
-			$fehlerbericht[$i]['Errors2'] = array();
-			foreach($fehlerbericht[$i]['Errors'] as $j => $e) {
-				if (in_array($e['Layer'], $whitelist['Layer']) || in_array($e['Report'], $whitelist['Report']) || in_array($e['User'], $whitelist['User'])) {
-					$fehlerbericht[$i]['Errors2'][] = $fehlerbericht[$i]['Errors'][$j];
-					unset($fehlerbericht[$i]['Errors'][$j]);
-				}
-			}
-			if (count($fehlerbericht[$i]['Errors']) == 0) {
-				$fehlerbericht[$i]['ErrorLevel'] = 3;
-				$fehlerAnzahl -= 1;
-			}
-		}
-	}
-	return addslashes(json_encode($fehlerbericht));
-}
-
-
-
-
-
-$q = $dbh->query("SELECT kunde, whitelist, version FROM kunden");
-$cust = $q->fetchAll(PDO::FETCH_ASSOC);
-$customers = array();
-$version = array();
-foreach ($cust as $c) {
-	$customers[$c['kunde']] = json_decode(stripslashes($c['whitelist']), true);
-	$version[$c['kunde']] = $c['version'];
-}
-
-$mbox = imap_open($server, $user, $passwd) or die("Could not open Mailbox - try again later!");
-$message_count = imap_num_msg($mbox);
-
-$result = array();
-
-for ($m = 1; $m <= $message_count; $m++) {
-	$fehlerAnzahl = 0;
-	$header = imap_headerinfo($mbox, $m);
-	$rec = explode(";", $header->Subject);
-	if (count($rec) < 3) continue;
-
-	$date = date("Y-m-d", strtotime($header->MailDate));
-	$result[] = $date . " " . $rec[2] . " - " . $rec[0];
-
-	$structure = imap_fetchstructure($mbox, $m);
-	$attachments = array();
-	if (isset($structure->parts) && count($structure->parts)) {
-
-		for ($i = 0; $i < count($structure->parts); $i++) {
-
-			$attachments[$i] = array(
-				'is_attachment' => false,
-				'filename' => '',
-				'name' => '',
-				'attachment' => ''
-			);
-
-			if ($structure->parts[$i]->ifdparameters) {
-				foreach ($structure->parts[$i]->dparameters as $object) {
-					if (strtolower($object->attribute) == 'filename') {
-						$attachments[$i]['is_attachment'] = true;
-						$attachments[$i]['filename'] = $object->value;
-					}
-				}
-			}
-
-			if ($structure->parts[$i]->ifparameters) {
-				foreach ($structure->parts[$i]->parameters as $object) {
-					if (strtolower($object->attribute) == 'name') {
-						$attachments[$i]['is_attachment'] = true;
-						$attachments[$i]['name'] = $object->value;
-					}
-				}
-			}
-
-			if ($attachments[$i]['is_attachment']) {
-				$attachments[$i]['attachment'] = imap_fetchbody($mbox, $m, $i + 1);
-				if ($structure->parts[$i]->encoding == 3) { // 3 = BASE64
-					$attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
-				} elseif ($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
-					$attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
-				}
-			}
-		}
-	}
-
-	$fehlerbericht = addslashes(trim(imap_fetchbody($mbox, $m, '1')));
-	$info = 0;
-	$starter = 0;
-
-	foreach ($attachments as $key => $attachment) {
-		if ($attachment['is_attachment']) {
-			if ($attachment['filename'] == "info.json") {
-				$info = addslashes($attachment['attachment']);
-			}
-			if ($attachment['filename'] == "gcstarter.json") {
-				$starter = addslashes($attachment['attachment']);
-			}
-			if ($attachment['filename'] == "fehlerbericht.json") {
-				$fehlerbericht = fehlerberichtAufbereiten($attachment['attachment'], $fehlerAnzahl, @$customers[$rec[0]]);
-			}
-		}
-	}
-	$rec[] = $fehlerbericht;
-	$rec[4] += $fehlerAnzahl;
-
-	$insertQuery = "INSERT INTO status_meldung (kunde, start, ende, datum, anzahl, fehlerbericht) VALUES ('" . implode("','", $rec) . "')";
-	$c = $dbh->query($insertQuery);
-	if ($c) {
-		imap_delete($mbox, $m);
-	} else {
-		$result[] = $insertQuery;
-		$result[] = $dbh->errorInfo();
-	}
-
-
-	if (!isset($customers[$rec[0]])) {
-		$dbh->query("INSERT INTO kunden (kunde, start_soll, ende_soll, erster_status, system) VALUES ('{$rec[0]}', '{$rec[1]}', '{$rec[2]}', '{$rec[3]}', '?')");
-		$customers[$rec[0]] = array();
-	}
-
-	$ver = "";
-	if (preg_match("/Version:\s*(\d{4}-\d{2}-\d{2})_?(\w*)?/", $fehlerbericht, $ver) && (!isset($version[$rec[0]]) || $version[$rec[0]] != $ver[1])) {
-		$beta = (count($ver) > 2) ? '1' : '0';
-		$q = $dbh->query("UPDATE kunden SET version = '{$ver[1]}', beta_version = '{$beta}' WHERE kunde = '{$rec[0]}'");
-	}
-
-	if ($info) {
-		$q = $dbh->query("SELECT * FROM kunden_config WHERE kunde = '{$rec[0]}' ORDER BY datum DESC LIMIT 1");
-		$last = ($q && $q->rowCount() == 1) ? $q->fetch(PDO::FETCH_ASSOC) : false;
-		if (!$last || addslashes($last['info']) != $info) {
-			$dbh->query("INSERT INTO kunden_config (kunde, datum, info) VALUES ('{$rec[0]}', '{$rec[3]}', '{$info}')");
-		}
-	}
-
-	if ($starter) {
-		$dbh->query("INSERT INTO kunden_gcstarter (kunde, datum, gcstarter) VALUES ('{$rec[0]}', '{$rec[3]}', '{$starter}')");
-	}
-}
-imap_expunge($mbox);
-imap_close($mbox);
-
-echo json_encode($result);
+if ($importCtrl->fail) {
+	die(23);
+}

+ 32 - 35
app/index.html

@@ -2,7 +2,7 @@
 <html class="no-js">
 <head>
     <meta charset="utf-8">
-    <title>Fehlerbericht</title>
+    <title>Global Cube ITS</title>
     <meta name="description" content="">
     <meta name="viewport" content="width=device-width">
     <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
@@ -20,38 +20,48 @@
             vertical-align: middle;
         }
 
-        .label-A, .label-Autosys {
-            background-color: #ee3;
+        .label-Autosys {
+            background-color: #da3;
             color: #000;
         }
 
-        .label-E, .label-EDS {
+        .label-Autosys-Light {
+            background-color: #eca;
+            color: #000;
+        }
+
+        .label-CarIT-Audev {
+            background-color: #57c;
+            color: #fff;
+        }
+
+        .label-EDS {
             background-color: #a33;
             color: #fff;
         }
 
-        .label-F, .label-Filaks {
+        .label-Filaks {
             background-color: #883;
             color: #fff;
         }
 
-        .label-G, .label-GlobalCube {
-            background-color: #57c;
+        .label-GlobalCube {
+            background-color: #aaa;
             color: #fff;
         }
 
-        .label-L, .label-Light {
-            background-color: #5b5;
+        .label-Navision {
+            background-color: #35d;
             color: #fff;
         }
 
-        .label-N, .label-Navision {
-            background-color: #35d;
+        .label-Optima {
+            background-color: #080;
             color: #fff;
         }
 
-        .label-O, .label-Optima {
-            background-color: #050;
+        .label-Optima-Light {
+            background-color: #5b5;
             color: #fff;
         }
 
@@ -88,15 +98,16 @@
 <!-- Add your site or application content here -->
 <div class="container-fluid">
     <div class="header">
-        <ul class="nav nav-pills pull-right">
-            <li><a ng-href="#">Übersicht</a></li>
+        <h3 class="text-muted pull-left"><a ng-href="#">Global Cube ITS</a></h3>
+        <ul class="nav nav-tabs">
+            <li><a ng-href="#">Fehlerberichte</a></li>
+            <li><a ng-href="#/tickets">Aufgaben</a></li>
             <li><a ng-href="#/calendar">Kalender</a></li>
-            <li><a ng-href="#/customers">Kunden</a></li>
+            <li><a ng-href="#/customers">Kundenliste</a></li>
             <li><a ng-href="#/config">Konfiguration</a></li>
             <li><a ng-href="#/stats/Altermann">Statistik</a></li>
             <li><a ng-href="#/changelog">Kontenrahmen</a></li>
         </ul>
-        <h3 class="text-muted"><a ng-href="#">Fehlerbericht</a></h3>
     </div>
 
     <div class="row">
@@ -105,24 +116,6 @@
 </div>
 
 
-<!-- Google Analytics: change UA-XXXXX-X to be your site's ID -->
-<script>
-    (function (i, s, o, g, r, a, m) {
-        i['GoogleAnalyticsObject'] = r;
-        i[r] = i[r] || function () {
-            (i[r].q = i[r].q || []).push(arguments)
-        }, i[r].l = 1 * new Date();
-        a = s.createElement(o),
-                m = s.getElementsByTagName(o)[0];
-        a.async = 1;
-        a.src = g;
-        m.parentNode.insertBefore(a, m)
-    })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
-
-    ga('create', 'UA-XXXXX-X');
-    ga('send', 'pageview');
-</script>
-
 <!-- build:js(.) scripts/oldieshim.js -->
 <!--[if lt IE 9]>
 <script src="bower_components/es5-shim/es5-shim.js"></script>
@@ -158,6 +151,9 @@
 <script src="scripts/amcharts/serial.js" type="text/javascript"></script>
 <script src="scripts/amcharts/pie.js" type="text/javascript"></script>
 
+<script src="scripts/FileSaver.min.js" type="text/javascript"></script>
+
+
 <!-- build:js({.tmp,app}) scripts/scripts.js -->
 <script src="scripts/app.js"></script>
 <script src="scripts/controllers/calendar.js"></script>
@@ -166,6 +162,7 @@
 <script src="scripts/controllers/customers.js"></script>
 <script src="scripts/controllers/overview.js"></script>
 <script src="scripts/controllers/stats.js"></script>
+<script src="scripts/controllers/tickets.js"></script>
 <!-- endbuild -->
 </body>
 </html>

File diff suppressed because it is too large
+ 1 - 0
app/scripts/FileSaver.min.js


+ 5 - 1
app/scripts/app.js

@@ -66,7 +66,7 @@
                     $(element).popover({
                         html : true,
                         content: function() {
-                            return scope.getCommentsInfo($(element).attr('data-popover'));
+                            return scope.getCommentsInfo($(element).attr('data-popover'),$(element).attr('data-kunde'),$(element).attr('data-datum'));
                         }
                     });
                     $(element).hover(function(){
@@ -83,6 +83,10 @@
                     templateUrl: 'views/overview.html',
                     controller: 'OverviewCtrl'
                 })
+                .when('/tickets', {
+                    templateUrl: 'views/tickets.html',
+                    controller: 'TicketsCtrl'
+                })
                 .when('/calendar', {
                     templateUrl: 'views/calendar.html',
                     controller: 'CalendarCtrl'

+ 1 - 1
app/scripts/controllers/calendar.js

@@ -2,7 +2,7 @@
 
 angular.module('fehlerberichtApp')
     .controller('CalendarCtrl', function ($scope, $http) {
-        var webservice = 'http://rbs06/fehlerbericht/db.php?';
+        var webservice = 'http://rbs06:8090/fehlerbericht/db.php?';
 
         $().ready(function () {
 

+ 2 - 1
app/scripts/controllers/changelog.js

@@ -3,7 +3,7 @@
 
     angular.module('fehlerberichtApp')
         .controller('ChangelogCtrl', function ($scope, $http) {
-            var webservice = 'http://rbs06/fehlerbericht/db.php?';
+            var webservice = 'http://rbs06:8090/fehlerbericht/db.php?';
 
             $scope.Typen = ["neu", "akt", "entf"];
 
@@ -31,6 +31,7 @@
             };
 
             $scope.selectedDate = {"datum": "heute"};
+            $scope.selectedField = "Konto_1";
 
             $http.get(webservice + "a=changelog&kunde=").success(function (data) {
                 $scope.Status = data;

+ 33 - 2
app/scripts/controllers/config.js

@@ -2,11 +2,12 @@
 
 angular.module('fehlerberichtApp')
     .controller('ConfigCtrl', function ($scope, $http, $routeParams) {
-        var webservice = 'http://rbs06/fehlerbericht/db.php?';
+        var webservice = 'http://rbs06:8090/fehlerbericht/db.php?';
 
         $scope.current = {
             'kunde': $routeParams.customer,
-            'datum': $routeParams.date
+            'datum': $routeParams.date,
+			'tabelle': ''
         };
 
         $scope.data = {};
@@ -26,6 +27,35 @@ angular.module('fehlerberichtApp')
             return date;
         };
 
+        $scope.emails = function () {
+            if ($scope.domain !== undefined && $scope.domain.versand !== undefined && $scope.domain.versand.Empfaenger !== undefined) {
+                return $scope.domain.versand.Empfaenger.join('\r\n');
+            }
+            return "";
+        };
+		
+        $scope.csvExport = function () {
+			var file = new File([ $scope.getCsv() ], $scope.current.kunde + "_" + $scope.current.tabelle + ".csv", {type: "text/plain;charset=iso-8859-1"});
+			saveAs(file);
+            return "";
+        };
+		
+		$scope.getCsv = function () {
+			var result = _.keys($scope.data[$scope.current.tabelle][0]).join(';').replace('$$hashKey','Nr.') + '\r\n';
+			_.each($scope.data[$scope.current.tabelle], function (row, i) { 
+				_.each(row, function (col, k) {
+					if (k !== '$$hashKey') {
+						result += col + ';'; 
+					} else {
+						result += (i+1);
+					}
+				});
+				result += '\r\n';
+			});
+			return result;
+		};
+		
+		
         $scope.refresh = function () {
             $scope.data = {};
             $http.get(webservice + 'a=config&kunde=' + $scope.current.kunde + '&datum=' + $scope.current.datum).success(function (data) {
@@ -43,6 +73,7 @@ angular.module('fehlerberichtApp')
                         $scope.filter[t] = {};
                         _.each(table[0], function (col, k) {
                             $scope.domain[t][k] = _.uniq(_.pluck(table, k));
+                            $scope.domain[t][k].sort();
                             $scope.filter[t][k] = '';
                         });
                     });

+ 4 - 3
app/scripts/controllers/customers.js

@@ -2,7 +2,7 @@
 
 angular.module('fehlerberichtApp')
     .controller('CustomersCtrl', function ($scope, $http) {
-        var webservice = 'http://rbs06/fehlerbericht/db.php?';
+        var webservice = 'http://rbs06:8090/fehlerbericht/db.php?';
 
         $scope.info = [];
         $scope.error = -1;
@@ -16,12 +16,13 @@ angular.module('fehlerberichtApp')
                 '?',
                 'Autosys',
                 'Autosys-Light',
+                'CarIT-Audev',
                 'EDS',
                 'Filaks',
                 'GlobalCube',
-                'Light',
                 'Navision',
-                'Optima'
+                'Optima',
+                'Optima-Light'
             ],
             'woche': [
                 'Mo-Fr',

+ 0 - 15
app/scripts/controllers/main.js

@@ -1,15 +0,0 @@
-'use strict';
-
-angular.module('fehlerberichtApp').filter("euro", function () {
-    return function (num) {
-        if (num !== null) {
-            return num.toFixed(2).toString().replace(".", ",");
-        }
-        return "0,00";
-    };
-});
-
-angular.module('fehlerberichtApp')
-    .controller('MainCtrl', function ($scope) {
-
-    });

+ 62 - 29
app/scripts/controllers/overview.js

@@ -9,7 +9,10 @@
  */
 angular.module('fehlerberichtApp')
     .controller('OverviewCtrl', function ($scope, $http, $routeParams, $interval) {
-        var webservice = 'http://rbs06/fehlerbericht/db.php?';
+        var webservice = 'http://rbs06:8090/fehlerbericht/db.php?';
+
+        var PERIOD_VISIBLE = 60 * 1000;
+        var PERIOD_NOT_VISIBLE = 5 * 60 * 1000;
 
         $scope.error = {
             'level': -1,
@@ -51,12 +54,13 @@ angular.module('fehlerberichtApp')
                 '?',
                 'Autosys',
                 'Autosys-Light',
+                'CarIT-Audev',
                 'EDS',
                 'Filaks',
                 'GlobalCube',
-                'Light',
                 'Navision',
-                'Optima'
+                'Optima',
+                'Optima-Light'
             ],
             'datum': {},
             'kunde': {},
@@ -71,7 +75,7 @@ angular.module('fehlerberichtApp')
                 '0': 'vorhanden'
             },
             'date': {
-                'all': '',
+                'all': moment().subtract(32, 'days').format('YYYY-MM-DD'),
                 'today': moment().format('YYYY-MM-DD'),
                 'yesterday':  moment().subtract(1, 'days').format('YYYY-MM-DD')
             },
@@ -83,6 +87,7 @@ angular.module('fehlerberichtApp')
 
         $scope.overview = [];
         $scope.comments = {};
+        $scope.comments2 = {};
 
         $scope.datum = [];
 
@@ -96,7 +101,6 @@ angular.module('fehlerberichtApp')
         };
 
         $scope.Filter = {
-            'datum': (moment($routeParams.date, 'YYYY-MM-DD').isValid()) ? $routeParams.date : $scope.domain.date[$routeParams.date],
             'kunde': ($routeParams.customer === 'all' || _.contains($scope.domain.system, $routeParams.customer)) ? '' : $routeParams.customer,
             'fehler': $scope.domain.status[$routeParams.status],
             'fehlend': ($routeParams.status === 'missing') ? '1' : '',
@@ -104,6 +108,14 @@ angular.module('fehlerberichtApp')
             'benutzer': ''
         };
 
+        $scope.DatumFilter = {
+            'von': (moment($routeParams.date, 'YYYY-MM-DD').isValid()) ? $routeParams.date : $scope.domain.date[$routeParams.date],
+            'bis': moment().format('YYYY-MM-DD'),
+            'datum': function (z) {
+                return z.datum >= $scope.DatumFilter.von && z.datum <= $scope.DatumFilter.bis;
+            }
+        };
+
         $scope.Predicate = (function () {
             if ($routeParams.customer !== 'all') {
                 return 'datum';
@@ -127,15 +139,18 @@ angular.module('fehlerberichtApp')
             $scope.domain.benutzer = _.unique(_.pluck(data, 'benutzer'));
         });
 
-        $http.get(webservice + 'a=kommentar&kunde=' + $scope.Filter.kunde + '&datum=' + $scope.Filter.datum).success(function (data) {
-            $scope.comments = _.groupBy(data, 'kunde');
-        });
-
         $scope.refresh = function () {
-            $http.get(webservice + 'a=liste&kunde=' + $scope.Filter.kunde + '&datum=' + $scope.Filter.datum).success(function (data) {
-                $scope.overview = data;
+            $http.get(webservice + 'a=liste&kunde=' + $scope.Filter.kunde + '&datum=' + $scope.DatumFilter.von + '&datum_bis=' + $scope.DatumFilter.bis).success(function (data) {
+                if (JSON.stringify($scope.overview) !== JSON.stringify(data)) {
+                    $scope.overview = data;
+                }
                 //$scope.domain.benutzer = _.unique(_.pluck(data, 'benutzer'));
             });
+			
+			$http.get(webservice + 'a=kommentar&kunde=' + $scope.Filter.kunde + '&datum=' + $scope.DatumFilter.von + '&datum_bis=' + $scope.DatumFilter.bis).success(function (data) {
+				$scope.comments = _.groupBy(data, 'kunde');
+				$scope.comments2 = _.indexBy(data, 'id');
+			});
         };
 
         $scope.importData = function () {
@@ -162,7 +177,19 @@ angular.module('fehlerberichtApp')
 
         $scope.refresh();
 
-        $interval($scope.refresh, 5 * 60 * 1000);
+        var refreshTimer = $interval($scope.refresh, PERIOD_VISIBLE);
+        if (document.addEventListener) {
+            document.addEventListener("visibilitychange", visibilityChanged);
+        }
+
+        function visibilityChanged() {
+            $interval.cancel(refreshTimer);
+            if (document.visible) {
+                $scope.refresh();
+            }
+            refreshTimer = $interval($scope.refresh, (document.hidden) ? PERIOD_NOT_VISIBLE : PERIOD_VISIBLE);
+        }
+
 
         $scope.minuten = function (t) {
             var faktor, m, mins;
@@ -302,7 +329,7 @@ angular.module('fehlerberichtApp')
 
             $http.get(webservice + 'a=fehlerbericht&kunde=' + $scope.current.zeile.kunde + '&datum=' + $scope.current.zeile.datum + '&start=' + $scope.current.zeile.start).success(function (data) {
                 $scope.current.fehler = data;
-                if (!data.whitelist) {
+                if (data.whitelist === undefined || data.whitelist === null) {
                     data.whitelist = {
                         'User': [],
                         'Report': [],
@@ -310,11 +337,15 @@ angular.module('fehlerberichtApp')
                     };
                 }
 
-                if (data.benutzer === '' || data.benutzer !== $scope.benutzer) {
-                    $scope.current.kommentar = $scope.current.template;
+				if (data.kommentar.id !== undefined) {
+                    $scope.current.kommentar = data.kommentar;
+                    $scope.current.kommentar.fehler = parseInt(data.kommentar.fehler, 10);
                 } else {
-                    $scope.current.kommentar = $scope.comments[data.kunde][0];
-                    $scope.current.kommentar.fehler = parseInt($scope.current.kommentar.fehler, 10);
+                    $scope.current.kommentar = $scope.current.template;
+                }
+				
+				if (data.fehlerbericht === undefined) {
+                    return;
                 }
                 data.fehlerbericht = _.sortBy(data.fehlerbericht, function(e) { return moment(e.Modified); });
                 data.weitere = _.chain(data.fehlerbericht).reject($scope.errorLevel).groupBy(function (e) { return e.Type; }).value();
@@ -339,9 +370,9 @@ angular.module('fehlerberichtApp')
             });
         };
 
-        $scope.getComments = function (zeile) {
+        $scope.getComments = function (zeile, today) {
             if ($scope.comments[zeile.kunde]) {
-                var comments = _.filter($scope.comments[zeile.kunde], function (row) { return row.datum <= zeile.datum; });
+                var comments = _.filter($scope.comments[zeile.kunde], function (row) { return (today === '1') ? row.datum === zeile.datum : row.datum <= zeile.datum; });
 
                 if (zeile.fehlend === '1') {
                     return comments;
@@ -360,16 +391,18 @@ angular.module('fehlerberichtApp')
             return false;
         };
 
-        $scope.getCommentsInfo = function (kunde) {
-            var comments = _.filter($scope.comments[kunde], function (row) { return row.status > 0; });
-            var info = '<table class="table table-bordered table-condensed">';
-
-            if (comments) {
-                for (var i = 0; i < comments.length; i++) {
-                    info += '<tr><td>' + $scope.dateFormat(comments[i].datum) + '</td><td>' + comments[i].benutzer + '</td><td>' + $scope.domain.bearbeitet[comments[i].status] + '</td><td>' + comments[i].kommentar + '</td></tr>';
-                }
-            }
-            return info + '</table>';
+        $scope.getCommentsInfo = function (comment_id, kunde, datum) {
+            if ($scope.comments2[comment_id] !== undefined) {
+                var c = $scope.comments2[comment_id];
+                return '<i>' + $scope.domain.bearbeitet[c.status] + '</i><br/>' + c.kommentar;
+            } else {
+				var comments = _.filter($scope.comments[kunde], function (row) { return row.datum <= datum && row.status > 0; });
+                var result = '';
+				_.each(comments, function (c) {
+					result += '<i>' + $scope.domain.bearbeitet[c.status] + '</i><br/>' + c.kommentar + '<br/>';
+				});
+				return result;
+			}
         };
 
         $scope.getCommentIcon = function (c) {

+ 1 - 1
app/scripts/controllers/stats.js

@@ -3,7 +3,7 @@
 
     angular.module('fehlerberichtApp')
         .controller('StatsCtrl', function ($scope, $http, $routeParams) {
-            var webservice = 'http://rbs06/fehlerbericht/db.php?';
+            var webservice = 'http://rbs06:8090/fehlerbericht/db.php?';
 
             $scope.data = {};
             $scope.summary = {};

+ 123 - 0
app/scripts/controllers/tickets.js

@@ -0,0 +1,123 @@
+'use strict';
+
+angular.module('fehlerberichtApp').filter("euro", function () {
+    return function (num) {
+        if (num !== null) {
+            return num.toFixed(2).toString().replace(".", ",");
+        }
+        return "0,00";
+    };
+});
+
+angular.module('fehlerberichtApp')
+    .controller('TicketsCtrl', function ($scope, $http) {
+        var webservice = 'http://rbs06:8090/fehlerbericht/db.php?';
+
+        $scope.current = {};
+
+        $scope.domain = {
+            'status': [
+                "offen",
+                "in Bearbeitung",
+                "zurückgestellt",
+                "Rücksprache mit Kunde",
+                "erledigt"
+            ],
+            'statusicon': {
+                '0': "glyphicon-folder-open",
+                '1': "glyphicon-user",
+                '2': "glyphicon-time",
+                '3': "glyphicon-earphone",
+                '4': "glyphicon-ok"
+            },
+            'prioritaet': {
+                '5': "sehr hoch",
+                '4': "hoch",
+                '0': "normal",
+                '1': "niedrig"
+            },
+            'prioritaeticon': {
+                '0': "glyphicon-minus",
+                '1': "glyphicon-chevron-down",
+                '4': "glyphicon-chevron-up",
+                '5': "glyphicon-fire"
+            },
+            'fortschritt': [
+                '0',
+                '25',
+                '50',
+                '90',
+                '100'
+            ],
+            'kategorie': [
+                "Anpassung",
+                "Fehlersuche",
+                "Installation",
+                "Serverumzug",
+                "Support"
+            ],
+            'programm': [
+                "Allgemein",
+                "Finanzteil",
+                "GCHR",
+                "Monteurliste",
+                "Operativteil",
+                "Planung",
+                "SPP",
+                "Starter/Struct",
+                "Tasks/Workflow",
+                "Versand/Portal",
+                "Excel-Makros",
+                "Forderung",
+                "Provision"
+            ],
+            'kunde': []
+        };
+
+
+        $scope.benutzer = window.localStorage.getItem("Benutzer");
+        $scope.heute = moment().format('YYYY-MM-DD');
+
+        $scope.Filter = {
+            'benutzer': $scope.benutzer
+        };
+
+        $scope.tickets = [];
+
+        $http.get(webservice + 'a=benutzer').success(function (data) {
+            $scope.domain.benutzer = _.unique(_.pluck(data, 'benutzer'));
+        });
+
+        $http.get(webservice + 'a=kunden').success(function (data) {
+            $scope.domain.kunde = _.unique(_.pluck(data, 'kunde'));
+        });
+
+        $http.get(webservice + 'a=tickets').success(function (data) {
+            $scope.tickets = data;
+        });
+
+        $scope.newTicket = function () {
+            $scope.current = {
+                'id': "",
+                'datum': $scope.heute,
+                'benutzer': $scope.benutzer,
+                'kunde': "",
+                'kontakt': "",
+                'beschreibung': "",
+                'termin': "",
+                'dauer': "01:00:00",
+                'status': "0",
+                'prioritaet': "0",
+                'fortschritt': "0",
+                'kategorie': "0",
+                'programm': "0",
+                'kommentar': ""
+            };
+        };
+
+        $scope.saveTicket = function () {
+            $http.put(webservice + 'a=tickets&id=' + $scope.current.id, $scope.current).success(function (data) {
+                $scope.tickets = data;
+            });
+        };
+    });

+ 30 - 2
app/views/changelog.html

@@ -1,5 +1,7 @@
 <div data-tabs>
-    <div data-panel="nach Datum">
+    <h2>Kunde: Entenmann</h2>
+
+    <div data-panel="Neue Konten nach Datum">
         <br/>
         <form class="form-inline">
             <select class="form-control" ng-model="selectedDate" ng-options="opt.datum for opt in Status.Historie">
@@ -32,7 +34,7 @@
 
         </article>
     </div>
-    <div data-panel="Liste">
+    <div data-panel="Neue Konten (Liste)">
         <table class="table table-bordered table-striped">
             <tr>
                 <th class="span2">Kontonummer</th>
@@ -98,4 +100,30 @@
             </tr>
         </table>
     </div>
+    <div data-panel="Fehler in Zuordnung">
+        <br/>
+        <h3>Fehler</h3>
+        <div ng-repeat="(k,v) in Status.GCStruct.error">
+
+            <a href="" onclick="$(this).next().toggle()">
+                <h4 >{{k}} ({{v.length}} Konten)</h4>
+            </a>
+
+            <div class="closed-tab">
+            <p ng-repeat="e in v">{{e}}</p>
+            </div>
+        </div>
+
+        <h3>Info</h3>
+        <div ng-repeat="(k,v) in Status.GCStruct.info">
+
+            <a href="" onclick="$(this).next().toggle()">
+                <h4 >{{k}} ({{v.length}} Konten)</h4>
+            </a>
+
+            <div class="closed-tab">
+                <p ng-repeat="e in v">{{e}}</p>
+            </div>
+        </div>
+    </div>
 </div>

+ 9 - 0
app/views/config.html

@@ -15,9 +15,18 @@
                 <select class="form-control" ng-model="current.tabelle" ng-options="v for v in options.tabelle"></select>
             </label>
         </td>
+		<td>
+			<button class="form-control btn btn-default" ng-click="csvExport()" ng-show="current.tabelle">CSV-Export </button>
+		</td>
     </tr>
 </table>
 
+<div ng-show="current.tabelle=='versand' ">
+    <label>E-Mail-Empfänger</label><br/>
+    <textarea>{{emails()}}</textarea>
+
+</div>
+
 <table class="table table-bordered table-condensed table-striped" style="width: auto;">
     <tr>
         <th></th>

+ 28 - 14
app/views/overview.html

@@ -18,21 +18,23 @@
 </div>
 
 <div class="row">
-    <div class="container-fluid col-md-7">
+    <div class="container-fluid col-md-8">
 <table class="table table-bordered table-striped">
     <tr>
         <th>
             <label>
                 Datum <i class="glyphicon glyphicon-sort-by-alphabet" ng-click="Predicate='datum'"></i><br/>
-                <input ng-model="Filter.datum" type="date" ng-change="refresh()" />
+                <input ng-model="DatumFilter.von" type="date" ng-change="refresh()" /><br/>
+                <input ng-model="DatumFilter.bis" type="date" ng-change="refresh()" />
             </label>
         </th>
         <th>
             <label>
                 Kunde <i class="glyphicon glyphicon-sort-by-alphabet" ng-click="Predicate='kunde'"></i><br/>
-                <input ng-model="Filter.kunde" />
+                <input ng-model="Filter.kunde" ng-change="refresh()" />
             </label>
         </th>
+        <th>Info</th>
         <th>Start Soll<br/>Ende Soll <i class="glyphicon glyphicon-sort-by-alphabet" ng-click="Predicate='ende_soll'"></i></th>
         <th>Start Ist<br/>Ende Ist</th>
         <th>Abweichung</th>
@@ -53,6 +55,7 @@
             </div>
         </td>
         <td></td>
+        <td></td>
         <td>
             <div class="dropdown">
                 <a class="btn dropdown-toggle" role="button" data-toggle="dropdown">{{domain.fehlend[Filter.fehlend]||'alle'}}&nbsp;<b class="caret"></b></a>
@@ -86,9 +89,21 @@
         </td>
     </tr>
 
-    <tr ng-repeat="zeile in overview | filter:SearchText | filter:Filter | orderBy:Predicate:Reverse" ng-class="{'danger':zeile.fehlend==1}">
+    <tr ng-repeat="zeile in overview | filter:DatumFilter.datum | filter:Filter | orderBy:Predicate:Reverse" ng-class="{'danger':zeile.fehlend==1}">
         <td>{{dateFormat(zeile.datum)}}</td>
-        <td><span class="label label-danger label-{{zeile.system}}">{{left(zeile.system, 1)}}</span> <a ng-href="#/overview/{{zeile.kunde}}/all/all">{{zeile.kunde}}</a></td>
+        <td><span class="label label-danger label-{{zeile.system}}">{{left(zeile.system, 1)}}</span> <a ng-href="#/overview/{{zeile.kunde}}/all/all">{{zeile.kunde}}</a> {{zeile.aufgabe}}</td>
+        <td>
+            <a href="file:///v:/Kunden/{{zeile.kunde}}/" target="_blank">
+                <button type="button" class="btn btn-default" title="Verzeichnis">
+                    <span class="glyphicon glyphicon-folder-open"></span>
+                </button>
+            </a>
+            <a href="file:///v:/Kunden/{{zeile.kunde}}/Dokumente/Installationsdaten_{{zeile.kunde}}.xlsx" target="_blank">
+                <button type="button" class="btn btn-default" title="Installationsdaten">
+                    <span class="glyphicon glyphicon-wrench"></span>
+                </button>
+            </a>
+        </td>
         <td>{{zeile.start_soll}}<br/>{{zeile.ende_soll}}</td>
         <td>
             <a ng-click="saveStartTime(zeile)">{{zeile.start}}</a><br/>
@@ -109,12 +124,12 @@
             </button>
 
             <button type="button" data-trigger="focus" class="btn btn-default btn-sm" data-toggle="modal" data-target="#fehler-modal" ng-click="setCurrent(zeile)" ng-show="zeile.anzahl == null">
-                <span class="glyphicon glyphicon-question-sign"></span>
+                <span class="glyphicon" ng-class="{'glyphicon-check': zeile.bearbeitet == 1, 'glyphicon-question-sign': zeile.bearbeitet != 1 }"></span>
             </button>
         </td>
         <td>
             <button type="button" class="btn btn-default btn-sm" ng-init="c = getComments(zeile)" ng-show="c" data-toggle="popover" data-placement="bottom"
-                    title="" data-content="" data-popover="{{zeile.kunde}}">
+                    title="" data-content="" data-popover="{{c[0].id}}" data-kunde="{{c[0].kunde}}" data-datum="{{c[0].datum}}">
                 <span ng-show="c[0].datum != zeile.datum">{{dateFormat(c[0].datum)}}: </span>
                 <span class="glyphicon {{getCommentIcon(c)}}"></span>
                 <span class="label label-danger label-{{c[0].fehler}}"> {{c[0].fehler}}</span>
@@ -205,19 +220,18 @@
                 <h3>Fehler</h3>
 
                 <div class="logdatei" ng-repeat="e in current.fehler.fehlerbericht | filter: errorLevel | orderBy: 'ErrorLevel'">
-                    <a href="" onclick="$(this).next().toggle()">
+                    <a href="" onclick="$(this).next().toggle()" ng-click="e.Errors3 = e.Errors">
                         <p class="modell" ng-class="{'rot':e.ErrorLevel < 3}">{{e.Type}}: {{e.Name}} ({{errorCount(e)}})</p>
                     </a>
 
-
                     <div class="closed-tab">
                         <ul class="fehler" ng-show="e.Type=='Modell'">
-                            <li ng-repeat="error in e.Errors"><a href="http://wiki.global-cube.de/{{error.Number}}">{{error.Number}}</a>:
+                            <li ng-repeat="error in e.Errors3"><a href="http://rbs06/wiki/{{error.Number}}" target="_blank">{{error.Number}}</a>:
                                 ({{error.Level}}) {{error.Message}}</li>
                         </ul>
-                        <pre class="fehler" ng-show="e.Type=='Workflow'" ng-bind-html="e.Errors[0]"></pre>
+                        <pre class="fehler" ng-show="e.Type=='Workflow'" ng-bind-html="e.Errors3[0]"></pre>
                         <table class="ft" ng-show="e.Type=='Portal'||e.Type=='Versand'">
-                            <tbody ng-repeat="error in e.Errors">
+                            <tbody ng-repeat="error in e.Errors3">
                                 <tr>
                                     <td rowspan="6" class="number">{{$index+1}}
                                     <td>Datei:</td>
@@ -410,8 +424,8 @@
                             </button>
                         </td>
                         <td>
-                            <button type="button" class="btn btn-default btn-sm" ng-init="c = getComments(z)" ng-show="c" data-toggle="popover" data-placement="bottom"
-                                    title="" data-content="" data-popover="{{c}}">
+                            <button type="button" class="btn btn-default btn-sm" ng-init="c = getComments(z, '1')" ng-show="c" data-toggle="popover" data-placement="bottom"
+                                    title="" data-content="" data-popover="{{c.id}}">
                                 <span ng-show="c[0].datum != z.datum">{{dateFormat(c[0].datum)}}: </span>
                                 <span class="glyphicon {{getCommentIcon(c)}}"></span>
                                 <span class="label label-danger label-{{c[0].fehler}}"> {{c[0].fehler}}</span>

+ 309 - 0
app/views/tickets.html

@@ -0,0 +1,309 @@
+<form role="form">
+<table class="table table-bordered table-striped" style="width: auto;">
+    <tr>
+        <th style="width: 100px;">Status</th>
+        <th style="width: 100px;">Priorität</th>
+        <th style="width: 150px;">Mitarbeiter</th>
+        <th style="width: 150px;">Datum</th>
+        <th style="width: 220px;">Kunde/ Kontakt</th>
+        <th style="width: 220px;">Kategorie</th>
+        <th style="width: 220px;">Programm/ Bereich</th>
+        <th style="width: 300px;">Beschreibung</th>
+        <th style="width: 250px;">Kommentar</th>
+        <th style="width: 150px;">Dauer/ Fortschritt</th>
+    </tr>
+    <!--
+    <tr>
+        <td><input ng-model="Filter.kunde"/></td>
+        <td>
+            <div class="dropdown">
+                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown">{{domain.aktiv[Filter.aktiv]||'alle'}}&nbsp;<b class="caret"></b></a>
+                <ul class="dropdown-menu" role="menu">
+                    <li><a ng-click="Filter.aktiv=''">alle</a></li>
+                    <li class="divider"></li>
+                    <li ng-repeat="(key,val) in domain.aktiv"><a ng-click="Filter.aktiv=key">{{val}}</a></li>
+                </ul>
+            </div>
+        </td>
+        <td>
+            <div class="dropdown">
+                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown">{{Filter.system||'alle'}}&nbsp;<b class="caret"></b></a>
+                <ul class="dropdown-menu" role="menu">
+                    <li><a ng-click="Filter.system=''">alle</a></li>
+                    <li class="divider"></li>
+                    <li ng-repeat="val in domain.system"><a ng-click="Filter.system=val">{{val}}</a></li>
+                </ul>
+            </div>
+        </td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td>
+            <div class="dropdown">
+                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown">{{Filter.woche||'alle'}}&nbsp;<b class="caret"></b></a>
+                <ul class="dropdown-menu" role="menu">
+                    <li><a ng-click="Filter.woche=''">alle</a></li>
+                    <li class="divider"></li>
+                    <li ng-repeat="val in domain.woche"><a ng-click="Filter.woche=val">{{val}}</a></li>
+                </ul>
+            </div>
+        </td>
+        <td>
+            <div class="dropdown">
+                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown">{{domain.bundesland[Filter.bundesland]||'alle'}}&nbsp;<b class="caret"></b></a>
+                <ul class="dropdown-menu" role="menu">
+                    <li><a ng-click="Filter.bundesland=''">alle</a></li>
+                    <li class="divider"></li>
+                    <li ng-repeat="(key,val) in domain.bundesland"><a ng-click="Filter.bundesland=key">{{val}}</a></li>
+                </ul>
+            </div>
+        </td>
+        <td></td>
+        <td></td>
+        <td></td>
+    </tr>
+-->
+    <tr ng-repeat="zeile in tickets | filter:Filter">
+        <td><span class="glyphicon {{domain.statusicon[zeile.status]}}"></span>&nbsp; {{domain.status[zeile.status]}}</td>
+        <td><span class="glyphicon {{domain.prioritaeticon[zeile.prioritaet]}}"></span>&nbsp; {{domain.prioritaet[zeile.prioritaet]}}</td>
+        <td>{{zeile.benutzer}}</td>
+        <td>{{zeile.datum}}</td>
+        <td><strong>{{zeile.kunde}}</strong><br/>{{zeile.kontakt}}</td>
+        <td>{{domain.kategorie[zeile.kategorie]}}</td>
+        <td>{{domain.programm[zeile.programm]}}</td>
+        <td>{{zeile.beschreibung}}</td>
+        <td>{{zeile.kommentar}}</td>
+        <td>{{zeile.dauer}}<br/>{{zeile.fortschritt}} %</td>
+
+        <td>
+            <a ng-href="#/overview/{{zeile.kunde}}/all/all"><button type="button" class="btn btn-default" title="Fehlermeldungen"><span class="glyphicon glyphicon-exclamation-sign"></span></button></a>
+            <a ng-href="#/stats/{{zeile.kunde}}"><button type="button" class="btn btn-default" title="Statistik"><span class="glyphicon glyphicon-stats"></span></button></a>
+            <a ng-href="#/config/{{zeile.kunde}}/current"><button type="button" class="btn btn-default" title="Konfiguration"><span class="glyphicon glyphicon-list-alt"></span></button></a>
+            <a><button type="button" class="btn btn-default" title="Kalender"><span class="glyphicon glyphicon-calendar"></span></button></a>
+        </td>
+    </tr>
+</table>
+    <br/><br/>
+
+    <button type="button" class="btn btn-success" ng-click="newTicket()" data-toggle="modal" data-target="#ticket-modal" >
+        <span class="glyphicon glyphicon-asterisk"></span> Neues Ticket
+    </button>
+
+</form>
+
+<!-- Modal -->
+<div class="modal fade" id="ticket-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                <h4 class="modal-title" id="myModalLabel"><span class="glyphicon glyphicon-tag"></span>&nbsp; Ticket <span ng-show="current.id > 0">#{{current.id}}</span></h4>
+            </div>
+            <div class="modal-body">
+                <table class="table table-hover table-bordered">
+                    <tr>
+                        <th>Mitarbeiter</th>
+                        <td>
+                            <div class="dropdown">
+                                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown">{{current.benutzer||'unbekannt'}}&nbsp;<b class="caret"></b></a>
+                                <ul class="dropdown-menu" role="menu">
+                                    <li ng-repeat="val in domain.benutzer"><a ng-click="current.benutzer=val">{{val}}</a></li>
+                                </ul>
+                            </div>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Status</th>
+                        <td>
+                            <div class="dropdown">
+                                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown"><span class="glyphicon {{domain.statusicon[current.status]}}"></span>&nbsp; {{domain.status[current.status]||'unbekannt'}}&nbsp;<b class="caret"></b></a>
+                                <ul class="dropdown-menu" role="menu">
+                                    <li ng-repeat="(k,v) in domain.status"><a ng-click="current.status=k"><span class="glyphicon {{domain.statusicon[k]}}"></span>&nbsp; {{v}}</a></li>
+                                </ul>
+                            </div>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Priorität</th>
+                        <td>
+                            <div class="dropdown">
+                                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown"><span class="glyphicon {{domain.prioritaeticon[current.prioritaet]}}"></span>&nbsp; {{domain.prioritaet[current.prioritaet]||'unbekannt'}}&nbsp;<b class="caret"></b></a>
+                                <ul class="dropdown-menu" role="menu">
+                                    <li ng-repeat="(k,v) in domain.prioritaet"><a ng-click="current.prioritaet=k"><span class="glyphicon {{domain.prioritaeticon[k]}}"></span>&nbsp; {{v}}</a></li>
+                                </ul>
+                            </div>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Datum</th>
+                        <td>
+                            <label>
+                                <input type="date" ng-model="current.datum"/>
+                            </label>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Termin/Frist</th>
+                        <td>
+                            <label>
+                                <input type="date" ng-model="current.termin"/>
+                            </label>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Kunde</th>
+                        <td>
+                            <div class="dropdown">
+                                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown">{{current.kunde||'unbekannt'}}&nbsp;<b class="caret"></b></a>
+                                <ul class="dropdown-menu" role="menu">
+                                    <li ng-repeat="val in domain.kunde"><a ng-click="current.kunde=val">{{val}}</a></li>
+                                </ul>
+                            </div>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Kontakt/Ansprechpartner</th>
+                        <td>
+                            <label>
+                                <input type="text" ng-model="current.kontakt"/>
+                            </label>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Kategorie</th>
+                        <td>
+                            <div class="dropdown">
+                                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown">{{domain.kategorie[current.kategorie]||'unbekannt'}}&nbsp;<b class="caret"></b></a>
+                                <ul class="dropdown-menu" role="menu">
+                                    <li ng-repeat="(k,v) in domain.kategorie"><a ng-click="current.kategorie=k">{{v}}</a></li>
+                                </ul>
+                            </div>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Programm/Bereich</th>
+                        <td>
+                            <div class="dropdown">
+                                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown">{{domain.programm[current.programm]||'unbekannt'}}&nbsp;<b class="caret"></b></a>
+                                <ul class="dropdown-menu" role="menu">
+                                    <li ng-repeat="(k,v) in domain.programm"><a ng-click="current.programm=k">{{v}}</a></li>
+                                </ul>
+                            </div>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Betreff</th>
+                        <td>
+                            <label>
+                                <input type="text" ng-model="current.betreff"/>
+                            </label>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Beschreibung</th>
+                        <td>
+                            <label>
+                                <textarea cols="40" rows="5" ng-model="current.beschreibung"></textarea>
+                            </label>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Kommentar</th>
+                        <td>
+                            <label>
+                                <textarea cols="40" rows="5" ng-model="current.kommentar"></textarea>
+                            </label>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Dauer</th>
+                        <td>
+                            <label>
+                                <input type="time" ng-model="current.dauer"/>
+                            </label>
+                        </td>
+                    </tr>
+                    <tr>
+                        <th>Fortschritt</th>
+                        <td>
+                            <div class="dropdown">
+                                <a class="btn dropdown-toggle" role="button" data-toggle="dropdown">{{current.fortschritt||'?'}} %&nbsp;<b class="caret"></b></a>
+                                <ul class="dropdown-menu" role="menu">
+                                    <li ng-repeat="v in domain.fortschritt"><a ng-click="current.fortschritt=v">{{v}} %</a></li>
+                                </ul>
+                            </div>
+                        </td>
+                    </tr>
+                </table>
+
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-primary" ng-click="saveTicket()" data-dismiss="modal">Speichern</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+
+<style>
+.table tbody tr td {
+    vertical-align: middle;
+}
+
+.label-0 {
+    background-color: #aaaaaa;
+}
+
+.label-1 {
+    background-color: #bbbb00;
+}
+
+.label-2 {
+    background-color: #bb8800;
+}
+
+.label-3 {
+    background-color: #bb0000;
+}
+
+
+table.ft {
+    border: 1px solid #888;
+}
+
+table.ft td {
+    padding: 3px 5px;
+    margin: 2px;
+    background-color: #ddd;
+}
+
+.logdatei {
+    margin: 10px 5px 20px 5px;
+    padding: 0 20px 10px 20px;
+    background-color: #eee;
+    border: 1px solid #888;
+}
+
+.modell {
+    font-weight: bold;
+    background-color: #ccc;
+    padding: 10px;
+    margin: 0 -20px;
+}
+
+.rot {
+    background-color: #e88;
+}
+
+.number {
+    font-weight: bold;
+    background-color: #ccc;
+    border: 1px solid #888888;
+}
+
+.strich {
+    border-bottom: 1px solid #888888;
+}
+
+</style>

Some files were not shown because too many files changed in this diff