コード例 #1
0
        public object Get(GetSolicitud request)
        {
            if (logger.IsDebugEnabled) logger.Debug("Request GetSolicitud");
            if (request.Id == nullGuid)
            {
                if (logger.IsDebugEnabled) logger.Debug("Not Found: " + request.Id.ToString());
                throw HttpError.NotFound("No encontrado");
            }
            dbsolicitud = Db.Select<modelSolicitud>(q => q.Id == request.Id);
            if (dbsolicitud.Count == 0)
            {
                if (logger.IsDebugEnabled) logger.Debug("Not Found: ");
                throw HttpError.NotFound("No encontrado");
            }

            List<Solicitud> payload = BuildPayloadSolicitud(dbsolicitud);
            SolicitudResponse response = new SolicitudResponse();
            response.solicitud = payload.First();
            return response;
        }
コード例 #2
0
        public object Post(CreateSolicitud request)
        {
            Guid solicitudId;

               if (request.solicitud == null) throw HttpError.Conflict("Se requieren datos");

            Solicitud solicitud = request.solicitud;
            using (var db = DbFactory.Open())
            {
                if (!db.Exists<modelDmsTaller>(s => s.Id == solicitud.DmsTallerId)) throw HttpError.Conflict("No existe el taller");
                if (solicitud.Id != nullGuid) if (db.Exists<modelSolicitud>(s => s.Id == solicitud.Id)) throw HttpError.Conflict("La solicitud ya existe");

                modelSolicitud dbsolicitud = new modelSolicitud();
                List<modelSolicitudJob> dbsolicitudJob = new List<modelSolicitudJob>();
                List<modelSolicitudHora> dbsolicitudHora = new List<modelSolicitudHora>();

                dbsolicitud = solicitud.ConvertTo<modelSolicitud>();
                dbsolicitudJob = solicitud.solicitudjobs.ConvertAll(x => x.ConvertTo<modelSolicitudJob>());
                dbsolicitudHora = solicitud.solicitudhoras.ConvertAll(x => x.ConvertTo<modelSolicitudHora>());

                if (dbsolicitud.Id == nullGuid) dbsolicitud.Id = Guid.NewGuid();

                solicitudId = dbsolicitud.Id;

                DateTime now = DateTime.Now;
                dbsolicitud.CreacionFecha = now;

                Guid guidOutput;
                if (!Guid.TryParse(dbsolicitud.CreacionDevice.ToString(), out guidOutput))
                {
                    dbsolicitud.CreacionDevice = Guid.NewGuid();
                }

                //if (dbsolicitud.CreacionDevice == nullGuid) dbsolicitud.CreacionDevice = Guid.NewGuid();

                Db.Insert(dbsolicitud);

                if (dbsolicitudJob != null)
                {
                    foreach (modelSolicitudJob job in dbsolicitudJob)
                    {

                        if (job.Id == nullGuid) job.Id = Guid.NewGuid();
                        job.SolicitudId = solicitudId;
                        Db.Insert(job);
                    }
                }
                if (dbsolicitudJob != null)
                {
                    foreach (modelSolicitudHora hora in dbsolicitudHora)
                    {
                        if (hora.Id == nullGuid) hora.Id = Guid.NewGuid();
                        hora.SolicitudId = solicitudId;
                        Db.Insert(hora);
                    }
                }
            }

            // Obtengo la Conexión al ServiceBus que ha sido almacenada en web.config
            string connectionString = CloudConfigurationManager.GetSetting("CitaTallerAzureBusManager");
            // Este el "topic" por el que publicaremos en el service bus.
            string topicName = "solicitudcitataller";

            //string filterName = "DmsTallerId-" + solicitud.DmsTallerId.ToString();
            // Verifico la existencia del Topic. Si no existe, lo creo.
            // Pero, necesito conectarmet como RootManager. Ojo con la connectionString!
            var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
            if (!namespaceManager.TopicExists(topicName))
            {
                namespaceManager.CreateTopic(topicName);
            }

            //// También creo la suscripción "Allmessages" sin filtro.
            //if (!namespaceManager.SubscriptionExists(topicName, "AllMessages"))
            //{
            //    namespaceManager.CreateSubscription(topicName, "AllMessages");
            //}

            //// También creo la suscripción para un taller en concreto
            //if (!namespaceManager.SubscriptionExists(topicName, filterName))
            //{
            //    SqlFilter DmsTallerIdFilter = new SqlFilter("DmsTallerId = '" + solicitud.DmsTallerId.ToString() + "'");
            //    namespaceManager.CreateSubscription(topicName, filterName, DmsTallerIdFilter);
            //}

            // Creo el mensaje a enviar.
            // Le añado 2 propiedades: SolicitudID y DmsTallerId
            BrokeredMessage message = new BrokeredMessage("Solicitud " + solicitudId.ToString());
            message.Label = "Solicitud " + solicitudId.ToString();
            message.Properties["SolicitudID"] = solicitudId.ToString();
            message.Properties["DmsTallerId"] = solicitud.DmsTallerId.ToString().Replace("-", "").Trim().ToUpper();

            // Publico el mensaje en el Topic.
            TopicClient Client = TopicClient.CreateFromConnectionString(connectionString, topicName);
            Client.Send(message);

            // Ahora si. Resuelvo la response al cliente Rest diciendo que la Solicitud ha sido grabada.

            Solicitud payload = BuildPayloadSolicitudId(solicitudId);
            SolicitudResponse response = new SolicitudResponse();
            response.solicitud = payload;
            return response;
        }