Meeskond "Arved"

From ICO wiki
Jump to navigationJump to search

Meeskond "Arved"

  • Indrek Ots
  • Mait Poska
  • Joosep Püüa
  • Toomas Talviste
  • Madis Vellamäe

Ülesanne

Firma arvehaldussüsteem, kus ühel kasutajal, eeltavalt firmaomanikul, on võimalik end registreerida ja see järel registreerida enda firma süsteemis.

Kasutaja saab lisada enda firmale teisi kasutajad, kellel on õigus luua lisada kliente ja luua arveid. Lisaks sellel saab firmale lisada erinevaid kontakte ja arvenumbreid.

CMS

CMS'i funktsionaalsus:

  • On võimalik lisada/eemaldada lehti
  • Lehele saab anda asukoha menüüs
  • On võimalik lisada esilehele uudiseid
  • On võimalik kustutada/muuta olemasolevaid uudiseid
  • On võimalik muuta olemasolevaid lehti
  • Sitemap faili struktuur on muudetav


Tekstiredaktoriks kasutasime CKEditor'i. CKEditor salvestab sisestatud teksti HTML kujul, säilitades kasutaja poolt sisestatud vormingu. Meie rakenduse esileht näitab uudistest lühemat versiooni ning kui uudisele klikkida, siis on näha terve uudis. Selleks, et seda teostada, ei piisanud lihtsalt CKEditori poolt loodud teksti poolikuks lõikamisest. Tuletame meelde, et CKEditor salvestab teksti HTML kujul. Kui HTML vormingus tekst kuskilt pooleks lõigata, läheb kaduma osa tag'e ja leht ei valideeru enam. Lahenduseks sai loodud järgnev koodijupp, mis loeb sisse tükeldatud HTML stringi ja lisab lõppu puuduvad tagid.

    /// <summary>
    /// Funktsioon, mis võtab sisse html stringi ja teeb selle lühemaks.
    /// Ehk string lõigatakse soovitud koha pealt pooleks. Nii käitudes puuduvad stringist tagid, mis 
    /// olid stringi teises pooles. Need lisatakse hiljem stringi lõppu, et string oleks ikka korralik
    /// html.
    /// </summary>
    /// <param name="maxLength">Stringi maksimum pikkus. See osa stringist, mis ei mahu 
    /// maksimum pikkuse sisse, jäetakse välja.
    /// </param>
    /// <param name="content">String, mida hakatakse töötlema</param>
    /// <returns>Töödeldud stirng</returns>
    private static String getShortContentString(int maxLength, string content)
    {
        String contentString = content;
        if (contentString.Length > maxLength)
        {
            contentString = contentString.Substring(0, maxLength);
            Stack<String> tagStack = new Stack<string>();
            bool isInTag = false;
            bool isEndTag = false;
            bool isInTagName = false;
            bool gotTagName = false;
            bool isAttrVal = false;
            bool foundObjectTag = false;
            bool isObjectTagPopped = false;
            String tagBuilder = "";

            //prase contentString
            for (int i = 0; i < contentString.Length; i++)
            {
                if (isInTag == false)
                {
                    //tagi algus
                    if (contentString[i] == '<')
                    {
                        isInTag = true;
                    }

                }
                else
                {               
                        //ollakse tagi sees
                        if (contentString[i] == '>')
                        {
                            if (!isEndTag)
                            {
                                if (tagBuilder == "object")
                                {
                                    foundObjectTag = true;
                                }
                                tagStack.Push(tagBuilder);
                                Console.WriteLine(tagBuilder);
                            }
                            else
                            {
                                try
                                {
                                    String s = tagStack.Pop();
                                    if (s == "object")
                                    {
                                        isObjectTagPopped = true;
                                    }
                                    Console.WriteLine("removed " + s);
                                }
                                catch (Exception ex)
                                {
                                    return getShortContentString(maxLength + 200, content);
                                }
                            }
                            tagBuilder = "";
                            isInTag = false;
                            isEndTag = false;
                            gotTagName = false;
                            isInTagName = false;
                        }
                        else if (contentString[i] == '/')
                        {
                            //algab lõpetav täg
                            if (!isAttrVal)
                                isEndTag = true;
                        }
                        else if (contentString[i] == '"')
                        {
                            //algab või lõpeb atribuudi väärtus
                            isAttrVal = !isAttrVal;
                        }
                        else
                        {
                            if (contentString[i] != ' ' && isInTagName == false && gotTagName == false)
                            {
                                tagBuilder += contentString[i];
                                isInTagName = true;
                            }
                            else if (contentString[i] != ' ' && isInTagName == true && gotTagName == false)
                            {
                                tagBuilder += contentString[i];
                            }
                            else if (contentString[i] == ' ' && isInTagName == true && gotTagName == false)
                            {
                                isInTagName = false;
                                gotTagName = true;
                            }

                        }
                }

            }
            Console.WriteLine(isInTag);

            if (isInTag)
            {
                //remove half tag
                for (int i = contentString.Length - 1; i > 0; i--)
                {
                    if (contentString[i] == '<')
                    {
                        contentString = contentString.Substring(0, i);
                        break;
                    }
                }

            }

            //add 3 dots
            contentString += "...";

            // Console.WriteLine(tagStack.Count);
            int count = tagStack.Count;

            if (foundObjectTag == true && isObjectTagPopped == false)
            {
                return getShortContentString(maxLength + 200, content);
            }

            //add missing tags
            for (int i = 0; i < count; i++)
            {
                String tag = tagStack.Pop();
                contentString += "</" + tag + ">";
                //Console.WriteLine("added tag " + tag);

            }
        }

        return contentString;
    }

Kasutajakeskond

Kasutaja võimalused:

  • Registreerida firma
    • Sisestada andmed
    • Lisada kontaktid
    • Määrata arvenumbreid
  • Hallata arveid
    • Luua uusi arveid
    • Kuvada vanu arveid
    • Edastada arveid elektrooniliseposti teel