Loading module/Oscar/src/Oscar/Entity/ActivityFreeField.php +37 −0 Original line number Diff line number Diff line <?php namespace Oscar\Entity; use DateTime; Loading Loading @@ -41,6 +42,14 @@ class ActivityFreeField */ private ?string $label = null; /** * Nom technique * * @var string * @ORM\Column(type="text", nullable=false) */ private string $name; /** * Description du champ. * Loading @@ -57,6 +66,14 @@ class ActivityFreeField */ private bool $required = false; /** * Indique si le champ est éditable (affiché dans le formulaire) * * @var bool * @ORM\Column(type="boolean", nullable=false) */ private bool $editable = true; /** * Indique si le champ est obligatoire. * Loading @@ -83,6 +100,16 @@ class ActivityFreeField $this->label = $label; } public function getName(): string { return $this->name; } public function setName(string $name): void { $this->name = $name; } public function getType(): string { return $this->type; Loading @@ -103,6 +130,16 @@ class ActivityFreeField $this->description = $description; } public function isEditable(): bool { return $this->editable; } public function setEditable(bool $editable): void { $this->editable = $editable; } public function isRequired(): bool { return $this->required; Loading module/Oscar/src/Oscar/Entity/Repository/ActivityFreeFieldRepository.php +24 −0 Original line number Diff line number Diff line Loading @@ -6,5 +6,29 @@ use Doctrine\ORM\EntityRepository; class ActivityFreeFieldRepository extends EntityRepository { const PATTERN_NAME = 'ff_%s_%s'; public function getListName() :array { $query = $this->createQueryBuilder('f'); $query->select('f'); $out = []; foreach ($query->getQuery()->getArrayResult() as $row) { $out[sprintf(self::PATTERN_NAME, $row['id'], $row['name'])] = $row['label']; } return $out; } public function getListNameEditable() { $query = $this->createQueryBuilder('f'); $query->select('f')->where('f.editable = true'); $out = []; foreach ($query->getQuery()->getArrayResult() as $row) { $out[sprintf(self::PATTERN_NAME, $row['id'], $row['name'])] = $row['label']; } return $out; } } module/Oscar/src/Oscar/Service/ActivityFreeFieldService.php +4 −0 Original line number Diff line number Diff line Loading @@ -37,8 +37,10 @@ class ActivityFreeFieldService implements UseLoggerService, UseEntityManager // TODO Vérification des données $freeField = new ActivityFreeField(); $freeField->setLabel($getPost['label']); $freeField->setName($getPost['name']); $freeField->setDescription($getPost['description']); $freeField->setRequired($getPost['required'] == 'true'); $freeField->setEditable($getPost['editable'] == 'true'); $freeField->setType($getPost['type']); $this->getEntityManager()->persist($freeField); try { Loading Loading @@ -77,8 +79,10 @@ class ActivityFreeFieldService implements UseLoggerService, UseEntityManager // TODO Vérification des données $freeField = $this->getActivityFreeFieldById($datas['id']); $freeField->setLabel($datas['label']); $freeField->setName($datas['name']); $freeField->setDescription($datas['description']); $freeField->setRequired($datas['required'] == 'true'); $freeField->setEditable($datas['editable'] == 'true'); $freeField->setType($datas['type']); try { Loading ui/src/views/administration/ActivityFreeField.vue +28 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,9 @@ export default { id: null, type: 'date', label: '', name: '', required: false, editable: true, description: '', options: [] } Loading @@ -31,7 +33,9 @@ export default { data.append('id', this.edited.id); data.append('type', this.edited.type); data.append('label', this.edited.label); data.append('name', this.edited.name); data.append('required', this.edited.required); data.append('editable', this.edited.editable); data.append('description', this.edited.description); data.append('options', JSON.stringify(this.edited.options)); Loading @@ -43,7 +47,6 @@ export default { } transaction.then(() => { console.log("DONE"); this.edited = null; this.fetch(); }); Loading @@ -52,7 +55,6 @@ export default { handlerDelete(field){ axiosOscar.delete(this.url + "?id=" + field.id).then( ok => { console.log(ok); this.fetch(); } ) Loading Loading @@ -83,7 +85,17 @@ export default { <label for="intitule" class="form-label"> Intitulé </label> <input type="text" class="form-control" v-model="edited.label" id="intitule" /> <input type="text" class="form-control" v-model="edited.label" id="intitule" placeholder="Nom affiché"/> </section> <section> <label for="name" class="form-label"> Intitulé </label> <div class="input-group"> <span class="input-group-addon">freefield_</span> <input type="text" class="form-control" v-model="edited.name" id="name" placeholder="Nom technique"/> </div> </section> <section> Loading @@ -106,6 +118,14 @@ export default { <input type="checkbox" class="form-checker" v-model="edited.required" id="contrainte" /> </section> <section> <label for="editable"> éditable </label> <input type="checkbox" class="form-checker" v-model="edited.editable" id="editable" /> <p>Note : Un champ editable sera disponible dans la formulaire d'édition/création. Les champs non-éditables sont généralement alimentés par une source tiers / une procédure spécifique</p> </section> <section> <label for="description"> Description Loading Loading @@ -134,10 +154,15 @@ export default { <h3 class="card-title"> <code>[{{ field.type }}]</code> {{ field.label }} <em>({{ field.name }})</em> <span class="cartouche primary" v-if="field.required"> <span class="icon-pin"></span> requis </span> <span class="cartouche secondary" v-if="field.editable"> <span class="icon-pencil"></span> éditable </span> <div class="onright btn-group"> <div class="btn btn-sm btn-danger" @click="handlerDelete(field)">Supprimer</div> <div class="btn btn-sm btn-primary" @click="handlerEditStart(field)">Modifier</div> Loading Loading
module/Oscar/src/Oscar/Entity/ActivityFreeField.php +37 −0 Original line number Diff line number Diff line <?php namespace Oscar\Entity; use DateTime; Loading Loading @@ -41,6 +42,14 @@ class ActivityFreeField */ private ?string $label = null; /** * Nom technique * * @var string * @ORM\Column(type="text", nullable=false) */ private string $name; /** * Description du champ. * Loading @@ -57,6 +66,14 @@ class ActivityFreeField */ private bool $required = false; /** * Indique si le champ est éditable (affiché dans le formulaire) * * @var bool * @ORM\Column(type="boolean", nullable=false) */ private bool $editable = true; /** * Indique si le champ est obligatoire. * Loading @@ -83,6 +100,16 @@ class ActivityFreeField $this->label = $label; } public function getName(): string { return $this->name; } public function setName(string $name): void { $this->name = $name; } public function getType(): string { return $this->type; Loading @@ -103,6 +130,16 @@ class ActivityFreeField $this->description = $description; } public function isEditable(): bool { return $this->editable; } public function setEditable(bool $editable): void { $this->editable = $editable; } public function isRequired(): bool { return $this->required; Loading
module/Oscar/src/Oscar/Entity/Repository/ActivityFreeFieldRepository.php +24 −0 Original line number Diff line number Diff line Loading @@ -6,5 +6,29 @@ use Doctrine\ORM\EntityRepository; class ActivityFreeFieldRepository extends EntityRepository { const PATTERN_NAME = 'ff_%s_%s'; public function getListName() :array { $query = $this->createQueryBuilder('f'); $query->select('f'); $out = []; foreach ($query->getQuery()->getArrayResult() as $row) { $out[sprintf(self::PATTERN_NAME, $row['id'], $row['name'])] = $row['label']; } return $out; } public function getListNameEditable() { $query = $this->createQueryBuilder('f'); $query->select('f')->where('f.editable = true'); $out = []; foreach ($query->getQuery()->getArrayResult() as $row) { $out[sprintf(self::PATTERN_NAME, $row['id'], $row['name'])] = $row['label']; } return $out; } }
module/Oscar/src/Oscar/Service/ActivityFreeFieldService.php +4 −0 Original line number Diff line number Diff line Loading @@ -37,8 +37,10 @@ class ActivityFreeFieldService implements UseLoggerService, UseEntityManager // TODO Vérification des données $freeField = new ActivityFreeField(); $freeField->setLabel($getPost['label']); $freeField->setName($getPost['name']); $freeField->setDescription($getPost['description']); $freeField->setRequired($getPost['required'] == 'true'); $freeField->setEditable($getPost['editable'] == 'true'); $freeField->setType($getPost['type']); $this->getEntityManager()->persist($freeField); try { Loading Loading @@ -77,8 +79,10 @@ class ActivityFreeFieldService implements UseLoggerService, UseEntityManager // TODO Vérification des données $freeField = $this->getActivityFreeFieldById($datas['id']); $freeField->setLabel($datas['label']); $freeField->setName($datas['name']); $freeField->setDescription($datas['description']); $freeField->setRequired($datas['required'] == 'true'); $freeField->setEditable($datas['editable'] == 'true'); $freeField->setType($datas['type']); try { Loading
ui/src/views/administration/ActivityFreeField.vue +28 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,9 @@ export default { id: null, type: 'date', label: '', name: '', required: false, editable: true, description: '', options: [] } Loading @@ -31,7 +33,9 @@ export default { data.append('id', this.edited.id); data.append('type', this.edited.type); data.append('label', this.edited.label); data.append('name', this.edited.name); data.append('required', this.edited.required); data.append('editable', this.edited.editable); data.append('description', this.edited.description); data.append('options', JSON.stringify(this.edited.options)); Loading @@ -43,7 +47,6 @@ export default { } transaction.then(() => { console.log("DONE"); this.edited = null; this.fetch(); }); Loading @@ -52,7 +55,6 @@ export default { handlerDelete(field){ axiosOscar.delete(this.url + "?id=" + field.id).then( ok => { console.log(ok); this.fetch(); } ) Loading Loading @@ -83,7 +85,17 @@ export default { <label for="intitule" class="form-label"> Intitulé </label> <input type="text" class="form-control" v-model="edited.label" id="intitule" /> <input type="text" class="form-control" v-model="edited.label" id="intitule" placeholder="Nom affiché"/> </section> <section> <label for="name" class="form-label"> Intitulé </label> <div class="input-group"> <span class="input-group-addon">freefield_</span> <input type="text" class="form-control" v-model="edited.name" id="name" placeholder="Nom technique"/> </div> </section> <section> Loading @@ -106,6 +118,14 @@ export default { <input type="checkbox" class="form-checker" v-model="edited.required" id="contrainte" /> </section> <section> <label for="editable"> éditable </label> <input type="checkbox" class="form-checker" v-model="edited.editable" id="editable" /> <p>Note : Un champ editable sera disponible dans la formulaire d'édition/création. Les champs non-éditables sont généralement alimentés par une source tiers / une procédure spécifique</p> </section> <section> <label for="description"> Description Loading Loading @@ -134,10 +154,15 @@ export default { <h3 class="card-title"> <code>[{{ field.type }}]</code> {{ field.label }} <em>({{ field.name }})</em> <span class="cartouche primary" v-if="field.required"> <span class="icon-pin"></span> requis </span> <span class="cartouche secondary" v-if="field.editable"> <span class="icon-pencil"></span> éditable </span> <div class="onright btn-group"> <div class="btn btn-sm btn-danger" @click="handlerDelete(field)">Supprimer</div> <div class="btn btn-sm btn-primary" @click="handlerEditStart(field)">Modifier</div> Loading