public ProxyServer(string host, int port, IBLERequest request)
 {
     httpListener = new HttpListener();
     httpListener.Prefixes.Add($"http://{host}:{port}/");
     clients           = new List <WebSocket>();
     clientDisposables = new List <IDisposable>();
     requestAgent      = new RequestAgent(request, this);
 }
예제 #2
0
 public void initial()
 {
     market   = new RequestManager();
     rq       = new RequestAgent();
     userInfo = (MarketUserData)market.SendQueryUserRequest();
     sql      = new SQLmanager();
     ama      = new AutonomousMarketAgent();
 }
        public bool Schedule(ServiceRequest sr)
        {
            TechnicianController techCtr = new TechnicianController();

            List <Package>    packages = sr.ServiceContract.Packages;
            List <Technician> techs    = techCtr.Read();

            Technician     techMin = null;
            Service        serMin  = null;
            RequestAgent   reqAgent;
            List <Service> skills;

            foreach (Package i in packages)
            {
                foreach (Technician j in techs)
                {
                    skills = j.Skills;

                    foreach (Service k in skills)
                    {
                        if (k.Equals(i.Service))
                        {
                            int queueDuration    = GetQueueDuration(j);
                            int queueDurationMin = GetQueueDuration(j);
                            if (techMin != null)
                            {
                                queueDurationMin = GetQueueDuration(techMin);
                            }

                            if (queueDuration <= queueDurationMin)
                            {
                                techMin = j;
                                serMin  = k;
                            }
                        }
                    }
                }

                if (techMin == null)
                {
                    return(false);
                }

                techMin.EmploymentStatus = "Working";
                techCtr.Update(techMin);
                reqAgent = new RequestAgent(serMin, techMin);
                rqCtr.Add(reqAgent, sr);

                return(true);
            }

            return(false);
        }
예제 #4
0
 private void OnExecuteRequest(RequestAgent requestAgent)
 {
     try
     {
         requestAgent.Execute();
     }
     catch (Exception e_)
     {
         if (HttpServer.EnableLog(LogType.Error))
         {
             HttpServer.Log(LogType.Error, $"gateway {requestAgent.Request.Url} route to {requestAgent.Server.Uri} error {e_.Message}{e_.StackTrace}");
         }
     }
 }
예제 #5
0
 internal void OnResponding(RequestAgent request, ArraySegment <byte> data, bool completed)
 {
     if (request.Code == 200)
     {
         EventRespondingArgs e = new EventRespondingArgs();
         e.Completed      = completed;
         e.FirstReceive   = request.BodyReceives == 1;
         e.Data           = data;
         e.Gateway        = this;
         e.ResponseStatus = request.ResponseStatus;
         e.Header         = request.ResponseHeader;
         e.Request        = request.Request;
         e.Server         = request.Server;
         this.Pluginer.Responding(e);
     }
 }
예제 #6
0
        public IEnumerable <string> Get()
        {
            string[] result = new string[2];
            result[0] = "111";
            result[1] = "222";

            Foo(123, null);

            RequestAgent.Send(HttpMethod.Get, new Uri("http://localhost:6000/api/values/1"), null, (code, content) =>
            {
                if (code == System.Net.HttpStatusCode.OK)
                {
                    result[1] = "333";
                }
            });


            Bar(123, new Uri("http://www.lifepre.com"));
            return(result);
        }
예제 #7
0
 internal void AddRequest(RequestAgent requestAgent)
 {
     multiThreadDispatcher.Enqueue(requestAgent, 10);
 }
예제 #8
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            CreateAgentResponseBody response = new CreateAgentResponseBody();

            try
            {
                if (sessionID.Equals("0"))
                {
                    return new CreateAgentResponseBody()
                           {
                               ResponseCode    = 90,
                               ResponseMessage = "error session",
                               TransactionID   = 0,
                               Errors          = { new ErrorItem()
                                                   {
                                                       ErrorId = "90", ErrorDescription = "Session invalida"
                                                   } }
                           }
                }
                ;



                CreateAgentRequestBody request = requestObject as CreateAgentRequestBody;


                logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[CreateAgentProvider]").Tag("[SEND-DATA] createAgentParameters ").Value(request));



                int currentUserId = Utils.GetUserId(request.AuthenticationData.Username); /// OJO
                MD5 md5           = new MD5CryptoServiceProvider();



                var result = Utils.ValidateSoldChildComissions(request.AuthenticationData.Username, request.Commission);
                if (!result.IsObjectValidResult())
                {
                    response.ResponseCode = 100;

                    response.ResponseMessage = "[ERROR DE NEGOCIO] COMISION POR DEPOSITO";
                    response.Errors          = new ErrorItems()
                    {
                        new ErrorItem()
                        {
                            ErrorId = "" + result.ResponseCode, ErrorDescription = result.ResponseMessage
                        }
                    };
                    return(response);
                }

                var reqAgent = new RequestAgent()
                {
                    age_cuit          = request.RIF,
                    age_nombre        = request.AgentName,
                    age_razonsocial   = request.LegalName,
                    age_direccion     = request.Address,
                    age_entrecalles   = request.BetweenStreets,
                    age_ciu_id        = decimal.Parse(request.City),
                    age_tel           = request.Phone,
                    age_cel           = request.NumberIMEI,
                    age_email         = request.Email,
                    age_contacto      = request.ContactPerson,
                    age_subNiveles    = decimal.Parse(request.SubLevels),
                    age_pdv           = request.Pdv,
                    age_observaciones = request.Notes,

                    ct_id = request.TaxCategory == 0 ? 1 : request.TaxCategory, //Categoria Tributaria
                    ta_id = 1,                                                  //Tipo de agencia
                    sa_id = request.SegmentId == 0 ? 1 : request.SegmentId,     // segmento de la agencia

                    age_tipo = "SU",
                    age_autenticaterminal = "N",
                    age_estado            = "AC",
                    //Solicitud de operaciones no se debio cambiar
                    age_prefijosrest = "",

                    usr_id_modificacion = currentUserId,

                    age_comisionadeposito             = request.CommissionableDeposits ? "S" : "N",
                    age_montocomision                 = request.Commission,
                    limiteCredito                     = request.CheckingAccountCreditLimit.ToString(),
                    autorizacionAutomatica            = request.AutomaticAuthorization.ToString(),
                    quitaAutomatica                   = request.AutomaticReverse.ToString(),
                    generacionAutomatica              = request.AutomaticReposition.ToString(),
                    montoMinimoPorPedido              = request.MinimumOrderAmount.ToString(),
                    montoMaximoPorPedido              = request.MaximumOrderAmount.ToString(),
                    pedidoMaximoMensual               = request.MaximumMonthlyAmount.ToString(),
                    autorizacionAutomaticaMontoDiario = request.MaximumAuthorizedDailyAmount.ToString(),
                    recargaAsincronica                = request.AsynchronousTopup.ToString(),
                    comisionporventa                  = request.SalesCommission,

                    usr_nombre   = request.UserName1,
                    usr_apellido = request.UserLastName1,

                    acc_login    = request.AccessLogin1,
                    acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword1))),
                    //segundo usuario
                    acc_validityDate        = DateTime.Now.AddDays(360),
                    second_acc_validityDate = DateTime.Now.AddDays(360),
                    third_acc_validityDate  = DateTime.Now.AddDays(360),
                    // primer acceso segundo usuario
                    second_acc_login    = request.AccessLogin2,
                    second_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword2))),
                    /*request.AccessType2.ToUpper() == "POS" ? 6 : request.AccessType2.ToUpper() == "WEB" ? 1 : request.AccessType2.ToUpper() == "POSWEB" ? 12 : request.AccessType2.ToUpper() == "USSD" ? 9 : request.AccessType2.ToUpper() == "SMS" ? 2 : 0*/
                    second_tac_id = Utils.GetAccessTypeCode(request.AccessType2),



                    usr_administrador = request.IsAdministrator2,
                    grpId             = request.Group,
                    //Valores Originales
                    acc_cambiopassword        = "******",
                    second_acc_cambiopassword = "******",
                    third_acc_cambiopassword  = "******"
                                                //

                                                //TODO
                                                //acc_cambiopassword = "",
                                                //second_acc_cambiopassword = ""
                                                //
                };

                //segundo acceso segundo usuario
                if (reqAgent.av_sc_ac_secondUser = request.AvailableSecondAccessSecondUser)
                {
                    reqAgent.third_acc_login    = request.AccessLogin3;
                    reqAgent.third_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword3)));
                    reqAgent.third_tac_id       = Utils.GetAccessTypeCode(request.AccessType3);
                }



                foreach (ProductCommision item in request.ProductsCommission)
                {
                    reqAgent.productos.Add(new RequestAgent.Product()
                    {
                        prdId = item.ProductId, comision = item.Commission
                    });
                }


                ResponseAgent responseAgent = Utils.CreateAgent(reqAgent);

                //bool isSuccessful = String.IsNullOrEmpty(request.RIF) ? false : request.RIF.EndsWith("0");
                bool isSuccessful = int.Parse(responseAgent.response_code) == 0;

                response.ResponseCode    = isSuccessful ? 0 : 1;
                response.ResponseMessage = isSuccessful ? "OK" : "ER";
                response.TransactionID   = 0;
                response.AgeId           = responseAgent.AgeId;

                if (!isSuccessful)
                {
                    var errors = new ErrorItems();
                    errors.Add(new ErrorItem()
                    {
                        ErrorId = responseAgent.response_code, ErrorDescription = responseAgent.message
                    });
                    //var errors = new ErrorItems();
                    //for (int i = 0; i < new Random().Next(1, 6); i++)
                    //    errors.Add(new ErrorItem() { ErrorId = i.ToString(), ErrorDescription = "Error random " + i });
                    response.Errors = errors;
                }

                logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[CreateAgentProvider] [RECV-DATA] CreateAgentResult {response={" + response + "}}");
            }
            catch (Exception ex)
            {
                response.ResponseCode    = 500;
                response.ResponseMessage = _GenericError;
                response.TransactionID   = 0;
                response.Errors          = new ErrorItems()
                {
                    new ErrorItem()
                    {
                        ErrorId = "90", ErrorDescription = ex.Message
                    }
                };

                string mensaje = String.Concat("[API] " + base.LOG_PREFIX + "[CreateAgentProvider] ", ". Exception: ", ex.Message, ". ", ex.StackTrace);
                logger.ErrorLow(mensaje);
            }
            return(response);
        }
예제 #9
0
        /// <summary>
        /// Actualiza un agente en el sistema, tanto en el funente principal como en comisiones
        /// Precondicion:
        /// -el agente a editar debe ser hijo del agente logeado en el sistema
        /// -los datos del agente estan completos
        /// -los datos de los accesos estan completos, no repetidos y disponibles en el sistema
        /// </summary>
        /// <param name="requestObject"></param>
        /// <param name="kinacuWS"></param>
        /// <param name="sessionID"></param>
        /// <returns></returns>
        /// <returns>Retorna el tipo IMovilwayApiResponse con el respectivo codigo de error y mensaje</returns>
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, KinacuWebService.SaleInterface kinacuWS, string sessionID)
        {
            CreateAgentResponseBody response = new CreateAgentResponseBody();

            try
            {
                if (sessionID.Equals("0"))
                {
                    return new CreateAgentResponseBody()
                           {
                               ResponseCode    = 90,
                               ResponseMessage = "error session",
                               TransactionID   = 0,
                               Errors          = new ErrorItems()
                               {
                                   new ErrorItem()
                                   {
                                       ErrorId = "90", ErrorDescription = "Session invalida"
                                   }
                               }
                           }
                }
                ;

                CreateAgentRequestBody request = requestObject as CreateAgentRequestBody;


                logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[UpdateAgentProvider]").Tag("[RCV-DATA] UpdateAgentProviderParameters ").Value(request));


                dynamic data = new { AgeId = request.AgeId, Login = request.AuthenticationData.Username };
                if (!Utils.HaveRelationWithAgent(data))
                {
                    response.ResponseCode = 90;

                    response.ResponseMessage = "ERROR DE PERMISOS";
                    response.TransactionID   = 0;
                    response.Errors          = new ErrorItems()
                    {
                        new ErrorItem()
                        {
                            ErrorId = "90", ErrorDescription = "NO TIENE PERMISOS PARA EDITAR ESTE REGISTRO"
                        }
                    };
                    return(response);
                }


                //validacion de edicion de productos
                //precondicion: se ha validado que el agente es padre del hijo
                int AgeLogId = Utils.GetAgentIdByAccessPosWeb(request.AuthenticationData.Username);

                // se descarta que el usuario logoeado no se ha el mismo que se esta editando
                // tener encuenta casos especiales
                bool CanEditProdutcs = AgeLogId != request.AgeId;


                var result = Utils.ValidateSoldChildComissions(request.AgeId, request.Commission);    //(request.AgeId, AgeLogId, request.Commission);
                if (!result.IsObjectValidResult())
                {
                    response.ResponseCode    = 100;
                    response.ResponseMessage = "[ERROR DE NEGOCIO] COMISION POR DEPOSITO";
                    response.Errors          = new ErrorItems()
                    {
                        new ErrorItem()
                        {
                            ErrorId = "" + result.ResponseCode, ErrorDescription = result.ResponseMessage
                        }
                    };
                    return(response);
                }



                int currentUserId = Utils.GetUserId(request.AuthenticationData.Username);
                MD5 md5           = new MD5CryptoServiceProvider();


                var reqAgent = new RequestAgent()
                {
                    age_id            = request.AgeId,
                    age_cuit          = request.RIF,
                    age_nombre        = request.AgentName,
                    age_razonsocial   = request.LegalName,
                    age_direccion     = request.Address,
                    age_entrecalles   = request.BetweenStreets,
                    age_ciu_id        = decimal.Parse(request.City),
                    age_tel           = request.Phone,
                    age_cel           = request.NumberIMEI,
                    age_email         = request.Email,
                    age_contacto      = request.ContactPerson,
                    age_subNiveles    = decimal.Parse(request.SubLevels),
                    age_pdv           = request.Pdv,
                    age_observaciones = request.Notes,
                    ct_id             = request.TaxCategory, //Categoria Tributaria
                    ta_id             = 1,                   // Tipo de agencia
                    sa_id             = request.SegmentId,   // segmento de la agencia

                    age_tipo = "SU",
                    age_autenticaterminal = "N",
                    // Se quita este valor por peticion del usuario
                    age_prefijosrest = string.Empty,
                    age_estado       = "AC",

                    age_comisionadeposito = request.CommissionableDeposits ? "S" : "N",
                    age_montocomision     = request.Commission,
                    //TODO NULL POINTER PROBLEMAS DE CULTIRA
                    limiteCredito                     = request.CheckingAccountCreditLimit.ToString(),
                    autorizacionAutomatica            = request.AutomaticAuthorization.ToString(),
                    quitaAutomatica                   = request.AutomaticReverse.ToString(),
                    generacionAutomatica              = request.AutomaticReposition.ToString(),
                    montoMinimoPorPedido              = request.MinimumOrderAmount.ToString(),
                    montoMaximoPorPedido              = request.MaximumOrderAmount.ToString(),
                    pedidoMaximoMensual               = request.MaximumMonthlyAmount.ToString(),
                    autorizacionAutomaticaMontoDiario = request.MaximumAuthorizedDailyAmount.ToString(),
                    recargaAsincronica                = request.AsynchronousTopup.ToString(),

                    comisionporventa = request.SalesCommission,

                    usr_nombre   = request.UserName1,
                    usr_apellido = request.UserLastName1,
                    acc_login    = request.AccessLogin1,

                    //segundo usuario
                    //TODO cada ves que se actualiza se extiende el periodo de valdiacion
                    acc_validityDate        = DateTime.Now.AddDays(360),
                    second_acc_validityDate = DateTime.Now.AddDays(360),
                    third_acc_validityDate  = DateTime.Now.AddDays(360),
                    // primer acceso segundo usuario
                    second_acc_login = request.AccessLogin2,


                    /*request.AccessType2.ToUpper() == "POS" ? 6 : request.AccessType2.ToUpper() == "WEB" ? 1 : request.AccessType2.ToUpper() == "POSWEB" ? 12 : request.AccessType2.ToUpper() == "USSD" ? 9 : request.AccessType2.ToUpper() == "SMS" ? 2 : 0*/


                    //segundo acceso segundo usuario
                    av_sc_ac_secondUser = request.AvailableSecondAccessSecondUser,
                    third_acc_login     = request.AccessLogin3,

                    usr_administrador = request.IsAdministrator2,
                    grpId             = request.Group,
                    //Valores Originales
                    acc_cambiopassword        = "******",
                    second_acc_cambiopassword = "******",
                    third_acc_cambiopassword  = "******",


                    usr_id_modificacion = currentUserId,
                    age_modificacion    = AgeLogId
                                          //
                                          //TODO
                                          //acc_cambiopassword = "",
                                          //second_acc_cambiopassword = ""
                                          //
                };

                reqAgent.second_tac_id = Utils.GetAccessTypeCode(request.AccessType2);

                if (!string.IsNullOrEmpty(request.AccessType3))
                {
                    reqAgent.third_tac_id = Utils.GetAccessTypeCode(request.AccessType3);
                }

                if (!string.IsNullOrEmpty(request.AccessPassword1))
                {
                    reqAgent.acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword1)));
                }

                if (!string.IsNullOrEmpty(request.AccessPassword2))
                {
                    reqAgent.second_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword2)));
                }

                if (!string.IsNullOrEmpty(request.AccessPassword3))
                {
                    reqAgent.third_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword3)));
                }

                reqAgent.productos = new List <RequestAgent.Product>();

                request.ProductsCommission.ForEach(p =>
                {
                    reqAgent.productos.Add(new RequestAgent.Product()
                    {
                        prdId = p.ProductId, comision = p.Commission
                    });
                });



                result = Utils.UpdateAgent(reqAgent, CanEditProdutcs);
                response.ResponseCode    = result.ResponseCode;
                response.ResponseMessage = result.ResponseMessage;
                response.TransactionID   = 0;

                if (!result.IsObjectValidResult())
                {
                    response.ResponseCode    = response.ResponseCode;
                    response.ResponseMessage = _GenericError;

                    var errors = new ErrorItems();
                    //errores del result
                    errors.Add(new ErrorItem()
                    {
                        ErrorId = "" + result.ResponseCode, ErrorDescription = result.ResponseMessage
                    });

                    response.Errors = errors;
                }
            }
            catch (Exception ex)
            {
                //cambiar error general erro inesperado

                response.ResponseCode    = 500;
                response.ResponseMessage = _GenericError;
                response.TransactionID   = 0;
                response.Errors          = new ErrorItems()
                {
                    new ErrorItem()
                    {
                        ErrorId = "90", ErrorDescription = ex.Message
                    }
                };

                string mensaje = String.Concat("[API] " + base.LOG_PREFIX + "[UpdateAgentProvider] ", ". Exception: ", ex.Message, ". ", ex.StackTrace);
                logger.ErrorLow(mensaje);
            }

            logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX).Tag("[UpdateAgentProviderResult]").Value(response));
            return(response);
        }
예제 #10
0
 public EventServerRequestingArgs(RequestAgent requestAgent, HttpRequest request, HttpResponse response, Gateway gateway)
     : base(request, response, gateway)
 {
     RequestAgent = RequestAgent;
 }
예제 #11
0
        /// <summary>
        /// Retorna los datos del Agente en la clase AgentEdit, con el fin de editar el agente
        /// Precondicion:
        /// -El agente existe en el sistema
        /// Postcondicion:
        /// Se Obtienen los datos del agente necesarios para la pantalla de edicion

        /// </summary>
        /// <param name="requestObject"></param>
        /// <param name="kinacuWS"></param>
        /// <param name="sessionID"></param>
        /// <returns>Retorna un IMovilwayApiResponse con los datos del Agente a editar</returns>
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, string sessionID)
        {
            GetAgentResponseBody response = new GetAgentResponseBody();

            if (sessionID.Equals("0"))
            {
                response.ResponseCode    = 90;
                response.ResponseMessage = "SESIÓN INVALIDA";
                return(response);
            }


            try
            {
                GetAgentRequestBody request  = requestObject as GetAgentRequestBody;
                RequestAgent        reqAgent = null;

                logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[GetAgentEdit]").Tag("[SEND-DATA] GetAgentRequestParameters ").Value(request));

                /*
                 * dynamic data = new { AgeId = request.AgeId, Login = request.AuthenticationData.Username };
                 * if (!Utils.HaveRelationWithAgent(data))
                 * {
                 *  response.ResponseCode = 90;
                 *  response.ResponseMessage = "ERROR DE PERMISOS";
                 *  response.TransactionID = 0;
                 *  response.Errors = new ErrorItems() { new ErrorItem() { ErrorId = "90", ErrorDescription = "NO TIENE PERMISOS PARA EDITAR ESTE REGISTRO" } };
                 *
                 *  return response;
                 * }*/


                GenericApiResult <RequestAgent> result = Utils.GetAgentEditById(request.AgeId);

                //falta builder
                response.ResponseCode    = result.ResponseCode;
                response.ResponseMessage = result.ResponseMessage;

                if (result.IsObjectValidResult())
                {
                    reqAgent        = result.ObjectResult; //result["Obj_Result"] as RequestAgent;
                    response.Agente = new AgentEdit()
                    {
                        RIF                    = reqAgent.age_cuit,
                        AgentName              = reqAgent.age_nombre,
                        LegalName              = reqAgent.age_razonsocial,
                        Address                = reqAgent.age_direccion,
                        BetweenStreets         = reqAgent.age_entrecalles,
                        City                   = reqAgent.age_ciu_id.ToString(CultureInfo.InvariantCulture),
                        Province               = reqAgent.pro_id.ToString(CultureInfo.InvariantCulture),
                        Country                = reqAgent.pai_id.ToString(CultureInfo.InvariantCulture),
                        Phone                  = reqAgent.age_tel,
                        NumberIMEI             = reqAgent.age_cel,
                        Email                  = reqAgent.age_email,
                        ContactPerson          = reqAgent.age_contacto,
                        SubLevels              = reqAgent.age_subNiveles.ToString(CultureInfo.InvariantCulture),
                        Pdv                    = reqAgent.age_pdv,
                        CommissionableDeposits = reqAgent.age_comisionadeposito != null && reqAgent.age_comisionadeposito.Equals("S"), //? "S" : "N" ,
                        Commission             = reqAgent.age_montocomision,
                        Notes                  = reqAgent.age_observaciones,
                        //primer usuario
                        UserName1     = reqAgent.usr_nombre,
                        UserLastName1 = reqAgent.usr_apellido,
                        AccessLogin1  = reqAgent.acc_login,

                        //segundo acceso segundo usuario
                        //por defecto login es vacio
                        AccessLogin2 = reqAgent.second_acc_login,
                        //validacion pueden haber agentes con solo un acceso
                        AccessType2 = reqAgent.second_tac_id > 0 ? Utils.GetAccessName(Convert.ToInt32(reqAgent.second_tac_id)) : "",

                        //tercer acceso segundo usuario
                        AvailableSecondAccessSecondUser = reqAgent.av_sc_ac_secondUser,
                        AccessLogin3 = reqAgent.third_acc_login,


                        IsAdministrator2 = reqAgent.usr_administrador,
                        Group            = Convert.ToInt32(reqAgent.grpId),

                        //booleano que indica si tiene comision
                        SalesCommission = reqAgent.comisionporventa,
                        //productos comision
                        AgeId       = reqAgent.age_id,
                        TaxCategory = reqAgent.ct_id == 0 ? 1 : Convert.ToDecimal(reqAgent.ct_id),
                        SegmentId   = reqAgent.sa_id == 0 ? 1 : Convert.ToDecimal(reqAgent.sa_id)
                    };

                    //TODO ABOUT CHEK ALL PRODUCTS
                    //llamar a product lis GetProductListProvider (ApiServiceName.GetProductList)
                    //hacer la logica para saber si todos los productos estan chequeados o no

                    try
                    {
                        if (reqAgent.third_tac_id != 0)
                        {
                            response.Agente.AccessType3 = Utils.GetAccessName(Convert.ToInt32(reqAgent.third_tac_id));
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.InfoLow(() => TagValue.New().Tag("ERROR OBTENIENDO NOMBRE DEL AGENTE").Exception(ex));
                    }

                    response.Agente.AutomaticAuthorization = Convert.ToBoolean(reqAgent.autorizacionAutomatica);
                    response.Agente.AutomaticReverse       = Convert.ToBoolean(reqAgent.quitaAutomatica);
                    response.Agente.AutomaticReposition    = Convert.ToBoolean(reqAgent.generacionAutomatica);
                    response.Agente.AsynchronousTopup      = Convert.ToBoolean(reqAgent.recargaAsincronica);

                    //evitar problemas con la cultura

                    response.Agente.CheckingAccountCreditLimit   = Convert.ToDecimal(reqAgent.limiteCredito);
                    response.Agente.MinimumOrderAmount           = Convert.ToDecimal(reqAgent.montoMinimoPorPedido);
                    response.Agente.MaximumOrderAmount           = Convert.ToDecimal(reqAgent.montoMaximoPorPedido);
                    response.Agente.MaximumMonthlyAmount         = Convert.ToDecimal(reqAgent.pedidoMaximoMensual);
                    response.Agente.MaximumAuthorizedDailyAmount = Convert.ToDecimal(reqAgent.autorizacionAutomaticaMontoDiario);

                    response.Agente.ProductsCommission = new List <ProductCommision>();


                    if (reqAgent.productos != null && reqAgent.productos.Count() > 0)
                    {
                        reqAgent.productos.ForEach(p => { response.Agente.ProductsCommission.Add(new ProductCommision()
                            {
                                ProductId = p.prdId, Commission = p.comision
                            }); });
                    }
                }
            }
            catch (Exception ex)
            {
                response.ResponseCode    = 500;
                response.ResponseMessage = "ERROR INESPERADO OBTENIDO AGENTE " + ex.Message;

                logger.ErrorLow(String.Concat("[QRY] ", LOG_PREFIX, " ", response.ResponseCode, "-", response.ResponseMessage, ". Exception: ", ex.Message, ". ", ex.StackTrace));
            }


            return(response);
        }