コード例 #1
0
        public static PaymentRecord TryParseStringToPaymentRecord(String str)
        {
            PaymentRecord record = new PaymentRecord();

            String[] splitResult = str.Split(new String [] { " " }, StringSplitOptions.RemoveEmptyEntries);

            if (splitResult.Length != FIELD_NUM)
            {
                return(null);
            }

            try
            {
                record.documentDate         = DateTime.Parse(splitResult[(int)Fields.documentDate]);
                record.documentNumber       = splitResult[(int)Fields.documentNumber];
                record.operationCode        = Int32.Parse(splitResult[(int)Fields.operationCode]);
                record.correspondentCode    = Int32.Parse(splitResult[(int)Fields.correspondentCode]);
                record.correspondentAccount = splitResult[(int)Fields.correspondentAccount];
                record.ratingDebit          = splitResult[(int)Fields.ratingDebit];
                record.ratingCredit         = splitResult[(int)Fields.ratingCredit];

                if (record.ratingCredit == "0.00")
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                return(null);
            }

            return(record);
        }
コード例 #2
0
        public static PaymentRecord TryParseStringToPaymentRecord(String str)
        {
            PaymentRecord record = new PaymentRecord();
            String[] splitResult = str.Split(new String [] {" "}, StringSplitOptions.RemoveEmptyEntries);

            if (splitResult.Length != FIELD_NUM)
                return null;

            try
            {
                record.documentDate = DateTime.Parse(splitResult[(int)Fields.documentDate]);
                record.documentNumber = splitResult[(int)Fields.documentNumber];
                record.operationCode = Int32.Parse(splitResult[(int)Fields.operationCode]);
                record.correspondentCode = Int32.Parse(splitResult[(int)Fields.correspondentCode]);
                record.correspondentAccount = splitResult[(int)Fields.correspondentAccount];
                record.ratingDebit = splitResult[(int)Fields.ratingDebit];
                record.ratingCredit = Convert.ToDouble(splitResult[(int)Fields.ratingCredit], Program.cultureInfo);

                if (record.ratingDebit != "0.00")
                    throw new Exception();
            }
            catch (Exception)
            {
                return null;
            }

            return record;
        }
コード例 #3
0
        private static double FindCreditForRecord(PaymentRecord record, int filial)
        {
            double credit = -1;

            DataRow[] rows = registerPart.Select("[" + registerPart.Columns[0].ColumnName + "] like '%" + record.documentNumber + "%'");

            try
            {
                if (rows.Length == 1)
                {
                    credit = Convert.ToDouble(rows.First()[filial + filialRegisterIndent], cultureInfo);
                    generalSumDictionary[record.documentNumber] -= credit;
                }
                else
                {
                    // один раз select как-то криво отработал. хз почему. поэтому добавила этот кусок. всегда только одна запись с таким номером документа
                    foreach (DataRow r in rows)
                    {
                        if (r[0].ToString() == record.documentNumber)
                        {
                            credit = Convert.ToDouble(r[filial + filialRegisterIndent], cultureInfo);
                            generalSumDictionary[record.documentNumber] -= credit;
                        }
                    }
                }
            }
            catch (Exception) { }

            return(credit);
        }
コード例 #4
0
        private static String FindCreditForRecord(PaymentRecord record, int filial)
        {
            String credit = String.Empty;

            DataRow[] rows = registerPart.Select("[" + registerPart.Columns[0].ColumnName + "] like '%" + record.documentNumber + "%'");

            if (rows.Length == 1)
            {
                credit = rows.First()[filial + filialRegisterIndent].ToString();
            }

            return(credit);
        }
コード例 #5
0
        private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool complex, bool firstInComplex,
                                                   bool additionalCode)
        {
            string result = String.Format("{0, -12}{1, 7}{2, 3}",
                                          record.documentDate.ToString("dd.MM.yyyy"), record.documentNumber,
                                          record.operationCode);

            if (additionalCode)
            {
                result += String.Format("{0, 10}", filialAdditionalCodes[filial]);
            }
            else
            {
                result += String.Format("{0, 10}", filialCodes[filial]);
            }

            result += String.Format("{0}{1, 15}{2, 29}", record.correspondentCode,
                                    record.correspondentAccount, record.ratingDebit);

            if ((filial == (int)Filials.Minsk && !complex) || additionalCode)
            {
                result += String.Format(standard, record.ratingCredit);

                if (previousWasMoved == 1)
                {
                    previousWasMoved = 0;
                }

                return(result);
            }

            if (firstInComplex || !complex)
            {
                indent = indents[previousWasMoved];
                previousWasMoved++;
                previousWasMoved %= 2;
            }

            String credit = FindCreditForRecord(record, filial);

            if (credit.Equals(String.Empty))
            {
                Clipboard.SetText(record.documentNumber);
                throw new Exception("Обнаружено несоответствие. Не найдена запись в реестре для:\nНомер док.: " +
                                    record.documentNumber + "\nФилиал:     " + filialNames[filial]);
            }
            record.ratingCredit = credit + ".00";
            result += String.Format(indent + " {1}", record.ratingCredit, filialShortNames[filial]);

            return(result);
        }
コード例 #6
0
        private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool complex, bool firstInComplex,
                                                   bool additionalCode)
        {
            string result = String.Format("{0, -12}{1, 7}{2, 3}",
                                          record.documentDate.ToString("dd.MM.yyyy"), record.documentNumber,
                                          record.operationCode);

            if (additionalCode)
            {
                result += String.Format("{0, 10}", filialAdditionalCodes[filial]);
            }
            else
            {
                result += String.Format("{0, 10}", filialCodes[filial]);
            }

            result += String.Format("{0}{1, 15}{2, 29}", record.correspondentCode,
                                    record.correspondentAccount, record.ratingDebit);

            if ((filial == (int)Filials.Minsk && !complex) || additionalCode)
            {
                result += String.Format(standard, record.ratingCredit);

                if (previousWasMoved == 1)
                {
                    previousWasMoved = 0;
                }

                return(result);
            }

            if (firstInComplex || !complex)
            {
                indent = indents[previousWasMoved];
                previousWasMoved++;
                previousWasMoved %= 2;
            }

            result += String.Format(indent + " {1}", record.ratingCredit, filialShortNames[filial]);

            return(result);
        }
コード例 #7
0
        public static List <PaymentRecord> ParseOrderFile(StreamReader reader, out string prologue,
                                                          out string epilogue)
        {
            List <PaymentRecord> document = new List <PaymentRecord>();

            prologue = "";
            epilogue = "";
            String        line;
            PaymentRecord record;
            bool          foundContent = false;

            while ((line = reader.ReadLine()) != null)
            {
                record = PaymentRecord.TryParseStringToPaymentRecord(line);

                if (record == null)
                {
                    if (foundContent)
                    {
                        epilogue += line + "\r\n";
                    }
                    else
                    {
                        prologue += line + "\r\n";
                    }
                }
                else
                {
                    if (!foundContent)
                    {
                        foundContent = true;
                    }

                    document.Add(record);
                }
            }

            return(document);
        }
コード例 #8
0
 private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool additionalCode)
 {
     return ChangedPaymentRecord(record, filial, false, false, additionalCode, -1);
 }
コード例 #9
0
        private static String FindCreditForRecord(PaymentRecord record, int filial)
        {
            String credit = String.Empty;
            DataRow[] rows = registerPart.Select("[" + registerPart.Columns[0].ColumnName + "] like '%" + record.documentNumber +"%'");

            if (rows.Length == 1)     
                credit = rows.First()[filial + filialRegisterIndent].ToString();
            
            return credit;
        }
コード例 #10
0
        private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool complex, bool firstInComplex, 
            bool additionalCode, int paperAccountIndex)
        {
            string result = String.Format("{0, -12}{1, 7}{2, 3}",
                record.documentDate.ToString("dd.MM.yyyy"), record.documentNumber,
                record.operationCode);

            if (additionalCode)
            {
                result += String.Format("{0, 10}", filialAdditionalCodes[filial]);
            }
            else
            {
                if (paperAccountIndex != -1 && CheckPaperFilial(paperAccountIndex, filial, record.documentNumber))
                    result += String.Format("{0, 10}", paperAdditionalCodes[paperAccountIndex][paperFilials[paperAccountIndex].IndexOf(filialNames[filial])]);
                else    
                    result += String.Format("{0, 10}", filialCodes[filial]);
            }

            result += String.Format("{0}{1, 15}{2, 29}", record.correspondentCode, 
                record.correspondentAccount, record.ratingDebit);

            if ((filial == (int)Filials.Minsk && !complex) || additionalCode)
            {
                if(generalSumDictionary.Keys.Contains(record.documentNumber))
                {
                    generalSumDictionary[record.documentNumber] -= record.ratingCredit;
                }

                result += String.Format(cultureInfo, standard, record.ratingCredit);

                if (previousWasMoved == 1)
                    previousWasMoved = 0;

                return result;
            }

            if (firstInComplex || !complex)
            {
                indent = indents[previousWasMoved];
                previousWasMoved++;
                previousWasMoved %= 2;
            }

            if (paperAccountIndex != -1 || record.debtor)
            {
                if (!generalSumDictionary.ContainsKey(record.documentNumber)) // если сумма с нескольких филиалов
                    generalSumDictionary.Add(record.documentNumber, 0);
                   // записей на филиалы Сморгонь и Волковыск в реестре нету + нет должников
            }
            else
            {
                double credit = FindCreditForRecord(record, filial);

                if (credit == -1)
                {
                    Clipboard.SetText(record.documentNumber);
                    throw new Exception("Обнаружено несоответствие. Не найдена запись в реестре для:\nНомер док.: " +
                                        record.documentNumber + "\nФилиал: " + filialNames[filial]);
                }
                record.ratingCredit = credit;
            }
            result += String.Format(cultureInfo, indent + " {1}", record.ratingCredit, filialShortNames[filial]);
            
            return result;
        }
コード例 #11
0
        private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool complex, bool firstInComplex,
                                                   bool additionalCode, int paperAccountIndex)
        {
            string result = String.Format("{0, -12}{1, 7}{2, 3}",
                                          record.documentDate.ToString("dd.MM.yyyy"), record.documentNumber,
                                          record.operationCode);

            if (additionalCode)
            {
                result += String.Format("{0, 10}", filialAdditionalCodes[filial]);
            }
            else
            {
                if (paperAccountIndex != -1 && CheckPaperFilial(paperAccountIndex, filial, record.documentNumber))
                {
                    result += String.Format("{0, 10}", paperAdditionalCodes[paperAccountIndex][paperFilials[paperAccountIndex].IndexOf(filialNames[filial])]);
                }
                else
                {
                    result += String.Format("{0, 10}", filialCodes[filial]);
                }
            }

            result += String.Format("{0}{1, 15}{2, 29}", record.correspondentCode,
                                    record.correspondentAccount, record.ratingDebit);

            if ((filial == (int)Filials.Minsk && !complex) || additionalCode)
            {
                if (generalSumDictionary.Keys.Contains(record.documentNumber))
                {
                    generalSumDictionary[record.documentNumber] -= record.ratingCredit;
                }

                result += String.Format(cultureInfo, standard, record.ratingCredit);

                if (previousWasMoved == 1)
                {
                    previousWasMoved = 0;
                }

                return(result);
            }

            if (firstInComplex || !complex)
            {
                indent = indents[previousWasMoved];
                previousWasMoved++;
                previousWasMoved %= 2;
            }

            if (paperAccountIndex != -1 || record.debtor)
            {
                if (!generalSumDictionary.ContainsKey(record.documentNumber)) // если сумма с нескольких филиалов
                {
                    generalSumDictionary.Add(record.documentNumber, 0);
                }
                // записей на филиалы Сморгонь и Волковыск в реестре нету + нет должников
            }
            else
            {
                double credit = FindCreditForRecord(record, filial);

                if (credit == -1)
                {
                    Clipboard.SetText(record.documentNumber);
                    throw new Exception("Обнаружено несоответствие. Не найдена запись в реестре для:\nНомер док.: " +
                                        record.documentNumber + "\nФилиал: " + filialNames[filial]);
                }
                record.ratingCredit = credit;
            }
            result += String.Format(cultureInfo, indent + " {1}", record.ratingCredit, filialShortNames[filial]);

            return(result);
        }
コード例 #12
0
 private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool complex, bool firstInComplex,
                                            bool additionalCode)
 {
     return(ChangedPaymentRecord(record, filial, complex, firstInComplex, additionalCode, -1));
 }
コード例 #13
0
 private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool additionalCode, int paperAccountIndex)
 {
     return(ChangedPaymentRecord(record, filial, false, false, additionalCode, paperAccountIndex));
 }
コード例 #14
0
        private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool complex, bool firstInComplex, 
            bool additionalCode)
        {
            string result = String.Format("{0, -12}{1, 7}{2, 3}",
                record.documentDate.ToString("dd.MM.yyyy"), record.documentNumber,
                record.operationCode);

            if (additionalCode)
            {
                result += String.Format("{0, 10}", filialAdditionalCodes[filial]);
            }
            else
            {
                result += String.Format("{0, 10}", filialCodes[filial]);
            }

            result += String.Format("{0}{1, 15}{2, 29}", record.correspondentCode, 
                record.correspondentAccount, record.ratingDebit);

            if ((filial == (int)Filials.Minsk && !complex) || additionalCode)
            {
                result += String.Format(standard, record.ratingCredit);

                if (previousWasMoved == 1)
                    previousWasMoved = 0;

                return result;
            }

            if (firstInComplex || !complex)
            {
                indent = indents[previousWasMoved];
                previousWasMoved++;
                previousWasMoved %= 2;
            }

            result += String.Format(indent + " {1}", record.ratingCredit, filialShortNames[filial]);
            
            return result;
        }
コード例 #15
0
 private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool additionalCode, int paperAccountIndex)
 {
     return ChangedPaymentRecord(record, filial, false, false, additionalCode, paperAccountIndex);
 }
コード例 #16
0
 private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool complex, bool firstInComplex,
     bool additionalCode)
 {
     return ChangedPaymentRecord(record, filial, complex, firstInComplex, additionalCode, -1);
 }
コード例 #17
0
 private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool additionalCode)
 {
     return(ChangedPaymentRecord(record, filial, false, false, additionalCode));
 }
コード例 #18
0
        private static double FindCreditForRecord(PaymentRecord record, int filial)
        {
            double credit = -1;
            DataRow[] rows = registerPart.Select("[" + registerPart.Columns[0].ColumnName + "] like '%" + record.documentNumber + "%'");

            try
            {
                if (rows.Length == 1)
                {
                    credit = Convert.ToDouble(rows.First()[filial + filialRegisterIndent], cultureInfo);
                    generalSumDictionary[record.documentNumber] -= credit;
                }
                else
                {
                    // один раз select как-то криво отработал. хз почему. поэтому добавила этот кусок. всегда только одна запись с таким номером документа
                    foreach (DataRow r in rows)
                    {
                        if (r[0].ToString() == record.documentNumber)
                        {
                            credit = Convert.ToDouble(r[filial + filialRegisterIndent], cultureInfo);
                            generalSumDictionary[record.documentNumber] -= credit;
                        }
                    }
                }
            }
            catch (Exception) { }
            
            return credit;
        }
コード例 #19
0
        private static String ChangedPaymentRecord(PaymentRecord record, int filial, bool complex, bool firstInComplex, 
            bool additionalCode)
        {
            string result = String.Format("{0, -12}{1, 7}{2, 3}",
                record.documentDate.ToString("dd.MM.yyyy"), record.documentNumber,
                record.operationCode);

            if (additionalCode)
            {
                result += String.Format("{0, 10}", filialAdditionalCodes[filial]);
            }
            else
            {
                result += String.Format("{0, 10}", filialCodes[filial]);
            }

            result += String.Format("{0}{1, 15}{2, 29}", record.correspondentCode, 
                record.correspondentAccount, record.ratingDebit);

            if ((filial == (int)Filials.Minsk && !complex) || additionalCode)
            {
                result += String.Format(standard, record.ratingCredit);

                if (previousWasMoved == 1)
                    previousWasMoved = 0;

                return result;
            }

            if (firstInComplex || !complex)
            {
                indent = indents[previousWasMoved];
                previousWasMoved++;
                previousWasMoved %= 2;
            }

            String credit = FindCreditForRecord(record, filial);

            if (credit.Equals(String.Empty))
            {
                Clipboard.SetText(record.documentNumber);
                throw new Exception("Обнаружено несоответствие. Не найдена запись в реестре для:\nНомер док.: " +
                       record.documentNumber + "\nФилиал:     " + filialNames[filial]);
            }
            record.ratingCredit = credit + ".00";
            result += String.Format(indent + " {1}", record.ratingCredit, filialShortNames[filial]);
            
            return result;
        }