private static DataServiceQuery <Employee1CRecord> GetEmployeesQuery(EnterpriseV8 client) { return((DataServiceQuery <Employee1CRecord>)client.Catalog_Сотрудники .Select(x => new Employee1CRecord() { EmployeeKey = x.Ref_Key, PersonKey = x.ФизическоеЛицо_Key.Value })); }
private static DataServiceQuery <UsedVacation1CRecord> GetUsedVacationsQuery(EnterpriseV8 client) { return((DataServiceQuery <UsedVacation1CRecord>)client.AccumulationRegister_ФактическиеОтпуска_RecordType .Select(x => new UsedVacation1CRecord() { DaysUsed = x.Количество, EmployeeKey = x.Сотрудник_Key.Value })); }
private static DataServiceQuery <Person1CRecord> GetPersonsQuery(EnterpriseV8 client) { return((DataServiceQuery <Person1CRecord>)client.Catalog_ФизическиеЛица .Select(x => new Person1CRecord() { Birthday = x.ДатаРождения.Value, PersonKey = x.Ref_Key, NameRus = x.Description })); }
private async Task <List <VacationInfo1C> > Get1CInformation() { var uriBuilder = new UriBuilder(this.bkConfiguration.Url); var client = new EnterpriseV8(uriBuilder.Uri); client.Credentials = new NetworkCredential() { UserName = this.bkConfiguration.Username, Password = this.bkConfiguration.Password }; var taskFactory = new TaskFactory(); var personsQuery = GetPersonsQuery(client); var employeesQuery = GetEmployeesQuery(client); var vacQuery = GetEarnedVacationsQuery(client); var vacUsedQuery = GetUsedVacationsQuery(client); var persons = await taskFactory.FromAsync(personsQuery.BeginExecute, personsQuery.EndExecute, new object()); var employees = await taskFactory.FromAsync(employeesQuery.BeginExecute, employeesQuery.EndExecute, new object()); var allEarnedVacations = await taskFactory.FromAsync(vacQuery.BeginExecute, vacQuery.EndExecute, new object()); var vacationsUsed = await taskFactory.FromAsync(vacUsedQuery.BeginExecute, vacUsedQuery.EndExecute, new object()); var currentDate = DateTime.UtcNow.Date; var records = persons .Join(employees, x => x.PersonKey, x => x.PersonKey, (p, e) => new { p.NameRus, e.EmployeeKey, p.Birthday }) .GroupJoin(allEarnedVacations, x => x.EmployeeKey, x => x.EmployeeKey, (p, v) => new { p.EmployeeKey, p.Birthday, p.NameRus, VacationRights = v .Where(x => x.Period <= currentDate) .DefaultIfEmpty(new EarnedVacation1CRecord()) .Aggregate((i, j) => i.Period > j.Period ? i : j) .DaysEarned ?? 0 }) .GroupJoin(vacationsUsed, x => x.EmployeeKey, x => x.EmployeeKey, (p, v) => new { p.Birthday, p.NameRus, DaysLeft = p.VacationRights - v.Sum(x => x.DaysUsed ?? 0) }) .Select(x => new VacationInfo1C() { NameRus = x.NameRus, BirthDay = x.Birthday, DaysLeft = x.DaysLeft }) .ToList(); return(records); }
private static DataServiceQuery <EarnedVacation1CRecord> GetEarnedVacationsQuery(EnterpriseV8 client) { return((DataServiceQuery <EarnedVacation1CRecord>)client.InformationRegister_ЗаработанныеПраваНаОтпуска .Where(x => x.КоличествоДней > 0) .Select(x => new EarnedVacation1CRecord() { DaysEarned = x.КоличествоДней, EmployeeKey = x.Сотрудник_Key, Period = x.Period })); }