/// <summary> /// Přetížení oprerátoru, slouží ke sčítání cen a objemu tankování /// </summary> /// <returns>Nový objekt tankování se sečtenýmy hodnotami ceny a objemu</returns> public static Gas operator +(Gas g1, Gas g2) { Gas result = new Gas(); result.cost = g1.cost + g2.cost; result.mililiters = g1.mililiters + g2.mililiters; return result; }
/// <summary> /// Získání souhrnné informace o včech tankování auta /// </summary> /// <param name="carId">Identifikace auta, o kterém chceme informace získat</param> /// <returns>ˇŘetězec s informacemi</returns> /// <exception cref="CarExpensesException">Při chybě aplikace</exception> public string getTotalGasInfo(int carId) { GasResponse response = this.getCarGasses(carId); if (response.success) { Gas gas = new Gas(); int count = 0; foreach (Gas g in response.gasList) { count++; gas += g; } return "Total " + (float)(gas.mililiters / 100) + " liters for " + gas.cost.ToString("C") + " (" + count + "x)"; } else { return "Unknown total services stats."; } }
/// <summary> /// Vkládá informaci o novém tankování do databáze. /// Vše je potřebné se nachází v objektu tankování (parametr <paramref name="gas">gas</paramref>), /// včetné ID auta, ke kterému se vztahuje. /// </summary> /// <param name="gas">Nová informace o tankování pro vložení do databáze</param> /// <returns>True při úspěchu vložení</returns> /// <exception cref="CarExpensesDatabaseException">Při chybě práce s databází</exception> public bool addGas(Gas gas) { using (OracleCommand cmdInsert = new OracleCommand()) { try { string sqlInsert = "INSERT INTO \"gas\" (\"car_id\", \"km\", \"mililiters\", \"cost\", \"date\") "; sqlInsert += "values (:p_car_id, :p_km, :p_mililiters, :p_cost, to_date(:p_date, 'yyyy/mm/dd'))"; cmdInsert.CommandText = sqlInsert; cmdInsert.Connection = connection; OracleParameter pCarId = new OracleParameter(); pCarId.OracleDbType = OracleDbType.Decimal; pCarId.Value = gas.carId; pCarId.ParameterName = "p_car_id"; OracleParameter pKm = new OracleParameter(); pKm.OracleDbType = OracleDbType.Decimal; pKm.Value = gas.km; pKm.ParameterName = "p_km"; OracleParameter pMililiters = new OracleParameter(); pMililiters.OracleDbType = OracleDbType.Decimal; pMililiters.Value = gas.mililiters; pMililiters.ParameterName = "p_mililiters"; OracleParameter pCost = new OracleParameter(); pCost.OracleDbType = OracleDbType.Decimal; pCost.Value = gas.cost; pCost.ParameterName = "p_cost"; OracleParameter pDate = new OracleParameter(); //pDate.OracleDbType = OracleDbType.Date; pDate.Value = gas.date.ToString("yyyy/MM/dd"); pDate.ParameterName = "p_date"; cmdInsert.Parameters.Add(pCarId); cmdInsert.Parameters.Add(pKm); cmdInsert.Parameters.Add(pMililiters); cmdInsert.Parameters.Add(pCost); cmdInsert.Parameters.Add(pDate); if ( cmdInsert.ExecuteNonQuery() > 0 ) { return true; } else return false; } catch (OracleException ex) { switch (ex.Number) { case 1: throw new CarExpensesDatabaseException("Gas ID " + gas.id + " already exists."); //case 2291: // throw new CarExpensesDatabaseException("Car ID " + gas.carId + " doesn't exist."); case 12545: throw new CarExpensesDatabaseException("The database is unavailable."); default: throw new CarExpensesDatabaseException("Database error: " + ex.Message.ToString()); } } catch (CarExpensesDatabaseException ex) { throw new CarExpensesDatabaseException(ex.Message.ToString()); } catch (Exception ex) { throw new CarExpensesDatabaseException("Unexpected error: " + ex.Message.ToString()); } } }
/// <summary> /// Přidání nového tankování k aktuálně přihlášenému uživateli /// </summary> /// <param name="carId">Identifikace auta, do kterého bylo tankováno</param> /// <param name="km">Stav tachometru při tankování</param> /// <param name="cost">Cena za tankování</param> /// <param name="liters">Počet natankovaných litrů paliva</param> /// <param name="date">Datum tankování</param> /// <returns>Objekt <see cref="Response"/>, kde je uložen stav akce a zpráva.</returns> /// <exception cref="CarExpensesException">Při chybě aplikace</exception> public Response addGas(int carId, int km, float liters, int cost, DateTime date) { if (notLogged()) return new Response(false, "You are NOT logged in."); if (km < 1 || liters < 1 || cost < 1) return new Response(false, "None of values can be smaller than 1."); Response response = new Response(); try { if (carDAO.userHasCar(user.id, carId) == false) { return new Response(false, "User ID " + user.id + " is not owner of car ID " + carId + "."); } Gas gas = new Gas(); gas.carId = carId; gas.km = km; gas.mililiters = (int) Math.Round(liters * 1000); gas.cost = cost; gas.date = date; if (gasDAO.addGas(gas) == true) { response.message = "Gas was successfuly added."; response.success = true; } else { response.message = "Gas wasn't added."; response.success = false; } } catch (CarExpensesDatabaseException ex) { response.success = false; response.message = ex.Message.ToString(); } return response; }
/// <summary> /// Získává všechny informace o tankování vztahující se ka autu danému parametrem <paramref name="carId">carId</paramref> /// </summary> /// <param name="carId">ID auta</param> /// <returns>Seznam informací o tankování pro dané auto</returns> /// <exception cref="CarExpensesDatabaseException">Při chybě práce s databází</exception> public List<Gas> getCarGasses(int carId) { List<Gas> gasList = new List<Gas>(); using (OracleCommand cmd = new OracleCommand()) { try { cmd.Connection = connection; cmd.CommandText = "SELECT * FROM \"gas\" WHERE \"car_id\" = :p_car_id ORDER BY \"date\" DESC"; cmd.CommandType = System.Data.CommandType.Text; OracleParameter pCarId = new OracleParameter(); pCarId.OracleDbType = OracleDbType.Decimal; pCarId.Value = carId; pCarId.ParameterName = "p_car_id"; cmd.Parameters.Add(pCarId); using (OracleDataReader dr = cmd.ExecuteReader()) { if (dr.HasRows) { while (dr.Read()) { Gas gas = new Gas(); gas.id = Convert.ToInt32(dr["id"].ToString()); gas.carId = Convert.ToInt32(dr["car_id"].ToString()); gas.km = Convert.ToInt32(dr["km"].ToString()); gas.mililiters = Convert.ToInt32(dr["mililiters"].ToString()); gas.cost = Convert.ToInt32(dr["cost"].ToString()); gas.date = Convert.ToDateTime(dr["date"].ToString()); gasList.Add(gas); } } return gasList; } } catch (OracleException ex) { switch (ex.Number) { case 12545: throw new CarExpensesDatabaseException("The database is unavailable."); default: throw new CarExpensesDatabaseException("Database error: " + ex.Message.ToString()); } } catch (CarExpensesDatabaseException ex) { throw new CarExpensesDatabaseException(ex.Message.ToString()); } catch (Exception ex) { throw new CarExpensesDatabaseException("Unexpected error: " + ex.Message.ToString()); } } }