private static List <FundResponse.CreateData> GetResponsesFromArchive(FundResponseCreateDataBuilder builder, string zipDirectoryName) { List <FundResponse.CreateData> responsesToCreate = new List <FundResponse.CreateData>(); foreach (var directory in Directory.GetDirectories(zipDirectoryName)) { DirectoryInfo dInfo = new DirectoryInfo(directory); string directoryName = dInfo.Name; IEnumerable <string> dataFiles = Directory.GetFiles(directory).Where(f => Path.GetFileName(f).StartsWith("d")); foreach (var dataFile in dataFiles) { string fname = dataFile; if (!fname.EndsWith("dbf")) { File.Copy(fname, fname = dataFile.Split('.')[0] + ".dbf"); } if (!string.IsNullOrEmpty(fname)) { DataTable dataTable = DBFProcessor.GetDataTable(fname, string.Format("select * from \"{0}\";", fname)); IEnumerable <FundResponse.CreateData> list = builder.BuildList(directoryName, dataTable); responsesToCreate.AddRange(list); } } } return(responsesToCreate); }
public List <FundResponse.UploadReportData> Upload_SecondStepReconciliationPack(User user, string zipPath) { List <FundResponse.UploadReportData> report = new List <FundResponse.UploadReportData>(); string zipDirectoryName = Path.Combine(ConfiguraionProvider.FileStorageFolder, Path.GetFileNameWithoutExtension(zipPath)); ZipHelper.UnZipFiles(zipPath, zipDirectoryName); FundResponseCreateDataBuilder builder = new FundResponseCreateDataBuilder(); var responsesToCreate = GetResponsesFromArchive(builder, zipDirectoryName); var responsesByclientVisitId = GroupByClientVisitId(report, responsesToCreate); DateTime date = DateTime.Now; foreach (var pack in responsesByclientVisitId) { long clientVisitId = pack.Key; ClientVisit clientVisit = ClientDao.Instance.ClientVisit_Get(clientVisitId); if (clientVisit == null) { foreach (var response in pack.Value) { report.Add(new FundResponse.UploadReportData() { Recid = response.Recid, ClientVisitId = clientVisitId, ResponseTypeName = response.GetResponseTypeName(), UploadResult = "Не найдена соответствующая заявка" }); } continue; } ClientVisit lastClientVisitInGroup = ClientDao.Instance.ClientVisit_GetLastClientVisitInGroup(clientVisit.VisitGroupId); foreach (var response in pack.Value) { FundProcessingDao.Instance.FundResponse_Create(response, date); report.Add(AddReportItem(lastClientVisitInGroup, response, lastClientVisitInGroup.Id)); } ClientVisit.SaveData data = ClientVisit.SaveData.BuildSaveData(lastClientVisitInGroup); SecondStepReconciliationProcessor processor = new SecondStepReconciliationProcessor(data, pack.Value.OfType <ReconciliationFundResponse.CreateData>().ToList()); processor.Process(); if (processor.IsChanged) { clientBusinessLogic.ClientVisit_Save(user, data); } } return(report); }
public List <FundResponse.UploadReportData> UploadSubmitFundResponse(User user, string zipPath) { List <FundResponse.UploadReportData> report = new List <FundResponse.UploadReportData>(); string zipDirectoryName = Path.Combine(ConfiguraionProvider.FileStorageFolder, Path.GetFileNameWithoutExtension(zipPath)); ZipHelper.UnZipFiles(zipPath, zipDirectoryName); var responsesToCreate = new List <FundResponse.CreateData>(); FundResponseCreateDataBuilder builder = new FundResponseCreateDataBuilder(); foreach (var file in Directory.GetFiles(zipDirectoryName)) { System.IO.FileInfo fInfo = new System.IO.FileInfo(file); DataTable dataTable = DBFProcessor.GetDataTable(fInfo.FullName, string.Format("select * from \"{0}\";", fInfo.FullName)); if (fInfo.Name.StartsWith("errp2", StringComparison.InvariantCultureIgnoreCase)) { dataTable.TableName = Path.GetFileNameWithoutExtension(fInfo.Name); IEnumerable <FundResponse.CreateData> list = builder.BuildList(FundErrorResponse.Name, dataTable); responsesToCreate.AddRange(list); } if (fInfo.Name.StartsWith("zP2", StringComparison.InvariantCultureIgnoreCase)) { IEnumerable <FundResponse.CreateData> list = builder.BuildList(GoznakResponse.Name, dataTable); responsesToCreate.AddRange(list); } } DateTime date = DateTime.Now; var responsesByclientVisitId = new Dictionary <long, List <FundResponse.CreateData> >(); List <FundRequestRecid> recids = FundProcessingDao.Instance.ClientVisitId_GetByFundRequesetRecid(responsesToCreate.Where(item => item.Recid.HasValue).Select(item => item.Recid.Value)); Dictionary <long, FundRequestRecid> recidsByRecid = recids.ToDictionary(item => item.Recid); foreach (FundResponse.CreateData response in responsesToCreate) { FundRequestRecid recid; if (response.Recid.HasValue && recidsByRecid.TryGetValue(response.Recid.Value, out recid)) { response.ClientVisitId = recid.ClientVisitId; } if (response.ClientVisitId != 0) { if (!responsesByclientVisitId.ContainsKey(response.ClientVisitId)) { responsesByclientVisitId.Add(response.ClientVisitId, new List <FundResponse.CreateData>()); } responsesByclientVisitId[response.ClientVisitId].Add(response); } else { report.Add(new FundResponse.UploadReportData() { Recid = response.Recid, Fullname = response.GetFullname(), ResponseTypeName = response.GetResponseTypeName(), UploadResult = "Не найдена соответствующая заявка" }); } } foreach (var pack in responsesByclientVisitId) { long clientVisitId = pack.Key; ClientVisit clientVisit = clientBusinessLogic.ClientVisit_Get(clientVisitId); if (clientVisit == null) { foreach (var response in pack.Value) { report.Add(new FundResponse.UploadReportData() { Recid = response.Recid, ClientVisitId = clientVisitId, ResponseTypeName = response.GetResponseTypeName(), UploadResult = "Не найдена соответствующая заявка" }); } continue; } ClientVisit lastClientVisit = clientBusinessLogic.ClientVisit_GetLastClientVisitInGroup(clientVisit.VisitGroupId); foreach (var response in pack.Value) { FundProcessingDao.Instance.FundResponse_Create(response, date); } foreach (FundErrorResponse.CreateData response in pack.Value.OfType <FundErrorResponse.CreateData>().Cast <FundErrorResponse.CreateData>()) { if (string.IsNullOrEmpty(response.ErrorCode) && string.IsNullOrEmpty(response.ErrorText)) { if (lastClientVisit.Status.Id == ClientVisitStatuses.AnswerPending.Id) { if (lastClientVisit.Scenario.Id == ClientVisitScenaries.PolicyExtradition.Id) { ClientDao.Instance.ClientVisit_SetStatus(user.Id, lastClientVisit.Id, ClientVisitStatuses.PolicyIssuedAndSentToTheFond.Id, true, date); report.Add(AddReportItem(clientVisit, response, lastClientVisit.Id, ClientVisitStatuses.PolicyIssuedAndSentToTheFond, date, "Загружен ответ фонда")); } else { ClientDao.Instance.ClientVisit_SetStatus(user.Id, lastClientVisit.Id, ClientVisitStatuses.Processed.Id, true, date); report.Add(AddReportItem(clientVisit, response, lastClientVisit.Id, ClientVisitStatuses.Processed, date, "Загружен ответ фонда")); } } else if (lastClientVisit.Status.Id == ClientVisitStatuses.FundError.Id) { ClientVisit.SaveData newClientVisitData = new ClientVisit.SaveData(clientVisit); newClientVisitData.Status = ClientVisitStatuses.Processed.Id; newClientVisitData.StatusDate = date; newClientVisitData.IsActual = true; var saveResult = clientBusinessLogic.ClientVisit_Save(user, newClientVisitData, date); report.Add(AddReportItem(clientVisit, response, saveResult.ClientVisitID, ClientVisitStatuses.Processed, date, "Загружен ответ фонда")); } } else { if (lastClientVisit.Status.Id == ClientVisitStatuses.Reconciliation.Id || lastClientVisit.Status.Id == ClientVisitStatuses.AnswerPending.Id) { ClientDao.Instance.ClientVisit_SetStatus(user.Id, lastClientVisit.Id, ClientVisitStatuses.FundError.Id, true, date); ClientVisit.SaveData newClientVisitData = new ClientVisit.SaveData(clientVisit); newClientVisitData.Status = ClientVisitStatuses.FundError.Id; newClientVisitData.StatusDate = date; newClientVisitData.IsActual = true; var saveResult = clientBusinessLogic.ClientVisit_Save(user, newClientVisitData, date); report.Add(AddReportItem(clientVisit, response, saveResult.ClientVisitID, ClientVisitStatuses.FundError, date, "Загружен ответ фонда")); } else { report.Add(AddReportItem(clientVisit, response, lastClientVisit.Id, lastClientVisit.Status, date, "Статус не изменен")); } } } foreach (GoznakResponse.CreateData response in pack.Value.OfType <GoznakResponse.CreateData>().Cast <GoznakResponse.CreateData>()) { if (lastClientVisit.Status.Id == ClientVisitStatuses.AnswerPending.Id || lastClientVisit.Status.Id == ClientVisitStatuses.Processed.Id || lastClientVisit.Status.Id == ClientVisitStatuses.FundError.Id) { ClientDao.Instance.ClientVisit_SetStatus(user.Id, lastClientVisit.Id, ClientVisitStatuses.SentToGoznak.Id, true, date); report.Add(AddReportItem(clientVisit, response, lastClientVisit.Id, ClientVisitStatuses.SentToGoznak, date)); } else { report.Add(AddReportItem(clientVisit, response, lastClientVisit.Id, lastClientVisit.Status, date, "Статус не изменен")); } } } return(report); }
public List <FundResponse.UploadReportData> UploadFundResponse(User user, string zipPath, bool runScenario) { List <FundResponse.UploadReportData> report = new List <FundResponse.UploadReportData>(); string zipDirectoryName = Path.Combine(ConfiguraionProvider.FileStorageFolder, Path.GetFileNameWithoutExtension(zipPath)); ZipHelper.UnZipFiles(zipPath, zipDirectoryName); FundResponseCreateDataBuilder builder = new FundResponseCreateDataBuilder(); var responsesToCreate = GetResponsesFromArchive(builder, zipDirectoryName); var responsesByclientVisitId = GroupByClientVisitId(report, responsesToCreate); DateTime date = DateTime.Now; foreach (var pack in responsesByclientVisitId) { long clientVisitId = pack.Key; ClientVisit clientVisit = ClientDao.Instance.ClientVisit_Get(clientVisitId); if (clientVisit == null) { foreach (var response in pack.Value) { report.Add(new FundResponse.UploadReportData() { Recid = response.Recid, ClientVisitId = clientVisitId, ResponseTypeName = response.GetResponseTypeName(), UploadResult = "Не найдена соответствующая заявка" }); } continue; } ClientVisit lastClientVisitInGroup = ClientDao.Instance.ClientVisit_GetLastClientVisitInGroup(clientVisit.VisitGroupId); ReferenceItem lastCurrentStatus = clientVisit.Status; DateTime lastClientStatusDate = clientVisit.StatusDate; long? lastClientVisitId = null; if (lastClientVisitInGroup.Status.Id == ClientVisitStatuses.FundError.Id || lastClientVisitInGroup.Status.Id == ClientVisitStatuses.AnswerPending.Id || lastClientVisitInGroup.Status.Id == ClientVisitStatuses.Processed.Id) { clientBusinessLogic.ClientVisit_SetStatus(user, lastClientVisitInGroup.Id, ClientVisitStatuses.Reconciliation.Id, true); lastCurrentStatus = ClientVisitStatuses.Reconciliation; lastClientStatusDate = date; } if (lastClientVisitInGroup.Status.Id == ClientVisitStatuses.SubmitPending.Id) { ClientVisit.SaveData newClientVisitData = new ClientVisit.SaveData(lastClientVisitInGroup); newClientVisitData.Status = ClientVisitStatuses.Reconciliation.Id; lastCurrentStatus = ClientVisitStatuses.Reconciliation; newClientVisitData.StatusDate = date; lastClientStatusDate = date; newClientVisitData.IsActual = true; var saveResult = clientBusinessLogic.ClientVisit_Save(user, newClientVisitData, date); lastClientVisitId = saveResult.ClientVisitID; } foreach (var response in pack.Value) { FundProcessingDao.Instance.FundResponse_Create(response, date); report.Add(AddReportItem(clientVisit, response, lastClientVisitId, lastCurrentStatus, lastClientStatusDate)); } if (runScenario) { clientVisit = ClientDao.Instance.ClientVisit_GetLastClientVisitInGroup(clientVisit.VisitGroupId); ScenarioResolver resolver = new ScenarioResolver(clientVisit, pack.Value.OfType <ReconciliationFundResponse.CreateData>().ToList()); ReferenceItem resolvedScenario = resolver.GetResolvedScenario(); ClientVisit.SaveData data = ClientVisit.SaveData.BuildSaveData(clientVisit); if (resolvedScenario != null) { data.ScenarioId = resolvedScenario.Id; data.FundResponseApplyingMessage = string.Format("Сценарий изменён с {0} на {1}", clientVisit.Scenario != null ? clientVisit.Scenario.Code : string.Empty, resolvedScenario.Code); data.IsReadyToFundSubmitRequest = true; ClientVisitOldDataBuilder oldDataBuilder = new ClientVisitOldDataBuilder(data, pack.Value.OfType <IReconciliationFundResponse>().ToList()); ClientVisit firstClientVisit = clientBusinessLogic.ClientVisit_GetFirstClientVisitInGroup(clientVisit.VisitGroupId); ClientVisitNewDataBuilder newDataBuilder = new ClientVisitNewDataBuilder(data, firstClientVisit, pack.Value.OfType <IReconciliationFundResponse>().ToList()); data = oldDataBuilder.Process(); data = newDataBuilder.Process(); } clientBusinessLogic.ClientVisit_Save(user, data); } } return(report); }