예제 #1
0
        public async Task <IHttpActionResult> PostCarte(Carte carte)
        {
            // Add current date
            carte.DateCreation = DateTime.Now;

            // find table
            var tableau = await db.Tableaux
                          .Include(t => t.Salle)
                          .SingleOrDefaultAsync(c => c.Id == carte.Tableau.Id);

            //if (tableau == null || !ModelState.IsValid)
            //{
            //    return BadRequest(ModelState);
            //}

            // Add to correct table
            carte.Tableau = tableau;

            // carte vue pour notification
            var userId      = this.User.Identity.GetUserId();
            var currentUser = await db.Users.FirstAsync(u => u.Id == userId);

            var carteVue = new CarteVue
            {
                DerniereConsultation = carte.LastTimeViewed,
                Utilisateur          = currentUser,
                Carte = carte
            };

            carte.CartesVues.Clear(); // Il s' agit d' une nouvelle carte, la liste peut etre videe
            carte.CartesVues.Add(carteVue);

            db.Cartes.Add(carte);

            await db.SaveChangesAsync();

            // Ajoute une notification
            await Ollert.Services.NotificationService.AddNotification <Carte>(
                "Carte Ajoutée",
                "La carte 'Demande {0}' a été ajouté par {1}".FormatWith(carte.NumeroDemande, this.User.Identity.Name),
                TypeNotification.NouvelleCarte,
                carte,
                carte.Tableau.Salle.Id);

            return(CreatedAtRoute("DefaultApi", new { id = carte.Id }, carte));
        }
예제 #2
0
        // GET api/Carte
        //public IQueryable<Carte> GetCartes()
        //{
        //    return db.Cartes;
        //}

        // GET api/Carte/5
        //[ResponseType(typeof(Carte))]
        //public async Task<IHttpActionResult> GetCarte(int id)
        //{
        //    Carte carte = await db.Cartes.FindAsync(id);
        //    if (carte == null)
        //    {
        //        return NotFound();
        //    }

        //    return Ok(carte);
        //}

        // PUT api/Carte/5
        public async Task <IHttpActionResult> PutCarte(int id, Carte carte)
        {
            var carteBdd = await db.Cartes
                           .Include(c => c.Tableau.Salle.Proprietaire)
                           .Include(c => c.CartesVues)
                           .Include(c => c.CartesVues.Select(cv => cv.Utilisateur))
                           .FirstAsync(c => c.Id == id);

            if (carteBdd == null || id != carte.Id)
            {
                return(BadRequest());
            }

            bool   isModified = true;
            string message    = string.Empty;

            if (carteBdd.NumeroDemande.Equals(carte.NumeroDemande) &&
                carteBdd.Titre.Equals(carte.Titre) &&
                carteBdd.Description.Equals(carte.Description) &&
                carteBdd.Archive.Equals(carte.Archive))
            {
                isModified = false;
            }
            else
            {
                if (!carteBdd.NumeroDemande.Equals(carte.NumeroDemande))
                {
                    message = "Le numero de demande de la carte 'Demande {0}' a été modifié par {1}";
                }
                if (!carteBdd.Titre.Equals(carte.Titre))
                {
                    message = "Le titre de la carte 'Demande {0}' a été modifié par {1}";
                }
                if (!carteBdd.Description.Equals(carte.Description))
                {
                    message = "La description de la carte 'Demande {0}' a été modifiée par {1}";
                }
                if (!carteBdd.Archive.Equals(carte.Archive) && carte.Archive)
                {
                    message = "La carte 'Demande {0}' a été archivee par {1}";
                }
                else if (!carteBdd.Archive.Equals(carte.Archive) && !carte.Archive)
                {
                    message = "La carte 'Demande {0}' a été restauree par {1}";
                }

                message = message.FormatWith(carteBdd.NumeroDemande, this.User.Identity.Name);
            }

            carteBdd.NumeroDemande = carte.NumeroDemande;
            carteBdd.Titre         = carte.Titre;
            carteBdd.Description   = carte.Description;
            carteBdd.Archive       = carte.Archive;

            // date a laquelle la carte a ete ouverte
            string userId   = this.User.Identity.GetUserId();
            var    carteVue = carteBdd.CartesVues.SingleOrDefault(c => c.Utilisateur.Id == userId);

            if (carteVue != null)
            {
                carteVue.DerniereConsultation = carte.LastTimeViewed;
            }
            else
            {
                var currentUser = await db.Users.FirstAsync(u => u.Id == userId);

                carteVue = new CarteVue {
                    DerniereConsultation = carte.LastTimeViewed,
                    Utilisateur          = currentUser,
                    Carte = carteBdd
                };

                carteBdd.CartesVues.Add(carteVue);
            }

            try
            {
                await db.SaveChangesAsync();

                if (isModified)
                {
                    // Ajoute une notification
                    await Ollert.Services.NotificationService.AddNotification <Carte>(
                        "Carte Modifiée",
                        message,
                        TypeNotification.EditionCarte,
                        carteBdd,
                        carteBdd.Tableau.Salle.Id);
                }
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!CarteExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }