public static function saveCategoria()
 {
     $CategoriaTO = new CategoriaTO();
     $CategoriaDao = new CategoriaDao();
     $CategoriaTO->descricao_categoria = isset($_POST['descricao_categoria']) ? $_POST['descricao_categoria'] : '';
     $CategoriaTO->id_empreendimento = isset($_POST['id_empreendimento']) ? $_POST['id_empreendimento'] : '';
     $CategoriaTO->id_pai = isset($_POST['id_pai']) ? $_POST['id_pai'] : NULL;
     $validator = new DataValidator();
     $validator->set_msg('O nome do Categoria é obrigatório')->set('descricao_categoria', $CategoriaTO->descricao_categoria)->is_required();
     $validator->set_msg('O id do Empreendimento é obrigatório')->set('id_empreendimento', $CategoriaTO->id_empreendimento)->is_required();
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     try {
         $last_id = $CategoriaDao->saveCategoria($CategoriaTO);
         $empreendimentosAssociados = $_POST['empreendimentos'];
         if ($last_id) {
             foreach ($empreendimentosAssociados as $key => $empreendimento) {
                 if (!$CategoriaDao->associarEmpreendimento($last_id, $empreendimento['id'])) {
                     Flight::halt(500, 'Erro ao cadastrar o categoria');
                 }
             }
             Flight::response()->status(201)->header('Content-Type', 'application/json')->write(json_encode(array('categoria' => array('id' => $last_id))))->send();
         } else {
             Flight::halt(500, 'Erro ao cadastrar a categoria');
         }
     } catch (Exception $e) {
         Flight::halt(500, $e->getMessage());
     }
 }
 public static function requestSaveCategoria()
 {
     try {
         $categoria = $_POST['categoria'];
         $id_empreendimento = $_POST['id_empreendimento'];
         $CategoriaTO = new CategoriaTO();
         $CategoriaDao = new CategoriaDao();
         $ReferenciaIntegracaoDao = new ReferenciaIntegracaoDao();
         if ($categoria['id_parent'] > 2) {
             $ReferenciaIntegracaoParentTO = new ReferenciaIntegracaoTO();
             $ReferenciaIntegracaoParentTO->sistema_integrado = 'PrestaShop';
             $ReferenciaIntegracaoParentTO->tabela = 'tbl_categorias';
             $ReferenciaIntegracaoParentTO->id_item_referencia = $categoria['id_parent'];
             $ReferenciaIntegracaoParentTO->tipo = 'categoria';
             $ReferenciaIntegracaoParentTO->id_empreendimento = $id_empreendimento;
             $referenciaParent = $ReferenciaIntegracaoDao->refExists($ReferenciaIntegracaoParentTO, true);
             if (!$referenciaParent) {
                 throw new Exception('Não existe uma referencia para a categoria pai #' . $categoria['id_parent'], 1);
             }
         } else {
             $referenciaParent = array('id_item' => NULL);
         }
         $CategoriaTO->descricao_categoria = $categoria['name'][1];
         $CategoriaTO->id_empreendimento = $id_empreendimento;
         $CategoriaTO->id_pai = !empty($categoria['id_parent']) ? $referenciaParent['id_item'] : 2;
         $last_id = $CategoriaDao->saveCategoria($CategoriaTO);
         if (!$last_id) {
             throw new Exception('Erro ao criar categoria', 1);
         }
         if (!$CategoriaDao->associarEmpreendimento($last_id, $id_empreendimento)) {
             throw new Exception('Erro associar categoria a empreendimento', 1);
         }
         $ReferenciaIntegracaoTO = new ReferenciaIntegracaoTO();
         $ReferenciaIntegracaoDao = new ReferenciaIntegracaoDao();
         $ReferenciaIntegracaoTO->sistema_integrado = 'PrestaShop';
         $ReferenciaIntegracaoTO->tabela = 'tbl_categorias';
         $ReferenciaIntegracaoTO->id_item = $last_id;
         $ReferenciaIntegracaoTO->tipo = 'categoria';
         $ReferenciaIntegracaoTO->id_empreendimento = $id_empreendimento;
         $ReferenciaIntegracaoTO->id_item_referencia = $categoria['id'];
         if (!$ReferenciaIntegracaoDao->save($ReferenciaIntegracaoTO)) {
             throw new Exception('Erro associar categoria a empreendimento', 1);
         }
     } catch (Exception $e) {
         $log = new KLogger("logs/logErrorPrestaShop.txt", KLogger::DEBUG);
         $log->LogError($e->getMessage() . ' - line:' . $e->getLine());
         $log->LogDebug(json_encode($_POST));
         $log->LogJunp();
         Flight::halt(500, $e->getMessage());
     }
 }