none
Mensaje de confirmación desde servidor RRS feed

  • Pregunta

  • Saludos, usando el patrón de repositorios, deseo enviar un mensaje de confirmación al usuario y usar la respuesta para agregar un objeto (entidad) a mi colección, ojo, no se trata de ejecutar un método en base a la respuesta del usuario (así como: "Desea borrar?" ->si->call orden/borrar?id=5), es mas bien, que dentro del método que se está ejecutando preguntar al usuario si desea continuar y así seguir con la ejecución del método actual, este método verifica el monto máximo que puede gastar el cliente según el monto definido por el cliente al momento de aperturar su cuenta, en caso de que se exceda debe guardar una alerta en la base de datos pero dejar pasar la orden de compra, la pregunta al clientes es: "El monto excede lo permitido, desea continuar?"

    Dentro del repositorio de órdenes de compra está el método grabar

    public decimal Grabar(OrdenViewModel model) { Add(model.Orden); ValidarAlertaMaximoTransar(model.Orden.cuenta,model.Orden.Fecha,model.Orden.Monto,model.Orden.Moneda) Save(); return model.Orden.Id; } public void ValidarAlertaMaximoTransar(decimal CuentaCliente, DateTime FechaValor, decimal MontoCompra, string CodigoMoneda) { AlertaMaximoComprar alertaMaximoTransar = new AlertaMaximoComprar (); AlertaMaximoComprarRepository IAlerta = new AlertaMaximoComprarRepository (ApplicationDbContext); if(!IAlerta.ValidarMaximoTransar(CuentaCliente,FechaValor, MontoCompra,CodigoMoneda)) { string Advertencia = $"El cliente EXCEDE el monto máximo permitido para compras.

    EL saldo actual disponible para comprar es de US${IAlerta.Holgura}."; Advertencia += Environment.NewLine + " Desea continuar?"; /*Aca quiero preguntar al usuario para agregar la alerta a mi colección que luego se enviará a

    la base de datos en el método Save() junto a los demás objetos en memoria, si el usuario cancela entonces no se crea

    la orden. alertaMaximoTransar.Fecha = DateTime.Now; alertaMaximoTransar.Cliente = CuentaCliente; alertaMaximoTransar.Monto = MontoCompra; IAlerta.Add(alertaMaximoTransar); */ } }

    Como puedo mostrar el mensaje de confirmación al usuario y obtener la respuesta para terminar con el método grabar ya sea finalizarlo o cancelarlo?

    lunes, 3 de septiembre de 2018 22:39

Respuestas

  • Para futuras referencias, terminé usando promises y TempData

                let valhora = function () {
                    return new Promise(function (resolve, reject) {
                        $.ajax({
                            type: 'GET',
                            url: '/Orden/ValidarHora',
                            data: { Fecha: fecharecep }
                        })
                            .done(function (result) {
                                if (result.length > 0) {
                                    if (confirm(result + " Desea continuar?")) { resolve(); }//Finaliza bien se debe validar monto
                                }
                                else { resolve(); }//Finaliza bien, se debe validar monto
                            });
                    });
                };
    
                let valmonto = function () {
                    return new Promise(function (resolve, reject) {
                        $.ajax({
                            type: 'GET',
                            url: '/Orden/ValidarMontoMaximo',
                            data: { CuentaCliente: cuenta, FechaValor: fecharecep, Monto: monto, CodigoMoneda: moneda }
                        })
                            .done(function (result) {
                                if (result.length > 0) {
                                    if (confirm(result)) { resolve(); }
                                }
                                else { resolve();}
                            });
                    });
                };
    
                valhora().then(function () {
                    return valmonto();
                }).then(function () {
                    form.submit();
                })

    Los métodos invocados devuelven el mensaje al usuario, si este cancela entonces no hay form.submit(), si los acepta todos entonces hay form.submit, pero en el "monto máximo" que era el de mi dilema dentro del método que le devuelve el mensaje al usuario, creo el modelo y lo guardo en un TempData y al llegar al método guardar en post, verifico si TempData["AlertaMonto"] es diferente de null, entonces casteo TempData["AlertaMonto"] al tipo de mi modelo y lo envío como parámetro al método que agrega los modelos a la colección en memoria que ha de ser enviada a la base de datos

                       if (TempData["AlertaMonto"] != null)
                        {
                            num_orden = IOrden.Grabar(model, (AlertaMontoMaximo)TempData["AlertaMonto"]);
                            TempData.Remove("AlertaMonto");
                        }
                        else
                            num_orden = IOrden.Grabar(model);

    viernes, 26 de octubre de 2018 22:11