protected virtual void PrepareTenantLeaseModel(TenantLeaseModel model) { //Term Numbers for (int i = 1; i <= 60; i++) { model.AvailableTermNumbers.Add(new SelectListItem { Value = i.ToString(), Text = i.ToString(), Selected = model.TermNumber == i }); } //BiMonthly Starts for (int i = 1; i <= daysOfMonth.Length; i++) { model.AvailableBiMonthlyStarts.Add(new SelectListItem { Value = i.ToString(), Text = daysOfMonth[i - 1].ToString(), Selected = model.BiMonthlyStart == i }); } //BiMonthly Ends for (int i = 1; i <= daysOfMonth.Length; i++) { model.AvailableBiMonthlyEnds.Add(new SelectListItem { Value = i.ToString(), Text = daysOfMonth[i - 1].ToString(), Selected = model.BiMonthlyEnd == i }); } }
/// <summary> /// Check whether Rental Term and Data has changed or not /// so we will re-generate payment schedules /// </summary> private bool HasChangedRentalTermAndDate(TenantLease tenantLease, TenantLeaseModel model) { var changed = model.IsNew == false && (tenantLease.TermStartDate != model.TermStartDate || tenantLease.TermNumber != model.TermNumber || tenantLease.TermPeriod != (int?)model.TermPeriod || tenantLease.TermIsMonthToMonth != model.TermIsMonthToMonth || tenantLease.TermEndDate != model.TermEndDate || tenantLease.TermRentAmount != model.TermRentAmount || tenantLease.DueFrequency != (int?)model.DueFrequency || tenantLease.FirstPaymentDate != model.FirstPaymentDate); return(changed); }
public string TenantLeasePanel(TenantLeaseModel model) { var html = this.RenderPartialViewToString("_TenantLeaseViewDetails", model); return(html); }
public ActionResult Edit(TenantLeaseModel model) { var tenantLease = _tenantLeaseRepository.GetById(model.Id); var assignment = tenantLease.Assignment; //find the list of leases status are leasing var existingLeases = _tenantLeaseRepository.GetAll().Where(l => l.SiteId == model.SiteId && l.PropertyId == model.PropertyId && l.TenantId == model.TenantId && l.Assignment.Name == "Leasing" && l.Id != model.Id).ToList(); if (existingLeases.Count > 0) { ModelState.AddModelError("TenantLease", _localizationService.GetResource("TenantLease.CannotCreateNewLease")); } if (ModelState.IsValid) { var hasChangedRentalTermAndDate = HasChangedRentalTermAndDate(tenantLease, model); tenantLease = model.ToEntity(tenantLease); if (tenantLease.IsNew == true) { string number = _autoNumberService.GenerateNextAutoNumber(_dateTimeHelper.ConvertToUserTime(DateTime.UtcNow, DateTimeKind.Utc), tenantLease); tenantLease.Number = number; } //always set IsNew to false when saving tenantLease.IsNew = false; //copy to Assignment if (tenantLease.Assignment != null) { tenantLease.Assignment.Number = tenantLease.Number; tenantLease.Assignment.Description = tenantLease.Description; tenantLease.Assignment.Priority = tenantLease.Priority; } _tenantLeaseRepository.Update(tenantLease); //commit all changes in UI this._dbContext.SaveChanges(); //trigger workflow action if (!string.IsNullOrEmpty(model.ActionName)) { WorkflowServiceClient.TriggerWorkflowAction(tenantLease.Id, EntityType.TenantLease, assignment.WorkflowDefinitionId, assignment.WorkflowInstanceId, assignment.WorkflowVersion.Value, model.ActionName, model.Comment, this._workContext.CurrentUser.Id); //Every time we query twice, because EF is caching entities so it won't get the latest value from DB //We need to detach the specified entity and load it again this._dbContext.Detach(tenantLease.Assignment); assignment = _assignmentRepository.GetById(tenantLease.AssignmentId); } //Generate Payment Schedule and Payment this._dbContext.Detach(tenantLease); tenantLease = _tenantLeaseRepository.GetById(tenantLease.Id); if (hasChangedRentalTermAndDate) { var tenantPayments = tenantLease.TenantPayments.Where(p => p.TenantLeasePaymentScheduleId != null).ToList(); var hasNotAnyPaymentCollectionOrDaysLateInTenantPayment = HasNotAnyPaymentCollectionOrDaysLateInTenantPayment(tenantPayments); if (hasNotAnyPaymentCollectionOrDaysLateInTenantPayment) { _tenantLeaseService.GeneratePaymentSchedules(tenantLease); var firstPaymentSchedulePeriod = _tenantLeasePaymentScheduleRepository.GetAll() .Where(s => s.TenantLeaseId == tenantLease.Id) .OrderBy(s => s.DueDate) .FirstOrDefault(); _tenantLeaseService.CreateRentPayment(firstPaymentSchedulePeriod, tenantLease.FirstPaymentDate); this._dbContext.SaveChanges(); } else { return(Json(new { Errors = _localizationService.GetResource("TenantLease.CannotGeneratePayment") })); } } //notification SuccessNotification(_localizationService.GetResource("Record.Saved")); return(Json(new { number = tenantLease.Number, status = assignment.Name, assignedUsers = assignment.Users.Select(u => u.Name), availableActions = assignment.AvailableActions ?? "" })); } else { return(Json(new { Errors = ModelState.SerializeErrors() })); } }