//[ValidateAntiForgeryToken] public IActionResult Create([Bind("PaymentId,PaymentDate,MovementTypeId,QuantityMovmentType,Amount,PaymentMediaId,UserId,LimitUsableDate")] Payment payment) { if (ModelState.IsValid) { if (_paymentLogic.ProcessPayment(payment, _context.User.Where(u => u.UserId == payment.UserId).First().FullName, _context.User.Where(u => u.UserId == payment.UserId).First().Email)) { CashMovement cashMov = new CashMovement { Amount = payment.Amount, PaymentMediaId = payment.PaymentMediaId, CashMovementDate = payment.PaymentDate, CashMovementDetails = "Movimiento de Pago", CashMovementTypeId = 1,//1 es de tipo entrada CashCategoryId = _context.CashCategory.Where(x => x.CashCategoryDescription == "Movimiento de pago").FirstOrDefault().CashCategoryId, CashSubcategoryId = _context.CashSubcategory.Where(x => x.CashSubcategoryDescription == "Movimiento de pago").FirstOrDefault().CashSubcategoryId, SupplierId = _context.Supplier.Where(x => x.SupplierDescription == "Movimiento de pago").FirstOrDefault().SupplierId, PaymentId = payment.PaymentId }; _context.Add(cashMov); _context.SaveChanges(); return(RedirectToAction(nameof(Index))); } } ViewData["MovementTypeId"] = new SelectList(_context.MovementType, "MovementTypeId", "Description", payment.MovementTypeId); ViewData["PaymentMediaId"] = new SelectList(_context.PaymentMedia, "PaymentMediaId", "PaymentMediaDescription", payment.PaymentMediaId); ViewData["UserId"] = new SelectList(_context.User, "UserId", "FullName", payment.UserId); return(View(payment)); }
public static void Initialize(IServiceProvider serviceProvider) { using (var context = new GymTestContext( serviceProvider.GetRequiredService <DbContextOptions <GymTestContext> >())) { LoadMoveTypes(context); LoadPaymentMedia(context); LoadCashCategories(context); LoadCashSubcategories(context); LoadSuppliers(context); LoadCashMovementTypes(context); LoadMedicalEmergencies(context); context.SaveChanges(); } }
public void NotifyUsers() { try { AutomaticProcess automaticSendMailProcess = _context.AutomaticProcess. Where(x => x.AutomaticProcessId == int.Parse(_appSettings.Value.PaymentNotificationProcessId)).FirstOrDefault(); if (automaticSendMailProcess != null && automaticSendMailProcess.NextProcessDate <= _timeZone.GetCurrentDateTime(DateTime.Now).Date) { string notifyByDate = _appSettings.Value.PaymentNotificationByDate; if (bool.Parse(notifyByDate)) { NotifyByDate(); } string notifyByExp = _appSettings.Value.PaymentNotificationByExpiration; if (bool.Parse(notifyByExp)) { NotifyByExpiration(); } automaticSendMailProcess.NextProcessDate = _timeZone.GetCurrentDateTime(DateTime.Now).Date.AddDays(int.Parse(_appSettings.Value.PaymentNotificationProcessAddDays)); _context.Update(automaticSendMailProcess); _context.SaveChanges(); } } catch (Exception ex) { var messageError = ex.Message; _logger.LogError("Error Processing Payment. Detail: " + messageError); if (ex.InnerException != null) { _logger.LogError("Error Processing Payment. Detail: " + ex.InnerException.Message); } } }
public AssistanceInformation ProcessAssistance(string userToken, DateTime?assistanceDate = null) { var objectToReturn = new AssistanceInformation(); var users = from m in _context.User select m; users = users.Where(s => s.Token.ToLower().Equals(userToken.ToLower())); if (users.Count() == 1) { objectToReturn.User = users.First(); var payments = from m in _context.Payment select m; payments = payments.Where(p => p.UserId == objectToReturn.User.UserId); if (payments.Count() > 0) { var newestPayment = payments.OrderByDescending(p => p.PaymentDate).First(); if (newestPayment.MovementTypeId > 0) { if (newestPayment.LimitUsableDate.Date < DateTime.Now.Date) { objectToReturn.Message = "Fecha límite de uso sobrepasada. La misma es " + newestPayment.LimitUsableDate.Date.ToShortDateString() + "."; ProcessNotEntryNotification(objectToReturn.User.FullName, objectToReturn.Message, objectToReturn.User.Email, newestPayment.PaymentDate.ToString("dd/MM/yyyy HH:mm")); return(objectToReturn); // se venció el tiempo de uso del ultimo pago } switch (newestPayment.MovementTypeId) { #region Mensual case (int)PaymentTypeEnum.Monthly: var monthsPayed = newestPayment.QuantityMovmentType; var monthsUsed = DateTime.Now.Month - newestPayment.PaymentDate.Month; if (DateTime.Now.Year > newestPayment.PaymentDate.Year) { monthsUsed += 12; } if (monthsUsed > monthsPayed) { objectToReturn.Message = "Pago mensual vencido. Su último fue por " + monthsPayed + " mes(es) y se utilizaron " + monthsUsed + " mes(es)."; ProcessNotEntryNotification(objectToReturn.User.FullName, objectToReturn.Message, objectToReturn.User.Email, newestPayment.PaymentDate.ToString("dd/MM/yyyy HH:mm")); return(objectToReturn); // el pago actual ya no es válido } objectToReturn.AdditionalData = "Su último pago fue por " + monthsPayed + " mes(es) y se utilizaron " + monthsUsed + " mes(es).";; break; #endregion #region Por asistencias case (int)PaymentTypeEnum.ByAssistances: var ass = from a in _context.Assistance select a; ass = ass.Where(a => a.UserId == objectToReturn.User.UserId && a.AssistanceDate.Date >= newestPayment.PaymentDate.Date); if (ass.Count() >= newestPayment.QuantityMovmentType) { objectToReturn.Message = "Pago por asistencias consumido. Se habilitaron " + newestPayment.QuantityMovmentType + " asistencia(s) y se utilizaron " + ass.Count() + " asistencia(s)."; ProcessNotEntryNotification(objectToReturn.User.FullName, objectToReturn.Message, objectToReturn.User.Email, newestPayment.PaymentDate.ToString("dd/MM/yyyy HH:mm")); return(objectToReturn); // ya se consumieron todas las asistencias } objectToReturn.AdditionalData = "Cantidad de asistencias restantes: " + (newestPayment.QuantityMovmentType - ass.Count()) + "."; break; #endregion default: objectToReturn.Message = "Formato de pago no procesable."; ProcessNotEntryNotification(objectToReturn.User.FullName, objectToReturn.Message, objectToReturn.User.Email, newestPayment.PaymentDate.ToString("dd/MM/yyyy HH:mm")); return(objectToReturn); } var lastAsistance = _context.Assistance. Where(a => a.UserId == objectToReturn.User.UserId). OrderByDescending(a => a.AssistanceDate).FirstOrDefault(); DateTime realAssistanceDate = assistanceDate.HasValue ? (DateTime)assistanceDate : DateTime.Now; double diffTimeSecs = int.Parse(_appSettings.Value.AssistanceConfiguration_DiffHours) * 60 * 60 + int.Parse(_appSettings.Value.AssistanceConfiguration_DiffMins) * 60 + int.Parse(_appSettings.Value.AssistanceConfiguration_DiffSecs); if (lastAsistance == null || (realAssistanceDate - lastAsistance.AssistanceDate).TotalSeconds > diffTimeSecs) { //Creamos asistencia en caso de que el usuario pueda entrar. Caso contrario, queda a criterio del lugar si pasa o no. Assistance assistance = new Assistance { User = users.First(), AssistanceDate = realAssistanceDate }; _context.Assistance.Add(assistance); _context.SaveChanges(); if (newestPayment.MovementTypeId == (int)PaymentTypeEnum.ByAssistances) { var ass = from a in _context.Assistance select a; ass = ass.Where(a => a.UserId == objectToReturn.User.UserId && a.AssistanceDate.Date >= newestPayment.PaymentDate.Date); objectToReturn.AdditionalData = "Cantidad de asistencias restantes: " + (newestPayment.QuantityMovmentType - ass.Count()) + "."; } objectToReturn.Message = "Bienvenido. Disfrute de su jornada. Asistencia generada con fecha " + DateTime.Now + "."; ProcessAssistanceNotification(objectToReturn.User.UserId); } else { objectToReturn.Message = "Bienvenido nuevamente. Su token ya fue ingresado " + (DateTime.Now - lastAsistance.AssistanceDate).TotalMinutes.ToString("0") + " minutos antes."; } objectToReturn.AdditionalData = objectToReturn.AdditionalData + "Fecha límite de uso del pago: " + newestPayment.LimitUsableDate.ToShortDateString() + "."; } else//error: ultimo pago sin tipo de membresía { objectToReturn.Message = "Último pago sin tipo de membresía."; ProcessNotEntryNotification(objectToReturn.User.FullName, objectToReturn.Message, objectToReturn.User.Email, newestPayment.PaymentDate.ToString("dd/MM/yyyy HH:mm")); return(objectToReturn); } } else//error: usuario sin pagos { objectToReturn.Message = "Usuario sin pagos."; ProcessNotEntryNotification(objectToReturn.User.FullName, objectToReturn.Message, objectToReturn.User.Email, string.Empty); return(objectToReturn); } } else if (users.Count() > 1) { //error: solo 1 usuario deber identificado por token objectToReturn.Message = "Existen " + users.Count() + " usuarios registrados para el mismo token. Los usuarios son: "; foreach (var user in users) { objectToReturn.Message = objectToReturn.Message + user.FullName + ","; } objectToReturn.Message.Remove(objectToReturn.Message.Length - 1); objectToReturn.Message = objectToReturn.Message + "."; return(objectToReturn); } if (objectToReturn.User == null) { objectToReturn.Message = "Usuario no encontrado."; } return(objectToReturn); }
public bool ProcessPayment(Payment payment, string userName, string userEmail) { var isEdit = false; if (payment.PaymentId > 0) { isEdit = true; } try { if (isEdit) { _context.Update(payment); _context.SaveChanges(); } else { _context.Add(payment); _context.SaveChanges(); } } catch (Exception ex) { var messageError = ex.Message; _logger.LogError("Error Processing Payment. Detail: " + messageError); if (ex.InnerException != null) { _logger.LogError("Error Processing Payment. Detail: " + ex.InnerException.Message); } return(false); } try { var bodyData = new System.Collections.Generic.Dictionary <string, string> { { "UserName", userName }, { "Title", "Notificación de pago realizado." }, { "amount", payment.Amount.ToString() }, { "paymentDate", payment.PaymentDate.ToShortDateString() }, { "limitDate", payment.LimitUsableDate.ToShortDateString() }, { "quantity", payment.QuantityMovmentType.ToString() } }; switch (payment.MovementTypeId) { #region Mensual case (int)PaymentTypeEnum.Monthly: if (payment.QuantityMovmentType > 1) { bodyData.Add("type", "meses"); } else { bodyData.Add("type", "mes"); } break; #endregion #region Por asistencias case (int)PaymentTypeEnum.ByAssistances: if (payment.QuantityMovmentType > 1) { bodyData.Add("type", "asistencias"); } else { bodyData.Add("type", "asistencia"); } break; #endregion } if (isEdit) { bodyData.Add("action", "editado"); bodyData.Add("paymentId", payment.PaymentId + " "); } else { bodyData.Add("action", "registrado"); bodyData.Add("paymentId", string.Empty); } _sendEmail.SendEmail(bodyData, "PaymentTemplate", "Notificación de pago realizado", new System.Collections.Generic.List <string>() { userEmail } ); } catch (Exception ex) { var messageError = ex.Message; _logger.LogError("Error Sending email. Detail: " + messageError); if (ex.InnerException != null) { _logger.LogError("Error Sending email. Detail: " + ex.InnerException.Message); } } return(true); }