✏️ 正在编辑: SplitController.php
路径:
/srv/systems_dir/koruspay/application/controllers/SplitController.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\Api\ApiFactory; class SplitController extends Yuppie_Controller_Crud { protected $title = 'Splits de Pagamento'; protected $titleIcon = 'glyphicon-reg glyphicon-reg-briefcase'; protected $_url; public function init() { $this->formFiltro = 'Form_Filtro_Split'; $this->formSave = 'Form_Split'; $this->_url = "https://" . $_SERVER['SERVER_NAME'] . $this->getRequest()->getBaseUrl(); parent::init(); } public function saveAction() { $request = $this->getRequest(); $form = new $this->formSave; $alerts = $this->getHelper('Alerts'); if ($request->isPost() && $form->isValid($request->getPost())) { try { $upload = new Zend_File_Transfer_Adapter_Http(); $info = $upload->getFileInfo('file'); $info['destination'] = UPLOAD_PATH; $upload->receive(); $file = $upload->getFileName(); } catch (Zend_File_Transfer_Exception $e) { $alerts->addDanger($e->getMessage()); } $lines = file($file); $columns = []; $sheetData = []; foreach ($lines as $line) { $columns = explode(";", $line); foreach ($columns as $key => $column) { $columns[Core_Util::getExcelColumnName($key+1)] = $column; unset($columns[$key]); } $sheetData[] = $columns; } try { $import = new Core_Service_Import(); $result = $import->import($sheetData); if (count($import->getErros()) > 0) { $alerts->addDanger(implode("<br>", $import->getErros())); } elseif($result >0) { $alerts->addSuccess("Dados importados com sucesso."); } else { $alerts->addDanger("Nenhum dado importado."); } } catch (Exception $e) { $alerts->addDanger($e->getMessage()); } } $this->view->form = $form; } public function deletedAction() { try { $request = $this->getRequest(); $splitId = $request->getParam('id'); Model_Split::updateSplit($splitId, ['deleted' => 1]); } catch (Exception $erro) { Yuppie_Log::write("Erro na exclusão do lote " . print_r($splitId, true) . ': ' . $erro->getMessage(), $this); } $this->_helper->redirector(''); } public function detailAction() { $request = $this->getRequest(); $alerts = $this->getHelper('Alerts'); $splitId = $request->getParam('id'); $split = Model_Container::getSplit()->findByIdCrypt($splitId); if (!$split) { $alerts->addDanger("Split não identificado."); $this->_helper->redirector(''); } $itens = new Model_DbTable_SplitItens(); $listing = $itens->getItensForSplit($splitId, true); $this->view->listing = $listing; $this->view->split = $split; } public function deletedItensAction() { try { $request = $this->getRequest(); $itens = $request->getParam('itens'); $modelItens = new Model_SplitItens(); $modelItens->deletedItens($itens); $this->_helper->json(['success' => true, 'message' => 'Transações removidas.']); } catch (Exception $erro) { Yuppie_Log::write("Erro na exclusão dos itens do lote: IDs - " . print_r($itens, true) . ' - ' . $erro->getMessage(), $this); $this->_helper->json(['error' => true, 'message' => 'Ocorreu um erro ao remover as transções.']); } } public function createChargeAction() { $company = Model_Container::getCompany()->findById(Yuppie_Auth::getIdentity()->company_id); $request = $this->getRequest(); $splitId = $request->getPost('split_id'); if (empty($splitId)) { $this->_helper->json(['error' => 'Nenhum lote informado.']); } try { $receipt = (new Model_Transactions)->createChargeSplit($splitId, $company); $this->view->qrcode = $receipt['qrcode']; $this->view->copy_paste = $receipt['copy_paste']; $this->view->payer = $company->reason ?: $company->fantasy; $this->view->doc_number = $company->doc_number; $this->view->total = $receipt['amount']; $this->_helper->json([ 'success' => true, 'qrCode_base64' => $receipt['qrcode'], 'copy_paste' => $receipt['copy_paste'], 'qrCode_image' => $this->view->render('split/create-charge.phtml'), 'payer' => $company->reason ?: $company->fantasy, 'doc_number' => $company->doc_number ]); } catch (Exception $erro) { $this->_helper->json(['error' => true, 'message' => $erro->getMessage()]); } } public function checkPaymentAction() { $request = $this->getRequest(); $splitId = $request->getPost('split_id'); if (empty($splitId)) { $this->_helper->json(['error' => 'Nenhum lote informado.']); } $split = Model_Container::getSplit()->findByIdCrypt($splitId); if (empty($split)) { $this->_helper->json(['error' => 'Lote não encontrado.']); } $transaction = Model_Container::getTransactions()->fetchRow(['split_id = ?' => $split->id, 'type = "CREDITO"']); $transactionData = Model_Container::getTransactions()->findTransactionCredit($transaction->id); if (empty($transactionData)) { $this->_helper->json(['error' => 'Nenhuma transação localizada para esse lote.']); } try { $serviceApi = ApiFactory::load(); $payment = $serviceApi->checkPayment($transactionData); if (!$payment) { $this->_helper->json(['error' => 'Lote não encontrado.']); } } catch (\Throwable $th) { $this->_helper->json(['error' => $th->getMessage()]); } $this->_helper->json(['success' => true, 'message' => 'Lote consultado com sucesso!']); } public function sendSplitAction() { $request = $this->getRequest(); $splitId = $request->getParam('split_id'); $alerts = $this->getHelper('Alerts'); if (empty($splitId)) { $alerts->addDanger('Nenhum lote informado.'); $this->_redirect('/splits'); } try { $checkSplit = Model_Container::getSplit()->findByIdCrypt($splitId); if (!$checkSplit || Model_Container::getSplit()->isParent($checkSplit->id)) { $alerts->addWarning('Lote já processado ou em processamento.'); $this->_redirect('/splits'); } if (!Model_Split::updateStatus($splitId, 'PROCESSANDO', 'RECEBIDO')) { $alerts->addWarning('Lote já processado ou em processamento.'); $this->_redirect('/splits'); } $splitData = Model_Container::getSplit()->findByIdCrypt($splitId); $itensSplit = (Model_Container::getSplitItens())->getItensForSplit($splitId); $success = (new Model_Transactions())->insertBatchTransfers($itensSplit, $splitData); Yuppie_Log::write("sendSplit => " . print_r(["success" => $success, "count_itens_split" => count($itensSplit)], true)); if ($success < count($itensSplit)) { if (!Model_Split::updateStatus($splitId, 'PARCIAL', 'PROCESSANDO')) { throw new Exception('Lote não está em processamento.'); } $alerts->addDanger('Algumas transferências não foram enviadas!'); $this->_redirect('/splits'); } if (!Model_Split::updateStatus($splitId, 'CONCLUIDO', 'PROCESSANDO')) { throw new Exception('Lote não está em processamento.'); } $alerts->addSuccess('Split concluído com sucesso. Verifique se algum item específico apresentou erro no processamento.'); $this->_redirect('/splits'); } catch (Throwable $erro) { Yuppie_Log::write("Erro no processamento do lote " . print_r($splitId, true) . ': ' . " " . $erro->getMessage() . $erro->getTraceAsString(), $this); $alerts->addDanger('Ocorreu um erro ao processar o lote.'); $this->_redirect('/splits'); } } public function reprocessAction() { $request = $this->getRequest(); $form = new Form_Filtro_Reprocess(); if ($request->isPost() && $form->isValid($request->getPost())) { $listagem = $form->search(); } $this->view->paginator = $listagem; $this->view->form = $form; } public function sendReprocessAction() { try { $request = $this->getRequest(); $id = $request->getParam('id'); $ns = new Zend_Session_Namespace('reprocess_split_' . $id); $itens = $ns->reprocess_split ?: null; $alerts = $this->getHelper('Alerts'); $ns->unsetAll(); if (empty($itens)) { $alerts->addDanger('Nenhum item encontrado para reprocessar.'); $this->_redirect('/reprocess'); } $splitData = Model_Container::getSplit()->findById($itens[0]['split_id']); if ($splitData->situation !== 'PARCIAL' || Model_Container::getSplit()->isParent($splitData->id)) { $alerts->addWarning('Lote já processado ou em processamento.'); $this->_redirect('/reprocess'); } $company = (new Model_Company())->display(Yuppie_Auth::getIdentity()->company_id); $splitId = Model_Container::getSplit()->insert([ "company_id" => $company->id, "situation" => 'PROCESSANDO', "origin" => "REPROCESSAMENTO" ]); $ids = (new Model_SplitItens())->insertReprocess($itens, $splitId); $itensSplit = (Model_Container::getSplitItens())->getItensReprocess($ids); if (empty($itensSplit)) { $alerts->addDanger('Nenhum item encontrado para reprocessar.'); $this->_redirect('/splits'); } $splitData = Model_Container::getSplit()->findById($splitId); $splitData->amount = array_sum(array_column($itensSplit, 'amount')); $splitData->save(); $success = (new Model_Transactions())->insertBatchTransfers($itensSplit, $splitData); if ($success < count($itensSplit)) { if (!Model_Split::updateStatus(md5($splitId), 'PARCIAL', 'PROCESSANDO')) { throw new Exception('Lote não está em processamento.'); } throw new Exception('Algumas transferências não foram enviadas!'); } if (!Model_Split::updateStatus(md5($splitId), 'CONCLUIDO', 'PROCESSANDO')) { throw new Exception('Lote não está em processamento.'); } $alerts->addSuccess('Transferências reenviadas para processamento. Em alguns minutos o status será atualizado.'); } catch (Exception $erro) { $alerts->addDanger($erro->getMessage()); Yuppie_Log::write("Erro no reprocessamento do lote " . print_r($id, true) . ': ' . " " . $erro->getMessage() . $erro->getTraceAsString(), $this); } catch (Throwable $th) { Yuppie_Log::write("Erro no reprocessamento do lote " . print_r($id, true) . ': ' . " " . $th->getMessage() . $th->getTraceAsString(), $this); $alerts->addDanger('Ocorreu um erro ao reprocessar as transferências.'); } $this->_redirect('/splits'); } }
💾 保存文件
← 返回文件管理器