Пример #1
0
        public async Task <IActionResult> UpdateBook(int bookId, [FromBody] SaveBookResource bookResource)
        {
            var book = await unitOfWork.Books.GetBook(bookId);

            var room = await unitOfWork.Rooms.Get(bookResource.RoomId);

            if (book == null || room == null)
            {
                return(NotFound());
            }

            if (book.RoomId != bookResource.RoomId)
            {
                await ChangeRoom(book, room);
            }

            book.GuestNumber = bookResource.GuestNumber;
            book.RoomRate    = bookResource.RoomRate;
            book.CheckOut    = ParseString.ParseStringToDateTime(bookResource.CheckOut);

            await unitOfWork.CompleteAsync();

            return(Ok(mapper.Map <Book, BookResource>(book)));
        }
Пример #2
0
        public MappingProfiler()
        {
            CreateMap <Book, BookResource>()
            .ForMember(br => br.Guests, opt => opt
                       .MapFrom(s => s.Guests.Select(x => new GuestResource
            {
                Id           = x.Guest.Id,
                Cpf          = x.Guest.Cpf,
                Nome         = x.Guest.Nome,
                Fone         = x.Guest.Fone,
                DtNascimento = x.Guest.DtNascimento,
                Email        = x.Guest.Email,
                Endereco     = new EnderecoResource
                {
                    Uf         = x.Guest.Uf,
                    Cidade     = x.Guest.Cidade,
                    Logradouro = x.Guest.Logradouro,
                    Bairro     = x.Guest.Bairro,
                    Numero     = x.Guest.Numero,
                    Cep        = x.Guest.Cep,
                    Prefixo    = x.Guest.Prefixo
                }
            })));
            CreateMap <SaveBookResource, Book>()
            .ForMember(sbr => sbr.Guests, opt => opt.Ignore())
            .ForMember(sbr => sbr.CheckIn, opt => opt.Ignore())
            .ForMember(sbr => sbr.CheckOut, opt => opt.Ignore())
            .ForMember(sbr => sbr.Id, opt => opt.Ignore())
            .AfterMap((sbr, b) =>
            {
                // Remove unselected roomBeds
                var guets = b.Guests.Where(f => !sbr.Guests.Any(x => x == f.GuestId)).ToList();
                foreach (var f in guets)
                {
                    b.Guests.Remove(f);
                }

                // Add new RoomBeds
                var addedGuets = sbr.Guests.Where(x => !b.Guests.Any(f => f.GuestId == x)).Select(x => new GuestBook {
                    GuestId = x
                }).ToList();
                foreach (var f in addedGuets)
                {
                    b.Guests.Add(f);
                }

                b.CheckIn   = DateTime.Now;
                b.TotalBill = sbr.RoomRate;

                if (String.IsNullOrEmpty(sbr.CheckOut))
                {
                    b.CheckOut = DateTime.Now.AddDays(1);
                }
                else
                {
                    b.CheckOut = ParseString.ParseStringToDateTime(sbr.CheckOut);
                }
            });

            CreateMap <Guest, GuestResource>()
            .ForMember(gr => gr.Endereco, opt => opt
                       .MapFrom(g => new EnderecoResource
            {
                Uf         = g.Uf,
                Cidade     = g.Cidade,
                Logradouro = g.Logradouro,
                Bairro     = g.Bairro,
                Numero     = g.Numero,
                Cep        = g.Cep,
                Prefixo    = g.Prefixo
            }));

            CreateMap <GuestResource, Guest>()
            .ForMember(g => g.Uf, opt => opt.MapFrom(gr => gr.Endereco.Uf))
            .ForMember(g => g.Cidade, opt => opt.MapFrom(gr => gr.Endereco.Cidade))
            .ForMember(g => g.Logradouro, opt => opt.MapFrom(gr => gr.Endereco.Logradouro))
            .ForMember(g => g.Bairro, opt => opt.MapFrom(gr => gr.Endereco.Bairro))
            .ForMember(g => g.Numero, opt => opt.MapFrom(gr => gr.Endereco.Numero))
            .ForMember(g => g.Cep, opt => opt.MapFrom(gr => gr.Endereco.Cep))
            .ForMember(g => g.Prefixo, opt => opt.MapFrom(gr => gr.Endereco.Prefixo));

            CreateMap <Bed, KeyValuePairResource>()
            .ForMember(r => r.Name, opt => opt.MapFrom(v => v.Description));;;
            CreateMap <RoomState, KeyValuePairResource>()
            .ForMember(r => r.Name, opt => opt.MapFrom(v => v.State));
            CreateMap <RoomType, KeyValuePairResource>()
            .ForMember(r => r.Name, opt => opt.MapFrom(v => v.Description));;
            CreateMap <SaveRoomResource, Room>()
            .ForMember(r => r.Id, opt => opt.Ignore())
            .ForMember(r => r.Beds, opt => opt.Ignore())
            .AfterMap((rr, r) =>
            {
                // Remove unselected roomBeds
                var roomBeds = r.Beds.Where(f => !rr.Beds.Any(x => x.BedId == f.BedId)).ToList();
                foreach (var f in roomBeds)
                {
                    r.Beds.Remove(f);
                }

                // Add new RoomBeds
                var addedRoomBeds = rr.Beds.Where(x => !r.Beds.Any(f => f.BedId == x.BedId)).Select(x => new RoomBed {
                    BedId = x.BedId, NumberBeds = x.NumberBeds
                }).ToList();
                foreach (var f in addedRoomBeds)
                {
                    f.RoomId = r.Id;
                    r.Beds.Add(f);
                }
            });

            CreateMap <Room, RoomResource>()
            .ForMember(rr => rr.RoomType, opt => opt
                       .MapFrom(r => new KeyValuePairResource
            {
                Id   = r.RoomType.Id,
                Name = r.RoomType.Description
            }))
            .ForMember(rr => rr.RoomState, opt => opt
                       .MapFrom(r => new KeyValuePairResource
            {
                Id   = r.RoomState.Id,
                Name = r.RoomState.State
            }))
            .ForMember(rr => rr.Beds, opt => opt
                       .MapFrom(r => r.Beds
                                .Select(rb => new RoomBedResource
            {
                BedId      = rb.Bed.Id,
                Name       = rb.Bed.Description,
                NumberBeds = rb.NumberBeds
            })))
            .ForMember(rr => rr.CurrentBook, opt => opt.MapFrom(r => new BookResource
            {
                Id          = r.CurrentBook.Id,
                CheckIn     = r.CurrentBook.CheckIn,
                CheckOut    = r.CurrentBook.CheckOut,
                Room        = null,
                GuestNumber = r.CurrentBook.GuestNumber,
                RoomRate    = r.CurrentBook.RoomRate,
                TotalBill   = r.CurrentBook.TotalBill,
                Guests      = r.CurrentBook.Guests
                              .Select(x => new GuestResource
                {
                    Id           = x.Guest.Id,
                    Cpf          = x.Guest.Cpf,
                    Nome         = x.Guest.Nome,
                    Fone         = x.Guest.Fone,
                    DtNascimento = x.Guest.DtNascimento,
                    Email        = x.Guest.Email,
                    Endereco     = null
                }).ToList()
            }));
        }