/// <summary> /// Method to update visit group and create a new client visit for fund /// </summary> /// <param name="dbfFilePath">DBF file that contains information to update</param> /// <returns>Result of updating</returns> public List <ClientVisit.UpdateResultData> ClientVisit_UpdateFundDbf(User user, string dbfFilePath) { BSOBusinessLogic bsoBusinessLogic = new BSOBusinessLogic(); List <ClientVisit.UpdateData> dataToUpdate = ClientVisitReportDao.Instance.GetUpdateDataFromDbf(dbfFilePath); List <ClientVisit.UpdateResultData> results = new List <ClientVisit.UpdateResultData>(); foreach (var updateClientVisitItem in dataToUpdate) { var clientVisits = FindClientVisitsToUpdate(updateClientVisitItem); ClientVisitInfo lastClientVisitInfo = clientVisits.OrderBy(v => v.Id).LastOrDefault(); if (lastClientVisitInfo != null && (lastClientVisitInfo.Status.Id == ClientVisitStatuses.AnswerPending.Id || lastClientVisitInfo.Status.Id == ClientVisitStatuses.AnswerPending.Id || lastClientVisitInfo.Status.Id == ClientVisitStatuses.SubmitPending.Id || lastClientVisitInfo.Status.Id == ClientVisitStatuses.SentToGoznak.Id || lastClientVisitInfo.Status.Id == ClientVisitStatuses.Processed.Id || lastClientVisitInfo.Status.Id == ClientVisitStatuses.Comment.Id)) { ClientVisit visit = ClientVisit_Get(lastClientVisitInfo.Id); // create new clientVisit to update policy information in the fund if (visit.Status.Id != ClientVisitStatuses.PolicyReadyForClient.Id) { ClientVisit.SaveData data = BuildUpdatedClientVisitSaveData(updateClientVisitItem, visit); ClientVisitSaveResult updatingResult = ClientVisit_Save(user, data); //если bso будет найден - ему меняем статус на "Выдан клиенту" BSO bso = new BSO(); bso = bsoBusinessLogic.BSO_GetByNumber(updateClientVisitItem.TemporaryPolicyNumber); if (bso != null) { if (bso.Status.Id == (long)ListBSOStatusID.OnDelivery || bso.Status.Id == (long)ListBSOStatusID.OnStorage) { bso.Status.Id = (long)ListBSOStatusID.OnClient; bso.UserId = user.Id; bso.DeliveryPointId = data.DeliveryPointId == null ? bso.DeliveryPointId : data.DeliveryPointId; //Если точка пустая - оставляем Точку, кот. была в БСО bso.StatusDate = data.TemporaryPolicyDate == null ? data.StatusDate : data.TemporaryPolicyDate; bso.Comment = string.Format("Изменение статуса при загрузке DBF (Загрузить DBF из фонда)"); bso.VisitGroupId = updatingResult.VisitGroupId; } else { //если bso уже выдан клиенту - то дальнейшие действия с БСО не имеют значения bso = null; } } // set status for created client visit ClientVisit_SetStatus(user, updatingResult.ClientVisitID, ClientVisitStatuses.PolicyReadyForClient.Id, true); if (bso != null) { bsoBusinessLogic.BSO_Save(new BSO.SaveData(bso)); } results.Add(new ClientVisit.UpdateResultData(updateClientVisitItem, true, "Успешно", visit) { Status = ClientVisitStatuses.PolicyReadyForClient }); } else { results.Add(new ClientVisit.UpdateResultData(updateClientVisitItem, true, "Заявка на выдачу была создана ранее", visit)); } } else { results.Add(new ClientVisit.UpdateResultData(updateClientVisitItem, true, "Заявка в подходящем статусе не найдена")); } } return(results); }
public List <ClientVisit.UpdateResultData> UploadMFCClientVisits(User user, string zipFilepath) { List <ClientVisit.UpdateResultData> report = new List <ClientVisit.UpdateResultData>(); string zipDirectoryName = Path.Combine(ConfiguraionProvider.FileStorageFolder, Path.GetFileNameWithoutExtension(zipFilepath)); try { ZipHelper.UnZipFiles(zipFilepath, zipDirectoryName); string[] filenames = Directory.GetFiles(zipDirectoryName); string persFile = filenames.FirstOrDefault(item => Path.GetFileName(item).StartsWith("pers")); string addrFile = filenames.FirstOrDefault(item => Path.GetFileName(item).StartsWith("addr")); string docuFile = filenames.FirstOrDefault(item => Path.GetFileName(item).StartsWith("docu")); Dictionary <int, ClientVisit.SaveData> clientVisitByRecid = new Dictionary <int, ClientVisit.SaveData>(); List <string> errors = new List <string>(); ClientVisitReportDao.Instance.BuildClientVisitDataFromMFC(clientVisitByRecid, errors, persFile); ClientVisitReportDao.Instance.BuildDocumentsFromMFC(clientVisitByRecid, errors, docuFile); ClientVisitReportDao.Instance.BuildAddressedFromMFC(clientVisitByRecid, errors, addrFile); foreach (var pair in clientVisitByRecid) { var data = pair.Value; string bsoMessage = null; BSO bso = new BSO(); bso = bsoBusinessLogic.BSO_GetByNumber(data.TemporaryPolicyNumber); if (!CheckBSO(data, bso, out bsoMessage)) { report.Add(new ClientVisit.UpdateResultData() { Birthday = data.NewClientInfo.Birthday, Firstname = data.NewClientInfo.Firstname, Secondname = data.NewClientInfo.Secondname, Lastname = data.NewClientInfo.Lastname, UnifiedPolicyNumber = data.NewPolicy.UnifiedPolicyNumber, Message = bsoMessage, RECID = pair.Key, IsSuccess = false }); continue; } var clients = clientBusinessLogic.Client_Find(new ClientSearchCriteria() { Birthday = data.NewClientInfo.Birthday, Firstname = data.NewClientInfo.Firstname, Secondname = data.NewClientInfo.Secondname, Lastname = data.NewClientInfo.Lastname }, new List <SortCriteria <ClientSortField> >(), new PageRequest()).Data; if (clients.Count != 0) { Client client = clientBusinessLogic.Client_Get(user, clients.FirstOrDefault().Id); var existedClientVisit = client.Visits.FirstOrDefault(item => item.TemporaryPolicyDate == data.TemporaryPolicyDate && item.TemporaryPolicyNumber == data.TemporaryPolicyNumber); if (existedClientVisit != null) { report.Add(new ClientVisit.UpdateResultData() { ClientId = client.Id, Birthday = existedClientVisit.Birthday, IsSuccess = false, ClientVisitGroupId = existedClientVisit.VisitGroupId, Firstname = existedClientVisit.Firstname, Id = existedClientVisit.Id, Lastname = existedClientVisit.Lastname, Secondname = existedClientVisit.Secondname, Status = existedClientVisit.Status, UnifiedPolicyNumber = existedClientVisit.UnifiedPolicyNumber, Message = "Запись уже существует" }); continue; } data.ClientId = client.Id; } data.RegistratorId = user.Id; data.Status = ClientVisitStatuses.AnswerPending.Id; var saveResult = ClientDao.Instance.ClientVisit_Save(data, user.Id, data.StatusDate); report.Add(new ClientVisit.UpdateResultData() { ClientId = saveResult.ClientID, Birthday = data.NewClientInfo.Birthday, IsSuccess = true, ClientVisitGroupId = saveResult.VisitGroupId, Firstname = data.NewClientInfo.Firstname, Id = saveResult.VisitGroupId, Lastname = data.NewClientInfo.Lastname, Secondname = data.NewClientInfo.Secondname, Status = ClientVisitStatuses.AnswerPending, UnifiedPolicyNumber = data.NewPolicy.UnifiedPolicyNumber, Message = "Успешно" }); bso.Status.Id = (long)ListBSOStatusID.OnClient; bso.UserId = user.Id; bso.DeliveryPointId = data.DeliveryPointId == null ? bso.DeliveryPointId : data.DeliveryPointId; //Если точка пустая - оставляем Точку, кот. была в БСО bso.StatusDate = data.TemporaryPolicyDate == null ? data.StatusDate : data.TemporaryPolicyDate; bso.Comment = string.Format("Изменение статуса при загрузке DBF (загрузка из МФЦ)"); bso.VisitGroupId = saveResult.VisitGroupId; bsoBusinessLogic.BSO_Save(new BSO.SaveData(bso)); } foreach (var error in errors) { report.Add(new ClientVisit.UpdateResultData() { Message = error }); } return(report); } finally { if (Directory.Exists(zipDirectoryName)) { Directory.Delete(zipDirectoryName, true); } } }