Bonjour le Forum,

Je travaille sur une application de gestion de stock, et je souhaite mettre en place l'inventaire.

J'ai 2 entités (liens des entités sur mon projet GitHub) :

- l'entité Inventory, qui donne l'id, la date et le montant total de l'inventaire
- l'entité Article, qui donne l'id, le fournisseur, le stock théorique, ...

J'ai commencé par travailler avec l'ajout d'une collection Articles dans l'entité Inventory, mais cela m'oblige à avoir l'attribut RealStock en plus dans l'entité Article.

Cette modification pourra me servir dans d'autres parties de mon Bundle, notamment les commandes.

J'aimerai externaliser cet attribut dans une entité InventoryArticles :

Code Entity/InventoryArticles.php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
use Doctrine\ORM\Mapping as ORM;
 
/**
 * Détail des articles de l'inventaire.
 *
 * @category   Entity
 *
 * @ORM\Table(name="gs_inventory_articles")
 * @ORM\Entity(repositoryClass="Glsr\GestockBundle\Entity\InventoryArticlesRepository")
 */
class InventoryArticles
{
    /**
     * @var int Id ligne de détail de l'inventaire
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
 
    /**
     * @var float Stock réel
     *
     * @ORM\Column(name="realstock", type="decimal", scale=3, nullable=true)
     */
    private $realstock;
 
    /**
     * @ORM\ManyToOne(targetEntity="Glsr\GestockBundle\Entity\Inventory")
     * @ORM\JoinColumn(nullable=false)
     */
    private $inventory;
 
    /**
     * @ORM\ManyToOne(targetEntity="Glsr\GestockBundle\Entity\Article")
     * @ORM\JoinColumn(nullable=false)
     */
    private $articles;
 
    /**
     * @var float Total article
     *
     * @ORM\Column(name="total", type="decimal", scale=3, nullable=true)
     */
    private $total;
 
    // Getters-Setters...
}

Le soucis commence lors de la construction du formulaire. Quand dans le Controller, je débute avec ça :

Code Controller/InventoryController.php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
    /**
     * Saisie de l'inventaire.
     *
     * @param Inventory $inventory Inventaire sélectionné
     *
     * @return Response
     */
    public function updateAction(Inventory $inventory)
    {
        $etm = $this->getDoctrine()->getManager();
        $listInventArticles = $etm
            ->getRepository('GlsrGestockBundle:InventoryArticles')
            ->findByInventory($inventory);
        // Créer le formulaire de saisie : InventoryType
        $form = $this->createForm(new InventoryArticlesType(), $listInventArticles);
 
       ...
    }

$listInventArticles retourne un tableau d'objets InventoryArticles, et je ne vois pas comment l'utiliser dans la vue.

Et encore moins comment le persister proprement...

Merci de vos réponses.

Pour info, mon FormType InventoryArticlesType :

Code Form/InventoryArticlesType.php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
class InventoryArticlesType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('id', 'hidden')
            ->add('inventory')
            ->add('articles')
            ->add(
                'realstock',
                'number',
                array(
                    'grouping' => true,
                    'precision' => 3,
                    'data' => 0,
                )
            )
            ->add(
                'total',
                'number',
                array(
                    'grouping' => true,
                    'precision' => 3,
                    'data' => 0,
                    'read_only' => true,
                )
            );
    }
 
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array('data_class' => null));
    }
 
    /**
     * @return string
     */
    public function getName()
    {
        return 'glsr_gestockbundle_inventoryarticles';
    }
}