Cats.Areas.EarlyWarning.Controllers.RequestController.GetRequestWithPlan C# (CSharp) Method

GetRequestWithPlan() private method

private GetRequestWithPlan ( RegionalRequest regionalRequest ) : List
regionalRequest RegionalRequest
return List
        private List<PLANWithRegionalRequestViewModel> GetRequestWithPlan(RegionalRequest regionalRequest)
        {
            var result = new List<PLANWithRegionalRequestViewModel>();

            if (regionalRequest.PlanID == 0)
            {
                return null;
            }
            if (regionalRequest.ProgramId == 1)
            {

                var details = regionalRequest.RegionalRequestDetails;
                var hrd = _hrdService.FindBy(m => m.PlanID == regionalRequest.PlanID).FirstOrDefault();

                var woredaG = (from detail in details
                               group detail by detail.Fdp.AdminUnit
                                   into woredaDetail
                                   select woredaDetail);

                result.AddRange(from sw in woredaG
                                from hrdDetails in hrd.HRDDetails
                                let oneWoreda = sw.ToList()
                                let regionalRequestDetail = oneWoreda.FirstOrDefault()
                                where regionalRequestDetail != null && hrdDetails.AdminUnit.AdminUnitID == sw.Key.AdminUnitID
                                select new PLANWithRegionalRequestViewModel()
                                    {
                                        zone = regionalRequestDetail.Fdp.AdminUnit.AdminUnit2.Name,
                                        Woreda = sw.Key.Name,
                                        RequestedBeneficiaryNo = sw.Sum(m => m.Beneficiaries),
                                        PlannedBeneficaryNo = hrd != null ? hrd.HRDDetails.First(m => m.AdminUnit.AdminUnitID == sw.Key.AdminUnitID).NumberOfBeneficiaries : 0,
                                        Difference = ((hrd != null ? hrd.HRDDetails.First(m => m.AdminUnit.AdminUnitID == sw.Key.AdminUnitID).NumberOfBeneficiaries : 0) - (sw.Sum(m => m.Beneficiaries))),
                                        RegionalRequestDetails = oneWoreda
                                    });
            }

            if (regionalRequest.ProgramId == 2)
            {
                var details = regionalRequest.RegionalRequestDetails;
                var psnp = _RegionalPSNPPlanService.FindBy(m => m.PlanId == regionalRequest.PlanID).FirstOrDefault();

                var woredaG = (from detail in details
                               group detail by detail.Fdp.AdminUnit
                                   into woredaDetail
                                   select woredaDetail);

                result.AddRange(from sw in woredaG
                                from pnspDetail in psnp.RegionalPSNPPlanDetails
                                let oneWoreda = sw.ToList()
                                let regionalRequestDetail = oneWoreda.FirstOrDefault()
                                where regionalRequestDetail != null && pnspDetail.PlanedWoreda.AdminUnitID == sw.Key.AdminUnitID
                                select new PLANWithRegionalRequestViewModel()
                                {
                                    zone = regionalRequestDetail.Fdp.AdminUnit.AdminUnit2.Name,
                                    Woreda = sw.Key.Name,
                                    RequestedBeneficiaryNo = sw.Sum(m => m.Beneficiaries),
                                    PlannedBeneficaryNo = psnp != null ? psnp.RegionalPSNPPlanDetails.First(d => d.PlanedWoredaID == sw.Key.AdminUnitID).BeneficiaryCount : 0,
                                    Difference = ((psnp != null ? psnp.RegionalPSNPPlanDetails.First(d => d.PlanedWoredaID == sw.Key.AdminUnitID).BeneficiaryCount : 0) - (sw.Sum(m => m.Beneficiaries))),
                                    RegionalRequestDetails = oneWoreda
                                });
            }

            else if (regionalRequest.ProgramId == 3)
            {
                var details = regionalRequest.RegionalRequestDetails;

                var woredaG = (from detail in details
                               group detail by detail.Fdp.AdminUnit
                                   into woredaDetail
                                   select woredaDetail);

                result.AddRange(from sw in woredaG
                                let oneWoreda = sw.ToList()
                                let regionalRequestDetail = oneWoreda.FirstOrDefault()
                                where regionalRequestDetail != null
                                select new PLANWithRegionalRequestViewModel()
                                {
                                    zone = regionalRequestDetail.Fdp.AdminUnit.AdminUnit2.Name,
                                    Woreda = sw.Key.Name,
                                    RequestedBeneficiaryNo = sw.Sum(m => m.Beneficiaries),
                                    //PlannedBeneficaryNo = 0,
                                    //Difference = 0 - sw.Sum(m => m.Beneficiaries),
                                    RegionalRequestDetails = oneWoreda
                                });
            }
            return result;
        }