public static double CalculateTotalBalance(Guid reservationId) { double dblTotalBalance = 0; ReservationRepository reservationRepository = new ReservationRepository(); var reservation = reservationRepository.GetReservationById(reservationId, LogInManager.LoggedInUserId).FirstOrDefault(); ReservationChargeRepository reservationChargeRepository = new ReservationChargeRepository(); if (reservation != null) { if (reservation.IsCheckIn == true) { //Reservation Charges var reservationCharges = reservationChargeRepository.GetReservationCharges(reservationId, null, LogInManager.LoggedInUserId); if (reservationCharges != null && reservationCharges.Count > 0) { var totalReservationCharges = reservationCharges.Where(m => m.Amount.HasValue) .Sum(m => (m.Amount.Value * (m.Qty.HasValue ? m.Qty.Value : 1))); dblTotalBalance += totalReservationCharges; dblTotalBalance = CurrencyManager.ConvertAmountToBaseCurrency(dblTotalBalance, LogInManager.CurrencyCode); } } else { double totalRoomRentCharge = 0; //totalRoomRentCharge = CalculateRoomRentCharges(reservation.NoOfNight, (reservation.Rate.HasValue ? reservation.Rate.Value : 0), reservation.NoOfChildren, reservation.DiscountAmount, reservation.DiscountPercentage, (reservation.DiscountPercentage.HasValue ? true : false)); totalRoomRentCharge = CalculateReservationTotalPrice(reservation.Id); dblTotalBalance = totalRoomRentCharge; ////Package Price //var packageDetails = reservationRepository.GetReservationPackageMapping(reservation.Id, null); //if (packageDetails != null && packageDetails.Count > 0) //{ // var totalPackagePrice = packageDetails.Where(m => m.PackagePrice.HasValue).Sum(m => m.PackagePrice); // dblTotalBalance += (totalPackagePrice.HasValue) ? totalPackagePrice.Value : 0; //} } } return(Math.Round(dblTotalBalance, 2)); }
public ActionResult AddCharges(List <ReservationChargeVM> models) { try { bool blnIsChargesInserted = false; double totalBalance = 0; var transactions = new List <ReservationChargeVM>(); Guid? reservationId = null; double totalAmount = 0; if (models != null) { reservationId = models[0].ReservationId; foreach (var model in models) { string chargeId = string.Empty; model.CreatedBy = LogInManager.LoggedInUserId; model.AdditionalChargeSource = AdditionalChargeSource.ADDITIONAL_CHARGE; double?transactionAmount = 0; double?oldAmount = 0; if (model.Amount.HasValue) { oldAmount = model.Amount; transactionAmount = CurrencyManager.ConvertAmountToBaseCurrency(model.Amount, LogInManager.CurrencyCode); model.Amount = transactionAmount; } chargeId = reservationChargeRepository.AddReservationCharges(model); if (!string.IsNullOrWhiteSpace(chargeId)) { //Calculate total Amount. int qty = 1; if (model.Qty.HasValue) { qty = model.Qty.Value; } totalAmount = totalAmount + (transactionAmount.HasValue ? (transactionAmount.Value * qty) : 0); model.Id = Guid.Parse(chargeId); transactions.Add(model); blnIsChargesInserted = true; model.Amount = oldAmount; } } } if (blnIsChargesInserted) { #region Update Reservation Total Balance. var reservation = new ReservationVM(); if (reservationId.HasValue) { reservation = reservationRepository.GetReservationById(reservationId.Value, LogInManager.LoggedInUserId).FirstOrDefault(); } if (reservation != null) { if (reservation.GuestBalance.HasValue) { totalBalance = reservation.GuestBalance.Value; } totalBalance += totalAmount; //Update Total Balance. reservationRepository.UpdateReservationTotalBalance(reservation.Id, totalBalance, LogInManager.LoggedInUserId); } #endregion return(Json(new { IsSuccess = true, data = new { Transactions = transactions, TotalBalance = totalBalance } }, JsonRequestBehavior.AllowGet)); } else { return(Json(new { IsSuccess = false, errorMessage = "Charges not saved successfully." }, JsonRequestBehavior.AllowGet)); } } catch (Exception e) { Utility.Utility.LogError(e, "AddCharges"); return(Json(new { IsSuccess = false, errorMessage = e.Message })); } }