public static string GetAccountNameCode(Transfer t) { string name = ""; Subconto Account = t.Субконто1; if (Account != null) name = Account.Наименование + " (" + Account.Код + ")"; return name; }
public tbl_Cashflow CreateCashflow(Entities db, Transfer t) { tbl_Cashflow c = new tbl_Cashflow(); c.UID1C = t.UID1C; //TMP c.MailSent = 1; c.Obj1cDocNumIn = t.НомерДокВходящий; c.ModifiedByID = Helper.GetSupervisorID(); c.ModifiedOn = DateTime.Now; c.CreatedByID = Helper.GetSupervisorID(); c.CreatedOn = DateTime.Now; string cID = Helper.getDs_CompanyID(t.Company); c.CompanyID = new Guid(cID); // 01 НОМЕР c.CFNumber = Helper.GetNextNumber(db); // 02 НАЗНАЧЕНИЕ c.Subject = t.НазначениеПлатежа; if(t.ВидДвижения != null) { if(t.ВидДвижения.Наименование.Length>0) c.Subject += " (" + t.ВидДвижения.Наименование + ")"; } if(c.Subject.Length > 249) { c.Subject = c.Subject.Substring(0, 246) + "..."; } // 03 ОТ c.DocDate = DateTime.Parse(t.ДатаДок); // 04 ТИП CashflowType cashflowType; if (t.Приход > 0) cashflowType = CashflowType.Income; else cashflowType = CashflowType.Expense; c.TypeID = Helper.GetCashflowTypeID(cashflowType); // 05 СТАТЬЯ NULL c.ClauseID = DbHelper.GetCashflowClauseID(db, t.ВидДвижения, t.Company); // 06 КАТЕГОРИЯ NULL // 07 ОТВЕТСТВЕННЫЙ c.OwnerID = Helper.GetOwnerID(); // 08 СОСТОЯНИЕ c.StatusID = new Guid(Constants.CashflowStateFinishedID); // 09 ИНЦИДЕНТ NULL // 10 ВОЗДЕЙСТВИЕ NULL // 11 PL - (UseAsPandL - P&L) NULL // 12 КАССА c.CashAccountID = new Guid(Constants.CashflowKassaID); // 13 ПЛАНИРУЕМАЯ ДАТА c.EstimatedDate = DateTime.Parse(t.ДатаДок); // 14 ФАКТИЧЕСКАЯ ДАТА c.ActualDate = DateTime.Parse(t.ДатаДок); // 15 ТИП РАСХОДА-ДОХОДА NULL // 16 ПЕРИОД c.PeriodID = Helper.GetPeriodID(db, c.ActualDate.Value); // 00 Контрагент string comments = ""; Guid? AccountID = DbHelper.GetAccountID(db, t); if (!AccountID.HasValue) { comments += "Контрагент не найден: " + Helper.GetAccountNameCode(t) + ".\r\n"; } // 19 УЧИТЫВАТЬ ПРИ ВЗАИМОРАСЧЁТАХ NULL // 20 ДЕБИТОР-КРЕДИТОР NULL // 21 АВТОМАТИЧЕСКИ РАССЧИТЫВАТЬ СУММУ c.AutocalcAmount = 1; // 22 ВАЛЮТ c.CurrencyID = DbHelper.ConvertToCurrencyID(t.Валюта); // 23 СУММА if (cashflowType == CashflowType.Income) c.Amount = (decimal)t.Приход; else c.Amount = -1 * (decimal)t.Расход; // 24 ВНУТРЕННИЙ КУРС c.CurrencyRate = (decimal)t.Курс; // 25 СУММА В БАЗОВОЙ ВАЛЮТЕ NULL //c.BasicAmount = (int)(c.Amount / c.CurrencyRate); // 26 КОНТАКТ NULL // 27 СЧЁТ NULL // 28 ДОГОВОР Guid? ContractID = DbHelper.GetContractID(db, t); if (ContractID.HasValue) { c.ContractID = ContractID; } else { string ContractName = DbHelper.GetContractName(t); if(!String.IsNullOrEmpty(ContractName)) comments += "Договор не найден: " + ContractName + "."; } // 29 ПРОДАЖА - получаем из договора if (ContractID.HasValue) { c.OpportunityID = DbHelper.GetOpportunityIDFromContract(db, ContractID); } // 30 МЕНЕДЖЕР - получаем из договора if (ContractID.HasValue) { c.ManagerID = DbHelper.GetManagerIDFromContract(db, ContractID); } else if (AccountID.HasValue) { c.ManagerID = DbHelper.GetManagerIDFromAccount(db, AccountID); } else { c.ManagerID = DbHelper.GetDefaultManagerID(); } // 31 если найден договор, но не найден контрагент if (ContractID.HasValue && !AccountID.HasValue) { AccountID = DbHelper.GetAccountIDFromContract(db, ContractID); } // 17 ПЛАТЕЛЬЩИК // 18 ПОЛУЧАТЕЛЬ if (cashflowType == CashflowType.Income) { c.PayerID = AccountID; c.RecipientID = DbHelper.GetCompanyID(t.Company); } else { c.PayerID = DbHelper.GetCompanyID(t.Company); c.RecipientID = AccountID; } c.DebtorCreditorID = c.PayerID; // если назначение содержит номер счёта string PayDetails = t.НазначениеПлатежа; string InvoiceString = "счет "; if (PayDetails.Contains(InvoiceString)) { int NumStart = PayDetails.IndexOf(InvoiceString) + 5; string substr1 = PayDetails.Substring(NumStart); int NumEnd = substr1.IndexOf(' '); string InvoiceNumber = ""; if (NumEnd >= 0) InvoiceNumber = substr1.Substring(0, NumEnd); // найти счёт // фильтр по номеру счёта List<tbl_Invoice> invoices = db.tbl_Invoice.Where(i => i.InvoiceNumber == InvoiceNumber).ToList(); // фильтр по дате счёта (год)? invoices = invoices.Where(i => i.InvoiceDate.Year == DateTime.Now.Year).ToList(); // фильтр по контрагенту if (AccountID.HasValue) { invoices = invoices.Where(i => i.CustomerID == AccountID).ToList(); } if (invoices.Count > 0) { tbl_Invoice i = invoices.First(); c.InvoiceID = i.ID; } } if (comments.Length > 249) { comments = comments.Substring(0, 246) + "..."; } c.Comments = comments; //t.КоррСчёт - пока не использовать c.ID = Guid.NewGuid(); return c; }
List<BankStatement> ParseXmlFileBs(string filename) { List<BankStatement> statements = new List<BankStatement>(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filename); XmlNode bankNode = xmlDoc.SelectSingleNode("Bank"); foreach (XmlNode statementNode in bankNode) { BankStatement bs = new BankStatement(); bs.ДатаДок = statementNode.Attributes["ДатаДок"].Value; bs.НомерДок = statementNode.Attributes["НомерДок"].Value; bs.Валюта = statementNode.Attributes["Валюта"].Value; Console.WriteLine("{0} {1} {2}", bs.ДатаДок, bs.НомерДок, bs.Валюта); List<Transfer> transfers = new List<Transfer>(); foreach (XmlNode transferNode in statementNode.ChildNodes) { Transfer t = new Transfer(); t.UID1C = bs.НомерДок + "#" + transferNode.Attributes["Num"].Value; t.ДатаДок = bs.ДатаДок; //t.КоррСчёт = ; t.НазначениеПлатежа = transferNode.Attributes["НазначениеПлатежа"].Value; t.Субконто1 = new Subconto { Код = transferNode.Attributes["КонтрагентИНН"].Value, Наименование = transferNode.Attributes["КонтрагентНаименование"].Value, ТипСубконто = SubcontoType.Контрагент }; t.Субконто2 = new Subconto { Код = transferNode.Attributes["ДоговорКод"].Value, Наименование = transferNode.Attributes["ДоговорНаименование"].Value, ТипСубконто = SubcontoType.Договор }; t.Субконто3 = new Subconto { Код = "", Наименование = "", ТипСубконто = SubcontoType.Неопределено }; t.Приход = Double.Parse(transferNode.Attributes["Приход"].Value.Replace(".", ",")); t.Расход = Double.Parse(transferNode.Attributes["Расход"].Value.Replace(".", ",")); t.Валюта = bs.Валюта; t.ВидДвижения = new CashflowClause { Код = transferNode.Attributes["ВидДвиженияКод"].Value, Наименование = transferNode.Attributes["ВидДвиженияНаименование"].Value, РазрезДеятельности = "", ВидДвижения = "", RowNum = transferNode.Attributes["ВидДвиженияКод"].Value }; t.Company = this.company; t.НомерДокВходящий = transferNode.Attributes["НомерДокВходящий"].Value; bool IsIncome = t.Приход > t.Расход; //if (t.Валюта == "BYR") //{ // t.Курс = 1; //} //else { t.Курс = Double.Parse(transferNode.Attributes["КурсОплаты"].Value.Replace(".", ",")); } bs.Transfers.Add(t); } statements.Add(bs); } return statements; }
private Subconto GetSubconto(Transfer t, SubcontoType type) { if (t.Субконто1.ТипСубконто == type) return t.Субконто1; if (t.Субконто2.ТипСубконто == type) return t.Субконто2; if (t.Субконто3.ТипСубконто == type) return t.Субконто3; return null; }
private void CommitTransferToLocalList(Entities db, Transfer t, BankStatement statement) { tbl_Cashflow c = CreateCashflow(db, t, statement.ДатаДок); statement.Cashflows.Add(c); }
public void LoadFromDbf(string filename) { Helper.Log("Старт"); OdbcConnection conn = new OdbcConnection(); conn.ConnectionString = "Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=" + filename + ";Exclusive=No; NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;"; conn.Open(); if (conn.State == System.Data.ConnectionState.Open) { OdbcCommand oCmd = conn.CreateCommand(); oCmd.CommandText = "SELECT * FROM " + filename; DataTable ImportedTable = new DataTable(); ImportedTable.Load(oCmd.ExecuteReader()); ImportedRows.AddRange(ImportedTable.Select()); DataRow[] statementRows = ImportedTable.Select("REKVTYPE = 'Документ.Выписка' AND REKVIZIT <> 'Субконто3'"); for (int i = 0; i < statementRows.Length; i++) { DataRow row = statementRows[i]; double StatementStartRowIndex = (double)row[0]; double StatementEndRowIndex = GetStatementEndIndex(StatementStartRowIndex); BankStatement bs = new BankStatement(); bs.GUID = (double)row[0]; try { // ШАПКА double BaseGUID = bs.GUID - 1; bs.Наименование = row["REKVIZIT"].ToString(); Helper.Log(bs.Наименование); DataRow rowID = ImportedRows[(int)(BaseGUID + 2)]; bs.НомерДок = rowID[5].ToString(); DataRow rowDate = ImportedRows[(int)(BaseGUID + 3)]; bs.ДатаДок = rowDate[5].ToString(); // ТАБЛИЧНАЯ ЧАСТЬ List<Transfer> transfers = new List<Transfer>(); List<DataRow> TransferRows = new List<DataRow>(); string cond = "PARENTGUID = " + bs.GUID + " AND REKVIZIT = 'ВидДвижения'" + " AND REKVTYPE = 'Справочник.ДвиженияДенежныхСредств'"; TransferRows.AddRange(ImportedTable.Select(cond)); Console.WriteLine(bs.ДатаДок); string Currency = GetStatementCurrency(StatementStartRowIndex, StatementEndRowIndex); for (int j = 0; j < TransferRows.Count; j++) { DataRow transferBaseRow = TransferRows[j]; double TransferStartRowIndex = (double)transferBaseRow[0]; double TransferEndRowIndex = GetTransferEndIndex(TransferStartRowIndex); int transferBaseGUID = (int)(double)transferBaseRow[0] - 1; try { Transfer t = new Transfer(); t.КоррСчёт = ImportedRows[transferBaseGUID + 2][5].ToString(); t.НазначениеПлатежа = ImportedRows[transferBaseGUID + 1][5].ToString(); t.Субконто1 = GetSubconto(1, transferBaseGUID); t.Субконто2 = GetSubconto(2, transferBaseGUID); t.Субконто3 = GetSubconto(3, transferBaseGUID); t.Приход = GetTransferAttributeDouble("Приход", transferBaseGUID); t.Расход = GetTransferAttributeDouble("Расход", transferBaseGUID); t.Валюта = Currency; t.ВидДвижения = GetTransferCashflowAccount(transferBaseGUID); t.Company = this.company; t.НомерДокВходящий = GetTransferAttribute("НомерДокВходящий", transferBaseGUID); if (bs.Наименование.Contains('т') && bs.Наименование.Contains('д')) { } bool IsIncome = t.Приход > t.Расход; if (t.Валюта == "BYR") { t.Курс = 1; } else { t.Курс = GetTransferRate(IsIncome, StatementStartRowIndex, StatementEndRowIndex, TransferStartRowIndex, TransferEndRowIndex); } bs.Transfers.Add(t); } catch (Exception e) { Helper.Log("ID=" + transferBaseGUID.ToString() + ": " + e.Message); } } statements.Add(bs); Helper.Log("Платежей в выписке: " + bs.Transfers.Count); } catch (Exception e) { Helper.Log(e.Message); } } conn.Close(); Helper.Log("Импорт из DBF завершен."); if (this.DEBUG) { Console.WriteLine("Found statements: {0}\n", this.statements.Count); } } }
private void CommitTransferToDatabase(Entities db, Transfer t, string docDate) { tbl_Cashflow c = CreateCashflow(db, t, docDate); db.tbl_Cashflow.Add(c); db.SaveChanges(); }
public static Guid? GetAccountID(Entities db, Transfer t) { Guid? AccountID = null; Subconto Account = t.Субконто1; if (Account != null) { string AccountUNN = Account.Код; AccountUNN = AccountUNN.ToLower().Replace('o', '0').Replace('о', '0'); // заменяем русскую и латинскую букву О на НОЛЬ AccountID = DbHelper.GetAccountID(db, AccountUNN); } return AccountID; }
public static Guid? GetContractID(Entities db, Transfer t) { Guid? ContractID = null; Subconto Contract = t.Субконто2; if (Contract != null) { string ContractNumber = Helper.ParseContractCode(Contract.Код); ContractID = GetContractID(db, ContractNumber); if (ContractID == null) { ContractNumber = Helper.ParseContractNumber(Contract.Наименование); ContractID = GetContractID(db, ContractNumber); } } return ContractID; }
public static string GetContractName(Transfer t) { string name = ""; Subconto Contract = t.Субконто2; if (Contract != null) name = Contract.Наименование; return name; }