public async Task <ActionResult <Visitor> > Register([FromBody] Visitor visitor) { try { if (visitor is null) { throw new ArgumentNullException(nameof(visitor)); } if (!string.IsNullOrEmpty(configuration["googleReCaptcha:SiteKey"])) { if (string.IsNullOrEmpty(visitor.Token)) { throw new Exception("Please provide captcha"); } var validation = await captchaValidator.IsCaptchaPassedAsync(visitor.Token); if (!validation) { throw new Exception("Please provide valid captcha"); } visitor.Token = ""; } var time = new DateTimeOffset(visitor.ChosenSlot, TimeSpan.Zero); if (time.AddMinutes(10) < DateTimeOffset.Now) { throw new Exception("Na tento termín sa nedá zaregistrovať pretože časový úsek je už ukončený"); } if (string.IsNullOrEmpty(visitor.Address)) { visitor.Address = $"{visitor.Street} {visitor.StreetNo}, {visitor.ZIP} {visitor.City}"; } if (visitor.PersonType == "foreign") { if (string.IsNullOrEmpty(visitor.Passport)) { throw new Exception("Zadajte číslo cestovného dokladu prosím"); } } else { if (string.IsNullOrEmpty(visitor.RC)) { throw new Exception("Zadajte rodné číslo prosím"); } } if (string.IsNullOrEmpty(visitor.Street)) { throw new Exception("Zadajte ulicu trvalého bydliska prosím"); } if (string.IsNullOrEmpty(visitor.StreetNo)) { throw new Exception("Zadajte číslo domu trvalého bydliska prosím"); } if (string.IsNullOrEmpty(visitor.ZIP)) { throw new Exception("Zadajte PSČ trvalého bydliska prosím"); } if (string.IsNullOrEmpty(visitor.City)) { throw new Exception("Zadajte mesto trvalého bydliska prosím"); } if (string.IsNullOrEmpty(visitor.FirstName)) { throw new Exception("Zadajte svoje meno prosím"); } if (string.IsNullOrEmpty(visitor.LastName)) { throw new Exception("Zadajte svoje priezvisko prosím"); } if (!visitor.BirthDayYear.HasValue || visitor.BirthDayYear < 1900 || visitor.BirthDayYear > 2021) { throw new Exception("Rok Vášho narodenia vyzerá byť chybne vyplnený"); } if (!visitor.BirthDayDay.HasValue || visitor.BirthDayDay < 1 || visitor.BirthDayDay > 31) { throw new Exception("Deň Vášho narodenia vyzerá byť chybne vyplnený"); } if (!visitor.BirthDayMonth.HasValue || visitor.BirthDayMonth < 1 || visitor.BirthDayMonth > 12) { throw new Exception("Mesiac Vášho narodenia vyzerá byť chybne vyplnený"); } visitor.RegistrationTime = DateTimeOffset.UtcNow; visitor.SelfRegistration = true; var place = await placeRepository.GetPlace(visitor.ChosenPlaceId); if (place == null) { throw new Exception("Vybrané miesto nebolo nájdené"); } visitor.PlaceProviderId = place.PlaceProviderId; PlaceProduct placeProduct = null; try { placeProduct = await placeRepository.GetPlaceProduct(visitor.Product); } catch { } Product product = null; try { if (placeProduct == null) { product = await placeProviderRepository.GetProduct(place.PlaceProviderId, visitor.Product); } } catch { } if (product == null && placeProduct == null) { throw new Exception("Vybraná služba nebola nájdená"); } //logger.LogInformation($"EmployeesRegistration: {product.EmployeesRegistration}"); if (placeProduct?.EmployeesRegistration == true || product?.EmployeesRegistration == true) { logger.LogInformation($"EmployeesRegistration 2: {visitor.EmployeeId}"); if (string.IsNullOrEmpty(visitor.EmployeeId)) { throw new Exception("Zadajte prosím osobné číslo zamestnanca"); } var pp = await placeProviderRepository.GetPlaceProvider(place.PlaceProviderId); if (pp == null) { throw new Exception("Miesto má nastavené chybnú spoločnosť. Prosím kontaktujte podporu s chybou 0x021561"); } var hash = visitorRepository.MakeCompanyPeronalNumberHash(pp.CompanyId, visitor.EmployeeId); var regId = await visitorRepository.GetRegistrationIdFromHashedId(hash); var reg = await visitorRepository.GetRegistration(regId); logger.LogInformation($"EmployeesRegistration 3: {hash} {regId} {reg?.Id}"); if (reg == null) { throw new Exception("Zadajte prosím platné osobné číslo zamestnanca"); } var rc = reg.RC ?? ""; if (rc.Length > 4) { rc = rc.Substring(rc.Length - 4); } logger.LogInformation($"EmployeesRegistration 4: {rc}"); if (string.IsNullOrEmpty(visitor.RC) || !visitor.RC.EndsWith(rc)) { throw new Exception("Časť poskytnutého rodného čísla od zamestnávateľa vyzerá byť rozdielna od čísla zadaného v registračnom formulári"); } } return(Ok(await visitorRepository.Register(visitor, "", true))); } catch (ArgumentException exc) { logger.LogError(exc.Message); return(BadRequest(new ProblemDetails() { Detail = exc.Message })); } catch (Exception exc) { logger.LogError(exc, exc.Message); return(BadRequest(new ProblemDetails() { Detail = exc.Message })); } }