Exemple #1
0
        public async static Task <object> Generate(DateTime datefrom, DateTime dateto)
        {
            EntityModel employeeModel = await MetadataToModelConverter.GetEntityModelByModelAsync("Employee", 0);

            EntityModel businessTripModel = await MetadataToModelConverter.GetEntityModelByModelAsync(DocumentTypes.BusinessTrip);

            EntityModel sickLeaveModel = await MetadataToModelConverter.GetEntityModelByModelAsync(DocumentTypes.SickLeave);

            EntityModel vacationModel = await MetadataToModelConverter.GetEntityModelByModelAsync(DocumentTypes.Vacation);

            var filter = Filter.And.In(WorkflowReport.FinalStates, "State").Merge(
                Filter.And.LessOrEqual(dateto, "DateStart").GreaterOrEqual(datefrom, "DateEnd"));

            var employees = await employeeModel.GetAsync(Filter.Empty);

            var businessTripFilter = DocumentTypes.GetFilter(DocumentTypes.BusinessTrip)
                                     .Merge(filter)
                                     .Merge(Document.GetViewFilterForCurrentUser(businessTripModel));
            var businessTrips = await businessTripModel.GetAsync(businessTripFilter);

            businessTrips.ForEach((item) =>
            {
                var i = (dynamic)item;
                if (!string.IsNullOrEmpty(i.Employees))
                {
                    i.EmployeesList = JsonConvert.DeserializeObject <List <Guid> >(i.Employees);
                    var names       = new List <string>();
                    foreach (Guid empId in i.EmployeesList)
                    {
                        var emp = employees.Select(c => c as dynamic).Where(c => c.Id == empId).FirstOrDefault();
                        names.Add(emp?.Name);
                    }
                    i.EmployeesNames = names.OrderBy(c => c).ToList();
                }
            });

            var sickLeaveFilter = DocumentTypes.GetFilter(DocumentTypes.SickLeave)
                                  .Merge(filter)
                                  .Merge(Document.GetViewFilterForCurrentUser(sickLeaveModel));

            var sickLeaves = await sickLeaveModel.GetAsync(sickLeaveFilter);

            var vacationFilter = DocumentTypes.GetFilter(DocumentTypes.Vacation)
                                 .Merge(filter)
                                 .Merge(Document.GetViewFilterForCurrentUser(vacationModel));
            var vacations = await vacationModel.GetAsync(vacationFilter);

            var res = new List <WorkCalendarEvent>();

            res.AddRange(businessTrips.Select(c => new WorkCalendarEvent(c, "businesstrip", "Business Trip")));
            res.AddRange(sickLeaves.Select(c => new WorkCalendarEvent(c, "sickleave", "Sick Leave")));
            res.AddRange(vacations.Select(c => new WorkCalendarEvent(c, "vacation", "Vacation")));
            return(res);
        }
Exemple #2
0
        public static async Task <object> Generate(DateTime dateFrom, DateTime dateTo, string parameter, int period)
        {
            EntityModel employeeSalaryModel = await MetadataToModelConverter.GetEntityModelByModelAsync("EmployeeSalary", 0);

            var employees = await Employee.SelectAsync(Filter.Empty, Order.StartAsc("DepartmentName").Asc("LocationName").Asc("Name"));

            var employeeSalaryList = await employeeSalaryModel.GetAsync(Filter.Empty);

            DateTime start, end;

            if (period == 0)// month
            {
                start = new DateTime(dateFrom.Year, dateFrom.Month, 1);
                end   = new DateTime(dateTo.Year, dateTo.Month, 1).AddMonths(1).AddSeconds(-1);
            }
            else //year
            {
                start = new DateTime(dateFrom.Year, 1, 1, 0, 0, 0);
                end   = new DateTime(dateFrom.Year, 1, 1, 0, 0, 0).AddYears(1).AddSeconds(-1);
            }

            #region Documents
            EntityModel businessTripModel = await MetadataToModelConverter.GetEntityModelByModelAsync(DocumentTypes.BusinessTrip, 1);

            EntityModel sickLeaveModel = await MetadataToModelConverter.GetEntityModelByModelAsync(DocumentTypes.SickLeave, 1);

            EntityModel compensationModel = await MetadataToModelConverter.GetEntityModelByModelAsync(DocumentTypes.Compensation, 1);

            EntityModel vacationModel = await MetadataToModelConverter.GetEntityModelByModelAsync(DocumentTypes.Vacation, 1);

            var periodFilter = Filter.And.LessOrEqual(end, "DateStart").GreaterOrEqual(start, "DateEnd");
            var dateFilter   = Filter.And.GreaterOrEqual(start, "Date").LessOrEqual(end, "Date");

            var periodAndStateFilter = Filter.And.In(WorkflowReport.FinalStates, "State").Merge(periodFilter);
            var dateAndStateFilter   = Filter.And.In(WorkflowReport.FinalStates, "State").Merge(dateFilter);
            var businessTrips        = await businessTripModel.GetAsync(Filter.And.Equal("BusinessTrip", "Type").Merge(periodAndStateFilter));

            businessTrips.ForEach((item) =>
            {
                var i = (dynamic)item;
                if (!string.IsNullOrEmpty(i.Employees))
                {
                    i.EmployeesList = JsonConvert.DeserializeObject <List <Guid> >(i.Employees);
                }
            });

            var sickLeaves = await sickLeaveModel.GetAsync(DocumentTypes.GetFilter(DocumentTypes.SickLeave).Merge(periodAndStateFilter));

            var compensations = await compensationModel.GetAsync(DocumentTypes.GetFilter(DocumentTypes.Compensation).Merge(dateAndStateFilter));

            var vacations = await vacationModel.GetAsync(DocumentTypes.GetFilter(DocumentTypes.Vacation).Merge(periodAndStateFilter));

            #endregion

            var res = new List <Dictionary <string, object> >();
            foreach (var emp in employees)
            {
                var item = new Dictionary <string, object>();
                item["Id"]         = emp.Id;
                item["Department"] = emp.DepartmentName;
                item["Location"]   = emp.LocationName;
                item["Name"]       = emp.Name;
                item["Title"]      = emp.Title;

                DateTime currentDate = period == 0 ?
                                       new DateTime(dateFrom.Year, dateFrom.Month, 1) :
                                       new DateTime(dateFrom.Year, 1, 1);
                while (currentDate < dateTo)
                {
                    var key = period == 0 ? currentDate.ToString("MM/yy") : currentDate.ToString("yyyy") + "Y";
                    switch (parameter)
                    {
                    case "totalamount":
                        var salary       = GetSalary(emp, employeeSalaryList, currentDate, period);
                        var tax          = GetTax(emp, employeeSalaryList, currentDate, period);
                        var compensation = GetCompensation(emp.Id, compensations, currentDate, period);
                        item[key] = (salary + tax + compensation).ToString("N");
                        break;

                    case "salary":
                        item[key] = GetSalary(emp, employeeSalaryList, currentDate, period).ToString("N");
                        break;

                    case "tax":
                        item[key] = GetTax(emp, employeeSalaryList, currentDate, period).ToString("N");
                        break;

                    case "compensation":
                        item[key] = GetCompensation(emp.Id, compensations, currentDate, period).ToString("N");
                        break;

                    case "tripdays":
                        item[key] = GetTripDays(emp.Id, businessTrips, currentDate, period);
                        break;

                    case "sickleavedays":
                        item[key] = GetSickLeaveDays(emp.Id, sickLeaves, currentDate, period);
                        break;

                    case "vacationdays":
                        item[key] = GetVacationDays(emp.Id, vacations, currentDate, period);
                        break;
                    }
                    currentDate = period == 0 ? currentDate.AddMonths(1) : currentDate.AddYears(1);
                }

                res.Add(item);
            }

            return(res);
        }
Exemple #3
0
        public async static Task <DashboardInfo> Generate()
        {
            var res               = new DashboardInfo();
            var employeeModel     = (await MetadataToModelConverter.GetEntityModelByModelAsync("Employee"));
            var businessTripModel = (await MetadataToModelConverter.GetEntityModelByModelAsync(DocumentTypes.BusinessTrip));
            var CompensationModel = (await MetadataToModelConverter.GetEntityModelByModelAsync(DocumentTypes.Compensation));

            if (DWKitRuntime.Security.CheckPermission("Dashboard", "ViewCompanyInfo"))
            {
                Filter notDraft = Filter.And.NotIn(WorkflowReport.DraftStates, "State");
                res.BusinessTripCount = await Document.GetDocumentTypeCountAsync(DocumentTypes.BusinessTrip, notDraft);

                res.SickLeaveCount = await Document.GetDocumentTypeCountAsync(DocumentTypes.SickLeave, notDraft);

                res.VacationCount = await Document.GetDocumentTypeCountAsync(DocumentTypes.Vacation, notDraft);

                res.CompensationCount = await Document.GetDocumentTypeCountAsync(DocumentTypes.Compensation, notDraft);

                res.RecruitmentCount = await Document.GetDocumentTypeCountAsync(DocumentTypes.Recruitment, notDraft);

                res.EmployeeReport = await EmployeeReport.GenerateForDashboard(DateTime.Now.AddMonths(-5), DateTime.Now);
            }

            if (DWKitRuntime.Security.CurrentUser != null)
            {
                #region For Users
                Guid   id = DWKitRuntime.Security.CurrentUser.Id;
                Filter userBusinessTripFilter = DocumentTypes.GetFilter(DocumentTypes.BusinessTrip).NotIn(WorkflowReport.DraftStates, "State").LikeRightLeft(id.ToString(), "Employees");
                var    trips = await businessTripModel.GetAsync(userBusinessTripFilter, Order.StartAsc("DateStart"));

                Filter userCompenstationFilter = DocumentTypes.GetFilter(DocumentTypes.Compensation).NotIn(WorkflowReport.DraftStates, "State").Equal(id, "EmployeeId");
                var    Compensations           = await CompensationModel.GetAsync(userCompenstationFilter);

                res.UserBusinessTripExpenses         = 0;
                res.UserBusinessTripExpensesApproved = 0;
                foreach (dynamic trip in trips)
                {
                    if (trip.Amount == null || trip.Amount == 0)
                    {
                        continue;
                    }

                    if (WorkflowReport.FinalStates.Contains(trip.State))
                    {
                        res.UserBusinessTripExpensesApproved += (decimal)trip.Amount;
                    }
                    else
                    {
                        res.UserBusinessTripExpenses += (decimal)trip.Amount;
                    }
                }

                res.UserCompensationAmount         = 0;
                res.UserCompensationAmountApproved = 0;
                foreach (dynamic c in Compensations)
                {
                    if (c.Amount == null || c.Amount == 0)
                    {
                        continue;
                    }

                    if (WorkflowReport.FinalStates.Contains(c.State))
                    {
                        res.UserCompensationAmountApproved += (decimal)c.Amount;
                    }
                    else
                    {
                        res.UserCompensationAmount += (decimal)c.Amount;
                    }
                }

                res.UserBusinessTrips = trips.Where(c => ((dynamic)c).DateEnd > DateTime.Now).Select(c => c.ToDictionary(true)).ToList();
                #endregion
            }

            return(res);
        }