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
                });
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 4
0
        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() }));
            }
        }