Beispiel #1
0
        private async Task HandleAsync(AddOwnerEvent @event)
        {
            var rentalProperty = _context.RentalProperty.Include(a => a.Address).FirstOrDefault(p => p.OriginalId == @event.PropertyId);

            if (rentalProperty != null)
            {
                var address = new OwnerAddress(@event.StreetNumber, @event.City, @event.StateProv, @event.Country, @event.ZipPostCode);

                var owner = new RentalPropertyOwner(@event.OriginalId, @event.FirstName, @event.LastName, @event.ContactEmail,
                                                    @event.ContactTelephone1, @event.ContactTelephone2, rentalProperty.Id, address, DateTime.Now, DateTime.Now);

                _context.Add(owner);

                try
                {
                    await _context.SaveChangesAsync();

                    Log.Information("Owner {Owner} has been added to property {Property} successfully", @event.FirstName + " " + @event.LastName, rentalProperty.PropertyName);
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "Error while addinng owner {Owner} to {Property}.", @event.FirstName + " " + @event.LastName, rentalProperty.PropertyName);
                    throw ex;
                }
            }
            else
            {
                Log.Information("The rental property with Id: {PrpertyId} does not exist.", @event.PropertyId);
            }



            //throw new NotImplementedException();
        }
Beispiel #2
0
        public async Task <Addendum> Handle(AddAddendumCommand request, CancellationToken cancellationToken)
        {
            var newAddendum = new Addendum(request.LeaseId, request.HeaderText, request.FooterText, request.ContentText);

            var relatedLease = _context.Lease.FirstOrDefault(l => l.Id == request.LeaseId);

            newAddendum.Created  = DateTime.Now;
            newAddendum.Modified = DateTime.Now;

            relatedLease.UpdateAddendumAvailability(relatedLease, true);

            _context.Update(relatedLease);

            _context.Add(newAddendum);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(newAddendum);


            // throw new NotImplementedException();
        }
Beispiel #3
0
        public async Task <Invoice> Handle(AddInvoiceToWorkOrderCommand request, CancellationToken cancellationToken)
        {
            var workOrder = _context.WorkOrder.FirstOrDefault(w => w.Id == request.WorkOrderId);

            var invoice = workOrder.AddInvoice(request.InvoiceTitle, request.InvoiceAmount, request.InvoiceDate,
                                               request.IsPaid, request.PaymentDate, request.PaymentMethod, request.PaymentAmount, request.Note, request.WorkOrderId);

            _context.Add(invoice);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(invoice);

            // throw new NotImplementedException();
        }
Beispiel #4
0
        public async Task<AddendumItem> Handle(AddAddendumItemCommand request, CancellationToken cancellationToken)
        {
            var newItem = new AddendumItem(request.ItemContent, request.AddendumId);

            newItem.Created = DateTime.Now;
            newItem.Modified = DateTime.Now;


            _context.Add(newItem);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (Exception ex)
            {

                throw ex;
            }

            return newItem;

            // throw new NotImplementedException();
        }
Beispiel #5
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);
        }