public static function saveOrdemProducao()
 {
     $OrdemProducaoTO = new OrdemProducaoTO();
     $OrdemProducaoDao = new OrdemProducaoDao();
     $OrdemProducaoTO->id_empreendimento = isset($_POST['id_empreendimento']) ? $_POST['id_empreendimento'] : '';
     $OrdemProducaoTO->id_responsavel = isset($_POST['id_responsavel']) ? $_POST['id_responsavel'] : '';
     $OrdemProducaoTO->id_status = isset($_POST['id_status']) ? $_POST['id_status'] : 1;
     $OrdemProducaoTO->id_deposito = isset($_POST['id_deposito']) ? $_POST['id_deposito'] : '';
     $itens = isset($_POST['itens']) && is_array($_POST['itens']) ? $_POST['itens'] : false;
     $Dao = new Dao();
     $Dao->setTimeZone($OrdemProducaoTO->id_empreendimento);
     $OrdemProducaoTO->dta_create = date('Y-m-d H:m:i');
     $validator = new DataValidator();
     $validator->set_msg('O Responsavel é obrigatório')->set('id_responsavel', $OrdemProducaoTO->id_responsavel)->is_required();
     $validator->set_msg('O Depósito é obrigatório')->set('nme_deposito', $OrdemProducaoTO->id_deposito)->is_required();
     if ($itens == false) {
         $validator->_errors['itens'][] = 'É obrigatório informar ao menos um produto a ser produzido';
     }
     if (!$validator->validate()) {
         Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode($validator->get_errors()))->send();
         return;
     }
     try {
         $id_ordem_producao = $OrdemProducaoDao->saveOrdemProducao($OrdemProducaoTO);
         if (!$id_ordem_producao) {
             Flight::halt(500, 'Erro ao cadastrar ordem de producão');
         }
         $ItensOrdemProducaoTO = new ItensOrdemProducaoTO();
         $ItensOrdemProducaoDao = new ItensOrdemProducaoDao();
         foreach ($itens as $key => $value) {
             $ItensOrdemProducaoTO->id_ordem_producao = $id_ordem_producao;
             $ItensOrdemProducaoTO->id_produto = $value['id'];
             $ItensOrdemProducaoTO->qtd = $value['qtd'];
             if (!$ItensOrdemProducaoDao->saveItensOrdemProducao($ItensOrdemProducaoTO)) {
                 Flight::halt(500, 'Erro ao cadastrar itens ordem de producão');
             }
         }
         if (!$OrdemProducaoDao->savechangeOrdemProducao($id_ordem_producao, $OrdemProducaoTO->id_status, $OrdemProducaoTO->dta_create)) {
             Flight::halt(500, 'Erro ao cadastrar mudança de status');
         }
         Flight::halt(201);
     } catch (Exception $e) {
         Flight::halt(500, $e->getMessage());
     }
 }
 public static function addItemComanda()
 {
     $ItemVendaTO = new ItemVendaTO();
     $MesaDao = new MesaDao();
     $ItemVendaTO->__setAll($_POST);
     $Conexao = new Conexao();
     $Conexao::getInstance();
     $EstoqueDao = new EstoqueDao();
     if (isset($_POST['flg_produto_composto'])) {
         $flg_produto_composto = (int) $_POST['flg_produto_composto'] == 1 ? true : false;
     }
     try {
         if (!$flg_produto_composto) {
             $out = array();
             $qtd = (int) $_POST['qtd'];
             $estoque = $EstoqueDao->getQtdProduto($_POST['id_empreendimento'], $_POST['id_produto'], null, $_POST['id_deposito'], null);
             $estoque_real = $estoque - $qtd;
             if ($estoque_real < 0) {
                 $out[] = array((double) $_POST['id_produto']);
             }
             if (count($out) > 0) {
                 Flight::response()->status(406)->header('Content-Type', 'application/json')->write(json_encode(array('out_estoque' => $out)))->send();
                 return;
             }
         }
         $Conexao->beginTransaction();
         if ($flg_produto_composto) {
             $OrdemProducaoTO = new OrdemProducaoTO();
             $OrdemProducaoDao = new OrdemProducaoDao();
             $OrdemProducaoTO->id_empreendimento = $_POST['id_empreendimento'];
             $OrdemProducaoTO->id_responsavel = $_POST['id_usuario'];
             $OrdemProducaoTO->id_status = 1;
             $OrdemProducaoTO->id_deposito = $_POST['id_deposito'];
             $OrdemProducaoTO->dta_create = $_POST['dta_create'];
             $id_ordem_producao = $OrdemProducaoDao->saveOrdemProducao($OrdemProducaoTO);
             if (!$id_ordem_producao) {
                 $Conexao->rollback();
                 Flight::halt(500, 'Erro ao cadastrar ordem de producão');
             }
             $ItensOrdemProducaoTO = new ItensOrdemProducaoTO();
             $ItensOrdemProducaoDao = new ItensOrdemProducaoDao();
             $ItensOrdemProducaoTO->id_ordem_producao = $id_ordem_producao;
             $ItensOrdemProducaoTO->id_produto = $_POST['id_produto'];
             $ItensOrdemProducaoTO->qtd = $_POST['qtd'];
             $ItensOrdemProducaoTO->observacoes = isset($_POST['observacoes']) && !empty($_POST['observacoes']) ? $_POST['observacoes'] : "";
             if (!$ItensOrdemProducaoDao->saveItensOrdemProducao($ItensOrdemProducaoTO)) {
                 $Conexao->rollback();
                 Flight::halt(500, 'Erro ao cadastrar itens da ordem de producão');
             }
             $ItemVendaTO->id_ordem_producao = $id_ordem_producao;
         }
         $MesaDao->addItemComanda($ItemVendaTO);
         $mesa = $MesaDao->getResumoMesa($_POST['id_mesa']);
         $saida = array('ordem_producao' => null, 'mesa' => $mesa);
         if (isset($id_ordem_producao)) {
             $ordem_producao = $MesaDao->getOrdemProducao($id_ordem_producao);
             $saida['ordem_producao'] = $ordem_producao;
         }
         Flight::response()->status(201)->header('Content-Type', 'application/json')->write(json_encode($saida))->send();
     } catch (Exception $e) {
         jsonException($e);
     }
 }