Register
Submit a solution
The challenge is finished.

Challenge Overview

Basic requirements for this challenge:
- Integration of ASP.Net MVC Core Web API and frontend
- Make sure all required endpoints implemented based on on Web API
- Integrate https://www.authorize.net/ API to handle the payment system.

Final Submission Guidelines

App environment:
- ASP.Net MVC Core

Challenge Overview
Hoherberg Ski School is very excited to see how the application look on real life based on previous winning storyboard. This web application need build using ASP.Net MVC Core with focus on desktop resolution only.

This is the 1st of a Integration Code Challenge Series to wrap up the Hoherberg Ski School web application. For this challenge we need you linked Web API and the frontend, you need focus specifically on the Reservation section and and code must be easy to upgrade by future developers for the next Hoherberg Ski School Integration Code Challenge.

Good luck and let's discuss any questions you have. See you in the challenge forum!

Technology Stack
- ASP.Net MVC Core
- HTML5
- CSS3
- Javascript
- Jquery

Deployment environment requirements
- localhost
- live site

Challenge Assets:
Ragnar: Check challenge forum to see the url.
- Frontend repo: https://gitlab.com/alta-ski/frontend  
- Frontend Demo: https://hoherberg-ski-school.herokuapp.com
- Backend repo: https://gitlab.com/alta-ski/backend

About Current Implementation
- Frontend & Backend app using ASP.Net MVC Core
- Getting started on ASP.Net MVC Core here: https://docs.microsoft.com/en-us/aspnet/core/getting-started/?view=aspnetcore-2.1&tabs=macos
- You need use docker to setup database for this application. Read documentation on architecture and backend repo: https://gitlab.com/alta-ski/architecture
- Let us know any problem when you setup both frontend or backend

General
- Make sure all data linked between frontend and Web Api
- Both application built using ASP.Net MVC Core. Suggest what is the best way to connect each application.
- Make sure you submission update the unit testings after linking the Web API
- Create preloader while pulling data from Web API for any sections. Make sure styling fits with current application
- Update the url routes to use smallcase. From Reservations to reservations. Fix all routes.
- Important: DO NOT display static data or load from JSON files. All required sections on this challenge need pull data from Web API. You can return 0 or NULL if no data on the endpoints
- We need Integrate https://www.authorize.net/ API to handle the payment system. Check details below.
- Read API Reference here: https://developer.authorize.net/api/reference/index.html
- You need sign up to create a Sandbox Account: https://developer.authorize.net/hello_world/sandbox/
- We will replace the licensed account after development completed.
- Test and check your submissions on all required browsers

Individual Requirements
1). Login

API endpoint: POST {{url}}/login
- Return error if password not match or any other error
- Click Logout button need use this endpoint: POST {{url}}/logout
- Make sure 2 user roles only able to access the related pages:

Reservationist
- Reservations Check in

Supervisor
- Reservations Check in
- Scheduler
- Instructors
- Products
- Manage Notifications

2). Widget Availability
API endpoint: GET {{url}}/availability
- This is placed on top of page of Reservations
- Data on endpoint might be empty, you can just return the empty/null data. Keep table blank.
- The hover on the capacity widget need switch # of instructor and max level? It would look like - 12 Instructors : Level 5
- Make sure you can send date range parameters.

3). Reservations list
API endpoint: GET {{url}}/reservations/search
- Create new reservation button need load the product list: GET {{url}}/lookup/products
- Make sure pagination works when change results or click the pagination buttons
- User need able to sort each columns
- User parameters to accept all columns input. You can see this on table header.
- You need make sure filters and search working with current endpoints
- Each row have the details for Customer Information and Reservation information
- Just display returned data from endpoint.
- Email url need use href mailto: format
- Capture Status different color:
--- Confirmed = res has all dates and times confirmed,
--- Checked in = res has checked in for their lesson,
--- Pending = some or all dates/times in res needs manager approval,
--- Waitlist = res waiting for space on a group lesson (fixed capacity).
- Update Start times and End Times only need to range from 8:30 am- 4:30pm
- Use endpoint to do the check-in: PUT {{url}}/reservations/{id}/checkin
- Use barcode library to auto generated the barcode graphics. You can render the Reservation ID
- Click Print need remain working.
- Use endpoint to update the Contact: PUT {{url}}/reservations/{id}/contact
- Edit Reservation need take to separated page, capture the ReservationID
- Cancel Reservation need call this endpoint: POST {{url}}/reservations/{id}/cancel
- Refund Credit Card. See API Reference here: https://developer.authorize.net/api/reference/index.html#payment-transactions-refund-a-transaction
- At the same time need use this endpoint Refund Credit Card. POST {{url}}/bookings/{guid}/refundFee
- Capture Booking Fee: POST {{url}}/bookings/{guid}/captureFee

4). Create new reservation
- Create new reservations need grab list from Product endpoints. You can see the new reservation dropdown: GET {{url}}/lookup/products
- Create new Reservation need use this endpoint: POST {{url}}/reservations/
- Capture all fields in page
- Click View match need find some data based on First name, last name and DOB. Use this endpoint: GET {{url}}/skiers/search
- on Reservations date/times need support multiple date/times
- Need return message if user not found.
- If Skier not found, you need create new Skier first(POST {{url}}/skiers/), get the Skier ID and then save to this Create New Reservation
- Select the match Skier row need return data to Create new reservation page
- Update Start times and End Times only need to range from 8:30 am- 4:30pm
- On the right side calendar displayed the selected instructor available time.
- You can use render data based on this endpoint: {{url}}/instructors/search.
- it’s availability based on instructor with booking data (date, time, skill, and age) - green is available, red is not available, yellow (pending) is when an instructor in the private POD is ‘OFF’ and needs further manager approval.
- Need able to add Additional Skier
- Need return Skier history from this endpoint: GET {{url}}/skiers/{id}/history
- Need endpoints to display completed Reservations Orders Cart: GET {{url}}/reservations/cart
- Detect if additional skier has a higher level than the main skier. Return the error message.
- If there’s no selected Skier, need call the PUT Skier endpoint before submit the data.
- Need return success/error message when sending data
- Skier details and Contact info boxes on the 'Create Res' form should auto fill from the captured information above.
- If user select no option on the Contact details need use this endpoint: PUT {{url}}/reservations/{id}/contact
- Click Book button need save the booking: POST {{url}}/bookings

5). Edit reservations
API Endpoint: PUT {{url}}/reservations/{id}
- When edit reservations need pull all required data, including the card detail and billing information
- Fill all data from database
- Make sure dropdown auto-selected with same value
- Reservation details not editable on the bottom
- Notice there’s Release Booking Fee and Capture Booking Fee
- Need able to save the Note to booking receipt email
- Need return success/error message when sending data

6). Booking Summary
API Endpoint: {{url}}/bookings/daf4500d-ab47-4e1c-8e6e-5db9e8b4ef32
- This endpoints will gather all completed/booked reservation.
- Need able to Send confirmation, waive booking fee, input fee amount, add note and cancellation policy checkbox
- Checked on Send confirmation need send the email message to user email address. API Endpoint: TBD
- Waive Booking fee,  input fee amount, add note and cancellation policy checkbox use this endpoint: PUT {{url}}/bookings/{guid}
- Calculate the total booking fee from all bookings
- Reference number can use the Reservation id
- Notice the credit card information placed on the bottom. Need able to save the data
- Click book button need use this endpoint: POST {{url}}/bookings/{guid}
- Cancel button take user back to Reservation List
- Make sure it will also send send for all reservations in table list

Web Browsers Requirements
Your submission must look and work consistently across these following browsers on the latest versions:  
- IE11
- Chrome,
- Edge,
- Safari,
- Firefox

What To Submit?
- Patch file of updated submissions
- Updated README.md (if Any).

ELIGIBLE EVENTS:

Topcoder Open 2019

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30072644