UCanDo: Difference between revisions

From ICO wiki
Jump to navigationJump to search
No edit summary
Line 226: Line 226:
</xsl:stylesheet>
</xsl:stylesheet>


</source>
== XSLT > XML==
<source lang="xml">
</source>
</source>

Revision as of 00:42, 12 June 2018

Meeskond

  • Mart Raus
  • Ando Kiidron
  • Liina Saar

Idee

Tööriist suurtele ettevõtetele, kellel on kontaktikeskused ja/või esindused. Klienditeenindaja saab rakenduse kaudu sisestada klientide pöördumisi ning tootejuhid pöördumiste sisu analüüsida.

Tehnoloogia

Projekt koostatakse aine raames omandatavate tehnoloogiate põhjal. Selleks kasutame:
REST veebiteenus

  • .NET Core 2.0

Veebiteenusega suhtlev kliendirakendus

  • WPF

Analüüs ja rakenduse sisu

1. Mis on teenuse eesmärk?
Selliste ettevõtete tootejuhtidel on tihti eesmärgiks kliendipöördumisi vähendada, et arendada tooted ja juhendid selliseks, et klientidel tekib võimalikult vähe küsimusi ja et nad suudaks ennast ise aidata. Kliendipöördumiste suur hulk tähendab ettevõttele vastavalt kas suurt tööjõukulu või halvendab kliendikogemust pika ooteaja tõttu.

2. Kasutajad
Teenindaja - saab sisestada kliendipöördumise.
Tootejuht - pöördumiste otsing/analüüs.
Admin - kasutajate haldamine.

3. Nimekiri funktsionaalsustest, mida plaanitakse kindlasti teostada (Must have):
Funktsionaalsed nõuded
*Teenindaja saab kliendipöördumise sisestada.
*Tootejuht saab otsida kindlas ajavahemikus toimunud pöördumisi.
*Tootejuht näeb, kui palju antud perioodil oli pöördumisi vastavalt otsingule.
*Tootejuht saab pöördumiste sisu lahtritest otsida tulemusi ühe või mitme märksõna järgi (OR), mida eraldatakse koma(de)ga.
*Tootejuht saab mitme märksõna otsingu salvestada ja panna sellele päringule nime.
*Tootejuht saab salvestatud päringu nimele vajutades lihtsasti otsingu uuesti teostada.
*Teenindaja ja tootejuht saavad sisse logida ja näha ainult neile relevantseid funktsionaalsusi. Teenindajale jääb vaid pöördumiste sisestamise õigus. Tootejuhil on õigus pöördumisi sisestada ja neid otsida.
*Tootejuht saab teenindajaid ja andmebaasi lisada, muuta ja kustutada.
*Admin saab tootejuhte ja teenindajaid andmebaasi lisada, muuta ja kustutada.

Mittefunktsionaalsed nõuded
*Teenuse kasutajaid peab tuvastama enne rakenduse funktsionaalsuse kasutamist ning kasutajaid peab saama hallata.

4. Nimekiri funktsionaalsustest, mis võiks olla, aga mida ei pruugita ajapuuduse tõttu realiseerida (Nice to have):
*Tootejuht näeb märksõna otsingule näha võrdlust eelnevate perioodidega.
*Tootejuht näeb dashboardil automaatselt arvutatud tabelit kuude lõikes kõige enam kasutatud sõnadest.
*Tootejuht näeb dashboardil automaatselt arvutatud tabelit eelmise kuuga võrreldes kasutatavuselt kõige enam tõusnud märksõnadest
*Tootejuht näeb dashboardil automaatselt arvutatud tabelit eelmise kuuga võrreldes kasutatavuselt kõige enam langenud märksõnadest
*Tootejuht saab lisada sõnu blacklisti nähes eelmistes tabelites ainult teda huvitavaid märksõnu.
*Tootejuht saab märksõna otsides seada filtreid (ainult kindla klienditüübi, algtunnuse, valdkonna vms järgi otsing)
*Võimalus otsida, millist tüüpi kliendid kõige enam pöörduvad ja kuidas see ajas muutub (vajalik tekitada kliendi andmebaas ja pöördumisel sisestada kliendi tunnus)

Andmebaasi skeem

Workload

24.03.2018 - Idee paikapanemine ja Wiki lehe loomine. Esimesed läbirääkimised analüüsi kirjutamiseks.

26.03.2018 - Analüüsi kirjutamine.

27.03.2018 - Andmebaasi mudeli koostamine, analüüsi kirjutamine jätkub.

31.03.2018 - Analüüsi lõpetamine.

01.04.2018 - 08.06.2018 - Koodi kirjutamine.

XML

<?xml version="1.0" encoding="UTF-8"?>

<referrals>

  <referral id="1" customerType="Era" baseIdentifier="Info" field="Arveldus">
    <date>2017-06-11</date>
    <content><![CDATA[Klient ei saa arvest aru. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam turpis leo, tincidunt a sodales at, bibendum molestie diam. Mauris eget ipsum tempor, hendrerit massa interdum, commodo nisl.]]></content>
    <creator id="3" activeEmployee="true">
      <firstname>Peeter</firstname>
      <lastname>Pakiraam</lastname>
      <department id="2" channel="Esindus">
        <name>Järve esindus</name>
      </department>
    </creator>
  </referral>
  
  <referral id="2" customerType="Äri" baseIdentifier="Rike" field="Tehnoloogia">
    <date>2017-06-11</date>
    <content><![CDATA[Andmeside ei toimi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam turpis leo, tincidunt a sodales at, bibendum molestie diam.]]></content>
    <creator id="2" activeEmployee="false">
      <firstname>Ants</firstname>
      <lastname>Pakiraam</lastname>
      <department id="1" channel="Telefon">
        <name>Tartu kontaktikeskus</name>
      </department>
    </creator>
  </referral>

  <referral id="3" customerType="Era" baseIdentifier="Rike" field="Tehnoloogia">
    <date>2017-06-15</date>
    <content><![CDATA[Klient kurdab, et kõne on katkendlik. Lorem ipsum dolor sit amet, consectetur adipiscing elit.]]></content>
    <creator id="3" activeEmployee="true">
      <firstname>Peeter</firstname>
      <lastname>Pakiraam</lastname>
      <department id="2" channel="Esindus">
        <name>Järve esindus</name>
      </department>
    </creator>
  </referral>

  <referral id="4" customerType="Äri" baseIdentifier="Info" field="Müük">
    <date>2017-06-16</date>
    <content><![CDATA[Klient ei saa pakkumisest aru.]]></content>
    <creator id="2" activeEmployee="false">
      <firstname>Ants</firstname>
      <lastname>Pakiraam</lastname>
      <department id="1" channel="Telefon">
        <name>Tartu kontaktikeskus</name>
      </department>
    </creator>
  </referral>
  
</referrals>

XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="referrals">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" maxOccurs="unbounded" name="referral">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="date" type="xs:date" />
              <xs:element name="content" type="xs:string" />
              <xs:element name="creator">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="firstname" type="xs:string" />
                    <xs:element name="lastname" type="xs:string" />
                    <xs:element name="department">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="name" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:int" use="required" />
                        <xs:attribute name="channel" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:int" use="required" />
                  <xs:attribute name="activeEmployee" type="xs:boolean" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:int" use="required" />
            <xs:attribute name="customerType" type="xs:string" use="required" />
            <xs:attribute name="baseIdentifier" type="xs:string" use="required" />
            <xs:attribute name="field" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT > HTML

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="html" indent="yes"/>
  
    <xsl:template match="/referrals">
      <html>
        <head>
          <h2>Pöördumised</h2>
        </head>
          <body>
            <xsl:for-each select="referral">
              <div style="border-style:solid;margin:10px;padding:10px;width:66%">
                <xsl:choose>
                  <xsl:when test="creator/department/@channel = 'Esindus'">
                    <div style="background-color:blue;width:100%;height:10px">
                    </div>
                  </xsl:when>
                  <xsl:otherwise>
                  </xsl:otherwise>
                </xsl:choose>
                <h3>
                  <xsl:value-of select="date"/>
                  <xsl:text> | </xsl:text>
                  <xsl:value-of select="@customerType"/>
                  <xsl:text> | </xsl:text>
                  <xsl:value-of select="@baseIdentifier"/>
                  <xsl:text> | </xsl:text>
                  <xsl:value-of select="@field"/>
                </h3>
                <ul>
                  <li>
                    <xsl:value-of select="creator/firstname"/>
                    <xsl:text> </xsl:text>
                    <xsl:value-of select="creator/lastname"/>
                    <xsl:if test="creator/@activeEmployee = 'false'">
                      <span style="color:red"> Töötaja pole aktiivne!</span>
                    </xsl:if>
                  </li>
                  <li>
                    <xsl:value-of select="creator/department/name"/>
                  </li>
                </ul>
                <xsl:text>Sisu: </xsl:text>
                <xsl:value-of select="content"/>
              </div>
            </xsl:for-each>
          </body>
      </html>
    </xsl:template>
</xsl:stylesheet>

XSLT > XML