Skip to content

Commit 32f9146

Browse files
committed
Evarisk#1680 [Control] add: mass control management
1 parent f97ba39 commit 32f9146

File tree

9 files changed

+203
-33
lines changed

9 files changed

+203
-33
lines changed

class/control.class.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ public function __construct(DoliDB $db)
287287
public function create(User $user, bool $notrigger = false): int
288288
{
289289
$this->track_id = generate_random_id();
290+
$this->status = $this->mass_control ? self::STATUS_VALIDATED : self::STATUS_DRAFT;
290291
$result = parent::create($user, $notrigger);
291292

292293
if ($result > 0) {

core/tpl/digiquali_mass_control_list.tpl.php

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
$langs->trans('Nom'),
2424
$langs->trans('Verdict'),
2525
$langs->trans('NoteControl'),
26+
$langs->trans('Answers'),
2627
$langs->trans('QRCode'),
2728
$langs->trans('Document'),
2829
$langs->trans('Action'),
@@ -31,26 +32,66 @@
3132
// Create header row using divs
3233
print '<div class="table-row header-row">';
3334
foreach ($tableHeaders as $header) {
34-
print '<div class="table-cell header-cell">' . $header . '</div>';
35+
print '<div class="table-cell header-cell center">' . $header . '</div>';
3536
}
3637
print '</div>';
3738

3839
// Check if there are any mass controls and print them
3940
if (is_array($massControlList) && !empty($massControlList)) {
4041
foreach ($massControlList as $massControl) {
41-
print '<div class="table-row">';
42-
print '<div class="table-cell">' . $massControl->getNomUrl(1) . '</div>';
43-
print '<div class="table-cell">' . $massControl->getVerdict() . '</div>';
42+
// Fetch the public note if it exists
43+
44+
print '<div class="table-row sub-control-'. $massControl->id .'">';
45+
print '<div class="table-cell center">' . $massControl->getNomUrl(1) . '</div>';
46+
47+
// Verdict section with interactive OK/KO buttons
48+
print '<div class="table-cell center">';
49+
print '<div class="verdict-container">';
50+
print '<label class="verdict-option">';
51+
print '<input type="radio" name="verdict' . $massControl->id . '" value="1" ' . ($massControl->verdict == '1' ? 'checked' : '') . '>';
52+
print '<span class="verdict-box verdict-ok">OK</span>';
53+
print '</label>';
54+
print '<label class="verdict-option">';
55+
print '<input type="radio" name="verdict' . $massControl->id . '" value="0" ' . ($massControl->verdict == '0' ? 'checked' : '') . '>';
56+
print '<span class="verdict-box verdict-ko">KO</span>';
57+
print '</label>';
58+
print '</div>';
59+
print '</div>';
60+
61+
// Note Control section displaying the public note
62+
print '<div class="table-cell center"><textarea type="text" class="note-public">' . $massControl->note_public . '</textarea></div>';
63+
64+
print '<div class="table-cell center">';
65+
print '<button class="butAction answerSubControl" data-control-id="'. $massControl->id .'">Répondre</button>';
66+
print '</div>';
67+
68+
// Additional cells for QRCode, Document, and Action can be filled in as needed
69+
print '<div class="table-cell center">'. saturne_show_medias_linked('digiquali', $conf->digiquali->multidir_output[$conf->entity] . '/control/' . $massControl->ref . '/qrcode/', 'small', 1, 0, 0, 0, 80, 80, 0, 0, 0, 'control/' . $massControl->ref . '/qrcode/', $massControl, '', 0, 0) . '</div>';
70+
print '<div class="table-cell center">';
71+
print '</div>';
72+
print '<div class="table-cell center">';
73+
$displayButton = $onPhone ? '<i class="fas fa-check fa-2x"></i>' : '<i class="fas fa-check"></i>' . ' ' . $langs->trans('Save');
74+
print '<span class="saveSubControl butAction" id="actionButtonSaveSubControl" data-control-id="'. $massControl->id .'" data-mass-control-id="'. $object->id .'">' . $displayButton . '</span>';
4475
print '</div>';
76+
print '</div>';
77+
78+
print '<div class="wpeo-modal" id="modalSubControl'. $massControl->id .'">';
79+
print '<div class="modal-container">';
80+
print '<div class="modal-content">';
81+
print load_fiche_titre($langs->trans('LinkedQuestionsList'), '', '');
82+
print '<div id="tablelines" class="question-answer-container noborder noshadow">';
83+
require __DIR__ . '/../../core/tpl/digiquali_answers.tpl.php';
84+
print '</div>';
85+
print '</div>';
86+
print '</div>';
87+
4588
}
4689
} else {
4790
// If no mass controls are found, display a message
4891
print '<div class="table-row">';
49-
print '<div class="table-cell" colspan="5">' . $langs->trans('NoMassControlFound') . '</div>';
92+
print '<div class="table-cell" colspan="6">' . $langs->trans('NoMassControlFound') . '</div>';
5093
print '</div>';
5194
}
52-
5395
print '</div>'; // End of table
5496
print '</div>'; // End of responsive container
55-
5697
?>

core/triggers/interface_99_modDigiQuali_DigiQualiTriggers.class.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
131131
case 'CONTROL_CREATE' :
132132
// Load Digiquali libraries
133133
require_once __DIR__ . '/../../class/sheet.class.php';
134+
require_once __DIR__ . '/../../class/control.class.php';
134135

135136
$sheet = new Sheet($this->db);
136137

@@ -141,14 +142,30 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
141142
}
142143

143144
$elementArray = [];
145+
144146
if ($object->context != 'createfromclone') {
145-
$elementArray = get_sheet_linkable_objects();
147+
$elementArray = get_sheet_linkable_objects();
148+
146149
if (!empty($elementArray)) {
147150
foreach ($elementArray as $linkableElementType => $linkableElement) {
148151
$post = GETPOST('multi_' . $linkableElement['post_name'], 'array');
149152
if (!empty($post) && $post > 0) {
150153
foreach($post as $postElement) {
151-
$object->add_object_linked($linkableElement['link_name'], $postElement);
154+
if ($object->mass_control) {
155+
$control = new Control($this->db);
156+
157+
$control->status = $control::STATUS_DRAFT;
158+
$control->label = $object->label;
159+
$control->fk_sheet = $object->fk_sheet;
160+
$control->fk_user_controller = $object->fk_user_controller;
161+
$control->fk_control = $object->id;
162+
$control->create($user);
163+
164+
$control->add_object_linked($linkableElement['link_name'], $postElement);
165+
166+
} else {
167+
$object->add_object_linked($linkableElement['link_name'], $postElement);
168+
}
152169
}
153170
}
154171
}
@@ -161,6 +178,8 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
161178
$signatory->setSignatory($object->id, $object->element, 'user', [$object->fk_user_controller], 'Controller', 1);
162179
}
163180

181+
182+
164183
$actioncomm->code = 'AC_' . strtoupper($object->element) . '_CREATE';
165184
$actioncomm->label = $langs->transnoentities('ObjectCreateTrigger', $langs->transnoentities(ucfirst($object->element)), $object->ref);
166185
$actioncomm->create($user);

css/digiquali.min.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

css/scss/page/_control.scss

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,3 +178,35 @@
178178
.confirmquestions input[readonly]:hover {
179179
cursor: default;
180180
}
181+
182+
.verdict-container {
183+
display: flex;
184+
gap: 10px;
185+
justify-content: center;
186+
}
187+
.verdict-option input[type="radio"] {
188+
display: none;
189+
}
190+
.verdict-box {
191+
width: 60px;
192+
height: 60px;
193+
display: flex;
194+
align-items: center;
195+
justify-content: center;
196+
border: 2px solid transparent;
197+
border-radius: 5px;
198+
font-weight: bold;
199+
cursor: pointer;
200+
transition: background-color 0.3s, border-color 0.3s;
201+
}
202+
.verdict-ok {
203+
background-color: #e0f7e9;
204+
color: #27ae60;
205+
}
206+
.verdict-ko {
207+
background-color: #fdecea;
208+
color: #c0392b;
209+
}
210+
.verdict-option input[type="radio"]:checked + .verdict-box {
211+
border-color: #000;
212+
}

0 commit comments

Comments
 (0)