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 }); }
/// <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); }
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 }; }
/// <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; }
/// <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; } }
/// <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; }