private void ValidateModifiableActivityState(SOFTTEK.SCMS.Entity.SRA.Activity changedActivity) { if (changedActivity.State == APPROVED_ACTIVITY_STATE) { throw new Exception("La actividad proporcionada no es modificable.", new InvalidOperationException("La actividad a actualizar se encuentra en estado 'Aprobado' y no puede ser modificada.")); } if (changedActivity.State == DISABLED_ACTIVITY_STATE) { throw new Exception("La actividad proporcionada no es modificable.", new InvalidOperationException("La actividad a actualizar se encuentra en estado 'Deshabilitado' y no puede ser modificada.")); } }
private void ValidateReportedActivityEffort(SOFTTEK.SCMS.Entity.SRA.Activity activity) { // Retrieve activities for the corresponding week of the validated activity Entity.SRA.Week <SOFTTEK.SCMS.Entity.SRA.Activity> week = GetWeekForDate <SOFTTEK.SCMS.Entity.SRA.Activity>(activity.ExecutedAt); week.ReportedActivities = GetActivitiesForEmployeeIdInPeriod <SOFTTEK.SCMS.Entity.SRA.Activity>(activity.Employee.Identifier, week.From, week.To); if (activity.Jornade == "IH") { // Daily Activities Total Effort Maximum Duration Check if ((week.ReportedActivities.Where(a => a.ExecutedAt.Date == activity.ExecutedAt.Date && a.Jornade == "IH") .Sum(a => a.Effort) + activity.Effort) > MAX_EFFORT_PER_DAY) { throw new Exception("La duración de la actividad supera el máximo de horas permitidas para reportar en día.", new InvalidOperationException(string.Format("El máximo de horas permitido para reportar por día es de {0}", MAX_EFFORT_PER_DAY) ) ); } // Weekly Activities Total Effort Maximum Duration Check if ((week.ReportedActivities.Where(a => a.Jornade == "IH").Sum(a => a.Effort) + activity.Effort) > (MAX_EFFORT_PER_DAY * LABOR_DAYS_PER_WEEK)) { throw new Exception("La duración de la actividad supera el máximo de horas permitidas para reportar en una semana.", new InvalidOperationException(string.Format("El máximo de horas permitido para reportar por semana es de {0}", (MAX_EFFORT_PER_DAY * LABOR_DAYS_PER_WEEK)) ) ); } } else if (activity.Jornade == "AH") { DateTime dateExecuteAt = activity.ExecutedAt.Date; var dateValue = new DateTime(dateExecuteAt.Year, dateExecuteAt.Month, dateExecuteAt.Day).AddDays(1); TimeSpan oSpan = dateValue.Subtract(dateExecuteAt); double countHoursDay = oSpan.TotalHours; if ((week.ReportedActivities.Where(a => a.ExecutedAt.Date == activity.ExecutedAt.Date) .Sum(a => a.Effort) + activity.Effort) > countHoursDay) { throw new Exception("La duración de la actividad supera el máximo de horas permitidas para reportar en un día.", new InvalidOperationException(string.Format("El máximo de horas permitido para reportar por día es de {0} incluyendo las horas adicionales.", countHoursDay) ) ); } } }
/// <summary> /// Change a non approved registered activity. /// </summary> /// <param name="activity">Activity information</param> /// <returns>Registered activity information.</returns> public T ChangeActivity <T>(long activityID, SOFTTEK.SCMS.Entity.SRA.Activity activity) where T : SOFTTEK.SCMS.Entity.SRA.Activity, new() { T changedActivity = context.Execute(() => { T targetActivity = new T(); using (dataSource = new SRADataContext(context.SecurityContext)) { dataSource.ConnectionString = "SRA"; dataSource.DefaultUser = System.Configuration.ConfigurationManager.AppSettings["S_APP_UID"]; dataSource.Initialize(); var result = dataSource.GetActivityByID(activityID); targetActivity = new T { ActivityCode = result.ActivityCode, ApprovedAt = result.ApprovedAt, ApprovedBy = result.ApprovedBy, ApprovedComments = result.ApprovedComments, Details = result.Details, Effort = result.Effort, Employee = result.Employee, ExecutedAt = result.ExecutedAt, Identifier = result.Identifier, Jornade = result.Jornade, Project = result.Project, ReportedAt = result.ReportedAt, State = result.State }; } return(targetActivity); }, "Retrieve information for an activity to be updated"); ValidateModifiableActivityState(changedActivity); changedActivity.Effort = activity.Effort; changedActivity.Details = activity.Details; changedActivity.ActivityCode = activity.ActivityCode; changedActivity.Project = activity.Project; changedActivity.Details = activity.Details; changedActivity = UpdateActivity <T>(activity); return(changedActivity); }
public Task <IHttpActionResult> PutActivityApproval(string id, [FromBody] string comments) { 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.EmployeeBO employeeBO = new Business.SRA.EmployeeBO(ctx); SOFTTEK.SCMS.Business.SRA.ActivityBO activitiesRegisterBO = new Business.SRA.ActivityBO(ctx); SOFTTEK.SCMS.Entity.Shared.Employee approver = employeeBO.GetEmployeeInfoForToken(); SOFTTEK.SCMS.Entity.SRA.Activity updatedActivity = activitiesRegisterBO.ApproveActivity <SOFTTEK.SCMS.Business.Entity.SRA.ARSDetailedActivity>(activityID, approver, comments); List <SOFTTEK.SCMS.Business.Entity.SRA.ARSDetailedActivity> activitiesToApprove = activitiesRegisterBO.GetActivitiesToApprove <SOFTTEK.SCMS.Business.Entity.SRA.ARSDetailedActivity>(approver.Identifier, updatedActivity.Project); if (activitiesToApprove.Count > 0) { result = Json(activitiesToApprove); } } catch (Exception ex) { result = Error(ex); } return(Task.FromResult(result)); }
private void ValidateApproval(SOFTTEK.SCMS.Entity.SRA.Activity targetActivity, SCMS.Entity.Shared.Employee approver) { bool isValidApproverForActivity = context.Execute(() => { EmployeeBO employeeBO = new EmployeeBO(context); SOFTTEK.SCMS.Entity.Shared.Employee employee = employeeBO.GetEmployeeInfoById(targetActivity.Employee.Identifier); if (employee.Supervisor.Identifier == approver.Identifier) { return(true); } return(false); }, "Validate approver with activity's employee supervisor"); if (!isValidApproverForActivity) { throw new Exception("El aprovador no corresponde al supervisor de quien reporta la actividad a aprovar", new InvalidOperationException("Inconsistencia entre el supervisor del empleado asociado a la actividad, y el aprovador proporcionado para la solicitud.")); } }
/// <summary> /// Register an activity for approval. /// </summary> /// <param name="activity">Activity information</param> /// <returns>Registered activity information.</returns> public T RegisterActivity <T>(SOFTTEK.SCMS.Entity.SRA.Activity activity) where T : SOFTTEK.SCMS.Entity.SRA.Activity, new() { T registeredActivity = new T(); ValidateReportedActivityEffort(activity); ValidateReportedActivityInformation(activity); 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.RegisterActivity(activity); registeredActivity = new T { ActivityCode = result.ActivityCode, ApprovedAt = result.ApprovedAt, ApprovedBy = result.ApprovedBy, ApprovedComments = result.ApprovedComments, Details = result.Details, Effort = result.Effort, Employee = result.Employee, ExecutedAt = result.ExecutedAt, Identifier = result.Identifier, Jornade = result.Jornade, Project = result.Project, ReportedAt = result.ReportedAt, State = result.State }; } return registeredActivity; }, "Register an activity for approval")); }