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(); }
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); }