/// <summary> /// Wykonuje UPDATE na ilości leku /// </summary> /// <param name="medicine"></param> /// <param name="newAmount"></param> public void UpdateMedicineAmount(Medicine medicine, int newAmount) { sqlCommand.CommandText = $"UPDATE Medicines SET Amount = @Amount WHERE ID = @ID;"; SqlParameter sqlAmountParam = new SqlParameter { ParameterName = "@Amount", Value = newAmount, DbType = System.Data.DbType.Int32 }; sqlCommand.Parameters.Add(sqlAmountParam); SqlParameter sqlIDParam = new SqlParameter { ParameterName = "@ID", Value = medicine.ID, DbType = System.Data.DbType.Int32 }; sqlCommand.Parameters.Add(sqlIDParam); sqlCommand.ExecuteNonQuery(); sqlCommand.Parameters.Remove(sqlAmountParam); sqlCommand.Parameters.Remove(sqlIDParam); }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // "Zamówienie" // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Dodaje lek do zamówienia /// </summary> private static void AddToOrder() { OrderSqlTransaction orderSqlTransaction = new OrderSqlTransaction(); ConsoleEx.WriteLineWithColor(" Zamówienie ".PadLeft(21, '-').PadRight(30, '-'), ConsoleColor.Cyan); // Pobranie leku Medicine medicine = GetMedicineByIndex(); if (medicine == null) { ConsoleEx.WriteLineWithColor("Anulowano akcję!", ConsoleColor.Red); return; } // Pobranie ilości int quantity; Console.Write("Podaj ilość: "); try { quantity = int.Parse(Console.ReadLine().Trim()); if (quantity > medicine.Amount) { throw new QuantityException(); } } catch (QuantityException) { ConsoleEx.WriteLineWithColor($"Brak wystarczającej ilości leku w bazie!!", ConsoleColor.Red); return; } catch (Exception e) { ConsoleEx.WriteLineWithColor($"Nastąpił wyjątek w pobieraniu ilości: {e.GetType().ToString()}: {e.Message}!!", ConsoleColor.Red); return; } // Scieżka recepty if (medicine.WithPrescription == true) { ConsoleEx.WriteLineWithColor($"\nTen lek jest na receptę!", ConsoleColor.Red); Console.Write("Czy recepta jest już w systemie? (Y/N): "); // Scieżka dla recepty w systemie if (Console.ReadLine().Trim().ToUpper() == "Y") { // Pod wyświetlanie Console.WriteLine(); // Pobranie recepty Prescription prescription = GetPrescriptionWithConfirmation(); if (prescription == null) { return; } // Finalizacja zamówienia z receptą OrderFinalization(orderSqlTransaction, prescription, medicine, quantity); } // Scieżka dla nowej recepty else { // musimy takową pobrać Console.Write("\nCzy klient posiada receptę? (Y/N): "); if (Console.ReadLine().Trim().ToUpper() != "Y") { ConsoleEx.WriteLineWithColor("Anulowano akcję!", ConsoleColor.Red); return; } Prescription prescription = GetPrescriptionFromUser(); if (prescription == null) { return; } // Finalizacja zamówienia z receptą OrderFinalization(orderSqlTransaction, prescription, medicine, quantity); } } // Bez recepty else { // Finalizacja zamówienia z receptą OrderFinalization(orderSqlTransaction, null, medicine, quantity); } }
/// <summary> /// Finalizuje zamówienie - dla recepty /// Wykorzystuje: AddToOrder() /// </summary> public static void OrderFinalization(OrderSqlTransaction orderSqlTransaction, Prescription prescription, Medicine medicine, int quantity) { try { // Dla nowej recepty bez ID if (prescription != null && prescription.ID == null) { orderSqlTransaction.InsertPrescription(prescription); } // Update - odjęcie sprzedanej ilości orderSqlTransaction.UpdateMedicineAmount(medicine, (medicine.Amount - quantity)); // Dla leku bez recepty if (prescription == null) { orderSqlTransaction.InsertOrderWithoutPrescription(new Order(null, null, medicine.ID, DateTime.Now, quantity)); } // Dla leku z receptą else { orderSqlTransaction.InsertOrderWithPrescription(new Order(null, prescription.ID, medicine.ID, DateTime.Now, quantity)); } // Upewnienie się Console.WriteLine($"\nSuma zamówienia: {medicine.Price * quantity}zł. Czy klient zapłacił? (Y/N): "); if (Console.ReadLine().Trim().ToUpper() != "Y") { ConsoleEx.WriteLineWithColor("Anulowano akcję!", ConsoleColor.Red); orderSqlTransaction.TransactionRollback(); return; } orderSqlTransaction.TransactionCommit(); ConsoleEx.WriteLineWithColor("Sukces!", ConsoleColor.Green); } catch (Exception e) { ConsoleEx.WriteLineWithColor($"Wyjątek przy finalizacji: {e.GetType()}: {e.Message}", ConsoleColor.Red); orderSqlTransaction.TransactionRollback(); } }