public async Task HandleAsync_UserIsNotAuthorized_ThrowsSecurityException_AndDoesNotUseDataAccess()
        {
            A.CallTo(() => authorization.EnsureCanAccessInternalArea()).Throws <SecurityException>();

            await Assert.ThrowsAsync <SecurityException>(() => Handler().HandleAsync(A.Dummy <GetAatfAeActiveComplianceYears>()));

            A.CallTo(() => dataAccess.Get()).MustNotHaveHappened();
        }
 public AuthorizationBuilder AllowInternalAreaAccess()
 {
     A.CallTo(() => fake.EnsureCanAccessInternalArea()).DoesNothing();
     A.CallTo(() => fake.EnsureCanAccessInternalArea(A <bool> ._)).DoesNothing();
     A.CallTo(() => fake.CheckCanAccessInternalArea()).Returns(true);
     A.CallTo(() => fake.CheckCanAccessInternalArea(A <bool> ._)).Returns(true);
     return(this);
 }
        public async Task <SchemeData> HandleAsync(GetSchemeById request)
        {
            authorization.EnsureCanAccessInternalArea();

            var scheme = await dataAccess.GetSchemeOrDefault(request.SchemeId);

            if (scheme == null)
            {
                string message = string.Format("No scheme was found with id \"{0}\".", request.SchemeId);
                throw new ArgumentException(message);
            }

            var schemeData = mapper.Map <Scheme, SchemeData>(scheme);

            var complianceYearsWithSubmittedMemberUploads =
                await dataAccess.GetComplianceYearsWithSubmittedMemberUploads(request.SchemeId);

            var complianceYearsWithSubmittedDataReturns =
                await dataAccess.GetComplianceYearsWithSubmittedDataReturns(request.SchemeId);

            var schemeDownloadsByYears = mapper.Map <Core.Scheme.SchemeDataAvailability>(
                Domain.Scheme.SchemeDataAvailability.Create(
                    complianceYearsWithSubmittedMemberUploads,
                    complianceYearsWithSubmittedDataReturns));

            schemeData.SchemeDataAvailability = schemeDownloadsByYears;
            schemeData.CanEdit = authorization.CheckUserInRole(Roles.InternalAdmin);
            return(schemeData);
        }
Exemple #4
0
        public async Task <ManagePendingCharges> HandleAsync(Requests.Charges.FetchPendingCharges message)
        {
            authorization.EnsureCanAccessInternalArea(true);

            UKCompetentAuthority authority = await dataAccess.FetchCompetentAuthority(message.Authority);

            IReadOnlyList <MemberUpload> memberUploads = await dataAccess.FetchSubmittedNonInvoicedMemberUploadsAsync(authority);

            var groups = memberUploads.GroupBy(mu => new { mu.Scheme, mu.ComplianceYear });

            List <PendingCharge> pendingCharges = new List <PendingCharge>();

            foreach (var group in groups)
            {
                PendingCharge pendingCharge = new PendingCharge()
                {
                    SchemeName           = group.Key.Scheme.SchemeName,
                    SchemeApprovalNumber = group.Key.Scheme.ApprovalNumber,
                    ComplianceYear       = group.Key.ComplianceYear.Value,
                    TotalGBP             = group.Sum(p => p.TotalCharges),
                    SubmittedDate        = group.FirstOrDefault().SubmittedDate.Value
                };

                pendingCharges.Add(pendingCharge);
            }

            var managePendingCharges = new ManagePendingCharges
            {
                PendingCharges      = pendingCharges,
                CanUserIssueCharges = authorization.CheckUserInRole(Roles.InternalAdmin)
            };

            return(managePendingCharges);
        }
Exemple #5
0
        public async Task <Guid> HandleAsync(UpdateUser query)
        {
            authorization.EnsureCanAccessInternalArea();
            authorization.EnsureUserInRole(Roles.InternalAdmin);

            var user = await userManager.FindByIdAsync(query.UserId);

            if (user == null)
            {
                throw new ArgumentException(string.Format("Could not find a user with id {0}",
                                                          query.UserId));
            }

            user.FirstName = query.FirstName;
            user.Surname   = query.LastName;

            var result = await userManager.UpdateAsync(user);

            if (!result.Succeeded)
            {
                string message = "User update failed.";
                throw new Exception(message);
            }

            return(new Guid(user.Id));
        }
        public async Task <List <SchemeData> > HandleAsync(GetMemberRegistrationSchemesByComplianceYear request)
        {
            authorization.EnsureCanAccessInternalArea();
            Func <Scheme, bool> filter;

            switch (request.Filter)
            {
            case FilterType.Approved:
                filter = s => s.SchemeStatus == SchemeStatus.Approved;
                break;

            case FilterType.ApprovedOrWithdrawn:
                filter = s => (s.SchemeStatus == SchemeStatus.Approved) || (s.SchemeStatus == SchemeStatus.Withdrawn);
                break;

            default:
                throw new NotSupportedException();
            }

            List <string> schemes = await schemeDataAccess.GetMemberRegistrationSchemesByComplianceYear(request.ComplianceYear);

            return(context.Schemes
                   .Where(t => schemes.Contains(t.SchemeName))
                   .Where(filter)
                   .OrderBy(s => s.SchemeName)
                   .Select(s => schemeMap.Map(s))
                   .ToList());
        }
        public async Task <CSVFileData> HandleAsync(GetUkNonObligatedWeeeReceivedDataCsv request)
        {
            authorization.EnsureCanAccessInternalArea();
            if (request.ComplianceYear == 0)
            {
                var message = $"Compliance year cannot be \"{request.ComplianceYear}\".";
                throw new ArgumentException(message);
            }

            var items = await context.StoredProcedures.GetUkNonObligatedWeeeReceivedByComplianceYear(request.ComplianceYear);

            var csvWriter = csvWriterFactory.Create <UkNonObligatedWeeeReceivedData>();

            csvWriter.DefineColumn(ReportConstants.QuarterColumnHeading, i => i.Quarter);
            csvWriter.DefineColumn(ReportConstants.CategoryColumnHeading, i => i.Category);
            csvWriter.DefineColumn(ReportConstants.NonObligatedColumnHeading, i => i.TotalNonObligatedWeeeReceived);
            csvWriter.DefineColumn(ReportConstants.NonObligatedDcfColumnHeading, i => i.TotalNonObligatedWeeeReceivedFromDcf);
            var fileContent = csvWriter.Write(items);

            var fileName = $"{request.ComplianceYear}_UK non-obligated WEEE received at AATFs_{SystemTime.UtcNow:ddMMyyyy_HHmm}.csv";

            return(new CSVFileData
            {
                FileContent = fileContent,
                FileName = fileName
            });
        }
        public async Task <CSVFileData> HandleAsync(FetchInvoiceRunCsv message)
        {
            authorization.EnsureCanAccessInternalArea();

            var items = await context.StoredProcedures.SpgInvoiceRunChargeBreakdown(message.InvoiceRunId);

            var csvWriter = csvWriterFactory.Create <PCSChargesCSVData>();

            csvWriter.DefineColumn(@"Scheme name", i => i.SchemeName);
            csvWriter.DefineColumn(@"Compliance year", i => i.ComplianceYear);
            csvWriter.DefineColumn(@"Submission date and time (GMT)", i => i.SubmissionDate.ToString("dd/MM/yyyy HH:mm:ss"));
            csvWriter.DefineColumn(@"Producer name", i => i.ProducerName);
            csvWriter.DefineColumn(@"PRN", i => i.PRN);
            csvWriter.DefineColumn(@"Charge value (GBP)", i => i.ChargeValue);
            csvWriter.DefineColumn(@"Charge band", i => i.ChargeBandType);
            csvWriter.DefineColumn(@"Reg. Off. or PPoB country", i => i.RegOfficeOrPBoBCountry);
            csvWriter.DefineColumn(@"Includes annual charge", i => i.HasAnnualCharge);

            string fileContent = csvWriter.Write(items);

            var invoiceRun = await commonDataAccess.FetchInvoiceRunAsync(message.InvoiceRunId);

            string fileName = string.Format("invoicerun_{0}_{1}.csv", invoiceRun.CompetentAuthority.Abbreviation, invoiceRun.IssuedDate.ToString("ddMMyyyy"));

            return(new CSVFileData
            {
                FileContent = fileContent,
                FileName = fileName
            });
        }
Exemple #9
0
        public async Task <List <SchemeData> > HandleAsync(Requests.Admin.GetSchemes request)
        {
            authorization.EnsureCanAccessInternalArea();

            List <Scheme> schemes = await dataAccess.GetSchemes();

            Func <Scheme, bool> filter;

            switch (request.Filter)
            {
            case Requests.Admin.GetSchemes.FilterType.Approved:
                filter = s => s.SchemeStatus == SchemeStatus.Approved;
                break;

            case Requests.Admin.GetSchemes.FilterType.ApprovedOrWithdrawn:
                filter = s => (s.SchemeStatus == SchemeStatus.Approved) || (s.SchemeStatus == SchemeStatus.Withdrawn);
                break;

            default:
                throw new NotSupportedException();
            }

            return(schemes
                   .Where(filter)
                   .OrderBy(s => s.SchemeName)
                   .Select(s => schemeMap.Map(s))
                   .ToList());
        }
        public async Task <Guid> HandleAsync(UpdateCompetentAuthorityUserRoleAndStatus query)
        {
            authorization.EnsureCanAccessInternalArea();
            authorization.EnsureUserInRole(Roles.InternalAdmin);

            var competentAuthorityUser = await dataAccess.GetCompetentAuthorityUser(query.Id);

            if (competentAuthorityUser == null)
            {
                string message = string.Format(
                    "No competent authority user was found with ID \"{0}\".",
                    query.Id);
                throw new InvalidOperationException(message);
            }

            if (userContext != null &&
                userContext.UserId.ToString() == competentAuthorityUser.UserId)
            {
                throw new InvalidOperationException(string.Format("Error for user with Id '{0}': Users cannot change their own status or role", userContext.UserId));
            }

            var role = await dataAccess.GetRoleOrDefaultAsync(query.RoleName);

            if (role == null)
            {
                throw new InvalidOperationException(string.Format("Invalid role name {0}", query.RoleName));
            }

            await dataAccess.UpdateUserRoleAndStatus(competentAuthorityUser, role, query.UserStatus);

            return(competentAuthorityUser.CompetentAuthorityId);
        }
Exemple #11
0
        public async Task <List <LocalAreaData> > HandleAsync(GetLocalAreas query)
        {
            authorization.EnsureCanAccessInternalArea();

            var localareas = await context.LocalAreas.OrderBy(c => c.Name).ToListAsync();

            return(localareas.Select(mapper.Map).ToList());
        }
Exemple #12
0
        public async Task <IList <PanAreaData> > HandleAsync(GetPanAreas message)
        {
            authorization.EnsureCanAccessInternalArea();

            var panareas = await context.PanAreas.OrderBy(c => c.Name).ToArrayAsync();

            return(panareas.Select(mapper.Map).ToArray());
        }
Exemple #13
0
        public async Task <bool> HandleAsync(IsProducerRegisteredForComplianceYear request)
        {
            authorization.EnsureCanAccessInternalArea();

            var producerRegistrations = await registeredProducerDataAccess.GetProducerRegistrations(request.RegistrationNumber, request.ComplianceYear);

            return(producerRegistrations.Any());
        }
        public async Task <bool> HandleAsync(CheckApprovalNumberIsUnique message)
        {
            authorization.EnsureCanAccessInternalArea();
            authorization.EnsureUserInRole(Roles.InternalAdmin);

            var existing = await dataAccess.FetchByApprovalNumber(message.ApprovalNumber, message.ComplianceYear);

            return(existing != null);
        }
        public async Task <CanApprovalDateBeChangedFlags> HandleAsync(CheckAatfApprovalDateChange message)
        {
            authorization.EnsureCanAccessInternalArea();
            authorization.EnsureUserInRole(Roles.InternalAdmin);

            var aatf = await aatfDataAccess.GetDetails(message.AatfId);

            return(await getAatfApprovalDateChangeStatus.Validate(aatf, message.NewApprovalDate));
        }
        public async Task <CSVFileData> HandleAsync(GetDataReturnSubmissionEeeChangesCsv message)
        {
            authorization.EnsureCanAccessInternalArea();

            var changes = await dataAccess.GetChanges(message.CurrentDataReturnVersionId, message.PreviousDataReturnVersionId);

            csvWriter.DefineColumn("Producer name", i => i.ProducerName);
            csvWriter.DefineColumn("PRN", i => i.ProducerRegistrationNumber);
            csvWriter.DefineColumn("Compliance year", i => i.ComplianceYear);
            csvWriter.DefineColumn("Date / Time (GMT) of submission", i => i.SubmissionDate);
            csvWriter.DefineColumn("Quarter", i => i.Quarter);
            csvWriter.DefineColumn("Change type", i => i.ChangeType);

            csvWriter.DefineColumn("Cat1 B2C (t)", i => i.Cat1B2C);
            csvWriter.DefineColumn("Cat2 B2C (t)", i => i.Cat2B2C);
            csvWriter.DefineColumn("Cat3 B2C (t)", i => i.Cat3B2C);
            csvWriter.DefineColumn("Cat4 B2C (t)", i => i.Cat4B2C);
            csvWriter.DefineColumn("Cat5 B2C (t)", i => i.Cat5B2C);
            csvWriter.DefineColumn("Cat6 B2C (t)", i => i.Cat6B2C);
            csvWriter.DefineColumn("Cat7 B2C (t)", i => i.Cat7B2C);
            csvWriter.DefineColumn("Cat8 B2C (t)", i => i.Cat8B2C);
            csvWriter.DefineColumn("Cat9 B2C (t)", i => i.Cat9B2C);
            csvWriter.DefineColumn("Cat10 B2C (t)", i => i.Cat10B2C);
            csvWriter.DefineColumn("Cat11 B2C (t)", i => i.Cat11B2C);
            csvWriter.DefineColumn("Cat12 B2C (t)", i => i.Cat12B2C);
            csvWriter.DefineColumn("Cat13 B2C (t)", i => i.Cat13B2C);
            csvWriter.DefineColumn("Cat14 B2C (t)", i => i.Cat14B2C);

            csvWriter.DefineColumn("Cat1 B2B (t)", i => i.Cat1B2B);
            csvWriter.DefineColumn("Cat2 B2B (t)", i => i.Cat2B2B);
            csvWriter.DefineColumn("Cat3 B2B (t)", i => i.Cat3B2B);
            csvWriter.DefineColumn("Cat4 B2B (t)", i => i.Cat4B2B);
            csvWriter.DefineColumn("Cat5 B2B (t)", i => i.Cat5B2B);
            csvWriter.DefineColumn("Cat6 B2B (t)", i => i.Cat6B2B);
            csvWriter.DefineColumn("Cat7 B2B (t)", i => i.Cat7B2B);
            csvWriter.DefineColumn("Cat8 B2B (t)", i => i.Cat8B2B);
            csvWriter.DefineColumn("Cat9 B2B (t)", i => i.Cat9B2B);
            csvWriter.DefineColumn("Cat10 B2B (t)", i => i.Cat10B2B);
            csvWriter.DefineColumn("Cat11 B2B (t)", i => i.Cat11B2B);
            csvWriter.DefineColumn("Cat12 B2B (t)", i => i.Cat12B2B);
            csvWriter.DefineColumn("Cat13 B2B (t)", i => i.Cat13B2B);
            csvWriter.DefineColumn("Cat14 B2B (t)", i => i.Cat14B2B);

            var fileContent = csvWriter.Write(changes.CsvData);

            var fileName =
                string.Format("{0}_Q{1}_{2}_EEEDataChanges_{3:ddMMyyyy_HHmm}.csv",
                              changes.ComplianceYear, changes.Quarter, changes.SchemeApprovalNumber,
                              changes.CurrentSubmissionDate);

            return(new CSVFileData
            {
                FileContent = fileContent,
                FileName = fileName
            });
        }
Exemple #17
0
        public async Task <List <SchemeData> > HandleAsync(GetSchemes message)
        {
            authorization.EnsureCanAccessInternalArea();

            var schemes = await dataAccess.GetCompleteSchemes();

            return(schemes.Select(s => schemeMap.Map(s))
                   .OrderBy(sd => sd.Name)
                   .ToList());
        }
        public async Task <List <AatfSubmissionHistoryData> > HandleAsync(GetAatfSubmissionHistory message)
        {
            authorization.EnsureCanAccessInternalArea();

            var submissionHistoryItems = await getAatfSubmissionHistoryDataAccess.GetItemsAsync(message.AatfId);

            return(submissionHistoryItems.Select(s => mapper.Map <AatfSubmissionHistory, AatfSubmissionHistoryData>(s)).OrderByDescending(s => s.ComplianceYear)
                   .ThenByDescending(s => s.Quarter)
                   .ThenByDescending(s => s.SubmittedDate)
                   .ToList());
        }
Exemple #19
0
        public async Task <List <Role> > HandleAsync(GetRoles message)
        {
            authorization.EnsureCanAccessInternalArea();
            authorization.EnsureUserInRole(Roles.InternalAdmin);

            return(await weeeContext.Roles
                   .Select(r => new Role {
                Name = r.Name, Description = r.Description
            })
                   .ToListAsync());
        }
        public async Task <CSVFileData> HandleAsync(GetAatfObligatedData request)
        {
            authorization.EnsureCanAccessInternalArea();
            if (request.ComplianceYear == 0)
            {
                var message = $"Compliance year cannot be \"{request.ComplianceYear}\".";
                throw new ArgumentException(message);
            }

            var aatf = await aatfDataAccess.GetAatfById(request.AatfId);

            var obligatedData = await weeContext.StoredProcedures.GetAatfObligatedCsvData(request.ReturnId, request.ComplianceYear, request.Quarter, request.AatfId);

            //Remove the Id columns
            if (obligatedData != null)
            {
                if (obligatedData.Columns.Contains("AatfId"))
                {
                    obligatedData.Columns.Remove("AatfId");
                }
                if (obligatedData.Columns.Contains("ReturnId"))
                {
                    obligatedData.Columns.Remove("ReturnId");
                }
                if (obligatedData.Columns.Contains("Q"))
                {
                    obligatedData.Columns.Remove("Q");
                }
                if (obligatedData.Columns.Contains("CategoryId"))
                {
                    obligatedData.Columns.Remove("CategoryId");
                }
                if (obligatedData.Columns.Contains("TonnageType"))
                {
                    obligatedData.Columns.Remove("TonnageType");
                }
            }

            var fileName = string.Format("{1}_{2}_{4}_Full data_{3:ddMMyyyy}_{3:HHmm}.csv",
                                         aatf.Name,
                                         request.ComplianceYear,
                                         (QuarterType)request.Quarter,
                                         SystemTime.UtcNow,
                                         aatf.ApprovalNumber);

            string fileContent = DataTableCsvHelper.DataTableToCsv(obligatedData);

            return(new CSVFileData
            {
                FileContent = fileContent,
                FileName = fileName
            });
        }
Exemple #21
0
        public async Task<List<SchemeData>> HandleAsync(Requests.Admin.GetSchemesByOrganisationId request)
        {
            authorization.EnsureCanAccessInternalArea();

            List<Scheme> schemes = await dataAccess.GetSchemes();

            return schemes
                .Where(s => s.OrganisationId == request.OrganisationId && s.SchemeStatus.Value != (int)SchemeStatus.Pending)
                .OrderBy(s => s.SchemeName)
                .Select(s => schemeMap.Map(s))
                .ToList();
        }
        public async Task <List <AatfDataList> > HandleAsync(GetAatfsByOrganisationId message)
        {
            authorization.EnsureCanAccessInternalArea();

            var aatfs = await dataAccess.GetAatfs();

            return(aatfs
                   .OrderBy(a => a.Name)
                   .Where(s => s.Organisation.Id == message.OrganisationId)
                   .Select(s => aatfmap.Map(s))
                   .ToList());
        }
        public async void WhenUserIsUnauthorised_ShouldNotGetProducerRegistrations()
        {
            A.CallTo(() => weeeAuthorization.EnsureCanAccessInternalArea())
            .Throws <SecurityException>();

            var request = new IsProducerRegisteredForComplianceYear("ABC12345", 2016);

            await Assert.ThrowsAsync <SecurityException>(() => IsProducerRegisteredForComplianceYearHandler().HandleAsync(request));

            A.CallTo(() => registeredProducerDataAccess.GetProducerRegistration(A <Guid> ._))
            .MustNotHaveHappened();
        }
        public async Task <AatfContactData> HandleAsync(GetAatfContact message)
        {
            authorization.EnsureCanAccessInternalArea();

            var contact = await dataAccess.GetContact(message.AatfId);

            var result = mapper.Map(contact);

            result.CanEditContactDetails = authorization.CheckUserInRole(Roles.InternalAdmin);

            return(result);
        }
        public async Task <AatfDeletionData> HandleAsync(CheckAatfCanBeDeleted message)
        {
            authorization.EnsureCanAccessInternalArea();
            authorization.EnsureUserInRole(Roles.InternalAdmin);

            var aatf = await aatfDataAccess.GetDetails(message.AatfId);

            var aatfDeletion = await getAatfDeletionStatus.Validate(aatf.Id);

            var organisationDeletion = await getOrganisationDeletionStatus.Validate(aatf.Organisation.Id, aatf.ComplianceYear, aatf.FacilityType);

            return(new AatfDeletionData(organisationDeletion, aatfDeletion));
        }
        public async Task <IReadOnlyList <SchemeData> > HandleAsync(Requests.Charges.FetchSchemesWithInvoices message)
        {
            authorization.EnsureCanAccessInternalArea();

            UKCompetentAuthority authority = await dataAccess.FetchCompetentAuthority(message.Authority);

            IEnumerable <MemberUpload> invoicedMemberUploads = await dataAccess.FetchInvoicedMemberUploadsAsync(authority);

            return(invoicedMemberUploads
                   .GroupBy(s => new { s.Scheme.Id, s.Scheme.SchemeName, s.Scheme })
                   .Select(s => schemeMap.Map(s.Key.Scheme))
                   .OrderBy(x => x.SchemeName).ToList());
        }
        public async Task <Core.Shared.UserStatus> HandleAsync(GetAdminUserStatus request)
        {
            authorization.EnsureCanAccessInternalArea(false);

            var adminUser = await dataAccess.GetAdminUserOrDefault(new Guid(request.UserId));

            if (adminUser == null)
            {
                string message = string.Format("No user was found with id \"{0}\".", request.UserId);
                throw new ArgumentException(message);
            }
            return(userMap.Map(adminUser.UserStatus));
        }
        public async Task <bool> HandleAsync(CompleteOrganisationAdmin message)
        {
            authorization.EnsureCanAccessInternalArea();
            authorization.EnsureUserInRole(Roles.InternalAdmin);

            Organisation organisation = await dataAccess.FetchOrganisationAsync(message.OrganisationId);

            organisation.OrganisationStatus = OrganisationStatus.Complete;

            await dataAccess.SaveAsync();

            return(true);
        }
        public async Task <CSVFileData> HandleAsync(GetProducerPublicRegisterCSV request)
        {
            authorization.EnsureCanAccessInternalArea();
            if (request.ComplianceYear == 0)
            {
                string message = string.Format("Compliance year cannot be \"{0}\".", request.ComplianceYear);
                throw new ArgumentException(message);
            }

            var items = await context.StoredProcedures.SpgProducerPublicRegisterCSVDataByComplianceYear(
                request.ComplianceYear);

            CsvWriter <ProducerPublicRegisterCSVData> csvWriter =
                csvWriterFactory.Create <ProducerPublicRegisterCSVData>();

            csvWriter.DefineColumn(@"Producer name", i => i.ProducerName);
            csvWriter.DefineColumn(@"Producer trading name", i => i.TradingName);
            csvWriter.DefineColumn(@"Obligation type", i => i.ObligationType);
            csvWriter.DefineColumn(@"Registered office address / principal place of business", i => !string.IsNullOrEmpty(i.CompanyName) ?
                                   ConcatAddress(new[]
            {
                i.ROAPrimaryName, i.ROASecondaryName, i.ROAStreet, i.ROATown, i.ROALocality, i.ROAAdministrativeArea, i.ROACountry, i.ROAPostCode
            })
            : ConcatAddress(new[]
            {
                i.PPOBPrimaryName, i.PPOBSecondaryName, i.PPOBStreet, i.PPOBTown, i.PPOBLocality, i.PPOBAdministrativeArea, i.PPOBCountry, i.PPOBPostcode
            }));
            csvWriter.DefineColumn(@"Registered office phone number", i => !string.IsNullOrEmpty(i.CompanyName) ? i.ROATelephone : string.Empty, true);
            csvWriter.DefineColumn(@"Registered office email address", i => !string.IsNullOrEmpty(i.CompanyName) ? i.ROAEmail : string.Empty);
            csvWriter.DefineColumn(@"Producer registration number (PRN)", i => i.PRN);
            csvWriter.DefineColumn(@"Producer compliance scheme (PCS) name", i => i.SchemeName);
            csvWriter.DefineColumn(@"PCS operator name", i => i.SchemeOperator);

            csvWriter.DefineColumn(@"PCS registered office", i => ConcatAddress(new[] { i.CSROAAddress1, i.CSROAAddress2, i.CSROATownOrCity, i.CSROACountyOrRegion, i.CSROACountry, i.CSROAPostcode }));
            csvWriter.DefineColumn(@"Overseas producer name and address", i => ConcatAddress(new[] { i.OPNAName, i.OPNAPrimaryName, i.OPNASecondaryName, i.OPNAStreet, i.OPNATown, i.OPNALocality, i.OPNAAdministrativeArea, i.OPNACountry, i.OPNAPostCode }));

            csvWriter.DefineColumn(@"Compliance year", i => i.ComplianceYear.ToString());

            string fileContent = csvWriter.Write(items);

            var fileName = string.Format("{0}_producerpublicregister_{1:ddMMyyyy_HHmm}.csv",
                                         request.ComplianceYear,
                                         DateTime.UtcNow);

            return(new CSVFileData
            {
                FileContent = fileContent,
                FileName = fileName
            });
        }
Exemple #30
0
        public async Task <CSVFileData> HandleAsync(GetPcsAatfComparisonData request)
        {
            authorization.EnsureCanAccessInternalArea();

            if (request.ComplianceYear == 0)
            {
                var message = $"Compliance year cannot be \"{request.ComplianceYear}\".";
                throw new ArgumentException(message);
            }

            var items = await context.StoredProcedures.GetPcsAatfComparisonDataCsvData(request.ComplianceYear, request.Quarter, request.ObligationType);

            var csvWriter = csvWriterFactory.Create <PcsAatfComparisonDataCsvData>();

            csvWriter.DefineColumn(@"Compliance year", i => i.ComplianceYear);
            csvWriter.DefineColumn(@"Quarter", i => i.QuarterValue);
            csvWriter.DefineColumn(@"Obligation type", i => i.ObligationType);
            csvWriter.DefineColumn(@"Category", i => i.Category);
            csvWriter.DefineColumn(@"PCS name", i => i.SchemeNameValue);
            csvWriter.DefineColumn(@"PCS approval number", i => i.PcsApprovalNumber);
            csvWriter.DefineColumn(@"PCS appropriate authority", i => i.PcsAbbreviation);
            csvWriter.DefineColumn(@"AATF name", i => i.AatfName);
            csvWriter.DefineColumn(@"AATF approval number", i => i.AatfApprovalNumber);
            csvWriter.DefineColumn(@"AATF appropriate authority", i => i.AatfAbbreviation);
            csvWriter.DefineColumn(@"PCS report (t)", i => i.PcsTonnage);
            csvWriter.DefineColumn(@"AATF report(t)", i => i.AatfTonnage);
            csvWriter.DefineColumn(@"Discrepancy between PCS and AATF reports (t)", i => i.DifferenceTonnage);

            var fileContent = csvWriter.Write(items);

            var fileNameParameters = string.Empty;

            if (request.Quarter != null)
            {
                fileNameParameters += $"_Q{request.Quarter}";
            }

            if (!string.IsNullOrWhiteSpace(request.ObligationType))
            {
                fileNameParameters += $"_{request.ObligationType}";
            }

            var fileName = $"{request.ComplianceYear}{fileNameParameters}_PCS v AATF WEEE data comparison_{SystemTime.UtcNow:ddMMyyyy_HHmm}.csv";

            return(new CSVFileData
            {
                FileContent = fileContent,
                FileName = fileName
            });
        }