public void ReturnItems(IList <PurchaseTransaction_Item> theItems, LoginSession theSession) { IList <ReturnTransactionItem> newItems = this.convertItemsToReturnItems(theItems); ReturnTransaction theTransaction = new ReturnTransaction { Employee_id = theSession.Id.ToString(), returnTime = DateTime.Now }; var id = this.returnRepo.AddOne(theTransaction); foreach (var returnTransactionItem in newItems) { returnTransactionItem.ReturnTransactionId = id; } try { this.returnItemRepo.AddList(newItems); } catch (Exception) { this.DeleteTransaction(newItems, id); } }
/// <summary> /// This method updates a return transaction. /// </summary> /// <param name="transaction">A return transaction</param> internal void UpdateTransaction(ReturnTransaction transaction) { string updateStatement = @"Update [dbo].[ReturnTransaction] SET [FineDueTotal] = @newFineDueTotal, [RefundDueTotal]=@newRefundDueTotal Where ReturnID = @returnID"; using (SqlConnection connection = RentMeDBConnection.GetConnection()) { connection.Open(); using (SqlCommand cmd = new SqlCommand(updateStatement, connection)) { cmd.Parameters.AddWithValue("@newFineDueTotal", transaction.FineDueTotal); cmd.Parameters.AddWithValue("@newRefundDueTotal", transaction.RefundDueTotal); cmd.Parameters.AddWithValue("@returnID", transaction.ReturnID); cmd.ExecuteNonQuery(); connection.Close(); } } }
/// <summary> /// Method that returns all the return transactions /// </summary> /// <returns>a list of return transactions</returns public List <ReturnTransaction> GetAllReturnTransactions(int customerId) { string sqlStatement = "Select return_transaction_id as ReturnTransactionID, " + "return_date as ReturnDate, checked_in_by as CheckedinBy, concat(first_name, ' ', last_name) as EmployeeName, " + "late_fee as LateFee, refund_amount as RefundAmount from return_transaction join employee on checked_in_by = employee_id " + "where customer_id=@CustomerId;"; Console.WriteLine(sqlStatement); List <ReturnTransaction> transactionList = new List <ReturnTransaction>(); using (SqlConnection connection = FurnitureRentalsDBConnection.GetConnection()) { connection.Open(); using (SqlCommand selectCommand = new SqlCommand(sqlStatement, connection)) { selectCommand.Parameters.AddWithValue("@CustomerID", customerId); using (SqlDataReader reader = selectCommand.ExecuteReader()) { while (reader.Read()) { ReturnTransaction transaction = new ReturnTransaction(); transaction.ReturnTransactionID = (int)reader["ReturnTransactionID"]; transaction.ReturnDate = (DateTime)reader["ReturnDate"]; transaction.CheckedinBy = (int)reader["CheckedinBy"]; transaction.EmployeeName = reader["EmployeeName"].ToString(); transaction.LateFee = (decimal)reader["LateFee"]; transaction.RefundAmount = (decimal)reader["RefundAmount"]; transactionList.Add(transaction); } } } } return(transactionList); }
/// <summary> /// This method creates a return transaction. /// </summary> /// <param name="transaction">A return transaction</param> /// <returns>The return transaction ID</returns> public int CreateReturnTransaction(ReturnTransaction transaction) { string insertStatement = @"INSERT INTO dbo.ReturnTransaction (ReturnDate , FineDueTotal , RefundDueTotal , EmployeeID ) VALUES (@returnDate ,@fineDueTotal ,@refundDueTotal ,@employeeID ); SELECT SCOPE_IDENTITY()"; using (SqlConnection connection = RentMeDBConnection.GetConnection()) { connection.Open(); using (SqlCommand cmd = new SqlCommand(insertStatement, connection)) { cmd.Parameters.AddWithValue("@returnDate", transaction.ReturnDate); cmd.Parameters.AddWithValue("@fineDueTotal", 0); cmd.Parameters.AddWithValue("@refundDueTotal", 0); cmd.Parameters.AddWithValue("@employeeID", transaction.EmployeeID); var idObject = cmd.ExecuteScalar(); var id = int.Parse(idObject.ToString()); connection.Close(); return(id); } } }
/// <summary> /// Method that posts the return transactions of a given customer /// </summary> /// <param name="returnTransaction">return transaction</param> /// <param name="transactionList">list of items</param> /// <returns>true if successfull otherwise false</returns> public bool PostReturnTransaction(ReturnTransaction returnTransaction, List <ReturnCart> ReturnItemList) { SqlTransaction sqlTransaction = null; using (SqlConnection connection = FurnitureRentalsDBConnection.GetConnection()) { string sqlStatement = "INSERT INTO Return_Transaction (customer_id, return_date, " + "checked_in_by, late_fee, refund_amount) " + "VALUES (@CustomerID, @ReturnDate, @CheckedinBy, @LateFee, @RefundAmount); SELECT SCOPE_IDENTITY() "; connection.Open(); sqlTransaction = connection.BeginTransaction(); using (SqlCommand insertCommand = new SqlCommand(sqlStatement, connection, sqlTransaction)) { insertCommand.Connection = connection; insertCommand.Parameters.AddWithValue("@CustomerID", returnTransaction.CustomerID); insertCommand.Parameters.AddWithValue("@ReturnDate", returnTransaction.ReturnDate); insertCommand.Parameters.AddWithValue("@CheckedinBy", returnTransaction.CheckedinBy); insertCommand.Parameters.AddWithValue("@LateFee", returnTransaction.LateFee); insertCommand.Parameters.AddWithValue("@RefundAmount", returnTransaction.RefundAmount); returnTransaction.ReturnTransactionID = Convert.ToInt32(insertCommand.ExecuteScalar()); if (returnTransaction.ReturnTransactionID > 0) { this.InsertReturnItem(connection, returnTransaction.ReturnTransactionID, ReturnItemList, sqlTransaction); } var rentalIdList = new List <int>(); foreach (ReturnCart returnItem in ReturnItemList) { if (!rentalIdList.Contains(returnItem.RentalID)) { rentalIdList.Add(returnItem.RentalID); } this.furnitureDBDAL.UpdateInventory(returnItem.FurnitureID, returnItem.Quantity, connection, sqlTransaction); } foreach (int rentalTransactionId in rentalIdList) { List <Furniture> furnitureList = this.rentalItemDBDAL.GetRentalItemByTransactionID(rentalTransactionId, connection, sqlTransaction); bool isCloseTransaction = true; int totalQuantityRented = 0; int totalQuantityReturned = 0; foreach (Furniture furniture in furnitureList) { totalQuantityRented = furniture.QuantityOrdered; totalQuantityReturned = this.GetQuantityReturned(furniture.RentalItemID, connection, sqlTransaction); if (totalQuantityRented != totalQuantityReturned) { isCloseTransaction = false; } } if (isCloseTransaction) { this.rentalTransactionDBDAL.CloseRentalTransaction(rentalTransactionId, connection, sqlTransaction); } } sqlTransaction.Commit(); return(true); } } }
/// <summary> /// Deletes the transaction. /// </summary> /// <param name="entity">The entity.</param> public void DeleteTransaction(ReturnTransaction entity) { this.returnTransaction.Delete(entity); }
/// <summary> /// Adds the and return transaction. /// </summary> /// <param name="entity">The entity.</param> /// <returns></returns> public int AddAndReturnTransaction(ReturnTransaction entity) { return(this.returnTransaction.AddAndReturn(entity)); }
/// <summary> /// Method that posts the return transactions of a given customer /// </summary> /// <param name="returnTransaction">return transaction</param> /// <param name="transactionList">list of items</param> /// <returns>true if successfull otherwise false</returns> public bool PostReturnTransaction(ReturnTransaction returnTransaction, List <ReturnCart> transactionList) { return(this.returnTransactionDBDAL.PostReturnTransaction(returnTransaction, transactionList)); }
/// <summary> /// This method updates the transaction. /// </summary> /// <param name="transaction"></param> internal void UpdateTransaction(ReturnTransaction transaction) { this.returnDataSource.UpdateTransaction(transaction); }
/// <summary> /// This method returns an int of return transaction. /// </summary> /// <param name="transaction"></param> /// <returns>An int of returnTransactionID</returns> internal int CreateReturnTransaction(ReturnTransaction transaction) { return(this.returnDataSource.CreateReturnTransaction(transaction)); }
/// <summary> /// This method submits a return when the button is clicked. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonReturn_Click(object sender, EventArgs e) { ReturnTransaction transaction = new ReturnTransaction(); transaction.EmployeeID = employeeID; transaction.ReturnDate = DateTime.Now; int returnID = returnTransactionController.CreateReturnTransaction(transaction); transaction.ReturnID = returnID; decimal finalBalance = 0; foreach (var itemToReturn in itemsToReturn) { var returnItem = new ReturnItem(); returnItem.ReturnID = returnID; returnItem.RentalID = itemToReturn.RentalID; returnItem.SerialNumber = itemToReturn.SerialNumber; returnItem.Quantity = itemToReturn.Quantity; var furnitures = furnitureController.GetFurnituresBySerialNumber(returnItem.SerialNumber); var itemScheduledReturn = rentalTransactionController.GetRentalTransactionByRentalID(returnItem.RentalID); var daysLate = DayNum(DateTime.Now.Date.ToString(), itemScheduledReturn.ScheduledReturn.ToString()) + 1; var daysEarly = DayNum(itemScheduledReturn.ScheduledReturn.ToString(), DateTime.Now.Date.ToString()) - 1; if (furnitures.Count > 0) { var furniture = furnitures.FirstOrDefault(); int resultDiff = DateTime.Compare(DateTime.Now.Date, itemScheduledReturn.ScheduledReturn); if (resultDiff < 0) { returnItem.RefundDue = Convert.ToDecimal(furniture.DailyRentalRate * daysEarly * returnItem.Quantity); returnItem.FineDue = 0; finalBalance += returnItem.RefundDue; } else if (resultDiff == 0) { returnItem.RefundDue = 0; returnItem.FineDue = 0; } else { returnItem.FineDue = Convert.ToDecimal((furniture.FineRate + furniture.DailyRentalRate) * daysLate * returnItem.Quantity); returnItem.RefundDue = 0; finalBalance -= returnItem.FineDue; } } var result = returnController.CreateReturnItem(returnItem); if (!result) { MessageBox.Show("Failed to Return Items."); return; } } if (finalBalance > 0) { transaction.RefundDueTotal = finalBalance; transaction.FineDueTotal = 0; } else { transaction.FineDueTotal = Math.Abs(finalBalance); transaction.RefundDueTotal = 0; } returnTransactionController.UpdateTransaction(transaction); MessageBox.Show("Successfully Returned Furniture Items"); buttonSearch_Click(sender, e); MessageBox.Show("Fine Due: " + "$ " + transaction.FineDueTotal.ToString() + "\n" + "Refund Due: " + "$ " + transaction.RefundDueTotal.ToString()); this.Clear(); }