Exemple #1
0
        public IHttpActionResult Create(DatosPedido_NM pedido_NM)
        {
            Pedido_AW_Repository _pedidoRepository = new Pedido_AW_Repository();

            Models.PedidoRS _resultpedido   = new Models.PedidoRS();
            UsuarioLogin    DtsUsuarioLogin = null;
            var             errorPedido     = string.Empty;
            int             intIdFormaPago  = 0;
            bool            _return         = false;

            try
            {
                var pedido = pedido_NM.ToRetail(); // Conversión a Retail
                /*Validaciones*/
                validacionPedido(ref pedido, ref _resultpedido, ref _return, ref DtsUsuarioLogin);
                if (_return == true)
                {
                    return(Ok(_resultpedido));
                }

                RepositoryByBusiness(pedido.UnidadNegocio.ID);

                /*Generamos el Pedido*/
                var operation = _pedidoRepository.CreateNM(pedido);
                if (operation[Operation.Result].ToString() == ResultType.Success.ToString() && Convert.ToInt32(operation[OutParameter.IdPedido].ToString()) > 0)
                {
                    _resultpedido.IdPedido = Convert.ToInt32(operation[OutParameter.IdPedido].ToString());

                    /*Solo debe quedar la validacion del pedido(Modificar al agregar un par de validaciones en el lugar correcto)*/
                    if (_resultpedido.IdPedido > 0 && string.IsNullOrEmpty(pedido_NM.IdOportunidad_SF) == false && string.IsNullOrEmpty(pedido_NM.IdSolicitudpago_SF) == false && string.IsNullOrEmpty(pedido_NM.Accion_SF) == false && pedido_NM.Accion_SF.ToUpper().Trim() == "INSERT")
                    {
                        _genCodigoPagoNMRepository.RegistraSolicitudPagoSF(pedido_NM.IdSolicitudpago_SF, pedido_NM.IdOportunidad_SF, _resultpedido.IdPedido);
                    }
                    else if (_resultpedido.IdPedido > 0 && string.IsNullOrEmpty(pedido_NM.IdOportunidad_SF) == false && string.IsNullOrEmpty(pedido_NM.IdSolicitudpago_SF) == false && string.IsNullOrEmpty(pedido_NM.Accion_SF) == false && pedido_NM.Accion_SF.ToUpper().Trim() == "UPDATE")
                    {
                        _genCodigoPagoNMRepository.UpdateSolicitudPagoSF(pedido_NM.IdSolicitudpago_SF, pedido_NM.IdOportunidad_SF, _resultpedido.IdPedido, Estados_Oportunidad.ID_ST_REGI_NO_ENVIO);
                    }

                    ///Actualizamos el campo solicitado por CRM SalesForce asociado al numero de pedido
                    _pedidoRepository.Update_Pedido_SolicitudPago_SF(_resultpedido.IdPedido, pedido.IdCotVta, pedido.IdOportunidad_SF, pedido.IdSolicitudpago_SF);
                }
                else
                {
                    _resultpedido.CodigoError = "ER"; _resultpedido.MensajeError = "GP - Error al intentar generar el pedido";
                    return(Ok(_resultpedido));
                }

                /// SEGUN SEA EL METODO DE PAGO REALIZA DIFERENTE PROCESO
                if (pedido.CodePasarelaPago == Constantes_MetodoDePago.CODE_FPAGO_TARJETA_VISA)
                {
                    intIdFormaPago          = Constantes_FileRetail.INT_ID_FORMA_PAGO_SOLO_TARJETA;
                    pedido.CodePasarelaPago = Constantes_MetodoDePago.CODE_FPAGO_TARJETA_VISA;
                }
                else if (pedido.CodePasarelaPago == Constantes_MetodoDePago.CODE_FPAGO_TARJETA_MASTERCARD)
                {
                    intIdFormaPago          = Constantes_FileRetail.INT_ID_FORMA_PAGO_SOLO_TARJETA;
                    pedido.CodePasarelaPago = Constantes_MetodoDePago.CODE_FPAGO_TARJETA_MASTERCARD_CA;
                }
                else if (pedido.CodePasarelaPago == Constantes_MetodoDePago.CODE_FPAGO_TARJETA_DINERS)
                {
                    intIdFormaPago          = Constantes_FileRetail.INT_ID_FORMA_PAGO_SOLO_TARJETA;
                    pedido.CodePasarelaPago = Constantes_MetodoDePago.CODE_FPAGO_TARJETA_DINERS;
                }
                else if (pedido.CodePasarelaPago == Constantes_MetodoDePago.CODE_FPAGO_TARJETA_AMERICANEX)
                {
                    intIdFormaPago          = Constantes_FileRetail.INT_ID_FORMA_PAGO_SOLO_TARJETA;
                    pedido.CodePasarelaPago = Constantes_MetodoDePago.CODE_FPAGO_TARJETA_AMERICANEX;
                }
                else if (pedido.CodePasarelaPago == Constantes_MetodoDePago.CODE_FPAGO_PAGOEFECTIVO)
                {
                    GenerarPedido_Pago_Efectivo(pedido, _resultpedido, DtsUsuarioLogin);
                }
                else if (pedido.CodePasarelaPago == Constantes_MetodoDePago.CODE_FPAGO_SAFETYPAY_ONLINE)
                {
                    GenerarPedido_Safetypay_Online(pedido, _resultpedido, DtsUsuarioLogin);
                }
                else if (pedido.CodePasarelaPago == Constantes_MetodoDePago.CODE_FPAGO_SAFETYPAY_CASH)
                {
                    intIdFormaPago = Constantes_Pedido.ID_FORMA_PAGO_SAFETYPAY_CASH;
                    GenerarPedido_Safetypay_Cash(pedido, _resultpedido, DtsUsuarioLogin);
                    pedido.CodePasarelaPago = "";// Para este caso se setea a vacio ya que el procedimiento siguiente solo acepta valores de tarjetas VI, MC, DN, AX
                }
                else if (pedido.CodePasarelaPago == Constantes_MetodoDePago.CODE_FPAGO_SAFETYPAY_INTERN)
                {
                    GenerarPedido_Safetypay_Internacional(pedido, _resultpedido, DtsUsuarioLogin);
                }
                else if (pedido.CodePasarelaPago == Constantes_MetodoDePago.CODE_FPAGO_TARJETA_UATP)
                {
                }
                else if (pedido.CodePasarelaPago == Constantes_MetodoDePago.CODE_FPAGO_INDEPENDENCIA)
                {
                    GenerarPedido_Independencia(pedido, _resultpedido, DtsUsuarioLogin);
                }

                #region LinkPago
                if ((new List <string>()
                {
                    Constantes_MetodoDePago.CODE_FPAGO_TARJETA_VISA,
                    Constantes_MetodoDePago.CODE_FPAGO_TARJETA_MASTERCARD,
                    Constantes_MetodoDePago.CODE_FPAGO_TARJETA_AMERICANEX,
                    Constantes_MetodoDePago.CODE_FPAGO_TARJETA_DINERS
                }).Contains(pedido.CodePasarelaPago))
                {
                    _resultpedido.LinkPago = ObtieneLinkPago(pedido.IdWeb ?? 0, _resultpedido.IdPedido, pedido.IdCotVta);
                }
                else
                {
                    _resultpedido.LinkPago = string.Empty;
                }
                #endregion

                /*Inserta Forma de Pedido  General para todos las metodos de pago*/
                _pedidoRepository.InsertFormaPagoPedidoNM(pedido, _resultpedido, intIdFormaPago);

                if (pedido.TiempoExpiracionCIP != null || pedido.TiempoExpiracionCIP > 0)
                {
                    _pedidoRepository.Update_FechaExpira_PedidoNM(pedido, _resultpedido);
                }


                ///Aca deberia estar una validacion de Fee implementar si es el caso

                /*Insertamos el POST en el SRV*/
                string strTextoPost = "<span class='texto_cambio_estado'>Cambio de estado a <strong>Pendiente de Pago</strong></span><br><br>" + "La pasarela de pago ha actualizado el estado de su cotización.";
                ICotizacionSRV_Repository _CotizacionSRV = new CotizacionSRV_AW_Repository(pedido.UnidadNegocio.ID);
                Post_SRV _PostSRV_RQ = new Post_SRV()
                {
                    IdCot               = pedido.IdCotVta,
                    TipoPost            = Convert.ToInt16(Constantes_SRV.ID_TIPO_POST_SRV_USUARIO),
                    TextoPost           = strTextoPost,
                    IPUsuCrea           = (string.IsNullOrEmpty(pedido.IPUsuario) ? "127.0.0.0" : pedido.IPUsuario),
                    LoginUsuCrea        = DtsUsuarioLogin.LoginUsuario,
                    IdUsuWeb            = DtsUsuarioLogin.IdUsuario,
                    IdDep               = DtsUsuarioLogin.IdDep,
                    IdOfi               = DtsUsuarioLogin.IdOfi,
                    Archivos            = null,
                    LstFilesPTA         = null,
                    IdEstado            = Constantes_SRV.ID_ESTADO_COT_PENDIENTE_PAGO,
                    CambioEstado        = true,
                    LstFechasCotVta     = null,
                    EsAutomatico        = true,
                    ArchivoMail         = null,
                    EsCounterAdmin      = false,
                    IdUsuWebCounterCrea = null,
                    IdOfiCounterCrea    = null,
                    IdDepCounterCrea    = null,
                    EsUrgenteEmision    = null,
                    FecPlazoEmision     = null,
                    IdMotivoNoCompro    = null,
                    OtroMotivoNoCompro  = null,
                    MontoEstimadoFile   = null
                };
                _CotizacionSRV.ProcesosPostCotizacion(_PostSRV_RQ);

                _resultpedido.CodigoError  = "OK";
                _resultpedido.MensajeError = "El proceso se realizó exitosamente";

                return(Ok(_resultpedido));
            }
            catch (Exception ex)
            {
                errorPedido = ex.Message;
                _resultpedido.CodigoError  = "ER";
                _resultpedido.MensajeError = ex.Message;
                return(Ok(_resultpedido));
            }
            finally
            {
                (new
                {
                    Request = pedido_NM,
                    Response = _resultpedido,
                    Exception = errorPedido
                }).TryWriteLogObject(_logFileManager, _clientFeatures);
            }
        }
Exemple #2
0
        // Método de Pago: SC
        private void GenerarPedido_Safetypay_Cash(DatosPedido pedido,
                                                  Models.PedidoRS resultPedido,
                                                  UsuarioLogin DtsUsuarioLogin)
        {
            Pedido_AW_Repository _pedidoRepository = new Pedido_AW_Repository();
            var errorPedido = string.Empty;

            /*Generamos el codigo en SafetyPay*/
            ws_compra.ws_compra          Ws_Compra   = new ws_compra.ws_compra();
            CustomCashPaymentRequestType requestCash = new CustomCashPaymentRequestType();

            ws_compra.AmountType objAmountType = new ws_compra.AmountType();

            objAmountType.CurrencyID = "150"; /*Valor del dolar para SafetyPay*/
            objAmountType.Value      = Convert.ToDecimal(pedido.Monto);

            requestCash.BankID                  = String.Empty;
            requestCash.IncludeAllBanks         = true;
            requestCash.TransactionIdentifier   = String.Empty;
            requestCash.MerchantAccount         = String.Empty;
            requestCash.MerchantSalesID         = resultPedido.IdPedido.ToString();
            requestCash.TrackingCode            = "";
            requestCash.ExpirationTime          = (Convert.ToInt16(pedido.TiempoExpiracionCIP) * 60);
            requestCash.ExpirationTimeSpecified = true;
            requestCash.Language                = (pedido.IdWeb == Webs_Cid.DM_WEB_ID ? "PE" : "ES");
            requestCash.CountryID               = "PER";
            requestCash.Amount                  = objAmountType;

            requestCash.SendEmailToShopper = true;
            if (requestCash.SendEmailToShopper)
            {
                requestCash.CustomerInformation_Value = DtsUsuarioLogin.EmailUsuario;
            }

            requestCash.CustomMerchantName = (pedido.IdWeb == Webs_Cid.DM_WEB_ID ? "Destinos Mundiales Perú" : "NMVIAJES");
            requestCash.ApplicationID      = Convert.ToInt16(pedido.IdWeb);

            ws_compra.RptaPagoSafetyPay response = new ws_compra.RptaPagoSafetyPay();
            if (pedido.IdWeb == Webs_Cid.DM_WEB_ID)
            {
                requestCash.WebId = Convert.ToString(pedido.IdWeb);
                response          = Ws_Compra.GenerarPago_SafetyPay_Cash_DM(requestCash);
            }
            else
            {
                requestCash.IdDepartamento = DtsUsuarioLogin.IdDep;
                requestCash.IdOficina      = DtsUsuarioLogin.IdOfi;
                response = Ws_Compra.GenerarPago_SafetyPay_Cash(requestCash);
            }

            if (response.OperationId != null && response.TransaccionIdentifier != null)
            {
                resultPedido.CodigoOperacion   = response.OperationId;
                resultPedido.CodigoTransaction = response.TransaccionIdentifier;

                resultPedido.CodigoError  = "OK";
                resultPedido.MensajeError = "Se generó el código de pedido.";
            }
            else
            {
                resultPedido.CodigoError = "ER"; resultPedido.MensajeError = "GP - Error al intentar generar el CIP";
                //return Ok(resultPedido);
            }

            Models.RptaPagoSafetyPay RptaPagoSafetyPayBD = _pedidoRepository.Get_Rpta_SagetyPay(resultPedido.IdPedido);

            List <Models.PaymentLocationType> lstPaymentType = new List <Models.PaymentLocationType>();

            if (response.lst_PaymentLocationType != null)
            {
                List <Models.PaymentStepType>        lstPaymentStep         = new List <Models.PaymentStepType>();
                List <Models.PaymentInstructionType> lstPaymentInstructions = new List <Models.PaymentInstructionType>();
                foreach (ws_compra.PaymentLocationType objPaymentLocationTypeRSTmp in response.lst_PaymentLocationType)
                {
                    Models.PaymentLocationType objPaymentLocationTypeRS = new Models.PaymentLocationType();
                    objPaymentLocationTypeRS.Id = objPaymentLocationTypeRSTmp.ID;

                    foreach (ws_compra.PaymentStepType objPaymentStepRSTmp in objPaymentLocationTypeRSTmp.lst_PaymentStepType)
                    {
                        Models.PaymentStepType objPaymentStepRS = new Models.PaymentStepType();
                        objPaymentStepRS.Step          = objPaymentStepRSTmp.Step;
                        objPaymentStepRS.StepSpecified = objPaymentStepRSTmp.StepSpecified;
                        objPaymentStepRS.Value         = objPaymentStepRSTmp.Value;
                        lstPaymentStep.Add(objPaymentStepRS);
                    }

                    if (objPaymentLocationTypeRSTmp.PaymentInstructions != null)
                    {
                        foreach (ws_compra.PaymentInstructionType objPaymentInstructionTypeRSTmp in objPaymentLocationTypeRSTmp.PaymentInstructions)
                        {
                            Models.PaymentInstructionType objPaymentInstructionsRS = new Models.PaymentInstructionType();
                            objPaymentInstructionsRS.Name  = objPaymentInstructionTypeRSTmp.Name;
                            objPaymentInstructionsRS.Value = objPaymentInstructionTypeRSTmp.Value;
                            lstPaymentInstructions.Add(objPaymentInstructionsRS);
                        }
                    }

                    objPaymentLocationTypeRS.lstPaymentStepType = lstPaymentStep;
                    objPaymentLocationTypeRS.Name = objPaymentLocationTypeRSTmp.Name;
                    objPaymentLocationTypeRS.PaymentInstructions = lstPaymentInstructions.ToArray();
                    objPaymentLocationTypeRS.PaymentSteps        = lstPaymentStep.ToArray();
                    lstPaymentType.Add(objPaymentLocationTypeRS);
                }
            }

            /*Realizamos el envio del correo*/
            try
            {
                IEnviarCorreo objEnviarCorreo = new EnviarCorreo(pedido.UnidadNegocio.ID);
                DateTime      datFechaActual  = DateTime.Now;
                DateTime      datFechaExpiraPago;
                string        strExpirationDateTime = response.ExpirationDateTime;
                string[]      arrExp = strExpirationDateTime.Split('(');
                datFechaExpiraPago = datFechaActual.AddHours(Convert.ToInt16(pedido.TiempoExpiracionCIP));

                resultPedido.CorreoEnviado = objEnviarCorreo.Enviar_SolicitudPagoServicioSafetyPay(
                    pedido.IdUsuario.ToString(), Convert.ToInt32(pedido.IdWeb), Convert.ToInt32(pedido.IdLang),
                    pedido.IdCotVta, pedido.Email, null, pedido.NombreClienteCot, pedido.ApellidoClienteCot, null,
                    DtsUsuarioLogin.NomCompletoUsuario, DtsUsuarioLogin.EmailUsuario,
                    (pedido.CodePasarelaPago == Constantes_SafetyPay.CodeSafetyPayCash ? Constantes_Pedido.ID_FORMA_PAGO_SAFETYPAY_CASH : Convert.ToInt16(0)),
                    RptaPagoSafetyPayBD.TransaccionIdentifier, resultPedido.IdPedido, Convert.ToDouble(pedido.Monto),
                    RptaPagoSafetyPayBD.ExpirationDateTime, RptaPagoSafetyPayBD.lstAmountType, lstPaymentType);
                objEnviarCorreo = null;
            }
            catch (Exception ex)
            {
                errorPedido = "Error al enviar el correo |" + ex.Message;
                /*return InternalServerError(ex);*/
            }
        }