예제 #1
0
        /// <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);
        }
예제 #2
0
        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);
                }
            }
        }