public ProjectWork GetProjectWorkById(int projectWorkID) { db = new DbConnect(); command = new MySqlCommand("GetProjectWorkByID", db.GetConnection()); command.Parameters.Add("@p_ProjectWorkID", MySqlDbType.Int32).Value = projectWorkID; command.CommandType = System.Data.CommandType.StoredProcedure; reader = command.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { projectWork = new ProjectWork { ProjectWorkEntityID = reader.GetInt32("ProjectEntityID"), Title = reader.GetString("Title"), SubTitle = reader.GetString("SubTitle"), ProjectDescription = reader.GetString("ProjectDescription"), ImagePath = reader.GetString("ImagePath"), ImageDescription = reader.GetString("ImageDescription"), ExternalUrl = reader.GetString("ExternalUrl"), CreatedDate = reader.GetDateTime("CreatedDate"), ModifiedDate = reader.GetDateTime("ModifiedDate") }; } } reader.Close(); reader.Dispose(); return(projectWork); }
protected JobItemBase(ILogger logger, string projectId, ProjectWork projectWork) { ProjectId = projectId; Id = Guid.NewGuid().ToString(); ProjectWork = projectWork; Logger = logger; }
public override async Task ProcessJobAsync(IResultSender resultSender) { using var scope = Logger.BeginScope("Export Drawing PDF ({Id})"); Logger.LogInformation($"ProcessJob (ExportDrawingPDF) {Id} for project {ProjectId} started."); (FdaStatsDTO stats, int drawingIndex) = await ProjectWork.ExportDrawingPdfAsync(ProjectId, _hash, _drawingKey); Logger.LogInformation($"ProcessJob (ExportDrawingPDF) {Id} for project {ProjectId} completed."); string url = ""; if (stats != null) { url = _linkGenerator.GetPathByAction(controller: "Download", action: "DrawingPdf", values: new { projectName = ProjectId, hash = _hash, index = drawingIndex }); // when local url starts with slash, it does not work, because it is doubled in url if (url.StartsWith('/')) { url = url.Substring(1); } } await resultSender.SendSuccessAsync(url, stats); }
public MigrationJob(MigrationBucketKeyProvider bucketProvider, UserResolver userResolver, ProjectWork projectWork, ILogger <MigrationJob> logger, ProjectService projectService) { _bucketProvider = bucketProvider; _userResolver = userResolver; _projectWork = projectWork; _logger = logger; _projectService = projectService; }
public void AddToEnd(ProjectWork data) { var myFullName = data.FullName; var Lesson = data.Lesson; var Credits = data.Credits; // }
public void AddWorkLoad(int projectWorkId, int workLoad) { ProjectWork projectWork = db.ProjectWorks.Find(projectWorkId); if (projectWork == null) { throw new NotFoundException(); } projectWork.WorkLoad = workLoad; }
public void DeleteWorkLoad(int projectWorkId) { ProjectWork projectWork = db.ProjectWorks.Find(projectWorkId); if (projectWork == null) { throw new NotFoundException(); } projectWork.WorkLoad = null; }
public void DeleteProjectWorkById(int id) { ProjectWork projectwork = db.ProjectWorks.Find(id); if (projectwork == null) { throw new NotFoundException(); } db.ProjectWorks.Remove(projectwork); }
public DataMigrationController(ILogger <DataMigrationController> logger, IOptions <DefaultProjectsConfiguration> optionsAccessor, ProjectWork projectWork, UserResolver userResolver, IForgeOSS forgeOSS, LocalCache localCache) { _logger = logger; _userResolver = userResolver; _bucket = _userResolver.AnonymousBucket; _projectWork = projectWork; _defaultProjectsConfiguration = optionsAccessor.Value; _forgeOSS = forgeOSS; _localCache = localCache; }
public JobsHub(ILogger <JobsHub> logger, ProjectWork projectWork, LinkGenerator linkGenerator, UserResolver userResolver, Uploads uploads, DtoGenerator dtoGenerator) { _logger = logger; _projectWork = projectWork; _linkGenerator = linkGenerator; _userResolver = userResolver; _uploads = uploads; _dtoGenerator = dtoGenerator; _sender = new Sender(this); }
public override async Task ProcessJobAsync(IResultSender resultSender) { using var scope = Logger.BeginScope("Project Adoption ({Id})"); Logger.LogInformation($"ProcessJob (Adopt) {Id} for project {_projectInfo.Name} started."); // Check for valid project and root names (where applicable) if ((!string.IsNullOrEmpty(_projectInfo.TopLevelAssembly) && Regex.Match(_projectInfo.TopLevelAssembly, @"[\uFFF0-\uFFFF]").Success) || Regex.Match(_projectInfo.Name, @"[\uFFF0-\uFFFF]").Success) { Logger.LogInformation($"Replacement charcters found in project name or top level assembly name for job {Id}."); throw new ProcessingException("Project name or assembly contains unsupported characters", new[] { "Please refer to https://github.com/Autodesk-Forge/forge-configurator-inventor/blob/master/README.md#project-file-zip-encoding" }); } // upload the file to OSS var bucket = await _userResolver.GetBucketAsync(tryToCreate : true); ProjectStorage projectStorage = await _userResolver.GetProjectStorageAsync(_projectInfo.Name); string ossSourceModel = projectStorage.Project.OSSSourceModel; await bucket.SmartUploadAsync(_fileName, ossSourceModel); // cleanup before adoption File.Delete(_fileName); // adopt the project bool adopted = false; FdaStatsDTO stats; string reportUrl = null; try { string signedUploadedUrl = await bucket.CreateSignedUrlAsync(ossSourceModel); (stats, reportUrl) = await ProjectWork.AdoptAsync(_projectInfo, signedUploadedUrl); adopted = true; } finally { // on any failure during adoption we consider that project adoption failed and it's not usable if (!adopted) { Logger.LogInformation($"Adoption failed. Removing '{ossSourceModel}' OSS object."); await bucket.DeleteObjectAsync(ossSourceModel); } } Logger.LogInformation($"ProcessJob (Adopt) {Id} for project {_projectInfo.Name} completed."); await resultSender.SendSuccessAsync(_dtoGenerator.ToDTO(projectStorage), stats, reportUrl); }
public void ChangeProject(int projectWorkId, int newProjectId) { Project project = db.Projects.Find(newProjectId); ProjectWork projectWork = db.ProjectWorks.Find(projectWorkId); if (projectWork == null) { throw new NotFoundException(); } projectWork.ProjectId = newProjectId; projectWork.Project = project; }
public void ChangeEmployee(int projectWorkId, int newEmployeeId) { Employee employee = db.Employees.Find(newEmployeeId); ProjectWork projectWork = db.ProjectWorks.Find(projectWorkId); if (projectWork == null) { throw new NotFoundException(); } projectWork.EmployeeId = newEmployeeId; projectWork.Employee = employee; }
public void ChangeEmployeesProjectRole(int projectWorkId, int newProjectRoleId) { ProjectRole projectRole = db.ProjectRoles.Find(newProjectRoleId); ProjectWork projectWork = db.ProjectWorks.Find(projectWorkId); if (projectWork == null) { throw new NotFoundException(); } projectWork.ProjectRoleId = newProjectRoleId; projectWork.ProjectRole = projectRole; }
public Migration(IConfiguration configuration, BucketPrefixProvider bucketPrefix, IForgeOSS forgeOSS, MigrationBucketKeyProvider bucketProvider, UserResolver userResolver, ProjectWork projectWork, ILogger <Migration> logger, ResourceProvider resourceProvider, OssBucketFactory bucketFactory, ProjectService projectService) { _forgeOSS = forgeOSS; _configuration = configuration; _bucketPrefix = bucketPrefix; _bucketProvider = bucketProvider; _userResolver = userResolver; _projectWork = projectWork; _logger = logger; _resourceProvider = resourceProvider; _bucketFactory = bucketFactory; _projectService = projectService; }
public override async Task ProcessJobAsync(IResultSender resultSender) { using var scope = Logger.BeginScope("Update Model ({Id})"); Logger.LogInformation($"ProcessJob (Update) {Id} for project {ProjectId} started."); ProjectStateDTO updatedState = await ProjectWork.DoSmartUpdateAsync(Parameters, ProjectId); Logger.LogInformation($"ProcessJob (Update) {Id} for project {ProjectId} completed."); // send that we are done to client await resultSender.SendSuccessAsync(updatedState); }
/// <summary> /// Constructor. /// </summary> public Initializer(ILogger <Initializer> logger, FdaClient fdaClient, IOptions <DefaultProjectsConfiguration> optionsAccessor, ProjectWork projectWork, UserResolver userResolver, LocalCache localCache) { _logger = logger; _fdaClient = fdaClient; _projectWork = projectWork; _userResolver = userResolver; _localCache = localCache; _defaultProjectsConfiguration = optionsAccessor.Value; // bucket for anonymous user _bucket = _userResolver.AnonymousBucket; }
public ProjectWork GetProjectWorkById(int Id) { try { ProjectWorkDAL repository = new ProjectWorkDAL(); ProjectWork projectWork = new ProjectWork(); return(projectWork = repository.GetProjectWorkById(Id)); } catch (Exception ex) { throw ex; } }
public void DeleteEmployeeFromProject(int projectId, int employeeId) { List <ProjectWork> list = new List <ProjectWork>(); list = db.ProjectWorks.Where(item => item.ProjectId == projectId && item.EmployeeId == employeeId).ToList(); ProjectWork projectwork = list.First(); if (projectwork == null) { throw new NotFoundException(); } db.ProjectWorks.Remove(projectwork); }
public ProjectService(ILogger <ProjectService> logger, UserResolver userResolver, ProjectWork projectWork) { _logger = logger; _userResolver = userResolver; _projectWork = projectWork; _waitForBucketPolicy = Policy .Handle <ApiException>(e => e.ErrorCode == StatusCodes.Status404NotFound) .WaitAndRetryAsync( retryCount: 4, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (exception, timeSpan) => _logger.LogWarning("Cannot get fresh OSS bucket. Repeating") ); }
public override async Task ProcessJobAsync(IResultSender resultSender) { using var scope = Logger.BeginScope("Project Adoption ({Id})"); Logger.LogInformation($"ProcessJob (Adopt) {Id} for project {_projectInfo.Name} started."); // upload the file to OSS var bucket = await _userResolver.GetBucketAsync(tryToCreate : true); ProjectStorage projectStorage = await _userResolver.GetProjectStorageAsync(_projectInfo.Name); string ossSourceModel = projectStorage.Project.OSSSourceModel; await bucket.SmartUploadAsync(_fileName, ossSourceModel); // cleanup before adoption File.Delete(_fileName); // adopt the project bool adopted = false; FdaStatsDTO stats; try { string signedUploadedUrl = await bucket.CreateSignedUrlAsync(ossSourceModel); stats = await ProjectWork.AdoptAsync(_projectInfo, signedUploadedUrl); adopted = true; } catch (FdaProcessingException fpe) { await resultSender.SendErrorAsync(Id, fpe.ReportUrl); return; } finally { // on any failure during adoption we consider that project adoption failed and it's not usable if (!adopted) { Logger.LogInformation($"Adoption failed. Removing '{ossSourceModel}' OSS object."); await bucket.DeleteObjectAsync(ossSourceModel); } } Logger.LogInformation($"ProcessJob (Adopt) {Id} for project {_projectInfo.Name} completed."); await resultSender.SendSuccessAsync(_dtoGenerator.ToDTO(projectStorage), stats); }
public JobsHub(ILogger <JobsHub> logger, ProjectWork projectWork, LinkGenerator linkGenerator, UserResolver userResolver, ProfileProvider profileProvider, Uploads uploads, DtoGenerator dtoGenerator, ProjectService projectService, AdoptProjectWithParametersPayloadProvider adoptProjectWithParametersPayloadProvider, IConfiguration configuration) { _logger = logger; _projectWork = projectWork; _linkGenerator = linkGenerator; _profileProvider = profileProvider; _userResolver = userResolver; _uploads = uploads; _dtoGenerator = dtoGenerator; _projectService = projectService; _adoptProjectWithParametersPayloadProvider = adoptProjectWithParametersPayloadProvider; _configuration = configuration; _sender = new Sender(this); }
public ScheduleDTO CreateSchedule(ScheduleDTO item) { ProjectWork work = Database.ProjectWorks.GetProjectWorkById(item.ProjectWorkId); ScheduleDay day = Database.ScheduleDays.GetScheduleDayById(item.ScheduleDayId); Employee employee = Database.Employees.GetEmployeeById(work.EmployeeId); ScheduleDTO result = new ScheduleDTO(); if (employee.PercentOrScheduleId == 3) { employee.PercentOrScheduleId = 2; employee.PercentOrSchedule = Database.WorkLoads.GetTypeById(2); Schedule sch = new Schedule { ProjectWorkId = item.ProjectWorkId, ProjectWork = work, ScheduleDayId = item.ScheduleDayId, ScheduleDay = day }; var sc = Database.Schedules.CreateSchedule(sch); Database.Save(); result = Map.ObjectMap(sc); return(result); } if (employee.PercentOrScheduleId == 1) { throw new PercentOrScheduleException(); } if (employee.PercentOrScheduleId == 2) { Schedule schedule = new Schedule { ProjectWorkId = item.ProjectWorkId, ProjectWork = work, ScheduleDayId = item.ScheduleDayId, ScheduleDay = day }; var sc = Database.Schedules.CreateSchedule(schedule); Database.Save(); result = Map.ObjectMap(sc); return(result); } return(result); }
public List <ProjectWork> GetCollectionProjectWork() { try { db = new DbConnect(); List <ProjectWork> projectWorks = new List <ProjectWork>(); command = new MySqlCommand("GetProjectWork", db.GetConnection()); command.CommandType = System.Data.CommandType.StoredProcedure; reader = command.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { ProjectWork projectWork = new ProjectWork { ProjectWorkEntityID = reader.GetInt32("ProjectWorkEntityID"), Title = reader.GetString("Title"), SubTitle = reader.GetString("SubTitle"), ProjectDescription = reader.GetString("ProjectDescription"), ImagePath = reader.GetString("ImagePath"), ImageDescription = reader.GetString("ImageDescription"), ExternalUrl = reader.GetString("ExternalUrl"), CreatedDate = reader.GetDateTime("CreatedDate"), ModifiedDate = reader.GetDateTime("ModifiedDate") }; projectWorks.Add(projectWork); } } reader.Close(); reader.Dispose(); return(projectWorks); } catch (MySqlException mysqlEx) { throw mysqlEx; } }
public override async Task ProcessJobAsync(IResultSender resultSender) { using var scope = Logger.BeginScope("RFA generation ({Id})"); Logger.LogInformation($"ProcessJob (RFA) {Id} for project {ProjectId} started."); (var stats, var reportUrl) = await ProjectWork.GenerateRfaAsync(ProjectId, _hash); Logger.LogInformation($"ProcessJob (RFA) {Id} for project {ProjectId} completed."); // TODO: this url can be generated right away... we can simply acknowledge that the OSS file is ready, // without generating a URL here string rfaUrl = _linkGenerator.GetPathByAction(controller: "Download", action: "RFA", values: new { projectName = ProjectId, hash = _hash }); // send resulting URL to the client await resultSender.SendSuccessAsync(rfaUrl, stats, reportUrl); }
public override async Task ProcessJobAsync(IResultSender resultSender) { using var scope = Logger.BeginScope("Drawing generation ({Id})"); Logger.LogInformation($"ProcessJob (Drawing) {Id} for project {ProjectId} started."); FdaStatsDTO stats = await ProjectWork.GenerateDrawingAsync(ProjectId, _hash); Logger.LogInformation($"ProcessJob (Drawing) {Id} for project {ProjectId} completed."); // TODO: this url can be generated right away... we can simply acknowledge that OSS file is ready, // without generating URL here var drawingUrl = _linkGenerator.GetPathByAction(controller: "Download", action: "Drawing", values: new { projectName = ProjectId, hash = _hash }); // send resulting URL to the client await resultSender.SendSuccessAsync(drawingUrl, stats); }
public ParticipationHistoryDTO CreateHistory(ParticipationHistoryDTO historyDTO) { ProjectWork work = Database.ProjectWorks.GetProjectWorkById(historyDTO.ProjectWorkId); if (historyDTO.StartDate > historyDTO.EndDate) { throw new InvalidDateException(); } ParticipationHistory history = new ParticipationHistory { ProjectWorkId = historyDTO.ProjectWorkId, ProjectWork = work, StartDate = historyDTO.StartDate, EndDate = historyDTO.EndDate }; var hist = Database.ParticipationHistories.CreateHistory(history); Database.Save(); return(Map.ObjectMap(hist)); }
public ProjectWorkDTO CreateProjectWork(ProjectWorkDTO item) { Employee employee = Database.Employees.GetEmployeeById(item.EmployeeId); Project project = Database.Projects.GetProjectById(item.ProjectId); ProjectRole projectRole = Database.ProjectRoles.GetProjectRoleById(item.ProjectRoleId); Database.ProjectWorks.FindSameProjectWork(project.Id, employee.Id, projectRole.Id); ProjectWork projectWork = new ProjectWork { EmployeeId = item.EmployeeId, Employee = employee, ProjectId = item.ProjectId, Project = project, ProjectRoleId = item.ProjectRoleId, ProjectRole = projectRole, WorkLoad = null }; var pw = Database.ProjectWorks.CreateProjectWork(projectWork); Database.Save(); var empl = Database.Employees.GetEmployeeById(item.EmployeeId); if (empl.PercentOrScheduleId == 3) { Console.WriteLine("Добавьте процент загруженности или расписание"); } if (empl.PercentOrScheduleId == 1) { Console.WriteLine("Добавьте процент загруженности"); } if (empl.PercentOrScheduleId == 2) { Console.WriteLine("Добавьте расписание"); } return(Map.ObjectMap(pw)); }
public override async Task ProcessJobAsync(IResultSender resultSender) { using var scope = Logger.BeginScope("Export Drawing ({Id})"); Logger.LogInformation($"ProcessJob (ExportDrawing) {Id} for project {ProjectId} started."); bool generated = await ProjectWork.ExportDrawingViewablesAsync(ProjectId, _hash); Logger.LogInformation($"ProcessJob (ExportDrawing) {Id} for project {ProjectId} completed."); string url = ""; if (generated) { url = _linkGenerator.GetPathByAction(controller: "Download", action: "DrawingViewables", values: new { projectName = ProjectId, fileName = "drawing.pdf", hash = _hash }); // when local url starts with slash, it does not work, because it is doubled in url url = url.IndexOf("/") == 0 ? url.Substring(1) : url; } await resultSender.SendSuccessAsync(url); }
public InitializerTestBase(DefaultProjectsConfiguration defaultProjectsConfiguration) { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", false) .AddJsonFile("appsettings.Local.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .AddForgeAlternativeEnvironmentVariables() .Build(); IServiceCollection services = new ServiceCollection(); services.AddHttpClient(); var serviceProvider = services.BuildServiceProvider(); ForgeConfiguration forgeConfiguration = configuration.GetSection("Forge").Get <ForgeConfiguration>(); IOptions <ForgeConfiguration> forgeConfigOptions = Options.Create(forgeConfiguration); var httpClientFactory = serviceProvider.GetRequiredService <IHttpClientFactory>(); forgeOSS = new ForgeOSS(httpClientFactory, forgeConfigOptions, new NullLogger <ForgeOSS>()); var httpMessageHandler = new ForgeHandler(Options.Create(forgeConfiguration)) { InnerHandler = new HttpClientHandler() }; var forgeService = new ForgeService(new HttpClient(httpMessageHandler)); var designAutomationClient = new DesignAutomationClient(forgeService); projectsBucketKey = Guid.NewGuid().ToString(); localCache = new LocalCache(); var bucketPrefixProvider = new BucketPrefixProvider(forgeConfigOptions, configuration); var resourceProvider = new ResourceProvider(forgeConfigOptions, designAutomationClient, configuration, bucketPrefixProvider, projectsBucketKey); var postProcessing = new PostProcessing(httpClientFactory, new NullLogger <PostProcessing>(), localCache, Options.Create(new ProcessingOptions())); var publisher = new Publisher(designAutomationClient, new NullLogger <Publisher>(), resourceProvider, postProcessing, Options.Create(new PublisherConfiguration()), new WorkItemsApi(forgeService), null, new TaskUtil()); var appBundleZipPathsConfiguration = new AppBundleZipPaths { EmptyExe = "../../../../WebApplication/AppBundles/EmptyExePlugin.bundle.zip", DataChecker = "../../../../WebApplication/AppBundles/DataCheckerPlugin.bundle.zip", CreateSVF = "../../../../WebApplication/AppBundles/CreateSVFPlugin.bundle.zip", CreateThumbnail = "../../../../WebApplication/AppBundles/CreateThumbnailPlugin.bundle.zip", ExtractParameters = "../../../../WebApplication/AppBundles/ExtractParametersPlugin.bundle.zip", UpdateParameters = "../../../../WebApplication/AppBundles/UpdateParametersPlugin.bundle.zip", CreateRFA = "../../../../WebApplication/AppBundles/RFAExportRCEPlugin.bundle.zip", CreateBOM = "../../../../WebApplication/AppBundles/ExportBOMPlugin.bundle.zip", ExportDrawing = "../../../../WebApplication/AppBundles/ExportDrawingAsPdfPlugin.bundle.zip", UpdateDrawings = "../../../../WebApplication/AppBundles/UpdateDrawingsPlugin.bundle.zip" }; IOptions <AppBundleZipPaths> appBundleZipPathsOptions = Options.Create(appBundleZipPathsConfiguration); var fdaClient = new FdaClient(publisher, appBundleZipPathsOptions); IOptions <DefaultProjectsConfiguration> defaultProjectsOptions = Options.Create(defaultProjectsConfiguration); var profileProvider = new ProfileProvider(forgeOSS); var bucketKeyProvider = new LoggedInUserBucketKeyProvider(profileProvider, resourceProvider); var userResolver = new UserResolver(forgeOSS, bucketKeyProvider, localCache, NullLogger <UserResolver> .Instance, profileProvider); var arranger = new Arranger(httpClientFactory, userResolver); // TODO: linkGenerator should be mocked var dtoGenerator = new DtoGenerator(linkGenerator: null, localCache); var projectWork = new ProjectWork(new NullLogger <ProjectWork>(), arranger, fdaClient, dtoGenerator, userResolver); var projectService = new ProjectService(new NullLogger <ProjectService>(), userResolver, projectWork, dtoGenerator); initializer = new Initializer(new NullLogger <Initializer>(), fdaClient, defaultProjectsOptions, projectWork, userResolver, localCache, projectService, bucketPrefixProvider); testFileDirectory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName())); httpClient = new HttpClient(); }