Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers;
- use App\Http\Requests;
- use Illuminate\Http\Request;
- use Illuminate\Pagination\LengthAwarePaginator;
- use Exception;
- use Mail;
- use Auth;
- use App\Http\Controllers\DeponModel;
- use App\Http\Controllers\SettingsModel;
- use App\Http\Controllers\LoggerController;
- class DeponController extends Controller
- {
- private $logger;
- protected $deponModel;
- protected $settingsModel;
- public function __construct(DeponModel $deponModel, SettingsModel $settingsModel, LoggerController $LoggerController)
- {
- //подключаем модель доступа к Ораклу
- $this->deponModel = $deponModel;
- //подключаем модель параметров
- $this->settingsModel = $settingsModel;
- //подключаем лог
- $this->logger = $LoggerController->getLogger('depon');
- }
- public function index(Request $request)
- //вывод списка депозитных счетов
- {
- $perPage = 12;
- $currentPage = $request->get('page', 1);
- $accs = $this->deponModel->selectRows(($currentPage - 1) * $perPage, $currentPage * $perPage);
- //пагинация
- $accs1 = $this->deponModel->selectContnum();
- $paginator = new LengthAwarePaginator($accs1, count($accs1), $perPage, $currentPage);
- $paginator->setPath($request->getBasePath());
- return view('main.index', compact('accs', 'paginator'));
- }
- public function search(Request $request)
- //поиск
- {
- $this->validate($request, ['searchField' => 'required']);
- $request->flashOnly('searchField');
- $accs = $this->deponModel->selectSearch($request->searchField);
- return view('main.index', compact('accs'));
- }
- public function clear()
- //отмена формы
- {
- return redirect('/depon');
- }
- public function edit($id = '')
- //редактирование депозитного счета
- {
- if (empty($id)): return redirect('/depon'); endif;
- $dep = $this->deponModel->selectRow($id);
- return view('main.edit', compact('dep'));
- }
- private function sendReport($dataArray)
- //отчет о проделанной операции (закрытие счета, изменение суммы) - посылаем письмо и пишем в лог
- {
- $emailDepon = $this->settingsModel->getDeponEmail();
- $data = ['contnum' => $dataArray["contnum"], 'totalsum' => $dataArray["totalsum"], 'enddate' => $dataArray["enddate"], 'closedate' => $dataArray["closedate1"], 'email' => $emailDepon, 'subject' => $dataArray["messageString"]];
- try {
- Mail::queue('email.deponclose', $data, function ($message) use ($data) {
- $message->to($data['email']);
- $message->subject($data['subject']);
- });
- } catch (Exception $e) {
- $this->logger->addError($e->getMessage());
- }
- $this->logger->addInfo($dataArray["messageString"]);
- }
- public function editPost(Request $request, $id = '')
- //нажата кнопка изменить сумму договора
- {
- if (empty($id)): return redirect('/depon'); endif;
- $this->validate($request, ['totalsum' => 'required|numeric']);
- try {
- $this->deponModel->changeSum($request->totalsum, $id);
- $dataАrray = [
- "messageString" => 'Сумма договора ' . $request->contnum . ' успешно изменена на ' . $request->totalsum . '!',
- "contnum" => $request->contnum,
- "totalsum" => $request->totalsum,
- "enddate" => $request->enddate,
- "closedate1" => null,
- "sess" => $request->session()
- ];
- $this->sendReport($dataАrray);
- return redirect('/depon')->with('status', 'success')->with('message', $dataАrray["messageString"]);
- } catch (Exception $e) {
- $parametr = 'Сумму договора не удалось изменить! ' . $e->getMessage();
- $this->logger->addError($parametr);
- return redirect('/depon')->with('errors', $parametr);
- }
- }
- public function closeContract(Request $request, $id = '')
- //закрыть депозитный договор
- {
- if (empty($id)): return redirect('/depon'); endif;
- $this->validate($request, ['closedate' => 'required|date']);
- try {
- $this->deponModel->closeContract($request->closedate, $id);
- $dataАrray = [
- "messageString" => 'Договор ' . $request->contnum . ' успешно закрыт!',
- "contnum" => $request->contnum,
- "totalsum" => $request->totalsum,
- "enddate" => $request->enddate,
- "closedate1" => $request->closedate,
- "sess" => $request->session()
- ];
- $this->sendReport($dataАrray);
- return redirect('/depon')->with('status', 'success')->with('message', $dataАrray["messageString"]);
- } catch (Exception $e) {
- $parametr = 'Договор не удалось закрыть! ' . $e->getMessage();
- $this->logger->addError($parametr);
- return redirect('/depon')->with('errors', $parametr);
- }
- }
- public function getSettings()
- //выводим настройки для этого отчета
- {
- return view('main.sett', ['email' => $this->settingsModel->getDeponEmail()]);
- }
- public function postSettings(Request $request)
- //сохраняем настройки отчета (email)
- {
- $this->validate($request, ['depon_email' => 'required']);
- $this->settingsModel->setDeponEmail($request->depon_email);
- return redirect('/depon');
- }
- }<?php
- namespace App\Http\Controllers;
- use DB;
- use Exception;
- class DeponModel extends Controller
- {
- private $oracleConnect;
- public function __construct()
- {
- //подключаемся к БД Оракл
- $this->oracleConnect = DB::connection('oracle');
- }
- public function selectSearch($searchValue)
- //выбор записи подходящие под поиск
- {
- $sqlQuery = "select t.contnum, t.totalsum, t.enddate, t.closedate, t.contstatus, rowidtochar (rowid) row1 from MBCONT t where contnum like ?";
- $argument = '%' . $searchValue . '%';
- return $this->oracleConnect->select($sqlQuery, array($argument));
- }
- public function selectContnum()
- //выбрать все договоры
- {
- return $this->oracleConnect->select('select t.contnum from MBCONT t');
- }
- public function selectRows($startNum, $lastNum)
- //выбрать часть договоров (для паганиции)
- {
- $sqlQuery = "SELECT contnum, totalsum, enddate, closedate, contstatus, rowidtochar (rowid) row1
- FROM (SELECT t.contnum,
- t.totalsum,
- t.enddate,
- t.closedate,
- t.contstatus,
- row_number() over(order by t.contstatus asc, t.enddate) rnk
- FROM mbcont t)
- WHERE rnk BETWEEN ? AND ?";
- return $this->oracleConnect->select($sqlQuery, [$startNum, $lastNum]);
- }
- public function selectRow($number)
- //выбрать одну запись
- {
- $sqlQuery = "select t.contnum, t.totalsum, t.enddate, t.closedate, rowidtochar (?) row1 from MBCONT t where rowid = CHARTOROWID(?)";
- $argument = $number;
- return $this->oracleConnect->selectOne($sqlQuery, [$argument, $argument]);
- }
- public function changeSum($sum, $id)
- //изменить сумму договора
- {
- $this->oracleConnect->beginTransaction();
- try {
- $sqlQuery = "update mbcont t set t.totalsum = ? where rowid = CHARTOROWID (?)";
- $this->oracleConnect->update($sqlQuery, [$sum, $id]);
- } catch (Exception $e) {
- $this->oracleConnect->rollBack();
- throw $e;
- }
- $this->oracleConnect->commit();
- }
- public function closeContract($date, $id)
- //закрыть депозитный договор
- {
- $this->oracleConnect->beginTransaction();
- try {
- $sqlQuery = "update mbcont t set t.closedate = to_date(?, 'dd-mm-yyyy'), t.ContStatus = 2 where rowid = CHARTOROWID(?)";
- $this->oracleConnect->update($sqlQuery, [$date, $id]);
- } catch (Exception $e) {
- $this->oracleConnect->rollBack();
- throw $e;
- }
- $this->oracleConnect->commit();
- }
- }
- <?php
- namespace App\Http\Controllers;
- use Monolog\Logger;
- use Monolog\Handler\RotatingFileHandler;
- use Monolog\Processor\WebProcessor;
- use Monolog\Formatter\LineFormatter;
- use Auth;
- class LoggerController extends Controller
- {
- private $channels = [];
- public function getLogger($channelName)
- //получить или создать логгер
- {
- if (!array_key_exists($channelName, $this->channels)) {
- $this->createLogger($channelName);
- }
- return $this->channels[$channelName];
- }
- private function createLogger($channelName)
- //создать логгер
- {
- $logger = new Logger($channelName);
- $parametr = 'logs\\' . $channelName . '.' . 'log';
- $handler = new RotatingFileHandler(storage_path($parametr), Logger::INFO);
- $user = Auth::user();
- $handler->setFormatter(new LineFormatter("[%datetime%] %channel%.%level_name%: " . 'User Name: ' . $user->getAttributeValue('name') . ' | User Email: ' . $user->getAttributeValue('email') . ' | ' . "%message% %extra% %context%\n"));
- $logger->pushHandler($handler);
- $logger->pushProcessor(new WebProcessor);
- $this->channels[$channelName] = $logger;
- return $logger;
- }
- }<?php
- /*
- |--------------------------------------------------------------------------
- | Application Routes
- |--------------------------------------------------------------------------
- |
- | Here is where you can register all of the routes for an application.
- | It's a breeze. Simply tell Laravel the URIs it should respond to
- | and give it the controller to call when that URI is requested.
- |
- */
- Route::get('/', 'DeponController@index')->middleware('auth');
- // Authentication Routes...
- Route::get('auth/login', 'Auth\AuthController@getLogin');
- Route::post('auth/login', 'Auth\AuthController@postLogin');
- Route::get('auth/logout', 'Auth\AuthController@getLogout');
- // Registration Routes...
- Route::get('auth/register', 'Auth\AuthController@getRegister');
- Route::post('auth/register', 'Auth\AuthController@postRegister');
- //заходят только авторизованные пользователи
- Route::group(['middleware' => 'auth'], function () {
- $d = 'depon.';
- Route::get('/depon', ['as' => $d . 'index', 'uses' => 'DeponController@index']);
- Route::post('/depon', ['as' => $d . 'search', 'uses' => 'DeponController@search']);
- Route::get('/depon/clear', ['as' => $d . 'cancel', 'uses' => 'DeponController@clear']);
- Route::get('/depon/edit/{id?}', ['as' => $d . 'edit', 'uses' => 'DeponController@edit']);
- Route::post('/depon/edit/{id?}', ['as' => $d . 'editpost', 'uses' => 'DeponController@editPost']);
- Route::post('/depon/close/{id?}', ['as' => $d . 'close', 'uses' => 'DeponController@closeContract']);
- Route::get('/depon/settings', ['as' => 'settings.get', 'uses' => 'DeponController@getSettings']);
- Route::post('/depon/settings', ['as' => 'settings.post', 'uses' => 'DeponController@postSettings']);
- });
- Route::resource('user', 'UserController');
- Route::get('test', function () {
- Echo 'Ok!';
- });<?php
- namespace App\Http\Controllers;
- use Illuminate\Http\Request;
- use App\Http\Requests;
- use App\Http\Controllers\Controller;
- use DB;
- class SettingsModel extends Controller
- {
- public function getDeponEmail()
- //получить email для отправки отчета
- {
- return DB::table('settings')->where('parametername', 'depon_email')->value('parametervalue');
- }
- public function setDeponEmail($email)
- //установить email для отчета
- {
- DB::table('settings')->where('parametername', 'depon_email')->update(['parametervalue' => $email]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement