public Task <IHttpActionResult> Post([FromBody] SOFTTEK.SCMS.Entity.SRA.PermitsAndAbsences activityPerAndAbs) { IHttpActionResult result = Conflict(); try { SOFTTEK.SCMS.Foundation.Business.BusinessContext ctx = new SOFTTEK.SCMS.Foundation.Business.BusinessContext { SecurityContext = new Foundation.Security.SecurityContext { DeviceID = GetDeviceIdentifier(), ClientID = GetToken().Identifier, AuthorizationTicket = GetToken().Identifier, AppID = new System.Configuration.AppSettingsReader().GetValue("S_SRA_APP_idENTIFIER", typeof(string)).ToString() } }; SOFTTEK.SCMS.Business.SRA.PermitsAndAbsencesBO permitsAndAbsencesBO = new Business.SRA.PermitsAndAbsencesBO(ctx); List <SOFTTEK.SCMS.Entity.SRA.PermitsAndAbsences> registeredActivity = permitsAndAbsencesBO.RegisterPermitsAnsAbsences(activityPerAndAbs); if (registeredActivity.Count > 0) { result = Json(registeredActivity); } } catch (Exception ex) { result = Error(ex); } return(Task.FromResult(result)); }
private void ValidatePermitsAndAAbsences(SOFTTEK.SCMS.Entity.SRA.PermitsAndAbsences activityPerAndAbs) { if (activityPerAndAbs != null) { var permitsAndAbsencesActuallyInBd = GetPermitsAndAbsencesForEmployeeId(activityPerAndAbs.perabs_employee.Identifier); ///Validación para corroborar que no exista una solicitud en la misma fecha if (permitsAndAbsencesActuallyInBd.Where(a => a.perabs_start_at >= activityPerAndAbs.perabs_start_at && a.perabs_end_at <= activityPerAndAbs.perabs_end_at).Sum(a => a.perabs_total_hours) + activityPerAndAbs.perabs_total_hours > MAX_EFFORT_PER_DAY) { throw new Exception("No se puede realizar esta solicitud de Permiso o ausencia, porque ya existe otra actividad programada en esta fecha.", new InvalidOperationException(string.Format("Solo se puede realizar una solicitud en una franja.") ) ); } ///Validacion fecha mayor if (activityPerAndAbs.perabs_start_at > activityPerAndAbs.perabs_end_at) { throw new Exception("La fecha de inicio de la solicitud no puede ser mayor a la fecha de fin de esta.", new InvalidOperationException(string.Format("Error al procesar estas fechas.") ) ); } /// Validación cantidad de horas //TimeSpan daysDifference = activityPerAndAbs.perabs_end_at.Date.Subtract(activityPerAndAbs.perabs_start_at.Date); //int totalHoursMaxSolicitud = Convert.ToInt32(daysDifference.Ticks) * MAX_EFFORT_PER_DAY; //if (activityPerAndAbs.perabs_total_hours > totalHoursMaxSolicitud) { // throw new Exception("Esta excediendo el numero maximo de horas que puede realizar en esta solicitud.", // new InvalidOperationException(string.Format("Entre la fecha {0} y {1} se pueden soolictar maximo {2} horas, usted esta solicitando {3} por tanto esta solicitud es invalida.", // activityPerAndAbs.perabs_start_at, activityPerAndAbs.perabs_end_at, totalHoursMaxSolicitud, activityPerAndAbs.perabs_total_hours) // ) // ); //} if (activityPerAndAbs.perabs_total_hours > MAX_EFFORT_PER_DAY) { throw new Exception(string.Format("La solicitud no puede superar el maximo de {0} horas por día.", MAX_EFFORT_PER_DAY), new InvalidOperationException(string.Format("El total de horas se valida por día y no por el total de dias que solicit el permiso o la ausencia"))); } } else { throw new Exception("No se ha podido realizar la validacion del Permiso o l asencia.", new InvalidOperationException("El permiso o la ausencia no puede ser nulo")); } }
public Task <IHttpActionResult> Put(string id, [FromBody] SOFTTEK.SCMS.Entity.SRA.PermitsAndAbsences activityPerAndAbs) { int activityID; IHttpActionResult result = NotFound(); if (!int.TryParse(id, out activityID)) { result = Conflict(); return(Task.FromResult(result)); } try { SOFTTEK.SCMS.Foundation.Business.BusinessContext ctx = new SOFTTEK.SCMS.Foundation.Business.BusinessContext { SecurityContext = new Foundation.Security.SecurityContext { DeviceID = GetDeviceIdentifier(), ClientID = GetToken().Identifier, AuthorizationTicket = GetToken().Identifier, AppID = new System.Configuration.AppSettingsReader().GetValue("S_SRA_APP_idENTIFIER", typeof(string)).ToString() } }; SOFTTEK.SCMS.Business.SRA.PermitsAndAbsencesBO activitiesRegisterBO = new Business.SRA.PermitsAndAbsencesBO(ctx); List <SOFTTEK.SCMS.Entity.SRA.PermitsAndAbsences> updatedActivity = activitiesRegisterBO.UpdatePermitsAnsAbsences(activityID, activityPerAndAbs); if (updatedActivity.Count > 0) { result = Json(updatedActivity); } } catch (Exception ex) { result = Error(ex); } return(Task.FromResult(result)); }
/// <summary> /// Register an activity for approval. /// </summary> /// <param name="permitsAndAbsences">permitsAndAbsences Update Model information Permits and Absences</param> /// <returns>Registered activity information.</returns> public List <SOFTTEK.SCMS.Entity.SRA.PermitsAndAbsences> UpdatePermitsAnsAbsences(long activityID, SOFTTEK.SCMS.Entity.SRA.PermitsAndAbsences permitsAndAbsences) { List <SOFTTEK.SCMS.Entity.SRA.PermitsAndAbsences> activities = new List <SOFTTEK.SCMS.Entity.SRA.PermitsAndAbsences>(); ValidatePermitsAndAAbsences(permitsAndAbsences); return(context.Execute(() => { using (dataSource = new SRADataContext(context.SecurityContext)) { dataSource.ConnectionString = "SRA"; dataSource.DefaultUser = System.Configuration.ConfigurationManager.AppSettings["S_APP_UID"]; dataSource.Initialize(); var result = dataSource.UpdatePermitsAndAbsences(permitsAndAbsences); activities = result; } return activities; }, "Register an activity for approval")); }