diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index d831dc3d..3fac4ad9 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -71,6 +71,27 @@ class ProjectController extends AbstractController ]); } + /** + * @Route("/{id}/build", name="project_build", requirements={"id"="\d+"}) + */ + public function build(Project $project, Request $request, ProjectBuildHelper $buildHelper): Response + { + $this->denyAccessUnlessGranted('read', $project); + + //If no number of builds is given (or it is invalid), just assume 1 + $number_of_builds = $request->query->getInt('n', 1); + if ($number_of_builds < 1) { + $number_of_builds = 1; + } + + + return $this->render('Projects/build/build.html.twig', [ + 'buildHelper' => $buildHelper, + 'project' => $project, + 'number_of_builds' => $number_of_builds, + ]); + } + /** * @Route("/add_parts", name="project_add_parts_no_id") * @Route("/{id}/add_parts", name="project_add_parts", requirements={"id"="\d+"}) diff --git a/src/Services/ProjectSystem/ProjectBuildHelper.php b/src/Services/ProjectSystem/ProjectBuildHelper.php index 40545834..983313a5 100644 --- a/src/Services/ProjectSystem/ProjectBuildHelper.php +++ b/src/Services/ProjectSystem/ProjectBuildHelper.php @@ -72,13 +72,14 @@ class ProjectBuildHelper /** * Checks if the given project can be build with the current stock. - * This means that the maximum buildable count is greater than 0. + * This means that the maximum buildable count is greater or equal than the requested $number_of_projects * @param Project $project + * @parm int $number_of_projects * @return bool */ - public function isProjectBuildable(Project $project): bool + public function isProjectBuildable(Project $project, int $number_of_projects = 1): bool { - return $this->getMaximumBuildableCount($project) > 0; + return $this->getMaximumBuildableCount($project) >= $number_of_projects; } /** diff --git a/templates/Projects/build/build.html.twig b/templates/Projects/build/build.html.twig new file mode 100644 index 00000000..85540293 --- /dev/null +++ b/templates/Projects/build/build.html.twig @@ -0,0 +1,36 @@ +{% extends "main_card.html.twig" %} + +{% block title %}{% trans %}project.info.builds.label{% endtrans %}: {{ number_of_builds }}x {{ project.name }}{% endblock %} + +{% block card_title %} + + {% trans %}project.info.builds.label{% endtrans %}: {{ number_of_builds }}x {{ project.name }} +{% endblock %} + +{% block card_content %} + {% set can_build = buildHelper.projectBuildable(project, number_of_builds) %} + {% import "components/projects.macro.html.twig" as project_macros %} + + {% if project.status is not empty and project.status != "in_production" %} +