diff --git a/.gitignore b/.gitignore
index a356abd5c..978a4f8a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,4 +51,6 @@ js_dist
/compose.override.yml
/composer.phar
/data
+drivers
+chromedriver.log
diff --git a/Makefile b/Makefile
index efb9984ef..139032672 100644
--- a/Makefile
+++ b/Makefile
@@ -106,6 +106,7 @@ test-functional: data config htdocs/uploads tmp
$(DOCKER_COMP) stop dbtest apachephptest mailcatcher
$(DOCKER_COMP) up -d dbtest apachephptest mailcatcher
make clean-test-deprecated-log
+ $(DOCKER_COMP) run --no-deps --rm -u localUser apachephptest ./bin/bdi detect drivers
$(DOCKER_COMP) run --no-deps --rm -u localUser apachephptest ./bin/behat
make var/logs/test.deprecations_grouped.log
$(DOCKER_COMP) stop dbtest apachephptest mailcatcher
diff --git a/app/config/packages/backoffice_menu.yaml b/app/config/packages/backoffice_menu.yaml
index 2f03f1fee..f50a8d1b2 100644
--- a/app/config/packages/backoffice_menu.yaml
+++ b/app/config/packages/backoffice_menu.yaml
@@ -218,6 +218,8 @@ parameters:
niveau: 'ROLE_ADMIN'
extra_routes:
- admin_accounting_quotations_list
+ - admin_accounting_quotations_add
+ - admin_accounting_quotations_edit
compta_facture:
nom: 'Factures'
url: '/admin/accounting/invoices/list'
diff --git a/app/config/routing/admin_accounting.yml b/app/config/routing/admin_accounting.yml
index 28f5eb33e..181bae4fd 100644
--- a/app/config/routing/admin_accounting.yml
+++ b/app/config/routing/admin_accounting.yml
@@ -14,6 +14,14 @@ admin_accounting_quotations_list:
path: /quotations/list
defaults: {_controller: AppBundle\Controller\Admin\Accounting\Quotation\ListQuotationAction}
+admin_accounting_quotations_add:
+ path: /quotations/add
+ defaults: {_controller: AppBundle\Controller\Admin\Accounting\Quotation\AddQuotationAction}
+
+admin_accounting_quotations_edit:
+ path: /quotations/edit
+ defaults: {_controller: AppBundle\Controller\Admin\Accounting\Quotation\EditQuotationAction}
+
admin_accounting_quotations_download:
path: /quotations/download
defaults: {_controller: AppBundle\Controller\Admin\Accounting\Quotation\DownloadQuotationAction}
diff --git a/behat.php b/behat.php
index adc9b8e58..b82956c14 100644
--- a/behat.php
+++ b/behat.php
@@ -7,17 +7,54 @@
use Behat\Config\Suite;
use Behat\MinkExtension\Context\MinkContext;
use Behat\MinkExtension\ServiceContainer\MinkExtension;
+use Robertfausk\Behat\PantherExtension\ServiceContainer\PantherExtension;
return (new Config())
->withProfile(
(new Profile('default'))
+ ->withExtension(new Extension(PantherExtension::class))
->withExtension(new Extension(MinkExtension::class, [
'base_url' => 'https://apachephptest:80',
'files_path' => '%paths.base%/tests/behat/files',
- 'browserkit_http' => [
- 'http_client_parameters' => [
- 'verify_peer' => false,
- 'verify_host' => false,
+ 'default_session' => 'browserkit_http',
+ 'javascript_session' => 'panther',
+ 'sessions' => [
+ 'browserkit_http' => [
+ 'browserkit_http' => [
+ 'http_client_parameters' => [
+ 'verify_peer' => false,
+ 'verify_host' => false,
+ ],
+ ],
+ ],
+ 'panther' => [
+ 'panther' => [
+ 'options' => [
+ 'browser' => 'chrome',
+ 'webServerDir' => '%paths.base%/htdocs',
+ 'external_base_uri' => 'https://apachephptest:80',
+ ],
+ 'manager_options' => [
+ 'chromedriver_arguments' => [
+ '--log-path=/var/www/html/chromedriver.log',
+ '--verbose',
+ ],
+ 'capabilities' => [
+ 'goog:chromeOptions' => [
+ 'args' => [
+ '--headless',
+ '--disable-gpu',
+ '--no-sandbox',
+ '--disable-dev-shm-usage',
+ '--disable-extensions',
+ '--ignore-certificate-errors',
+ '--disable-smooth-scrolling',
+ ],
+ ],
+ ],
+ 'external_base_uri' => 'https://apachephptest:80',
+ ],
+ ],
],
],
]))
diff --git a/compose.yml b/compose.yml
index 32903be5e..3213e56ab 100644
--- a/compose.yml
+++ b/compose.yml
@@ -35,6 +35,8 @@ services:
APP_ENV: "dev"
HOST_PWD: ${PWD}
SYMFONY_IDE: "%env(IDE_USED)%://open?url=file://%%f&line=%%l&/var/www/html/>%env(HOST_PWD)%/"
+ PANTHER_NO_SANDBOX: 1
+ PANTHER_CHROME_ARGUMENTS: '--disable-dev-shm-usage --disable-features=IsolateOrigins,site-per-process,TrackingProtection3pcd --window-size=1920,1080'
env_file:
.env
volumes:
diff --git a/composer.json b/composer.json
index 14761a361..1ac17bf89 100644
--- a/composer.json
+++ b/composer.json
@@ -139,6 +139,7 @@
"require-dev": {
"behat/behat": "^3.29",
"behat/mink-browserkit-driver": "^2.3",
+ "dbrekelmans/bdi": "^1.4",
"fakerphp/faker": "^1.24",
"friends-of-behat/mink-extension": "^2.7",
"friendsofphp/php-cs-fixer": "^3.75",
@@ -152,6 +153,7 @@
"phpstan/phpstan-webmozart-assert": "^2.0",
"phpunit/phpunit": "11.*",
"rector/rector": "^2.0",
+ "robertfausk/behat-panther-extension": "^1.2",
"smalot/pdfparser": "^0.19.0",
"symfony/debug-bundle": "7.3.*",
"symfony/json-path": "7.3.*",
diff --git a/composer.lock b/composer.lock
index b10a6bddf..ff18a7b43 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "a55bcfd2a0998e8ea473bd3f6dc52e40",
+ "content-hash": "8034c8e4a174367274f53e046c9071b1",
"packages": [
{
"name": "algolia/algoliasearch-client-php",
@@ -11201,6 +11201,55 @@
],
"time": "2024-05-06T16:37:16+00:00"
},
+ {
+ "name": "dbrekelmans/bdi",
+ "version": "1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dbrekelmans/bdi.git",
+ "reference": "c2b77127d7aa3fad25d57575c207b54b108ab300"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dbrekelmans/bdi/zipball/c2b77127d7aa3fad25d57575c207b54b108ab300",
+ "reference": "c2b77127d7aa3fad25d57575c207b54b108ab300",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-zip": "*",
+ "ext-zlib": "*",
+ "php": "^8.1"
+ },
+ "bin": [
+ "bdi",
+ "bdi.phar"
+ ],
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniël Brekelmans",
+ "homepage": "https://github.com/dbrekelmans"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/dbrekelmans/bdi/graphs/contributors"
+ }
+ ],
+ "description": "PHAR distribution of dbrekelmans/browser-driver-installer.",
+ "homepage": "https://github.com/dbrekelmans/bdi",
+ "keywords": [
+ "browser-driver-installer"
+ ],
+ "support": {
+ "source": "https://github.com/dbrekelmans/bdi/tree/1.4.1"
+ },
+ "time": "2025-11-03T11:32:28+00:00"
+ },
{
"name": "evenement/evenement",
"version": "v3.0.2",
@@ -12045,6 +12094,72 @@
},
"time": "2022-02-21T01:04:05+00:00"
},
+ {
+ "name": "php-webdriver/webdriver",
+ "version": "1.15.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-webdriver/php-webdriver.git",
+ "reference": "998e499b786805568deaf8cbf06f4044f05d91bf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/998e499b786805568deaf8cbf06f4044f05d91bf",
+ "reference": "998e499b786805568deaf8cbf06f4044f05d91bf",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-zip": "*",
+ "php": "^7.3 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.12",
+ "symfony/process": "^5.0 || ^6.0 || ^7.0"
+ },
+ "replace": {
+ "facebook/webdriver": "*"
+ },
+ "require-dev": {
+ "ergebnis/composer-normalize": "^2.20.0",
+ "ondram/ci-detector": "^4.0",
+ "php-coveralls/php-coveralls": "^2.4",
+ "php-mock/php-mock-phpunit": "^2.0",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpunit/phpunit": "^9.3",
+ "squizlabs/php_codesniffer": "^3.5",
+ "symfony/var-dumper": "^5.0 || ^6.0 || ^7.0"
+ },
+ "suggest": {
+ "ext-SimpleXML": "For Firefox profile creation"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/Exception/TimeoutException.php"
+ ],
+ "psr-4": {
+ "Facebook\\WebDriver\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP client for Selenium WebDriver. Previously facebook/webdriver.",
+ "homepage": "https://github.com/php-webdriver/php-webdriver",
+ "keywords": [
+ "Chromedriver",
+ "geckodriver",
+ "php",
+ "selenium",
+ "webdriver"
+ ],
+ "support": {
+ "issues": "https://github.com/php-webdriver/php-webdriver/issues",
+ "source": "https://github.com/php-webdriver/php-webdriver/tree/1.15.2"
+ },
+ "time": "2024-11-21T15:12:59+00:00"
+ },
{
"name": "phpstan/extension-installer",
"version": "1.4.3",
@@ -13420,6 +13535,171 @@
],
"time": "2025-10-11T21:50:23+00:00"
},
+ {
+ "name": "robertfausk/behat-panther-extension",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/robertfausk/behat-panther-extension.git",
+ "reference": "838984a60cd53d950382bee321f8b670c3a5d120"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/robertfausk/behat-panther-extension/zipball/838984a60cd53d950382bee321f8b670c3a5d120",
+ "reference": "838984a60cd53d950382bee321f8b670c3a5d120",
+ "shasum": ""
+ },
+ "require": {
+ "behat/behat": "^3.0.5",
+ "friends-of-behat/mink-extension": "^2.3.0",
+ "php": ">=7.2",
+ "robertfausk/mink-panther-driver": "^1.0",
+ "symfony/config": "^3.4|^4.0|^5.0|^6.0|^7.0"
+ },
+ "require-dev": {
+ "g1a/composer-test-scenarios": "^3.0",
+ "matthiasnoback/symfony-config-test": "^4.1|^5.1",
+ "phpunit/phpunit": "~7.5|~9.3",
+ "roave/security-advisories": "dev-master"
+ },
+ "type": "behat-extension",
+ "extra": {
+ "scenarios": {
+ "symfony3": {
+ "require": {
+ "symfony/config": "^3.4"
+ }
+ },
+ "symfony4": {
+ "require": {
+ "symfony/config": "^4.0"
+ }
+ },
+ "symfony5": {
+ "require": {
+ "symfony/config": "^5.0"
+ }
+ },
+ "symfony6": {
+ "require": {
+ "symfony/config": "^6.0"
+ }
+ },
+ "symfony7": {
+ "require": {
+ "symfony/config": "^7.0"
+ }
+ }
+ },
+ "branch-alias": {
+ "dev-main": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Robertfausk\\Behat\\PantherExtension\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Robert Freigang",
+ "email": "robertfreigang@gmx.de"
+ }
+ ],
+ "description": "Symfony Panther extension for Behat",
+ "keywords": [
+ "Behat",
+ "Cucumber",
+ "Panther",
+ "browser",
+ "chrome",
+ "firefox",
+ "gherkin",
+ "gui",
+ "symfony",
+ "test",
+ "web"
+ ],
+ "support": {
+ "issues": "https://github.com/robertfausk/behat-panther-extension/issues",
+ "source": "https://github.com/robertfausk/behat-panther-extension/tree/v1.2.0"
+ },
+ "time": "2025-04-04T10:09:14+00:00"
+ },
+ {
+ "name": "robertfausk/mink-panther-driver",
+ "version": "v1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/robertfausk/mink-panther-driver.git",
+ "reference": "ac95116505015a43af687220a8e00cefabd34dc0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/robertfausk/mink-panther-driver/zipball/ac95116505015a43af687220a8e00cefabd34dc0",
+ "reference": "ac95116505015a43af687220a8e00cefabd34dc0",
+ "shasum": ""
+ },
+ "require": {
+ "behat/mink": "~1.8",
+ "ext-dom": "*",
+ "php": ">=7.2",
+ "symfony/panther": "~0.7|~1.0|~2.0"
+ },
+ "require-dev": {
+ "dbrekelmans/bdi": "^1.0",
+ "mink/driver-testsuite": "dev-master",
+ "phpunit/phpunit": "~8.5|~9.3",
+ "symfony/dom-crawler": "~4.0|~5.0|~6.0",
+ "symfony/http-kernel": "~4.0|~5.0|~6.0"
+ },
+ "suggest": {
+ "ext-gd": "*"
+ },
+ "type": "mink-driver",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Behat\\Mink\\Driver\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Robert Freigang",
+ "email": "robertfreigang@gmx.de"
+ }
+ ],
+ "description": "Symfony Panther driver for Mink framework",
+ "homepage": "http://mink.behat.org/",
+ "keywords": [
+ "Mink",
+ "Panther",
+ "browser",
+ "chrome",
+ "chromium",
+ "firefox",
+ "headless",
+ "symfony",
+ "testing"
+ ],
+ "support": {
+ "issues": "https://github.com/robertfausk/mink-panther-driver/issues",
+ "source": "https://github.com/robertfausk/mink-panther-driver/tree/v1.1.2"
+ },
+ "time": "2025-04-03T21:55:18+00:00"
+ },
{
"name": "sebastian/cli-parser",
"version": "3.0.2",
@@ -14868,6 +15148,95 @@
],
"time": "2025-09-27T15:48:31+00:00"
},
+ {
+ "name": "symfony/panther",
+ "version": "v2.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/panther.git",
+ "reference": "7d96ff386394ffc02ff320253e7fb6585e3cb76e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/panther/zipball/7d96ff386394ffc02ff320253e7fb6585e3cb76e",
+ "reference": "7d96ff386394ffc02ff320253e7fb6585e3cb76e",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "php": ">=8.1",
+ "php-webdriver/webdriver": "^1.8.2",
+ "symfony/browser-kit": "^6.4 || ^7.3 || ^8.0",
+ "symfony/dependency-injection": "^6.4 || ^7.3 || ^8.0",
+ "symfony/deprecation-contracts": "^2.4 || ^3",
+ "symfony/dom-crawler": "^6.4 || ^7.3 || ^8.0",
+ "symfony/http-client": "^6.4 || ^7.0",
+ "symfony/http-kernel": "^6.4 || ^7.3 || ^8.0",
+ "symfony/process": "^6.4 || ^7.3 || ^8.0"
+ },
+ "require-dev": {
+ "symfony/css-selector": "^6.4 || ^7.3 || ^8.0",
+ "symfony/framework-bundle": "^6.4 || ^7.3 || ^8.0",
+ "symfony/mime": "^6.4 || ^7.3 || ^8.0",
+ "symfony/phpunit-bridge": ">=7.3.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Panther\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kévin Dunglas",
+ "email": "kevin@dunglas.dev",
+ "homepage": "https://dunglas.dev"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A browser testing and web scraping library for PHP and Symfony.",
+ "homepage": "https://symfony.com/packages/Panther",
+ "keywords": [
+ "e2e",
+ "scraping",
+ "selenium",
+ "symfony",
+ "testing",
+ "webdriver"
+ ],
+ "support": {
+ "issues": "https://github.com/symfony/panther/issues",
+ "source": "https://github.com/symfony/panther/tree/v2.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.panthera.org/donate",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/dunglas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/panther",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-11-21T14:10:51+00:00"
+ },
{
"name": "symfony/process",
"version": "v7.3.4",
diff --git a/docker/dockerfiles/apachephp/Dockerfile b/docker/dockerfiles/apachephp/Dockerfile
index 1a861a74a..b549cd5fc 100644
--- a/docker/dockerfiles/apachephp/Dockerfile
+++ b/docker/dockerfiles/apachephp/Dockerfile
@@ -29,6 +29,7 @@ RUN apt-get update && \
libmcrypt4 \
libicu-dev \
nodejs \
+ chromium \
&& \
docker-php-ext-configure gd --with-freetype --with-jpeg \
&& \
diff --git a/htdocs/pages/administration/compta_facture.php b/htdocs/pages/administration/compta_facture.php
index ed28a51f5..0d348aa58 100644
--- a/htdocs/pages/administration/compta_facture.php
+++ b/htdocs/pages/administration/compta_facture.php
@@ -174,30 +174,46 @@
- $formulaire->addElement('header' , '', 'Contenu');
- $formulaire->addElement('text' , 'ref' , 'Référence' , ['size' => 50, 'maxlength' => 100]);
- $formulaire->addElement('textarea', 'designation' , 'Désignation', ['cols' => 42, 'rows' => 5]);
- $formulaire->addElement('text' , 'quantite' , 'Quantite' , ['size' => 50, 'maxlength' => 100]);
- $formulaire->addElement('text' , 'pu' , 'Prix Unitaire' , ['size' => 50, 'maxlength' => 100]);
-
-
-
- for ($i = 1;$i < 6;$i++) {
+ $nbRow = count($champsRecup);
+ if ($nbRow === 5) {
$formulaire->addElement('header' , '', 'Contenu');
- $formulaire->addElement('static' , 'note' , '' , 'Ligne ' . $i . '
');
- $formulaire->addElement('hidden' , 'id' . $i , 'id');
- $formulaire->addElement('text' , 'ref' . $i , 'Référence' , ['size' => 50, 'maxlength' => 100]);
- $formulaire->addElement('static' , 'note' , '' , 'Rappel : sponsoring 20%, place supplémentaire 10%.
');
- $formulaire->addElement('select' , 'tva' . $i , 'Taux de TVA' , ['0' => 'Non soumis', '5.50' => '5.5%', '10.00' => '10%', '20.00' => '20%']);
- $formulaire->addElement('textarea', 'designation' . $i , 'Désignation', ['cols' => 42, 'rows' => 5]);
- $formulaire->addElement('text' , 'quantite' . $i , 'Quantite' , ['size' => 50, 'maxlength' => 100]);
- $formulaire->addElement('text' , 'pu' . $i , 'Prix Unitaire HT' , ['size' => 50, 'maxlength' => 100]);
+ $formulaire->addElement('text' , 'ref' , 'Référence' , ['size' => 50, 'maxlength' => 100]);
+ $formulaire->addElement('textarea', 'designation' , 'Désignation', ['cols' => 42, 'rows' => 5]);
+ $formulaire->addElement('text' , 'quantite' , 'Quantite' , ['size' => 50, 'maxlength' => 100]);
+ $formulaire->addElement('text' , 'pu' , 'Prix Unitaire' , ['size' => 50, 'maxlength' => 100]);
+
+
+
+ for ($i = 1;$i < 6;$i++) {
+ $formulaire->addElement('header' , '', 'Contenu');
+ $formulaire->addElement('static' , 'note' , '' , 'Ligne ' . $i . '
');
+ $formulaire->addElement('hidden' , 'id' . $i , 'id');
+ $formulaire->addElement('text' , 'ref' . $i , 'Référence' , ['size' => 50, 'maxlength' => 100]);
+ $formulaire->addElement('static' , 'note' , '' , 'Rappel : sponsoring 20%, place supplémentaire 10%.
');
+ $formulaire->addElement('select' , 'tva' . $i , 'Taux de TVA' , ['0' => 'Non soumis', '5.50' => '5.5%', '10.00' => '10%', '20.00' => '20%']);
+ $formulaire->addElement('textarea', 'designation' . $i , 'Désignation', ['cols' => 42, 'rows' => 5]);
+ $formulaire->addElement('text' , 'quantite' . $i , 'Quantite' , ['size' => 50, 'maxlength' => 100]);
+ $formulaire->addElement('text' , 'pu' . $i , 'Prix Unitaire HT' , ['size' => 50, 'maxlength' => 100]);
+ }
+ } else {
+ for ($i = 1;$i <= $nbRow;$i++) {
+ $formulaire->addElement('header' , '', 'Contenu');
+ $formulaire->addElement('static' , 'note' , '' , 'Ligne ' . $i . '
');
+ $formulaire->addElement('hidden' , 'id' . $i , 'id');
+ $formulaire->addElement('text' , 'ref' . $i , 'Référence' , ['size' => 50, 'maxlength' => 100]);
+ $formulaire->addElement('static' , 'note' , '' , 'Rappel : sponsoring 20%, place supplémentaire 10%.
');
+ $formulaire->addElement('select' , 'tva' . $i , 'Taux de TVA' , ['0' => 'Non soumis', '5.50' => '5.5%', '10.00' => '10%', '20.00' => '20%']);
+ $formulaire->addElement('textarea', 'designation' . $i , 'Désignation', ['cols' => 42, 'rows' => 5]);
+ $formulaire->addElement('text' , 'quantite' . $i , 'Quantite' , ['size' => 50, 'maxlength' => 100]);
+ $formulaire->addElement('text' , 'pu' . $i , 'Prix Unitaire HT' , ['size' => 50, 'maxlength' => 100]);
+ }
}
+
// boutons
$formulaire->addElement('header' , 'boutons' , '');
$formulaire->addElement('submit' , 'soumettre' , ucfirst($action));
diff --git a/htdocs/templates/administration/compta_facture.html b/htdocs/templates/administration/compta_facture.html
index d6a9d8775..ac6094e6e 100644
--- a/htdocs/templates/administration/compta_facture.html
+++ b/htdocs/templates/administration/compta_facture.html
@@ -106,7 +106,7 @@
Il faut obligatoirement passer par la saisie d'un devis.
- {% include 'admin/accounting/invoicing-period.form.html.twig' with {form: formPeriod, url: path('admin_accounting_quotations_list')} %} + {% include 'admin/accounting/invoicing-period.form.html.twig' with {form: formPeriod, url: path('admin_accounting_invoices_list')} %} {% if lines.count > 0 %}