Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }