Meeskond "The TuX's"

From ICO wiki
Jump to navigationJump to search

Liikmed

Tiina Laast

Tiia Tänav

funktionaalsus

Teeme kohviku menüüd, mida oleks võimalik näidata ekraanilt ning muutmiseks ligi pääsetav Internetist.

Pärast valmimist peaks olema võimalik:

vaadata tänast menüüd, otsas olevaid toite ei kuvata

koostada iga päeva jaoks menüü valides toitud nimekirjast ja sidudes selle kuupäevaga

lisada toitude nimekirja toite juurde

märkida, kas toit on otsas või mitte (tänasel kuupäeval)

kasutaja audentimine, et ainult kohviku töötajad saaks muudatusi teha

töökäik

Alustasime oma tegevust ajurünnakuga. Arutlesime funktsionaalsuse, välja nägemise, paigutuse, kujunduse ja xml ülesehituse üle. Samas naljatlesime, et millise pildi saaks see kord lisada oma teenusesse visuaalseks rosinaks :)

Praeguse seisuga on meil töötav menüüsse lisamine, märkimine saadavuse kohta ja ka kaunis kujundus on valmis.


Seis millalgi aprillis

XML ja selle schema valmis, all xml arhitektuur

<menu>
  <toidud>
    <toit>
      <nimi></nimi>
      <hind></hind>
      <liik></liik>
    </toit>
  </toidud>
  <menyyd>
    <menyy kuup="">
      <menutoit otsas="false">
        <nimi></nimi>
        <hind></hind>
        <liik></liik>
      </menutoit>
    </menyy>
  </menyyd>
</menu>

Seis 3. mail

Projekt võtab juba ilmet. Enamus funktsionaalsusi on valmis. Saab lisada, kustutada, vaadata, märkida(otsas või mitte), sisse logida. hetkel polnud veel teinud teenuse funktsioone, kuna üritasime alles välja mõelda kuidas oleks mugavaim ülesandeid lahendada. järgmisena muudame 'rakenduses' kasutatud xml-ga seotud funktsioonid teenuse funktsioonideks.

Seis 5. mail

Teenus on valmis. funktsioonid:

  • addToMenu-kuupäevalisse menüüsse toidu lisamine
  • isMenu-kontroll kas kuupäeval on menüü
  • lisaToit-toidu lisamine (nimi, hind, liik)
  • looMenu-tühja menüü loomine kuupäevale
  • rmvFromMenu-kuupäevalisest menüüst toidu eemaldamine
  • seeFood-kõigi toitude vaatamine
  • seeMenu-menüü vaatamine kuupäeva järgi (otsas toite ei näita)
  • seeMenu2-menüü vaatamine kuupäeva järgi
  • toitOtsas-otsas toidu märkimine toidu nime ja kuupäeva järgi
  • loggedIn-kontroll kas kasutaja on siise logitud
  • logout-väljalogimine
  • Login- sisselogimine

vaja lõpetada rakendus, nii et hetkel töötavad funktsioonid asenduksid teenuse funktsioonidega.

Seis 7. mail

otsustasime menüü koostamisel implementeerida kalendri kasutust...sellega sai tükk aega jamatud, aga tööle ta sai (enam-vähem :P )

Seis 9. mail

Teenus edukalt rakendusse implementeeritud. ainuke asi veel hetkel jäänud on väljalogimine

Seis 10. mail

sisselogimise süsteemi pidime ümber tegema, aga nüüd see töötab. tegime eraldi rakenduse kliendile (näeb tänast menüüd) ja kohviku töötajale (menüü tegemine, muutmine, toitude lisamine, toitude otsa märkimine, menüü vaatamine)

koodid

teenus

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Xml.Linq;

namespace menuTeenus
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
       
        [WebMethod(Description = "toidu lisamine (nimi, hind, liik)")]
        public void lisaToit(string nimi, string hind,string liik)
        {
            if (nimi != "" && hind!= "" && liik!="")
            {
                XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
                XElement xtoit = new XElement("toit");
                xtoit.Add(new XElement("nimi", nimi));
                xtoit.Add(new XElement("hind", hind));
                xtoit.Add(new XElement("liik", liik));
                Mxml.Root.Element("toidud").Add(xtoit);
                Mxml.Save(Server.MapPath("menu.xml"));
            }
        }
        [WebMethod(Description = "otsas toidu märkimine toidu nime ja kuupäeva järgi")]
        public void toitOtsas(string kuup, string nimi)
        {
            XDocument xD = XDocument.Load(Server.MapPath("menu.xml"));
            var sautsud = from m in xD.Root.Descendants("menutoit")
                          where m.Parent.Attribute("kuup").Value.Equals(kuup)
                          && m.Element("nimi").Value == nimi
                          select m;
            foreach (var hinne in sautsud)
            {
                hinne.Attribute("otsas").Value = "true";
            }
            xD.Save(Server.MapPath("menu.xml"));
        }
        
        [WebMethod(Description = "kõigi toitude vaatamine")]
        public List<string> seeFood()
        {
            XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
            var sautsud = from m in Mxml.Root.Descendants("toit")
                          orderby m.Element("liik").Value
                          select new
                          {
                              nimi = m.Element("nimi").Value,
                              hind = m.Element("hind").Value,
                              liik = m.Element("liik").Value,
                          };
            List<string> food = new List<string>();
            foreach (var x in sautsud)
            {
                food.Add(x.nimi + ";" + x.hind + ";" + x.liik);
            }
            return food;
        }
        [WebMethod(Description = "menüü vaatamine kuupäeva järgi (otsas toite ei näita)")]
        public  List<string> seeMenu(string kuup)
        {
            XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
            var sautsud = from m in Mxml.Root.Descendants("menutoit")
                          where m.Parent.Attribute("kuup").Value.Equals(kuup)
                          orderby m.Element("liik").Value
                          select new
                          {
                              nimi = m.Element("nimi").Value,
                              hind = m.Element("hind").Value,
                              liik = m.Element("liik").Value,
                              otsas = m.Attribute("otsas").Value
                          };
            List<string> food = new List<string>();
            foreach (var x in sautsud)
            {
                if (x.otsas.Equals("false"))
                food.Add(x.nimi + ";" + x.hind + ";" + x.liik);
            }
            return food;
        }
        [WebMethod(Description = "menüü vaatamine kuupäeva järgi")]
        public List<string> seeMenu2(string kuup)
        {
            XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
            var sautsud = from m in Mxml.Root.Descendants("menutoit")
                          where m.Parent.Attribute("kuup").Value.Equals(kuup)
                          orderby m.Element("liik").Value
                          select new
                          {
                              nimi = m.Element("nimi").Value,
                              hind = m.Element("hind").Value,
                              liik = m.Element("liik").Value,
                              otsas = m.Attribute("otsas").Value
                          };
            List<string> food = new List<string>();
            foreach (var x in sautsud)
            {
                    food.Add(x.nimi + ";" + x.hind + ";" + x.liik+";"+x.otsas);
            }
            return food;
        }
        [WebMethod(Description = "tühja menüü loomine kuupäevale")]
        public void looMenu(string kuup)
        {
            XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
           XElement xmenyy = new XElement("menyy");
            xmenyy.Add(new XAttribute("kuup", kuup));
            Mxml.Root.Element("menyyd").Add(xmenyy);
            Mxml.Save(Server.MapPath("menu.xml"));
        }
        [WebMethod(Description = "kontroll kas kuupäeval on menüü")]
        public bool isMenu(string kuup)
        {
            XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
            var sautsud = from m in Mxml.Root.Descendants("menyy")
                          where m.Attribute("kuup").Value.Equals(kuup)
                          select m;
            bool onOlemas = false;
            foreach (var hinne in sautsud)
            {
                if (hinne != null) onOlemas = true;
            }
            return onOlemas;
        }
        [WebMethod(Description = "kuupäevalisse menüüsse toidu lisamine")]
        public void addToMenu(string kuup,string nimi, string hind, string liik)
        {
            XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
            var sautsud = from m in Mxml.Root.Descendants("menyy")
                          where m.Attribute("kuup").Value.Equals(kuup)
                          select m;
            foreach (var menyy in sautsud)
            {
                XElement xtoit = new XElement("menutoit");
                xtoit.Add(new XAttribute("otsas", false));
                xtoit.Add(new XElement("nimi", nimi));
                xtoit.Add(new XElement("hind", hind));
                xtoit.Add(new XElement("liik", liik));
                menyy.Add(xtoit);
            }
            Mxml.Save(Server.MapPath("menu.xml"));
        }
        [WebMethod(Description = "kuupäevalisest menüüst toidu eemaldamine")]
        public void rmvFromMenu(string kuup, string nimi)
        {
            XDocument Mxml = XDocument.Load(Server.MapPath("menu.xml"));
            var sautsud = from m in Mxml.Root.Descendants("menutoit")
                          where m.Parent.Attribute("kuup").Value.Equals(kuup)
                          && m.Element("nimi").Value ==nimi 
                          select m;
            sautsud.Remove();
            Mxml.Save(Server.MapPath("menu.xml"));
        }
        [WebMethod(Description = "kontroll kas kasutaja on siise logitud")]
        public bool loggedIn(string sessionID)
        {
            if (sessionID == "") return false;
            else
            {
                string xmlFailiAsukoht = Server.MapPath("sessioonid.xml");
                XDocument xDoc = XDocument.Load(xmlFailiAsukoht);
                XElement sessioon = (from x in xDoc.Descendants("sessioon")
                                     where x.Value == sessionID
                                     select x).FirstOrDefault();
                if (sessioon == null) return false;
                else if (Convert.ToDateTime(sessioon.Attribute("aegumisAeg").Value) > DateTime.Now)
                    return true;
                else
                    return false;
            }
        }
        [WebMethod]
        public Guid Login(string userName,string passWord)
        {
            if (userName == "kohvikuproua" &&
                passWord == "latte")
            {
                string xmlFailiAsukoht = Server.MapPath("sessioonid.xml");
                Random uusSuva = new Random();
                byte[] massiiv = new byte[16];
                uusSuva.NextBytes(massiiv);
                Guid sessionID = new Guid(massiiv);
                XElement sessioon = new XElement("sessioon", sessionID);
                sessioon.Add(new XAttribute("user", userName));
                sessioon.Add(new XAttribute("aegumisAeg", DateTime.Now.AddMinutes(5)));
                sessioon.Add(new XAttribute("kliendiIP", HttpContext.Current.Request.UserHostAddress));
                XDocument xDoc = XDocument.Load(xmlFailiAsukoht);

                //.PasswordChar = '*';

                string viimaneID = (from x in xDoc.Descendants("sessioon")
                                    orderby x.Attribute("id").Value descending
                                    select x.Attribute("id").Value).First();
                int idV = int.Parse(viimaneID);
                idV++;
                sessioon.Add(new XAttribute("id", idV));
                xDoc.Root.Add(sessioon);
                xDoc.Save(xmlFailiAsukoht);
                return sessionID;
            }
            else
                return Guid.Empty;
        }
        [WebMethod(Description = "väljalogimine")]
        public void logout(string sessid)
        {
            XDocument xD = XDocument.Load(Server.MapPath("sessioonid.xml"));
            var sautsud = from m in xD.Root.Descendants("sessioon")
                          where m.Value.Equals(sessid)
                          select m;
            foreach (var hinne in sautsud)
            {
                hinne.Attribute("aegumisAeg").Value = DateTime.Now.ToString();
            }
            xD.Save(Server.MapPath("sessioonid.xml"));
        }
        
    }
}

rakendus

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;
using teenus;


public partial class _Default : System.Web.UI.Page 
{
    teenus.Service1 teenus = new teenus.Service1();
    protected void Page_Load(object sender, EventArgs e)
    {
        DateTime CurrTime = DateTime.Now;
        string kuu = CurrTime.Month+"";
        if (CurrTime.Month < 10) kuu = "0" + kuu;
        string paev = CurrTime.Day + "";
        if (CurrTime.Day < 10) paev = "0" + paev;
        label_date.Text=paev+"."+kuu+"."+CurrTime.Year;
        peidak6ik(login);
       
    }
    protected void menu_koost_Click(object sender, EventArgs e)
    {
        //menüü koostamisse...vaja lugeda kõik toidud listboxi koos_k6ik
        peidak6ik(menyykoostamine);
        var me = teenus.seeFood();
        koos_k6ik.Items.Clear();
        foreach (var x in me) {
            koos_k6ik.Items.Add(x);
        }     
    }
    protected void menu_lisa_Click(object sender, EventArgs e)
    {
        //toitude lisamisse leht...
        peidak6ik(lisamine);
    }
    
    protected void seemenu_Click(object sender, EventArgs e)
    {
        //tänase menüü vaatamine kliendivaates DONE
        peidak6ik(menuyy);
        foods.Text = "";
        var me = teenus.seeMenu(label_date.Text);
        foreach (var x in me) { 
        //veidi t66tlust ka
            string[] words = x.Split(';');
            foods.Text = foods.Text + words[0] + " " + words[1] + ".-<br/>";
        }
    }
   
    protected void sis_lisa_Click(object sender, EventArgs e)
    {
        //lisa toit xml-i  ja tule tagasi et midagi veel lisada DONE
        if (sis_nim.Text != "" && sis_hind.Text != "")
        {
            teenus.lisaToit(sis_nim.Text, sis_hind.Text, sis_liik.SelectedValue);
            sistyh();
        }
        peidak6ik(lisamine);
    }
   
    protected void sis_tyhista_Click(object sender, EventArgs e)
    {
        //ei lisa toitu, tühjenda väljad ja tagasi menüüsse
        sistyh();
        backtomenu();
    } 
    protected void logout_Click(object sender, EventArgs e)
    {
        //väljalogimine..
        teenus.logout(sesid.Text);
     }
   
    protected void koos_tagasi_Click(object sender, EventArgs e)
    {
        //menüü koostamise leht. ei taha menüüd koostada, tagasi menüüsse tühjendab kuupäeva välja
        koos_date.Text = "";
        koos_vali.Items.Clear();
        backtomenu();
    }
   
    protected void koos_eemalda_Click(object sender, EventArgs e)
    {
        //kuupäevaliselt menüült elemendi eemaldamine! allikas koos_vali
        peidak6ik(menyykoostamine);
        if (koos_date.Text != "" )
        {
            //kuupäev peab olema valitud siis saame eemaldada ja kuvada uus
            
            string[] words = koos_vali.SelectedValue.ToString().Split(';');
            teenus.rmvFromMenu(koos_date.Text, words[0]);
            t2nakoos();
        }
        else errorid.Text = "vali kuupäev!";
    }
    protected void koos_lisa_Click(object sender, EventArgs e)
    {//kuupäevalisele menüüle toidu lisamine : allikaks on koos_k6ik
        peidak6ik(menyykoostamine);
        if (koos_date.Text != "")
        {
            //kuupäev peab olema valitud siis saame lisada kuup'evale ja kuvada uus
            if (!teenus.isMenu(koos_date.Text))
            {
                //kui sellel valitud kuup'eval pole men[[d siis loome
                teenus.looMenu(koos_date.Text);
            }
            string[] words = koos_k6ik.SelectedValue.ToString().Split(';');
            teenus.addToMenu(koos_date.Text,words[0],words[1],words[2]);
           
            t2nakoos();
        }
        else errorid.Text = "vali kuupäev!";
    }
    protected void toitotsas_Click(object sender, EventArgs e)
    {// näitab ainult tänaseid toite!
        peidak6ik(Pane);
        toit2na();
    }
    protected void otsas_Click(object sender, EventArgs e)
    {
        //otsas toit kuup'eval: t'na! toidud_tana listbox DONE
        string[] words = toidud_tana.SelectedValue.ToString().Split(';');
        teenus.toitOtsas(label_date.Text,words[0]);
        toit2na();
        //pane on toitude otsa märkimise paneel
        peidak6ik(Pane);
    }
    public void toit2na() {
        var me = teenus.seeMenu(label_date.Text);
        toidud_tana.Items.Clear();
        foreach (var x in me)
        {
            toidud_tana.Items.Add(x);
        }
    }
    protected void toidud_tagasi_Click(object sender, EventArgs e)
    {
        backtomenu();
    }
   
    public void sistyh()
    {
        sis_hind.Text = "";
        sis_nim.Text = "";
    }
    public void backtomenu() {
        peidak6ik(menu);
    }
    public void peidak6ik(Panel mida)
    {
        
        menyykoostamine.Visible = false;
        lisamine.Visible = false;
        menuyy.Visible = false;
        menu.Visible = false;
        Pane.Visible = false;
        label_date.Visible = false;
        login.Visible = false;
        if (sesid.Text != "" && teenus.loggedIn(sesid.Text))
            mida.Visible = true;
        else login.Visible = true;        
        
        errorid.Text = "";
    }
    protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    {
        //valitakse kuupäev...kui on menüü siis võiks näidata!
        DateTime CurrTime = Calendar1.SelectedDate;
        string kuu = CurrTime.Month+"";
        if (CurrTime.Month < 10) kuu = "0" + kuu;
        string paev = CurrTime.Day + "";
        if (CurrTime.Day < 10) paev = "0" + paev;
        koos_date.Text=paev+"."+kuu+"."+CurrTime.Year;
        //populiseerime listboxi
        t2nakoos();
        peidak6ik(menyykoostamine);
      
    }
    public void t2nakoos() {
        koos_vali.Items.Clear();
        var me = teenus.seeMenu2(koos_date.Text);
        foreach (var x in me)
        {
            koos_vali.Items.Add(x);
        }
    }
    protected void Calendar1_VisibleMonthChanged(object sender, MonthChangedEventArgs e)
    {
        peidak6ik(menyykoostamine);
    }
    protected void b_login_Click(object sender, EventArgs e)
    {
        sesid.Text=teenus.Login(kasutajanimi.Text,saladus.Text).ToString();
        if (teenus.loggedIn(sesid.Text))
        {
            login.Visible = false;
            peidak6ik(menu);
        }
        else peidak6ik(login);

    }
}

xslt

<?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="/menu">
    <html>
      <body>
        <h2>Toidud</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>nimi</th>
            <th>hind</th>
          </tr>
           
          <xsl:for-each select="./toidud/toit">
            <tr>
              <td>
                <xsl:value-of select="./nimi"/>
              </td>
              <td>
                <xsl:value-of select="./hind"/>
              </td>
            </tr>
          </xsl:for-each>
            
        </table>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="menu/menyyd">
  </xsl:template>  

</xsl:stylesheet>