예제 #1
0
        public static bool isValidCandidateForField(string field, string candidate)
        {
            int fieldIndex = getIndexForField(field);

            switch (fieldIndex)
            {
            case 3:    //Security Code
                return(MasterListManager.isExistSecurityCode(candidate));

            case 5:    //Contract Type
                return(ContractNote.isEqual(candidate, "SELL") || ContractNote.isEqual(candidate, "BUY"));
            }
            if (fieldType[fieldIndex] == 'C')
            {
                return(ContractNote.getValidationOfCurrency(ContractNote.getAdjustedCurrency(candidate)));
            }
            if (fieldType[fieldIndex] == 'D')
            {
                return(ContractNote.getValidationOfDate(ContractNote.getAdjustedDate(candidate)));
            }
            if (fieldType[fieldIndex] == 'M')
            {
                if (candidate.Length >= 4 && candidate[candidate.Length - 4] == '-')
                {
                    candidate = candidate.Remove(candidate.Length - 4, 1).Substring(1);
                }
                return(candidate.Length > 1 && ContractNote.getValidationOfNumber(candidate.Substring(1)));
            }
            return(candidate.Length > 0);
        }
예제 #2
0
 public ContractNoteItemManager(ContractNote contractNote)
 {
     masterListManager = new MasterListManager();
     this.contractNote = contractNote;
     for (int i = 0; i < FIELD_COUNT; i++)
     {
         contractNoteItems[i] = new ContractNoteItem(fields[i]);
     }
     clear();
 }
예제 #3
0
 public static int getIndexForField(string field)
 {
     for (int i = 0; i < FIELD_COUNT; i++)
     {
         if (ContractNote.isEqual(field, fields[i]))
         {
             return(i);
         }
     }
     return(-1);
 }
예제 #4
0
 public bool fillOutContractNoteItems(ContractNote contractNote, List <Word> wordList)
 {
     if (!isInstance(wordList))
     {
         return(false);
     }
     for (int i = 0; i < contractNoteTemplateFields.Count; i++)
     {
         contractNoteTemplateFields[i].fillOutContractNoteItems(contractNote, wordList);
     }
     return(true);
 }
예제 #5
0
 public void fillOutContractNoteItems(ContractNote contractNote, List <Word> wordList)
 {
     currentFieldName = fieldName;
     for (int i = 0; i < contractNoteTemplateFieldCandidates.Count; i++)
     {
         string candidate = contractNoteTemplateFieldCandidates[i].getCandidate(wordList);
         if (candidate == null)
         {
             continue;
         }
         contractNote.contractNoteItemManager.setValueForField(fieldName, candidate);
         return;
     }
 }
예제 #6
0
 public void searchSecurityInfo(string code, string name, out string securityCode, out string securityName)
 {
     name = getFilteredName(name);
     for (int i = 0; i < count; i++)
     {
         if (ContractNote.isEqual(securityNameList[i], name, 0.95))
         {
             securityCode = securityCodeList[i];
             securityName = securityNameList[i];
             return;
         }
     }
     securityCode = getFilteredCode(code);
     securityName = name;
 }
예제 #7
0
 bool isInstance(List <Word> wordList)
 {
     for (int i = 0; i < wordList.Count; i++)
     {
         if (ContractNote.isEqual(contractNoteTemplateId, wordList[i].word))
         {
             return(true);
         }
         if (wordList[i].word.Contains(contractNoteTemplateId))
         {
             return(true);
         }
     }
     return(false);
 }
        void adjustWords1()
        {
            string plainText = extractPlainText(tempPdfFilePath);

            char[]        lineSeparatingChars = { '\n' };
            char[]        wordSeparatingChars = { ' ' };
            string[]      lines = plainText.Split(lineSeparatingChars, StringSplitOptions.RemoveEmptyEntries);
            List <string> wordCombinationList = new List <string>();

            foreach (string line in lines)
            {
                string[] words = line.Split(wordSeparatingChars, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < words.Length; i++)
                {
                    string wordCombination = "";
                    for (int j = i; j < words.Length; j++)
                    {
                        wordCombination += (i == j ? "" : " ") + words[j];
                        wordCombinationList.Add(wordCombination);
                    }
                }
            }
            for (int i = 0; i < completedWordList.Count; i++)
            {
                double bestSimilarity    = 0;
                int    bestSimilarWordId = 0;
                string agent1            = Regex.Replace(completedWordList[i].word, @"[^0-9a-zA-Z$@]+", "");
                for (int j = 0; j < wordCombinationList.Count; j++)
                {
                    string agent2     = Regex.Replace(wordCombinationList[j], @"[^0-9a-zA-Z$@]+", "");
                    double similarity = ContractNote.getSimilarity(agent1, agent2);
                    if (bestSimilarity < similarity)
                    {
                        bestSimilarity    = similarity;
                        bestSimilarWordId = j;
                    }
                }
                if (bestSimilarity > 0.8)
                {
                    completedWordList[i].word = wordCombinationList[bestSimilarWordId];
                }
            }
        }
        public string getCandidate(ContractNoteTemplateFieldCandidate fieldCandidate, List <Word> wordList)
        {
            if (!ContractNote.isEqual(fieldCandidate.key, word))
            {
                return(null);
            }

            string referenceWord = findAdjacencyWord(fieldCandidate, wordList, fieldCandidate.referenceDirection);

            if (referenceWord == null)
            {
                return(null);
            }
            if (!referenceWord.Equals("NULL") && !ContractNote.isPrefix(fieldCandidate.referenceFieldPrefix, referenceWord))
            {
                return(null);
            }

            return(findAdjacencyWord(fieldCandidate, wordList, fieldCandidate.valueDirection, false));
        }
예제 #10
0
        public void completeContractNoteItems(string pdfFilePath)
        {
            this.pdfFilePath = pdfFilePath;
            templateIsFound  = true;
            Rule rule = contractNote.ruleManager.getRuleWithSource(Path.GetDirectoryName(pdfFilePath));

            contractNoteItems[0].Value = rule.Instance;
            string securityCode, securityName;

            masterListManager.searchSecurityInfo(contractNoteItems[3].Value, contractNoteItems[4].Value, out securityCode, out securityName);
            contractNoteItems[3].Value  = securityCode;
            contractNoteItems[4].Value  = securityName;
            contractNoteItems[5].Value  = contractNoteItems[5].Value.Replace(" ", "");
            contractNoteItems[6].Value  = ContractNote.getAdjustedDate(contractNoteItems[6].Value);
            contractNoteItems[7].Value  = ContractNote.getAdjustedDate(contractNoteItems[7].Value);
            contractNoteItems[8].Value  = ContractNote.getAdjustedNumber(contractNoteItems[8].Value);
            contractNoteItems[9].Value  = ContractNote.getAdjustedCurrency(contractNoteItems[9].Value);
            contractNoteItems[10].Value = ContractNote.getAdjustedCurrency(contractNoteItems[10].Value);
            contractNoteItems[12].Value = ContractNote.getAdjustedCurrency(contractNoteItems[12].Value);
            contractNoteItems[13].Value = ContractNote.getAdjustedCurrency(contractNoteItems[13].Value);
            contractNoteItems[18].Value = ContractNote.getAdjustedNumber(contractNoteItems[18].Value);
            contractNoteItems[19].Value = ContractNote.getAdjustedCurrency(contractNoteItems[19].Value);
            contractNoteItems[23].Value = string.Format(@"{0}-{1}-{2}-{3}", contractNoteItems[0].Value, contractNoteItems[16].Value, contractNoteItems[1].Value, contractNoteItems[14].Value);
        }
예제 #11
0
        public MainWindow()
        {
            InitializeComponent();
            createFieldTextBoxes();

            string applicationName = AppDomain.CurrentDomain.FriendlyName;
            string processName     = applicationName.Substring(0, applicationName.Length - 4);

            if (Process.GetProcessesByName(processName).Length > 1)
            {
                MessageBox.Show(string.Format("{0} is already running", processName));
                Application.Current.Shutdown();
            }

            DateTime expireDate = new DateTime(2017, 3, 29, 12, 0, 0);
            DateTime today      = DateTime.Now;

            if (today > expireDate)
            {
                //MessageBox.Show(@"Please Contact '*****@*****.**'", "Demo Expired");
                //Application.Current.Shutdown();
            }

            SplashWindow splashWindow = new SplashWindow();

            splashWindow.Show();

            TemporaryDataManager.cleanTemporaryDirectory();
            contractNote = new ContractNote(this);
            setEnable(false);
            scanButton.IsEnabled    = true;
            settingButton.IsEnabled = true;
            quitButton.IsEnabled    = true;

            splashWindow.Close();
        }
예제 #12
0
        public void validateContractNoteItems(bool skip = false)
        {
            success = true;
            if (skip)
            {
                for (int i = 0; i < FIELD_COUNT; i++)
                {
                    contractNoteItems[i].Valid = true;
                }
                return;
            }
            if (contractNoteItems[0].Value.Equals("NoTemplate"))
            {
                contractNoteItems[23].Value = "NoTemplate";
            }
            else
            {
                contractNoteItems[23].Value = string.Format(@"{0}-{1}-{2}-{3}", contractNoteItems[0].Value, contractNoteItems[16].Value, contractNoteItems[1].Value, contractNoteItems[14].Value);
            }

            for (int i = 0; i < FIELD_COUNT; i++)
            {
                if (mandatory[i])
                {
                    if (contractNoteItems[i].Value.Equals("NoTemplate"))
                    {
                        contractNoteItems[i].Valid = false;
                    }
                    else
                    {
                        switch (fieldType[i])
                        {
                        case 'N':
                            contractNoteItems[i].Valid = ContractNote.getValidationOfNumber(contractNoteItems[i].Value);
                            break;

                        case 'C':
                            contractNoteItems[i].Valid = ContractNote.getValidationOfCurrency(contractNoteItems[i].Value);
                            break;

                        case 'D':
                            contractNoteItems[i].Valid = ContractNote.getValidationOfDate(contractNoteItems[i].Value);
                            break;

                        case 'B':
                            contractNoteItems[i].Valid = ContractNote.getValidationOfBoolean(contractNoteItems[i].Value);
                            break;

                        default:
                            contractNoteItems[i].Valid = !contractNoteItems[i].Value.Equals("");
                            break;
                        }
                    }
                    if (!contractNoteItems[i].Valid)
                    {
                        success = false;
                    }
                }
            }

            contractNoteItems[4].Valid = contractNoteItems[3].Valid;

            double units         = ContractNote.getCurrency(contractNoteItems[8].Value);
            double average       = ContractNote.getCurrency(contractNoteItems[18].Value);
            double consideration = ContractNote.getCurrency(contractNoteItems[19].Value);

            if (contractNoteItems[8].Valid && contractNoteItems[18].Valid && contractNoteItems[19].Valid && consideration > 0)
            {
                double rate = units * average / consideration;
                if (rate < 0.95 || rate > 1.05)
                {
                    success = contractNoteItems[8].Valid = contractNoteItems[18].Valid = contractNoteItems[19].Valid = false;
                }
            }
            else
            {
                success = contractNoteItems[8].Valid = contractNoteItems[18].Valid = contractNoteItems[19].Valid = false;
            }

            double brokerage = ContractNote.getCurrency(contractNoteItems[9].Value);
            double gstAmount = ContractNote.getCurrency(contractNoteItems[10].Value);
            double miscFee   = ContractNote.getCurrency(contractNoteItems[12].Value);

            if (contractNoteItems[9].Valid && contractNoteItems[10].Valid && contractNoteItems[11].Valid && gstAmount > 0)
            {
                double rate         = (brokerage + miscFee) / gstAmount;
                double expectedRate = contractNoteItems[11].Value == "Y" ? 11 : 10;
                if (rate < expectedRate - 0.3 || rate > expectedRate + 0.3)
                {
                    success = contractNoteItems[9].Valid = contractNoteItems[10].Valid = false;
                }
            }
        }
예제 #13
0
        void adjustWords2()
        {
            string plainText = extractPlainText(tempPdfFilePath);

            char[]        lineSeparatingChars = { '\n' };
            char[]        wordSeparatingChars = { ' ' };
            string[]      lines = plainText.Split(lineSeparatingChars, StringSplitOptions.RemoveEmptyEntries);
            List <string> wordCombinationList = new List <string>();

            foreach (string line in lines)
            {
                string[] words = line.Split(wordSeparatingChars, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < words.Length; i++)
                {
                    string wordCombination = "";
                    for (int j = i; j < words.Length; j++)
                    {
                        wordCombination += (i == j ? "" : " ") + words[j];
                        wordCombinationList.Add(wordCombination);
                    }
                }
            }
            try
            {
                using (PdfReader reader = new PdfReader(tempPdfFilePath))
                {
                    var   pageRectangle = reader.GetPageSize(1);
                    float pageWidth     = pageRectangle.Width;
                    float pageHeight    = pageRectangle.Height;
                    float sizeRate      = 2754f / 595;
                    for (int i = 0; i < completedWordList.Count; i++)
                    {
                        double bestSimilarity = 0;

                        string                  word     = completedWordList[i].word;
                        float                   w        = completedWordList[i].w / sizeRate;
                        float                   h        = completedWordList[i].h / sizeRate;
                        float                   x        = completedWordList[i].x / sizeRate;
                        float                   y        = pageHeight - completedWordList[i].y / sizeRate - h;
                        RenderFilter[]          filter   = { new RegionTextRenderFilter(new System.util.RectangleJ(x, y, w, h)) };
                        ITextExtractionStrategy strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter);
                        string                  text     = PdfTextExtractor.GetTextFromPage(reader, 1, strategy);
                        string[]                wordSeparatingStrings = { "  " };
                        string[]                words = text.Split(wordSeparatingStrings, StringSplitOptions.RemoveEmptyEntries);
                        if (words.Length > 0)
                        {
                            bestSimilarity = ContractNote.getSimilarity(word, words[0]);
                            if (bestSimilarity > 0.8)
                            {
                                completedWordList[i].word = words[0];
                            }
                        }

                        int    bestSimilarWordId = 0;
                        string agent1            = Regex.Replace(word, @"[^0-9a-zA-Z$@]+", "");
                        for (int j = 0; j < wordCombinationList.Count; j++)
                        {
                            string agent2     = Regex.Replace(wordCombinationList[j], @"[^0-9a-zA-Z$@]+", "");
                            double similarity = ContractNote.getSimilarity(agent1, agent2);
                            if (bestSimilarity < similarity)
                            {
                                bestSimilarity    = similarity;
                                bestSimilarWordId = j;
                            }
                        }
                        if (bestSimilarity > 0.8)
                        {
                            completedWordList[i].word = wordCombinationList[bestSimilarWordId];
                        }
                    }
                }
            }
            catch { }
        }
예제 #14
0
 public PdfParser(ContractNote contractNote)
 {
     this.contractNote = contractNote;
 }
예제 #15
0
 public ContractNoteTemplateManager(ContractNote contractNote)
 {
     this.contractNote = contractNote;
     loadContractNoteTemplates();
 }