public function saveAction()
 {
     parent::saveAction();
     /* Instancia classe SupplyStock */
     $supplystockModel = new SupplystockModel();
     /* Instancia classe Supply */
     $supplyModel = new SupplyModel();
     /* Instancia classe SupplyFlow */
     $supplyflowModel = new SupplyflowModel();
     $supplies = json_decode($_GET['supply'], true);
     $i = 0;
     $supply = array();
     $supplystockModel->getAdapter()->beginTransaction();
     try {
         foreach ($supplies as $row) {
             $data = explode("-", $_POST['dtcheckout']);
             if ($row['dtexpires'] != "Indeterminado") {
                 $expire = explode("-", $row['dtexpires']);
             }
             $valor = substr($row['vlunitprice'], 2);
             /* Adiciona lista de Itens na SupplyStock */
             $supply[$i] = array('cdsupply' => $row['cdsupply'], 'qtquantity' => $row['qtquantity'], 'qtsupplybalance' => $row['qtquantity'], 'cdsupplycentre' => $_POST['cdsupplycentrefrom'], 'dtexpire' => $expire[2] . "-" . $expire[1] . "-" . $expire[0] . " 00:00:00", 'dtcheckin' => $data[2] . "-" . $data[1] . "-" . $data[0] . " " . $_POST['hrcheckin'] . ":00", 'cdsupplier' => $_POST['cdsupplyentrysupplier'], 'idinvoice' => $_POST['cdsupplyinvoice'], 'idbatch' => $_POST['cdsupplylot'], 'vlunitprice' => $valor);
             /* Insere registros na StockFlow */
             $supplyflow[$i] = array('cdsupply' => $row['cdsupply'], 'qtquantity' => $row['qtquantity'], 'cdsupplycentreto' => $_POST['cdsupplycentrefrom'], 'fgsupplyioreason' => '4', 'dtcheckin' => date("Y-m-d H:i:s"), 'dtcheckout' => date("Y-m-d H:i:s"), 'cdsupplycentrefrom' => null);
             /* Atualiza quantidade de itens na Supply */
             $dataSupplier = $supplyModel->fetchRow($supplyModel->getSupplyByCdSupply($row['cdsupply']));
             $dataSupplier['qtbalance'] = $dataSupplier['qtbalance'] + $row['qtquantity'];
             $array['qtbalance'] = $dataSupplier['qtbalance'];
             $supplyModel->update($array, 'cdsupply = ' . $row['cdsupply']);
             $supplystockModel->insert($supply[$i]);
             $supplyflowModel->insert($supplyflow[$i]);
             $i++;
         }
         $lastId = $supplystockModel->getAdapter()->lastInsertId();
         $message = "Cadastro efetuado com sucesso.<br>Número no Protocolo gerado: " . $lastId;
         $supplystockModel->getAdapter()->commit();
     } catch (Exception $e) {
         $supplystockModel->getAdapter()->rollBack();
         $message = "Erro na inserção dos dados.";
     }
     $this->view->message = $message;
 }
 public function saveAction()
 {
     $uniqueitens = array();
     $trackErrors = 0;
     $returnsaverequest = array();
     $userInfo = $_SESSION['Gslab_Session']['user'];
     $bootstrap = $this->getInvokeArg('bootstrap');
     $gslab_db = $bootstrap->getResource('db');
     $values = $this->_request->getParams();
     $billingtabdata = json_decode($values['billingtabdata'], true);
     if (isset($values['additionalitensgrid']) && $values['additionalitensgrid'] != null) {
         $additionalitens = $values['additionalitensgrid'];
     }
     if (isset($additionalitens) && $additionalitens != 'null') {
         $additionalitens = json_decode($additionalitens, true);
         foreach ($additionalitens as $unique) {
             $uniqueitens[] = $unique['cdsupply'];
         }
     }
     $billingtabdata['fgaccountentrytype'] = 1;
     $billingtabdata['fgaccountcheck'] = 1;
     //        var_dump($billingtabdata);
     //        var_dump($values);
     //        var_dump(array_unique($uniqueitens)); die;
     $requestModel = new RequestModel();
     $accentryModel = new AccountentryModel();
     if (isset($values['dtrequest']) && $values['dtrequest'] != '') {
         $dtrequest = $this->_request->getParam('dtrequest');
         $daterq = new Zend_Date($dtrequest, 'dd-MM-YYYY HH:mm:ss');
         $values['dtrequest'] = $daterq->toString('YYYY-MM-dd HH:mm:ss');
     }
     if (isset($values['dtdeadline']) && $values['dtdeadline'] != '') {
         $dtdeadline = $this->_request->getParam('dtdeadline');
         $datedl = new Zend_Date($dtdeadline, 'dd-MM-YYYY HH:mm:ss');
         $values['dtdeadline'] = $datedl->toString('YYYY-MM-dd HH:mm:ss');
     }
     if (isset($billingtabdata['dtentrydate']) && $billingtabdata['dtentrydate'] != '') {
         $dtentrydate = $billingtabdata['dtentrydate'];
         $dateed = new Zend_Date($dtentrydate, 'dd-MM-YYYY HH:mm:ss');
         $billingtabdata['dtentrydate'] = $dateed->toString('YYYY-MM-dd HH:mm:ss');
     }
     if (isset($values)) {
         $gslab_db->beginTransaction();
         try {
             $columnsRequest = $requestModel->info(Zend_Db_Table_Abstract::COLS);
             $columnsAccEntry = $accentryModel->info(Zend_Db_Table_Abstract::COLS);
             $arrayRequest = array();
             $arrayAccEntry = array();
             $arrayAccEntryReq = array();
             $arrayAccEntrySupply = array();
             $arrayAccCheck = array();
             $arrayAccCheckAccEntry = array();
             $arraySupplyFlow = array();
             foreach ($values as $id => $value) {
                 if (isset($value) && $value != '' && in_array($id, $columnsRequest)) {
                     $arrayRequest[$id] = addslashes($value);
                 }
             }
             if (isset($values['cdrequest']) && $values['cdrequest'] == '') {
                 $requestModel->insert($arrayRequest);
                 $lastCDrequest = $gslab_db->lastInsertId();
             } else {
                 // Ativa a Requisição (que já foi salva como inativa ao realizar a troca de abas)
                 $arrayRequest['fgactive'] = 1;
                 $requestModel->update($arrayRequest, "request.cdrequest = " . $values['cdrequest']);
             }
             //                $requestModel->getAdapter()->commit();
             // Verifica se existem itens a serem salvos!
             if (isset($additionalitens) && $additionalitens != 'null') {
                 // Salva Dados na AccountEntry
                 //                    $accentryModel->getAdapter()->beginTransaction();
                 try {
                     foreach ($billingtabdata as $id => $value) {
                         if (isset($value) && $value != '' && in_array($id, $columnsAccEntry)) {
                             $arrayAccEntry[$id] = addslashes($value);
                         }
                     }
                     $arrayAccEntry['cdclient'] = $values['cdclient'];
                     $arrayAccEntry['dttransactiondate'] = $values['dtrequest'];
                     $arrayAccEntry['dtdeadline'] = $values['dtdeadline'];
                     $arrayAccEntry['dtinvoicedate'] = $values['dtdeadline'];
                     $accentryModel->insert($arrayAccEntry);
                     $lastCDaccEntry = $gslab_db->lastInsertId();
                     //                         $accentryModel->getAdapter()->commit();
                 } catch (Exception $ae) {
                     //                        $accentryModel->getAdapter()->rollBack();
                     $trackErrors++;
                     $returnsaverequest['idreturn'] = 0;
                     $returnsaverequest['messagereturn'] = "Erro: Entrada de Contas";
                 }
                 // Salva Dados na AccountEntryRequest
                 $accountentryrequestModel = new AccountentryrequestModel();
                 //                    $accountentryrequestModel->getAdapter()->beginTransaction();
                 try {
                     $arrayAccEntryReq["cdaccountentry"] = $lastCDaccEntry;
                     if (!isset($values['cdrequest'])) {
                         $arrayAccEntryReq["cdrequest"] = $lastCDrequest;
                     } else {
                         $arrayAccEntryReq["cdrequest"] = $values['cdrequest'];
                     }
                     $accountentryrequestModel->insert($arrayAccEntryReq);
                     //                        $accountentryrequestModel->getAdapter()->commit();
                 } catch (Exception $aeq) {
                     //                        $accountentryrequestModel->getAdapter()->rollBack();
                     $trackErrors++;
                     $returnsaverequest['idreturn'] = 0;
                     $returnsaverequest['messagereturn'] = "Erro: Requisiçao/Cobrança ";
                 }
                 // Salva Dados na SupplyFlow
                 $supplyflowModel = new SupplyflowModel();
                 //                    $supplyflowModel->getAdapter()->beginTransaction();
                 try {
                     if (isset($additionalitens)) {
                         foreach ($additionalitens as $itens) {
                             $arraySupplyFlow["cdsupply"] = $itens['cdsupply'];
                             $arraySupplyFlow["qtquantity"] = $itens['amount'];
                             $arraySupplyFlow["cdsupplycentrefrom"] = $itens['cdsupplycentre'];
                             $arraySupplyFlow["cdsupplycentreto"] = 1;
                             $arraySupplyFlow["fgsupplyioreason"] = 1;
                             $arraySupplyFlow["dtcheckout"] = $values['dtrequest'];
                             $supplyflowModel->insert($arraySupplyFlow);
                         }
                         //                            $supplyflowModel->getAdapter()->commit();
                     }
                 } catch (Exception $sfw) {
                     //                        $supplyflowModel->getAdapter()->rollBack();
                     $trackErrors++;
                     $returnsaverequest['idreturn'] = 0;
                     $returnsaverequest['messagereturn'] = "Erro: Movimentação de Itens";
                 }
                 //|
                 //====> Desconta Itens do Estoque no SupplyStock
                 $supplystockModel = new SupplyStockModel();
                 //                            $supplystockModel->getAdapter()->beginTransaction();
                 try {
                     if (isset($additionalitens)) {
                         foreach ($additionalitens as $itens) {
                             $datadiscount = array("qtquantity" => new Zend_Db_Expr("qtquantity - " . $itens['amount']), "qtsupplybalance" => new Zend_Db_Expr("qtsupplybalance - " . $itens['amount']), "dtcheckin" => $values['dtrequest']);
                             $supplystockModel->getAdapter()->update('supplystock', $datadiscount, "cdsupply = " . $itens['cdsupply'] . " AND cdsupplycentre = " . $itens['cdsupplycentre']);
                         }
                         //                                    $supplystockModel->getAdapter()->commit();
                     }
                 } catch (Exception $sstk) {
                     //                                $supplystockModel->getAdapter()->rollBack();
                     $trackErrors++;
                     $returnsaverequest['idreturn'] = 0;
                     $returnsaverequest['messagereturn'] = "Erro: Desconto do Estoque";
                 }
                 // Salva Dados na AccountEntrySupply
                 $accountentrysupplyModel = new AccountentrysupplyModel();
                 //                    $accountentrysupplyModel->getAdapter()->beginTransaction();
                 try {
                     if (isset($uniqueitens)) {
                         foreach ($uniqueitens as $itens) {
                             $arrayAccEntrySupply["cdaccountentry"] = $lastCDaccEntry;
                             $arrayAccEntrySupply["cdsupply"] = $itens;
                             $accountentrysupplyModel->insert($arrayAccEntrySupply);
                         }
                         //                            $accountentrysupplyModel->getAdapter()->commit();
                     }
                 } catch (Exception $aes) {
                     //                        $accountentrysupplyModel->getAdapter()->rollBack();
                     $trackErrors++;
                     $returnsaverequest['idreturn'] = 0;
                     $returnsaverequest['messagereturn'] = "Erro: Entradas de contas/Itens";
                 }
                 // Salva Dados na AccountCheck
                 $accountcheckModel = new AccountcheckModel();
                 $accountcheckaccountentryModel = new accountcheckaccountentryModel();
                 //                    $accountcheckModel->getAdapter()->beginTransaction();
                 try {
                     if (isset($values['dtrequest']) && isset($billingtabdata['vlaccountcheckvalue'])) {
                         $arrayAccCheck['cdusergslab'] = $billingtabdata['cdusergslab'];
                         $arrayAccCheck['dtaccountcheckdate'] = $values['dtrequest'];
                         $arrayAccCheck['vlaccountcheckvalue'] = $billingtabdata['vlaccountcheckvalue'];
                         $accountcheckModel->insert($arrayAccCheck);
                         $arrayAccCheckAccEntry['cdaccountcheck'] = $accountcheckModel->getAdapter()->lastInsertId();
                         $arrayAccCheckAccEntry['cdaccountentry'] = $lastCDaccEntry;
                         $accountcheckaccountentryModel->insert($arrayAccCheckAccEntry);
                         //                            $accountcheckModel->getAdapter()->commit();
                     }
                 } catch (Exception $aes) {
                     //                        $accountcheckModel->getAdapter()->rollBack();
                     $trackErrors++;
                     $returnsaverequest['idreturn'] = 0;
                     $returnsaverequest['messagereturn'] = "Erro: Checagem de contas";
                 }
             }
             if ($trackErrors == 0) {
                 $gslab_db->commit();
                 $returnsaverequest['idreturn'] = 1;
                 $returnsaverequest['messagereturn'] = "Cadastro efetuado com sucesso.";
             }
             $this->view->returnSaveRequest = $returnsaverequest;
         } catch (Exception $e) {
             $gslab_db->rollBack();
             //                $requestModel->getAdapter()->rollBack();
             $returnsaverequest['idreturn'] = 0;
             $returnsaverequest['messagereturn'] = "Erro ao salvar a requisição.";
             $this->view->returnSaveRequest = $returnsaverequest;
         }
     }
 }