Beispiel #1
0
        public void Update(int type, string leaseTitle, string leaseDesc, DateTime startDate, DateTime endDate, LeaseTerm term,
                           string rentFrequency, decimal rentAmount, string rentDueOn, decimal damageDeposit, decimal petDisposit, DateTime signDate,
                           bool isActive, bool addudum, int endCode, string renewTerm, string notes, RentCoverage rentCoverage)
        {
            Type                = type;
            LeaseTitle          = leaseTitle;
            LeaseDesc           = LeaseDesc;
            LeaseStartDate      = startDate;
            LeaseEndDate        = endDate;
            Term                = term;
            RentFrequency       = rentFrequency;
            RentAmount          = rentAmount;
            RentDueOn           = rentDueOn;
            DamageDepositAmount = damageDeposit;
            PetDepositAmount    = petDisposit;
            LeaseSignDate       = signDate;
            IsActive            = isActive;
            IsAddendumAvailable = addudum;
            EndLeaseCode        = endCode;
            RenewTerm           = renewTerm;
            Modified            = DateTime.Now;
            RentCoverage        = rentCoverage;
            Notes               = notes;


            if (type == 1)
            {
                isActive = false;
            }
        }
Beispiel #2
0
        public Lease(int type, string leaseTitle, string leaseDesc, int rentalPropertyId,
                     DateTime leaseStartDate, DateTime leaseEndDate, LeaseTerm term,
                     string rentFrequency, decimal rentAmount, string rentDueOn,
                     decimal damageDepositAmount, decimal?petDepositAmount, DateTime leaseSignDate,
                     string leaseAgreementDocUrl, bool isActive, bool isAddendumAvailable, int endCode,
                     string notes, DateTime creationDate, DateTime updateDate, string renewTerm,
                     RentCoverage rentCoverage, /*Addendum addendum,*/ ICollection <Agent> agent, ICollection <Tenant> tenant)
        {
            Type                 = type;
            LeaseTitle           = leaseTitle;
            LeaseDesc            = leaseDesc;
            RentalPropertyId     = rentalPropertyId;
            LeaseStartDate       = leaseStartDate;
            LeaseEndDate         = leaseEndDate;
            Term                 = term;
            RentFrequency        = rentFrequency;
            RentAmount           = rentAmount;
            RentDueOn            = rentDueOn;
            DamageDepositAmount  = damageDepositAmount;
            PetDepositAmount     = petDepositAmount;
            LeaseSignDate        = leaseSignDate;
            LeaseAgreementDocUrl = leaseAgreementDocUrl;
            IsActive             = isActive;
            IsAddendumAvailable  = isAddendumAvailable;
            EndLeaseCode         = endCode;   // 1: renew month by month, 21: renew by other term, 3: fixed term, 31. fixed term with renew of month by month or new term 32: fixed term and vacant, 0: n/a
            RenewTerm            = renewTerm; // could be used as vacant reason
            Notes                = notes;

            Created  = creationDate;
            Modified = updateDate;

            RentCoverage = rentCoverage;
            //Addendum = addendum;
            Agent  = agent;
            Tenant = tenant;
        }
Beispiel #3
0
        public async Task <AddLeaseAgreementViewModel> Handle(AddLeaseCommand request, CancellationToken cancellationToken)
        {
            // Teant data is in the entity NewTeant, Rental Property and Address data is in the Entity RentalProperty based on RentalPropertyId in Lease entity

            // var newTenant = _context.NewTenant.FirstOrDefault(n => n.Id == request.NewTenantId);

            //var tenant = new Tenant(newTenant.UserName, newTenant.FirstName, newTenant.LastName, newTenant.ContactEmail, newTenant.ContactTelephone1, newTenant.ContactTelephone2,
            //    newTenant.ContactOthers, false, "", 3, true, DateTime.Now, DateTime.Now); // isActive = false, avatarUrl = ""


            var rentalCoverage = new RentCoverage(request.Water, request.Cablevison, request.Electricity, request.Internet, request.Heat, request.NaturalGas,
                                                  request.SewageDisposal, request.SnowRemoval, request.Storage, request.RecreationFacility, request.GarbageCollection, request.RecreationFacility,
                                                  request.KitchenScrapCollection, request.Laundry, /*request.FreeLaundry,*/ request.Regfrigerator, request.Dishwasher, request.StoveOven,
                                                  request.WindowCovering, request.Furniture, request.Carpets, request.ParkingStall, request.Other);

            var agent = new Agent(request.AgentFirstName, request.AgentLastName, request.AgentContactEmail, request.ContatTel, request.Other, request.IsPropertyManager, request.AddressStreetNumber,
                                  request.AddressCity, request.AddressStateProv, request.AddressZipPostCode, request.AddressCountry, DateTime.Now, DateTime.Now);

            var agents  = new List <Agent>();
            var tenants = new List <Tenant>();

            agents.Add(agent);

            foreach (var tenant in request.TenantList)
            {
                tenant.Created  = DateTime.Now;
                tenant.Modified = DateTime.Now;
                tenants.Add(tenant);
            }

            var property = _context.RentalProperty.FirstOrDefault(p => p.OriginalId == request.RentalPropertyId);


            var lease = new Lease(0, request.LeaseTitle, request.LeaseDesc, property.Id, request.LeaseStartDate, request.LeaseEndDate, request.Term,
                                  request.RentFrequency, request.RentAmount, request.RentDueOn, request.DamageDepositAmount, request.PetDepositAmount, request.LeaseSignDate,
                                  request.LeaseAgreementDocUrl, /*true*/ false, request.IsAddendumAvailable, request.LeaseEndCode, request.Notes, request.ServiceAgent, DateTime.Now, DateTime.Now, request.RenewTerm, rentalCoverage, agents, tenants);

            // Note avbove, when the agreement added, the status is not active, i.e. isActive = FALSE, this is used for finalizing the lease agreement



            property.StatusUpdate("Pending");

            _context.Add(lease); // Foe debugging purpose

            var addedLease = new AddLeaseAgreementViewModel();

            addedLease.LeaseTitle     = request.LeaseTitle;
            addedLease.LeaseDesc      = request.LeaseDesc;
            addedLease.LeaseStartDate = request.LeaseStartDate;
            addedLease.Type           = lease.Type;
            //...
            addedLease.LeaseEndDate        = request.LeaseEndDate;
            addedLease.RentAmount          = request.RentAmount;
            addedLease.DamageDepositAmount = request.DamageDepositAmount;
            addedLease.PetDepositAmount    = request.PetDepositAmount;
            addedLease.Term                = request.Term;
            addedLease.RenewTerm           = request.RenewTerm;
            addedLease.LeaseSignDate       = request.LeaseSignDate;
            addedLease.IsActive            = request.IsActive;
            addedLease.IsAddendumAvailable = request.IsAddendumAvailable;
            addedLease.EndLeaseCode        = request.LeaseEndCode;
            addedLease.Notes               = request.Notes;
            addedLease.Created             = DateTime.Now;
            addedLease.Modified            = DateTime.Now;


            try
            {
                await _context.SaveChangesAsync(); // comment out for testing message sending ONLY

                addedLease.Id = lease.Id;


                // Send message to MQ if needed
                //

                // Logging
                Log.Information("New lease agreement  {LeaseTile} has been created successfully", lease.LeaseTitle);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Error while creating lease {LeaseTile}.", lease.LeaseTitle);
                throw ex;
            }

            return(addedLease);
        }
Beispiel #4
0
        public async Task <UpdateLeaseAgreementViewModel> Handle(UpdateLeaseCommand request, CancellationToken cancellationToken)
        {
            bool finalize = false;

            var lease = _context.Lease
                        .Include(p => p.RentalProperty)
                        .ThenInclude(p => p.RentalPropertyOwners)
                        .Include(l => l.RentCoverage)
                        .Include(t => t.Tenant).ToList()
                        .FirstOrDefault(l => l.Id == request.Id);

            bool currentStatus = lease.IsActive;

            var coverage = new RentCoverage(request.Water, request.Cablevison, request.Electricity, request.Internet, request.Heat,
                                            request.NaturalGas, request.SewageDisposal, request.SnowRemoval, request.Storage, request.RecreationFacility,
                                            request.GarbageCollection, request.RecycleServices, request.KitchenScrapCollection, request.Laundry,
                                            /*request.FreeLaundry, */ request.Regigerator, request.Dishwasher, request.StoveOven, request.WindowCovering,
                                            request.Furniture, request.Carpets, request.ParkingStall, request.Other);
            //lease.RentCoverage;


            var property = lease.RentalProperty;
            var tenants  = lease.Tenant;

            var owners = lease.RentalProperty.RentalPropertyOwners;

            bool tmpActiveStatus;

            if (request.Type == 1)
            {
                tmpActiveStatus = false; // make renewd lease agreement to have a finalizing option
            }
            else
            {
                tmpActiveStatus = request.IsActive;
            }

            lease.Update(request.Type, request.LeaseTitle, request.LeaseDesc, request.LeaseStartDate, request.LeaseEndDate,
                         request.Term, request.RentFrequency, request.RentAmount, request.RentDueOn, request.DamageDepositAmount, request.PetDepositAmount,
                         request.LeaseSignDate, tmpActiveStatus, request.IsAddendumAvailable, request.EndLeaseCode, request.RenewTerm,
                         request.Notes, coverage);

            // Find out if this is for fianlization of the lease agreement

            //bool currentStatus = lease.IsActive;

            bool futureStatus = request.IsActive;

            if (currentStatus == false && futureStatus == true)
            {
                // Finalizing operation with SignDate

                property.StatusUpdate("Rented");

                _context.RentalProperty.Update(property);

                lease.Finalize(request.LeaseSignDate);

                finalize = true;
            }



            _context.Lease.Update(lease);

            var updatedLease = new UpdateLeaseAgreementViewModel();

            updatedLease.Type                = request.Type;
            updatedLease.LeaseTitle          = request.LeaseTitle;
            updatedLease.LeaseDesc           = request.LeaseDesc;
            updatedLease.LeaseStartDate      = request.LeaseStartDate;
            updatedLease.Id                  = request.Id;
            updatedLease.LeaseEndDate        = request.LeaseEndDate;
            updatedLease.RentAmount          = request.RentAmount;
            updatedLease.RentDueOn           = request.RentDueOn;
            updatedLease.RentFrequency       = request.RentFrequency;
            updatedLease.DamageDepositAmount = request.DamageDepositAmount;
            updatedLease.PetDepositAmount    = request.PetDepositAmount;
            updatedLease.Term                = request.Term;
            updatedLease.RenewTerm           = request.RenewTerm;
            updatedLease.LeaseSignDate       = request.LeaseSignDate;
            updatedLease.IsActive            = request.IsActive;
            updatedLease.IsAddendumAvailable = request.IsAddendumAvailable;
            updatedLease.EndLeaseCode        = request.EndLeaseCode;
            updatedLease.Notes               = request.Notes;
            updatedLease.Created             = DateTime.Now;
            updatedLease.Modified            = DateTime.Now;
            updatedLease.rentCoverage        = coverage;
            updatedLease.rentalProperty      = lease.RentalProperty;
            updatedLease.RentalPropertyId    = lease.RentalPropertyId;
            updatedLease.Tenant              = tenants.ToList();
            updatedLease.propertyOwners      = owners.ToList();

            try
            {
                await _context.SaveChangesAsync();

                // Send message to message queue if it is finalizing opeatrion

                if (finalize)
                {
                    LeaseFinalizedEvent e = new LeaseFinalizedEvent(Guid.NewGuid(), /*rentalproeprty.ListinglId,*/ property.OriginalId);

                    try
                    {
                        await _messagePublisher.PublishMessageAsync(e.MessageType, e, "lease_finalized"); // publishing the message

                        Log.Information("Message  {MessageType} with Id {MessageId} has been published successfully", e.MessageType, e.MessageId);
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex, "Error while handling {MessageType} message with id {MessageId}.", e.MessageType, e.MessageId);
                    }

                    // Logging
                    Log.Information("The lease {LeaseName} been finalized, signed on {SignDate}", lease.LeaseTitle, lease.LeaseSignDate);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            //throw new NotImplementedException();

            return(updatedLease);
        }