Esempio n. 1
0
        public AjaxReturn TransferSave(TransferDocument json)
        {
            Database.BeginTransaction();
            checkDocType(json.DocumentTypeId, DocType.Transfer);
            checkAccountIsAcctType(json.DocumentAccountId, AcctType.Bank, AcctType.CreditCard, AcctType.Investment,
                                   AcctType.OtherAsset, AcctType.OtherLiability);
            checkAccountIsAcctType(json.TransferAccountId, AcctType.Bank, AcctType.CreditCard, AcctType.Investment,
                                   AcctType.OtherAsset, AcctType.OtherLiability);
            fixNameAddress(json, "O");
            JObject oldDoc = getCompleteDocument(json.idDocument);

            Database.Update(json);
            // Transfer has 2 journals, 1 line, no VAT
            Journal journal = Database.Get(new Journal()
            {
                DocumentId = (int)json.idDocument,
                JournalNum = 1
            });

            journal.DocumentId    = (int)json.idDocument;
            journal.AccountId     = json.DocumentAccountId;
            journal.NameAddressId = json.DocumentNameAddressId;
            journal.Amount        = -json.DocumentAmount;
            journal.Outstanding   = -json.DocumentAmount;
            journal.Memo          = json.DocumentMemo;
            journal.JournalNum    = 1;
            Database.Update(journal);
            journal = Database.Get(new Journal()
            {
                DocumentId = (int)json.idDocument,
                JournalNum = 2
            });
            journal.DocumentId    = (int)json.idDocument;
            journal.AccountId     = (int)json.TransferAccountId;
            journal.NameAddressId = json.DocumentNameAddressId;
            journal.Amount        = json.DocumentAmount;
            journal.Outstanding   = json.DocumentAmount;
            journal.Memo          = json.DocumentMemo;
            journal.JournalNum    = 2;
            Database.Update(journal);
            Line line = Database.Get(new Line()
            {
                idLine = journal.idJournal
            });

            line.idLine     = journal.idJournal;
            line.LineAmount = json.DocumentAmount;
            Database.Update(line);
            Database.Update(json);
            JObject newDoc = getCompleteDocument(json.idDocument);

            Database.AuditUpdate("Document", json.idDocument, oldDoc, newDoc);
            Database.Commit();
            return(new AjaxReturn()
            {
                message = "Transfer saved", id = json.idDocument
            });
        }
Esempio n. 2
0
        /// <summary>
        /// Save a memorised transaction, then redirect to it for review
        /// </summary>
        public AjaxReturn RepeatTransferSave(TransferDocument json, DateTime date)
        {
            json.idDocument   = null;
            json.DocumentDate = date;
            AjaxReturn result = TransferSave(json);

            if (result.error == null && result.id > 0)
            {
                result.redirect = "/banking/transfer.html?message=Transfer+saved&id=" + result.id;
            }
            return(result);
        }
Esempio n. 3
0
        public void Transfer(int id)
        {
            // Use template in banking
            Module = "banking";
            TransferDocument header = GetTransferDocument(id);
            int?    acct            = GetParameters["acct"].IsInteger() ? Parameters.AsInt("acct") : (int?)null;
            JObject record          = new JObject().AddRange("header", header,
                                                             "Account", acct,
                                                             "BankAccounts", SelectBankOrStockAccounts());

            if (acct != null)
            {
                nextPreviousDocument(record, "JOIN Journal ON DocumentId = idDocument WHERE AccountId = "
                                     + acct + " AND DocumentTypeId = " + (int)DocType.Transfer);
            }
            Record = record;
        }
 public AjaxReturn TransferPost(TransferDocument json)
 {
     Database.BeginTransaction();
     checkDocType(json.DocumentTypeId, DocType.Transfer);
     checkAccountIsAcctType(json.DocumentAccountId, AcctType.Bank, AcctType.CreditCard, AcctType.Investment);
     checkAccountIsAcctType(json.TransferAccountId, AcctType.Bank, AcctType.CreditCard, AcctType.Investment);
     fixNameAddress(json, "O");
     JObject oldDoc = getCompleteDocument(json.idDocument);
     Database.Update(json);
     // Transfer has 2 journals, 1 line, no VAT
     Journal journal = Database.Get(new Journal() {
         DocumentId = (int)json.idDocument,
         JournalNum = 1
     });
     journal.DocumentId = (int)json.idDocument;
     journal.AccountId = json.DocumentAccountId;
     journal.NameAddressId = json.DocumentNameAddressId;
     journal.Amount = -json.DocumentAmount;
     journal.Outstanding = -json.DocumentAmount;
     journal.Memo = json.DocumentMemo;
     journal.JournalNum = 1;
     Database.Update(journal);
     journal = Database.Get(new Journal() {
         DocumentId = (int)json.idDocument,
         JournalNum = 2
     });
     journal.DocumentId = (int)json.idDocument;
     journal.AccountId = (int)json.TransferAccountId;
     journal.NameAddressId = json.DocumentNameAddressId;
     journal.Amount = json.DocumentAmount;
     journal.Outstanding = json.DocumentAmount;
     journal.Memo = json.DocumentMemo;
     journal.JournalNum = 2;
     Database.Update(journal);
     Line line = Database.Get(new Line() {
         idLine = journal.idJournal
     });
     line.idLine = journal.idJournal;
     line.LineAmount = json.DocumentAmount;
     Database.Update(line);
     Database.Update(json);
     JObject newDoc = getCompleteDocument(json.idDocument);
     Database.AuditUpdate("Document", json.idDocument, oldDoc, newDoc);
     Database.Commit();
     return new AjaxReturn() { message = "Transfer saved", id = json.idDocument };
 }
Esempio n. 5
0
        /// <summary>
        /// Prepare to memorise a transaction for automatic retrieval and saving later.
        /// </summary>
        public void MemoriseTransfer(int id)
        {
            TransferDocument header = GetTransferDocument(id);

            Utils.Check(header.idDocument != null, "Transfer {0} not found", id);
            Account account = Database.Get <Account>((int)header.TransferAccountId);

            checkDocType(header.DocumentTypeId, DocType.Transfer);
            Schedule job = new Schedule()
            {
                ActionDate      = header.DocumentDate,
                Task            = "Transfer " + header.DocumentAmount.ToString("0.00") + " from " + header.DocumentAccountName + " to " + account.AccountName + " " + header.DocumentMemo,
                Url             = "banking/repeattransfersave",
                Parameters      = header.ToString(),
                RepeatFrequency = 1,
                Post            = true
            };

            Module = "home";
            Method = "job";
            Record = job;
        }
Esempio n. 6
0
        /// <summary>
        /// Get an existing transfer document, or fill in a new one
        /// </summary>
        internal TransferDocument GetTransferDocument(int id)
        {
            TransferDocument header = getDocument <TransferDocument>(id);
            int?acct = GetParameters["acct"].IsInteger() ? Parameters.AsInt("acct") : (int?)null;

            if (header.idDocument == null)
            {
                header.DocumentTypeId = (int)DocType.Transfer;
                header.DocType        = DocType.Transfer.UnCamel();
                header.DocumentDate   = Utils.Today;
                header.DocumentName   = "";
                header.DocumentMemo   = "Money Transfer";
                if (acct != null)
                {
                    header.DocumentAccountId = (int)acct;
                }
                if (GetParameters["acct2"].IsInteger())
                {
                    header.TransferAccountId = int.Parse(GetParameters["acct2"]);
                }
            }
            else
            {
                checkDocType(header.DocumentTypeId, DocType.Transfer);
                header.TransferAccountId = Database.QueryOne("SELECT AccountId FROM Journal WHERE DocumentId = " + id + " AND JournalNum = 2").AsInt("AccountId");
                checkAccountIsAcctType(header.DocumentAccountId, AcctType.Bank, AcctType.CreditCard, AcctType.Investment,
                                       AcctType.OtherAsset, AcctType.OtherLiability);
                checkAccountIsAcctType(header.TransferAccountId, AcctType.Bank, AcctType.CreditCard, AcctType.Investment,
                                       AcctType.OtherAsset, AcctType.OtherLiability);
                if (acct == null)
                {
                    acct = header.DocumentAccountId;
                }
            }
            return(header);
        }
        public void Parse()
        {
            int    i;
            string line;

            TransferDocument doc = new TransferDocument();

            TransferDocuments = new List <TransferDocument>();

            var culture = CultureInfo.CreateSpecificCulture("ru-RU");

            culture.NumberFormat.NumberDecimalSeparator = ".";

            using (var reader = new StreamReader(DocPath, Encoding.GetEncoding(1251)))
            {
                int count = 1;

                if (reader.ReadLine() != "1CClientBankExchange")
                {
                    return;
                }

                var str = reader.ReadLine().Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);

                decimal version = decimal.Parse(str[1], culture);

                if (!curVersion.Contains(version))
                {
                    throw new Exception("Изменилась версия выписки! Необходимо проверить формат данных.");
                }

                while ((line = reader.ReadLine()) != null)
                {
                    //Читаем свойства документа
                    while (!line.StartsWith(tags[0]))
                    {
                        if (!string.IsNullOrWhiteSpace(line))
                        {
                            var data = line.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);

                            if (data.Length == 2)
                            {
                                if (data[0] == "РасчСчет")
                                {
                                    documentProperties.Add(data[0] + count, data[1]);
                                    count++;
                                }
                                else
                                {
                                    documentProperties.Add(data[0], data[1]);
                                }
                            }
                        }
                        line = reader.ReadLine();
                    }

                    //Читаем рассчетные счета
                    i = -1;
                    while (!line.StartsWith(tags[1]))
                    {
                        if (!string.IsNullOrWhiteSpace(line))
                        {
                            if (line.StartsWith(tags[0]))
                            {
                                i++;
                            }
                            if (accounts.Count <= i)
                            {
                                accounts.Add(new Dictionary <string, string>());
                            }
                            var dataArray = line.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);

                            if (dataArray.Length == 2)
                            {
                                accounts[i].Add(dataArray[0], dataArray[1]);
                            }
                        }
                        line = reader.ReadLine();
                    }

                    //Читаем документы
                    while (!line.StartsWith(tags[3]))
                    {
                        if (line.StartsWith(tags[2]))
                        {
                            TransferDocuments.Add(doc);
                        }

                        if (line.StartsWith(tags[1]))
                        {
                            doc = new TransferDocument();
                        }

                        if (!string.IsNullOrWhiteSpace(line))
                        {
                            var data = line.Split(new char[] { '=' }, 2, StringSplitOptions.RemoveEmptyEntries);

                            if (data.Length == 2)
                            {
                                FillData(doc, data, culture);
                            }
                        }
                        line = reader.ReadLine();
                    }
                }
            }
        }
        private void FillData(TransferDocument doc, string[] data, IFormatProvider culture)
        {
            switch (data[0])
            {
            case "СекцияДокумент":
                doc.docType = TransferDocument.GetDocTypeFromString(data[1]);
                break;

            case "Номер":
                doc.DocNum = data[1];
                break;

            case "Дата":
                doc.Date = DateTime.Parse(data[1], culture);
                break;

            case "Сумма":
                doc.Total = decimal.Parse(data[1], culture);
                break;

            case "ПлательщикСчет":
                doc.PayerAccount = data[1];
                break;

            case "ДатаСписано":
                doc.WriteOffDate = DateTime.Parse(data[1], culture);
                break;

            case "Плательщик1":
                if (data[1].Contains("р/с") && !string.IsNullOrWhiteSpace(data[1].Substring(0, data[1].IndexOf("р/с"))))
                {
                    doc.PayerName = data[1].Substring(0, data[1].IndexOf("р/с"));
                }
                else
                {
                    doc.PayerName = data[1];
                }
                break;

            case "Плательщик2":
                doc.PayerCurrentAccount = data[1];
                break;

            case "Плательщик3":
                doc.PayerBank = data[1];
                break;

            case "Плательщик4":
                doc.CityOfPayerBank = data[1];
                break;

            case "ПлательщикИНН":
                doc.PayerInn = data[1];
                break;

            case "ПлательщикКПП":
                doc.PayerKpp = data[1];
                break;

            case "ПлательщикРасчСчет":
                doc.PayerCurrentAccount = data[1];
                break;

            case "ПлательщикБанк1":
                doc.PayerBank = data[1];
                break;

            case "ПлательщикБанк2":
                doc.CityOfPayerBank = data[1];
                break;

            case "ПлательщикБИК":
                doc.PayerBik = data[1];
                break;

            case "ПлательщикКорсчет":
                doc.PayerCorrespondentAccount = data[1];
                break;

            case "ПолучательСчет":
                doc.RecipientAccount = data[1];
                break;

            case "ДатаПоступило":
                doc.ReceiptDate = DateTime.Parse(data[1], culture);
                break;

            case "Получатель1":
                if (data[1].Contains("р/с") && !string.IsNullOrWhiteSpace(data[1].Substring(0, data[1].IndexOf("р/с"))))
                {
                    doc.RecipientName = data[1].Substring(0, data[1].IndexOf("р/с"));
                }
                else
                {
                    doc.RecipientName = data[1];
                }
                break;

            case "Получатель2":
                doc.RecipientCurrentAccount = data[1];
                break;

            case "Получатель3":
                doc.RecipientBank = data[1];
                break;

            case "Получатель4":
                doc.CityOfRecipientBank = data[1];
                break;

            case "ПолучательИНН":
                doc.RecipientInn = data[1];
                break;

            case "ПолучательКПП":
                doc.RecipientKpp = data[1];
                break;

            case "ПолучательРасчСчет":
                doc.RecipientCurrentAccount = data[1];
                break;

            case "ПолучательБанк1":
                doc.RecipientBank = data[1];
                break;

            case "ПолучательБанк2":
                doc.CityOfRecipientBank = data[1];
                break;

            case "ПолучательБИК":
                doc.RecipientBik = data[1];
                break;

            case "ПолучательКорсчет":
                doc.RecipientCorrespondentAccount = data[1];
                break;

            case "НазначениеПлатежа":
                doc.PaymentPurpose = data[1];
                break;

            case "Плательщик":
                doc.Payer = data[1];
                break;

            case "Получатель":
                doc.Recipient = data[1];
                break;

            case "ВидПлатежа":
                doc.PaymentType = data[1];
                break;

            case "КодНазПлатежа":
                doc.PaymentCode = data[1];
                break;

            case "ВидОплаты":
                doc.OperationType = data[1];
                break;

            case "Код":
                doc.PaymentId = data[1];
                break;

            case "СтатусСоставителя":
                doc.AuthorStatus = data[1];
                break;

            case "ПоказательКБК":
                doc.BudgetСlassificationСode = data[1];
                break;

            case "ОКАТО":
                doc.Okato = data[1];
                break;

            case "ПоказательОснования":
                doc.BaseIndicator = data[1];
                break;

            case "ПоказательПериода":
                doc.PeriodIndicator = data[1];
                break;

            case "ПоказательНомера":
                doc.NumIndicator = data[1];
                break;

            case "ПоказательДаты":
                doc.DateIndicator = data[1];
                break;

            case "ПоказательТипа":
                doc.TypeIndicator = data[1];
                break;

            case "Очередность":
                doc.Priority = data[1];
                break;

            case "СрокАкцепта":
                doc.AcceptancePeriod = data[1];
                break;

            case "ВидАккредитива":
                doc.ApplicationOfCreditType = data[1];
                break;

            case "СрокПлатежа":
                doc.PaymentTerm = data[1];
                break;

            case "УсловиеОплаты1":
                doc.PaymentConditionStr1 = data[1];
                break;

            case "УсловиеОплаты2":
                doc.PaymentConditionStr2 = data[1];
                break;

            case "УсловиеОплаты3":
                doc.PaymentConditionStr3 = data[1];
                break;

            case "ПлатежПоПредст":
                doc.PaymentBySubmission = data[1];
                break;

            case "ДополнУсловия":
                doc.AdditionalTerms = data[1];
                break;

            case "НомерСчетаПоставщика":
                doc.VendorAccount = data[1];
                break;

            case "ДатаОтсылкиДок":
                doc.DocSendDate = data[1];
                break;
            }
        }
Esempio n. 9
0
 /// <summary>
 /// Post a memorised transaction, then redirect to it for review
 /// </summary>
 public AjaxReturn RepeatTransferPost(TransferDocument json, DateTime date)
 {
     json.idDocument = null;
     json.DocumentDate = date;
     AjaxReturn result = TransferPost(json);
     if (result.error == null && result.id > 0)
         result.redirect = "/banking/transfer.html?message=Transfer+saved&id=" + result.id;
     return result;
 }