request = $request ?: Curl::getLog();
parent::__construct($message, $code, $previous);
}
public function showError()
{
/** @noinspection PhpUnusedLocalVariableInspection */
$message = $this->getDecodedMessage();
/** @noinspection PhpUnusedLocalVariableInspection */
$url = $this->request['url'] ?: '';
/** @noinspection PhpUnusedLocalVariableInspection */
$sent = $this->request['sent'] ?: [];
/** @noinspection PhpUnusedLocalVariableInspection */
$received = $this->request['received'] ?: [];
include MOLONI_TEMPLATE_DIR . 'Messages/DocumentError.php';
}
public function getError()
{
ob_start();
$this->showError();
return ob_get_clean();
}
/**
* Returns the default error message from construct
* Or tries to translate the error from Moloni API
* @return string
*/
public function getDecodedMessage()
{
$errorMessage = '' . $this->getMessage() . '';
if (isset($this->request['received']) && is_array($this->request['received'])) {
foreach ($this->request['received'] as $line) {
if (isset($line['description'])) {
$errorMessage .= '
' . $this->translateMessage($line['description']);
} elseif (isset($line[0]['description'])) {
$errorMessage .= '
' . $this->translateMessage($line[0]['description']);
}
}
}
return $errorMessage;
}
/**
* @param string $message
* @return string
*/
private function translateMessage($message)
{
switch ($message) {
case 'Field \'exemption_reason\' is required':
$message = __('Um dos artigos não tem uma taxa de IVA associada e como tal, tem que seleccionar uma razão de isenção');
break;
case "Field 'category_id' must be integer, greater than 0" :
$message = __('Verifique por favor se o artigo tem uma categoria associada');
break;
}
return $message;
}
public function getRequest()
{
return $this->request;
}
}