/// <summary> /// Обновляет телефон в БД. /// </summary> public void Update() { try { connection.Open(); string queryString = "UPDATE phone_number SET number = @number, subscriber_id = @subscriber_id, tariff_id = @tariff_id WHERE id = @id OR number = @number"; MySqlCommand cmd = new MySqlCommand(queryString, connection); cmd.Parameters.AddWithValue("@number", _number); cmd.Parameters.AddWithValue("@subscriber_id", _subscriberID); cmd.Parameters.AddWithValue("@tariff_id", _tariffID); cmd.Parameters.AddWithValue("@id", _id); cmd.ExecuteNonQuery(); } catch (MySqlException ex) { System.Windows.Forms.MessageBox.Show(ex.ToString()); } finally { connection.Close(); } if (_tariffID != _newTariffID) { updateTariffHistory(); if (_tariffID > 0) { Service s = Service.SelectServiceByName(Constants.TariffChanging); Charge ch = new Charge(this, s, 0, DateTime.Now); ch.WriteOff(); } } _tariffID = _newTariffID; _newTariffID = -1; }
/// <summary> /// Возвращает расчет списаний за звонки /// </summary> /// <param name="from">Начальная дата</param> /// <param name="to">Конечная дата</param> /// <returns>Списания</returns> public static List<Charge> CalculateCallsCharges(DateTime from, DateTime to) { Service service = Service.SelectServiceByName(Constants.ChargeCalls); List<PhoneNumber> phones = PhoneNumber.SelectAllPhoneNumbers(); double full_sum = 0; int phones_count = 0; //int calls_count = 0; List<Charge> result = new List<Charge>(); foreach (PhoneNumber pn in phones) { double sum = 0; try { connection.Open(); string query = @" SELECT SUM(TIMESTAMPDIFF(SECOND, c.start_time, c.end_time) * ( SELECT cost FROM price WHERE ( tariff_id = ( SELECT tariff_id FROM tariff_history WHERE phone_id = @phone_id AND start_date <= c.start_time AND (end_date > c.start_time OR end_date IS NULL) ) AND c.called_number LIKE CONCAT(prefix, '%') ) ORDER BY LENGTH(prefix) DESC LIMIT 1 ) ) as sum FROM calls c WHERE calling_number LIKE(@number) AND end_time IS NOT NULL AND start_time >= @from AND start_time <= @to"; MySqlCommand cmd = new MySqlCommand(query, connection); cmd.Parameters.AddWithValue("@phone_id", pn.ID); cmd.Parameters.AddWithValue("@number", pn.Number); cmd.Parameters.AddWithValue("@from", from); cmd.Parameters.AddWithValue("@to", to); MySqlDataReader r = cmd.ExecuteReader(); if (r.Read()) { sum = r.IsDBNull(r.GetOrdinal("sum")) ? 0 : r.GetDouble("sum"); } r.Close(); } catch (MySqlException ex) { System.Windows.Forms.MessageBox.Show(ex.ToString()); } finally { connection.Close(); } /*List<Call> calls = pn.SelectCalls(from, to); foreach (Call call in calls) { if (call.CallingNumber == pn.Number) { Tariff tariff = pn.SelectTariffByDate(call.StartTime); sum += CalculateCallCost(call, tariff); calls_count++; } }*/ if (sum > 0) { DateTime time = (to.Month == DateTime.Now.Month && to.Year == DateTime.Now.Year || to > DateTime.Now) ? DateTime.Now : to; Charge callsCharge = new Charge(pn, service, sum, time); result.Add(callsCharge); full_sum += sum; phones_count++; } } full_sum = Math.Round(full_sum, 2); //System.Windows.Forms.MessageBox.Show("Будет списано " + full_sum.ToString() + " " + Constants.Currency + " с " + phones_count.ToString() + " номеров.", "Расчет завершен"); return result; }