/// <summary> /// Función: Guarda el cupón en la base /// Creado: Cristopher Noh 28/07/2020 /// Modificado: /// </summary> /// <param name="entCupon">Datos de cupón</param> /// <param name="piUsuario">Usuario que crea ek cupón</param> /// <returns></returns> public IMDResponse <bool> DSaveCupon(EntCupon entCupon, int?piUsuario = null) { IMDResponse <bool> response = new IMDResponse <bool>(); string metodo = nameof(this.DSaveCupon); logger.Info(IMDSerialize.Serialize(67823458183516, $"Inicia {metodo}(EntCupon entCupon, int? piUsuario = null)", entCupon, piUsuario)); try { using (DbCommand dbCommand = database.GetStoredProcCommand(spSaveCupon)) { database.AddInParameter(dbCommand, "piIdCupon", DbType.Int32, entCupon.fiIdCupon); database.AddInParameter(dbCommand, "piIdCuponCategoria", DbType.Int32, entCupon.fiIdCuponCategoria); database.AddInParameter(dbCommand, "psDescripcion", DbType.String, entCupon.fsDescripcion?.Trim()); database.AddInParameter(dbCommand, "psCodigo", DbType.String, entCupon.fsCodigo?.Trim()); database.AddInParameter(dbCommand, "pnMontoDescuento", DbType.Decimal, entCupon.fnMontoDescuento); database.AddInParameter(dbCommand, "pnPorcentajeDescuento", DbType.Decimal, entCupon.fnPorcentajeDescuento); database.AddInParameter(dbCommand, "piMesBono", DbType.Int32, entCupon.fiMesBono); database.AddInParameter(dbCommand, "piTotalLanzamiento", DbType.Int32, entCupon.fiTotalLanzamiento); database.AddInParameter(dbCommand, "pdtFechaVencimiento", DbType.DateTime, entCupon.fdtFechaVencimiento); database.AddInParameter(dbCommand, "piIdUsuario", DbType.Int32, piUsuario); response = imdCommonData.DExecute(database, dbCommand); } } catch (Exception ex) { response.Code = 67823458184293; response.Message = "Ocurrió un error al intentar guardar el cupon."; logger.Error(IMDSerialize.Serialize(67823458184293, $"Error en {metodo}(EntCupon entCupon, int? piUsuario = null): {ex.Message}", entCupon, piUsuario, ex, response)); } return(response); }
/// <summary> /// Función: Obtiene la lista de cupones /// Creado: Cristopher Noh 28/07/2020 /// Modificado: /// </summary> /// <param name="piIdCupon">Id de cupón</param> /// <param name="piIdCuponCategoria">Categoría del cupón</param> /// <param name="psDescripcion">Descripción del cupón</param> /// <param name="psCodigo">Código de cupón</param> /// <param name="pdtFechaVencimientoInicio">Fecha de vencimiento desde...</param> /// <param name="pdtFechaVencimientoFin">..a la Fecha de vencimiento</param> /// <param name="pdtFechaCreacionInicio">Fecha de creación desde...</param> /// <param name="pdtFechaCreacionFin">...a la fecha de creación</param> /// <param name="pbActivo">Cupón activo</param> /// <param name="pbBaja">Cupón inactivo</param> /// <returns></returns> public IMDResponse <List <EntCupon> > BObtenerCupones(int?piIdCupon = null, int?piIdCuponCategoria = null, string psDescripcion = null, string psCodigo = null, DateTime?pdtFechaVencimientoInicio = null, DateTime?pdtFechaVencimientoFin = null, DateTime?pdtFechaCreacionInicio = null, DateTime?pdtFechaCreacionFin = null, bool?pbActivo = true, bool?pbBaja = false, bool?pbVigente = null) { IMDResponse <List <EntCupon> > response = new IMDResponse <List <EntCupon> >(); string metodo = nameof(this.BObtenerCupones); logger.Info(IMDSerialize.Serialize(67823458191286, $"Inicia {metodo}(int? piIdCupon = null, int? piIdCuponCategoria = null, string psDescripcion = null, string psCodigo = null, DateTime? pdtFechaVencimientoInicio = null, DateTime? pdtFechaVencimientoFin = null, DateTime? pdtFechaCreacionInicio = null, DateTime? pdtFechaCreacionFin = null, bool pbActivo = true, bool pbBaja = false)", piIdCupon, piIdCuponCategoria, psDescripcion, psCodigo, pdtFechaVencimientoInicio, pdtFechaVencimientoFin, pdtFechaCreacionInicio, pdtFechaCreacionFin, pbActivo, pbBaja)); try { IMDResponse <DataTable> respuestaObtenerCupones = datPromociones.DGetCupones(piIdCupon, piIdCuponCategoria, pbVigente, psDescripcion, psCodigo, pdtFechaVencimientoInicio, pdtFechaVencimientoFin, pdtFechaCreacionInicio, pdtFechaCreacionFin, pbActivo, pbBaja); if (respuestaObtenerCupones.Code != 0) { return(respuestaObtenerCupones.GetResponse <List <EntCupon> >()); } List <EntCupon> listaCupones = new List <EntCupon>(); foreach (DataRow filaCupon in respuestaObtenerCupones.Result.Rows) { IMDDataRow dr = new IMDDataRow(filaCupon); EntCupon cupon = new EntCupon(); cupon.fbActivo = Convert.ToBoolean(dr.ConvertTo <int>("bActivo")); cupon.fbBaja = Convert.ToBoolean(dr.ConvertTo <int>("bBaja")); cupon.fbVigente = Convert.ToBoolean(dr.ConvertTo <int>("bVigente")); cupon.fdtFechaVencimiento = dr.ConvertTo <DateTime?>("dtFechaVencimiento"); cupon.sFechaVencimiento = cupon.fdtFechaVencimiento == null ? "Hasta agotar" : ((DateTime)cupon.fdtFechaVencimiento).ToString("dd/MM/yy HH:mm"); cupon.dtFechaCreacion = dr.ConvertTo <DateTime?>("dtFechaCreacion"); cupon.sFechaCreacion = cupon.dtFechaCreacion == null ? null : ((DateTime)cupon.dtFechaCreacion).ToString("dd/MM/yy HH:mm"); cupon.fiIdCupon = dr.ConvertTo <int>("iIdCupon"); cupon.fiIdCuponCategoria = dr.ConvertTo <int>("iIdCuponCategoria"); cupon.fiMesBono = dr.ConvertTo <int?>("iMesBono"); cupon.fiTotalLanzamiento = dr.ConvertTo <int>("iTotalLanzamiento"); cupon.fiTotalCanjeado = dr.ConvertTo <int>("iTotalCanjeado"); cupon.fnMontoDescuento = dr.ConvertTo <double?>("nMontoDescuento"); cupon.sMontoDescuento = cupon.fnMontoDescuento == null ? null : ((double)cupon.fnMontoDescuento / 100d).ToString("C"); cupon.fnPorcentajeDescuento = dr.ConvertTo <double?>("nPorcentajeDescuento"); cupon.sPorcentajeDescuento = cupon.fnPorcentajeDescuento == null ? null : ((double)cupon.fnPorcentajeDescuento).ToString("#%"); cupon.fsCodigo = dr.ConvertTo <string>("sCodigo"); cupon.fsDescripcion = dr.ConvertTo <string>("sDescripcion"); cupon.fsDescripcionCategoria = dr.ConvertTo <string>("sDescripcionCategoria"); listaCupones.Add(cupon); } response.Code = 0; response.Message = "Lista de cupones obtenida."; response.Result = listaCupones; } catch (Exception ex) { response.Code = 67823458192063; response.Message = "Ocurrió un error al intentar consultar los cupones"; logger.Error(IMDSerialize.Serialize(67823458192063, $"Error en {metodo}(int? piIdCupon = null, int? piIdCuponCategoria = null, string psDescripcion = null, string psCodigo = null, DateTime? pdtFechaVencimientoInicio = null, DateTime? pdtFechaVencimientoFin = null, DateTime? pdtFechaCreacionInicio = null, DateTime? pdtFechaCreacionFin = null, bool pbActivo = true, bool pbBaja = false): {ex.Message}", piIdCupon, piIdCuponCategoria, psDescripcion, psCodigo, pdtFechaVencimientoInicio, pdtFechaVencimientoFin, pdtFechaCreacionInicio, pdtFechaCreacionFin, pbActivo, pbBaja, ex, response)); } return(response); }
/// <summary> /// Función: Aplica el cupón guardando en el campo de cupones canjeado /// Creado: Cristopher Noh 28/07/2020 /// Modificado: /// </summary> /// <param name="piIdCupon">Cupón a aplicar</param> /// <param name="piIdUsuario">Usuario que aplica</param> /// <returns></returns> public IMDResponse <bool> BAplicarCupon(int piIdCupon, int?piIdUsuario = null) { IMDResponse <bool> response = new IMDResponse <bool>(); string metodo = nameof(this.BAplicarCupon); logger.Info(IMDSerialize.Serialize(67823458195948, $"Inicia {metodo}(int piIdCupon, int? piIdUsuario = null)", piIdCupon, piIdUsuario)); try { IMDResponse <EntCupon> respuestaValidarCupon = BValidarCupon(piIdCupon: piIdCupon); if (respuestaValidarCupon.Code != 0) { return(respuestaValidarCupon.GetResponse <bool>()); } EntCupon entCupon = new EntCupon(); entCupon.fiIdCupon = piIdCupon; IMDResponse <bool> respuestaAplicarCupon = datPromociones.DSaveCupon(entCupon, piIdUsuario); if (respuestaAplicarCupon.Code != 0) { return(respuestaAplicarCupon); } response.Code = 0; response.Message = "Código aplicado."; response.Result = true; } catch (Exception ex) { response.Code = 67823458196725; response.Message = "Ocurrió un error al intentar aplicar el código."; logger.Error(IMDSerialize.Serialize(67823458196725, $"Error en {metodo}(int piIdCupon, int? piIdUsuario = null): {ex.Message}", piIdCupon, piIdUsuario, ex, response)); } return(response); }
/// <summary> /// Función: Guarda un nuevo cupón en la base /// Creado: Cristopher Noh 28/07/2020 /// Modificado: /// </summary> /// <param name="entCreateCupon">Entidad de cupón nuevo</param> /// <param name="piIdUsuario">Usuario que registra</param> /// <returns></returns> public IMDResponse <bool> BActivarCupon(EntCreateCupon entCreateCupon, int?piIdUsuario = null) { IMDResponse <bool> response = new IMDResponse <bool>(); string metodo = nameof(this.BActivarCupon); logger.Info(IMDSerialize.Serialize(67823458189732, $"Inicia {metodo}(EntCreateCupon entCreateCupon, int? piIdUsuario = null)", entCreateCupon, piIdUsuario)); try { if (entCreateCupon == null) { response.Code = 67823458220812; response.Message = "No se ingresó información de cupón."; return(response); } if (string.IsNullOrWhiteSpace(entCreateCupon.fsCodigo)) { if (entCreateCupon.fiLongitudCodigo <= 0) { response.Code = 67823458221589; response.Message = "No se especificó la longitud del código de cupón nuevo."; return(response); } IMDResponse <string> respuestaGenerarCodigoCupon = this.BGenerarCodigoCupon((int)entCreateCupon.fiLongitudCodigo); if (respuestaGenerarCodigoCupon.Code != 0) { return(respuestaGenerarCodigoCupon.GetResponse <bool>()); } entCreateCupon.fsCodigo = respuestaGenerarCodigoCupon.Result; } else { entCreateCupon.fsCodigo = entCreateCupon.fsCodigo.Replace(" ", "").ToUpper(); IMDResponse <List <EntCupon> > respuestaVerificarCodigo = BObtenerCupones(psCodigo: entCreateCupon.fsCodigo); if (respuestaVerificarCodigo.Code != 0) { return(respuestaVerificarCodigo.GetResponse <bool>()); } if (respuestaVerificarCodigo.Result.Count > 0) { response.Code = 67823458222366; response.Message = "Ya hay un cupón activo con el código proporcionado."; return(response); } } EntCupon entCupon = new EntCupon(); if (entCreateCupon.fiDiasActivo != 0 && entCreateCupon.fiDiasActivo != null) { if (entCreateCupon.fiDiasActivo > 0) { entCupon.fdtFechaVencimiento = DateTime.Now.AddDays((int)entCreateCupon.fiDiasActivo); } else { response.Code = 67823458223143; response.Message = "Los días activos del cupón deben ser mayores o iguales a 1 día. Si no requiere días de vencimiento, deje el campo vacío."; return(response); } } if (entCreateCupon.fiTotalLanzamiento < 1) { response.Code = 67823458223920; response.Message = "No se especificó el total de cupones a activar. El total de lanzamiento debe ser mínimo 1 cupón."; return(response); } entCupon.fiTotalLanzamiento = entCreateCupon.fiTotalLanzamiento; entCupon.fsCodigo = entCreateCupon.fsCodigo; entCupon.fsDescripcion = entCreateCupon.fsDescripcion; switch (entCreateCupon.fiIdCuponCategoria) { case (int)EnumCategoriaCupon.DescuentoMonto: if (entCreateCupon.fnMontoDescuento <= 0d || entCreateCupon.fnMontoDescuento == null) { response.Code = 67823458224697; response.Message = "El descuento no puede ser de monto igual o menor a $0.00 pesos."; return(response); } entCupon.fiIdCuponCategoria = (int)EnumCategoriaCupon.DescuentoMonto; entCupon.fnMontoDescuento = entCreateCupon.fnMontoDescuento; break; case (int)EnumCategoriaCupon.DescuentoPorcentaje: if (entCreateCupon.fnPorcentajeDescuento >= 1) { entCreateCupon.fnPorcentajeDescuento /= 100; } if (entCreateCupon.fnPorcentajeDescuento <= 0d || entCreateCupon.fnPorcentajeDescuento > 1 || entCreateCupon.fnPorcentajeDescuento == null) { response.Code = 67823458225474; response.Message = "El porcentaje de descuento no puede ser 0% o más de 100%."; return(response); } entCupon.fiIdCuponCategoria = (int)EnumCategoriaCupon.DescuentoPorcentaje; entCupon.fnPorcentajeDescuento = entCreateCupon.fnPorcentajeDescuento; break; default: response.Code = 67823458226251; response.Message = "No se ingresó el tipo de promoción de cupón."; break; } IMDResponse <bool> respuestaGuardarCupon = datPromociones.DSaveCupon(entCupon, piIdUsuario); if (respuestaGuardarCupon.Code != 0) { return(respuestaGuardarCupon); } response.Code = 0; response.Message = "El cupón ha sido activado correctamente."; response.Result = true; } catch (Exception ex) { response.Code = 67823458190509; response.Message = "Ocurrió un error al intentar activar el cupón."; logger.Error(IMDSerialize.Serialize(67823458190509, $"Error en {metodo}(EntCreateCupon entCreateCupon, int? piIdUsuario = null): {ex.Message}", entCreateCupon, piIdUsuario, ex, response)); } return(response); }
/// <summary> /// Función: Validar el cupón a canjear /// Creado: Cristopher Noh 28/07/2020 /// Modificado: /// </summary> /// <param name="psCodigo">Código de cupón</param> /// <param name="piIdCupon">Id de cupón</param> /// <returns>Datos del cupón</returns> public IMDResponse <EntCupon> BValidarCupon(string psCodigo = null, int?piIdCupon = null) { IMDResponse <EntCupon> response = new IMDResponse <EntCupon>(); string metodo = nameof(this.BValidarCupon); logger.Info(IMDSerialize.Serialize(67823458197502, $"Inicia {metodo}(string psCodigo = null, int? piIdCupon = null)", psCodigo, piIdCupon)); try { IMDResponse <List <EntCupon> > respuestaCupon; if (!string.IsNullOrWhiteSpace(psCodigo) && psCodigo?.Length > 0) { respuestaCupon = BObtenerCupones(psCodigo: psCodigo); } else { if (piIdCupon != null && piIdCupon >= 10000) { respuestaCupon = BObtenerCupones(piIdCupon: piIdCupon); } else { response.Code = 67823458227028; response.Message = "No se ingresó un código válido."; return(response); } } if (respuestaCupon.Code != 0) { return(respuestaCupon.GetResponse <EntCupon>()); } if (respuestaCupon.Result.Count == 0) { response.Code = 67823458227805; response.Message = "Código no válido."; return(response); } EntCupon cupon = respuestaCupon.Result.First(); string mensajeCodigoExpirado = "El código ha expirado."; if (!cupon.fbActivo || cupon.fbBaja) { response.Code = 67823458228582; response.Message = mensajeCodigoExpirado; return(response); } if (cupon.fdtFechaVencimiento != null) { if (DateTime.Now > cupon.fdtFechaVencimiento) { response.Code = 67823458229359; response.Message = mensajeCodigoExpirado; return(response); } } if (cupon.fiTotalCanjeado >= cupon.fiTotalLanzamiento) { response.Code = 67823458230136; response.Message = mensajeCodigoExpirado; return(response); } response.Code = 0; response.Message = "Código validado."; response.Result = cupon; } catch (Exception ex) { response.Code = 67823458198279; response.Message = "Ocurrió un error al intentar validar el código."; logger.Error(IMDSerialize.Serialize(67823458198279, $"Error en {metodo}(string psCodigo = null, int? piIdCupon = null): {ex.Message}", psCodigo, piIdCupon, ex, response)); } return(response); }