diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml index 9d076b84..02f6b9a4 100644 --- a/config/packages/twig.yaml +++ b/config/packages/twig.yaml @@ -2,6 +2,7 @@ twig: default_path: '%kernel.project_dir%/templates' debug: '%kernel.debug%' strict_variables: '%kernel.debug%' + form_themes: ['bootstrap_4_horizontal_layout.html.twig'] globals: partdb_title: '%partdb_title%' diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php index 7a17dba0..15dcbcc6 100644 --- a/src/Controller/PartController.php +++ b/src/Controller/PartController.php @@ -33,9 +33,14 @@ namespace App\Controller; +use App\Entity\Category; use App\Entity\Part; +use App\Form\PartType; use App\Services\AttachmentFilenameService; +use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; class PartController extends AbstractController @@ -58,4 +63,59 @@ class PartController extends AbstractController ); } + /** + * @Route("/part/{id}/edit", name="part_edit", requirements={"id"="\d+"}) + * + * @param Part $part + * @return \Symfony\Component\HttpFoundation\Response + */ + public function edit(Part $part, Request $request) + { + $form = $this->createForm(PartType::class, $part); + + + $form->handleRequest($request); + + + return $this->render('edit_part_info.html.twig', + [ + "part" => $part, + "form" => $form->createView() + ]); + } + + /** + * @Route("/parts/new", name="part_new") + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function new(Request $request, EntityManagerInterface $em) + { + $new_part = new Part(); + $category = $em->find(Category::class, 1); + $new_part->setCategory($category); + + $this->addFlash('success', 'Article Created!'); + + $form = $this->createForm(PartType::class, $new_part); + + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + /** @var Article $article */ + //$part = $form->getData(); + $em->persist($new_part); + $em->flush(); + $this->addFlash('success', 'Article Created! Knowledge is power!'); + return $this->redirectToRoute('part_edit',['id' => $new_part->getID()]); + } + + + return $this->render('edit_part_info.html.twig', + [ + "part" => $new_part, + "form" => $form->createView() + ]); + } + } \ No newline at end of file diff --git a/src/Entity/Attachment.php b/src/Entity/Attachment.php index a230cecf..3d3ec22a 100644 --- a/src/Entity/Attachment.php +++ b/src/Entity/Attachment.php @@ -68,8 +68,8 @@ class Attachment extends NamedDBElement /** * Check if this attachement is a picture (analyse the file's extension) * - * @return boolean @li true if the file extension is a picture extension - * @li otherwise false + * @return boolean * true if the file extension is a picture extension + * * otherwise false */ public function isPicture() : bool { diff --git a/src/Entity/AttachmentContainingDBElement.php b/src/Entity/AttachmentContainingDBElement.php index 77233c84..269cf3a0 100644 --- a/src/Entity/AttachmentContainingDBElement.php +++ b/src/Entity/AttachmentContainingDBElement.php @@ -63,8 +63,8 @@ abstract class AttachmentContainingDBElement extends NamedDBElement /** * Get all attachements of this element / Get the element's attachements with a specific type * - * @param integer $type_id @li if NULL, all attachements of this element will be returned - * @li if this is a number > 0, only attachements with this type ID will be returned + * @param integer $type_id * if NULL, all attachements of this element will be returned + * * if this is a number > 0, only attachements with this type ID will be returned * @param boolean $only_table_attachements if true, only attachements with "show_in_table == true" * * @return Attachment[] the attachements as a one-dimensional array of Attachement objects diff --git a/src/Entity/Company.php b/src/Entity/Company.php index 21ddc74a..a5209fd3 100644 --- a/src/Entity/Company.php +++ b/src/Entity/Company.php @@ -128,8 +128,8 @@ abstract class Company extends StructuralDBElement /** * Get the link to the website of an article * - * @param string $partnr @li NULL for returning the URL with a placeholder for the part number - * @li or the part number for returning the direct URL to the article + * @param string $partnr * NULL for returning the URL with a placeholder for the part number + * * or the part number for returning the direct URL to the article * * @return string the link to the article */ diff --git a/src/Entity/Footprint.php b/src/Entity/Footprint.php index b9b96dda..c1faa4c3 100644 --- a/src/Entity/Footprint.php +++ b/src/Entity/Footprint.php @@ -90,7 +90,7 @@ class Footprint extends PartsContainingDBElement /** * Get the filename of the picture (absolute path from filesystem root) * @return string the saved filename in the DB - * @li an empty string if there is no picture + * * an empty string if there is no picture */ public function getFilename() : string { @@ -103,8 +103,8 @@ class Footprint extends PartsContainingDBElement * @param bool $absolute If set to true, then the absolute filename (from system root) is returned. * If set to false, then the path relative to Part-DB folder is returned. * - * @return string @li the absolute path to the model (from filesystem root), as a UNIX path (with slashes) - * @li an empty string if there is no model + * @return string * the absolute path to the model (from filesystem root), as a UNIX path (with slashes) + * * an empty string if there is no model */ public function get3dFilename(bool $absolute = true) : string { @@ -125,8 +125,8 @@ class Footprint extends PartsContainingDBElement * * An empty filename is a valid filename. * - * @return boolean @li true if file exists or filename is empty - * @li false if there is no file with this filename + * @return boolean * true if file exists or filename is empty + * * false if there is no file with this filename */ public function isFilenameValid() : bool { @@ -145,8 +145,8 @@ class Footprint extends PartsContainingDBElement * * An empty filename is a valid filename. * - * @return boolean @li true if file exists or filename is empty - * @li false if there is no file with this filename + * @return boolean * true if file exists or filename is empty + * * false if there is no file with this filename */ public function is3dFilenameValid() : bool { @@ -179,8 +179,8 @@ class Footprint extends PartsContainingDBElement * It's not really a Problem if there is no such file... * (For this purpose we have the method Footprint::get_broken_filename_footprints()) * - * @param string $new_filename @li the new filename (absolute path from filesystem root, as a UNIX path [only slashes!] !! ) - * @li see also lib.functions.php::to_unix_path() + * @param string $new_filename * the new filename (absolute path from filesystem root, as a UNIX path [only slashes!] !! ) + * * see also lib.functions.php::to_unix_path() * * It's really important that you pass the whole (UNIX) path from filesystem root! * If the file is located in the base directory of Part-DB, the base path diff --git a/src/Entity/NamedDBElement.php b/src/Entity/NamedDBElement.php index 926b8917..f44093d9 100644 --- a/src/Entity/NamedDBElement.php +++ b/src/Entity/NamedDBElement.php @@ -25,6 +25,8 @@ namespace App\Entity; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Validator\Constraints as Assert; + /** * All subclasses of this class have an attribute "name". * @@ -36,8 +38,10 @@ abstract class NamedDBElement extends DBElement /** * @var string The name of this element. * @ORM\Column(type="string") + * @Assert\NotBlank() + * */ - protected $name; + protected $name = ""; /** * @var \DateTime The date when this element was modified the last time. @@ -64,8 +68,10 @@ abstract class NamedDBElement extends DBElement */ public function getName() : string { + /* //Strip HTML from Name, so no XSS injection is possible. - return strip_tags($this->name); + return strip_tags($this->name); */ + return $this->name; } /** diff --git a/src/Entity/Orderdetail.php b/src/Entity/Orderdetail.php index d5113389..25694c96 100644 --- a/src/Entity/Orderdetail.php +++ b/src/Entity/Orderdetail.php @@ -136,8 +136,8 @@ class Orderdetail extends DBElement * "Orderdetails is obsolete" means that the part with that supplier-part-nr * is no longer available from the supplier of that orderdetails. * - * @return boolean @li true if this part is obsolete at that supplier - * @li false if this part isn't obsolete at that supplier + * @return boolean * true if this part is obsolete at that supplier + * * false if this part isn't obsolete at that supplier */ public function getObsolete() : bool { @@ -177,11 +177,11 @@ class Orderdetail extends DBElement /** * Get the price for a specific quantity * - * @param boolean $as_money_string @li if true, this method returns a money string incl. currency - * @li if false, this method returns the price as float + * @param boolean $as_money_string * if true, this method returns a money string incl. currency + * * if false, this method returns the price as float * @param integer $quantity this is the quantity to choose the correct pricedetails - * @param integer|NULL $multiplier @li This is the multiplier which will be applied to every single price - * @li If you pass NULL, the number from $quantity will be used + * @param integer|NULL $multiplier * This is the multiplier which will be applied to every single price + * * If you pass NULL, the number from $quantity will be used * * @return float|null|string float: the price as a float number (if "$as_money_string == false") * * null: if there are no prices and "$as_money_string == false" diff --git a/src/Entity/Part.php b/src/Entity/Part.php index e00cbedc..19d3ca9e 100644 --- a/src/Entity/Part.php +++ b/src/Entity/Part.php @@ -35,7 +35,9 @@ namespace App\Entity; use Doctrine\ORM\Mapping as ORM; -use Webmozart\Assert\Assert; +//use Webmozart\Assert\Assert; + +use Symfony\Component\Validator\Constraints as Assert; /** * Class Part @@ -108,55 +110,57 @@ class Part extends AttachmentContainingDBElement * @var string * @ORM\Column(type="string") */ - protected $description; + protected $description = ""; /** * @var int * @ORM\Column(type="integer") + * @Assert\GreaterThanOrEqual(0) */ - protected $instock; + protected $instock = 0; /** * @var int * @ORM\Column(type="integer") + * @Assert\GreaterThanOrEqual(0) */ - protected $mininstock; + protected $mininstock = 0; /** * @var string * @ORM\Column(type="string") */ - protected $comment; + protected $comment = ""; /** * @var bool * @ORM\Column(type="boolean") */ - protected $visible; + protected $visible = true; /** * @var bool * @ORM\Column(type="boolean") */ - protected $favorite; + protected $favorite = false; /** * @var int * @ORM\Column(type="integer") */ - protected $order_quantity; + protected $order_quantity = 0; /** * @var bool * @ORM\Column(type="boolean") */ - protected $manual_order; + protected $manual_order = false; /** * @var string * @ORM\Column(type="string") */ - protected $manufacturer_product_url; + protected $manufacturer_product_url = ""; /** @@ -305,8 +309,8 @@ class Part extends AttachmentContainingDBElement /** * Get the minimum quantity which should be ordered * - * @param boolean $with_devices @li if true, all parts from devices which are marked as "to order" will be included in the calculation - * @li if false, only max(mininstock - instock, 0) will be returned + * @param boolean $with_devices * if true, all parts from devices which are marked as "to order" will be included in the calculation + * * if false, only max(mininstock - instock, 0) will be returned * * @return integer the minimum order quantity * @throws Exception @@ -455,9 +459,9 @@ class Part extends AttachmentContainingDBElement * * @param boolean $hide_obsolete If true, obsolete orderdetails will NOT be returned * - * @return Orderdetails[] @li all orderdetails as a one-dimensional array of Orderdetails objects + * @return Orderdetails[] * all orderdetails as a one-dimensional array of Orderdetails objects * (empty array if there are no ones) - * @li the array is sorted by the suppliers names / minimum order quantity + * * the array is sorted by the suppliers names / minimum order quantity * * @throws Exception if there was an error */ @@ -479,9 +483,9 @@ class Part extends AttachmentContainingDBElement /** * Get all devices which uses this part * - * @return Device[] @li all devices which uses this part as a one-dimensional array of Device objects + * @return Device[] * all devices which uses this part as a one-dimensional array of Device objects * (empty array if there are no ones) - * @li the array is sorted by the devices names + * * the array is sorted by the devices names * * @throws Exception if there was an error */ @@ -496,14 +500,14 @@ class Part extends AttachmentContainingDBElement * This method simply gets the suppliers of the orderdetails and prepare them.\n * You can get the suppliers as an array or as a string with individual delimeter. * - * @param boolean $object_array @li if true, this method returns an array of Supplier objects - * @li if false, this method returns an array of strings - * @param string|NULL $delimeter @li if this is a string and "$object_array == false", + * @param boolean $object_array * if true, this method returns an array of Supplier objects + * * if false, this method returns an array of strings + * @param string|NULL $delimeter * if this is a string and "$object_array == false", * this method returns a string with all * supplier names, delimeted by "$delimeter" - * @param boolean $full_paths @li if true and "$object_array = false", the returned + * @param boolean $full_paths * if true and "$object_array = false", the returned * suppliernames are full paths (path + name) - * @li if true and "$object_array = false", the returned + * * if true and "$object_array = false", the returned * suppliernames are only the names (without path) * @param boolean $hide_obsolete If true, suppliers from obsolete orderdetails will NOT be returned * @@ -552,8 +556,8 @@ class Part extends AttachmentContainingDBElement * This method simply gets the suppliers-part-Nrs of the orderdetails and prepare them.\n * You can get the numbers as an array or as a string with individual delimeter. * - * @param string|NULL $delimeter @li if this is a string, this method returns a delimeted string - * @li otherwise, this method returns an array of strings + * @param string|NULL $delimeter * if this is a string, this method returns a delimeted string + * * otherwise, this method returns an array of strings * @param boolean $hide_obsolete If true, supplierpartnrs from obsolete orderdetails will NOT be returned * * @return array all supplierpartnrs as an array of strings (if "$delimeter == NULL") @@ -582,13 +586,13 @@ class Part extends AttachmentContainingDBElement * This method simply gets the prices of the orderdetails and prepare them.\n * In the returned array/string there is a price for every supplier. * - * @param boolean $float_array @li if true, the returned array is an array of floats - * @li if false, the returned array is an array of strings + * @param boolean $float_array * if true, the returned array is an array of floats + * * if false, the returned array is an array of strings * @param string|NULL $delimeter if this is a string, this method returns a delimeted string * instead of an array. * @param integer $quantity this is the quantity to choose the correct priceinformation - * @param integer|NULL $multiplier @li This is the multiplier which will be applied to every single price - * @li If you pass NULL, the number from $quantity will be used + * @param integer|NULL $multiplier * This is the multiplier which will be applied to every single price + * * If you pass NULL, the number from $quantity will be used * @param boolean $hide_obsolete If true, prices from obsolete orderdetails will NOT be returned * * @return array all prices as an array of floats (if "$delimeter == NULL" & "$float_array == true") @@ -622,12 +626,12 @@ class Part extends AttachmentContainingDBElement * With the $multiplier you're able to multiply the price before it will be returned. * This is useful if you want to have the price as a string with currency, but multiplied with a factor. * - * @param boolean $as_money_string @li if true, the retruned value will be a string incl. currency, + * @param boolean $as_money_string * if true, the retruned value will be a string incl. currency, * ready to print it out. See float_to_money_string(). - * @li if false, the returned value is a float + * * if false, the returned value is a float * @param integer $quantity this is the quantity to choose the correct priceinformations - * @param integer|NULL $multiplier @li This is the multiplier which will be applied to every single price - * @li If you pass NULL, the number from $quantity will be used + * @param integer|NULL $multiplier * This is the multiplier which will be applied to every single price + * * If you pass NULL, the number from $quantity will be used * * @return float price (if "$as_money_string == false") * @return NULL if there are no prices for this part and "$as_money_string == false" @@ -662,9 +666,9 @@ class Part extends AttachmentContainingDBElement /** * Get the filename of the master picture (absolute path from filesystem root) * - * @param boolean $use_footprint_filename @li if true, and this part has no picture, this method + * @param boolean $use_footprint_filename * if true, and this part has no picture, this method * will return the filename of its footprint (if available) - * @li if false, and this part has no picture, + * * if false, and this part has no picture, * this method will return NULL * * @return string the whole path + filename from filesystem root as a UNIX path (with slashes) @@ -780,7 +784,7 @@ class Part extends AttachmentContainingDBElement * * @return self */ - public function setDescription(string $new_description) : self + public function setDescription(?string $new_description) : self { $this->description = $new_description; return $this; @@ -795,7 +799,7 @@ class Part extends AttachmentContainingDBElement */ public function setInstock(int $new_instock, $comment = null) : self { - Assert::natural($new_instock, 'New instock must be positive. Got: %s'); + //Assert::natural($new_instock, 'New instock must be positive. Got: %s'); $old_instock = (int) $this->getInstock(); $this->instock = $new_instock; @@ -844,8 +848,8 @@ class Part extends AttachmentContainingDBElement */ public function withdrawalParts(int $count, $comment = null) : self { - Assert::greaterThan($count,0, 'Count of withdrawn parts must be greater 0! Got %s!'); - Assert::greaterThan($count, $this->instock, 'You can not withdraw more parts, than there are existing!'); + //Assert::greaterThan($count,0, 'Count of withdrawn parts must be greater 0! Got %s!'); + //Assert::greaterThan($count, $this->instock, 'You can not withdraw more parts, than there are existing!'); $old_instock = $this->getInstock(); $new_instock = $old_instock - $count; @@ -876,7 +880,7 @@ class Part extends AttachmentContainingDBElement */ public function addParts(int $count, string $comment = null) : self { - Assert::greaterThan($count, 0, 'Count of added parts must be greater zero! Got %s.'); + //Assert::greaterThan($count, 0, 'Count of added parts must be greater zero! Got %s.'); //TODO @@ -908,7 +912,7 @@ class Part extends AttachmentContainingDBElement */ public function setMinInstock(int $new_mininstock) : self { - Assert::natural($new_mininstock, 'The new minimum instock value must be positive! Got %s.'); + //Assert::natural($new_mininstock, 'The new minimum instock value must be positive! Got %s.'); $this->mininstock = $new_mininstock; return $this; @@ -933,9 +937,9 @@ class Part extends AttachmentContainingDBElement * * @param boolean $new_manual_order the new "manual_order" attribute * @param integer $new_order_quantity the new order quantity - * @param integer|NULL $new_order_orderdetails_id @li the ID of the new order orderdetails - * @li or Zero for "no order orderdetails" - * @li or NULL for automatic order orderdetails + * @param integer|NULL $new_order_orderdetails_id * the ID of the new order orderdetails + * * or Zero for "no order orderdetails" + * * or NULL for automatic order orderdetails * (if the part has exactly one orderdetails, * set this orderdetails as order orderdetails. * Otherwise, set "no order orderdetails") @@ -944,7 +948,7 @@ class Part extends AttachmentContainingDBElement */ public function setManualOrder(bool $new_manual_order, int $new_order_quantity = 1, $new_order_orderdetails_id = null) : self { - Assert::greaterThan($new_order_quantity, 0, 'The new order quantity must be greater zero. Got %s!'); + //Assert::greaterThan($new_order_quantity, 0, 'The new order quantity must be greater zero. Got %s!'); $this->manual_order = $new_manual_order; @@ -959,8 +963,8 @@ class Part extends AttachmentContainingDBElement /** * Set the ID of the order orderdetails * - * @param integer|NULL $new_order_orderdetails_id @li the new order orderdetails ID - * @li Or, to remove the orderdetails, pass a NULL + * @param integer|NULL $new_order_orderdetails_id * the new order orderdetails ID + * * Or, to remove the orderdetails, pass a NULL * * @return self */ @@ -981,7 +985,7 @@ class Part extends AttachmentContainingDBElement */ public function setOrderQuantity(int $new_order_quantity) : self { - Assert::greaterThan($new_order_quantity,0, 'The new order quantity must be greater zero. Got %s!'); + //Assert::greaterThan($new_order_quantity,0, 'The new order quantity must be greater zero. Got %s!'); $this->order_quantity = $new_order_quantity; @@ -996,15 +1000,12 @@ class Part extends AttachmentContainingDBElement * * @param integer $new_category_id the ID of the category * - * @throws Exception if the new category ID is not valid - * @throws Exception if there was an error - * * @return self */ - public function setCategoryID(int $new_category_id) : self + public function setCategory(Category $category) : self { //TODO - throw new \Exception("Not implemented yet!"); + $this->category = $category; return $this; } @@ -1012,8 +1013,8 @@ class Part extends AttachmentContainingDBElement /** * Set the footprint ID * - * @param integer|NULL $new_footprint_id @li the ID of the footprint - * @li NULL means "no footprint" + * @param integer|NULL $new_footprint_id * the ID of the footprint + * * NULL means "no footprint" * * @throws Exception if the new footprint ID is not valid * @throws Exception if there was an error @@ -1029,8 +1030,8 @@ class Part extends AttachmentContainingDBElement /** * Set the storelocation ID * - * @param integer|NULL $new_storelocation_id @li the ID of the storelocation - * @li NULL means "no storelocation" + * @param integer|NULL $new_storelocation_id * the ID of the storelocation + * * NULL means "no storelocation" * * @throws Exception if the new storelocation ID is not valid * @throws Exception if there was an error @@ -1046,8 +1047,8 @@ class Part extends AttachmentContainingDBElement /** * Set the manufacturer ID * - * @param integer|NULL $new_manufacturer_id @li the ID of the manufacturer - * @li NULL means "no manufacturer" + * @param integer|NULL $new_manufacturer_id * the ID of the manufacturer + * * NULL means "no manufacturer" * * @throws Exception if the new manufacturer ID is not valid * @throws Exception if there was an error @@ -1089,8 +1090,8 @@ class Part extends AttachmentContainingDBElement /** * Set the ID of the master picture Attachement * - * @param integer|NULL $new_master_picture_attachement_id @li the ID of the Attachement object of the master picture - * @li NULL means "no master picture" + * @param integer|NULL $new_master_picture_attachement_id * the ID of the Attachement object of the master picture + * * NULL means "no master picture" * * @throws Exception if the new ID is not valid * @throws Exception if there was an error diff --git a/src/Entity/Pricedetail.php b/src/Entity/Pricedetail.php index f4d0083a..4b794f16 100644 --- a/src/Entity/Pricedetail.php +++ b/src/Entity/Pricedetail.php @@ -103,8 +103,8 @@ class Pricedetail extends DBElement /** * Get the price * - * @param boolean $as_money_string @li if true, this method returns a money string incl. currency - * @li if false, this method returns the price as float + * @param boolean $as_money_string * if true, this method returns a money string incl. currency + * * if false, this method returns the price as float * @param integer $multiplier The returned price (float or string) will be multiplied * with this multiplier. * @@ -168,8 +168,8 @@ class Pricedetail extends DBElement * * @param float $new_price the new price as a float number * - * @li This is the price for "price_related_quantity" parts!! - * @li Example: if "price_related_quantity" is '10', + * * This is the price for "price_related_quantity" parts!! + * * Example: if "price_related_quantity" is '10', * you have to set here the price for 10 parts! * * @return self diff --git a/src/Entity/Storelocation.php b/src/Entity/Storelocation.php index 1f6928d6..e845fadd 100644 --- a/src/Entity/Storelocation.php +++ b/src/Entity/Storelocation.php @@ -78,8 +78,8 @@ class Storelocation extends PartsContainingDBElement * "is_full == true" means that there is no more space in this storelocation. * This attribute is only for information, it has no effect. * - * @return boolean @li true if the storelocation is full - * @li false if the storelocation isn't full + * @return boolean * true if the storelocation is full + * * false if the storelocation isn't full */ public function getIsFull() : bool { @@ -98,8 +98,8 @@ class Storelocation extends PartsContainingDBElement * "is_full" = true means that there is no more space in this storelocation. * This attribute is only for information, it has no effect. * - * @param boolean $new_is_full @li true means that the storelocation is full - * @li false means that the storelocation isn't full + * @param boolean $new_is_full * true means that the storelocation is full + * * false means that the storelocation isn't full * * @throws Exception if there was an error */ diff --git a/src/Entity/StructuralDBElement.php b/src/Entity/StructuralDBElement.php index f3753a77..8e5be02a 100644 --- a/src/Entity/StructuralDBElement.php +++ b/src/Entity/StructuralDBElement.php @@ -122,9 +122,9 @@ abstract class StructuralDBElement extends AttachmentContainingDBElement /** * @brief Get the parent-ID * - * @retval integer @li the ID of the parent element - * @li NULL means, the parent is the root node - * @li the parent ID of the root node is -1 + * @retval integer * the ID of the parent element + * * NULL means, the parent is the root node + * * the parent ID of the root node is -1 */ public function getParentID() : int { @@ -235,8 +235,8 @@ abstract class StructuralDBElement extends AttachmentContainingDBElement /** * Change the parent ID of this element * - * @param integer|null $new_parent_id @li the ID of the new parent element - * @li NULL if the parent should be the root node + * @param integer|null $new_parent_id * the ID of the new parent element + * * NULL if the parent should be the root node */ public function setParentID($new_parent_id) : self { diff --git a/src/Form/PartType.php b/src/Form/PartType.php new file mode 100644 index 00000000..df40a368 --- /dev/null +++ b/src/Form/PartType.php @@ -0,0 +1,55 @@ +add('name', TextType::class) + ->add('description', TextType::class, ['required'=>false]) + ->add('instock', IntegerType::class) + ->add('mininstock', IntegerType::class) + ->add('save', SubmitType::class, ['label' => 'part.edit.save']) + ->add('reset', ResetType::class, ['label' => 'part.edit.reset']); + } +} \ No newline at end of file diff --git a/templates/edit_part_info.html.twig b/templates/edit_part_info.html.twig new file mode 100644 index 00000000..a226a49c --- /dev/null +++ b/templates/edit_part_info.html.twig @@ -0,0 +1,19 @@ +{% extends "main_card.html.twig" %} + +{% block title %} + {% trans with {'%name%': part.name} %}part.edit.title{% endtrans %} +{% endblock %} + +{% block card_title %} + + {% trans with {'%name%': part.name} %}part.edit.card_title{% endtrans %} +
+ {% trans %}id.label{% endtrans %}: {{ part.id }} +
+{% endblock %} + +{% block card_content %} + {{ form_start(form) }} + {{ form_widget(form) }} + {{ form_end(form) }} +{% endblock %} \ No newline at end of file diff --git a/templates/main_card.html.twig b/templates/main_card.html.twig new file mode 100644 index 00000000..47214aa2 --- /dev/null +++ b/templates/main_card.html.twig @@ -0,0 +1,16 @@ +{% extends "base.html.twig" %} + +{% block content %} +
+ {% block card_header %} +
+ {% block card_title %}{% endblock %} +
+ {% endblock %} + {% block card_body %} +
+ {% block card_content %}{% endblock %} +
+ {% endblock %} +
+{% endblock %} \ No newline at end of file