private void TryAddShare(ICollection <ProjectCompanyShare> shares, ProjectCompanyShare share)
        {
            var isExist = shares.Any(
                x => x.OwnerProjectCompanyId == share.OwnerProjectCompanyId && x.DependentProjectCompanyId == share.DependentProjectCompanyId);

            if (!isExist)
            {
                shares.Add(share);
            }
        }
        public bool CompanyHasMoreThenDomesticFactShare(ProjectCompanyShare share, IList <ProjectCompany> companies, IList <ProjectCompanyFactShare> factShares)
        {
            var dependentCompany = companies.Where(c => c.Id == share.DependentProjectCompanyId).First();

            if (dependentCompany.State == State.Individual || dependentCompany.State == State.Domestic)
            {
                return(false);
            }

            var fshare = factShares.Where(f => dependentCompany.DependentProjectCompanyShares.Any(d => d.OwnerProjectCompanyId == f.OwnerProjectCompanyId &&
                                                                                                  d.OwnerProjectCompany.IsResident)).ToList();
            var sumShareFactPart = fshare.Sum(f => f.ShareFactPart);

            return(share.SharePart > 10.0 && sumShareFactPart > 50.0);
        }
Example #3
0
        private ProjectCompanyShare GetShare(ProjectCompany owner, ProjectCompany dependent, double sharePart, bool isFounder, bool isControlledBy)
        {
            var share = new ProjectCompanyShare {
                OwnerProjectCompany = owner, DependentProjectCompany = dependent, SharePart = sharePart, CompanyStatus = "Status", ShareType = ShareType.Direct, ControlGrounds = "фактический контроль"
            };

            if (isFounder)
            {
                share.IsFounder      = isFounder;
                share.ControlGrounds = "учредитель";
            }
            if (isControlledBy)
            {
                share.IsControlledBy = isControlledBy;
            }

            return(share);
        }
        private static IEnumerable <ProjectCompanyShare> GetShares()
        {
            var part0 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = 1, DependentProjectCompanyId = 2, SharePart = 55
            };
            var part1 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = 2, DependentProjectCompanyId = 3, SharePart = 40
            };
            var part2 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = 3, DependentProjectCompanyId = 1, SharePart = 30
            };
            var part3 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = 4, DependentProjectCompanyId = 2, SharePart = 45
            };
            var part4 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = 5, DependentProjectCompanyId = 1, SharePart = 70
            };
            var part5 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = 6, DependentProjectCompanyId = 3, SharePart = 60
            };
            var part6 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = 5, DependentProjectCompanyId = 1, SharePart = 70
            };
            var part7 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = 6, DependentProjectCompanyId = 5, SharePart = 30
            };

            return(new List <ProjectCompanyShare> {
                part0, part1, part2, part3, part4, part5, part6, part7
            });
        }
        private void ProcessListA(int currentSheetNum, int companyNumber, XLWorkbook wb, ProjectCompanyShare share, ProjectCompanyFactShare factShare)
        {
            int    shareType   = 1;
            double shareResult = share.SharePart;

            if (factShare.ShareFactPart > 0 && share.SharePart == 0)
            {
                shareType = 2;
            }
            if (factShare.ShareFactPart > 0 && share.SharePart > 0)
            {
                shareType    = 3;
                shareResult += factShare.ShareFactPart;
            }
            wb.Worksheet(currentSheetNum).Name = NamedRusSheet + currentSheetNum;
            WriteStringInTripledCells(13, 52, companyNumber.ToString("D5"), wb, currentSheetNum);
            WriteMultipleStringInTripledCells(17, 1, share.DependentProjectCompany.ForeignCompany.FullName, wb, currentSheetNum);
            WriteMultipleStringInTripledCells(25, 1, share.DependentProjectCompany.ForeignCompany.Name, wb, currentSheetNum);
            WriteStringInTripledCells(33, 44, share.DependentProjectCompany.ForeignCompany.CountryCodeId.ToString("D3") ?? "---", wb, currentSheetNum);
            WriteMultipleStringInTripledCells(37, 1, share.DependentProjectCompany.ForeignCompany.RegistrationNumber, wb, currentSheetNum);
            WriteMultipleStringInTripledCells(43, 1, share.DependentProjectCompany.ForeignCompany.TaxPayerCodeId.ToString() ?? "-", wb, currentSheetNum);
            WriteStringInTripledCells(37, 1, share.DependentProjectCompany.ForeignCompany.RegistrationNumber, wb, currentSheetNum);

            WriteStringInTripledCells(56, 43, (shareType).ToString(), wb, currentSheetNum);

            WriteStringInTripledCells(58, 43, share.ShareStartDate.Date.ToString("dd"), wb, currentSheetNum);
            WriteStringInTripledCells(58, 52, share.ShareStartDate.Month.ToString("D2"), wb, currentSheetNum);
            WriteStringInTripledCells(58, 61, share.ShareStartDate.Date.Year.ToString("D4"), wb, currentSheetNum);

            WriteStringInTripledCells(60, 43, Math.Truncate(shareResult).ToString("000"), wb, currentSheetNum);
            WriteStringInTripledCells(60, 55, ((shareResult - Math.Truncate(shareResult)) * 100000).ToString("00000"), wb, currentSheetNum);

            var isDateNull = share.ShareFinishDate == null;

            WriteStringInTripledCells(62, 43, isDateNull ? "--" : share.ShareFinishDate.Value.Date.ToString("dd"), wb, currentSheetNum);
            WriteStringInTripledCells(62, 52, isDateNull ? "--" : share.ShareFinishDate.Value.Month.ToString("D2"), wb, currentSheetNum);
            WriteStringInTripledCells(62, 61, isDateNull ? "----" : share.ShareFinishDate.Value.Year.ToString("D4"), wb, currentSheetNum);
        }
        public async Task <byte[]> GetDocumentData(ProjectCompany ownerCompany, IList <ProjectCompanyFactShare> factShares, Signatory signature,
                                                   string templatePath, int year, int correction, int taxAuthorityCode)
        {
            //companyNumberContainer = new CompanyNumberContainer();
            this.factShares = factShares;

            byte[] result;
            using (var package = new ExcelPackage(new FileInfo(templatePath)))
            {
                this.ownerCompany = ownerCompany;

                ExcelWorkbook workbook = package.Workbook;
                var           sheet1   = workbook.Worksheets["стр 1"];
                var           sheet2   = workbook.Worksheets["стр 2"];
                var           sheetA   = workbook.Worksheets["А"];
                var           sheetA1  = workbook.Worksheets["А1"];
                var           sheetB   = workbook.Worksheets["Б"];
                //var sheetB1 = workbook.Worksheets["Б1"];
                var sheetV  = workbook.Worksheets["В"];
                var sheetG  = workbook.Worksheets["Г"];
                var sheetG1 = workbook.Worksheets["Г1"];
                var sheetG2 = workbook.Worksheets["Г2"];


                FillCell(sheet1, "[correctionnumber]", correction.ToString("D3"));
                FillCell(sheet1, "[period]", year);
                FillCell(sheet1, "[taxauthoritycode]", taxAuthorityCode);



                //Подписант
                FillCell(sheet1, "[signatorycode]", signature?.SignatoryCode?.Code);
                FillLongCell(sheet1, "[signatoryname]",
                             $"{signature.LastName} {signature.FirstName} {signature.MiddleName}", 20);
                FillCell(sheet1, "[signatoryinn]", signature.Inn);
                FillCell(sheet1, "[signatoryphone]", signature.PhoneNumber);
                FillCellValue(sheet1, "B55:BH55", signature.Email);
                FillLongCell(sheet1, "[signatorydocument]", signature?.ConfirmationDocument?.Name, 20);

                var pageNumber = 3;

                switch (this.ownerCompany.State)
                {
                case State.Domestic:

                    FillCell(sheet1, "[inn]", this.ownerCompany.DomesticCompany.INN);
                    FillCell(sheet1, "[kpp]", this.ownerCompany.DomesticCompany.KPP);


                    FillCell(sheet1, "[taxpayercode]", 1);
                    FillLongCell(sheet1, "[information]", this.ownerCompany.DomesticCompany.FullName, 40);

                    workbook.Worksheets.Delete(sheet2);
                    pageNumber--;

                    break;

                case State.Individual:

                    if (string.IsNullOrEmpty(signature.Inn))
                    {
                        FillCellValue(sheet2, "P6:CO6", signature.LastName);
                        FillCellValue(sheet2, "CU6:CY6", signature.FirstName[0]);
                        FillCellValue(sheet2, "DE6:DI6", signature.MiddleName[0]);
                    }

                    FillCell(sheet1, "[inn]", this.ownerCompany.IndividualCompany.INN);
                    FillCell(sheet1, "[taxpayercode]", 2);
                    FillLongCell(sheet1, "[information]",
                                 $"{this.ownerCompany.IndividualCompany.Surname} {this.ownerCompany.IndividualCompany.Name} {this.ownerCompany.IndividualCompany.MiddleName}", 40);

                    //стр 2
                    FillCell(sheet2, "[gender]", this.ownerCompany.IndividualCompany.GenderCode);
                    FillCell(sheet2, "[datebirth]", this.ownerCompany.IndividualCompany.BirthDate.Day > 9 ? this.ownerCompany.IndividualCompany.BirthDate.Day.ToString() : "0" + this.ownerCompany.IndividualCompany.BirthDate.Day);
                    FillCell(sheet2, "[monthbirth]", this.ownerCompany.IndividualCompany.BirthDate.Month > 9 ? this.ownerCompany.IndividualCompany.BirthDate.Month.ToString() : "0" + this.ownerCompany.IndividualCompany.BirthDate.Month);
                    FillCell(sheet2, "[yearbirth]", this.ownerCompany.IndividualCompany.BirthDate.Year);
                    FillLongCell(sheet2, "[placeofbirth]", this.ownerCompany.IndividualCompany.BirthPlace, 40);
                    FillCell(sheet2, "[citizenship]", this.ownerCompany.IndividualCompany.CitizenshipCode);
                    FillCell(sheet2, "[countrycode]", this.ownerCompany.IndividualCompany.RegionCode);

                    if (this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo != null)
                    {
                        FillCell(sheet2, "[passportcode]", this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo.DocumentCode?.Code);
                        FillCell(sheet2, "[passportnumber]", this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo.SeriesAndNumber);
                        FillCell(sheet2, "[datepassport]", this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo.IssueDate.Day > 9 ?
                                 this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo.IssueDate.Day.ToString() : "0" + this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo.IssueDate.Day);
                        FillCell(sheet2, "[monthpassport]", this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo.IssueDate.Month > 9 ?
                                 this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo.IssueDate.Month.ToString() : "0" + this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo.IssueDate.Month);
                        FillCell(sheet2, "[yearpassport]", this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo.IssueDate.Year);
                        FillCell(sheet2, "[issuedbypassport]", this.ownerCompany.IndividualCompany.VerifedPersonalityDocInfo.IssuePlace);
                    }

                    if (this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo != null)
                    {
                        FillCell(sheet2, "[documentcode]", this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo.DocumentCode?.Code);
                        FillCell(sheet2, "[documentnumber]", this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo.SeriesAndNumber);
                        FillCell(sheet2, "[datedocument]", this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo.IssueDate.Day > 9 ?
                                 this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo.IssueDate.Day.ToString() : "0" + this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo.IssueDate.Day);
                        FillCell(sheet2, "[monthdocument]", this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo.IssueDate.Month > 9 ?
                                 this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo.IssueDate.Month.ToString() : "0" + this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo.IssueDate.Month);
                        FillCell(sheet2, "[yeardocument]", this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo.IssueDate.Year);
                        FillCell(sheet2, "[issuedbydocument]", this.ownerCompany.IndividualCompany.ConfirmedPersonalityDocInfo.IssuePlace);
                    }

                    FillCell(sheet2, "[locationcode]", this.ownerCompany.IndividualCompany.RussianLocationCode);
                    FillCell(sheet2, "[district]", this.ownerCompany.IndividualCompany.District);
                    FillCell(sheet2, "[city]", this.ownerCompany.IndividualCompany.City);
                    FillCell(sheet2, "[locality]", this.ownerCompany.IndividualCompany.CityType);
                    FillCell(sheet2, "[street]", this.ownerCompany.IndividualCompany.Street);
                    FillCell(sheet2, "[housenumber]", this.ownerCompany.IndividualCompany.HouseNumber);
                    FillCell(sheet2, "[hullnumber]", this.ownerCompany.IndividualCompany.BuildingNumber);
                    FillCell(sheet2, "[appartmentnumber]", this.ownerCompany.IndividualCompany.AppartamentNumber);


                    FillCell(sheet2, "[addresscountrycode]", this.ownerCompany.IndividualCompany.ForeignCountryCode);
                    FillLongCell(sheet2, "[address]", this.ownerCompany.IndividualCompany.ForeignAddress, 40);

                    ClearCells(sheet2);
                    break;

                default:
                    break;
                }


                var ACount = 1;
                var BCount = 1;
                var VCount = 1;

                kiks = await shareService.GetAllKIKsByProjectCompanyId(this.ownerCompany.Id);


                foreach (var kik in kiks)
                {
                    var company = await projectCompanyService.GetById(kik.Id);

                    var sheetVCopy = workbook.Worksheets.Add("В-" + VCount, sheetV);
                    FillCell(sheetVCopy, "[pagenumber]", pageNumber.ToString("D3"));
                    pageNumber++;

                    FillCellValue(sheetVCopy, "Q7:CP7", signature.LastName);
                    FillCellValue(sheetVCopy, "CV7:CZ7", signature.FirstName[0]);
                    FillCellValue(sheetVCopy, "DF7:DJ7", signature.MiddleName[0]);

                    FillCell(sheetVCopy, "[profitcode]", 1);

                    switch (this.ownerCompany.State)
                    {
                    case State.Domestic:

                        FillCell(sheetVCopy, "[inn]", this.ownerCompany.DomesticCompany.INN);
                        FillCell(sheetVCopy, "[kpp]", this.ownerCompany.DomesticCompany.KPP);
                        break;

                    case State.Individual:

                        FillCell(sheetVCopy, "[inn]", this.ownerCompany.IndividualCompany.INN);
                        break;
                    }

                    ProjectCompanyShare share = null;
                    var shares = await shareService.GetAllByProjectCompanyId(this.ownerCompany.Id);

                    shares = shares.Where(x => x.DependentProjectCompanyId == company.Id).ToList();
                    if (shares.Count > 0)
                    {
                        share = shares.Where(x => x.DependentProjectCompanyId == company.Id).First();
                    }


                    switch (company.State)
                    {
                    case State.Foreign:

                        var sheetACopy = workbook.Worksheets.Add("А-" + ACount, sheetA);
                        FillCell(sheetACopy, "[pagenumber]", pageNumber.ToString("D3"));
                        pageNumber++;

                        var sheetA1Copy = workbook.Worksheets.Add("А1-" + ACount, sheetA1);
                        FillCell(sheetA1Copy, "[pagenumber]", pageNumber.ToString("D3"));
                        pageNumber++;

                        switch (this.ownerCompany.State)
                        {
                        case State.Domestic:

                            FillCell(sheetACopy, "[inn]", this.ownerCompany.DomesticCompany.INN);
                            FillCell(sheetACopy, "[kpp]", this.ownerCompany.DomesticCompany.KPP);

                            FillCell(sheetA1Copy, "[inn]", this.ownerCompany.DomesticCompany.INN);
                            FillCell(sheetA1Copy, "[kpp]", this.ownerCompany.DomesticCompany.KPP);

                            FillCell(sheetA1Copy, "[103]", "2");
                            FillCell(sheetA1Copy, "[104]", "2");
                            FillCell(sheetA1Copy, "[105]", "2");


                            break;

                        case State.Individual:

                            FillCell(sheetACopy, "[inn]", this.ownerCompany.IndividualCompany.INN);
                            FillCell(sheetA1Copy, "[inn]", this.ownerCompany.IndividualCompany.INN);

                            if (share != null)
                            {
                                var factShare = factShares.Where(x => x.OwnerProjectCompanyId == this.ownerCompany.Id && x.DependentProjectCompanyId == company.Id).FirstOrDefault();

                                if (factShare != null && factShare.ShareDirectPart == 0)
                                {
                                    FillCell(sheetA1Copy, "[103]", "0");
                                    FillCell(sheetA1Copy, "[104]", "0");
                                    FillCell(sheetA1Copy, "[105]", "0");
                                }
                                else
                                {
                                    if (share.IsOwnInterest == true)
                                    {
                                        FillCell(sheetA1Copy, "[103]", "1");
                                    }
                                    else if (!share.IsOwnInterest == false)
                                    {
                                        FillCell(sheetA1Copy, "[103]", "0");
                                    }
                                    else
                                    {
                                        FillCell(sheetA1Copy, "[103]", "0");
                                    }


                                    if (share.IsPartnerInterest == true)
                                    {
                                        FillCell(sheetA1Copy, "[104]", "1");
                                    }
                                    else if (!share.IsPartnerInterest == false)
                                    {
                                        FillCell(sheetA1Copy, "[104]", "0");
                                    }
                                    else
                                    {
                                        FillCell(sheetA1Copy, "[104]", "0");
                                    }


                                    if (share.IsChildInterest == true)
                                    {
                                        FillCell(sheetA1Copy, "[105]", "1");
                                    }
                                    else if (!share.IsChildInterest == false)
                                    {
                                        FillCell(sheetA1Copy, "[105]", "0");
                                    }
                                    else
                                    {
                                        FillCell(sheetA1Copy, "[105]", "0");
                                    }
                                }
                                FillLongCell(sheetA1Copy, "[foundation]", share.ControlGrounds, 40);
                            }


                            break;
                        }



                        FillCell(sheetACopy, "[companynumber]", ACount.ToString("D5"));

                        FillCellValue(sheetACopy, "P7:CO7", signature.LastName);
                        FillCellValue(sheetACopy, "CU7:CY7", signature.FirstName[0]);
                        FillCellValue(sheetACopy, "DE7:DI7", signature.MiddleName[0]);

                        FillLongCell(sheetACopy, "[companynamerus]", company.ForeignCompany.FullName, 40);
                        FillLongCell(sheetACopy, "[companynameeng]", company.ForeignCompany.Name, 40);
                        FillCell(sheetACopy, "[countrycode]", company.ForeignCompany.CountryCode?.Code);
                        FillLongCell(sheetACopy, "[regnumber]", company.ForeignCompany.RegistrationNumber, 40);

                        FillLongCell(sheetACopy, "[taxpayercode]", company.ForeignCompany.TaxPayerCode?.Code, 40);

                        FillLongCell(sheetACopy, "[address]", company.ForeignCompany.Address, 40);

                        FillCell(sheetVCopy, "[companytype]", "О");
                        FillCell(sheetVCopy, "[companynumber]", VCount.ToString("D5"));
                        var taxExemption = projectCompanyService.TaxExemptionFor(this.ownerCompany.Id, company.Id, year);


                        FillCell(sheetVCopy, "[1001]", CheckTaxExemptionStatus(taxExemption, RationalyType.NonProfitOrganization));
                        FillCell(sheetVCopy, "[1002]", CheckTaxExemptionStatus(taxExemption, RationalyType.EurAsECMember));
                        FillCell(sheetVCopy, "[1003]", CheckTaxExemptionStatus(taxExemption, RationalyType.ByESPN));

                        if (CheckTaxExemptionStatus(taxExemption, RationalyType.ActiveHoldingCompany) == "1" || CheckTaxExemptionStatus(taxExemption, RationalyType.ActiveSubholdingCompany) == "1")
                        {
                            FillCell(sheetVCopy, "[1004]", "1");
                        }
                        else
                        {
                            FillCell(sheetVCopy, "[1004]", "0");
                        }

                        if (CheckTaxExemptionStatus(taxExemption, RationalyType.BankWithLexPersonalis) == "1" || CheckTaxExemptionStatus(taxExemption, RationalyType.InsuranceAgencyWithLexPersonalis) == "1")
                        {
                            FillCell(sheetVCopy, "[1005]", "1");
                        }
                        else
                        {
                            FillCell(sheetVCopy, "[1005]", "0");
                        }

                        FillCell(sheetVCopy, "[1006]", CheckTaxExemptionStatus(taxExemption, RationalyType.TradedBondsIssuer));
                        FillCell(sheetVCopy, "[1007]", CheckTaxExemptionStatus(taxExemption, RationalyType.ProjectMemberMining));
                        FillCell(sheetVCopy, "[1008]", CheckTaxExemptionStatus(taxExemption, RationalyType.OffshoreFieldOperator));


                        FillCellValue(sheetA1Copy, "Q7:CP7", signature.LastName);
                        FillCellValue(sheetA1Copy, "CV7:CZ7", signature.FirstName[0]);
                        FillCellValue(sheetA1Copy, "DF7:DJ7", signature.MiddleName[0]);
                        FillCell(sheetA1Copy, "[companynumber]", ACount.ToString("D5"));

                        if (share != null)
                        {
                            var isIndependentRecognition = share.IsIndependentRecognition == true ? "1" : "0";
                            FillCell(sheetA1Copy, "[isindependentrecognition]", isIndependentRecognition);
                        }



                        ACount++;
                        ClearCells(sheetACopy);
                        ClearCells(sheetA1Copy);

                        break;

                    case State.ForeignLight:

                        var sheetBCopy = workbook.Worksheets.Add("Б-" + BCount, sheetB);

                        switch (this.ownerCompany.State)
                        {
                        case State.Domestic:

                            FillCell(sheetBCopy, "[inn]", this.ownerCompany.DomesticCompany.INN);
                            FillCell(sheetBCopy, "[kpp]", this.ownerCompany.DomesticCompany.KPP);
                            break;

                        case State.Individual:

                            FillCell(sheetBCopy, "[inn]", this.ownerCompany.IndividualCompany.INN);
                            break;
                        }

                        FillCell(sheetBCopy, "[pagenumber]", pageNumber.ToString("D3"));
                        pageNumber++;

                        FillCell(sheetBCopy, "[companynumber]", BCount.ToString("D5"));

                        FillCellValue(sheetBCopy, "P7:CO7", signature.LastName);
                        FillCellValue(sheetBCopy, "CU7:CY7", signature.FirstName[0]);
                        FillCellValue(sheetBCopy, "DE7:DI7", signature.MiddleName[0]);


                        FillLongCell(sheetBCopy, "[companynamerus]", company.ForeignLightCompany.RussianName, 40);
                        FillLongCell(sheetBCopy, "[companynameeng]", company.ForeignLightCompany.EnglishName, 40);

                        FillLongCell(sheetBCopy, "[docnamerus]", company.ForeignLightCompany.RequisitesRus, 40);
                        FillLongCell(sheetBCopy, "[docnameeng]", company.ForeignLightCompany.RequisitesEng, 40);

                        FillCell(sheetBCopy, "[datereg]", company.ForeignLightCompany.FoundDate.Day > 9 ? company.ForeignLightCompany.FoundDate.Day.ToString() :
                                 "0" + company.ForeignLightCompany.FoundDate.Day);
                        FillCell(sheetBCopy, "[monthreg]", company.ForeignLightCompany.FoundDate.Month > 9 ? company.ForeignLightCompany.FoundDate.Month.ToString() :
                                 "0" + company.ForeignLightCompany.FoundDate.Month);
                        FillCell(sheetBCopy, "[yearreg]", company.ForeignLightCompany.FoundDate.Year);
                        FillCell(sheetBCopy, "[countrycode]", company.ForeignLightCompany.CountryCode?.Code);
                        FillCell(sheetBCopy, "[regnumber]", company.ForeignLightCompany.RegNumber);

                        FillCell(sheetBCopy, "[orgform]", company.ForeignLightCompany.ForeignOrganizationalFormCodeId);
                        FillLongCell(sheetBCopy, "[otherinformation]", company.ForeignLightCompany.OtherInfo, 40);

                        FillCell(sheetVCopy, "[companytype]", "C");
                        FillCell(sheetVCopy, "[companynumber]", VCount.ToString("D5"));

                        ClearCells(sheetBCopy);

                        BCount++;

                        break;

                    default:
                        break;
                    }
                    VCount++;

                    ClearCells(sheetVCopy);
                }


                var GCount     = 1;
                var G1Count    = 1;
                var G2Count    = 1;
                var chainCount = 1;

                //var reportCompanies = GetReportCompanies().ToList();
                var chains = reportCompanyService.GetChains();
                foreach (var chain in chains)
                {
                    var sheetGCopy = workbook.Worksheets.Add("Г-" + GCount, sheetG);
                    FillCell(sheetGCopy, "[pagenumber]", pageNumber.ToString("D3"));
                    pageNumber++;

                    FillCellValue(sheetGCopy, "P7:CO7", signature.LastName);
                    FillCellValue(sheetGCopy, "CU7:CY7", signature.FirstName[0]);
                    FillCellValue(sheetGCopy, "DE7:DI7", signature.MiddleName[0]);

                    switch (this.ownerCompany.State)
                    {
                    case State.Domestic:

                        FillCell(sheetGCopy, "[inn]", this.ownerCompany.DomesticCompany.INN);
                        FillCell(sheetGCopy, "[kpp]", this.ownerCompany.DomesticCompany.KPP);
                        break;

                    case State.Individual:

                        FillCell(sheetGCopy, "[inn]", this.ownerCompany.IndividualCompany.INN);
                        break;
                    }

                    switch (chain.TargetCompany.ProjectCompany.State)
                    {
                    case State.Foreign:
                        FillCell(sheetGCopy, "[companytype]", "O");
                        FillLongCell(sheetGCopy, "[companynamerus]", chain.TargetCompany.ProjectCompany?.ForeignCompany?.FullName, 40);

                        break;

                    case State.ForeignLight:
                        FillCell(sheetGCopy, "[companytype]", "C");
                        FillLongCell(sheetGCopy, "[companynamerus]", chain.TargetCompany.ProjectCompany.ForeignLightCompany.RussianName, 40);

                        break;

                    default:
                        break;
                    }


                    FillCell(sheetGCopy, "[numberinsequence]", chainCount.ToString("D5"));
                    chainCount++;

                    FillCell(sheetGCopy, "[companynumber]", GCount.ToString("D5"));
                    GCount++;


                    var    count = 1;
                    double sum   = 0;
                    foreach (var participant in chain.Participants)
                    {
                        var currentCompany = participant.Company.ProjectCompany;

                        sum += participant.IndirectSharePart;

                        var directSharePart = participant.DirectSharePart.ToString().Split(',', '.');
                        var directMain      = participant.DirectSharePart > 100 ? "100" : Convert.ToInt32(directSharePart[0]).ToString("D3");
                        var directFraction  = directSharePart.Length > 1 ? Convert.ToDouble(directSharePart[1]).ToInt().ToString("D15") : 0.ToString("D15");


                        var indirectSharePart = participant.IndirectSharePart.ToString().Split(',', '.');
                        var indirectMain      = participant.IndirectSharePart > 100 ? "100" : Convert.ToInt32(indirectSharePart[0]).ToString("D3");
                        var indirectFraction  = indirectSharePart.Length > 1 ? Convert.ToDouble(indirectSharePart[1]).ToInt().ToString("D15") : 0.ToString("D15");



                        FillCell(sheetGCopy, $"[directshareofparticipantmain-{count}]", directMain);
                        FillCell(sheetGCopy, $"[directshareofparticipantfraction-{count}]", directFraction);

                        FillCell(sheetGCopy, $"[indirectshareofparticipantmain-{count}]", indirectMain);
                        FillCell(sheetGCopy, $"[indirectshareofparticipantfraction-{count}]", indirectFraction);



                        switch (currentCompany.State)
                        {
                        case State.ForeignLight:

                            FillCell(sheetGCopy, $"[membernumbertype-{count}]", "ИC");
                            FillCell(sheetGCopy, $"[membernumber-{count}]", G1Count.ToString("D5"));
                            G1Count++;
                            count++;
                            break;

                        case State.Foreign:

                            var sheetG2Copy = workbook.Worksheets.Add("Г2-" + G2Count, sheetG2);
                            FillCell(sheetG2Copy, "[pagenumber]", pageNumber.ToString("D3"));
                            pageNumber++;


                            FillCell(sheetG2Copy, "[companynumber]", G2Count.ToString("D5"));
                            FillCell(sheetGCopy, $"[membernumbertype-{count}]", "ИO");
                            FillCell(sheetGCopy, $"[membernumber-{count}]", G2Count.ToString("D5"));
                            count++;
                            G2Count++;

                            FillCellValue(sheetG2Copy, "P7:CO7", signature.LastName);
                            FillCellValue(sheetG2Copy, "CU7:CY7", signature.FirstName[0]);
                            FillCellValue(sheetG2Copy, "DE7:DI7", signature.MiddleName[0]);

                            FillLongCell(sheetG2Copy, "[companynamerus]", currentCompany?.ForeignCompany?.FullName, 40);
                            FillLongCell(sheetG2Copy, "[companynameeng]", currentCompany?.ForeignCompany?.Name, 40);

                            FillCell(sheetG2Copy, "[countrycode]", currentCompany?.ForeignCompany?.CountryCode?.Code);
                            FillLongCell(sheetG2Copy, "[regnumber]", currentCompany?.ForeignCompany?.RegistrationNumber, 40);

                            FillLongCell(sheetG2Copy, "[taxpayercode]", currentCompany?.ForeignCompany?.TaxPayerCode?.Code, 40);
                            FillLongCell(sheetG2Copy, "[address]", currentCompany?.ForeignCompany?.Address, 40);

                            switch (this.ownerCompany.State)
                            {
                            case State.Domestic:

                                FillCell(sheetG2Copy, "[inn]", this.ownerCompany.DomesticCompany.INN);
                                FillCell(sheetG2Copy, "[kpp]", this.ownerCompany.DomesticCompany.KPP);
                                break;

                            case State.Individual:

                                FillCell(sheetG2Copy, "[inn]", this.ownerCompany.IndividualCompany.INN);
                                break;
                            }

                            ClearCells(sheetG2Copy);

                            break;

                        case State.Domestic:

                            FillCell(sheetGCopy, $"[membernumbertype-{count}]", "РО");
                            FillCell(sheetGCopy, $"[membernumber-{count}]", G1Count.ToString("D5"));
                            G1Count++;
                            count++;

                            var sheetG1Copy = workbook.Worksheets.Add("Г1-" + G1Count, sheetG1);
                            FillCell(sheetG1Copy, "[pagenumber]", pageNumber.ToString("D3"));
                            pageNumber++;
                            FillCell(sheetG1Copy, "[companynumber]", G1Count.ToString("D5"));


                            G1Count++;

                            FillCellValue(sheetG1Copy, "P7:CO7", signature.LastName);
                            FillCellValue(sheetG1Copy, "CU7:CY7", signature.FirstName[0]);
                            FillCellValue(sheetG1Copy, "DE7:DI7", signature.MiddleName[0]);


                            FillCell(sheetG1Copy, "[ogrn]", currentCompany.DomesticCompany.OGRN);
                            FillCell(sheetG1Copy, "[companyinn]", currentCompany.DomesticCompany.INN);
                            FillCell(sheetG1Copy, "[companykpp]", currentCompany.DomesticCompany.KPP);
                            FillLongCell(sheetG1Copy, "[companyname]", currentCompany.DomesticCompany.FullName, 40);



                            switch (this.ownerCompany.State)
                            {
                            case State.Domestic:

                                FillCell(sheetG1Copy, "[inn]", this.ownerCompany.DomesticCompany.INN);
                                FillCell(sheetG1Copy, "[kpp]", this.ownerCompany.DomesticCompany.KPP);
                                break;

                            case State.Individual:

                                FillCell(sheetG1Copy, "[inn]", this.ownerCompany.IndividualCompany.INN);
                                break;
                            }

                            ClearCells(sheetG1Copy);


                            break;

                        default:
                            break;
                        }
                    }

                    var fsum = sum.ToString().Split(',', '.');


                    var fSumfraction = fsum.Length > 1 ? Convert.ToDouble(fsum[1]).ToInt().ToString("D15") : 0.ToString("D15");
                    var sumIndirectshareinsequence = sum > 100 ? "100" : Convert.ToInt32(fsum[0]).ToString("D3");

                    FillCell(sheetGCopy, "[indirectshareinsequence-main]", sumIndirectshareinsequence);
                    FillCell(sheetGCopy, "[indirectshareinsequence-fraction]", fSumfraction);

                    var fact = factShares.Where(f => f.DependentProjectCompanyId == chain.TargetCompany.ProjectCompany.Id).First();


                    fsum = fact.ShareFactPart.ToString().Split(',', '.');


                    fSumfraction = fsum.Length > 1 ? Convert.ToDouble(fsum[1]).ToInt().ToString("D15") : 0.ToString("D15");
                    sumIndirectshareinsequence = sum > 100 ? "100" : Convert.ToInt32(fsum[0]).ToString("D3");

                    FillCell(sheetGCopy, "[indirectshare-main]", sumIndirectshareinsequence);
                    FillCell(sheetGCopy, "[indirectshare-fraction]", fSumfraction);

                    ClearCells(sheetGCopy);
                }

                /*
                 *
                 * var gCompany = await projectCompanyService.GetById(factShares.Last().DependentProjectCompanyId);
                 *
                 * var sheetGCopy = workbook.Worksheets.Add("Г-" + GCount, sheetG);
                 * FillCell(sheetGCopy, "[pagenumber]", pageNumber.ToString("D3"));
                 * pageNumber++;
                 *
                 * FillCellValue(sheetGCopy, "P7:CO7", signature.LastName);
                 * FillCellValue(sheetGCopy, "CU7:CY7", signature.FirstName[0]);
                 * FillCellValue(sheetGCopy, "DE7:DI7", signature.MiddleName[0]);
                 *
                 * switch (this.ownerCompany.State)
                 * {
                 *  case State.Domestic:
                 *
                 *      FillCell(sheetGCopy, "[inn]", this.ownerCompany.DomesticCompany.INN);
                 *      FillCell(sheetGCopy, "[kpp]", this.ownerCompany.DomesticCompany.KPP);
                 *      break;
                 *
                 *  case State.Individual:
                 *
                 *      FillCell(sheetGCopy, "[inn]", this.ownerCompany.IndividualCompany.INN);
                 *      break;
                 * }
                 *
                 * switch (gCompany.State)
                 * {
                 *  case State.Foreign:
                 *      FillCell(sheetGCopy, "[companytype]", "O");
                 *      FillLongCell(sheetGCopy, "[companynamerus]", gCompany.ForeignCompany.FullName, 40);
                 *
                 *      break;
                 *  case State.ForeignLight:
                 *      FillCell(sheetGCopy, "[companytype]", "C");
                 *      FillLongCell(sheetGCopy, "[companynamerus]", gCompany.ForeignLightCompany.RussianName, 40);
                 *
                 *      break;
                 *  default:
                 *      break;
                 * }
                 *
                 *
                 * FillCell(sheetGCopy, "[numberinsequence]", 1.ToString("D5"));
                 *
                 * FillCell(sheetGCopy, "[companynumber]", GCount.ToString("D5"));
                 * GCount++;
                 *
                 */
                /*
                 * var tCompany = factShares.Where(x => x.OwnerProjectCompanyId == gCompany.Id).First();
                 *
                 * var factPart = tCompany.ShareFactPart.ToString().Split(',');
                 * FillCell(sheetGCopy, "[indirectshare-main]", factPart[0]);
                 * FillCell(sheetGCopy, "[indirectshare-fraction]", factPart[1]);
                 *
                 * var directPart = tCompany.ShareDirectPart.ToString().Split(',');
                 * FillCell(sheetGCopy, "[indirectshareinsequence-main]", directPart[0]);
                 * FillCell(sheetGCopy, "[indirectshareinsequence-fraction]", directPart[1]);
                 */
                /*
                 * var count = 1;
                 * foreach (var factShare in factShares)
                 * {
                 *
                 *
                 *  var currentCompany = await projectCompanyService.GetById(factShare.DependentProjectCompanyId);
                 *
                 *  var fPart = factShare.ShareFactPart.ToString().Split(',', '.');
                 *  var dPart = factShare.ShareDirectPart.ToString().Split(',', '.');
                 *
                 *  var fPartfraction = fPart.Length > 1 ? fPart[1] : 0.ToString("D15");
                 *  var dPartfraction = dPart.Length > 1 ? dPart[1] : 0.ToString("D15");
                 *
                 *  var indirectshareinsequence = factShare.ShareFactPart > 100 ? "100" : fPart[0];
                 *  var indirectsharemain = factShare.ShareDirectPart > 100 ? "100" : dPart[0];
                 *
                 *
                 *  FillCell(sheetGCopy, "[indirectshare-main]", indirectsharemain);
                 *  FillCell(sheetGCopy, "[indirectshare-fraction]", dPartfraction);
                 *
                 *  FillCell(sheetGCopy, "[indirectshareinsequence-main]", indirectshareinsequence);
                 *  FillCell(sheetGCopy, "[indirectshareinsequence-fraction]", fPartfraction);
                 *
                 *  if (currentCompany.State != State.Domestic)
                 *  {
                 *      FillCell(sheetGCopy, $"[directshareofparticipantmain-{count}]", indirectsharemain);
                 *      FillCell(sheetGCopy, $"[directshareofparticipantfractionfraction-{count}]", dPartfraction);
                 *
                 *      FillCell(sheetGCopy, $"[indirectshareofparticipantmain-{count}]", indirectshareinsequence);
                 *      FillCell(sheetGCopy, $"[indirectshareofparticipantfraction-{count}]", fPartfraction);
                 *  }
                 *
                 *  switch (currentCompany.State)
                 *  {
                 *      case State.ForeignLight:
                 *
                 *          FillCell(sheetGCopy, $"[membernumbertype-{count}]", "ИC");
                 *          FillCell(sheetGCopy, $"[membernumber-{count}]", G1Count.ToString("D5"));
                 *          count++;
                 *          break;
                 *
                 *      case State.Foreign:
                 *
                 *          var sheetG2Copy = workbook.Worksheets.Add("Г2-" + G2Count, sheetG2);
                 *          FillCell(sheetG2Copy, "[pagenumber]", pageNumber.ToString("D3"));
                 *          pageNumber++;
                 *
                 *
                 *          FillCell(sheetG2Copy, "[companynumber]", G2Count.ToString("D5"));
                 *          FillCell(sheetGCopy, $"[membernumbertype-{count}]", "ИO");
                 *          FillCell(sheetGCopy, $"[membernumber-{count}]", G2Count.ToString("D5"));
                 *          count++;
                 *          G2Count++;
                 *
                 *          FillCellValue(sheetG2Copy, "P7:CO7", signature.LastName);
                 *          FillCellValue(sheetG2Copy, "CU7:CY7", signature.FirstName[0]);
                 *          FillCellValue(sheetG2Copy, "DE7:DI7", signature.MiddleName[0]);
                 *
                 *          FillLongCell(sheetG2Copy, "[companynamerus]", currentCompany?.ForeignCompany?.FullName, 40);
                 *          FillLongCell(sheetG2Copy, "[companynameeng]", currentCompany?.ForeignCompany?.Name, 40);
                 *
                 *          FillCell(sheetG2Copy, "[countrycode]", currentCompany?.ForeignCompany?.CountryCode?.Code);
                 *          FillLongCell(sheetG2Copy, "[regnumber]", currentCompany?.ForeignCompany?.RegistrationNumber, 40);
                 *
                 *          FillLongCell(sheetG2Copy, "[taxpayercode]", currentCompany?.ForeignCompany?.TaxPayerCode?.Code, 40);
                 *          FillLongCell(sheetG2Copy, "[address]", currentCompany?.ForeignCompany?.Address, 40);
                 *
                 *          switch (this.ownerCompany.State)
                 *          {
                 *              case State.Domestic:
                 *
                 *                  FillCell(sheetG2Copy, "[inn]", this.ownerCompany.DomesticCompany.INN);
                 *                  FillCell(sheetG2Copy, "[kpp]", this.ownerCompany.DomesticCompany.KPP);
                 *                  break;
                 *
                 *              case State.Individual:
                 *
                 *                  FillCell(sheetG2Copy, "[inn]", this.ownerCompany.IndividualCompany.INN);
                 *                  break;
                 *          }
                 *
                 *          ClearCells(sheetG2Copy);
                 *
                 *          break;
                 *      case State.Domestic:
                 *
                 *          var sheetG1Copy = workbook.Worksheets.Add("Г1-" + G1Count, sheetG1);
                 *          FillCell(sheetG1Copy, "[pagenumber]", pageNumber.ToString("D3"));
                 *          pageNumber++;
                 *          FillCell(sheetG1Copy, "[companynumber]", G1Count.ToString("D5"));
                 *
                 *
                 *          G1Count++;
                 *
                 *          FillCellValue(sheetG1Copy, "P7:CO7", signature.LastName);
                 *          FillCellValue(sheetG1Copy, "CU7:CY7", signature.FirstName[0]);
                 *          FillCellValue(sheetG1Copy, "DE7:DI7", signature.MiddleName[0]);
                 *
                 *
                 *          FillCell(sheetG1Copy, "[ogrn]", currentCompany.DomesticCompany.OGRN);
                 *          FillCell(sheetG1Copy, "[companyinn]", currentCompany.DomesticCompany.INN);
                 *          FillCell(sheetG1Copy, "[companykpp]", currentCompany.DomesticCompany.KPP);
                 *          FillLongCell(sheetG1Copy, "[companyname]", currentCompany.DomesticCompany.FullName, 40);
                 *
                 *
                 *
                 *          switch (this.ownerCompany.State)
                 *          {
                 *              case State.Domestic:
                 *
                 *                  FillCell(sheetG1Copy, "[inn]", this.ownerCompany.DomesticCompany.INN);
                 *                  FillCell(sheetG1Copy, "[kpp]", this.ownerCompany.DomesticCompany.KPP);
                 *                  break;
                 *
                 *              case State.Individual:
                 *
                 *                  FillCell(sheetG1Copy, "[inn]", this.ownerCompany.IndividualCompany.INN);
                 *                  break;
                 *          }
                 *
                 *          ClearCells(sheetG1Copy);
                 *
                 *
                 *          break;
                 *      default:
                 *          break;
                 *  }
                 *
                 *
                 *
                 * }
                 */
                workbook.Worksheets.Delete(sheetA);
                workbook.Worksheets.Delete(sheetA1);
                workbook.Worksheets.Delete(sheetB);
                workbook.Worksheets.Delete(sheetV);
                workbook.Worksheets.Delete(sheetG);
                workbook.Worksheets.Delete(sheetG1);
                workbook.Worksheets.Delete(sheetG2);

                FillCell(sheet1, "[pagecount]", (pageNumber - 1).ToString("D3"));
                ClearCells(sheet1);



                result = package.GetAsByteArray();
            }

            return(result);
        }
        public void TestNPC()
        {
            ExcelDocsCreator ec  = new ExcelDocsCreator();
            ProjectCompany   pc0 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ", State = State.Domestic
            };

            DocumentInformation di1 = new DocumentInformation()
            {
                IssueDate = DateTime.Parse("05.05.1991"), IssuePlace = "г.Москва", SeriesAndNumber = "123 989 89 89 "
            };
            DocumentInformation di2 = new DocumentInformation()
            {
                IssueDate = DateTime.Parse("05.05.1992"), IssuePlace = "г.Москва", SeriesAndNumber = "456 989 89 89 "
            };
            DocumentInformation di3 = new DocumentInformation()
            {
                IssueDate = DateTime.Parse("05.05.1993"), IssuePlace = "г.Москва", SeriesAndNumber = "789 989 89 89 "
            };
            DocumentInformation di4 = new DocumentInformation()
            {
                IssueDate = DateTime.Parse("05.05.1994"), IssuePlace = "г.Москва", SeriesAndNumber = "0987 989 89 89 "
            };
            IndividualCompany ic1 = new IndividualCompany()
            {
                AppartamentNumber = "100", BirthDate = DateTime.Parse("05.05.1990"), BirthPlace = "город москва", BuildingNumber = "строение 1", CitizenshipCodeId = 1, City = "Москва", CityType = "город", ConfirmedPersonalityDocInfo = di1, INN = 09876543210, Name = "Василий", MiddleName = "Иванович", Surname = "Пупкин", GenderCodeId = 1, PostIndex = "495980", RegionCode = new RegionCode()
                {
                    Id = 77
                }, District = "Московская", Street = "Ленина", HouseNumber = "10", VerifedPersonalityDocInfo = di4
            };
            IndividualCompany ic2 = new IndividualCompany()
            {
                AppartamentNumber = "200", BirthDate = DateTime.Parse("05.05.1980"), BirthPlace = "город москва", BuildingNumber = "строение 2", CitizenshipCodeId = 1, City = "Питер", CityType = "город", ConfirmedPersonalityDocInfo = di2, INN = 1234567890, Name = "Иван", MiddleName = "Петрович", Surname = "Сидоров", GenderCodeId = 1, PostIndex = "495980", RegionCode = new RegionCode()
                {
                    Id = 47
                }, District = "Омская", Street = "Ленина", HouseNumber = "1000", VerifedPersonalityDocInfo = di3
            };
            IndividualCompany ic3 = new IndividualCompany()
            {
                AppartamentNumber = "300", BirthDate = DateTime.Parse("05.05.1970"), BirthPlace = "город москва", BuildingNumber = "строение 43", CitizenshipCodeId = 1, City = "Омск", CityType = "город", ConfirmedPersonalityDocInfo = di3, INN = 1334567890, Name = "Пётр", MiddleName = "Сидорович", Surname = "Иванов", GenderCodeId = 1, PostIndex = "495980", RegionCode = new RegionCode()
                {
                    Id = 05
                }, District = "Омская", Street = "Ленина", HouseNumber = "10/4", VerifedPersonalityDocInfo = di2
            };
            IndividualCompany ic4 = new IndividualCompany()
            {
                AppartamentNumber = "400", BirthDate = DateTime.Parse("05.05.1960"), BirthPlace = "город москва", BuildingNumber = "строение 143", CitizenshipCodeId = 1, City = "Ленинград", CityType = "город", ConfirmedPersonalityDocInfo = di4, INN = 1134567890, Name = "Алексей", MiddleName = "Иванович", Surname = "Петров", GenderCodeId = 1, PostIndex = "495980", RegionCode = new RegionCode()
                {
                    Id = 98
                }, District = "Ленинградская", Street = "Ленина", HouseNumber = "108", VerifedPersonalityDocInfo = di1
            };

            ProjectCompany pc1 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ40", State = State.Individual, IndividualCompany = ic1
            };
            ProjectCompany pc2 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ41", State = State.Individual, IndividualCompany = ic2
            };
            ProjectCompany pc3 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ42", State = State.Individual, IndividualCompany = ic3
            };
            ProjectCompany pc4 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ43", State = State.Individual, IndividualCompany = ic4
            };

            ForeignCompany fc1 = new ForeignCompany()
            {
                FullName = "ООО Иностранная компания 1", Name = "ИК1", Address = "г. Москва 1ый Волоколамский проезд дом 3", CountryCodeId = 1, TaxPayerCodeId = 1, RegistrationNumber = "123"
            };
            ForeignCompany fc2 = new ForeignCompany()
            {
                FullName = "ООО Иностранная компания 2", Name = "ИК2", Address = "г. Москва 2ый Волоколамский проезд дом 4", CountryCodeId = 1, TaxPayerCodeId = 1, RegistrationNumber = "21222223"
            };
            ForeignCompany fc3 = new ForeignCompany()
            {
                FullName = "ООО Иностранная компания 3", Name = "ИК3", Address = "г. Москва 3ий Волоколамский проезд дом 5", CountryCodeId = 5, TaxPayerCodeId = 1, RegistrationNumber = "31222243522223"
            };
            ForeignCompany fc4 = new ForeignCompany()
            {
                FullName = "ООО Иностранная компания 4", Name = "ИК4", Address = "г. Москва 4ый Волоколамский проезд дом 6", CountryCodeId = 5, TaxPayerCodeId = 1, RegistrationNumber = "421222243522223"
            };


            ProjectCompany pc5 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ30", State = State.Foreign, ForeignCompany = fc1
            };
            ProjectCompany pc6 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ31", State = State.Foreign, ForeignCompany = fc2
            };
            ProjectCompany pc7 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ32", State = State.Foreign, ForeignCompany = fc3
            };
            ProjectCompany pc8 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ33", State = State.Foreign, ForeignCompany = fc4
            };

            ForeignLightCompany fcl1 = new ForeignLightCompany()
            {
                EnglishName = "FOREGIN LIGHT COMPANY 1 FOREGIN LIGHT COMPANY 1 FOREGIN LIGHT COMPANY 1 FOREGIN LIGHT COMPANY 1", RussianName = "ООО Иностранная компания БОЮЛ 1", CountryCodeId = 5, FoundDate = DateTime.Parse("05.12.1997"), Number = "1423", ForeignOrganizationalFormCodeId = 4, RequisitesEng = "DESC NUM 3 DESC NUM 2 DESC NUM 1", RegNumber = "123123123", RequisitesRus = "Реквизит1, 2 ,3 ,5 10 реквизиты", OtherInfo = "Дополнительная информация 1"
            };
            ForeignLightCompany fcl2 = new ForeignLightCompany()
            {
                EnglishName = "FOREGIN LIGHT COMPANY 2", RussianName = "ООО Иностранная компания БОЮЛ 2", CountryCodeId = 5, FoundDate = DateTime.Parse("05.12.1998"), Number = "1234", ForeignOrganizationalFormCodeId = 3, RequisitesEng = "DESC NUM 3 DESC NUM 2 DESC NUM 1", RegNumber = "123123123", RequisitesRus = "Реквизит1, 2 ,3 ,5 10 реквизиты", OtherInfo = "Дополнительная информация 2"
            };
            ForeignLightCompany fcl3 = new ForeignLightCompany()
            {
                EnglishName = "FOREGIN LIGHT COMPANY 3", RussianName = "ООО Иностранная компания БОЮЛ 3", CountryCodeId = 6, FoundDate = DateTime.Parse("05.12.1999"), Number = "1235", ForeignOrganizationalFormCodeId = 2, RequisitesEng = "DESC NUM 3 DESC NUM 2 DESC NUM 1", RegNumber = "123123123", RequisitesRus = "Реквизит1, 2 ,3 ,5 10 реквизиты", OtherInfo = "Дополнительная информация 3 "
            };
            ForeignLightCompany fcl4 = new ForeignLightCompany()
            {
                EnglishName = "FOREGIN LIGHT COMPANY 4", RussianName = "ООО Иностранная компания БОЮЛ 4", CountryCodeId = 8, FoundDate = DateTime.Parse("05.12.2005"), Number = "1236", ForeignOrganizationalFormCodeId = 1, RequisitesEng = "DESC NUM 3 DESC NUM 2 DESC NUM 1", RegNumber = "123123123", RequisitesRus = "Реквизит1, 2 ,3 ,5 10 реквизиты", OtherInfo = "Дополнительная информация 4"
            };

            ProjectCompany pc9 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ20", State = State.ForeignLight, ForeignLightCompany = fcl1
            };
            ProjectCompany pc10 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ21", State = State.ForeignLight, ForeignLightCompany = fcl2
            };
            ProjectCompany pc11 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ22", State = State.ForeignLight, ForeignLightCompany = fcl3
            };
            ProjectCompany pc12 = new ProjectCompany()
            {
                Name = "ООО ЛЮКСОФТ ПРОФЕШОНАЛ23", State = State.ForeignLight, ForeignLightCompany = fcl4
            };

            ProjectCompanyShare share1 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc1.Id, DependentProjectCompany = pc1, SharePart = 50.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share2 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc2.Id, DependentProjectCompany = pc2, SharePart = 20.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share3 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc3.Id, DependentProjectCompany = pc3, SharePart = 10.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share4 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc4.Id, DependentProjectCompany = pc4, SharePart = 5.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };

            ProjectCompanyShare share5 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc5.Id, DependentProjectCompany = pc5, SharePart = 10.10, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share6 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc6.Id, DependentProjectCompany = pc6, SharePart = 10.03, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share7 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc7.Id, DependentProjectCompany = pc7, SharePart = 10.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share8 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc8.Id, DependentProjectCompany = pc8, SharePart = 10.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };

            ProjectCompanyShare share9 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc9.Id, DependentProjectCompany = pc9, SharePart = 10.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share10 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc10.Id, DependentProjectCompany = pc10, SharePart = 10.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share11 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc11.Id, DependentProjectCompany = pc11, SharePart = 10.20, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share12 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc12.Id, DependentProjectCompany = pc12, SharePart = 10.13, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };


            ProjectCompanyShare share01 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc1.Id, DependentProjectCompany = pc1, SharePart = 50.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share02 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc2.Id, DependentProjectCompany = pc2, SharePart = 20.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share03 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc3.Id, DependentProjectCompany = pc3, SharePart = 10.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };
            ProjectCompanyShare share04 = new ProjectCompanyShare()
            {
                OwnerProjectCompanyId = pc0.Id, DependentProjectCompanyId = pc4.Id, DependentProjectCompany = pc4, SharePart = 5.00, ShareType = ShareType.Direct, ShareStartDate = DateTime.Parse("05.12.2005")
            };



            //List<ProjectCompanyShare> fd = new List<ProjectCompanyShare> { share1, share2, share3, share4, share5, share6, share7, share8, share9, share10, share11, share12 };
            List <ProjectCompanyShare> fd = new List <ProjectCompanyShare> {
                share7, share11
            };



            // List<ProjectCompanyShare> fdd = new List<ProjectCompanyShare> { share01, share02, share03, share04};

            //pc1.DependentProjectCompanyShares = new List<ProjectCompanyShare>{share1,share2,share3,share4,share5, share6, share7, share8, share9, share10,share11, share12};
            //pc1.OwnerProjectCompanyShares = new List<ProjectCompanyShare> { share1, share2, share3, share4, share5, share6, share7, share8, share9, share10, share11, share12 };



            FactShareCalculation fc = new FactShareCalculation();
            var smplList            = fc.GetFactShares(GetShares()).Where(s => s.ShareFactPart > 0);

            ////Граф
            //var graphModel = new AdjacencyGraph<int, TaggedEdge<int, double>>();
            ////Вершины
            //IList<int> vecities = GetOrderedIds(smplList);
            //foreach (var v in vecities)
            //{
            //    graphModel.AddVertex(v);
            //}
            ////Ребра и Веса
            //foreach (var share in smplList)
            //{
            //    graphModel.AddEdge(new TaggedEdge<int, double>(share.DependentProjectCompanyId, share.OwnerProjectCompanyId, share.ShareFactPart));
            //}



            ////Граф
            //var shareGraph = new BidirectionalGraph<int, Edge<int>>();
            ////Вершины(Vertices) Ребра(Edge) и Веса (a Tag)
            //foreach (var share in smplList)
            //{
            //    shareGraph.AddVerticesAndEdge(new TaggedEdge<int, double>(share.OwnerProjectCompanyId, share.DependentProjectCompanyId, share.ShareFactPart));
            //};
            ////откуда
            //int Source = 1;
            ////Куда
            //int Target = 2;
            ////Ограничение на кол-во путей
            //int pathCount = 10;
            //// e- edgesWeights
            //foreach (IEnumerable<Edge<int>> paths in shareGraph.RankedShortestPathHoffmanPavley(e => 0, Source, Target, pathCount))
            //{
            //    Console.WriteLine("Path Exmple:");
            //    foreach (TaggedEdge<int, double> path in paths)
            //    {
            //        Console.WriteLine(path.Source + " >  " + path.Target + "Costs: " + path.Tag);
            //    }
            //}

            //var graphModel1 = new AdjacencyGraph<int, TaggedEdge<int, double>>();
            //foreach (var share in smplList)
            //{
            //    graphModel1.AddVerticesAndEdge(new TaggedEdge<int, double>(share.DependentProjectCompanyId, share.OwnerProjectCompanyId, share.ShareFactPart));
            //}

            //var edges = new SEdge<int>[] { new SEdge<int>(1, 2), new SEdge<int>(0, 1) };
            //var graph = edges.ToAdjacencyGraph<int, SEdge<int>>(true);

            //var factShareLsit = fc.GetFactShares(fd);


            //string path = @"C:\Users\FyodorSt\Source\Repos\WebKIK\KPMG.WebKik.DocumentProcessing\Templates\UU.xlsx";

            //var nn = ec.GetFilledNotificationOfParticipation(path, pc0, fd, factShareLsit.ToList());
            //nn.SaveAs("NN"+ pc0.Name+".xlsx");
        }
 public bool IsControlCompany(ProjectCompanyShare share, IList <ProjectCompany> companies, IList <ProjectCompanyFactShare> factShares)
 {
     return(CompanyHasControlValues(share) || CompanyHasLargeFactShare(share) || CompanyHasMoreThenDomesticFactShare(share, companies, factShares));
 }
 public bool CompanyHasLargeFactShare(ProjectCompanyShare share)
 {
     return(share.SharePart > 25.0);
 }
 public bool CompanyHasControlValues(ProjectCompanyShare share)
 {
     return(true.Equals(share.IsControlledBy));//.HasValue && share.IsControlledBy.Value;
 }