public static ProductionDocumentDetail ConstructProductionModelDocument(ProductionDetailsBEO m_BootParameters)
        {
            var m_ProductionDocumentDetail = new ProductionDocumentDetail();
            m_ProductionDocumentDetail.MatterId = m_BootParameters.MatterId.ToString(CultureInfo.InvariantCulture);
            m_ProductionDocumentDetail.CreatedBy = m_BootParameters.CreatedBy;
            m_ProductionDocumentDetail.DocumentSelectionContext = m_BootParameters.DocumentSelectionContext;
            m_ProductionDocumentDetail.DocumentExclusionContext = m_BootParameters.DocumentExclusionContext;
            m_ProductionDocumentDetail.ProductionCollectionId = m_BootParameters.CollectionId;
            m_ProductionDocumentDetail.Profile = ConvertToProfileDataObjects(m_BootParameters);
            m_ProductionDocumentDetail.Profile.DatasetId = Convert.ToInt64(null); //TODO: check why we have this
            GetMatterDatasetDetails(m_ProductionDocumentDetail, m_BootParameters);
            m_ProductionDocumentDetail.GetText = m_BootParameters.Profile.GetScrubbedText;
            var productionExtractionPath = Path.Combine(m_BootParameters.Profile.ProductionSetLocation,
                                                       m_BootParameters.Profile.ProductionSetName);
            
            if (!Directory.Exists(productionExtractionPath))
            {
                Directory.CreateDirectory(productionExtractionPath);
            }

            m_ProductionDocumentDetail.ExtractionLocation = productionExtractionPath;
            m_ProductionDocumentDetail.ArchivePath = m_BootParameters.Profile.ProductionSetLocation;
            m_ProductionDocumentDetail.NearNativeConversionPriority = m_BootParameters.NearNativeConversionPriority;

            return m_ProductionDocumentDetail;

        }
        public static ProductionDocumentDetail ConstructProductionModelDocument(ProductionDetailsBEO m_BootParameters)
        {
            var m_ProductionDocumentDetail = new ProductionDocumentDetail();

            m_ProductionDocumentDetail.MatterId  = m_BootParameters.MatterId.ToString(CultureInfo.InvariantCulture);
            m_ProductionDocumentDetail.CreatedBy = m_BootParameters.CreatedBy;
            m_ProductionDocumentDetail.DocumentSelectionContext = m_BootParameters.DocumentSelectionContext;
            m_ProductionDocumentDetail.DocumentExclusionContext = m_BootParameters.DocumentExclusionContext;
            m_ProductionDocumentDetail.ProductionCollectionId   = m_BootParameters.CollectionId;
            m_ProductionDocumentDetail.Profile           = ConvertToProfileDataObjects(m_BootParameters);
            m_ProductionDocumentDetail.Profile.DatasetId = Convert.ToInt64(null); //TODO: check why we have this
            GetMatterDatasetDetails(m_ProductionDocumentDetail, m_BootParameters);
            m_ProductionDocumentDetail.GetText = m_BootParameters.Profile.GetScrubbedText;
            var productionExtractionPath = Path.Combine(m_BootParameters.Profile.ProductionSetLocation,
                                                        m_BootParameters.Profile.ProductionSetName);

            if (!Directory.Exists(productionExtractionPath))
            {
                Directory.CreateDirectory(productionExtractionPath);
            }

            m_ProductionDocumentDetail.ExtractionLocation           = productionExtractionPath;
            m_ProductionDocumentDetail.ArchivePath                  = m_BootParameters.Profile.ProductionSetLocation;
            m_ProductionDocumentDetail.NearNativeConversionPriority = m_BootParameters.NearNativeConversionPriority;

            return(m_ProductionDocumentDetail);
        }
예제 #3
0
 protected override void BeginWork()
 {
     base.BeginWork();
     documentConversionTimeout       = ConversionHelper.GetDocumentConversionTimeout();
     documentConverisonGlobalTimeout = ConversionHelper.GetDocumentGlobalConversionTimeout();
     documentVaultMngr     = EVUnityContainer.Resolve <IDocumentVaultManager>("DocumentVaultManager");
     m_DatasetVaultManager = new DataSetVaultManager();
     m_BootParameters      = Utils.Deserialize <ProductionDetailsBEO>(BootParameters);
 }
        protected override void BeginWork()
        {

            base.BeginWork();
            documentConversionTimeout = ConversionHelper.GetDocumentConversionTimeout();
            documentConverisonGlobalTimeout = ConversionHelper.GetDocumentGlobalConversionTimeout();
            documentVaultMngr = EVUnityContainer.Resolve<IDocumentVaultManager>("DocumentVaultManager"); 
            m_DatasetVaultManager = new DataSetVaultManager();
            m_BootParameters = Utils.Deserialize<ProductionDetailsBEO>(BootParameters);
       }
예제 #5
0
        /// <summary>
        /// Recalculate the correct dpn numbers. This is used for dpn numbers that were concatenated together, during multiple production
        /// </summary>
        /// <param name="docList">docList</param>
        /// <param name="baseJobConfig">baseJobConfig</param>
        /// <param name="productionSetDocCount">productionSetDocCount</param>
        private static void RecalculateCorrectDpnNumbers(List <ReconversionProductionDocumentBEO> docList,
                                                         ProductionDetailsBEO baseJobConfig, int productionSetDocCount)
        {
            string dpnPrefix = baseJobConfig.Profile.DpnPrefix;
            int    dpnStart  = Convert.ToInt32(baseJobConfig.Profile.DpnStartingNumber);
            int    dpnEnd    = dpnStart + productionSetDocCount - 1;

            //retrieve the correct dpn for each document for reprocessing
            foreach (var d in docList)
            {
                d.DocumentProductionNumber = ParseForCorrectDpnNumber(d.DocumentProductionNumber, dpnPrefix,
                                                                      dpnStart, dpnEnd);
            }
        }
예제 #6
0
        /// <summary>
        /// Gets the production document list for ID list.
        /// </summary>
        /// <param name="idList">The id list.</param>
        /// <param name="idType">Type of the id.</param>
        /// <param name="matterId">The matter id.</param>
        /// <param name="baseJobConfig">The base job config.</param>
        /// <param name="redactableCollectionId">The redactable collection id.</param>
        /// <param name="jobId"> </param>
        /// <returns></returns>
        public static IEnumerable <ReconversionProductionDocumentBEO> GetProductionDocumentListForIdList(
            List <string> idList, string idType, long matterId,
            ProductionDetailsBEO baseJobConfig, string redactableCollectionId, int jobId)
        {
            //init field id value
            int batesFieldId      = -1;
            int batesBeginFieldId = -1;
            int batesEndFieldId   = -1;
            int dpnFieldId        = -1;

            //bates field: 3004
            var batesField = baseJobConfig.Profile.ProductionFields.FirstOrDefault(f => f.FieldType.DataTypeId == 3004);

            if (batesField != null)
            {
                batesFieldId = batesField.ID;
            }

            //bates begin: 3005
            var batesBeginField =
                baseJobConfig.Profile.ProductionFields.FirstOrDefault(f => f.FieldType.DataTypeId == 3005);

            if (batesBeginField != null)
            {
                batesBeginFieldId = batesBeginField.ID;
            }

            //bates end: 3006
            var batesEndField =
                baseJobConfig.Profile.ProductionFields.FirstOrDefault(f => f.FieldType.DataTypeId == 3006);

            if (batesEndField != null)
            {
                batesEndFieldId = batesEndField.ID;
            }

            //dpn field: 3008
            var dpnField = baseJobConfig.Profile.ProductionFields.FirstOrDefault(f => f.FieldType.DataTypeId == 3008);

            if (dpnField != null)
            {
                dpnFieldId = dpnField.ID;
            }


            //get the collection id for the native collection
            string nativeCollectionId = baseJobConfig.OriginalCollectionId;


            //find the production collection id at the time of the original production
            string productionCollectionId = baseJobConfig.CollectionId;

            //Get the list of production documents for reprocessing
            var docList = new List <ReconversionProductionDocumentBEO>();

            var vault = VaultRepository.CreateRepository(matterId);

            DataSet dsResult = vault.GetProductionReprocessDocumentList(idList, idType, redactableCollectionId,
                                                                        nativeCollectionId, productionCollectionId,
                                                                        dpnFieldId, batesFieldId, batesBeginFieldId,
                                                                        batesEndFieldId, jobId);

            ReconversionProductionDocumentBEO doc = null;

            //process returned records
            if (dsResult != null && dsResult.Tables.Count > 0)
            {
                foreach (DataRow dr in dsResult.Tables[0].Rows)
                {
                    string docReferenceId = dr[Constants.ColumnDocReferenceId].ToString();

                    if (doc == null || !docReferenceId.Equals(doc.DocumentId))
                    //new document (need to check this due to that multiple rows are returned, one row for each field)
                    {
                        doc                = new ReconversionProductionDocumentBEO();
                        doc.DocumentId     = docReferenceId;
                        doc.DCNNumber      = dr[Constants.DCN].ToString();
                        doc.ProductionPath = dr[Constants.ProductionPath].ToString();
                        docList.Add(doc);
                    }

                    int fieldId = dr[Constants.ColumnFieldId] != DBNull.Value
                                      ? Convert.ToInt32(dr[Constants.ColumnFieldId].ToString())
                                      : -1;
                    string fieldValue = dr[Constants.ColumnFieldvalue] != DBNull.Value
                                            ? dr[Constants.ColumnFieldvalue].ToString()
                                            : "";

                    if (dpnFieldId > 0 && dpnFieldId == fieldId)
                    {
                        doc.DocumentProductionNumber = fieldValue;
                    }
                    if (batesFieldId > 0 && batesFieldId == fieldId)
                    {
                        doc.AllBates = fieldValue;
                    }
                    if (batesBeginFieldId > 0 && batesBeginFieldId == fieldId)
                    {
                        doc.StartingBatesNumber = fieldValue;
                    }
                    if (batesEndFieldId > 0 && batesEndFieldId == fieldId)
                    {
                        doc.EndingBatesNumber = fieldValue;
                    }
                }


                //if any of the bates or dpn contain comma,  ie, contain multiple bates or dpn
                string bates = docList[0].StartingBatesNumber;
                string dpn   = docList[0].DocumentProductionNumber;

                //extrac the correct dpn if dpn contain concatenated ids, which could happen because multiple productions done on
                //the same collection, with same dpn field name
                //sample dpn sequence: "dd003, dd103, k45k005, k45k105, dd203, kkk001, ddd002, dd303, k45k205"
                if (dpn != null && dpn.Contains(","))
                {
                    RecalculateCorrectDpnNumbers(docList, baseJobConfig,
                                                 vault.GetDocumentCountForCollection(new Guid(productionCollectionId)));
                }

                //extrac the correct bates info if bates contain concatenated ids, which could happen because multiple productions done on
                //the same collection, with same bates field name
                //if bates is configures, the file name for the production contain the beginBates number.
                if ((bates != null && bates.Contains(",")))
                {
                    RecalculateCorrectBatesNumbers(docList);
                }
            }

            return(docList);
        }
예제 #7
0
        /// <summary>
        /// Gets the production document list.
        /// </summary>
        /// <param name="filePath">The file path.</param>
        /// <param name="selectionMode">The selection mode.</param>
        /// <param name="matterId">The matter id.</param>
        /// <param name="baseJobConfig">The base job config.</param>
        /// <param name="redactableCollectionId">The redactable collection id.</param>
        /// <param name="jobId"></param>
        /// <param name="filters"> </param>
        /// <returns></returns>
        public virtual IEnumerable <ReconversionProductionDocumentBEO> GetProductionDocumentList(
            string filePath, ReProcessJobSelectionMode selectionMode, long matterId,
            ProductionDetailsBEO baseJobConfig, string redactableCollectionId, int jobId, string filters = null)
        {
            switch (selectionMode)
            {
            case ReProcessJobSelectionMode.Selected:
            {
                var docidList = GetDocumentIdListFromFile(filePath, Constants.DocId);
                foreach (var v in GetProductionDocumentListForIdList(
                             docidList, Constants.DocId, matterId, baseJobConfig, redactableCollectionId, jobId))
                {
                    yield return(v);
                }
                break;
            }

            case ReProcessJobSelectionMode.Csv:
            case ReProcessJobSelectionMode.CrossReference:
            {
                var dictIds = GetDocumentIdListFromFile(filePath, Constants.DCN, Constants.DocumentSetName);

                //put all value in one list. Since there is only one production set, it should all be the same collectionId
                var ids = new List <string>();
                foreach (var dictId in dictIds)
                {
                    ids.AddRange(dictId.Value);
                }
                foreach (var v in GetProductionDocumentListForIdList(
                             ids, Constants.DCN, matterId, baseJobConfig, redactableCollectionId, jobId))
                {
                    yield return(v);
                }
                break;
            }

            case ReProcessJobSelectionMode.All:
                IEnumerable <ReconversionProductionDocumentBEO> reconversionProductionDocumentBeos = null;
                if (!string.IsNullOrEmpty(filters))
                {
                    var documentVaultManager = new DocumentVaultManager();
                    documentVaultManager.Init(matterId);

                    IEnumerable <DocumentConversionLogBeo> documentConversionLogBeos =
                        documentVaultManager.GetConversionResultsWithFilters(matterId, jobId, null, null, filters
                                                                             );
                    var docidList =
                        documentConversionLogBeos.Select(
                            documentConversionLogBeo =>
                            documentConversionLogBeo.DocId.ToString(CultureInfo.InvariantCulture)).ToList();
                    reconversionProductionDocumentBeos = GetProductionDocumentListForIdList(
                        docidList, Constants.DocId, matterId, baseJobConfig, redactableCollectionId, jobId);
                }
                else
                {
                    reconversionProductionDocumentBeos = GetProductionDocumentListForIdList
                                                         (
                        null, "ALL", matterId, baseJobConfig, redactableCollectionId, jobId);
                }
                if (reconversionProductionDocumentBeos == null)
                {
                    yield return(null);
                }
                foreach (var reConversionProductionBeo in reconversionProductionDocumentBeos)
                {
                    yield return(reConversionProductionBeo);
                }
                break;
            }
        }
        /// <summary>
        /// Converts to profile data objects.
        /// </summary>
        /// <returns></returns>
        private static ProductionProfile ConvertToProfileDataObjects(ProductionDetailsBEO m_BootParameters)
        {
            var profile = new ProductionProfile
            {
                DatasetId = m_BootParameters.Profile.DatasetId,
                DpnPrefix = m_BootParameters.Profile.DpnPrefix,
                DpnStartingNumber = m_BootParameters.Profile.DpnStartingNumber,
                HeaderFooterFontSelection = new ProductionSetHeaderFooterFont
                {
                    HeaderFooterColor = m_BootParameters.Profile.HeaderFooterFontSelection != null ? m_BootParameters.Profile.HeaderFooterFontSelection.HeaderFooterColor : null,
                    HeaderFooterFont = m_BootParameters.Profile.HeaderFooterFontSelection != null ? m_BootParameters.Profile.HeaderFooterFontSelection.HeaderFooterFont : null,
                    HeaderFooterFontSize = m_BootParameters.Profile.HeaderFooterFontSelection != null ? m_BootParameters.Profile.HeaderFooterFontSelection.HeaderFooterFontSize : null,
                    HeaderFooterHeight = m_BootParameters.Profile.HeaderFooterFontSelection != null ? m_BootParameters.Profile.HeaderFooterFontSelection.HeaderFooterHeight : 0,
                    HeaderFooterStyle = m_BootParameters.Profile.HeaderFooterFontSelection != null ? (FontStyles)m_BootParameters.Profile.HeaderFooterFontSelection.HeaderFooterStyle : FontStyles.Normal
                },
                ImageType = (ImageType)m_BootParameters.Profile.ImageType,
                IsBurnMarkups = m_BootParameters.Profile.IsBurnMarkups,
                IsIncludeArrowsMarkup = m_BootParameters.Profile.IsIncludeArrowsMarkup,
                IsIncludeBoxesMarkup = m_BootParameters.Profile.IsIncludeBoxesMarkup,
                IsIncludeHighlightsMarkup = m_BootParameters.Profile.IsIncludeHighlightsMarkup,
                IsIncludeLinesMarkup = m_BootParameters.Profile.IsIncludeLinesMarkup,
                IsIncludeReasonsWithMarkup = m_BootParameters.Profile.IsIncludeReasonsWithMarkup,
                IsIncludeRedactionsMarkup = m_BootParameters.Profile.IsIncludeRedactionsMarkup,
                IsIncludeRubberStampMarkup = m_BootParameters.Profile.IsIncludeRubberStampMarkup,
                IsIncludeTextBoxMarkup = m_BootParameters.Profile.IsIncludeTextBoxMarkup,
                IsInsertPlaceHolderPage = m_BootParameters.Profile.IsInsertPlaceHolderPage,
                IsOneImagePerPage = m_BootParameters.Profile.IsOneImagePerPage,
                IsPrintDCNInPlaceHolderPage = m_BootParameters.Profile.IsPrintDCNInPlaceHolderPage,
                IsPrintDPNInPlaceHolderPage = m_BootParameters.Profile.IsPrintDPNInPlaceHolderPage,
                LeftFooter = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected = m_BootParameters.Profile.LeftFooter.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.LeftFooter.IsIncrementNeededInText,
                    Option = (HeaderFooterOptions)m_BootParameters.Profile.LeftFooter.Option,
                    TextPrefix = m_BootParameters.Profile.LeftFooter.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.LeftFooter.TextStartingNumber
                },
                LeftHeader = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected = m_BootParameters.Profile.LeftHeader.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.LeftHeader.IsIncrementNeededInText,
                    Option = (HeaderFooterOptions)m_BootParameters.Profile.LeftHeader.Option,
                    TextPrefix = m_BootParameters.Profile.LeftHeader.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.LeftHeader.TextStartingNumber
                },
                MiddleFooter = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected = m_BootParameters.Profile.MiddleFooter.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.MiddleFooter.IsIncrementNeededInText,
                    Option = (HeaderFooterOptions)m_BootParameters.Profile.MiddleFooter.Option,
                    TextPrefix = m_BootParameters.Profile.MiddleFooter.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.MiddleFooter.TextStartingNumber

                },
                MiddleHeader = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected = m_BootParameters.Profile.MiddleHeader.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.MiddleHeader.IsIncrementNeededInText,
                    Option = (HeaderFooterOptions)m_BootParameters.Profile.MiddleHeader.Option,
                    TextPrefix = m_BootParameters.Profile.MiddleHeader.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.MiddleHeader.TextStartingNumber

                },
                PrintDCNInPlaceHolderPrefferedText = m_BootParameters.Profile.PrintDCNInPlaceHolderPrefferedText,
                ProductionPrefix = m_BootParameters.Profile.ProductionPrefix,
                ProductionSetNumberingType = (ProductionNumbering)m_BootParameters.Profile.ProductionSetNumberingType,
                ProductionStartingNumber = m_BootParameters.Profile.ProductionStartingNumber,
                ProfileId = m_BootParameters.Profile.ProfileId,
                ProfileName = m_BootParameters.Profile.ProfileName,
                RightFooter = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected = m_BootParameters.Profile.RightFooter.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.RightFooter.IsIncrementNeededInText,
                    Option = (HeaderFooterOptions)m_BootParameters.Profile.RightFooter.Option,
                    TextPrefix = m_BootParameters.Profile.RightFooter.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.RightFooter.TextStartingNumber
                },
                RightHeader = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected = m_BootParameters.Profile.RightHeader.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.RightHeader.IsIncrementNeededInText,
                    Option = (HeaderFooterOptions)m_BootParameters.Profile.RightHeader.Option,
                    TextPrefix = m_BootParameters.Profile.RightHeader.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.RightHeader.TextStartingNumber

                },
                TiffImageColor = (TiffImageColor)m_BootParameters.Profile.TiffImageColor
            };
            return profile;
        }
        private static void GetMatterDatasetDetails(ProductionDocumentDetail m_ProductionDocumentDetail, ProductionDetailsBEO m_BootParameters)
        {
            DatasetBEO dataset =
                DataSetBO.GetDataSetDetailForCollectionId(m_BootParameters.OriginalCollectionId);
            m_ProductionDocumentDetail.OriginalCollectionId = dataset.RedactableDocumentSetId;
            //Assign redactable set id as default collection id
            m_ProductionDocumentDetail.DatasetCollectionId = m_BootParameters.OriginalCollectionId;
            //Native set collection id
            m_ProductionDocumentDetail.OriginalDatasetName = dataset.FolderName;
            m_ProductionDocumentDetail.OriginalDatasetId = (int)dataset.FolderID;

            m_ProductionDocumentDetail.lstProductionFields =
                DataSetBO.GetDataSetFields(Convert.ToInt64(m_ProductionDocumentDetail.OriginalDatasetId),
                                           m_ProductionDocumentDetail.ProductionCollectionId);
            m_ProductionDocumentDetail.dataSetBeo =
                DataSetBO.GetDataSetDetailForDataSetId(Convert.ToInt64(m_ProductionDocumentDetail.OriginalDatasetId));
            m_ProductionDocumentDetail.lstDsFieldsBeo =
                DataSetBO.GetDataSetFields(Convert.ToInt64(m_ProductionDocumentDetail.OriginalDatasetId),
                                           m_ProductionDocumentDetail.DatasetCollectionId);
            m_ProductionDocumentDetail.matterBeo =
                MatterBO.GetMatterDetails(m_ProductionDocumentDetail.dataSetBeo.ParentID.ToString(CultureInfo.InvariantCulture));
            m_ProductionDocumentDetail.SearchServerDetails =
                ServerBO.GetSearchServer(m_ProductionDocumentDetail.matterBeo.SearchServer.Id);
        }
        /// <summary>
        /// Recalculate the correct dpn numbers. This is used for dpn numbers that were concatenated together, during multiple production
        /// </summary>
        /// <param name="docList">docList</param>
        /// <param name="baseJobConfig">baseJobConfig</param>
        /// <param name="productionSetDocCount">productionSetDocCount</param>
        private static void RecalculateCorrectDpnNumbers(List<ReconversionProductionDocumentBEO> docList,
                                                         ProductionDetailsBEO baseJobConfig, int productionSetDocCount)
        {
            string dpnPrefix = baseJobConfig.Profile.DpnPrefix;
            int dpnStart = Convert.ToInt32(baseJobConfig.Profile.DpnStartingNumber);
            int dpnEnd = dpnStart + productionSetDocCount - 1;

            //retrieve the correct dpn for each document for reprocessing
            foreach (var d in docList)
            {
                d.DocumentProductionNumber = ParseForCorrectDpnNumber(d.DocumentProductionNumber, dpnPrefix,
                                                                      dpnStart, dpnEnd);
            }
        }
        /// <summary>
        /// Gets the production document list for ID list.
        /// </summary>
        /// <param name="idList">The id list.</param>
        /// <param name="idType">Type of the id.</param>
        /// <param name="matterId">The matter id.</param>
        /// <param name="baseJobConfig">The base job config.</param>
        /// <param name="redactableCollectionId">The redactable collection id.</param>
        /// <param name="jobId"> </param>
        /// <returns></returns>
        public static IEnumerable<ReconversionProductionDocumentBEO> GetProductionDocumentListForIdList(
            List<string> idList, string idType, long matterId,
            ProductionDetailsBEO baseJobConfig, string redactableCollectionId, int jobId)
        {

            //init field id value
            int batesFieldId = -1;
            int batesBeginFieldId = -1;
            int batesEndFieldId = -1;
            int dpnFieldId = -1;

            //bates field: 3004
            var batesField = baseJobConfig.Profile.ProductionFields.FirstOrDefault(f => f.FieldType.DataTypeId == 3004);
            if (batesField != null) batesFieldId = batesField.ID;

            //bates begin: 3005
            var batesBeginField =
                baseJobConfig.Profile.ProductionFields.FirstOrDefault(f => f.FieldType.DataTypeId == 3005);
            if (batesBeginField != null) batesBeginFieldId = batesBeginField.ID;

            //bates end: 3006
            var batesEndField =
                baseJobConfig.Profile.ProductionFields.FirstOrDefault(f => f.FieldType.DataTypeId == 3006);
            if (batesEndField != null) batesEndFieldId = batesEndField.ID;

            //dpn field: 3008
            var dpnField = baseJobConfig.Profile.ProductionFields.FirstOrDefault(f => f.FieldType.DataTypeId == 3008);
            if (dpnField != null) dpnFieldId = dpnField.ID;


            //get the collection id for the native collection
            string nativeCollectionId = baseJobConfig.OriginalCollectionId;


            //find the production collection id at the time of the original production
            string productionCollectionId = baseJobConfig.CollectionId;

            //Get the list of production documents for reprocessing
            var docList = new List<ReconversionProductionDocumentBEO>();

            var vault = VaultRepository.CreateRepository(matterId);

            DataSet dsResult = vault.GetProductionReprocessDocumentList(idList, idType, redactableCollectionId,
                                                                        nativeCollectionId, productionCollectionId,
                                                                        dpnFieldId, batesFieldId, batesBeginFieldId,
                                                                        batesEndFieldId, jobId);

            ReconversionProductionDocumentBEO doc = null;

            //process returned records
            if (dsResult != null && dsResult.Tables.Count > 0)
            {
                foreach (DataRow dr in dsResult.Tables[0].Rows)
                {
                    string docReferenceId = dr[Constants.ColumnDocReferenceId].ToString();

                    if (doc == null || !docReferenceId.Equals(doc.DocumentId))
                    //new document (need to check this due to that multiple rows are returned, one row for each field)
                    {
                        doc = new ReconversionProductionDocumentBEO();
                        doc.DocumentId = docReferenceId;
                        doc.DCNNumber = dr[Constants.DCN].ToString();
                        doc.ProductionPath = dr[Constants.ProductionPath].ToString();
                        docList.Add(doc);
                    }

                    int fieldId = dr[Constants.ColumnFieldId] != DBNull.Value
                                      ? Convert.ToInt32(dr[Constants.ColumnFieldId].ToString())
                                      : -1;
                    string fieldValue = dr[Constants.ColumnFieldvalue] != DBNull.Value
                                            ? dr[Constants.ColumnFieldvalue].ToString()
                                            : "";

                    if (dpnFieldId > 0 && dpnFieldId == fieldId) doc.DocumentProductionNumber = fieldValue;
                    if (batesFieldId > 0 && batesFieldId == fieldId) doc.AllBates = fieldValue;
                    if (batesBeginFieldId > 0 && batesBeginFieldId == fieldId) doc.StartingBatesNumber = fieldValue;
                    if (batesEndFieldId > 0 && batesEndFieldId == fieldId) doc.EndingBatesNumber = fieldValue;
                }


                //if any of the bates or dpn contain comma,  ie, contain multiple bates or dpn
                string bates = docList[0].StartingBatesNumber;
                string dpn = docList[0].DocumentProductionNumber;

                //extrac the correct dpn if dpn contain concatenated ids, which could happen because multiple productions done on 
                //the same collection, with same dpn field name
                //sample dpn sequence: "dd003, dd103, k45k005, k45k105, dd203, kkk001, ddd002, dd303, k45k205"
                if (dpn != null && dpn.Contains(","))
                {
                    RecalculateCorrectDpnNumbers(docList, baseJobConfig,
                                                 vault.GetDocumentCountForCollection(new Guid(productionCollectionId)));
                }

                //extrac the correct bates info if bates contain concatenated ids, which could happen because multiple productions done on 
                //the same collection, with same bates field name
                //if bates is configures, the file name for the production contain the beginBates number. 
                if ((bates != null && bates.Contains(",")))
                {
                    RecalculateCorrectBatesNumbers(docList);
                }

            }

            return docList;
        }
        /// <summary>
        /// Gets the production document list.
        /// </summary>
        /// <param name="filePath">The file path.</param>
        /// <param name="selectionMode">The selection mode.</param>
        /// <param name="matterId">The matter id.</param>
        /// <param name="baseJobConfig">The base job config.</param>
        /// <param name="redactableCollectionId">The redactable collection id.</param>
        /// <param name="jobId"></param>
        /// <param name="filters"> </param>
        /// <returns></returns>
        public virtual IEnumerable<ReconversionProductionDocumentBEO> GetProductionDocumentList(
            string filePath, ReProcessJobSelectionMode selectionMode, long matterId,
            ProductionDetailsBEO baseJobConfig, string redactableCollectionId, int jobId,string filters=null)
        {
            switch (selectionMode)
            {
                case ReProcessJobSelectionMode.Selected:
                    {
                        var docidList = GetDocumentIdListFromFile(filePath, Constants.DocId);
                        foreach (var v in GetProductionDocumentListForIdList(
                            docidList, Constants.DocId, matterId, baseJobConfig, redactableCollectionId, jobId))
                            yield return v;
                        break;
                    }
                case ReProcessJobSelectionMode.Csv:
                case ReProcessJobSelectionMode.CrossReference:
                    {
                        var dictIds = GetDocumentIdListFromFile(filePath, Constants.DCN, Constants.DocumentSetName);

                        //put all value in one list. Since there is only one production set, it should all be the same collectionId
                        var ids = new List<string>();
                        foreach (var dictId in dictIds)
                        {
                            ids.AddRange(dictId.Value);
                        }
                        foreach (var v in GetProductionDocumentListForIdList(
                            ids, Constants.DCN, matterId, baseJobConfig, redactableCollectionId, jobId)) yield return v;
                        break;
                    }
                case ReProcessJobSelectionMode.All:
                    IEnumerable<ReconversionProductionDocumentBEO> reconversionProductionDocumentBeos = null;
                    if (!string.IsNullOrEmpty(filters))
                    {
                        var documentVaultManager = new DocumentVaultManager();
                        documentVaultManager.Init(matterId);

                        IEnumerable<DocumentConversionLogBeo> documentConversionLogBeos =
                            documentVaultManager.GetConversionResultsWithFilters(matterId, jobId, null, null, filters
                                );
                        var docidList =
                            documentConversionLogBeos.Select(
                                documentConversionLogBeo =>
                                documentConversionLogBeo.DocId.ToString(CultureInfo.InvariantCulture)).ToList();
                        reconversionProductionDocumentBeos = GetProductionDocumentListForIdList(
                            docidList, Constants.DocId, matterId, baseJobConfig, redactableCollectionId, jobId);
                    }
                    else
                    {
                        reconversionProductionDocumentBeos = GetProductionDocumentListForIdList
                            (
                                null, "ALL", matterId, baseJobConfig, redactableCollectionId, jobId);
                    }
                    if (reconversionProductionDocumentBeos == null) yield return null;
                    foreach (var reConversionProductionBeo in reconversionProductionDocumentBeos)
                        yield return reConversionProductionBeo;
                    break;
            }
        }
        /// <summary>
        /// Begins the work.
        /// </summary>
        protected override void BeginWork()
        {
            base.BeginWork();
            _mBootParameters = GetProductionDetailsBusinessEntity(BootParameters);
            _mBootParameters.ShouldNotBe(null);
            _mBootParameters.Profile.ShouldNotBe(null);
            _mBootParameters.Profile.ProductionSetName.ShouldNotBeEmpty();
            if (!Directory.Exists(_mBootParameters.Profile.ProductionSetLocation))
            {
                Tracer.Warning(Constants.ProductionsetStartError);
                LogMessage(false, ConMessageProductionSetLocation);
                throw new Exception(ConMessageProductionSetLocation);
            }
            _vaultManager = EVUnityContainer.Resolve<IDocumentVaultManager>(Constants.DocumentVaultManager);
            _mProductionDocumentDetail = ProductionStartupHelper.ConstructProductionModelDocument(_mBootParameters);
            _batesPrefix = _mProductionDocumentDetail.Profile.ProductionPrefix ?? string.Empty;
            _dpnPrefix = _mProductionDocumentDetail.Profile.DpnPrefix ?? string.Empty;
            _mCreatedBy = _mBootParameters.CreatedBy;
            _mDatasetId = _mBootParameters.SearchCriteria.SelectedDatasets[0];
            _isPathValid = true;
            GetVolumeSettings(_mProductionDocumentDetail.ExtractionLocation);

            var dataset = DataSetBO.GetDataSetDetailForDataSetId(Convert.ToInt64(_mDatasetId));
            var field = dataset.DatasetFieldList.FirstOrDefault(f => f.FieldType.DataTypeId == Constants.DCNFieldTypeId);
            if (field != null) _dcnField = field.Name;

            MockSession();
            //CNEV3.1 - Design Specification - Production update - Call Production BO methods for creating the production tags 
            //CNEV3.1 - Design Specification - Production update - Refactor the worker such a way that worker is just a shim and it just calls the respective business methods 
           

            ReadProductionBatchSize();
        }
        /// <summary>
        /// Converts to profile data objects.
        /// </summary>
        /// <returns></returns>
        private static ProductionProfile ConvertToProfileDataObjects(ProductionDetailsBEO m_BootParameters)
        {
            var profile = new ProductionProfile
            {
                DatasetId                 = m_BootParameters.Profile.DatasetId,
                DpnPrefix                 = m_BootParameters.Profile.DpnPrefix,
                DpnStartingNumber         = m_BootParameters.Profile.DpnStartingNumber,
                HeaderFooterFontSelection = new ProductionSetHeaderFooterFont
                {
                    HeaderFooterColor    = m_BootParameters.Profile.HeaderFooterFontSelection != null ? m_BootParameters.Profile.HeaderFooterFontSelection.HeaderFooterColor : null,
                    HeaderFooterFont     = m_BootParameters.Profile.HeaderFooterFontSelection != null ? m_BootParameters.Profile.HeaderFooterFontSelection.HeaderFooterFont : null,
                    HeaderFooterFontSize = m_BootParameters.Profile.HeaderFooterFontSelection != null ? m_BootParameters.Profile.HeaderFooterFontSelection.HeaderFooterFontSize : null,
                    HeaderFooterHeight   = m_BootParameters.Profile.HeaderFooterFontSelection != null ? m_BootParameters.Profile.HeaderFooterFontSelection.HeaderFooterHeight : 0,
                    HeaderFooterStyle    = m_BootParameters.Profile.HeaderFooterFontSelection != null ? (FontStyles)m_BootParameters.Profile.HeaderFooterFontSelection.HeaderFooterStyle : FontStyles.Normal
                },
                ImageType                   = (ImageType)m_BootParameters.Profile.ImageType,
                IsBurnMarkups               = m_BootParameters.Profile.IsBurnMarkups,
                IsIncludeArrowsMarkup       = m_BootParameters.Profile.IsIncludeArrowsMarkup,
                IsIncludeBoxesMarkup        = m_BootParameters.Profile.IsIncludeBoxesMarkup,
                IsIncludeHighlightsMarkup   = m_BootParameters.Profile.IsIncludeHighlightsMarkup,
                IsIncludeLinesMarkup        = m_BootParameters.Profile.IsIncludeLinesMarkup,
                IsIncludeReasonsWithMarkup  = m_BootParameters.Profile.IsIncludeReasonsWithMarkup,
                IsIncludeRedactionsMarkup   = m_BootParameters.Profile.IsIncludeRedactionsMarkup,
                IsIncludeRubberStampMarkup  = m_BootParameters.Profile.IsIncludeRubberStampMarkup,
                IsIncludeTextBoxMarkup      = m_BootParameters.Profile.IsIncludeTextBoxMarkup,
                IsInsertPlaceHolderPage     = m_BootParameters.Profile.IsInsertPlaceHolderPage,
                IsOneImagePerPage           = m_BootParameters.Profile.IsOneImagePerPage,
                IsPrintDCNInPlaceHolderPage = m_BootParameters.Profile.IsPrintDCNInPlaceHolderPage,
                IsPrintDPNInPlaceHolderPage = m_BootParameters.Profile.IsPrintDPNInPlaceHolderPage,
                LeftFooter                  = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected    = m_BootParameters.Profile.LeftFooter.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.LeftFooter.IsIncrementNeededInText,
                    Option             = (HeaderFooterOptions)m_BootParameters.Profile.LeftFooter.Option,
                    TextPrefix         = m_BootParameters.Profile.LeftFooter.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.LeftFooter.TextStartingNumber
                },
                LeftHeader = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected    = m_BootParameters.Profile.LeftHeader.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.LeftHeader.IsIncrementNeededInText,
                    Option             = (HeaderFooterOptions)m_BootParameters.Profile.LeftHeader.Option,
                    TextPrefix         = m_BootParameters.Profile.LeftHeader.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.LeftHeader.TextStartingNumber
                },
                MiddleFooter = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected    = m_BootParameters.Profile.MiddleFooter.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.MiddleFooter.IsIncrementNeededInText,
                    Option             = (HeaderFooterOptions)m_BootParameters.Profile.MiddleFooter.Option,
                    TextPrefix         = m_BootParameters.Profile.MiddleFooter.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.MiddleFooter.TextStartingNumber
                },
                MiddleHeader = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected    = m_BootParameters.Profile.MiddleHeader.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.MiddleHeader.IsIncrementNeededInText,
                    Option             = (HeaderFooterOptions)m_BootParameters.Profile.MiddleHeader.Option,
                    TextPrefix         = m_BootParameters.Profile.MiddleHeader.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.MiddleHeader.TextStartingNumber
                },
                PrintDCNInPlaceHolderPrefferedText = m_BootParameters.Profile.PrintDCNInPlaceHolderPrefferedText,
                ProductionPrefix           = m_BootParameters.Profile.ProductionPrefix,
                ProductionSetNumberingType = (ProductionNumbering)m_BootParameters.Profile.ProductionSetNumberingType,
                ProductionStartingNumber   = m_BootParameters.Profile.ProductionStartingNumber,
                ProfileId   = m_BootParameters.Profile.ProfileId,
                ProfileName = m_BootParameters.Profile.ProfileName,
                RightFooter = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected    = m_BootParameters.Profile.RightFooter.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.RightFooter.IsIncrementNeededInText,
                    Option             = (HeaderFooterOptions)m_BootParameters.Profile.RightFooter.Option,
                    TextPrefix         = m_BootParameters.Profile.RightFooter.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.RightFooter.TextStartingNumber
                },
                RightHeader = new ProductionSetHeaderFooter
                {
                    DatasetFieldSelected    = m_BootParameters.Profile.RightHeader.DatasetFieldSelected,
                    IsIncrementNeededInText = m_BootParameters.Profile.RightHeader.IsIncrementNeededInText,
                    Option             = (HeaderFooterOptions)m_BootParameters.Profile.RightHeader.Option,
                    TextPrefix         = m_BootParameters.Profile.RightHeader.TextPrefix,
                    TextStartingNumber = m_BootParameters.Profile.RightHeader.TextStartingNumber
                },
                TiffImageColor = (TiffImageColor)m_BootParameters.Profile.TiffImageColor
            };

            return(profile);
        }
        private static void GetMatterDatasetDetails(ProductionDocumentDetail m_ProductionDocumentDetail, ProductionDetailsBEO m_BootParameters)
        {
            DatasetBEO dataset =
                DataSetBO.GetDataSetDetailForCollectionId(m_BootParameters.OriginalCollectionId);

            m_ProductionDocumentDetail.OriginalCollectionId = dataset.RedactableDocumentSetId;
            //Assign redactable set id as default collection id
            m_ProductionDocumentDetail.DatasetCollectionId = m_BootParameters.OriginalCollectionId;
            //Native set collection id
            m_ProductionDocumentDetail.OriginalDatasetName = dataset.FolderName;
            m_ProductionDocumentDetail.OriginalDatasetId   = (int)dataset.FolderID;

            m_ProductionDocumentDetail.lstProductionFields =
                DataSetBO.GetDataSetFields(Convert.ToInt64(m_ProductionDocumentDetail.OriginalDatasetId),
                                           m_ProductionDocumentDetail.ProductionCollectionId);
            m_ProductionDocumentDetail.dataSetBeo =
                DataSetBO.GetDataSetDetailForDataSetId(Convert.ToInt64(m_ProductionDocumentDetail.OriginalDatasetId));
            m_ProductionDocumentDetail.lstDsFieldsBeo =
                DataSetBO.GetDataSetFields(Convert.ToInt64(m_ProductionDocumentDetail.OriginalDatasetId),
                                           m_ProductionDocumentDetail.DatasetCollectionId);
            m_ProductionDocumentDetail.matterBeo =
                MatterBO.GetMatterDetails(m_ProductionDocumentDetail.dataSetBeo.ParentID.ToString(CultureInfo.InvariantCulture));
            m_ProductionDocumentDetail.SearchServerDetails =
                ServerBO.GetSearchServer(m_ProductionDocumentDetail.matterBeo.SearchServer.Id);
        }