public function baixaEstoqueClinica($id_empreendimento, $produtos, $id_deposito, $id_cliente, $id_usuario, $id_profissional, $flg_saida_manual = 0)
 {
     $EstoqueSaidaTO = new EstoqueSaidaTO();
     $EstoqueSaidaDao = new EstoqueSaidaDao();
     $EstoqueSaidaTO->id_empreendimento = $id_empreendimento;
     $EstoqueSaidaTO->id_cliente = $id_cliente;
     $EstoqueSaidaTO->id_usuario = $id_usuario;
     $EstoqueSaidaTO->id_profissional = $id_profissional;
     $EstoqueSaidaTO->flg_saida_manual = $flg_saida_manual;
     $id_estoque_saida = $EstoqueSaidaDao->saveEstoqueSaida($EstoqueSaidaTO);
     foreach ($produtos as $key => $produto) {
         $estoque = parse_arr_values($this->getEstoque(null, null, array("orderby" => " etq.qtd_item DESC,dta_validade ASC ", "etq.id_deposito" => $id_deposito, "prd.id" => $produto['id'], "etq.qtd_item" => array('exp' => '>0'))), 'all');
         $estoque = $estoque['produtos'];
         $estoque_saida = array();
         $qtd_saida_restante = $produto['qtd_saida'];
         foreach ($estoque as $key => $value) {
             $qtd_item = $value['qtd_item'];
             if ($qtd_item >= $qtd_saida_restante) {
                 $estoque_saida[] = array('id' => $value['id'], 'qtd_item' => $qtd_item - $qtd_saida_restante, 'dta_validade' => $value['dta_validade'], 'qtd_saida' => $qtd_saida_restante, 'id_deposito' => $value['id_deposito'], 'id_produto' => $value['id_produto']);
                 break;
             } else {
                 $qtd_saida_restante = abs($qtd_item - $qtd_saida_restante);
                 $estoque_saida[] = array('id' => $value['id'], 'qtd_item' => $qtd_item - $qtd_saida_restante, 'dta_validade' => $value['dta_validade'], 'qtd_saida' => $qtd_item, 'id_deposito' => $value['id_deposito'], 'id_produto' => $value['id_produto']);
             }
         }
         $sql = "";
         $ItemEstoqueSaidaTO = new ItemEstoqueSaidaTO();
         $ItemEstoqueSaidaDao = new ItemEstoqueSaidaDao();
         foreach ($estoque_saida as $key => $value) {
             $ItemEstoqueSaidaTO->id_estoque_saida = $id_estoque_saida;
             $ItemEstoqueSaidaTO->id_deposito = $value['id_deposito'];
             $ItemEstoqueSaidaTO->id_produto = $value['id_produto'];
             $ItemEstoqueSaidaTO->dta_validade = $value['dta_validade'];
             $ItemEstoqueSaidaTO->qtd_item = $value['qtd_saida'];
             $id_item_estoque_saida = $ItemEstoqueSaidaDao->saveItemEstoqueSaida($ItemEstoqueSaidaTO);
             if (!$id_item_estoque_saida) {
                 return false;
             }
             $dadosTrigger = new StdClass();
             $dadosTrigger->qtd_saida = $value['qtd_saida'];
             $dadosTrigger->acao_movimentacao = 'SAIDA';
             $dadosTrigger->id_tipo_movimentacao_estoque = 11;
             $dadosTrigger->id_estoque_saida = $id_estoque_saida;
             $dadosTrigger->id_item_estoque_saida = $id_item_estoque_saida;
             $dadosTrigger->id_responsavel = $id_usuario;
             $dadosTrigger->id_empreendimento = $id_empreendimento;
             $TRGTblEstoqueAUTO = new TRGTblEstoqueAUTO();
             $TRGTblEstoqueAUTO->__setAll($dadosTrigger);
             $varTriggerSql = "";
             if (!empty($dadosTrigger)) {
                 foreach ($TRGTblEstoqueAUTO as $keyTrigger => $valueTrigger) {
                     if ($valueTrigger == null) {
                         $varTriggerSql .= "SET @{$keyTrigger} = NULL;";
                     } else {
                         $varTriggerSql .= "SET @{$keyTrigger} = '{$valueTrigger}';";
                     }
                 }
             }
             $sql = 'UPDATE tbl_estoque SET qtd_item = ' . $value['qtd_item'] . ', dta_ultima_atualizacao = NOW() WHERE id = ' . $value['id'] . ';';
             $this->rumQuery($varTriggerSql);
             $update = $this->conn->prepare($sql);
             if (!$update->execute()) {
                 return false;
             }
         }
     }
     return true;
 }
 public static function excluiEstoqueProduto()
 {
     $produtos = isset($_POST['produtos']) ? $_POST['produtos'] : array();
     $id_empreendimento = $_POST['id_empreendimento'];
     $id_usuario = $_POST['id_usuario'];
     $ids_estoque_produto = null;
     foreach ($produtos as $produto) {
         if (!is_array($ids_estoque_produto)) {
             $ids_estoque_produto = array();
         }
         $ids_estoque_produto[] = $produto['id_estoque_produto'];
     }
     $validator = new DataValidator();
     $validator->set_msg('Informe ao menos um item para excluir')->set('id_estoque_produto', $ids_estoque_produto)->is_required();
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     try {
         $estoque_dao = new EstoqueDao();
         $EstoqueSaidaTO = new EstoqueSaidaTO();
         $EstoqueSaidaDao = new EstoqueSaidaDao();
         $conn = Conexao::getInstance();
         if (!$conn->inTransaction()) {
             $conn->beginTransaction();
         }
         $ret = $estoque_dao->excluiEstoqueProduto($ids_estoque_produto);
         $EstoqueSaidaTO->id_empreendimento = $id_empreendimento;
         $EstoqueSaidaTO->id_usuario = $id_usuario;
         $EstoqueSaidaTO->flg_limpeza_estoque = 1;
         $id_estoque_saida = $EstoqueSaidaDao->saveEstoqueSaida($EstoqueSaidaTO);
         if (!$id_estoque_saida) {
             if ($conn->inTransaction()) {
                 $conn->rollback();
             }
             Flight::halt(500, 'Ocorreu um erro. Tente novamente mais tarde!!!');
         }
         foreach ($produtos as $produto) {
             $ItemEstoqueSaidaTO = new ItemEstoqueSaidaTO();
             $ItemEstoqueSaidaDao = new ItemEstoqueSaidaDao();
             $ItemEstoqueSaidaTO->id_estoque_saida = $id_estoque_saida;
             $ItemEstoqueSaidaTO->id_deposito = $produto['id_deposito'];
             $ItemEstoqueSaidaTO->id_produto = $produto['id_produto'];
             $ItemEstoqueSaidaTO->dta_validade = $produto['dta_validade'];
             $ItemEstoqueSaidaTO->qtd_item = $produto['qtd_saida'];
             if (!$ItemEstoqueSaidaDao->saveItemEstoqueSaida($ItemEstoqueSaidaTO)) {
                 if ($conn->inTransaction()) {
                     $conn->rollback();
                 }
                 Flight::halt(500, 'Ocorreu um erro. Tente novamente mais tarde!!');
             }
         }
         if ($ret) {
             Flight::halt(200, 'Estoque atualizado com sucesso!');
         } else {
             if ($conn->inTransaction()) {
                 $conn->rollback();
             }
             Flight::halt(500, 'Ocorreu um erro. Tente novamente mais tarde!');
         }
     } catch (PDOException $e) {
         if ($conn->inTransaction()) {
             $conn->rollback();
         }
         Flight::halt(500, $e->getMessage());
     }
 }
 public static function baixaEstoque($id_empreendimento, $id_usuario, $produtos, $id_transferencia_estoque, $validade = false)
 {
     $EstoqueSaidaTO = new EstoqueSaidaTO();
     $EstoqueSaidaDao = new EstoqueSaidaDao();
     $EstoqueDao = new EstoqueDao();
     $EstoqueSaidaTO->id_empreendimento = $id_empreendimento;
     $EstoqueSaidaTO->id_usuario = $id_usuario;
     $EstoqueSaidaTO->id_transferencia_estoque = $id_transferencia_estoque;
     $id_estoque_saida = $EstoqueSaidaDao->saveEstoqueSaida($EstoqueSaidaTO);
     foreach ($produtos as $key => $produto) {
         if ((int) $produto['qtd_transferida'] > 0) {
             $busca = array("orderby" => " etq.qtd_item DESC,dta_validade ASC ", "etq.id_deposito" => $produto['id_deposito_saida'], "prd.id" => $produto['id_produto'], "etq.qtd_item" => array('exp' => '>0'));
             if ($validade) {
                 $busca['etq.dta_validade'] = $produto['dta_validade'];
             }
             $estoque = parse_arr_values($EstoqueDao->getEstoque(null, null, $busca), 'all');
             $estoque = $estoque['produtos'];
             $estoque_saida = array();
             $qtd_saida_restante = $produto['qtd_transferida'];
             foreach ($estoque as $key => $value) {
                 $qtd_item = $value['qtd_item'];
                 if ($qtd_item >= $qtd_saida_restante) {
                     $estoque_saida[] = array('id' => $value['id'], 'qtd_item' => $qtd_item - $qtd_saida_restante, 'dta_validade' => $value['dta_validade'], 'qtd_saida' => $qtd_saida_restante, 'id_deposito' => $value['id_deposito'], 'id_produto' => $value['id_produto']);
                     break;
                 } else {
                     $qtd_saida_restante = abs($qtd_item - $qtd_saida_restante);
                     $estoque_saida[] = array('id' => $value['id'], 'qtd_item' => 0, 'dta_validade' => $value['dta_validade'], 'qtd_saida' => $qtd_item, 'id_deposito' => $value['id_deposito'], 'id_produto' => $value['id_produto']);
                 }
             }
             $sql = "";
             $ItemEstoqueSaidaTO = new ItemEstoqueSaidaTO();
             $ItemEstoqueSaidaDao = new ItemEstoqueSaidaDao();
             foreach ($estoque_saida as $key => $value) {
                 $ItemEstoqueSaidaTO->id_estoque_saida = $id_estoque_saida;
                 $ItemEstoqueSaidaTO->id_deposito = $value['id_deposito'];
                 $ItemEstoqueSaidaTO->id_produto = $value['id_produto'];
                 $ItemEstoqueSaidaTO->dta_validade = $value['dta_validade'];
                 $ItemEstoqueSaidaTO->qtd_item = $value['qtd_saida'];
                 $id_item_estoque_saida = $ItemEstoqueSaidaDao->saveItemEstoqueSaida($ItemEstoqueSaidaTO);
                 if (!$id_item_estoque_saida) {
                     return false;
                 }
                 $dadosTrigger = new StdClass();
                 $dadosTrigger->qtd_saida = $value['qtd_saida'];
                 $dadosTrigger->acao_movimentacao = 'SAIDA';
                 $dadosTrigger->id_tipo_movimentacao_estoque = 5;
                 $dadosTrigger->id_estoque_saida = $id_estoque_saida;
                 $dadosTrigger->id_item_estoque_saida = $id_item_estoque_saida;
                 $dadosTrigger->id_responsavel = $id_usuario;
                 $dadosTrigger->id_empreendimento = $id_empreendimento;
                 $dadosTrigger->id_transferencia = $id_transferencia_estoque;
                 $varTriggerSql = "";
                 $TRGTblEstoqueAUTO = new TRGTblEstoqueAUTO();
                 $TRGTblEstoqueAUTO->__setAll($dadosTrigger);
                 if (!empty($dadosTrigger)) {
                     foreach ($TRGTblEstoqueAUTO as $keyTrigger => $valueTrigger) {
                         if ($valueTrigger == null) {
                             $varTriggerSql .= "SET @{$keyTrigger} = NULL;";
                         } else {
                             $varTriggerSql .= "SET @{$keyTrigger} = '{$valueTrigger}';";
                         }
                     }
                 }
                 $sql = 'UPDATE tbl_estoque SET qtd_item = ' . $value['qtd_item'] . ', dta_ultima_atualizacao = NOW() WHERE id = ' . $value['id'] . ';';
                 $EstoqueDao->rumQuery($varTriggerSql, false);
                 $EstoqueDao->rumQuery($sql, false);
             }
             /*foreach ($estoque_saida as $key => $value) {
             			$sql .= 'UPDATE tbl_estoque SET qtd_item = '.$value['qtd_item'].', dta_ultima_atualizacao = NOW() WHERE id = '.$value['id'].';';
             		}
             		$EstoqueDao->rumQuery($sql);*/
         }
     }
     return true;
 }