Esempio n. 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);
            }
        }
        public IHttpActionResult Create(Pedido pedido)
        {
            Models.PedidoRS _resultpedido   = new Models.PedidoRS();
            UsuarioLogin    DtsUsuarioLogin = null;
            var             errorPedido     = string.Empty;
            bool            _return         = false;

            try
            {
                /*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.Create(pedido);
                if (operation[Operation.Result].ToString() == ResultType.Success.ToString() && Convert.ToInt32(operation[OutParameter.IdPedido].ToString()) > 0)
                {
                    _resultpedido.IdPedido = Convert.ToInt32(operation[OutParameter.IdPedido].ToString());
                    //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 = "GP"; _resultpedido.MensajeError = "Error al intentar generar el pedido";
                    _resultpedido.CodigoError = "ER"; _resultpedido.MensajeError = "GP - Error al intentar generar el pedido";
                    return(Ok(_resultpedido));
                }

                /*Generamos el codigo en SafetyPay*/
                ws_compra.ws_compra            Ws_Compra     = new ws_compra.ws_compra();
                CustomOnlinePaymentRequestType request       = new CustomOnlinePaymentRequestType();
                ws_compra.AmountType           objAmountType = new ws_compra.AmountType();

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

                request.BankID = String.Empty;
                request.TransactionIdentifier   = String.Empty;
                request.MerchantAccount         = String.Empty;
                request.MerchantSalesID         = _resultpedido.IdPedido.ToString();
                request.TrackingCode            = "0";
                request.ExpirationTime          = (Convert.ToInt16(pedido.TiempoExpiracionCIP) * 60);
                request.ExpirationTimeSpecified = true;
                request.Language            = (pedido.IdWeb == Webs_Cid.DM_WEB_ID ? "PE" : "ES");
                request.CountryID           = "PER";
                request.Amount              = objAmountType;
                request.TransactionOkURL    = (pedido.IdWeb == Webs_Cid.DM_WEB_ID ? "http://www.destinosmundialesperu.com/" : "http://www.nmviajes.com/");
                request.TransactionErrorURL = (pedido.IdWeb == Webs_Cid.DM_WEB_ID ? "http://www.destinosmundialesperu.com/" : "http://www.nmviajes.com/seguros#");

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

                request.IdDepartamento = DtsUsuarioLogin.IdDep;
                request.IdOficina      = DtsUsuarioLogin.IdOfi;

                request.ApplicationID = Convert.ToInt16(pedido.IdWeb);

                ws_compra.RptaPagoSafetyPay response = new ws_compra.RptaPagoSafetyPay();
                if (pedido.IdWeb == Webs_Cid.DM_WEB_ID || (pedido.IdCanalVta != null && pedido.IdCanalVta == Constantes_Pedido.ID_CANAL_VENTA_CONTACT_CENTER))
                {
                    request.WebId = Convert.ToInt32(pedido.IdWeb);
                    response      = Ws_Compra.GenerarPago_SafetyPay_OnlineDM(request);
                }
                else
                {
                    response = Ws_Compra.GenerarPago_SafetyPay_Online(request);
                }

                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 = "GP"; _resultpedido.MensajeError = "Error al intentar generar el CIP";
                    _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.CodeSafetyPayOnline ? Constantes_Pedido.ID_FORMA_PAGO_SAFETYPAY_ONLINE : 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);*/
                }

                /*Inserta Forma de Pedido*/
                _pedidoRepository.InsertFormaPagoPedido(pedido, _resultpedido);
                _pedidoRepository.Update_FechaExpira_Pedido(pedido, _resultpedido);

                /*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);

                return(Ok(_resultpedido));
            }
            catch (Exception ex)
            {
                errorPedido = ex.Message;
                return(InternalServerError(ex));
            }
            finally
            {
                (new
                {
                    Request = pedido,
                    Response = _resultpedido,
                    Exception = errorPedido
                }).TryWriteLogObject(_logFileManager, _clientFeatures);
            }
        }