Esempio n. 1
0
        public static object ToSalesforceEntity(this InfoPagoNM infoPagoNM)
        {
            try
            {
                return(new
                {
                    infoPagoNM.idOportunidad_SF,
                    infoPagoNM.Identificador_NM,
                    infoPagoNM.IdInformacionPago_SF,
                    infoPagoNM.ListPago_Boleto_Servicios,
                    //Aqui Lista ListPago_Boleto_Servicios

                    infoPagoNM.totalPagar,
                    infoPagoNM.montoDescuento,
                    infoPagoNM.textoDescuento,
                    infoPagoNM.promoWebCode,
                    infoPagoNM.totalFacturar,
                    infoPagoNM.feeAsumidoGeneralBoletos,
                    infoPagoNM.ListPagosDesglose_Paquete,
                    //Aqui Lista ListPagosDesglose_Paquete

                    infoPagoNM.precioTotalHabitacionesPaq,
                    infoPagoNM.gastosAdministrativosPaq,
                    infoPagoNM.tarjetaDeTurismo,
                    infoPagoNM.tarjetaDeAsistencia,
                    //oInfoPagoNM.PaqueteId = infoPagoNM.PaqueteId,
                    infoPagoNM.ListPagosServicio_Paquete,
                    //Aqui Lista ListPagosServicio_Paquete

                    infoPagoNM.precioTotalActividadesPaq,
                    infoPagoNM.textoDescuentoPaq,
                    infoPagoNM.montoDescuentoPaq,
                    infoPagoNM.totalFacturarPaq,
                    infoPagoNM.precioTotalPagarPaq,
                    infoPagoNM.cantDiasSeg,
                    infoPagoNM.precioUnitarioSeg,
                    infoPagoNM.MontoSeg,
                    infoPagoNM.DescuentoSeg,
                    infoPagoNM.MontoReservaSeg,
                    infoPagoNM.accion_SF,
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public IHttpActionResult Send(UnidadNegocio unidadNegocio)
        {
            IEnumerable <InformacionPagoNM> informacionPagoNMs        = null;
            List <RptaInformacionPagoSF>    ListRptaInformacionPagoSF = null;
            List <InfoPagoNM>     lInfoPagoNM            = null;
            RptaInformacionPagoSF _rptaInformacionPagoSF = null;
            string  error        = string.Empty;
            object  objEnvio     = null;
            dynamic jsonResponse = null;

            try
            {
                var _unidadNegocio = RepositoryByBusiness(unidadNegocio.Descripcion.ToUnidadNegocio());
                RepositoryByBusiness(_unidadNegocio);
                _instants[InstantKey.Salesforce] = DateTime.Now;

                /// I. Consulta de Informacion Pago NM
                informacionPagoNMs = (IEnumerable <InformacionPagoNM>)(_informacionPagoNMRepository.GetInformacionPago(_unidadNegocio))[OutParameter.CursorInformacionPagoNM];
                if (informacionPagoNMs == null || informacionPagoNMs.ToList().Count.Equals(0))
                {
                    return(Ok(informacionPagoNMs));
                }

                /// Obtiene Token para envío a Salesforce
                var authSf    = RestBase.GetToken();
                var token     = authSf[OutParameter.SF_Token].ToString();
                var crmServer = authSf[OutParameter.SF_UrlAuth].ToString();

                //Armando estructura de objetos.
                InfoPagoNM oInfoPagoNM;



                var results = (from p in informacionPagoNMs
                               group p.idOportunidad_SF by p.idOportunidad_SF into g
                               select new { idOportunidad_SF = g.Key }).ToList();


                string idOportunidad_SF = string.Empty;
                int    index            = -1;
                if (results != null)
                {
                    int id_sucursal = 0;
                    int codigoweb   = 0;
                    int PaqueteId   = 0;
                    lInfoPagoNM = new List <InfoPagoNM>();
                    foreach (var item in results)
                    {
                        oInfoPagoNM = new InfoPagoNM();

                        index = informacionPagoNMs.ToList().FindIndex(x => x.idOportunidad_SF == item.idOportunidad_SF);
                        oInfoPagoNM.idOportunidad_SF = item.idOportunidad_SF;

                        oInfoPagoNM.Identificador_NM     = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).Identificador_NM;
                        oInfoPagoNM.IdInformacionPago_SF = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).IdInformacionPago_SF;

                        //Aqui Lista ListPago_Boleto_Servicios

                        oInfoPagoNM.ListPago_Boleto_Servicios = informacionPagoNMs.Where(x => x.idOportunidad_SF == item.idOportunidad_SF && !string.IsNullOrWhiteSpace(x.reservaID))
                                                                .Select(x => new PagoBoletoServicios
                        {
                            reservaID    = x.reservaID,
                            tipoServicio = x.tipoServicio,
                            tipoPasajero = x.tipoPasajero,
                            totalBoleto  = x.totalBoleto,
                            tarifaNeto   = x.tarifaNeto,
                            impuestos    = x.impuestos,
                            cargos       = x.cargos,
                            descripcion  = x.descripcion
                        }).ToList();


                        oInfoPagoNM.totalPagar               = oInfoPagoNM.ListPago_Boleto_Servicios.Sum(x => x.totalBoleto);
                        oInfoPagoNM.montoDescuento           = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).montodescuento;
                        oInfoPagoNM.textoDescuento           = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).textodescuento;
                        oInfoPagoNM.promoWebCode             = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).promowebcode;
                        oInfoPagoNM.totalFacturar            = oInfoPagoNM.totalPagar - oInfoPagoNM.montoDescuento;
                        oInfoPagoNM.feeAsumidoGeneralBoletos = informacionPagoNMs.Where(x => x.idOportunidad_SF == item.idOportunidad_SF).Sum(x => x.feeAsumidoGeneralBoletos);
                        ////Aqui Lista ListPagosDesglose_Paquete


                        if (!string.IsNullOrWhiteSpace(informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).PaqueteId))
                        {
                            oInfoPagoNM.ListPagosDesglose_Paquete = new List <PagosDesglosePaquete>();
                            oInfoPagoNM.ListPagosDesglose_Paquete.Add(new PagosDesglosePaquete
                            {
                                precioTotalPorHabitacionPaq = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF && !string.IsNullOrWhiteSpace(x.PaqueteId)).precioTotalPorHabitacionPaq,
                                ListPorHabitacionPaq        = informacionPagoNMs.Where(y => y.idOportunidad_SF == item.idOportunidad_SF && !string.IsNullOrWhiteSpace(y.PaqueteId))
                                                              .Select(y => new PorHabitacion_Paq
                                {
                                    numHabitacionPaquete = y.numHabitacionPaquete,
                                    tipoPasajeroPaq      = y.tipoPasajeroPaq,
                                    cantidadPasajeroPaq  = y.cantidadPasajeroPaq,
                                    monedaPaq            = y.monedaPaq,
                                    precioUnitarioPaq    = y.precioUnitarioPaq,
                                    totalUnitarioPaq     = y.totalUnitarioPaq
                                }).ToList()
                            });
                        }


                        oInfoPagoNM.precioTotalHabitacionesPaq = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).precioTotalHabitacionesPaq;
                        oInfoPagoNM.gastosAdministrativosPaq   = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).gastosAdministrativosPaq;
                        oInfoPagoNM.tarjetaDeTurismo           = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).tarjetaDeTurismo;
                        oInfoPagoNM.tarjetaDeAsistencia        = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).tarjetaDeAsistencia;

                        ////Aqui Lista ListPagosServicio_Paquete =>GetListPagosServicio

                        if (!string.IsNullOrWhiteSpace(informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).PaqueteId))
                        {
                            int.TryParse(informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).PaqueteId, out PaqueteId);
                            int.TryParse(informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).Id_Sucursal, out id_sucursal);
                            int.TryParse(informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).Codigoweb, out codigoweb);
                            string paq_reserva_tipo = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).paq_reserva_tipo;
                            oInfoPagoNM.ListPagosServicio_Paquete = ((IEnumerable <PagosServicioPaquete>)(_informacionPagoNMRepository.GetListPagosServicio(codigoweb, PaqueteId, id_sucursal, paq_reserva_tipo))[OutParameter.CursorInformacionPagoNM]).ToList();
                        }

                        if (oInfoPagoNM.ListPagosServicio_Paquete != null && oInfoPagoNM.ListPagosServicio_Paquete.Count > 0)
                        {
                            oInfoPagoNM.precioTotalActividadesPaq = oInfoPagoNM.ListPagosServicio_Paquete.Sum(x => x.precioServ);
                        }
                        oInfoPagoNM.precioTotalPagarPaq = oInfoPagoNM.precioTotalHabitacionesPaq + oInfoPagoNM.gastosAdministrativosPaq + oInfoPagoNM.precioTotalActividadesPaq;
                        oInfoPagoNM.montoDescuentoPaq   = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).montoDescuentoPaq;
                        oInfoPagoNM.totalFacturarPaq    = oInfoPagoNM.precioTotalPagarPaq + oInfoPagoNM.montoDescuentoPaq;
                        oInfoPagoNM.textoDescuentoPaq   = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).textoDescuentoPaq;


                        oInfoPagoNM.cantDiasSeg       = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).cantDiasSeg;
                        oInfoPagoNM.precioUnitarioSeg = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).precioUnitarioSeg;
                        oInfoPagoNM.MontoSeg          = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).MontoSeg;
                        oInfoPagoNM.DescuentoSeg      = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).DescuentoSeg;
                        oInfoPagoNM.MontoReservaSeg   = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).MontoReservaSeg;
                        oInfoPagoNM.accion_SF         = informacionPagoNMs.First(x => x.idOportunidad_SF == item.idOportunidad_SF).accion_SF;
                        lInfoPagoNM.Add(oInfoPagoNM);
                    }
                }

                var informacionPagoNMSF = new List <object>();
                foreach (var itemlInfoPagoNM in lInfoPagoNM)
                {
                    informacionPagoNMSF.Add(itemlInfoPagoNM.ToSalesforceEntity());
                }

                try
                {
                    /// Envío de Informacion de Pago a Salesforce
                    ClearQuickLog("body_request.json", "InformacionPagoNM");      /// ♫ Trace
                    objEnvio = new { datos = informacionPagoNMSF };
                    QuickLog(objEnvio, "body_request.json", "InformacionPagoNM"); /// ♫ Trace


                    var responseInformacionPagoNM = RestBase.ExecuteByKeyWithServer(crmServer, SalesforceKeys.InformacionPagoNMMethod, Method.POST, objEnvio, true, token);
                    if (responseInformacionPagoNM.StatusCode.Equals(HttpStatusCode.OK))
                    {
                        jsonResponse = (new JavaScriptSerializer()).DeserializeObject(responseInformacionPagoNM.Content);
                        QuickLog(jsonResponse, "body_response.json", "InformacionPagoNM"); /// ♫ Trace
                        string[] codigoServicio = null;
                        string   oportunidad    = string.Empty;
                        ListRptaInformacionPagoSF = new List <RptaInformacionPagoSF>();

                        foreach (var jsResponse in jsonResponse["respuestas"])
                        {
                            oportunidad = jsResponse[OutParameter.SF_IdOportunidad3];

                            codigoServicio         = jsResponse[OutParameter.SF_IdentificadorNM].Split('-');
                            _rptaInformacionPagoSF = new RptaInformacionPagoSF();

                            _rptaInformacionPagoSF.CodigoError      = jsResponse[OutParameter.SF_Codigo];
                            _rptaInformacionPagoSF.MensajeError     = jsResponse[OutParameter.SF_Mensaje];
                            _rptaInformacionPagoSF.idOportunidad_SF = jsResponse[OutParameter.SF_IdOportunidad3];
                            _rptaInformacionPagoSF.IdInfoPago_SF    = jsResponse[OutParameter.SF_IdInformacionPago2];
                            if (_rptaInformacionPagoSF.CodigoError != "ER" && codigoServicio.Count() > 0)
                            {
                                _rptaInformacionPagoSF.CodigoServicio_NM = codigoServicio[0].ToString();
                                _rptaInformacionPagoSF.Identificador_NM  = codigoServicio[1].ToString();
                            }

                            var updOperation = _informacionPagoNMRepository.Update(_rptaInformacionPagoSF);

                            if (Convert.IsDBNull(updOperation[OutParameter.IdActualizados]) == true || updOperation[OutParameter.IdActualizados].ToString().ToLower().Contains("null") || Convert.ToInt32(updOperation[OutParameter.IdActualizados].ToString()) <= 0)
                            {
                                error = error + "Error en el Proceso de Actualizacion - No Actualizo Ningun Registro. Identificador NM : " + _rptaInformacionPagoSF.Identificador_NM.ToString() + "||||";
                                ListRptaInformacionPagoSF.Add(_rptaInformacionPagoSF);
                            }
                        }
                    }
                    else
                    {
                        jsonResponse = (new JavaScriptSerializer()).DeserializeObject(responseInformacionPagoNM.Content);
                        QuickLog(jsonResponse, "body_response.json", "InformacionPagoNM"); /// ♫ Trace
                        error = responseInformacionPagoNM.StatusCode.ToString();
                    }
                }
                catch (Exception ex)
                {
                    error = error + "Error en el Proceso de Actualizacion - Response SalesForce : " + ex.Message + "||||";
                    ListRptaInformacionPagoSF.Add(_rptaInformacionPagoSF);
                }
                return(Ok(true));
            }
            catch (Exception ex)
            {
                error = error + " / " + ex.Message;
                return(InternalServerError(ex));
            }
            finally
            {
                if (objEnvio != null || jsonResponse != null || ListRptaInformacionPagoSF != null || string.IsNullOrEmpty(error) == false)
                {
                    (new
                    {
                        Request = objEnvio,
                        Response = jsonResponse,
                        Rpta_NoUpdate_Fail = ListRptaInformacionPagoSF,
                        Exception = error
                                    //LegacySystems = lInfoPagoNM
                    }).TryWriteLogObject(_logFileManager, _clientFeatures);
                }
            }
        }