void PreparedReport() { isDupSet = printTwo.Active; if (RegisteredEquipment == null) { return; } string ReportPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "Reports", "Equipment" + ".rdl"); DBWorks.SQLHelper Parameters = new DBWorks.SQLHelper("dup={0}&equipment_id=", printTwo.Active ? 1 : 0); Parameters.StartNewList("", ","); foreach (var equipment in RegisteredEquipment) { Parameters.AddAsList(equipment.Id.ToString()); } reportviewer2.LoadReport(new Uri(ReportPath), Parameters.Text, QSMain.ConnectionString); }
void UpdateJournal() { if (!canUpdate) return; logger.Info("Получаем журнал изменений..."); MySqlCommand cmd = (MySqlCommand)QSMain.ConnectionDB.CreateCommand (); DBWorks.SQLHelper sql = new DBWorks.SQLHelper("SELECT history_changeset.*, users.name as username FROM history_changeset " + "LEFT JOIN users ON history_changeset.user_id = users.id " ); if(entrySearch.Text != "" || comboProperty.SelectedItem is HistoryFieldDesc) sql.Add ("LEFT JOIN history_changes ON history_changeset.id = history_changes.changeset_id "); sql.StartNewList (" WHERE ", " AND "); if(datacomboObject.SelectedItem is HistoryObjectDesc) { sql.AddAsList ("history_changeset.object_name = @object_name"); cmd.Parameters.AddWithValue ("object_name", (datacomboObject.SelectedItem as HistoryObjectDesc).ObjectName); } if(ComboWorks.GetActiveId (comboUsers) > 0) { sql.AddAsList (" history_changeset.user_id = @user_id "); cmd.Parameters.AddWithValue ("user_id", ComboWorks.GetActiveId (comboUsers)); } if (comboAction.SelectedItem is ChangeSetType) { sql.AddAsList (" history_changeset.operation = @operation"); cmd.Parameters.AddWithValue ("operation", ((ChangeSetType)comboAction.SelectedItem).ToString("G")); } if(entrySearch.Text != "") { sql.AddAsList ("(history_changes.old_value LIKE @searchtext OR history_changes.new_value LIKE @searchtext)"); cmd.Parameters.AddWithValue ("searchtext", String.Format ("%{0}%", entrySearch.Text)); } if(comboProperty.SelectedItem is HistoryFieldDesc) { sql.AddAsList ("history_changes.path LIKE @property"); cmd.Parameters.AddWithValue ("property", String.Format ("%{0}%", (comboProperty.SelectedItem as HistoryFieldDesc).FieldName)); } if (!selectperiod.IsAllTime) { sql.AddAsList ("history_changeset.datetime BETWEEN @startdate AND @enddate"); cmd.Parameters.AddWithValue ("startdate", selectperiod.DateBegin.ToUniversalTime ()); cmd.Parameters.AddWithValue ("enddate", selectperiod.DateEnd.AddDays (1).ToUniversalTime ()); } logger.Debug (sql.Text); cmd.CommandText = sql.Text; using(MySqlDataReader rdr = cmd.ExecuteReader()) { ChangeSets = new List<HistoryChangeSet> (); while (rdr.Read()) { var changeset = new HistoryChangeSet () { Id = rdr.GetInt32 ("id"), UserId = DBWorks.GetInt (rdr, "user_id", -1), UserName = DBWorks.GetString (rdr, "username", "Неизвестный"), ChangeTime = rdr.GetDateTime ("datetime").ToLocalTime (), Operation = (ChangeSetType)Enum.Parse (typeof(ChangeSetType), rdr.GetString ("operation")), ObjectName = rdr.GetString ("object_name"), ItemId = rdr.GetInt32 ("object_id"), ItemTitle = DBWorks.GetString (rdr, "object_title", String.Empty) }; ChangeSets.Add (changeset); } } datatreeChangesets.ItemsDataSource = ChangeSets; logger.Info(RusNumber.FormatCase (ChangeSets.Count, "Загружен {0} набор изменений.", "Загружено {0} набора изменений.", "Загружено {0} наборов изменений.")); }
public void SaveChanges(MySqlTransaction trans) { logger.Info("Записывам изменения в списке файлов..."); string sql = String.Format("INSERT INTO {0} (name, item_group, item_id, size, file) " + "VALUES (@name, @item_group, @item_id, @size, @file)", TableName); MySqlCommand cmd = new MySqlCommand(sql, (MySqlConnection)QSMain.ConnectionDB, trans); cmd.Parameters.AddWithValue("@name", ""); cmd.Parameters.AddWithValue("@item_group", AttachToTable); cmd.Parameters.AddWithValue("@item_id", ItemId); cmd.Parameters.AddWithValue("@size", 0); cmd.Parameters.AddWithValue("@file", null); cmd.Prepare(); foreach (object[] row in FilesStore) { if ((int)row [(int)FilesCol.id] > 0) { continue; } logger.Info("Отправляем {0}...", row [(int)FilesCol.name]); byte[] file = (byte[])row [(int)FilesCol.file]; cmd.Parameters ["@name"].Value = row [(int)FilesCol.name]; cmd.Parameters ["@size"].Value = file.LongLength; cmd.Parameters ["@file"].Value = file; try { cmd.ExecuteNonQuery(); } catch (MySqlException ex) { if (ex.Number == 1153) { logger.Warn(ex, "Превышен максимальный размер пакета для передачи на сервер."); string Text = String.Format("При передачи файла {0}, " + "превышен максимальный размер пакета для передачи на сервер базы данных. " + "Файл не будет сохранен. " + "Это значение настраивается на сервере, по умолчанию для MySQL оно равняется 1Мб. " + "Максимальный размер файла поддерживаемый программой составляет 16Мб, мы рекомендуем " + "установить в настройках сервера параметр <b>max_allowed_packet=16M</b>. Подробнее о настройке здесь " + "http://dev.mysql.com/doc/refman/5.6/en/packet-too-large.html", row [(int)FilesCol.name]); MessageDialog md = new MessageDialog((Gtk.Window) this.Toplevel, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, Text); md.Run(); md.Destroy(); } else if (ex.Number == 1118) { logger.Warn(ex, "Ошибка: превышена допустимая длина строки."); string Text = String.Format("При передачи файла {0} была превышена максимально допустимая " + "длина строки в БД MySQL. Файл не будет сохранен. Также эта ошибка может " + "возникать при отсутствии возможности записи в log файл. В качестве возможного решения данной " + "проблемы мы рекомендуем установить в настройках сервера следующие параметры: " + "<b>\ninnodb_log_file_size = 499M" + "\ninnodb_log_buffer_size = 499M</b>.", row [(int)FilesCol.name]); MessageDialog md = new MessageDialog((Gtk.Window) this.Toplevel, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, Text); md.Run(); md.Destroy(); } else { throw ex; } } } if (deletedItems.Count > 0) { logger.Info("Удаляем удаленные файлы на сервере..."); DBWorks.SQLHelper sqld = new DBWorks.SQLHelper("DELETE FROM {0} WHERE id IN ", TableName); sqld.QuoteMode = DBWorks.QuoteType.SingleQuotes; sqld.StartNewList("(", ", "); deletedItems.ForEach(delegate(int obj) { sqld.AddAsList(obj.ToString()); }); sqld.Add(")"); cmd = new MySqlCommand(sqld.Text, (MySqlConnection)QSMain.ConnectionDB, trans); cmd.ExecuteNonQuery(); } }
public void SaveChanges(MySqlTransaction trans) { logger.Info ("Записывам изменения в списке файлов..."); string sql = String.Format ("INSERT INTO {0} (name, item_group, item_id, size, file) " + "VALUES (@name, @item_group, @item_id, @size, @file)", TableName); MySqlCommand cmd = new MySqlCommand (sql, (MySqlConnection)QSMain.ConnectionDB, trans); cmd.Prepare (); cmd.Parameters.AddWithValue ("@name", ""); cmd.Parameters.AddWithValue ("@item_group", AttachToTable); cmd.Parameters.AddWithValue ("@item_id", ItemId); cmd.Parameters.AddWithValue ("@size", 0); cmd.Parameters.AddWithValue ("@file", null); foreach (object[] row in FilesStore) { if ((int)row [(int)FilesCol.id] > 0) continue; logger.Info ("Отправляем {0}...", row [(int)FilesCol.name]); byte[] file = (byte[])row [(int)FilesCol.file]; cmd.Parameters ["@name"].Value = row [(int)FilesCol.name]; cmd.Parameters ["@size"].Value = file.LongLength; cmd.Parameters ["@file"].Value = file; try { cmd.ExecuteNonQuery (); } catch (MySqlException ex) { if (ex.Number == 1153) { logger.Warn (ex, "Превышен максимальный размер пакета для передачи на сервер."); string Text = String.Format ("При передачи файла {0}, " + "превышен максимальный размер пакета для передачи на сервер базы данных. " + "Файл не будет сохранен. " + "Это значение настраивается на сервере, по умолчанию для MySQL оно равняется 1Мб. " + "Максимальный размер файла поддерживаемый программой составляет 16Мб, мы рекомендуем " + "установить в настройках сервера параметр <b>max_allowed_packet=16M</b>. Подробнее о настройке здесь " + "http://dev.mysql.com/doc/refman/5.6/en/packet-too-large.html", row [(int)FilesCol.name]); MessageDialog md = new MessageDialog ((Gtk.Window)this.Toplevel, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, Text); md.Run (); md.Destroy (); } else if (ex.Number == 1118) { logger.Warn (ex, "Ошибка: превышена допустимая длина строки."); string Text = String.Format ("При передачи файла {0} была превышена максимально допустимая " + "длина строки в БД MySQL. Файл не будет сохранен. Также эта ошибка может " + "возникать при отсутствии возможности записи в log файл. В качестве возможного решения данной " + "проблемы мы рекомендуем установить в настройках сервера следующие параметры: " + "<b>\ninnodb_log_file_size = 499M" + "\ninnodb_log_buffer_size = 499M</b>.", row [(int)FilesCol.name]); MessageDialog md = new MessageDialog ((Gtk.Window)this.Toplevel, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, Text); md.Run (); md.Destroy (); } else throw ex; } } if (deletedItems.Count > 0) { logger.Info ("Удаляем удаленные файлы на сервере..."); DBWorks.SQLHelper sqld = new DBWorks.SQLHelper ("DELETE FROM {0} WHERE id IN ", TableName); sqld.QuoteMode = DBWorks.QuoteType.SingleQuotes; sqld.StartNewList ("(", ", "); deletedItems.ForEach (delegate(int obj) { sqld.AddAsList (obj.ToString ()); }); sqld.Add (")"); cmd = new MySqlCommand (sqld.Text, (MySqlConnection)QSMain.ConnectionDB, trans); cmd.ExecuteNonQuery (); } }
private void ChangeContracts(MySqlTransaction trans) { progressbarMain.Adjustment.Value = 0; progressbarMain.Adjustment.Upper = 2; progressbarMain.Text = "Изменение договоров..."; QSMain.WaitRedraw (); DBWorks.SQLHelper sql = new DBWorks.SQLHelper ("UPDATE contracts SET "); if (checkSign.Active) sql.AddAsList ("sign_date = @sign_date"); if(checkStart.Active) sql.AddAsList ("start_date = @start_date"); if(checkEnd.Active) sql.AddAsList ("end_date = @end_date"); sql.Add (" WHERE id IN ("); sql.StartNewList (); foreach(object[] row in ContractsListStore) { if((bool)row[0] && !((BadContractChecks)row[7]).Bad) sql.AddAsList (row [1].ToString ()); } sql.Add (")"); progressbarMain.Adjustment.Value++; QSMain.WaitRedraw (); MySqlCommand cmd = new MySqlCommand(sql.Text, QSMain.connectionDB, trans); cmd.Parameters.AddWithValue("@sign_date", dateSign.Date); cmd.Parameters.AddWithValue("@start_date", dateStart.Date); cmd.Parameters.AddWithValue("@end_date", dateEnd.Date); cmd.ExecuteNonQuery (); progressbarMain.Adjustment.Value++; QSMain.WaitRedraw (); }
void UpdateAccrual() { if (!accrualPrepared) return; logger.Info("Получаем таблицу начислений..."); TreeIter iter; string cashClause = ""; if(comboAccrualCash.GetActiveIter(out iter) && comboAccrualCash.Active > 0) { cashClause = String.Format ("cash_id = '{0}'", ComboWorks.GetActiveId (comboAccrualCash)); } bool legacyPayments = true; string incomeItemClause = ""; if (comboAccrualItem.GetActiveIter (out iter) && comboAccrualItem.Active > 0) { incomeItemClause = String.Format ("income_id = '{0}'", ComboWorks.GetActiveId (comboAccrualItem)); legacyPayments = false; } string clause = ((cashClause.Length > 0) && (incomeItemClause.Length > 0)) ? cashClause +" AND "+ incomeItemClause : cashClause + incomeItemClause ; string whereClause = (clause.Length > 0) ? "WHERE " + clause : ""; string paymentsTableName = legacyPayments ? "credit_slips ": "accrual_pays LEFT JOIN payment_details ON accrual_pays.id=payment_details.accrual_pay_id "; DBWorks.SQLHelper sql = new DBWorks.SQLHelper( "SELECT accrual.id as id, month, year, contracts.number as contract_no, no_complete, contracts.lessee_id as lessee_id, " + "lessees.name as lessee, sumtable.sum as sum, paidtable.sum as paidsum FROM accrual " + "LEFT JOIN contracts ON contracts.id = accrual.contract_id " + "LEFT JOIN lessees ON contracts.lessee_id = lessees.id " + "LEFT JOIN (SELECT accrual_id, SUM(count * price) as sum FROM accrual_pays "+ "LEFT JOIN services ON accrual_pays.service_id = services.id " + whereClause + " GROUP BY accrual_id) as sumtable " + "ON sumtable.accrual_id = accrual.id " + "LEFT JOIN ("+ "SELECT accrual_id, SUM(sum) as sum FROM " + paymentsTableName + whereClause + " GROUP BY accrual_id) as paidtable " + "ON paidtable.accrual_id = accrual.id"); sql.StartNewList (" WHERE ", " AND "); if (comboAccuralYear.ActiveText == NameOf2YearOption) sql.AddAsList (String.Format("year IN ('{0:yyyy}','{1:yyyy}')", DateTime.Today, DateTime.Today.AddYears (-1))); else if (comboAccuralYear.ActiveText != NameOfAllOption) sql.AddAsList (String.Format("year = '{0}'", comboAccuralYear.ActiveText)); if(comboAccrualMonth.Active > 0) { sql.AddAsList("accrual.month = '" + comboAccrualMonth.Active + "' "); } if(comboAccrualOrg.GetActiveIter(out iter) && comboAccrualOrg.Active > 0) { sql.AddAsList ("contracts.org_id = '" + comboAccrualOrg.Model.GetValue(iter,1) + "' "); } if(checkNotComplete.Active) { sql.AddAsList("no_complete = TRUE"); } if(checkOnlyNotPaid.Active) { sql.AddAsList("IFNULL(paidtable.sum, 0) < IFNULL(sumtable.sum,0)"); } MySqlCommand cmd = new MySqlCommand(sql.Text, QSMain.connectionDB); MySqlDataReader rdr = cmd.ExecuteReader(); var Column = new { Sum = rdr.GetOrdinal ("sum"), Paidsum = rdr.GetOrdinal ("paidsum"), Id = rdr.GetOrdinal ("id"), Month = rdr.GetOrdinal ("month"), Year = rdr.GetOrdinal("year"), ContractNumber = rdr.GetOrdinal ("contract_no"), NotComplete = rdr.GetOrdinal ("no_complete"), LesseeId = rdr.GetOrdinal ("lessee_id"), LesseeName = rdr.GetOrdinal("lessee") }; AccrualList = new List<AccrualListEntryDTO> (); while (rdr.Read()) { decimal rowsum, rowpaidsum; rowsum = DBWorks.GetDecimal (rdr, Column.Sum, 0m); rowpaidsum = DBWorks.GetDecimal (rdr, Column.Paidsum, 0m); AccrualList.Add (new AccrualListEntryDTO { Id = rdr.GetInt32 (Column.Id), MonthText = String.Format ("{0:MMMM yyyy}", new DateTime (rdr.GetInt32 (Column.Year), rdr.GetInt32 (Column.Month), 1)), Month = rdr.GetInt32 (Column.Month), ContractNumber = rdr [Column.ContractNumber].ToString (), LesseeId = rdr.GetInt32 (Column.LesseeId), Lessee = rdr [Column.LesseeName].ToString (), SumText = String.Format ("{0:C}", rowsum), Sum = rowsum, PaidSumText = String.Format ("{0:C}", rowpaidsum), PaidSum = rowpaidsum, DebtText = String.Format ("{0:C}", rowsum - rowpaidsum), Debt = rowsum - rowpaidsum, NotComplete = rdr.GetBoolean (Column.NotComplete) }); } rdr.Close (); treeviewAccrual.ItemsDataSource = AccrualList; Refilter (); logger.Info("Ok"); CalculateAccrualSum(); OnTreeviewAccrualCursorChanged (null, EventArgs.Empty); }