public async Task <IActionResult> Receipt(CreateClientReceiptViewModel model) { _logger.LogInformation(GetLogDetails() + " - model:{@Model}", new object[] { model }); if (ModelState.IsValid) { var userId = _userManager.GetUserId(User); var result = await _clientReceiptService.SaveClientReceiptAsync(model, userId); if (result.Success) { SetSiteMessage(MessageType.Success, DisplayFor.FullRequest, "Receipt has been saved successfully."); return(RedirectToAction(nameof(Receipt), routeValues: new { clientId = model.ClientId, receiptId = result.ReceiptId })); } SetSiteMessage(MessageType.Error, DisplayFor.FullRequest, result.Error); return(RedirectToAction(nameof(EditClient), routeValues: new { id = model.ClientId })); } SetSiteMessage(MessageType.Error, DisplayFor.FullRequest, "Invalid/ missing values."); return(View(model)); }
public async Task <IActionResult> AddReceipt(CreateClientReceiptViewModel model) { _logger.LogInformation(GetLogDetails() + " - model:{@Model}", new object[] { model }); if (ModelState.IsValid) { var userId = _userManager.GetUserId(User); var result = await _clientReceiptService.SaveClientReceiptAsync(model, userId); return(Json(new { success = result.Success, error = result.Error, receiptId = result.ReceiptId })); } return(Json(new { success = false, error = "Invalid Request" })); }
public async Task <(bool Success, string Error, CreateClientReceiptViewModel Model)> GetCreateClientReceiptViewModelAsync(int clientId, int?receiptId) { var success = false; var error = ""; var model = new CreateClientReceiptViewModel { ClientBelongingViewModel = new ClientBelongingViewModel { ClientReceiptId = receiptId ?? 0 } }; try { if (clientId > 0) { model.ClientId = clientId; model.Date = DateTime.Now; // fetch client information var client = await _clientRepository.FetchBaseByIdAsync(clientId); model.ClientName = $"{client.FirstName} {client.LastName}"; model.ClientNumber = client.ReferenceNumber; model.Address = Encryption.Decrypt(client.AddressEncrypted, client.AddressUniqueKey); model.ContactNumber = Encryption.Decrypt(client.ContactNumberEncrypted, client.ContactNumberUniqueKey); if (receiptId > 0) { var receipt = await _clientReceiptRepository.FetchBaseByIdAsync(receiptId ?? 0); if (receipt != null && receipt.ClientId == clientId) { model.Date = receipt.Date; model.ClientReceiptId = receipt.ClientReceiptId; model.ReceiptNumber = receipt.ReceiptNumber; model.PaymentAmount = receipt.PaymentAmount; model.PaymentDate = receipt.PaymentDate; model.IsPaidInterestOnly = receipt.IsPaidInterestOnly ?? false; model.PaymentMethod = receipt.PaymentMethod; model.ClientIdentificationId = receipt.ClientIdentificationId; // convert utc to local time var timeZone = _dateTimeService.FetchTimeZoneInfo(Constants.System.TimeZone); model.CreatedDateTime = _dateTimeService.ConvertUtcToDateTime(receipt.CreatedUtc, timeZone); success = true; } else { error = "Invalid Receipt Id."; } } else { success = true; } } else { error = "Invalid Request"; } } catch (Exception ex) { error = "Unexpected error occurred while processing your request."; _logger.LogError("ClientReceiptService.GetCreateClientReceiptViewModelAsync - ex:{@Ex}", new object[] { ex }); } return(success, error, model); }
public async Task <(bool Success, string Error, int ReceiptId)> SaveClientReceiptAsync(CreateClientReceiptViewModel model, string userId) { var success = false; var error = ""; int receiptId = 0; try { Models.ClientReceipt receipt = null; if (model.ClientReceiptId > 0) { receipt = await _clientReceiptRepository.FetchBaseByIdAsync(model.ClientReceiptId.Value); } if (receipt == null) { // save reference number for new records var maxReceiptId = await _clientReceiptRepository.GetMaxReceiptIdAsync(); var receiptNumber = $"RE{DateTime.Now.ToString("yyyyMMdd")}{maxReceiptId + 1}"; receipt = new Models.ClientReceipt { CreatedUserId = userId, CreatedUtc = DateTime.UtcNow, // assign date and client once only when the receipt is created, do not allow modifying them ClientId = model.ClientId, Date = DateTime.Now.Date, ReceiptNumber = receiptNumber }; } else { receipt.AuditUserId = userId; receipt.AuditUtc = DateTime.UtcNow; } // if saved id is selected, use that, else create a new one if (model.ClientIdentificationId.HasValue) { receipt.ClientIdentificationId = model.ClientIdentificationId.Value; } else { // save client id first and assign it to receipt // encrypt id info var idNumberEncryptionResult = Encryption.Encrypt(model.IdentificationDocumentNumber); var clientIdentification = new ClientIdentification { ClientId = model.ClientId, IdentificationDocumentId = model.IdentificationDocumentId, IdentificationDocumentNumberEncrypted = idNumberEncryptionResult.EncryptedString, IdentificaitonDocumentNumberUniqueKey = idNumberEncryptionResult.UniqueKey, CreatedUserId = userId, CreatedUtc = DateTime.UtcNow }; await _clientIdentificationRepository.SaveClientIdentificationAsync(clientIdentification); receipt.ClientIdentificationId = clientIdentification.ClientIdentificationId; } receipt.PaymentDate = model.PaymentDate; receipt.PaymentAmount = model.PaymentAmount; receipt.IsPaidInterestOnly = model.IsPaidInterestOnly; receipt.PaymentMethod = model.PaymentMethod; // save to database await _clientReceiptRepository.SaveClientReceiptAsync(receipt); receiptId = receipt.ClientReceiptId; success = true; } catch (Exception ex) { error = "Unexpected error occurred while processing your request."; _logger.LogError("ClientReceiptService.SaveClientReceiptAsync - ex:{@Ex}", new object[] { ex }); } return(success, error, receiptId); }