private static Application GenerateDeadlineApplication(FormCollection collection)
        {
            DeadlineApplication toReturn = new DeadlineApplication();

            if (collection["deadline_type"] == "by_last_date")
            {
                toReturn.HasLastDate = true;

                toReturn.EndTime = Convert.ToDateTime(collection["deadline_last_date"]);

                toReturn.EndTime = toReturn.EndTime.AddHours(
                    Convert.ToInt32(collection["deadline_last_time"].Split(':')[0])
                    );

                toReturn.EndTime = toReturn.EndTime.AddMinutes(
                    Convert.ToInt32(collection["deadline_last_time"].Split(':')[1])
                    );
            }
            else if (collection["deadline_type"] == "from_some_date")
            {
                toReturn.StartTime = Convert.ToDateTime(collection["deadline_start_date"]);

                toReturn.StartTime = toReturn.StartTime.AddHours(
                    Convert.ToInt32(collection["deadline_start_time"].Split(':')[0])
                    );

                toReturn.StartTime = toReturn.StartTime.AddMinutes(
                    Convert.ToInt32(collection["deadline_start_time"].Split(':')[1])
                    );

                switch (collection["deadline_duration_measure"])
                {
                case "minutes":
                    toReturn.Duration = new TimeSpan(0, 0, Convert.ToInt32(collection["deadline_duration"]), 0);
                    break;

                case "hours":
                    toReturn.Duration = new TimeSpan(0, Convert.ToInt32(collection["deadline_duration"]), 0, 0);
                    break;

                case "days":
                    toReturn.Duration = new TimeSpan(Convert.ToInt32(collection["deadline_duration"]), 0, 0, 0);
                    break;

                case "weeks":
                    toReturn.Duration = new TimeSpan(7 * Convert.ToInt32(collection["deadline_duration"]), 0, 0, 0);
                    break;

                case "months":
                    toReturn.Duration = new TimeSpan(30 * Convert.ToInt32(collection["deadline_duration"]), 0, 0, 0);
                    break;
                }
            }

            return(toReturn);
        }
        public HttpResponseMessage Post([FromBody] Application application)
        {
            DeadlineApplication deadlineApp = application as DeadlineApplication;

            SessionApplication sessionApp = application as SessionApplication;

            using (SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DBCS"].ConnectionString))
            {
                string cmdString = "INSERT INTO Applications VALUES(@ServiceId, @ServiceType, @Description, @Username, @DetailsId, @Status, GETDATE(), NULL, NULL);";

                Dictionary <string, object> parameters = new Dictionary <string, object>();

                parameters.Add("@ServiceId", application.ServiceId);
                parameters.Add("@ServiceType", application.ServiceType);
                parameters.Add("@Description", application.Description);
                parameters.Add("@Username", User.Identity.Name);
                parameters.Add("@Status", "NO_BILL");

                if (deadlineApp != null)
                {
                    if (deadlineApp.StartTime.Year < 1753)
                    {
                        deadlineApp.StartTime = new DateTime(1900, 1, 1);
                    }

                    if (deadlineApp.EndTime.Year < 1753)
                    {
                        deadlineApp.EndTime = new DateTime(1900, 1, 1);
                    }

                    cmdString = cmdString.Replace("@DetailsId", "IDENT_CURRENT('Deadline_Application_Details') + 1");

                    cmdString += "INSERT INTO Deadline_Application_Details VALUES(@HasLastDate, @StartTime, @EndTime, @Duration);";

                    parameters.Add("@HasLastDate", deadlineApp.HasLastDate);
                    parameters.Add("@StartTime", deadlineApp.StartTime);
                    parameters.Add("@EndTime", deadlineApp.EndTime);
                    parameters.Add("@Duration", JsonConvert.SerializeObject(deadlineApp.Duration));
                }
                else if (sessionApp != null)
                {
                    cmdString = cmdString.Replace("@DetailsId", "IDENT_CURRENT('Session_Application_Details') + 1");

                    cmdString += "INSERT INTO Session_Application_Details VALUES (@SessionStart);";

                    parameters.Add("@SessionStart", sessionApp.SessionStartTime);
                }
                else
                {
                    cmdString = cmdString.Replace("@DetailsId", "0");
                }

                SqlCommand cmd = new SqlCommand(cmdString, connection);

                foreach (var parameter in parameters)
                {
                    cmd.Parameters.AddWithValue(parameter.Key, parameter.Value);
                }

                connection.Open();
                SqlTransaction transaction = connection.BeginTransaction();
                cmd.Transaction = transaction;

                try
                {
                    cmd.ExecuteNonQuery();
                    transaction.Commit();

                    return(Request.CreateResponse(HttpStatusCode.OK, "Application successfully added"));
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex));
                }
            }
        }