Skip to content

Commit f233eb7

Browse files
author
Daniel Fernández Giménez
committed
2577 - Al vincular un documento con el proyecto poder buscar su numero2 o numproveedor
1 parent cbc66a4 commit f233eb7

File tree

1 file changed

+63
-1
lines changed

1 file changed

+63
-1
lines changed

Controller/EditProyecto.php

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,62 @@ protected function addCommonViewFilters(string $viewName, string $modelName): vo
151151
->addFilterCheckbox('numdocs', 'has-attachments', 'numdocs', '!=', 0);
152152
}
153153

154+
protected function autocompleteAction(): array
155+
{
156+
// recogemos los datos
157+
$data = $this->requestGet(['field', 'fieldcode', 'fieldfilter', 'fieldtitle', 'formname', 'source', 'strict', 'term']);
158+
159+
// si no es una vinculación de documentos de compra o venta, ejecutamos el parent
160+
if ($data['field'] !== 'linkupcode') {
161+
return parent::autocompleteAction();
162+
}
163+
164+
if ($data['source'] == '') {
165+
return $this->getAutocompleteValues($data['formname'], $data['field']);
166+
}
167+
168+
$where = [];
169+
foreach (DataBaseWhere::applyOperation($data['fieldfilter'] ?? '') as $field => $operation) {
170+
// validar nombre de campo para prevenir SQL injection
171+
if (1 !== preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?$/', $field)) {
172+
Tools::log()->warning('autocomplete: invalid field filter name');
173+
return [];
174+
}
175+
$value = $this->request->queryOrInput($field);
176+
$where[] = new DataBaseWhere($field, $value, '=', $operation);
177+
}
178+
179+
$results = [];
180+
foreach ($this->codeModel->search($data['source'], $data['fieldcode'], $data['fieldtitle'], $data['term'], $where) as $value) {
181+
$results[] = ['key' => Tools::fixHtml($value->code), 'value' => Tools::fixHtml($value->description)];
182+
}
183+
184+
// buscamos también por numproveedor o numero2 según el tipo de documento
185+
$additionalField = str_ends_with($data['source'], 'prov') ? 'numproveedor' : 'numero2';
186+
foreach ($this->codeModel->search($data['source'], $data['fieldcode'], $additionalField, $data['term'], $where) as $value) {
187+
$key = Tools::fixHtml($value->code);
188+
// evitamos duplicados
189+
$found = false;
190+
foreach ($results as $result) {
191+
if ($result['key'] === $key) {
192+
$found = true;
193+
break;
194+
}
195+
}
196+
if (false === $found) {
197+
$results[] = ['key' => $key, 'value' => Tools::fixHtml($value->description)];
198+
}
199+
}
200+
201+
if (empty($results) && '0' == $data['strict']) {
202+
$results[] = ['key' => $data['term'], 'value' => $data['term']];
203+
} elseif (empty($results)) {
204+
$results[] = ['key' => null, 'value' => Tools::trans('no-data')];
205+
}
206+
207+
return $results;
208+
}
209+
154210
protected function createViews()
155211
{
156212
parent::createViews();
@@ -474,7 +530,7 @@ protected function createViewsUsers(string $viewName = 'EditUserProyecto'): void
474530
/**
475531
* @param EditView $view
476532
*/
477-
protected function disableProjectColumns(&$view)
533+
protected function disableProjectColumns(&$view): void
478534
{
479535
foreach ($view->getColumns() as $group) {
480536
foreach ($group->columns as $col) {
@@ -493,6 +549,12 @@ protected function disableProjectColumns(&$view)
493549
protected function execPreviousAction($action)
494550
{
495551
switch ($action) {
552+
case 'autocomplete':
553+
$this->setTemplate(false);
554+
$results = $this->autocompleteAction();
555+
$this->response->json($results);
556+
return false;
557+
496558
case 'import-task':
497559
return $this->importTaskAction();
498560

0 commit comments

Comments
 (0)