public object Put(Time_Billable request) { ApiUser hdUser = request.ApiUser; //v1 if (request.key == 0 && request.billable != null && request.billable.Contains("/")) { string[] keys = request.billable.Split('/'); request.is_billable = keys[0].StartsWith("billable", StringComparison.InvariantCultureIgnoreCase); request.key = Convert.ToInt32(keys[1]); } //v2 if (request.key == 0) { throw new HttpError(HttpStatusCode.NotFound, "Time Id is missing"); } try { if (request.is_billable.HasValue && !request.hours.HasValue) { bigWebApps.bigWebDesk.Data.Tickets.SetBillableTimeEntry(hdUser.OrganizationId, hdUser.DepartmentId, request.key, request.is_project_log, request.is_billable.Value); return(new HttpResult("", HttpStatusCode.OK)); } if (request.hidden_from_invoice.HasValue && !request.hours.HasValue) { if (request.is_project_log) { bigWebApps.bigWebDesk.Data.Project.HideFromInvoiceProjectTime(hdUser.OrganizationId, hdUser.DepartmentId, request.key, request.hidden_from_invoice.Value); } else { bigWebApps.bigWebDesk.Data.Tickets.HideFromInvoiceTicketTime(hdUser.OrganizationId, hdUser.DepartmentId, request.key, request.hidden_from_invoice.Value); } return(new HttpResult("", HttpStatusCode.OK)); } int _contract_id = request.prepaid_pack_id.HasValue ? request.prepaid_pack_id.Value : 0; string contractName = string.Empty; if (!request.is_project_log) { if (_contract_id > 0 && request.key > 0) { DataRow row = bigWebApps.bigWebDesk.Data.Tickets.SelectTicketTimeByID(hdUser.OrganizationId, hdUser.DepartmentId, request.key); if (row != null) { DateTime date = DateTime.UtcNow; if (request.date.HasValue && request.date > DateTime.MinValue) { date = (DateTime)request.date; } contractName = Contracts.CheckAccountContract(hdUser, (int)row["AccountID"], _contract_id, date, request.key, 0, (int)row["ProjectID"]); } } Ticket.EditTime(hdUser, request.key, request.start_date, request.stop_date, request.is_billable, request.date, request.hours, request.task_type_id, request.note_text, request.remain_hours, request.complete, request.prepaid_pack_id, contractName); } else { int techID = (request.tech_id > 0 && hdUser.IsAdmin) ? request.tech_id : hdUser.UserId; int accountID = request.account_id != 0 ? request.account_id : -1; int projectID = request.project_id > 0 ? request.project_id : -1; DateTime date = DateTime.UtcNow; if (request.date.HasValue && request.date > DateTime.MinValue) { date = (DateTime)request.date; } Contracts.CheckAccountContract(hdUser, accountID, request.prepaid_pack_id ?? 0, date, 0, request.key, projectID); Models.Projects.EditProjectTime(hdUser, accountID, projectID, techID, request.task_type_id, request.start_date, request.stop_date, request.hours, hdUser.TimeZoneOffset, request.note_text, request.is_billable, request.date, request.key, request.prepaid_pack_id); } return(new HttpResult("", HttpStatusCode.OK)); } catch (Exception ex) { throw new HttpError(Utils.ClearString(ex.Message)); } }