using System; using System.Collections.Generic; using System.Linq; using System.Web; using NHibernate; using Sleis.ViewModels; using Sleis.Models.CustomFields; using Sleis.Utility; using Sleis.Data; using Sleis.Models; using Sleis.EIS4Sleis; namespace Sleis.Service { //This is an Agency only service! public class CersService : BaseService { public CersData CersData { get; set; } //Returns the number of facilities that data was successfully staged for. public int PopulateStagingTables(string selectedFacilities, bool useMasterFacility, int emissionYear, string userEmail, EIS4Sleis.EISCategory category) { string[] facilities = selectedFacilities.Split(','); int count = facilities.Length; int result = 0; string cersId = null; foreach(string selectedFacility in facilities) { result = CersData.PopulateStagingTables(Int32.Parse(selectedFacility), useMasterFacility, emissionYear, userEmail, category, ref cersId); if (result > 0) //ERRROR. { count = result * -1; break; } count += result; } return count; } public List GetReportingPeriodTypes() { return CersData.GetReportingPeriodTypes(); } public List GetEmissionYears(EIS4Sleis.EISCategory dataCategory) { return CersData.GetEmissionYears(dataCategory); } public void SubmitToEpa(EIS4Sleis.DatabaseParameters databaseParamters, EIS4Sleis.NodeEndpointParameters endpointParameters, EIS4Sleis.SubmissionParameters submissionParameters, out EisSubmission submission) { EIS4Sleis.EIS4Sleis eis = new EIS4Sleis.EIS4Sleis(); EIS4Sleis.SubmissionResults results = new SubmissionResults(); submission = new EisSubmission(); submission.AuthorName = submissionParameters.AuthorName; submission.DataCategory = submissionParameters.Category.ToString(); submission.Date = DateTime.Now; submission.NodeEndpointUrl = endpointParameters.Url; submission.OrganizationName = submissionParameters.OrganizationName; submission.ReportYear = submissionParameters.EmissionsYear; submission.ReportPeriodTypeCode = "A"; //annual submission submission.Type = submissionParameters.IsProductionSubmission ? "Production" : "Quality Assurance"; try { results = eis.SubmitEISData(databaseParamters, endpointParameters, submissionParameters); submission.TransactionId = results.TransactionId; submission.Status = TransactionStatusCode.Pending.ToString(); } catch (EIS4SleisException err) { Log.Error(err); if (!String.IsNullOrWhiteSpace(err.GeneratedZippedXmlFilePath)) { submission.GeneratedXmlZip = System.IO.File.ReadAllBytes(err.GeneratedZippedXmlFilePath); //save file to object so can be persisted to storage. } submission.Status = TransactionStatusCode.Failed.ToString(); throw; } finally { //Save Submission CersData.SaveOrUpdate(submission); } //Save results.TransactionId to A_EIS_SUBM table. } public List GetAll() { EIS4Sleis.EIS4Sleis eis = new EIS4Sleis.EIS4Sleis(); List submissions = CersData.Get(x=>x.TransactionId!=null).ToList(); foreach (EisSubmission s in submissions) { if(!string.Equals(s.Status, "Completed", StringComparison.OrdinalIgnoreCase)) { EIS4Sleis.NodeEndpointParameters endpointParameters = new EIS4Sleis.NodeEndpointParameters((NodeType)Enum.Parse(typeof(EIS4Sleis.NodeType), Properties.Get(Constants.NodeType), true), Properties.Get(Constants.NodeEndpointUrl), Properties.Get(Constants.NodeEndpointUsername), Properties.Get(Constants.NodeEndpointPassword) ); CheckStatusResults results = eis.CheckEISSubmissionStatus(s.TransactionId, endpointParameters); s.Status = results.Status.ToString(); //update record CersData.SaveOrUpdate(s); } } return submissions; } public EIS4Sleis.DownloadResults GetSubmissionDocument(string transactionId) { EIS4Sleis.EIS4Sleis eis = new EIS4Sleis.EIS4Sleis(); EIS4Sleis.NodeEndpointParameters endpointParameters = new EIS4Sleis.NodeEndpointParameters((NodeType)Enum.Parse(typeof(EIS4Sleis.NodeType), Properties.Get(Constants.NodeType), true), Properties.Get(Constants.NodeEndpointUrl), Properties.Get(Constants.NodeEndpointUsername), Properties.Get(Constants.NodeEndpointPassword) ); return eis.DownloadEISSubmissionDocuments(transactionId, endpointParameters); } } }