private static bool AssignInquiryType(MappingResult <CreditInquiry> result, CreditInquiry inquiry,
                                              List <RecognizedChoicePart> inquiryType)
        {
            switch (inquiryType.Count)
            {
            case 0:
                result.Errors.Add("Nie wybrano typu wniosku");
                return(true);

            case 1:
                switch (inquiryType.Single().AreaName)
                {
                case "Typ wniosku - Kredyt hipoteczny":
                    inquiry.Type = CreditType.BudowlanyHipoteczny;
                    break;

                case "Typ wniosku - Kredyt budowlano-hipoteczny":
                    inquiry.Type = CreditType.BudowlanyHipoteczny;
                    break;

                case "Typ wniosku - Kredyt mieszkaniowy MDM":
                    inquiry.Type = CreditType.MieszkaniowyMDM;
                    break;

                default:
                    inquiry.Type = CreditType.EurokontoHipotecznePlus;
                    break;
                }
                return(false);

            default:
                result.Errors.Add("Wybrano wiecej niz jeden typ wniosku");
                return(true);
            }
        }
        private static bool AssignCustomerParts(MappingResult <CreditInquiry> result, CreditInquiry inquiry,
                                                DocumentPageProcessingCompleted processedPage)
        {
            var anyError = false;

            inquiry.Customer.Name = processedPage.ProcessedTextAreas.Single(pta => pta.AreaName == "Wnioskodawca 1 - Imie").ResultStringified;
            if (inquiry.Customer.Name == null)
            {
                anyError = true;
                result.Errors.Add("Nie wprowadzono imienia wnioskodawcy");
            }

            inquiry.Customer.Surname = processedPage.ProcessedTextAreas.Single(pta => pta.AreaName == "Wnioskodawca 1 - Nazwisko").ResultStringified;
            if (inquiry.Customer.Surname == null)
            {
                anyError = true;
                result.Errors.Add("Nie wprowadzono nazwiska wnioskodawcy");
            }

            inquiry.Customer.PESEL = processedPage.ProcessedTextAreas
                                     .Single(pta => pta.AreaName == "Wnioskodawca 1 - PESEL").ResultStringified;

            if (inquiry.Customer.PESEL == null)
            {
                anyError = true;
                result.Errors.Add("Nie wprowadzono nr PESEL wnioskodawcy");
            }
            else if (inquiry.Customer.PESEL.Length < 11)
            {
                anyError = true;
                result.Errors.Add("Nie wprowadzono wszystkich cyfr nr PESEL");
            }
            else
            {
                var peselNumbers = inquiry.Customer.PESEL.Select(num => int.Parse(num.ToString())).ToList();

                int controlSum = 0;

                controlSum += 9 * peselNumbers[0];
                controlSum += 7 * peselNumbers[1];
                controlSum += 3 * peselNumbers[2];
                controlSum += 1 * peselNumbers[3];
                controlSum += 9 * peselNumbers[4];
                controlSum += 7 * peselNumbers[5];
                controlSum += 3 * peselNumbers[6];
                controlSum += 1 * peselNumbers[7];
                controlSum += 9 * peselNumbers[8];
                controlSum += 7 * peselNumbers[9];

                if (controlSum % 10 != peselNumbers[10])
                {
                    anyError = true;
                    result.Errors.Add("Nr PESEL jest nieprawidlowy");
                }
            }

            return(anyError);
        }
        public MappingResult <CreditInquiry> MapToDomainModel(DocumentPageProcessingCompleted processedPage)
        {
            var result = new MappingResult <CreditInquiry>();

            result.Scope = "Page";

            var inquiry = new CreditInquiry(processedPage.DocumentId);

            inquiry.Customer = new Customer();
            bool anyError = false;

            var inquiryType = processedPage.ProcessedChoiceAreas
                              .Where(pca => pca.AreaName.StartsWith("Typ wniosku - ") && pca.RecognitionOutput == true)
                              .ToList();

            anyError &= AssignInquiryType(result, inquiry, inquiryType);
            anyError &= AssignCustomerParts(result, inquiry, processedPage);

            result.WasSuccessful = !anyError;
            result.Result        = inquiry;

            return(result);
        }