public async Task <IActionResult> CreateNewPayment(PaymentDetailsToCreateEmptyDTO paymentDetailsToCreateEmptyDTO)
        {
            var user = await _userRepository.GetUserById(paymentDetailsToCreateEmptyDTO.UserId);

            var access = await _authRepository.HasAdministrationRights(paymentDetailsToCreateEmptyDTO.UserId);

            if (!access)
            {
                return(BadRequest("User has no proper priviliges"));
            }

            var payments = await _repo.GetPayments(paymentDetailsToCreateEmptyDTO.FlatId);

            if (payments != null && payments.Where(p => p.Type == PaymentType.RENT).Any(p => p.Month == paymentDetailsToCreateEmptyDTO.Period.Month && p.Year == paymentDetailsToCreateEmptyDTO.Period.Year))
            {
                return(BadRequest("Czynsz za ten miesiąc został już wygenerowany"));
            }

            var payment = await _repo.CreateNewPayment(paymentDetailsToCreateEmptyDTO);

            var messageSubject = "Stworzono polecenie płatności";
            var messageContent = $"Płatnośc została stworzona przez użytkownika: {user.FirstName} {user.LastName}.\n" +
                                 $"W razie zastrzeżeń skontaktuj się z pracownikiem administracji. \n\n" +
                                 $"Treść maila wygenerowano automatycznie. Nie odpowiadaj na tego maila.";

            _mailService.SendMail(messageSubject, messageContent, "", "Home Community App");


            //_mapper.Map<UserDto>(user);
            return(Ok());
        }
        public async Task <Payment> CreateNewPayment(PaymentDetailsToCreateEmptyDTO paymentDTO)
        {
            var flat = await _context.Flats.Include(p => p.Payments).Include(p => p.Residents).FirstOrDefaultAsync(p => p.Id == paymentDTO.FlatId);

            var payment = new Payment()
            {
                Month           = paymentDTO.Period.Month,
                Year            = paymentDTO.Period.Year,
                PaymentDeadline = paymentDTO.Deadline,
                PaymentType     = PaymentType.RENT,

                Details = new PaymentDetail()
                {
                    AdministrationDescription = paymentDTO.AdministrationDescription,
                    AdministrationValue       = paymentDTO.AdministrationValue,
                    ColdWaterDescription      = paymentDTO.ColdWaterDescription,
                    ColdWaterValue            = paymentDTO.ColdWaterValue,
                    GarbageDescription        = paymentDTO.GarbageDescription,
                    GarbageValue             = paymentDTO.GarbageValue,
                    HeatingDescription       = paymentDTO.HeatingDescription,
                    HeatingRefundDescription = paymentDTO.HeatingRefundDescription,
                    HeatingRefundValue       = paymentDTO.HeatingRefundValue,
                    HeatingValue             = paymentDTO.HeatingValue,
                    HotWaterDescription      = paymentDTO.HotWaterDescription,
                    HotWaterValue            = paymentDTO.HotWaterValue,
                    WaterRefundDescription   = paymentDTO.WaterRefundDescription,
                    WaterRefundValue         = paymentDTO.WaterRefundValue
                },
                Name          = "Czynsz",
                PaymentStatus = PaymentStatus.WaitingForUser,
                Value         = Math.Round(paymentDTO.AdministrationValue +
                                           paymentDTO.GarbageValue +
                                           paymentDTO.OperatingCostValue +
                                           paymentDTO.ColdWaterValue +
                                           paymentDTO.HotWaterValue +
                                           paymentDTO.HeatingValue +
                                           paymentDTO.HeatingRefundValue +
                                           paymentDTO.WaterRefundValue, 2)
            };

            flat.Payments.Add(payment);
            await _context.SaveChangesAsync();

            return(payment);
        }