Ejemplo n.º 1
0
        private async Task HandleAsync(RentalAppApprovedEvent @event)
        {
            var newTenant = new NewTenant(@event.UserName, @event.FirstName, @event.LastName, @event.ContactEmail,
                                          @event.ContactTelephone1, @event.ContactTelephone2, @event.ContactOthers, DateTime.Now, DateTime.Now);

            _context.Add(newTenant);

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



            var rentalproperty = _context.RentalProperty.Include(a => a.Address).FirstOrDefault(a => a.OriginalId == @event.PropertyId); // Get related rental property

            //Note above: @event.ProeprtyId comes from the event and is the Id for rental property (in Marketing), it should be named OriginalId in RentalProperty in Lease service

            if (rentalproperty == null)
            {
                var address = new Address(@event.StreetNum, @event.City, @event.StateProvince, @event.Country, @event.ZipPostCode);

                var owners = new List <RentalPropertyOwner>();

                foreach (var owner in @event.PropertyOwners)
                {
                    var ownerAddress = new OwnerAddress(owner.OwnerStreetNum, owner.OwnerCity, owner.OwnerStateProvinc, owner.OwnerZipPostCode, owner.OwnerCountry);
                    var pOwner       = new RentalPropertyOwner(owner.PropertyOwnerId, owner.FirstName, owner.LastName, owner.ContactEmail, owner.ContactTelephone, owner.ContactOther, owner.RentalPropertyId, ownerAddress, DateTime.Now, DateTime.Now);
                    owners.Add(pOwner);
                }

//(IList<RentalPropertyOwner>)@event.PropertyOwners


                var newRentalProperty = new RentalProperty(@event.PropertyId, DateTime.Now, DateTime.Now, @event.ListingId, /*0,*/ @event.PropertyName, @event.Type, @event.PropertyBuildYear,
                                                           @event.IsShared, "Pending", @event.IsBasementSuite, @event.NumberOfBedrooms, @event.NumberOfBathrooms, @event.NumberOfLayers,
                                                           @event.NumberOfParking, @event.TotalLivingArea, @event.Notes, @event.PropertyManagerUserName, address, owners);

                _context.RentalProperty.Add(newRentalProperty);

                //try
                //{
                //    await _context.SaveChangesAsync();

                //    Log.Information("Message  {MessageType} with Id {MessageId} has been handled successfully", @event.MessageType, @event.MessageId);
                //}
                //catch (Exception ex)
                //{
                //    //throw ex;
                //    Log.Error(ex, "Error while handling {MessageType} message with id {MessageId}.", @event.MessageType, @event.MessageId);
                //}
            }

            try
            {
                await _context.SaveChangesAsync();

                Log.Information("Message  {MessageType} with Id {MessageId} has been handled successfully", @event.MessageType, @event.MessageId);
            }
            catch (Exception ex)
            {
                //throw ex;
                Log.Error(ex, "Error while handling {MessageType} message with id {MessageId}.", @event.MessageType, @event.MessageId);
            }


            //throw new NotImplementedException();
        }
Ejemplo n.º 2
0
        public async Task <Unit> Handle(ApproveApplicationCommand request, CancellationToken cancellationToken)
        {
            //throw new NotImplementedException();

            var application = _context.RentalApplication
                              .Include(p => p.RentalProperty)
                              //.ThenInclude(l => l.PropertyListing)
                              .FirstOrDefault(a => a.Id == request.ApplicationId);

            //application.StatusUpdate(application, request.AppStatus);

            // Get related rental property and its onwer
            var rentalProperty = application.RentalProperty;
            //var owner = rentalProperty.RentalPropertyOwner;

            //var owners = rentalProperty.RentalPropertyOwner.ToList();

            var owners = _context.RentalPropertyOwner
                         .Include(a => a.OwnerAddress)
                         .Where(p => p.RentalPropertyId == rentalProperty.Id)
                         .Select(p => new PropertyOwnerViewModel
            {
                PropertyOwnerId   = p.OriginalId,
                FirstName         = p.FirstName,
                LastName          = p.LastName,
                ContactEmail      = p.ContactEmail,
                ContactTelephone  = p.ContactTelephone,
                ContactOther      = p.ContactOther,
                OwnerStreetNum    = p.OwnerAddress.StreetNumber,
                OwnerCity         = p.OwnerAddress.City,
                OwnerStateProvinc = p.OwnerAddress.StateProvince,
                OwnerZipPostCode  = p.OwnerAddress.ZipPostCode,
                OwnerCountry      = p.OwnerAddress.Country
            }).ToList();

            //Get the related listing for this rental property
            var listing = _context.PropertyListing.FirstOrDefault(l => l.RentalPropertyId == rentalProperty.Id);



            //var rentalProperty = _context.RentalProperty.Include(l => l.PropertyListing).FirstOrDefault(p => p.Id == application.RentalPropertyId); // Get related rental property
            //var rentalProperty = application.RentalProperty;

            ////Get the related listing for this rental property
            //var listing = _context.PropertyListing.FirstAsync(l => l.RentalPropertyId == rentalProperty.Id);


            // Update applicaiton status
            //
            application.StatusUpdate(application, request.AppStatus);

            // Update listing/rental property status
            //
            ListingStatus status = (ListingStatus)Enum.Parse(typeof(ListingStatus), "Pending");

            rentalProperty.StatusUpdate(status);

            _context.RentalApplication.Update(application);

            try
            {
                await _context.SaveChangesAsync(); // comment out for testing message sending
            }
            catch (Exception ex)
            {
                throw ex;
            }


            // Send message to message queue on conditions
            //
            if (request.AppStatus.ToString() == "Approved")
            {
                //NewTemantCreatedEvent e = new NewTemantCreatedEvent(new Guid(), "NotSet", request.FirstName, request.LastName, request.ContactEmail,
                //    request.ContactTelephone1, request.ContactTelephone2, request.ContactOthers); // THE DATA ALREADY INCLUDED IN THE APP-APPROVE-EVENT

                //var rentalproperty = _context.RentalProperty.Include(a => a.Address).FirstOrDefault(a => a.Id == application.RentalPropertyId); // Get related rental property

                //var address = new Address(request.);

                /*
                 *             //if (rentalProperty == null) // check if the rental property exists, if not create it
                 *             //{
                 *             RentalPropertyCreatedEvent e2 = new RentalPropertyCreatedEvent(new Guid(), rentalProperty.OriginalId, 0, rentalProperty.PropertyName, rentalProperty.PmUserName, rentalProperty.PropertyBuildYear,
                 *                rentalProperty.PropertyType, rentalProperty.IsBasementSuite, rentalProperty.IsShared, rentalProperty.NumberOfBedrooms, rentalProperty.NumberOfBathrooms, rentalProperty.NumberOfLayers,
                 *                rentalProperty.NumberOfParking, rentalProperty.TotalLivingArea, rentalProperty.Address.StreetNum, rentalProperty.Address.City, rentalProperty.Address.StateProvince,
                 *                rentalProperty.Address.Country, rentalProperty.Address.ZipPostCode);
                 *
                 *             //await _messagePublisher.PublishMessageAsync(e2.MessageType, e2, "rental_created.*");
                 *             //await _messagePublisher.PublishMessageAsync(e2.MessageType, e2, "app_approved"); // this event does not need to triggered, all combined as the following one!
                 *             //}
                 *
                 */

                // Get owners for this propeprty
                //var owners = new List<RentalPropertyOwner>();



                RentalAppApprovedEvent e3 = new RentalAppApprovedEvent(Guid.NewGuid(), "NotSet", request.FirstName, request.LastName, request.ContactEmail,
                                                                       request.ContactTelephone1, request.ContactTelephone2, request.ContactOthers, rentalProperty.OriginalId, listing.Id, rentalProperty.PropertyName, rentalProperty.PmUserName, rentalProperty.PropertyBuildYear,
                                                                       rentalProperty.PropertyType, rentalProperty.IsBasementSuite, rentalProperty.IsShared, rentalProperty.NumberOfBedrooms, rentalProperty.NumberOfBathrooms, rentalProperty.NumberOfLayers,
                                                                       rentalProperty.NumberOfParking, rentalProperty.TotalLivingArea, rentalProperty.Address.StreetNum, rentalProperty.Address.City, rentalProperty.Address.StateProvince,
                                                                       rentalProperty.Address.Country, rentalProperty.Address.ZipPostCode, owners);

                try
                {
                    await _messagePublisher.PublishMessageAsync(e3.MessageType, e3, "app_approved");

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

                //await _messagePublisher.PublishMessageAsync(e.MessageType, e, "rental_created.*");
            }


            return(await Unit.Task);
        }