This is the instruction document for the final challenge of this course, Papa Bob's Mega Challenge. In this challenge, you'll be revisiting the website of Papa Bob's Pizza, a fictitious pizza company used in an earlier challenge. The goal of this challenge is to make a website that allows a user to order a pizza using a series of Server Controls, save that order to a database, and then display a list of all current orders to the workers of Papa Bob's in a GridView.
The main requirement of this challenge is to create the website using a Maintenance-Driven approach architecture. This means that you'll be splitting up the project into multiple layers that separate concerns appropriately between Presentation, Domain and Persistence. In addition to this, data should be passed between the layers using Data Transfer Objects where appropriate.
To create the order form (which will be your Default.aspx page) refer to the OderForm.png image located inside the provided code file. Your form will be styled using Bootstrap as was demonstrated in earlier lessons:
The prices for different pizza sizes, crusts and toppings are as follow. However, your implementation should take into account that these prices may need to be changed over time.
The order's total amount should be visible to the user and should update each time they make a selection that would affect the price of the pizza. However, the price should only calculate after the minimum necessary information is gathered from the user (Size and Crust selections).
When the user clicks the Order button, validate the data where appropriate. Provide the end user with an appropriate message telling him or her what to do in order to properly submit the order. All text fields are required, and the user must select a form of payment. If data is missing, communicate between the layers with exceptions. When the order has been successfully placed, redirect the user to a simple Success.aspx page.
After the order is successfully place, the information of the order should be stored in a SQL Server database. This information should be used to populate a GridView located on an OrderManagement.aspx page. This GridView will show all uncompleted orders to the user, and should have a hyperlink button for each row with the word "Finished". Upon being pressed, this button should hide the order from this GridView, but not delete it from the database. Papa Bob's will need a history of orders for future reference.
More detailed requirements, as well as a screenshot for the Order Form are included in the provided code file. As always, do your best to solve this challenge on your own. It is the largest and most detailed challenge of this course, so if you struggle with it, that's ok. Do as much as you can by yourself and, where necessary, refer to the included solution files to solve the issue you're facing. Review the lessons dealing with this Maintenance-Driven approach and then do your best to implement the workflow in this challenge. Good luck!
Papa Bob's Mega Challenge