コード例 #1
0
        //Task hakee kaikki huoltotehtävät tietokannasta, järjestää ne kriittisyyden ja kirjausajan mukaan, pakkaa ne FactoryDevice-tyyppiseen listaan, ja palauttaa sen.
        public async Task <IEnumerable <FactoryDevice> > GetAll()
        {
            //Avataan yhteys tietokantaan
            await con.OpenAsync();

            //Luodaan kutsu tietokantaan. Haetaan kaikki tiedot, ja järjestetään ne ensin kriittisyyden, ja sitten kirjausajan mukaan
            SqlCommand getall = new SqlCommand("SELECT * FROM Huoltotehtavat ORDER BY Kriittisyys, Kirjausaika DESC", con);

            //Aloitetaan lukemaan saatua hakutulosta, ja syötetään saadut tiedot yksi tulos kerrallaan listaan "getallresult".
            using (SqlDataReader reader = getall.ExecuteReader())
            {
                //alustetaan lista
                List <FactoryDevice> getallresult = new List <FactoryDevice>();
                while (reader.Read())
                {
                    //jokaiselle readerin tulokselle luodaan FactoryDevice-objekti "fd", ja syötetään luetut tiedot sinne. Sitten syötetään fd listaan.
                    FactoryDevice fd = new FactoryDevice();
                    fd.Id          = Convert.ToInt32(reader.GetValue(0));
                    fd.Kohde       = reader.GetValue(1).ToString();
                    fd.Kirjausaika = Convert.ToDateTime(reader.GetValue(2));
                    fd.Kuvaus      = reader.GetValue(3).ToString();
                    fd.Kriittisyys = Convert.ToInt32(reader.GetValue(4));
                    fd.Tila        = Convert.ToBoolean(reader.GetValue(5));
                    getallresult.Add(fd);
                }
                //Suljetaan yhteys ja palautetaan lista
                con.Close();
                con.Dispose();
                return(await Task.FromResult(getallresult));
            }
        }
コード例 #2
0
        //Haetaan taulusta kaikki kohde-parametria vastaavat huoltotehtävät
        public async Task <IEnumerable <FactoryDevice> > GetAllKohde(string kohde)
        {
            //Avataan yhteys
            await con.OpenAsync();

            //SQL-komennolla haetaan kaikki huoltotehtävät joiden "Kohde" tietueet sisältävät hakuparametrin sisältävän tekstin. Tulokset järjestetään myös.
            SqlCommand getall = new SqlCommand("SELECT * FROM Huoltotehtavat WHERE Kohde LIKE '%'+ @k +'%' ORDER BY Kriittisyys, Kirjausaika DESC", con);

            //Syötetään sql-parametri @k hakuun, ja annetaan sille kohde
            getall.Parameters.Add(new SqlParameter("k", kohde));
            using (SqlDataReader reader = getall.ExecuteReader())
            {
                List <FactoryDevice> getallresult = new List <FactoryDevice>();
                while (reader.Read())
                {
                    FactoryDevice fd = new FactoryDevice();
                    fd.Id          = Convert.ToInt32(reader.GetValue(0));
                    fd.Kohde       = reader.GetValue(1).ToString();
                    fd.Kirjausaika = Convert.ToDateTime(reader.GetValue(2));
                    fd.Kuvaus      = reader.GetValue(3).ToString();
                    fd.Kriittisyys = Convert.ToInt32(reader.GetValue(4));
                    fd.Tila        = Convert.ToBoolean(reader.GetValue(5));
                    getallresult.Add(fd);
                }
                con.Close();
                con.Dispose();
                return(await Task.FromResult(getallresult));
            }
        }
コード例 #3
0
        //Haetaan Id:n perusteella huoltotehtävä tietokannasta
        public async Task <FactoryDevice> Get(int id)
        {
            //avataan yhteys
            await con.OpenAsync();

            //SQL-komennolla haetaan kaikki huoltotehtävät, joilla on parametria vastaava Id. Tuloksia tulee vain yksi, koska Id:t ovat uniikkeja.
            SqlCommand getID = new SqlCommand("SELECT * FROM Huoltotehtavat WHERE Id = @id", con);

            getID.Parameters.Add(new SqlParameter("id", id));

            //Luetaan saatu tulos result-nimiseen FactoryDevice-tyyppiseen muuttujaan.
            using (SqlDataReader reader = getID.ExecuteReader())
            {
                FactoryDevice result = new FactoryDevice();
                while (reader.Read())
                {
                    result.Id          = Convert.ToInt32(reader.GetValue(0));
                    result.Kohde       = reader.GetValue(1).ToString();
                    result.Kirjausaika = Convert.ToDateTime(reader.GetValue(2));
                    result.Kuvaus      = reader.GetValue(3).ToString();
                    result.Kriittisyys = Convert.ToInt32(reader.GetValue(4));
                    result.Tila        = Convert.ToBoolean(reader.GetValue(5));
                }
                //suljetaan yhteys ja palautetaan saatu tulos
                con.Close();
                con.Dispose();
                return(await Task.FromResult(result));
            }
        }
コード例 #4
0
        public async Task <IActionResult> Put(ServiceTaskDto UpdateData, int id)
        {
            // If TargetId is provided it must be valid
            if (UpdateData.TargetId != 0)
            {
                FactoryDevice dev = await _factoryDeviceService.Get(UpdateData.TargetId);

                if (dev == null)
                {
                    return(BadRequest(Json("Provided TargetId is invalid")));
                }
            }

            // If Criticality is provided it must be 1,2 or 3
            if (UpdateData.Criticality < 0 || (int)UpdateData.Criticality > 3)
            {
                return(BadRequest(Json("Provided Criticality is invalid")));
            }

            ServiceTask updateData = new ServiceTask
            {
                Closed      = UpdateData.Closed,
                Criticality = UpdateData.Criticality,
                Description = UpdateData.Description,
                TargetId    = UpdateData.TargetId,
                TaskId      = id
            };
            await _serviceTaskService.UpdateAsync(updateData, id);

            return(Ok(Json("Edit successful.")));
        }
コード例 #5
0
        /// <summary>
        /// Reads seeddata.csv and seed db with provided devices and creates maintenance tasks to all devices
        /// </summary>
        /// <param name="context"></param>
        public static void Seed(FactoryContext context)
        {
            // read records from csv file
            string seedDataFilePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);

            seedDataFilePath  = Directory.GetParent(Directory.GetParent(Directory.GetParent(Directory.GetParent(seedDataFilePath).FullName).FullName).FullName).FullName;
            seedDataFilePath += @"\seeddata.csv";
            TextReader reader    = new StreamReader(seedDataFilePath);
            var        csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
            var        records   = csvReader.GetRecords <FactoryDeviceFromCsv>();

            foreach (var record in records)
            {
                var device = new FactoryDevice {
                    Name = record.Name,
                    Type = record.Type,
                    Year = record.Year
                };
                context.FactoryDevices.Add(device);
                context.SaveChanges();
                for (int i = 0; i < 3; i++)
                {
                    var crit = rng.Next(0, 3);
                    var timeInMilliseconds = DateTime.Now.AddDays(-(rng.Next(0, 365)));
                    context.MaintenanceTasks.Add(new MaintenanceTask {
                        FactoryDeviceId = device.Id,
                        Criticality     = (Criticality)crit,
                        Description     = descs[crit],
                        Time            = timeInMilliseconds
                    });
                }
                context.SaveChanges();
            }
        }
        public IActionResult Update(int id, [FromBody] FactoryDevice fd)
        {
            //Jos päivitettävät tiedot ovat tyhjiä, palautetaan NoContent
            if (fd == null)
            {
                return(NoContent());
            }

            //Lähetetään päivitettävät tiedot fd päivitysfunktiolla, ja otetaan vastaan string-taulukko, jonka ensimmäisessä osiossa [0] on tekstivastaus, ja toisessa osiossa [1] on boolean arvo onnistumisesta.
            string[] result = _factoryDeviceService.Update(id, fd).Result;

            //tarkistetaan onnistuminen, ja palautetaan viesti
            if (result[1] == "1")
            {
                return(Ok((string)result[0]));
            }
            else if (result[1] == "0")
            {
                return(NotFound((string)result[0]));
            }
            else
            {
                return(BadRequest());
            }
        }
        public IActionResult Create([FromBody] FactoryDevice huoltoteht)
        {
            //jos syötetty huoltotehtävä on tyhjä, poistutaan funktiosta
            if (huoltoteht == null)
            {
                return(NoContent());
            }

            //luodaan FactoryDevice-tyyppinen muuttuja fd, ja lisätään siihen kutsun Bodystä tulleet tiedot. Jos tietoja puuttuu, palautetaan BadRequest()
            FactoryDevice fd = new FactoryDevice();

            if (!String.IsNullOrEmpty(huoltoteht.Kohde) && !String.IsNullOrEmpty(huoltoteht.Kuvaus) && (huoltoteht.Kriittisyys <= 3 && huoltoteht.Kriittisyys >= 1))
            {
                fd.Kohde       = huoltoteht.Kohde;
                fd.Kuvaus      = huoltoteht.Kuvaus;
                fd.Kriittisyys = huoltoteht.Kriittisyys;
                fd.Kirjausaika = DateTime.Today;
                fd.Tila        = huoltoteht.Tila;

                //Lähetetään fd syöttöfunktiolle, ja otetaan vastaan saatu tulos, joka on luodun rivin uusi id
                //Palautetaan Id:llä tehty haku, jolla haetaan vasta luodun rivin tiedot.

                return(CreatedAtRoute("GetByID", new { id = _factoryDeviceService.InsertNew(fd).Result }, fd));
                //return CreatedAtRoute("GetByID", new { Id = createdID }, huoltoteht);
            }
            else
            {
                return(BadRequest());
            }
        }
コード例 #8
0
 /// <summary>
 ///     Forms Dto object for FactoryDevice
 /// </summary>
 /// <param name="fd">FactoryDevice</param>
 /// <returns></returns>
 private static FactoryDeviceDto FormFactoryDevDto(FactoryDevice fd)
 {
     return(new FactoryDeviceDto
     {
         Id = fd.Id,
         Name = fd.Name,
         Year = fd.Year,
         Type = fd.Type
     });
 }
コード例 #9
0
        /// <summary>
        /// Map FactoryDeviceDto to FactoryDevice object.
        /// </summary>
        /// <param name="source"></param>
        /// <param name="destination"></param>
        /// <returns></returns>
        public static FactoryDevice Map(FactoryDeviceDto source)
        {
            if (source == null)
            {
                return(new FactoryDevice());
            }
            var factoryObject = new FactoryDevice()
            {
                DeviceId = source.Id,
                Name     = source.Name,
                Type     = source.Type,
                Year     = source.Year
            };

            return(factoryObject);
        }
コード例 #10
0
        /// <summary>
        /// Map FactoryDevice to FactoryDeviceDto object.
        /// </summary>
        /// <param name="source"></param>
        /// <param name="destination"></param>
        /// <returns></returns>
        public static FactoryDeviceDto Map(FactoryDevice source)
        {
            if (source == null)
            {
                return(new FactoryDeviceDto());
            }
            var dtoObject = new FactoryDeviceDto()
            {
                Id   = source.DeviceId,
                Name = source.Name,
                Year = source.Year,
                Type = source.Type
            };

            return(dtoObject);
        }
コード例 #11
0
        //Syötetään uusi huoltotehtävä tietokantaan, ja palautetaan luodun tehtävän uusi id takaisin. Parametrinä tulee kutsuvan laitteen bodysta tarvittavat tiedot JSON muodossa FactoryDevice-objektina
        public async Task <int> InsertNew([FromBody] FactoryDevice fd)
        {
            //avataan yhteys
            await con.OpenAsync();

            //Luodaan SQL-komento, jolla syötetään tulleet tiedot. SCOPE_IDENTITY() palauttaa luodun kohteen Id:n
            SqlCommand insertnewtask = new SqlCommand("INSERT INTO Huoltotehtavat VALUES (@Kohde, @Kirjausaika, @Kuvaus, @Kriittisyys, @Tila); SELECT SCOPE_IDENTITY();", con);

            insertnewtask.Parameters.Add(new SqlParameter("Kohde", fd.Kohde));
            insertnewtask.Parameters.Add(new SqlParameter("Kirjausaika", fd.Kirjausaika));
            insertnewtask.Parameters.Add(new SqlParameter("Kuvaus", fd.Kuvaus));
            insertnewtask.Parameters.Add(new SqlParameter("Kriittisyys", fd.Kriittisyys));
            insertnewtask.Parameters.Add(new SqlParameter("Tila", fd.Tila));

            //Otetaan luodun kohteen Id talteen, suljetaan yhteys, ja palautetaan Id.
            int newid = Convert.ToInt32(insertnewtask.ExecuteScalar());

            con.Close();
            con.Dispose();
            return(await Task.FromResult(newid));
        }
コード例 #12
0
        //Päivitetään huoltotehtävä tietokannasta. Parametrina tulee muutettavan tehtävän Id, ja muutettavat tiedot FactoryDevice-muuttujana.
        public async Task <string[]> Update(int id, FactoryDevice fd)
        {
            //avataan yhteys, ja tarkistetaan että onko FactoryDevice fd tyhjä. Jos se on, lopetetaan päivitys ja palautetaan viesti tyhjästä pyynnöstä
            await con.OpenAsync();

            if (String.IsNullOrEmpty(fd.Kohde) && String.IsNullOrEmpty(fd.Kuvaus) && fd.Kriittisyys == 0 && fd.Tila == null)
            {
                return(await Task.FromResult(new string[] { "Virhe tehtävän päivittämisessä. Lähetit tyhjän pyynnön!", "0" }));
            }

            //Näillä booleaneilla tarkistetaan mitkä tiedot on päivitetty. Näitä käytetään apuna Sql-lauseen luomisessa.
            bool isKohde  = false;
            bool isKuvaus = false;
            bool isKriitt = false;
            bool isTila   = false;

            //Aloitetaan Sql-lauseen luomista. Alustetaan sqlcom-muuttuja lauseen pohjalla.
            //Lauseeseen lisätään päivitettävät tiedot sen perusteella, että mitkä niistä on syötetty parametreinä tähän funktioon. Nämä tarkistetaan yksi kerrallaan.
            string sqlcom = "UPDATE Huoltotehtavat SET WHERE Id = @id";


            //Aloitetaan tarkistamalla fd.Kohde. Jos se sisältää tekstiä, lisätään sqlcom-muuttujaan uusi muutettava parametri sanojen SET ja WHERE väliin.
            //Samalla ilmoitetaan, että isKohde on true, eli fd-kohde sisältää tekstiä.
            if (!String.IsNullOrEmpty(fd.Kohde))
            {
                sqlcom  = sqlcom.Insert(26, "Kohde = @kohde ");
                isKohde = true;
            }

            //Sitten tarkistetaan fd.Kuvaus. Jos se sisältää tekstiä, aloitetaan Kuvauksen lisäämistä sqlcomiin. Ensin tarkistetaan, että onko sqlcom-muuttujaan syötetty Kohteesta tekstiä käyttämällä isKohde-muuttujaa.
            //Riippuen tilanteesta, syötetään Kuvauksen parametri joko pilkun kanssa tai ilman.
            if (!String.IsNullOrEmpty(fd.Kuvaus))
            {
                if (isKohde)
                {
                    sqlcom = sqlcom.Insert(26, "Kuvaus = @kuvaus, ");
                }
                else
                {
                    sqlcom = sqlcom.Insert(26, "Kuvaus = @kuvaus ");
                }
                isKuvaus = true;
            }

            //tarkistetaan onko fd.Kriittisyys-muuttujassa arvoa, ja että onko se sopiva arvo. Jos on, aloitetaan sen syöttö, ja tarkistetaan samalla tavalla kuin edellisessä lauseessa
            //että onko siellä edellistä parametrisyötettä olemassa sqlcom-muuttujassa, ja sen mukaan syötetään Kriittisyyden parametri.
            if (fd.Kriittisyys <= 3 && fd.Kriittisyys >= 1)
            {
                if (isKohde || isKuvaus)
                {
                    sqlcom = sqlcom.Insert(26, "Kriittisyys = @kriitt, ");
                }
                else
                {
                    sqlcom = sqlcom.Insert(26, "Kriittisyys = @kriitt ");
                }
                isKriitt = true;
            }

            //Vielä yhden kerran fd.Tila-muuttujalle
            if (fd.Tila != null)
            {
                if (isKohde || isKuvaus || isKriitt)
                {
                    sqlcom = sqlcom.Insert(26, "Tila = @tila, ");
                }
                else
                {
                    sqlcom = sqlcom.Insert(26, "Tila = @tila ");
                }
                isTila = true;
            }

            //Nyt kun on sql-komento kirjoitettu tekstiksi, luodaan siitä SqlCommand-tyyppinen muuttuja UpdateByID
            SqlCommand UpdateByID = new SqlCommand(sqlcom, con);

            //Lisätään luodut parametrit, jos niitä vastaavat booleanit ovat totta.
            UpdateByID.Parameters.Add(new SqlParameter("id", id));
            if (isKohde)
            {
                UpdateByID.Parameters.Add(new SqlParameter("kohde", fd.Kohde));
            }
            if (isKuvaus)
            {
                UpdateByID.Parameters.Add(new SqlParameter("kuvaus", fd.Kuvaus));
            }
            if (isKriitt)
            {
                UpdateByID.Parameters.Add(new SqlParameter("kriitt", fd.Kriittisyys));
            }
            if (isTila)
            {
                UpdateByID.Parameters.Add(new SqlParameter("tila", Convert.ToInt32(fd.Tila)));
            }


            try
            {
                //Lähetetään komento tietokantaan, ja otetaan talteen muuttuneiden rivien määrä, ja suljetaan yhteys.
                int affectedrows = UpdateByID.ExecuteNonQuery();
                con.Close();
                con.Dispose();
                //jos muuttuneita rivejä ei ole, kerrotaan että päivitystä ei tehty, ja palautetaan viesti, ja tieto epäonnistumisesta booleanina
                //jos on muuttuneita rivejä, ilmoitetaan siitä samalla tavalla, ja lähetetään tieto onnistumisesta booleanina
                if (affectedrows <= 0)
                {
                    return(await Task.FromResult(new string[] { "Päivitystä ei suoritettu, koska tehtävää ID:llä " + id + " ei ole olemassa", "0" }));
                }
                else
                {
                    return(await Task.FromResult(new string[] { "Tehtävä päivitetty!", "1" }));
                }
            }
            catch (SqlException ex)
            { //virheentarkistus, lähetetään virheviesti ja epäonnistumisen tieto vastauksena.
                con.Close();
                con.Dispose();
                return(await Task.FromResult(new string[] { "Virhe tehtävän päivittämisessä. " + ex, "0" }));
            }
        }