Beispiel #1
0
        /// <summary>
        /// Vérifie si une inscription existe déjà (pour validation hors connexion)
        /// </summary>
        /// <returns><c>true</c>, if participant already recorded was ised, <c>false</c> otherwise.</returns>
        /// <param name="validate">Validate.</param>
        public bool IsInscriptionAlreadyRecorded(ValidatePresence validate)
        {
            bool isFound = false;

            // Si il y a une prestation : on regarde dans Inscription
            // Sinon, on sort, car on peut enregistrer plusieurs participants (si un event dure plusieurs jours, par exemple)
            if (validate == null)
            {
                return(false);
            }

            // En fonction de l'Id prestation, on choisit la table
            if (validate.IdPrestation.HasValue)
            {
                // Objet Inscription
                var sqldata = new SQLData <InscriptionParticipant>();

                // On cherche l'inscription si elle existe...
                var inscription = sqldata.RetrieveAll().Where(x => x.IdParticipant == validate.IdParticipant && x.IdPrestation == validate.IdPrestation.Value).FirstOrDefault();

                if (inscription != null)
                {
                    isFound = true;
                }
            }
            else
            {
                // Pas de prestation : on n'aurait pas du appeler cette fonction
                throw new Exception("Un Participant à une manif sans prestation peut être enregistré plusieurs fois !!");
            }

            return(isFound);
        }
Beispiel #2
0
        /// <summary>
        /// Méthode pour ajouter un nouveau participant
        /// </summary>
        /// <param name="idParticipant">Identifier participant.</param>
        /// <param name="idPrestation">Identifier prestation.</param>
        public ValidatePresence AddNewPresence(int idParticipant, int?idPrestation, bool isEBillet = false)
        {
            var newValidate = new ValidatePresence()
            {
                IdParticipant = idParticipant,
                IdPrestation  = idPrestation,
                DatePresence  = DateTime.Now,
                IsEBillet     = isEBillet
            };

            // On cherche le nouvel Id (car on stocke en local quelque chose qui ne vient pas d'un WS)
            var id = sqlData.GetLastId() + 1;

            newValidate.Id = id;

            // On insère
            if (sqlData.InsertData(newValidate))
            {
                return(newValidate);
            }
            else
            {
                return(null);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Marque la présence d'un participant UNIQUEMENT en base (l'envoi en WS est fait ailleurs avec Send)
        /// </summary>
        /// <param name="validate">Identifier participant et prestation.</param>
        public void ValidateSQLOnly(ValidatePresence validate)
        {
            if (validate == null)
            {
                return;
            }

            // En fonction de l'Id prestation, on choisit la table
            if (validate.IdPrestation.HasValue)
            {
                // Objet Inscription
                var sqldata = new SQLData <InscriptionParticipant>();

                // On cherche l'inscription si elle existe...
                var inscription = sqldata.RetrieveAll().Where(x => x.IdParticipant == validate.IdParticipant && x.IdPrestation == validate.IdPrestation.Value).FirstOrDefault();

                if (inscription != null)
                {
                    // On update
                    inscription.DatePresence = DateTime.Now;

                    sqldata.UpdateData(inscription);
                }
                else
                {
                    // On insère
                    var newInscription = new InscriptionParticipant()
                    {
                        IdParticipant = validate.IdParticipant,
                        IdPrestation  = validate.IdPrestation,
                        IdStatusA39   = 3,
                        DatePresence  = DateTime.Now
                    };
                    sqldata.InsertData(newInscription);
                }
            }
            else
            {
                // Objet Presence
                var sqldata = new SQLData <PresenceParticipant>();

                // On crée la présence
                var newPresence = new PresenceParticipant()
                {
                    IdParticipant = validate.IdParticipant,
                    StatusPartA09 = 3,
                    DatePresence  = DateTime.Now
                };
                sqldata.InsertData(newPresence);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Envoie un validatePresence en attente ; renvoie un message d'erreur éventuellement (sinon OK)
        /// </summary>
        /// <returns>The send.</returns>
        /// <param name="validatePresence">Validate presence.</param>
        public async Task Send(ValidatePresence validatePresence)
        {
            // Sauf si Hors connexion
            if (Global.GetSettingsBool(TypeSettings.IsHorsConnexion))
            {
                // On sort
                throw new Exception("Attention : hors connexion.");
            }

            // Creates HTTP web request
            // Attention : Si EBIllet : on ajoute un paramètre àl'URL d'envoi
            string url = Global.GetUrlBase();

            if (validatePresence.IdPrestation.HasValue)
            {
                url += Global.WS_SET_PARTICIPANT_INSCRIPTION_PRESTATION + "?id=" + validatePresence.IdParticipant;
                if (validatePresence.IsEBillet)
                {
                    url += "&ebillet=true&idPrestation=" + validatePresence.IdPrestation.Value;
                }
            }
            else
            {
                url += Global.WS_SET_PARTICIPANT_PRESENCE_SS_PRESTA + validatePresence.IdParticipant;
            }

            HttpWebRequest request = WebRequest.Create(new Uri(url)) as HttpWebRequest;

            request.ContentType = "application/json";

            // Method
            request.Method = "POST";

            // Token
            if (!string.IsNullOrEmpty(this.Token))
            {
                request.Headers["AgoraEvent-Token"] = this.Token;
            }

            //request.ContentLength = 0; // (string.IsNullOrEmpty(this.PostString) ? 0 : this.PostString.Length);
            // On passe un param vide ??? Sinon, l'appel plante...
            // Pas très élégant, mais je ne vois pas comment faire mieux
            var stream2 = await request.GetRequestStreamAsync();

            using (var writer = new StreamWriter(stream2))
            {
                writer.Write("");
                writer.Flush();
                writer.Dispose();
            }



            // Sends the request
            await Task.Run(() =>
            {
                bool mustDelete = false;

                try
                {
                    using (WebResponse response = DependencyService.Get <INetTools>().GetResponse(request))
                    {
                        // Si on est passé sans exception : on a le droit de se logger


                        // Le stream
                        using (Stream stream = DependencyService.Get <INetTools>().GetResponseStream(response))
                        {
                            // Build the JSON doc
                            JsonValue jsonDoc = JsonObject.Load(stream);


                            // On parse le résultat
                            string temp = jsonDoc.ToString();
                            // Résultat : "[\"1692915\", \"2FAVAND\", \"Nicolas\"]"
                            mustDelete = true;
                        }
                    }
                }
                // Gestion des exceptions
                // Attention : si on est déjà inscrit, on renvoie un 403
                catch (WebException ex)
                {
                    HttpWebResponse objresponse = ex.Response as HttpWebResponse;
                    if (objresponse.StatusCode == HttpStatusCode.Unauthorized ||
                        objresponse.StatusCode == HttpStatusCode.Forbidden ||
                        objresponse.StatusCode == HttpStatusCode.NotFound)
                    {
                        mustDelete = true;

                        // 401 : Session expirée ou / Impossible d'identifier le billet
                        // 403 : le participant a déjà été enregistré aujourd'hui / auparavant
                        // 404 : Billet non valide / vérifiez que le participant fait partie de la liste d'invités
                        // On enlève de la base et
                        // rethrow
                        //sqlData.DeleteData(validatePresence);

                        if (!isSilentExceptions)
                        {
                            throw ex;
                        }
                    }
                    else
                    {
                        // Générique
                        mustDelete = false;
                        //sqlData.DeleteData(validatePresence);

                        if (!isSilentExceptions)
                        {
                            throw ex;
                        }
                    }
                }
                catch (Exception e)
                {
                    mustDelete = false;

                    throw e;
                }
                finally
                {
                    // Si la donnée a été correctement envoyée : on la supprime de la table ValidatePresence
                    // TODO
                    if (mustDelete)
                    {
                        sqlData.DeleteData(validatePresence);
                    }
                }
            });
        }