private static int CompareArticlesDependency(
            IPayrollArticle articleOne, IPayrollArticle[] relatedOne, SymbolName[] summaryOne,
            IPayrollArticle articleTwo, IPayrollArticle[] relatedTwo, SymbolName[] summaryTwo)
        {
            if (articleOne.Category() != articleTwo.Category())
            {
                int compareResult = articleOne.Category().CompareTo(articleTwo.Category());

                return(compareResult);
            }
            else if (RelatedArticlesForCode(relatedOne, articleTwo.ArticleCode()))
            {
                return(1);
            }
            else if (RelatedArticlesForCode(relatedTwo, articleOne.ArticleCode()))
            {
                return(-1);
            }
            else if (SummaryArticlesForCode(summaryOne, articleTwo.ArticleCode()))
            {
                return(-1);
            }
            else if (SummaryArticlesForCode(summaryTwo, articleOne.ArticleCode()))
            {
                return(1);
            }
            else
            {
                int compareResult = articleOne.ArticleCode().CompareTo(articleTwo.ArticleCode());

                return(compareResult);
            }
        }
Example #2
0
        public void LogPendingArticles(IPayrollArticle article, SymbolName[] callings, IPayrollArticle[] articles, string testName)
        {
            OpenLogStream(testName);

            using (StreamWriter logWriter = new StreamWriter(LogFileStream))
            {
                string lineDefinition = "\n--- begin ---";

                lineDefinition += ArticleListCodesLogger.LogArticleInfo(article);

                lineDefinition += "\n--- CALLING PATH ---";

                lineDefinition += ArticleListCodesLogger.LogArrayOfSymbols(callings);

                lineDefinition += "\n--- CALCULATED ---";

                lineDefinition += ArticleListCodesLogger.LogArrayOfArticles(article.ArticleCode(), articles);

                if (lineDefinition.Length > 0)
                {
                    logWriter.WriteLine(lineDefinition);
                }

                logWriter.WriteLine("--- end ---");
            }
        }
Example #3
0
 public static void LogListArticlesUnderArticle(IProcessConfigLogger logger, IPayrollArticle article, IPayrollArticle[] articles, string testName)
 {
     if (logger != null)
     {
         logger.LogListArticlesUnderArticle(article, articles, testName);
     }
 }
Example #4
0
 public static void LogRelatedArticles(IProcessConfigLogger logger, IPayrollArticle article, IPayrollArticle[] articles, string testName)
 {
     if (logger != null)
     {
         logger.LogRelatedArticles(article, articles, testName);
     }
 }
Example #5
0
 public static void LogPendingArticles(IProcessConfigLogger logger, IPayrollArticle article, SymbolName[] callings, IPayrollArticle[] articles, string testName)
 {
     if (logger != null)
     {
         logger.LogPendingArticles(article, callings, articles, testName);
     }
 }
Example #6
0
        private static IPayrollArticle[] CollectFromPending(IDictionary <uint, IPayrollArticle[]> relatedDict,
                                                            IPayrollArticle article, SymbolName[] articlePath, IDictionary <uint, IPayrollArticle[]> pendingDict, IProcessConfigLogger logger)
        {
            uint articleCode = article.ArticleCode();

            bool skipExecToRelated = relatedDict.ContainsKey(articleCode);

            if (skipExecToRelated)
            {
                return(null);
            }

            VerifyCircularDependency(article, articlePath, articleCode);

            var initialArticles = new IPayrollArticle[] { article };

            var callingArticles = articlePath.Concat(new SymbolName[] { article.ArticleSymbol() }).ToArray();

            var pendingArticles = FindArticlesInDictionary(pendingDict, article);

            var collectArticles = pendingArticles.Aggregate(initialArticles,
                                                            (agr, articleSource) => agr.Concat(ResolveArticleDependency(relatedDict, articleSource, callingArticles, pendingDict, logger)).ToArray());

            var relatedArticles = collectArticles.Distinct().OrderBy(x => x.ArticleSymbol()).ToArray();

            return(relatedArticles);
        }
Example #7
0
            public static string LogArticleInfo(IPayrollArticle article)
            {
                string calcDefinition = Enum.ToObject(typeof(ProcessCategory), article.Category()).ToString();

                string lineDefinition = string.Format("{0}\t{1}\n", article.ArticleName(), calcDefinition);

                return(lineDefinition);
            }
Example #8
0
        public static IBookResult[] BuildListWithEmptyResult(IBookIndex element, IPayrollArticle article)
        {
            IBookResult result = BookResultBuilder.CreateEmptyResult(element, article);

            IBookResult[] resultList = BuildListWithResult(result);

            return(resultList);
        }
Example #9
0
            public static string LogRelatedArticlesInfo(IPayrollArticle article)
            {
                var articles = article.RelatedArticles();

                string lineDefinition = ArticlesRelatedListLogger.LogArrayOfArticles(articles);

                return(lineDefinition);
            }
Example #10
0
 public virtual IBookResult[] CallEvaluate(IProcessConfig config, IEngineProfile engine,
                                           IPayrollArticle article, IBookIndex element, ITargetValues values, IResultStream results)
 {
     if (__evaluate != null)
     {
         return(__evaluate(this, config, engine, article, element, values, results));
     }
     return(GeneralModule.EMPTY_RESULT_LIST);
 }
Example #11
0
        private static void VerifyCircularDependency(IPayrollArticle article, SymbolName[] articlePath, uint articleCode)
        {
            bool articlesCircle = (articlePath.Count(x => x.Code == articleCode) > 0);

            if (articlesCircle)
            {
                throw new EngineProcessCircleException("Circular article reference", articlePath, article.ArticleSymbol());
            }
        }
Example #12
0
            public static string LogArticleInfo(IPayrollArticle article)
            {
                string relatedDescrip = article.RelatedArticles().Length.ToString();

                string lineDefinition = string.Format("{0} - {1}\n", article.ConceptName(), relatedDescrip);

                lineDefinition += LogRelatedArticlesInfo(article);

                return(lineDefinition);
            }
Example #13
0
        public BookTarget(IBookIndex bookElement, IPayrollArticle bookArticle, IPayrollConcept bookConcept, ITargetValues bookValues)
        {
            __element = bookElement;

            __article = bookArticle;

            __concept = bookConcept;

            __values = bookValues;
        }
        public IPayrollArticle ConfigureArticle(SymbolName article, SymbolName concept, ProcessCategory category,
                                                SymbolName[] pendingNames, SymbolName[] summaryNames,
                                                bool taxingIncome, bool healthIncome, bool socialIncome, bool grossSummary, bool nettoSummary, bool nettoDeducts)
        {
            IPayrollArticle articleInstance = GeneralPayrollArticle.CreateArticle(
                article, concept, category, pendingNames, summaryNames,
                taxingIncome, healthIncome, socialIncome, grossSummary, nettoSummary, nettoDeducts);

            return(ConfigureModel(articleInstance, article.Code));
        }
Example #15
0
            public static IPayrollArticle[] BuildArticleStream(IDictionary <IBookIndex, IBookTarget> targets)
            {
                var initialStream = new IPayrollArticle[0];

                var articleStream = targets.Aggregate(initialStream,
                                                      (agr, targetPair) => ConcatArticles(agr, targetPair.Value).ToArray());

                var articleUnique = articleStream.Distinct().ToArray();

                return(articleUnique);
            }
Example #16
0
            public static string LogArticleInfo(IBookTarget target)
            {
                IPayrollArticle article = target.Article();

                IBookIndex element = target.Element();

                string lineDefinition = string.Format("\n--- {0} - {1} - {2} - {3}",
                                                      article.ArticleName(), article.ConceptName(), article.ArticleCode(), element.ToString());

                return(lineDefinition);
            }
Example #17
0
        public void Should_Return_UnknownArticle_As_TypeOf()
        {
            SymbolName testSpecName = ConfigSetCzArticleName.REF_UNKNOWN;

            Assembly configAssembly = typeof(ProcessConfigSetCzModule).Assembly;

            IPayrollArticle testArticle = PayrollArticleFactory.ArticleFor(configAssembly, testSpecName.Name);

            Type testTypeOfArticle = testArticle.GetType();

            Assert.AreSame(typeof(UnknownArticle), testTypeOfArticle);
        }
Example #18
0
            public static string LogArticleListInfo(IPayrollArticle article, IPayrollArticle[] articles)
            {
                string lineDefinition = LogHeaderInfo(article, articles);

                //lineDefinition += "----------------------------";

                lineDefinition += LogBodyOfArticles(articles);

                //lineDefinition += "----------------------------";

                return(lineDefinition);
            }
Example #19
0
        public BookResult(IBookIndex element, IPayrollArticle article, IResultValues values, string[] targetValues, string[] resultValues)
        {
            __element = element;

            __article = article;

            __values = values;

            __targetValues = targetValues;

            __resultValues = resultValues;
        }
Example #20
0
        public void Should_Return_UnknownArticle_From_Models()
        {
            SymbolName testSpecName = ArticleSymbolName.REF_UNKNOWN;

            IPayrollArticle testArticle = testConfig.FindArticle(testSpecName.Code);

            Type testTypeOfArticle = testArticle.GetType();

            Assert.AreSame(typeof(UnknownArticle), testTypeOfArticle);

            Assert.AreEqual(testArticle.ArticleCode(), testSpecName.Code);
        }
Example #21
0
            static public IBookTarget BuildTargetFromElement(IBookIndex element, ITargetValues values, IProcessConfig config)
            {
                uint articleCode = element.Code();

                IPayrollArticle targetArticle = config.FindArticle(articleCode);

                IPayrollConcept targetConcept = config.FindConcept(targetArticle.ConceptCode());

                IBookTarget target = TargetFactory.BuildTargetWithValues(element, targetArticle, targetConcept, values);

                return(target);
            }
Example #22
0
            public static string LogArticleValuesNames(IPayrollArticle article)
            {
                string articleName = PayrollArticleFactory.ClassNameFor(article.ArticleName());

                string lineDefinition = string.Format("\npublic static ITargetValues Create{0}Values()", articleName);

                lineDefinition += " {\n";

                lineDefinition += "\treturn new TargetValues (dateFrom, dateEnds, timeWeekly, timeWorked, timeAbsent, amountMonthly,\n\t\t\t\tcodeInterests, codeResidency, codeMandatory, codeStatement, codeHandicaps, codeCardinals);\n";

                lineDefinition += "}\n";

                return(lineDefinition);
            }
Example #23
0
            public static string LogConceptInfo(IPayrollConcept concept, IPayrollArticle article)
            {
                string calcDefinition = Enum.ToObject(typeof(ProcessCategory), article.Category()).ToString();

                string lineDefinition = string.Format("{0}\t{1}\t{2}\t", article.ArticleName(), concept.ConceptName(), calcDefinition);

                lineDefinition += LogPendingArticlesInfo(article);

                lineDefinition += LogSummaryArticlesInfo(article);

                lineDefinition += LogSpecValuesInfo(concept);

                return(lineDefinition);
            }
Example #24
0
            public static string LogArticleEvalNames(IPayrollArticle article)
            {
                string articleName = PayrollArticleFactory.ClassNameFor(article.ArticleName());

                string lineDefinition = string.Format("\npublic static GeneralModule.EvaluateDelegate {0}Evaluation = (concept, config, engine, article, element, targets, results) =>", articleName);

                lineDefinition += " {\n";

                lineDefinition += "\treturn BookResultBase.EMPTY_RESULT_LIST;\n";

                lineDefinition += "};\n";

                return(lineDefinition);
            }
Example #25
0
        public void LogListArticlesUnderArticle(IPayrollArticle article, IPayrollArticle[] articles, string testName)
        {
            OpenLogStream(testName);

            using (StreamWriter logWriter = new StreamWriter(LogFileStream))
            {
                //logWriter.WriteLine ("\n--- begin ---");

                string lineDefinition = ArticlesRelatedListLogger.LogArticleListInfo(article, articles);

                logWriter.WriteLine(lineDefinition);

                //logWriter.WriteLine ("--- end ---");
            }
        }
        public static int CompareArticles(IPayrollArticle entryOne, IPayrollArticle entryTwo)
        {
            IPayrollArticle articleOne = entryOne;

            IPayrollArticle[] relatedOne = entryOne.RelatedArticles();

            SymbolName[] summaryOne = articleOne.SummaryArticleNames();

            IPayrollArticle articleTwo = entryTwo;

            IPayrollArticle[] relatedTwo = entryTwo.RelatedArticles();

            SymbolName[] summaryTwo = articleTwo.SummaryArticleNames();

            return(CompareArticlesDependency(articleOne, relatedOne, summaryOne, articleTwo, relatedTwo, summaryTwo));
        }
Example #27
0
            public static string LogHeaderInfo(IPayrollArticle article, IPayrollArticle[] articles)
            {
                string lineCountInfo = "";

                if (articles == null)
                {
                    lineCountInfo = "empty";
                }
                else
                {
                    lineCountInfo = string.Format("{0}", articles.Length);
                }
                string lineDefinition = string.Format("count - {0} - {1} - {2} - {3}", lineCountInfo, article.ArticleName(), article.ConceptName(), article.ConceptCode());

                return(lineDefinition);
            }
        public static int CompareDependency(Tuple <IPayrollArticle, IPayrollArticle[]> entryOne, Tuple <IPayrollArticle, IPayrollArticle[]> entryTwo)
        {
            IPayrollArticle articleOne = entryOne.Item1;

            IPayrollArticle[] relatedOne = entryOne.Item2;

            SymbolName[] summaryOne = articleOne.SummaryArticleNames();

            IPayrollArticle articleTwo = entryTwo.Item1;

            IPayrollArticle[] relatedTwo = entryTwo.Item2;

            SymbolName[] summaryTwo = articleTwo.SummaryArticleNames();

            return(CompareArticlesDependency(articleOne, relatedOne, summaryOne, articleTwo, relatedTwo, summaryTwo));
        }
Example #29
0
            public static string LogSummaryArticlesInfo(IPayrollArticle parentArticle)
            {
                string lineDefinition = "";

                var articles = parentArticle.SummaryArticleNames();

                int articlesCount = articles.Length;

                foreach (var article in articles)
                {
                    lineDefinition = string.Format("{0}\t", article.Name);
                }
                for (int emptyColumn = articlesCount; emptyColumn < 1; emptyColumn++)
                {
                    lineDefinition = string.Format("\t");
                }
                return(lineDefinition);
            }
Example #30
0
        private static IPayrollArticle[] CollectFromRelated(IDictionary <uint, IPayrollArticle[]> relatedDict,
                                                            IPayrollArticle article, IDictionary <uint, IPayrollArticle[]> pendingDict)
        {
            uint articleCode = article.ArticleCode();

            bool skipExecToPending = !relatedDict.ContainsKey(articleCode);

            if (skipExecToPending)
            {
                return(null);
            }

            var initialArticles = new IPayrollArticle[] { article };

            var relatedArticles = FindArticlesInDictionary(relatedDict, article);

            return(initialArticles.Concat(relatedArticles).ToArray());
        }