Passed
Pull Request — developer (#16244)
by Arkadiusz
14:43
created

RecordCollector   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 10
eloc 30
c 2
b 0
f 0
dl 0
loc 48
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
B doTask() 0 36 9
A getFieldNames() 0 3 1
1
<?php
2
/**
3
 * Record collectors task file.
4
 *
5
 * @package 	WorkflowTask
6
 *
7
 * @copyright YetiForce S.A.
8
 * @license   YetiForce Public License 5.0 (licenses/LicenseEN.txt or yetiforce.com)
9
 * @author    Arkadiusz Sołek <[email protected]>
10
 * @author    Mariusz Krzaczkowski <[email protected]>
11
 */
12
/**
13
 * Record collectors task class.
14
 */
15
require_once 'modules/com_vtiger_workflow/VTWorkflowUtils.php';
16
17
class RecordCollector extends VTTask
18
{
19
	/** @var bool Performs the task immediately after saving. */
20
	public $executeImmediately = true;
21
22
	/** {@inheritdoc} */
23
	public function getFieldNames()
24
	{
25
		return ['recordCollector', 'fieldsMap'];
26
	}
27
28
	/** {@inheritdoc} */
29
	public function doTask($recordModel)
30
	{
31
		if (empty($this->recordCollector)) {
32
			return;
33
		}
34
		$value = [];
35
		$moduleName = $recordModel->getModuleName();
36
		$recordCollector = \App\RecordCollector::getInstance($this->recordCollector, $moduleName);
0 ignored issues
show
Bug Best Practice introduced by
The property recordCollector does not exist on RecordCollector. Did you maybe forget to declare it?
Loading history...
37
		foreach ($recordCollector->getFieldsModule($moduleName) as $key => $searchField) {
38
			if ('' !== $recordModel->get($searchField)) {
39
				$value[$key] = $recordModel->get($searchField);
40
				break;
41
			}
42
		}
43
		if (!empty($value)) {
44
			$value['module'] = $moduleName;
45
			$recordCollector->setRequest(new \App\Request($value, false));
46
			$response = $recordCollector->search();
47
			$key = array_key_first($response['dataCounter']);
48
			if (!empty($this->fieldsMap)) {
49
				foreach ($this->fieldsMap as $fieldMapName) {
50
					$updateFields[$fieldMapName] = $response['fields'][$fieldMapName];
51
				}
52
			} else {
53
				$updateFields = $response['fields'];
54
			}
55
			foreach ($updateFields as $fieldName => $values) {
56
				try {
57
					$recordModel->getField($fieldName)->getUITypeModel()->validate($values['data'][$key]['raw']);
58
					$recordModel->set($fieldName, $values['data'][$key]['raw']);
59
				} catch (\Throwable $th) {
60
					\App\Log::error("[taxNumber => $value]Error during data validation: \n{$th->__toString()}\n", __CLASS__);
61
				}
62
			}
63
			$recordModel->setHandlerExceptions(['disableHandlerClasses' => ['Vtiger_Workflow_Handler']]);
64
			$recordModel->save();
65
		}
66
	}
67
}
68