Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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} наборов изменений."));
        }
Ejemplo n.º 3
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();
            }
        }
Ejemplo n.º 4
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.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 ();
            }
        }
Ejemplo n.º 5
0
        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 ();
        }
Ejemplo n.º 6
0
    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);
    }