Ejemplo n.º 1
0
 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."));
     }
 }
Ejemplo n.º 2
0
        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)
                                                                      )
                                        );
                }
            }
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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."));
            }
        }
Ejemplo n.º 6
0
        /// <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"));
        }