├── .github └── workflows │ └── phpunit.yml ├── .gitignore ├── Procfile ├── README.md ├── app ├── .htaccess ├── Common.php ├── Config │ ├── App.php │ ├── Autoload.php │ ├── Boot │ │ ├── development.php │ │ ├── production.php │ │ └── testing.php │ ├── Cache.php │ ├── Constants.php │ ├── ContentSecurityPolicy.php │ ├── Database.php │ ├── DocTypes.php │ ├── Email.php │ ├── Encryption.php │ ├── Events.php │ ├── Exceptions.php │ ├── Filters.php │ ├── ForeignCharacters.php │ ├── Format.php │ ├── Honeypot.php │ ├── Images.php │ ├── Kint.php │ ├── Logger.php │ ├── Migrations.php │ ├── Mimes.php │ ├── Modules.php │ ├── Pager.php │ ├── Paths.php │ ├── Routes.php │ ├── Services.php │ ├── Toolbar.php │ ├── UserAgents.php │ ├── Validation.php │ └── View.php ├── Controllers │ ├── Akun.php │ ├── BaseController.php │ ├── Home.php │ ├── JurnalPenyesuaian.php │ ├── JurnalUmum.php │ ├── Laporan.php │ ├── Login.php │ └── User.php ├── Database │ ├── Migrations │ │ ├── .gitkeep │ │ ├── 2020-11-02-150333_user.php │ │ ├── 2020-11-02-150447_akun.php │ │ ├── 2020-11-02-150501_jurnalUmum.php │ │ └── 2020-11-02-150509_jurnalPenyelesaian.php │ └── Seeds │ │ ├── .gitkeep │ │ ├── AdminSeeder.php │ │ ├── AkunSeeder.php │ │ ├── DummySeeder.php │ │ ├── JPSeeder.php │ │ └── JUSeeder.php ├── Filters │ ├── .gitkeep │ ├── Auth.php │ ├── Guest.php │ └── RoleBased.php ├── Helpers │ ├── .gitkeep │ ├── converttousd_helper.php │ ├── laporan_helper.php │ └── tanggalindo_helper.php ├── Language │ ├── .gitkeep │ └── en │ │ └── Validation.php ├── Libraries │ └── .gitkeep ├── Models │ ├── .gitkeep │ ├── AkunModel.php │ ├── JPModel.php │ ├── JUModel.php │ ├── JurnalUmumModel.php │ └── UserModel.php ├── ThirdParty │ └── .gitkeep ├── Views │ ├── components │ │ ├── akun │ │ │ └── modal_tambah_akun.php │ │ ├── alert_error.php │ │ ├── alert_success.php │ │ ├── jurnal_penyesuaian │ │ │ └── modal_tambah_jurnal_penyesuaian.php │ │ ├── jurnal_umum │ │ │ └── modal_tambah_jurnal_umum.php │ │ ├── laporan │ │ │ ├── buku_besar.php │ │ │ ├── buku_besar_en.php │ │ │ ├── laba_rugi.php │ │ │ ├── laba_rugi_en.php │ │ │ ├── neraca_saldo.php │ │ │ └── neraca_saldo_en.php │ │ └── user │ │ │ └── modal_tambah_user.php │ ├── dashboard.php │ ├── data_akun.php │ ├── data_jurnal_penyesuaian.php │ ├── data_jurnal_umum.php │ ├── data_user.php │ ├── errors │ │ ├── cli │ │ │ ├── error_404.php │ │ │ ├── error_exception.php │ │ │ └── production.php │ │ └── html │ │ │ ├── debug.css │ │ │ ├── debug.js │ │ │ ├── error_404.php │ │ │ ├── error_exception.php │ │ │ └── production.php │ ├── laporan.php │ ├── layout │ │ └── app_layout.php │ ├── login.php │ ├── profile.php │ └── welcome_message.php └── index.html ├── builds ├── composer.json ├── composer.lock ├── license.txt ├── nohup.out ├── phpunit.xml.dist ├── public ├── .htaccess ├── ElaAdmin │ ├── css │ │ ├── cs-skin-elastic.css │ │ ├── lib │ │ │ ├── chosen │ │ │ │ ├── chosen-sprite.png │ │ │ │ ├── chosen-sprite@2x.png │ │ │ │ ├── chosen.css │ │ │ │ └── chosen.min.css │ │ │ ├── datatable │ │ │ │ ├── buttons.bootstrap.min.css │ │ │ │ ├── buttons.dataTables.min.css │ │ │ │ └── dataTables.bootstrap.min.css │ │ │ └── vector-map │ │ │ │ └── jqvmap.min.css │ │ ├── style.css │ │ └── style.css.map │ ├── fonts │ │ └── icomoon │ │ │ ├── icomoon.eot │ │ │ ├── icomoon.svg │ │ │ ├── icomoon.ttf │ │ │ ├── icomoon.woff │ │ │ └── index.html │ ├── images │ │ ├── .gitignore │ │ ├── admin.jpg │ │ ├── avatar │ │ │ ├── 1.jpg │ │ │ ├── 2.jpg │ │ │ ├── 3.jpg │ │ │ ├── 4.jpg │ │ │ ├── 5.jpg │ │ │ ├── 6.jpg │ │ │ ├── 64-1.jpg │ │ │ └── 64-2.jpg │ │ ├── favicon.png │ │ ├── logo.png │ │ ├── logo.psd │ │ └── logo2.png │ ├── js │ │ ├── dashboard.js │ │ ├── init │ │ │ ├── chartjs-init.js │ │ │ ├── datatables-init.js │ │ │ ├── flot-chart-init.js │ │ │ ├── fullcalendar-init.js │ │ │ ├── gmap-init.js │ │ │ ├── peitychart-init.js │ │ │ ├── vector-init.js │ │ │ └── weather-init.js │ │ ├── lib │ │ │ ├── chosen │ │ │ │ ├── chosen.jquery.js │ │ │ │ ├── chosen.jquery.min.js │ │ │ │ ├── chosen.proto.js │ │ │ │ └── chosen.proto.min.js │ │ │ ├── data-table │ │ │ │ ├── buttons.bootstrap.min.js │ │ │ │ ├── buttons.colVis.min.js │ │ │ │ ├── buttons.flash.min.js │ │ │ │ ├── buttons.html5.min.js │ │ │ │ ├── buttons.print.min.js │ │ │ │ ├── dataTables.bootstrap.min.js │ │ │ │ ├── dataTables.buttons.min.js │ │ │ │ ├── datatables.min.js │ │ │ │ ├── jquery-1.12.4.js │ │ │ │ ├── jquery.dataTables.min.js │ │ │ │ ├── jszip.min.js │ │ │ │ ├── pdfmake.min.js │ │ │ │ └── vfs_fonts.js │ │ │ └── gmap │ │ │ │ ├── gmapApi.js │ │ │ │ ├── gmaps.js │ │ │ │ └── gmaps.min.js │ │ ├── main.js │ │ ├── vmap.sampledata.js │ │ └── widgets.js │ └── scss │ │ ├── style.css │ │ ├── style.css.map │ │ └── style.scss ├── css │ └── app.css ├── favicon.ico ├── img │ ├── avatar.png │ ├── background │ │ ├── bg-login.jpg │ │ └── bg-ungu.svg │ └── icons │ │ ├── icon-avatar.png │ │ ├── icon-menu-akun.png │ │ ├── icon-menu-dashboard.png │ │ ├── icon-menu-jp.png │ │ ├── icon-menu-ju.png │ │ ├── icon-menu-laporan.png │ │ ├── icon-menu-user.png │ │ ├── icon-widget-1.png │ │ ├── icon-widget-2.png │ │ ├── icon-widget-3.png │ │ ├── icon-widget-4.png │ │ └── logo.png ├── index.php └── robots.txt ├── spark ├── tests ├── README.md ├── _support │ ├── Database │ │ ├── Migrations │ │ │ └── 2020-02-22-222222_example_migration.php │ │ └── Seeds │ │ │ └── ExampleSeeder.php │ ├── DatabaseTestCase.php │ ├── Libraries │ │ └── ConfigReader.php │ ├── Models │ │ └── ExampleModel.php │ └── SessionTestCase.php ├── database │ └── ExampleDatabaseTest.php ├── session │ └── ExampleSessionTest.php └── unit │ └── HealthTest.php └── writable ├── .htaccess ├── cache └── index.html ├── logs └── index.html ├── session └── index.html └── uploads └── index.html /.github/workflows/phpunit.yml: -------------------------------------------------------------------------------- 1 | name: PHPUnit 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - develop 7 | 8 | jobs: 9 | main: 10 | name: Build and test 11 | 12 | strategy: 13 | matrix: 14 | php-versions: ['7.2', '7.3', '7.4'] 15 | 16 | runs-on: ubuntu-latest 17 | 18 | if: "!contains(github.event.head_commit.message, '[ci skip]')" 19 | 20 | steps: 21 | - name: Checkout 22 | uses: actions/checkout@v2 23 | 24 | - name: Setup PHP, with composer and extensions 25 | uses: shivammathur/setup-php@master 26 | with: 27 | php-version: ${{ matrix.php-versions }} 28 | tools: composer, pecl, phpunit 29 | extensions: intl, json, mbstring, mysqlnd, xdebug, xml, sqlite3 30 | coverage: xdebug 31 | 32 | - name: Get composer cache directory 33 | id: composer-cache 34 | run: echo "::set-output name=dir::$(composer config cache-files-dir)" 35 | 36 | - name: Cache composer dependencies 37 | uses: actions/cache@v1 38 | with: 39 | path: ${{ steps.composer-cache.outputs.dir }} 40 | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} 41 | restore-keys: ${{ runner.os }}-composer- 42 | 43 | - name: Install dependencies 44 | run: composer install --no-progress --no-suggest --no-interaction --prefer-dist --optimize-autoloader 45 | # To prevent rate limiting you may need to supply an OAuth token in Settings > Secrets 46 | # env: 47 | # https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens 48 | # COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }} 49 | 50 | - name: Test with phpunit 51 | run: vendor/bin/phpunit --coverage-text 52 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #------------------------- 2 | # Operating Specific Junk Files 3 | #------------------------- 4 | 5 | # OS X 6 | .DS_Store 7 | .AppleDouble 8 | .LSOverride 9 | 10 | # OS X Thumbnails 11 | ._* 12 | 13 | # Windows image file caches 14 | Thumbs.db 15 | ehthumbs.db 16 | Desktop.ini 17 | 18 | # Recycle Bin used on file shares 19 | $RECYCLE.BIN/ 20 | 21 | # Windows Installer files 22 | *.cab 23 | *.msi 24 | *.msm 25 | *.msp 26 | 27 | # Windows shortcuts 28 | *.lnk 29 | 30 | # Linux 31 | *~ 32 | 33 | # KDE directory preferences 34 | .directory 35 | 36 | # Linux trash folder which might appear on any partition or disk 37 | .Trash-* 38 | 39 | #------------------------- 40 | # Environment Files 41 | #------------------------- 42 | # These should never be under version control, 43 | # as it poses a security risk. 44 | .env 45 | .vagrant 46 | Vagrantfile 47 | 48 | #------------------------- 49 | # Temporary Files 50 | #------------------------- 51 | writable/cache/* 52 | !writable/cache/index.html 53 | 54 | writable/logs/* 55 | !writable/logs/index.html 56 | 57 | writable/session/* 58 | !writable/session/index.html 59 | 60 | writable/uploads/* 61 | !writable/uploads/index.html 62 | 63 | writable/debugbar/* 64 | 65 | php_errors.log 66 | 67 | #------------------------- 68 | # User Guide Temp Files 69 | #------------------------- 70 | user_guide_src/build/* 71 | user_guide_src/cilexer/build/* 72 | user_guide_src/cilexer/dist/* 73 | user_guide_src/cilexer/pycilexer.egg-info/* 74 | 75 | #------------------------- 76 | # Test Files 77 | #------------------------- 78 | tests/coverage* 79 | 80 | # Don't save phpunit under version control. 81 | phpunit 82 | 83 | #------------------------- 84 | # Composer 85 | #------------------------- 86 | vendor/ 87 | 88 | #------------------------- 89 | # IDE / Development Files 90 | #------------------------- 91 | 92 | # Modules Testing 93 | _modules/* 94 | 95 | # phpenv local config 96 | .php-version 97 | 98 | # Jetbrains editors (PHPStorm, etc) 99 | .idea/ 100 | *.iml 101 | 102 | # Netbeans 103 | nbproject/ 104 | build/ 105 | nbbuild/ 106 | dist/ 107 | nbdist/ 108 | nbactions.xml 109 | nb-configuration.xml 110 | .nb-gradle/ 111 | 112 | # Sublime Text 113 | *.tmlanguage.cache 114 | *.tmPreferences.cache 115 | *.stTheme.cache 116 | *.sublime-workspace 117 | *.sublime-project 118 | .phpintel 119 | /api/ 120 | 121 | # Visual Studio Code 122 | .vscode/ 123 | 124 | /results/ 125 | /phpunit*.xml 126 | /.phpunit.*.cache 127 | 128 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: vendor/bin/heroku-php-apache2 public/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sistem-Informasi-Keuangan 2 | 3 | ## Cara Install 4 | ### 1. Clone project 5 | ` git clone https://github.com/Qorthony/Sistem-Informasi-Keuangan.git ` 6 | ### 2. Composer Install 7 | - buka terminal/cli pada direktori project 8 | - kemudian ketik perintah : ` composer install ` 9 | ### 3. Buat database 10 | - buka phpmyadmin 11 | - buat database baru 12 | ### 4. Setting ENV 13 | - buka project pada text editor 14 | - duplikasi file env 15 | - rename file env menjadi .env 16 | - buka file .env 17 | - hapus tanda hashtag pada CI_ENVIRONMENT dan ganti nilai nya menjadi development 18 | - hapus tanda hashtag mulai dari database.default.hostname hingga database.default.DBDriver 19 | - setting nilai database, username, dan password sesuai yang ada di perangkatmu. jika tidak menggunakan password cukup kosongi bagian password 20 | ### 5. Migrate Database 21 | - buka terminal/cli pada direktori project 22 | - ketik perintah : ` php spark migrate` 23 | - ketik perintah : ` php spark db:seed AdminSeeder` 24 | ### 6. Jalankan Program 25 | - buka terminal/cli pada direktori project 26 | - ketik perintah : ` php spark serve ` 27 | - buka browser, ketik localhost:8080 28 | -------------------------------------------------------------------------------- /app/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Deny from all 6 | 7 | -------------------------------------------------------------------------------- /app/Common.php: -------------------------------------------------------------------------------- 1 | SYSTEMPATH, 37 | * 'App' => APPPATH 38 | * ]; 39 | * 40 | * @var array 41 | */ 42 | public $psr4 = [ 43 | APP_NAMESPACE => APPPATH, // For custom app namespace 44 | 'Config' => APPPATH . 'Config', 45 | ]; 46 | 47 | /** 48 | * ------------------------------------------------------------------- 49 | * Class Map 50 | * ------------------------------------------------------------------- 51 | * The class map provides a map of class names and their exact 52 | * location on the drive. Classes loaded in this manner will have 53 | * slightly faster performance because they will not have to be 54 | * searched for within one or more directories as they would if they 55 | * were being autoloaded through a namespace. 56 | * 57 | * Prototype: 58 | * 59 | * $classmap = [ 60 | * 'MyClass' => '/path/to/class/file.php' 61 | * ]; 62 | * 63 | * @var array 64 | */ 65 | public $classmap = []; 66 | } 67 | -------------------------------------------------------------------------------- /app/Config/Boot/development.php: -------------------------------------------------------------------------------- 1 | '127.0.0.1', 82 | 'port' => 11211, 83 | 'weight' => 1, 84 | 'raw' => false, 85 | ]; 86 | 87 | /* 88 | | ------------------------------------------------------------------------- 89 | | Redis settings 90 | | ------------------------------------------------------------------------- 91 | | Your Redis server can be specified below, if you are using 92 | | the Redis or Predis drivers. 93 | | 94 | */ 95 | public $redis = [ 96 | 'host' => '127.0.0.1', 97 | 'password' => null, 98 | 'port' => 6379, 99 | 'timeout' => 0, 100 | 'database' => 0, 101 | ]; 102 | 103 | /* 104 | |-------------------------------------------------------------------------- 105 | | Available Cache Handlers 106 | |-------------------------------------------------------------------------- 107 | | 108 | | This is an array of cache engine alias' and class names. Only engines 109 | | that are listed here are allowed to be used. 110 | | 111 | */ 112 | public $validHandlers = [ 113 | 'dummy' => \CodeIgniter\Cache\Handlers\DummyHandler::class, 114 | 'file' => \CodeIgniter\Cache\Handlers\FileHandler::class, 115 | 'memcached' => \CodeIgniter\Cache\Handlers\MemcachedHandler::class, 116 | 'predis' => \CodeIgniter\Cache\Handlers\PredisHandler::class, 117 | 'redis' => \CodeIgniter\Cache\Handlers\RedisHandler::class, 118 | 'wincache' => \CodeIgniter\Cache\Handlers\WincacheHandler::class, 119 | ]; 120 | } 121 | -------------------------------------------------------------------------------- /app/Config/Constants.php: -------------------------------------------------------------------------------- 1 | '', 34 | 'hostname' => 'localhost', 35 | 'username' => '', 36 | 'password' => '', 37 | 'database' => '', 38 | 'DBDriver' => 'MySQLi', 39 | 'DBPrefix' => '', 40 | 'pConnect' => false, 41 | 'DBDebug' => (ENVIRONMENT !== 'production'), 42 | 'cacheOn' => false, 43 | 'cacheDir' => '', 44 | 'charset' => 'utf8', 45 | 'DBCollat' => 'utf8_general_ci', 46 | 'swapPre' => '', 47 | 'encrypt' => false, 48 | 'compress' => false, 49 | 'strictOn' => false, 50 | 'failover' => [], 51 | 'port' => 3306, 52 | ]; 53 | 54 | /** 55 | * This database connection is used when 56 | * running PHPUnit database tests. 57 | * 58 | * @var array 59 | */ 60 | public $tests = [ 61 | 'DSN' => '', 62 | 'hostname' => '127.0.0.1', 63 | 'username' => '', 64 | 'password' => '', 65 | 'database' => ':memory:', 66 | 'DBDriver' => 'SQLite3', 67 | 'DBPrefix' => 'db_', // Needed to ensure we're working correctly with prefixes live. DO NOT REMOVE FOR CI DEVS 68 | 'pConnect' => false, 69 | 'DBDebug' => (ENVIRONMENT !== 'production'), 70 | 'cacheOn' => false, 71 | 'cacheDir' => '', 72 | 'charset' => 'utf8', 73 | 'DBCollat' => 'utf8_general_ci', 74 | 'swapPre' => '', 75 | 'encrypt' => false, 76 | 'compress' => false, 77 | 'strictOn' => false, 78 | 'failover' => [], 79 | 'port' => 3306, 80 | ]; 81 | 82 | //-------------------------------------------------------------------- 83 | 84 | public function __construct() 85 | { 86 | parent::__construct(); 87 | 88 | // Ensure that we always set the database group to 'tests' if 89 | // we are currently running an automated test suite, so that 90 | // we don't overwrite live data on accident. 91 | if (ENVIRONMENT === 'testing') 92 | { 93 | $this->defaultGroup = 'tests'; 94 | 95 | // Under Travis-CI, we can set an ENV var named 'DB_GROUP' 96 | // so that we can test against multiple databases. 97 | if ($group = getenv('DB')) 98 | { 99 | if (is_file(TESTPATH . 'travis/Database.php')) 100 | { 101 | require TESTPATH . 'travis/Database.php'; 102 | 103 | if (! empty($dbconfig) && array_key_exists($group, $dbconfig)) 104 | { 105 | $this->tests = $dbconfig[$group]; 106 | } 107 | } 108 | } 109 | } 110 | } 111 | 112 | //-------------------------------------------------------------------- 113 | 114 | } 115 | -------------------------------------------------------------------------------- /app/Config/DocTypes.php: -------------------------------------------------------------------------------- 1 | '', 14 | 'xhtml1-strict' => '', 15 | 'xhtml1-trans' => '', 16 | 'xhtml1-frame' => '', 17 | 'xhtml-basic11' => '', 18 | 'html5' => '', 19 | 'html4-strict' => '', 20 | 'html4-trans' => '', 21 | 'html4-frame' => '', 22 | 'mathml1' => '', 23 | 'mathml2' => '', 24 | 'svg10' => '', 25 | 'svg11' => '', 26 | 'svg11-basic' => '', 27 | 'svg11-tiny' => '', 28 | 'xhtml-math-svg-xh' => '', 29 | 'xhtml-math-svg-sh' => '', 30 | 'xhtml-rdfa-1' => '', 31 | 'xhtml-rdfa-2' => '', 32 | ]; 33 | } 34 | -------------------------------------------------------------------------------- /app/Config/Email.php: -------------------------------------------------------------------------------- 1 | 0) 32 | { 33 | ob_end_flush(); 34 | } 35 | 36 | ob_start(function ($buffer) { 37 | return $buffer; 38 | }); 39 | } 40 | 41 | /* 42 | * -------------------------------------------------------------------- 43 | * Debug Toolbar Listeners. 44 | * -------------------------------------------------------------------- 45 | * If you delete, they will no longer be collected. 46 | */ 47 | if (ENVIRONMENT !== 'production') 48 | { 49 | Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect'); 50 | Services::toolbar()->respond(); 51 | } 52 | }); 53 | -------------------------------------------------------------------------------- /app/Config/Exceptions.php: -------------------------------------------------------------------------------- 1 | \CodeIgniter\Filters\CSRF::class, 11 | 'toolbar' => \CodeIgniter\Filters\DebugToolbar::class, 12 | 'honeypot' => \CodeIgniter\Filters\Honeypot::class, 13 | 'auth' => \App\Filters\Auth::class, 14 | 'guest' => \App\Filters\Guest::class, 15 | 'role' => \App\Filters\RoleBased::class 16 | ]; 17 | 18 | // Always applied before every request 19 | public $globals = [ 20 | 'before' => [ 21 | //'honeypot' 22 | // 'csrf', 23 | ], 24 | 'after' => [ 25 | 'toolbar', 26 | //'honeypot' 27 | ], 28 | ]; 29 | 30 | // Works on all of a particular HTTP method 31 | // (GET, POST, etc) as BEFORE filters only 32 | // like: 'post' => ['CSRF', 'throttle'], 33 | public $methods = []; 34 | 35 | // List filter aliases and any before/after uri patterns 36 | // that they should run on, like: 37 | // 'isLoggedIn' => ['before' => ['account/*', 'profiles/*']], 38 | public $filters = []; 39 | } 40 | -------------------------------------------------------------------------------- /app/Config/ForeignCharacters.php: -------------------------------------------------------------------------------- 1 | \CodeIgniter\Format\JSONFormatter::class, 39 | 'application/xml' => \CodeIgniter\Format\XMLFormatter::class, 40 | 'text/xml' => \CodeIgniter\Format\XMLFormatter::class, 41 | ]; 42 | 43 | /* 44 | |-------------------------------------------------------------------------- 45 | | Formatters Options 46 | |-------------------------------------------------------------------------- 47 | | 48 | | Additional Options to adjust default formatters behaviour. 49 | | For each mime type, list the additional options that should be used. 50 | | 51 | */ 52 | public $formatterOptions = [ 53 | 'application/json' => JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES, 54 | 'application/xml' => 0, 55 | 'text/xml' => 0, 56 | ]; 57 | //-------------------------------------------------------------------- 58 | 59 | /** 60 | * A Factory method to return the appropriate formatter for the given mime type. 61 | * 62 | * @param string $mime 63 | * 64 | * @return \CodeIgniter\Format\FormatterInterface 65 | */ 66 | public function getFormatter(string $mime) 67 | { 68 | if (! array_key_exists($mime, $this->formatters)) 69 | { 70 | throw new \InvalidArgumentException('No Formatter defined for mime type: ' . $mime); 71 | } 72 | 73 | $class = $this->formatters[$mime]; 74 | 75 | if (! class_exists($class)) 76 | { 77 | throw new \BadMethodCallException($class . ' is not a valid Formatter.'); 78 | } 79 | 80 | return new $class(); 81 | } 82 | 83 | //-------------------------------------------------------------------- 84 | 85 | } 86 | -------------------------------------------------------------------------------- /app/Config/Honeypot.php: -------------------------------------------------------------------------------- 1 | {label}'; 35 | 36 | /** 37 | * Honeypot container 38 | * 39 | * @var string 40 | */ 41 | public $container = '
{template}
'; 42 | } 43 | -------------------------------------------------------------------------------- /app/Config/Images.php: -------------------------------------------------------------------------------- 1 | \CodeIgniter\Images\Handlers\GDHandler::class, 29 | 'imagick' => \CodeIgniter\Images\Handlers\ImageMagickHandler::class, 30 | ]; 31 | } 32 | -------------------------------------------------------------------------------- /app/Config/Kint.php: -------------------------------------------------------------------------------- 1 | [ 79 | 80 | /* 81 | * The log levels that this handler will handle. 82 | */ 83 | 'handles' => [ 84 | 'critical', 85 | 'alert', 86 | 'emergency', 87 | 'debug', 88 | 'error', 89 | 'info', 90 | 'notice', 91 | 'warning', 92 | ], 93 | 94 | /* 95 | * The default filename extension for log files. 96 | * An extension of 'php' allows for protecting the log files via basic 97 | * scripting, when they are to be stored under a publicly accessible directory. 98 | * 99 | * Note: Leaving it blank will default to 'log'. 100 | */ 101 | 'fileExtension' => '', 102 | 103 | /* 104 | * The file system permissions to be applied on newly created log files. 105 | * 106 | * IMPORTANT: This MUST be an integer (no quotes) and you MUST use octal 107 | * integer notation (i.e. 0700, 0644, etc.) 108 | */ 109 | 'filePermissions' => 0644, 110 | 111 | /* 112 | * Logging Directory Path 113 | * 114 | * By default, logs are written to WRITEPATH . 'logs/' 115 | * Specify a different destination here, if desired. 116 | */ 117 | 'path' => '', 118 | ], 119 | 120 | /** 121 | * The ChromeLoggerHandler requires the use of the Chrome web browser 122 | * and the ChromeLogger extension. Uncomment this block to use it. 123 | */ 124 | // 'CodeIgniter\Log\Handlers\ChromeLoggerHandler' => [ 125 | // /* 126 | // * The log levels that this handler will handle. 127 | // */ 128 | // 'handles' => ['critical', 'alert', 'emergency', 'debug', 129 | // 'error', 'info', 'notice', 'warning'], 130 | // ] 131 | ]; 132 | } 133 | -------------------------------------------------------------------------------- /app/Config/Migrations.php: -------------------------------------------------------------------------------- 1 | php spark migrate:create 41 | | 42 | | Typical formats: 43 | | YmdHis_ 44 | | Y-m-d-His_ 45 | | Y_m_d_His_ 46 | | 47 | */ 48 | public $timestampFormat = 'Y-m-d-His_'; 49 | 50 | } 51 | -------------------------------------------------------------------------------- /app/Config/Modules.php: -------------------------------------------------------------------------------- 1 | 'CodeIgniter\Pager\Views\default_full', 22 | 'default_simple' => 'CodeIgniter\Pager\Views\default_simple', 23 | 'default_head' => 'CodeIgniter\Pager\Views\default_head', 24 | ]; 25 | 26 | /* 27 | |-------------------------------------------------------------------------- 28 | | Items Per Page 29 | |-------------------------------------------------------------------------- 30 | | 31 | | The default number of results shown in a single page. 32 | | 33 | */ 34 | public $perPage = 20; 35 | } 36 | -------------------------------------------------------------------------------- /app/Config/Paths.php: -------------------------------------------------------------------------------- 1 | setDefaultNamespace('App\Controllers'); 19 | $routes->setDefaultController('Home'); 20 | $routes->setDefaultMethod('index'); 21 | $routes->setTranslateURIDashes(false); 22 | $routes->set404Override(); 23 | $routes->setAutoRoute(true); 24 | 25 | /** 26 | * -------------------------------------------------------------------- 27 | * Route Definitions 28 | * -------------------------------------------------------------------- 29 | */ 30 | 31 | // We get a performance increase by specifying the default 32 | // route since we don't have to scan directories. 33 | // $routes->get('/', function () 34 | // { 35 | // return view('welcome_message'); 36 | // }); 37 | 38 | // login 39 | $routes->get('/login','Login::form', ["filter"=>"guest"]); 40 | $routes->post('/login','Login::login', ["filter"=>"guest"]); 41 | $routes->get('/logout','Login::logout'); 42 | // home 43 | $routes->get('/','Home::dashboard',["filter"=>"auth"]); 44 | 45 | // User 46 | $routes->get('/user','User::index',["filter"=>"role:1"]); 47 | $routes->post('/user/add','User::add',["filter"=>"role:1"]); 48 | $routes->get('/user/del/(:num)','User::delete/$1',["filter"=>"role:1"]); 49 | $routes->post('/user/edit/(:num)','User::edit/$1',["filter"=>"role:1"]); 50 | 51 | // Akun 52 | $routes->get('/akun','Akun::index',["filter"=>"role:1,2"]); 53 | $routes->post('/akun/add','Akun::add',["filter"=>"role:1,2"]); 54 | $routes->get('/akun/del/(:num)','Akun::delete/$1',["filter"=>"role:1,2"]); 55 | $routes->post('/akun/edit/(:num)','Akun::edit/$1',["filter"=>"role:1,2"]); 56 | 57 | // Jurnal Umum 58 | $routes->get('/jurnal_umum','JurnalUmum::index',["filter"=>"role:1,2"]); 59 | $routes->post('/jurnal_umum/add','JurnalUmum::add',["filter"=>"role:1,2"]); 60 | $routes->get('/jurnal_umum/del/(:num)','JurnalUmum::delete/$1',["filter"=>"role:1,2"]); 61 | $routes->post('/jurnal_umum/edit/(:num)','JurnalUmum::edit/$1',["filter"=>"role:1,2"]); 62 | 63 | // Jurnal Penyesuaian 64 | $routes->get('/jurnal_penyesuaian','JurnalPenyesuaian::index',["filter"=>"role:1,2"]); 65 | $routes->post('/jurnal_penyesuaian/add','JurnalPenyesuaian::add',["filter"=>"role:1,2"]); 66 | $routes->get('/jurnal_penyesuaian/del/(:num)','JurnalPenyesuaian::delete/$1',["filter"=>"role:1,2"]); 67 | $routes->post('/jurnal_penyesuaian/edit/(:num)','JurnalPenyesuaian::edit/$1',["filter"=>"role:1,2"]); 68 | 69 | // Profile 70 | $routes->get('/profile','User::profile',["filter"=>"auth"]); 71 | $routes->post('/profile/update','User::updateProfile',["filter"=>"auth"]); 72 | $routes->post('/profile/changePass','User::changePassword',["filter"=>"auth"]); 73 | 74 | // Laporan 75 | $routes->get('/laporan','Laporan::index',["filter"=>"auth"]); 76 | 77 | /** 78 | * -------------------------------------------------------------------- 79 | * Additional Routing 80 | * -------------------------------------------------------------------- 81 | * 82 | * There will often be times that you need additional routing and you 83 | * need it to be able to override any defaults in this file. Environment 84 | * based routes is one such time. require() additional route files here 85 | * to make that happen. 86 | * 87 | * You will have access to the $routes object within that file without 88 | * needing to reload it. 89 | */ 90 | if (file_exists(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php')) 91 | { 92 | require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php'; 93 | } 94 | -------------------------------------------------------------------------------- /app/Config/Services.php: -------------------------------------------------------------------------------- 1 | 'CodeIgniter\Validation\Views\list', 30 | 'single' => 'CodeIgniter\Validation\Views\single', 31 | ]; 32 | 33 | //-------------------------------------------------------------------- 34 | // Rules 35 | //-------------------------------------------------------------------- 36 | } 37 | -------------------------------------------------------------------------------- /app/Config/View.php: -------------------------------------------------------------------------------- 1 | request->getVar('keyword'); 13 | $akun = new AkunModel(); 14 | if ( $keyword ) { 15 | $data_akun = $akun->like('no_akun',$keyword) 16 | ->orLike('nama_akun', $keyword) 17 | ->findAll(); 18 | // dd($data_akun); 19 | }else { 20 | $data_akun = $akun->findAll(); 21 | } 22 | 23 | // dd($data_user); 24 | return view('data_akun', ["data_akun" => $data_akun]); 25 | } 26 | 27 | public function add() 28 | { 29 | if (!$this->validate([ 30 | 'no_akun' => "required|is_unique[akun.no_akun]|numeric", 31 | 'nama_akun' => 'required|alpha_numeric_space|is_unique[akun.nama_akun]', 32 | 'keterangan' => "required" 33 | ])) { 34 | return redirect()->to('/akun')->with('errors', $this->validator->getErrors()); 35 | } 36 | 37 | $no_akun = $this->request->getPost('no_akun'); 38 | $nama_akun = $this->request->getPost('nama_akun'); 39 | $keterangan = $this->request->getPost('keterangan'); 40 | 41 | $akun = new AkunModel; 42 | $data = [ 43 | 'no_akun' => $no_akun, 44 | 'nama_akun' => $nama_akun, 45 | 'keterangan' => $keterangan, 46 | 'created_at' => Time::now(), 47 | 'updated_at' => Time::now() 48 | ]; 49 | // dd($data); 50 | $akun->insert($data); 51 | 52 | return redirect()->to('/akun')->with('success', 'Berhasil menambah akun!'); 53 | } 54 | 55 | public function delete($no_akun) 56 | { 57 | $akun = new AkunModel(); 58 | $akun->delete($no_akun); 59 | return redirect()->to('/akun')->with('success','Data berhasil dihapus!'); 60 | } 61 | 62 | public function edit($id) 63 | { 64 | $no_akun = $this->request->getPost('no_akun'); 65 | $nama_akun = $this->request->getPost('nama_akun'); 66 | $keterangan = $this->request->getPost('keterangan'); 67 | 68 | if (!$this->validate([ 69 | 'no_akun' => "required|is_unique[akun.no_akun,no_akun,{$no_akun}]|numeric", 70 | 'nama_akun' => "required|alpha_numeric_space|is_unique[akun.nama_akun,nama_akun,{$nama_akun}]", 71 | 'keterangan' => "required" 72 | ])) { 73 | return redirect()->to('/akun')->with('errors', $this->validator->getErrors()); 74 | } 75 | 76 | 77 | $akun = new AkunModel; 78 | $data = [ 79 | 'no_akun' => $no_akun, 80 | 'nama_akun' => $nama_akun, 81 | 'keterangan' => $keterangan, 82 | 'created_at' => Time::now(), 83 | 'updated_at' => Time::now() 84 | ]; 85 | 86 | $akun->update($id, $data); 87 | 88 | return redirect()->to('/akun')->with('success', 'Berhasil edit akun!'); 89 | } 90 | 91 | // public function profile() 92 | // { 93 | // $akun = new AkunModel(); 94 | // $profile = $akun->find(session('akun_id')); 95 | // // dd($profile); 96 | // return view('profile',["profile"=>$profile ]); 97 | // } 98 | 99 | // public function updateProfile() 100 | // { 101 | // $no_akun = $this->request->getPost('no_akun'); 102 | // $nama_akun = $this->request->getPost('nama_akun'); 103 | // $keterangan = $this->request->getPost('keterangan'); 104 | 105 | // if (!$this->validate([ 106 | // 'no_akun' => "required|is_unique[akun.no_akun,no_akun,{$no_akun}]|numeric", 107 | // 'nama_akun' => "required|alpha_numeric_space|is_unique[users.akunname,akunname,{$nama_akun}]", 108 | // 'keterangan' => "required" 109 | // ])) { 110 | // return redirect()->to('/profile')->with('errors', $this->validator->getErrors()); 111 | // } 112 | 113 | // $akun= new AkunModel(); 114 | // $data = [ 115 | // "no_akun" => $no_akun, 116 | // "akunname" => $nama_akun, 117 | // "jenis_akun" => $keterangan, 118 | // ]; 119 | // $akun->update(session("akun_id"), $data); 120 | 121 | // return redirect()->to('/profile')->with('success', 'Berhasil edit profile!'); 122 | // } 123 | 124 | // public function changePassword() 125 | // { 126 | // $pw_baru = $this->request->getPost("password_baru"); 127 | 128 | // if (!$this->validate([ 129 | // "password_baru" => "required", 130 | // "konfirmasi_password" => "required|matches[password_baru]" 131 | // ])) { 132 | // return redirect()->to('/profile')->with('errors', $this->validator->getErrors()); 133 | // } 134 | 135 | // $akun = new AkunModel(); 136 | // $akun->update(session("akun_id"), ["password"=>password_hash($pw_baru, PASSWORD_DEFAULT)]); 137 | 138 | // return redirect()->to('/profile')->with('success', 'Berhasil ganti password!'); 139 | 140 | // } 141 | 142 | //-------------------------------------------------------------------- 143 | 144 | } 145 | -------------------------------------------------------------------------------- /app/Controllers/BaseController.php: -------------------------------------------------------------------------------- 1 | session = \Config\Services::session(); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /app/Controllers/Home.php: -------------------------------------------------------------------------------- 1 | selectSum('kredit') 19 | ->like('no_akun', '4', 'after') 20 | ->where('tgl_transaksi', date('Y-m-d', strtotime(Time::now()))) 21 | ->first(); 22 | 23 | $pengeluaranHariIni = $JU->selectSum('debit') 24 | ->like('no_akun', '5', 'after') 25 | ->where('tgl_transaksi', date('Y-m-d', strtotime(Time::now()))) 26 | ->first(); 27 | 28 | $pendapatanBulanIni = $JU->selectSum('kredit') 29 | ->like('no_akun', '4', 'after') 30 | ->where('tgl_transaksi >', date('Y-m-', strtotime(Time::now())) . '1') 31 | ->where('tgl_transaksi <', date('Y-m-t', strtotime(Time::now()))) 32 | ->first(); 33 | 34 | $pengeluaranBulanIni = $JU->selectSum('debit') 35 | ->like('no_akun', '5', 'after') 36 | ->where('tgl_transaksi >', date('Y-m-', strtotime(Time::now())) . '1') 37 | ->where('tgl_transaksi <', date('Y-m-t', strtotime(Time::now()))) 38 | ->first(); 39 | 40 | 41 | 42 | $grafikBulanan = [ 43 | "bulan" => $this->getSixMonthAgo(), 44 | "pendapatan" => $this->getGrafik6BulanTerakhir('pendapatan'), 45 | "pengeluaran" => $this->getGrafik6BulanTerakhir('pengeluaran') 46 | ]; 47 | 48 | // dd($pendapatanBulanIni); 49 | $data = [ 50 | "pendapatanHariIni" => $pendapatanHariIni, 51 | "pengeluaranHariIni" => $pengeluaranHariIni, 52 | "pendapatanBulanIni" => $pendapatanBulanIni, 53 | "pengeluaranBulanIni" => $pengeluaranBulanIni, 54 | "grafikBulanan" => $grafikBulanan 55 | ]; 56 | // dd($grafikBulanan); 57 | return view('dashboard', $data); 58 | } 59 | 60 | private function getSixMonthAgo() 61 | { 62 | $month = []; 63 | $startdate = strtotime("6 month ago"); 64 | $enddate = strtotime("+7 months", $startdate); 65 | 66 | while ($startdate < $enddate) { 67 | array_push($month, date("F", $startdate)); 68 | $startdate = strtotime("+1 month", $startdate); 69 | } 70 | return $month; 71 | } 72 | 73 | private function getGrafik6BulanTerakhir($tipe) 74 | { 75 | $JU = new JUModel(); 76 | $kolom = ''; 77 | $prefix = ''; 78 | switch ($tipe) { 79 | case 'pendapatan': 80 | $kolom = 'kredit'; 81 | $prefix = '4'; 82 | break; 83 | case 'pengeluaran': 84 | $kolom = 'debit'; 85 | $prefix = '5'; 86 | break; 87 | 88 | default: 89 | # code... 90 | break; 91 | } 92 | 93 | $data = []; 94 | $startdate = strtotime("6 month ago"); 95 | $enddate = strtotime("+7 months", $startdate); 96 | while ($startdate < $enddate) { 97 | $dataPerBulan = $JU->selectSum($kolom) 98 | ->like('no_akun', $prefix , 'after') 99 | ->where('tgl_transaksi >', date('Y-m-', $startdate) . '1') 100 | ->where('tgl_transaksi <', date('Y-m-t', $startdate)) 101 | ->first(); 102 | $dataPerBulan = $dataPerBulan[$kolom] == null ? '0' : $dataPerBulan[$kolom]; 103 | array_push($data, $dataPerBulan); 104 | $startdate = strtotime("+1 month", $startdate); 105 | } 106 | return $data; 107 | } 108 | 109 | //-------------------------------------------------------------------- 110 | 111 | } 112 | -------------------------------------------------------------------------------- /app/Controllers/JurnalPenyesuaian.php: -------------------------------------------------------------------------------- 1 | request->getVar('keyword'); 19 | $jurnal_penyesuaian = new JPModel(); 20 | if ( $keyword ) { 21 | $data_jurnal_penyesuaian = $jurnal_penyesuaian->like('no_akun',$keyword) 22 | ->orLike('tgl_penyesuaian', $keyword) 23 | ->orLike('keterangan_penyesuaian', $keyword) 24 | ->findAll(); 25 | // dd($data_jurnal_penyesuaian); 26 | }else { 27 | $data_jurnal_penyesuaian = $jurnal_penyesuaian->findAll(); 28 | } 29 | 30 | $akuns = new AkunModel(); 31 | $akuns = $akuns->findAll(); 32 | 33 | $data = [ 34 | "data_JP" => $data_jurnal_penyesuaian, 35 | "akuns"=> $akuns 36 | ]; 37 | return view('data_jurnal_penyesuaian', $data); 38 | } 39 | 40 | public function add() 41 | { 42 | if (!$this->validate([ 43 | 'tanggal' => "required", 44 | 'keterangan' => "required", 45 | 'akun' => "required|numeric", 46 | 'debit' => "required|numeric", 47 | 'kredit' => "required|numeric" 48 | ])) { 49 | return redirect()->to('/jurnal_penyesuaian')->with('errors', $this->validator->getErrors()); 50 | } 51 | 52 | $id_penyesuaian = ''.strtotime(Time::now()).$this->request->getPost('akun'); 53 | $keterangan_penyesuaian = $this->request->getPost('keterangan'); 54 | $tgl_penyesuaian = $this->request->getPost('tanggal'); 55 | $no_akun = $this->request->getPost('akun'); 56 | $debit = $this->request->getPost('debit'); 57 | $kredit = $this->request->getPost('kredit'); 58 | $nip = session('user_id'); 59 | 60 | $JP = new JPModel(); 61 | $data = [ 62 | 'id_penyesuaian' => $id_penyesuaian, 63 | 'keterangan_penyesuaian' => $keterangan_penyesuaian, 64 | 'tgl_penyesuaian' => $tgl_penyesuaian, 65 | 'no_akun' => $no_akun, 66 | 'debit' => $debit, 67 | 'kredit' => $kredit, 68 | 'nip' => $nip, 69 | 'created_at' => Time::now(), 70 | 'updated_at' => Time::now() 71 | ]; 72 | // dd($data); 73 | $JP->insert($data); 74 | 75 | return redirect()->to('/jurnal_penyesuaian')->with('success', 'Berhasil menambah Jurnal Penyesuaian!'); 76 | } 77 | 78 | public function delete($no_transaksi) 79 | { 80 | $jurnal_penyesuaian = new JPModel(); 81 | $jurnal_penyesuaian->delete($no_transaksi); 82 | return redirect()->to('/jurnal_penyesuaian')->with('success','Data berhasil dihapus!'); 83 | } 84 | 85 | public function edit($id) 86 | { 87 | if (!$this->validate([ 88 | 'tanggal' => "required", 89 | 'keterangan' => "required", 90 | 'akun' => "required|numeric", 91 | 'debit' => "required|numeric", 92 | 'kredit' => "required|numeric" 93 | ])) { 94 | return redirect()->to('/jurnal_penyesuaian')->with('errors', $this->validator->getErrors()); 95 | } 96 | 97 | 98 | $id_penyesuaian = ''.strtotime(Time::now()).$this->request->getPost('akun'); 99 | $keterangan_penyesuaian = $this->request->getPost('keterangan'); 100 | $tgl_penyesuaian = $this->request->getPost('tanggal'); 101 | $no_akun = $this->request->getPost('akun'); 102 | $debit = $this->request->getPost('debit'); 103 | $kredit = $this->request->getPost('kredit'); 104 | $nip = session('user_id'); 105 | 106 | $jurnal_penyesuaian= new JPModel(); 107 | $data = [ 108 | 'id_penyesuaian' => $id_penyesuaian, 109 | 'keterangan_penyesuaian' => $keterangan_penyesuaian, 110 | 'tgl_penyesuaian' => $tgl_penyesuaian, 111 | 'no_akun' => $no_akun, 112 | 'debit' => $debit, 113 | 'kredit' => $kredit, 114 | 'nip' => $nip, 115 | 'created_at' => Time::now(), 116 | 'updated_at' => Time::now() 117 | ]; 118 | 119 | $jurnal_penyesuaian->update($id, $data); 120 | 121 | return redirect()->to('/jurnal_penyesuaian')->with('success', 'Berhasil edit Jurnal Penyesuaian!'); 122 | } 123 | //-------------------------------------------------------------------- 124 | 125 | } 126 | -------------------------------------------------------------------------------- /app/Controllers/JurnalUmum.php: -------------------------------------------------------------------------------- 1 | request->getVar('keyword'); 18 | $jurnal_umum = new JurnalUmumModel(); 19 | if ($keyword) { 20 | $data_jurnal_umum = $jurnal_umum->like('no_akun', $keyword) 21 | ->orLike('tgl_transaksi', $keyword) 22 | ->orLike('keterangan_transaksi', $keyword) 23 | ->findAll(); 24 | // dd($data_jurnal_umum); 25 | } else { 26 | $data_jurnal_umum = $jurnal_umum->findAll(); 27 | } 28 | $akuns = new AkunModel(); 29 | $akuns = $akuns->findAll(); 30 | 31 | // dd($data_user); 32 | return view('data_jurnal_umum', ["data_jurnal_umum" => $data_jurnal_umum,"akuns"=>$akuns]); 33 | } 34 | 35 | public function add() 36 | { 37 | if (!$this->validate([ 38 | 'tgl_transaksi' => "required", 39 | 'keterangan_transaksi' => "required", 40 | 'no_akun' => "required|numeric", 41 | 'debit' => "required|numeric", 42 | 'kredit' => "required|numeric", 43 | ])) { 44 | return redirect()->to('/jurnal_umum')->with('errors', $this->validator->getErrors()); 45 | } 46 | 47 | $no_transaksi = ''.strtotime(Time::now()).$this->request->getPost('akun'); 48 | $keterangan_transaksi = $this->request->getPost('keterangan_transaksi'); 49 | $tgl_transaksi = $this->request->getPost('tgl_transaksi'); 50 | $no_akun = $this->request->getPost('no_akun'); 51 | $debit = $this->request->getPost('debit'); 52 | $kredit = $this->request->getPost('kredit'); 53 | $nip = session('user_id'); 54 | 55 | $JU = new JurnalUmumModel(); 56 | $data = [ 57 | 'no_transaksi' => $no_transaksi, 58 | 'keterangan_transaksi' => $keterangan_transaksi, 59 | 'tgl_transaksi' => $tgl_transaksi, 60 | 'no_akun' => $no_akun, 61 | 'debit' => $debit, 62 | 'kredit' => $kredit, 63 | 'nip' => $nip, 64 | 'created_at' => Time::now(), 65 | 'updated_at' => Time::now() 66 | ]; 67 | // dd($data); 68 | $JU->insert($data); 69 | 70 | return redirect()->to('/jurnal_umum')->with('success', 'Berhasil menambah Jurnal Umum!'); 71 | } 72 | 73 | public function delete($no_transaksi) 74 | { 75 | $jurnal_umum = new JurnalUmumModel(); 76 | $jurnal_umum->delete($no_transaksi); 77 | return redirect()->to('/jurnal_umum')->with('success', 'Data berhasil dihapus!'); 78 | } 79 | 80 | public function edit($id) 81 | { 82 | if (!$this->validate([ 83 | 'tgl_transaksi' => "required", 84 | 'keterangan_transaksi' => "required", 85 | 'no_akun' => "required|numeric", 86 | 'debit' => "required|numeric", 87 | 'kredit' => "required|numeric", 88 | ])) { 89 | return redirect()->to('/jurnal_umum')->with('errors', $this->validator->getErrors()); 90 | } 91 | 92 | $no_transaksi = ''.strtotime(Time::now()).$this->request->getPost('akun'); 93 | $keterangan_transaksi = $this->request->getPost('keterangan_transaksi'); 94 | $tgl_transaksi = $this->request->getPost('tgl_transaksi'); 95 | $no_akun = $this->request->getPost('no_akun'); 96 | $debit = $this->request->getPost('debit'); 97 | $kredit = $this->request->getPost('kredit'); 98 | $nip = session('user_id'); 99 | 100 | $jurnal_umum = new JurnalUmumModel; 101 | $data = [ 102 | 'no_transaksi' => $no_transaksi, 103 | 'tgl_transaksi' => $tgl_transaksi, 104 | 'keterangan_transaksi' => $keterangan_transaksi, 105 | 'no_akun' => $no_akun, 106 | 'debit' => $debit, 107 | 'kredit' => $kredit, 108 | 'nip' => $nip, 109 | 'created_at' => Time::now(), 110 | 'updated_at' => Time::now() 111 | ]; 112 | 113 | $jurnal_umum->update($id, $data); 114 | 115 | return redirect()->to('/jurnal_umum')->with('success', 'Berhasil edit Jurnal Umum!'); 116 | } 117 | 118 | //-------------------------------------------------------------------- 119 | 120 | } 121 | -------------------------------------------------------------------------------- /app/Controllers/Login.php: -------------------------------------------------------------------------------- 1 | request->getVar('email'); 19 | $password = $this->request->getVar('password'); 20 | $data = $model->where('email', $email) 21 | ->orWhere('nip', $email) 22 | ->first(); 23 | 24 | if ($data) { 25 | $pass = $data['password']; 26 | $verify_pass = password_verify($password, $pass); 27 | 28 | if ($verify_pass) { 29 | // echo "

Berhasil login

"; 30 | $ses_data = [ 31 | 'user_id' => $data['nip'], 32 | 'user_name' => $data['username'], 33 | 'user_email' => $data['email'], 34 | 'user_role' => $data['jenis_user'], 35 | 'logged_in' => TRUE 36 | ]; 37 | 38 | $session->set($ses_data); 39 | return redirect()->to('/'); 40 | } else { 41 | // echo "

Password salah

"; 42 | $session->setFlashdata('errors', 'Password salah!'); 43 | return redirect()->to('/login'); 44 | } 45 | } else { 46 | // echo "

Email salah

"; 47 | $session->setFlashdata('errors', 'Email salah!'); 48 | return redirect()->to('/login'); 49 | } 50 | } 51 | 52 | public function logout() 53 | { 54 | $session = session(); 55 | $session->destroy(); 56 | return redirect()->to('/login'); 57 | } 58 | 59 | //-------------------------------------------------------------------- 60 | 61 | } 62 | -------------------------------------------------------------------------------- /app/Controllers/User.php: -------------------------------------------------------------------------------- 1 | request->getVar('keyword'); 13 | $user = new UserModel(); 14 | if ( $keyword ) { 15 | $data_user = $user->like('nip',$keyword) 16 | ->orLike('username', $keyword) 17 | ->orLike('email', $keyword) 18 | ->findAll(); 19 | // dd($data_user); 20 | }else { 21 | $data_user = $user->findAll(); 22 | } 23 | 24 | return view('data_user', ["data_users" => $data_user]); 25 | } 26 | 27 | public function add() 28 | { 29 | if (!$this->validate([ 30 | 'nip' => "required|is_unique[users.nip]|numeric", 31 | 'email' => "required|is_unique[users.email]|valid_email", 32 | 'nama' => 'required|alpha_numeric_space|is_unique[users.username]', 33 | 'keterangan' => "required", 34 | 'password' => "required" 35 | ])) { 36 | return redirect()->to('/user')->with('errors', $this->validator->getErrors()); 37 | } 38 | 39 | $nip = $this->request->getPost('nip'); 40 | $nama = $this->request->getPost('nama'); 41 | $email = $this->request->getPost('email'); 42 | $keterangan = $this->request->getPost('keterangan'); 43 | $password = $this->request->getPost('password'); 44 | 45 | $user = new UserModel; 46 | $data = [ 47 | 'nip' => $nip, 48 | 'username' => $nama, 49 | 'email' => $email, 50 | 'password' => password_hash($password, PASSWORD_DEFAULT), 51 | 'jenis_user' => $keterangan, 52 | 'created_at' => Time::now(), 53 | 'updated_at' => Time::now() 54 | ]; 55 | // dd($data); 56 | $user->insert($data); 57 | 58 | return redirect()->to('/user')->with('success', 'Berhasil menambah user!'); 59 | } 60 | 61 | public function delete($nip) 62 | { 63 | $user = new UserModel(); 64 | $user->delete($nip); 65 | return redirect()->to('/user')->with('success','Data berhasil dihapus!'); 66 | } 67 | 68 | public function edit($id) 69 | { 70 | $nip = $this->request->getPost('nip'); 71 | $nama = $this->request->getPost('nama'); 72 | $email = $this->request->getPost('email'); 73 | $keterangan = $this->request->getPost('keterangan'); 74 | $password = $this->request->getPost('password'); 75 | 76 | if (!$this->validate([ 77 | 'nip' => "required|is_unique[users.nip,nip,{$nip}]|numeric", 78 | 'email' => "required|is_unique[users.email,email,{$email}]|valid_email", 79 | 'nama' => "required|alpha_numeric_space|is_unique[users.username,username,{$nama}]", 80 | 'keterangan' => "required", 81 | 'password' => "required" 82 | ])) { 83 | return redirect()->to('/user')->with('errors', $this->validator->getErrors()); 84 | } 85 | 86 | 87 | $user = new UserModel; 88 | $data = [ 89 | 'nip' => $nip, 90 | 'username' => $nama, 91 | 'email' => $email, 92 | 'password' => password_hash($password, PASSWORD_DEFAULT), 93 | 'jenis_user' => $keterangan, 94 | 'created_at' => Time::now(), 95 | 'updated_at' => Time::now() 96 | ]; 97 | 98 | $user->update($id, $data); 99 | 100 | return redirect()->to('/user')->with('success', 'Berhasil edit user!'); 101 | } 102 | 103 | public function profile() 104 | { 105 | $user = new UserModel(); 106 | $profile = $user->find(session('user_id')); 107 | // dd($profile); 108 | return view('profile',["profile"=>$profile ]); 109 | } 110 | 111 | public function updateProfile() 112 | { 113 | $nip = $this->request->getPost('nip'); 114 | $nama = $this->request->getPost('nama'); 115 | $email = $this->request->getPost('email'); 116 | 117 | if (!$this->validate([ 118 | 'nip' => "required|is_unique[users.nip,nip,{$nip}]|numeric", 119 | 'email' => "required|is_unique[users.email,email,{$email}]|valid_email", 120 | 'nama' => "required|alpha_numeric_space|is_unique[users.username,username,{$nama}]", 121 | ])) { 122 | return redirect()->to('/profile')->with('errors', $this->validator->getErrors()); 123 | } 124 | 125 | $user = new UserModel(); 126 | $data = [ 127 | "nip" => $nip, 128 | "username" => $nama, 129 | "email" => $email, 130 | ]; 131 | $user->update(session("user_id"), $data); 132 | 133 | return redirect()->to('/profile')->with('success', 'Berhasil edit profile!'); 134 | } 135 | 136 | public function changePassword() 137 | { 138 | $pw_baru = $this->request->getPost("password_baru"); 139 | 140 | if (!$this->validate([ 141 | "password_baru" => "required", 142 | "konfirmasi_password" => "required|matches[password_baru]" 143 | ])) { 144 | return redirect()->to('/profile')->with('errors', $this->validator->getErrors()); 145 | } 146 | 147 | $user = new UserModel(); 148 | $user->update(session("user_id"), ["password"=>password_hash($pw_baru, PASSWORD_DEFAULT)]); 149 | 150 | return redirect()->to('/profile')->with('success', 'Berhasil ganti password!'); 151 | 152 | } 153 | 154 | //-------------------------------------------------------------------- 155 | 156 | } 157 | -------------------------------------------------------------------------------- /app/Database/Migrations/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/app/Database/Migrations/.gitkeep -------------------------------------------------------------------------------- /app/Database/Migrations/2020-11-02-150333_user.php: -------------------------------------------------------------------------------- 1 | forge->addField([ 12 | 'nip' => [ 13 | 'type' => 'VARCHAR', 14 | 'constraint' => '20', 15 | ], 16 | 'username' => [ 17 | 'type' => 'VARCHAR', 18 | 'constraint' => '100', 19 | ], 20 | 'email' => [ 21 | 'type' => 'VARCHAR', 22 | 'constraint' => '100', 23 | ], 24 | 'password' => [ 25 | 'type' => 'VARCHAR', 26 | 'constraint' => '255' 27 | ], 28 | 'jenis_user' => [ 29 | 'type' => 'VARCHAR', 30 | 'constraint' => '20' 31 | ], 32 | 'created_at' => [ 33 | 'type' => 'DATETIME', 34 | 'null' => true, 35 | ], 36 | 'updated_at' => [ 37 | 'type' => 'DATETIME', 38 | 'null' => true 39 | ] 40 | ]); 41 | $this->forge->addKey('nip', true); 42 | $this->forge->createTable('users'); 43 | } 44 | 45 | //-------------------------------------------------------------------- 46 | 47 | public function down() 48 | { 49 | $this->forge->dropTable('users'); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/Database/Migrations/2020-11-02-150447_akun.php: -------------------------------------------------------------------------------- 1 | forge->addField([ 10 | 'no_akun' => [ 11 | 'type' => 'VARCHAR', 12 | 'constraint' => '20' 13 | ], 14 | 'nama_akun' => [ 15 | 'type' => 'VARCHAR', 16 | 'constraint' => '100', 17 | ], 18 | 'keterangan' => [ 19 | 'type' => 'VARCHAR', 20 | 'constraint' => '255', 21 | 'null' => true 22 | ], 23 | 'created_at' => [ 24 | 'type' => 'DATETIME', 25 | 'null' => true, 26 | ], 27 | 'updated_at' => [ 28 | 'type' => 'DATETIME', 29 | 'null' => true 30 | ] 31 | ]); 32 | $this->forge->addKey('no_akun', true); 33 | $this->forge->createTable('akun'); 34 | } 35 | 36 | //-------------------------------------------------------------------- 37 | 38 | public function down() 39 | { 40 | $this->forge->dropTable('akun'); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/Database/Migrations/2020-11-02-150501_jurnalUmum.php: -------------------------------------------------------------------------------- 1 | forge->addField([ 10 | 'no_transaksi' => [ 11 | 'type' => 'VARCHAR', 12 | 'constraint' => '20' 13 | ], 14 | 'tgl_transaksi' => [ 15 | 'type' => 'DATE', 16 | 17 | ], 18 | 'keterangan_transaksi' => [ 19 | 'type' => 'VARCHAR', 20 | 'constraint' => '100' 21 | ], 22 | 'no_akun' => [ 23 | 'type' => 'VARCHAR', 24 | 'constraint' => '20' 25 | ], 26 | 'debit' => [ 27 | 'type' => 'INT', 28 | ], 29 | 'kredit' => [ 30 | 'type' => 'INT', 31 | ], 32 | 'nip' => [ 33 | 'type' => 'VARCHAR', 34 | 'constraint' => '20' 35 | ], 36 | 'created_at' => [ 37 | 'type' => 'DATETIME', 38 | 'null' => true, 39 | ], 40 | 'updated_at' => [ 41 | 'type' => 'DATETIME', 42 | 'null' => true 43 | ] 44 | ]); 45 | $this->forge->addKey('no_transaksi', true); 46 | $this->forge->createTable('jurnal_umum'); 47 | } 48 | 49 | //-------------------------------------------------------------------- 50 | 51 | public function down() 52 | { 53 | $this->forge->dropTable('jurnal_umum'); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/Database/Migrations/2020-11-02-150509_jurnalPenyelesaian.php: -------------------------------------------------------------------------------- 1 | forge->addField([ 12 | 'id_penyesuaian' => [ 13 | 'type' => 'VARCHAR', 14 | 'constraint' => '20' 15 | ], 16 | 'tgl_penyesuaian' => [ 17 | 'type' => 'DATE', 18 | 19 | ], 20 | 'keterangan_penyesuaian' => [ 21 | 'type' => 'VARCHAR', 22 | 'constraint' => '255', 23 | ], 24 | 'no_akun' => [ 25 | 'type' => 'VARCHAR', 26 | 'constraint' => '20' 27 | ], 28 | 'debit' => [ 29 | 'type' => 'INT' 30 | ], 31 | 'kredit' => [ 32 | 'type' => 'INT' 33 | ], 34 | 'nip' => [ 35 | 'type' => 'VARCHAR', 36 | 'constraint' => '20' 37 | ], 38 | 'created_at' => [ 39 | 'type' => 'DATETIME', 40 | 'null' => true, 41 | ], 42 | 'updated_at' => [ 43 | 'type' => 'DATETIME', 44 | 'null' => true 45 | ] 46 | ]); 47 | $this->forge->addKey('id_penyesuaian', true); 48 | $this->forge->createTable('jurnal_penyesuaian'); 49 | } 50 | 51 | //-------------------------------------------------------------------- 52 | 53 | public function down() 54 | { 55 | $this->forge->dropTable('jurnal_penyesuaian'); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/Database/Seeds/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/app/Database/Seeds/.gitkeep -------------------------------------------------------------------------------- /app/Database/Seeds/AdminSeeder.php: -------------------------------------------------------------------------------- 1 | '11180930000095', 14 | 'username' => 'Admin', 15 | 'email' => 'admin@admin.com', 16 | 'password' => password_hash('ayohitung123', PASSWORD_DEFAULT), 17 | 'jenis_user' => "1", 18 | 'created_at' => Time::now(), 19 | 'updated_at' => Time::now() 20 | ], 21 | [ 22 | 'nip' => '11180930000101', 23 | 'username' => 'Bagian accounting', 24 | 'email' => 'accounting@accounting.com', 25 | 'password' => password_hash('ayohitung123', PASSWORD_DEFAULT), 26 | 'jenis_user' => "2", 27 | 'created_at' => Time::now(), 28 | 'updated_at' => Time::now() 29 | ], 30 | [ 31 | 'nip' => '11180930000005', 32 | 'username' => 'Pak CEO', 33 | 'email' => 'ceo@ceo.com', 34 | 'password' => password_hash('ayohitung123', PASSWORD_DEFAULT), 35 | 'jenis_user' => "3", 36 | 'created_at' => Time::now(), 37 | 'updated_at' => Time::now() 38 | ] 39 | ]; 40 | 41 | // Using Query Builder 42 | $this->db->table('users')->insertBatch($data); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/Database/Seeds/AkunSeeder.php: -------------------------------------------------------------------------------- 1 | '111', 14 | 'nama_akun' => 'Kas', 15 | 'keterangan' => 'tempat mencatat kas perusahaan', 16 | 'created_at' => Time::now(), 17 | 'updated_at' => Time::now() 18 | ], 19 | [ 20 | 'no_akun' => '112', 21 | 'nama_akun' => 'Piutang Usaha', 22 | 'keterangan' => 'tempat mencatat piutang perusahaan', 23 | 'created_at' => Time::now(), 24 | 'updated_at' => Time::now() 25 | ], 26 | [ 27 | 'no_akun' => '113', 28 | 'nama_akun' => 'Perlengkapan', 29 | 'keterangan' => 'tempat mencatat perlengkapan perusahaan', 30 | 'created_at' => Time::now(), 31 | 'updated_at' => Time::now() 32 | ], 33 | [ 34 | 'no_akun' => '121', 35 | 'nama_akun' => 'Peralatan', 36 | 'keterangan' => 'tempat mencatat peralatan perusahaan', 37 | 'created_at' => Time::now(), 38 | 'updated_at' => Time::now() 39 | ], 40 | [ 41 | 'no_akun' => '122', 42 | 'nama_akun' => 'Akumulasi Penyusutan Peralatan', 43 | 'keterangan' => 'tempat mencatat penyusutan peralatan perusahaan', 44 | 'created_at' => Time::now(), 45 | 'updated_at' => Time::now() 46 | ], 47 | [ 48 | 'no_akun' => '211', 49 | 'nama_akun' => 'Utang Usaha', 50 | 'keterangan' => 'tempat mencatat hutang untuk keperluan usaha', 51 | 'created_at' => Time::now(), 52 | 'updated_at' => Time::now() 53 | ], 54 | [ 55 | 'no_akun' => '311', 56 | 'nama_akun' => 'Modal', 57 | 'keterangan' => 'tempat mencatat modal', 58 | 'created_at' => Time::now(), 59 | 'updated_at' => Time::now() 60 | ], 61 | [ 62 | 'no_akun' => '411', 63 | 'nama_akun' => 'Pendapatan Jasa', 64 | 'keterangan' => 'tempat mencatat pendapatan dari hasil jasa', 65 | 'created_at' => Time::now(), 66 | 'updated_at' => Time::now() 67 | ], 68 | [ 69 | 'no_akun' => '511', 70 | 'nama_akun' => 'Beban', 71 | 'keterangan' => 'tempat mencatat beban yang ditanggung', 72 | 'created_at' => Time::now(), 73 | 'updated_at' => Time::now() 74 | ], 75 | [ 76 | 'no_akun' => '515', 77 | 'nama_akun' => 'Beban Perlengkapan', 78 | 'keterangan' => 'tempat mencatat beban Perlengkapan', 79 | 'created_at' => Time::now(), 80 | 'updated_at' => Time::now() 81 | ], 82 | [ 83 | 'no_akun' => '518', 84 | 'nama_akun' => 'Beban Penyusutan Peralatan', 85 | 'keterangan' => 'tempat mencatat beban Penyusutan peralatan', 86 | 'created_at' => Time::now(), 87 | 'updated_at' => Time::now() 88 | ] 89 | ]; 90 | 91 | // Using Query Builder 92 | $this->db->table('akun')->insertBatch($data); 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /app/Database/Seeds/DummySeeder.php: -------------------------------------------------------------------------------- 1 | call('AdminSeeder'); 10 | $this->call('AkunSeeder'); 11 | $this->call('JUSeeder'); 12 | $this->call('JPSeeder'); 13 | } 14 | } -------------------------------------------------------------------------------- /app/Database/Seeds/JPSeeder.php: -------------------------------------------------------------------------------- 1 | ''.strtotime(Time::now()).'01', 14 | 'tgl_penyesuaian' => '2020-9-24', 15 | 'no_akun' => '515', 16 | 'keterangan_penyesuaian'=> 'Perlengkapan terpakai', 17 | 'debit' => 750000, 18 | 'kredit' => 0, 19 | 'nip' => '11180930000095', 20 | 'created_at' => Time::now(), 21 | 'updated_at' => Time::now() 22 | ], 23 | [ 24 | 'id_penyesuaian' => ''.strtotime(Time::now()).'02', 25 | 'tgl_penyesuaian' => '2020-9-24', 26 | 'no_akun' => '113', 27 | 'keterangan_penyesuaian'=> 'Perlengkapan terpakai', 28 | 'debit' => 0, 29 | 'kredit' => 750000, 30 | 'nip' => '11180930000095', 31 | 'created_at' => Time::now(), 32 | 'updated_at' => Time::now() 33 | ], 34 | [ 35 | 'id_penyesuaian' => ''.strtotime(Time::now()).'03', 36 | 'tgl_penyesuaian' => '2020-10-24', 37 | 'no_akun' => '122', 38 | 'keterangan_penyesuaian'=> 'Akumulasi penyusutan peralatan', 39 | 'debit' => 0, 40 | 'kredit' => 750000, 41 | 'nip' => '11180930000095', 42 | 'created_at' => Time::now(), 43 | 'updated_at' => Time::now() 44 | ], 45 | [ 46 | 'id_penyesuaian' => ''.strtotime(Time::now()).'04', 47 | 'tgl_penyesuaian' => '2020-10-24', 48 | 'no_akun' => '518', 49 | 'keterangan_penyesuaian'=> 'Beban Penyusunan Peralatan', 50 | 'debit' => 750000, 51 | 'kredit' => 0, 52 | 'nip' => '11180930000095', 53 | 'created_at' => Time::now(), 54 | 'updated_at' => Time::now() 55 | ], 56 | 57 | ]; 58 | 59 | // Using Query Builder 60 | $this->db->table('jurnal_penyesuaian')->insertBatch($data); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /app/Filters/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/app/Filters/.gitkeep -------------------------------------------------------------------------------- /app/Filters/Auth.php: -------------------------------------------------------------------------------- 1 | get('logged_in')) { 15 | return redirect()->to('/login'); 16 | } 17 | } 18 | 19 | //-------------------------------------------------------------------- 20 | 21 | public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) 22 | { 23 | // Do something here 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Filters/Guest.php: -------------------------------------------------------------------------------- 1 | get('logged_in')) { 15 | return redirect()->to('/'); 16 | } 17 | } 18 | 19 | //-------------------------------------------------------------------- 20 | 21 | public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) 22 | { 23 | // Do something here 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Filters/RoleBased.php: -------------------------------------------------------------------------------- 1 | $value) { 15 | if (session()->get('user_role')==$value) { 16 | $cocok+=1; 17 | } 18 | } 19 | if ($cocok==0) { 20 | return redirect()->to(previous_url()); 21 | } 22 | } 23 | 24 | //-------------------------------------------------------------------- 25 | 26 | public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) 27 | { 28 | // Do something here 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Helpers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/app/Helpers/.gitkeep -------------------------------------------------------------------------------- /app/Helpers/converttousd_helper.php: -------------------------------------------------------------------------------- 1 | post($url,[ 17 | "headers"=>[ 18 | "Authorization"=>$key 19 | ], 20 | "json"=>[ 21 | "text"=>$data, 22 | "model_id"=>"id-en" 23 | ] 24 | ]); 25 | $json = json_decode($response->getBody(),true); 26 | // dd($json); 27 | return $json; 28 | } 29 | ?> -------------------------------------------------------------------------------- /app/Helpers/laporan_helper.php: -------------------------------------------------------------------------------- 1 | query($sql, [ 13 | 'tgl_mulai' => date('Y-m-j', strtotime($mulai)), 14 | 'tgl_selesai' => date('Y-m-t', strtotime($selesai)) 15 | ])->getResult('array'); 16 | 17 | if ($bahasa=='en' && !empty($result)) { 18 | $text = getTeks($result, ['nama_akun', 'keterangan_transaksi']); 19 | $translated = translateToEnglish($text); 20 | // dd($translated, $text); 21 | $result = replaceWithEnglish($result, $translated); 22 | // dd($result); 23 | } 24 | 25 | return $result; 26 | } 27 | 28 | function replaceWithEnglish($data, $text){ 29 | $j=0; 30 | for ($i=0; $i "; 32 | $data[$i]['nama_akun'] = $text['translations'][$j]['translation']; 33 | $data[$i]['keterangan_transaksi'] = $text['translations'][$j+1]['translation']; 34 | $j+=2; 35 | } 36 | return $data; 37 | } 38 | 39 | // mengecek apakah akun terdapat dalam array 40 | function akunExist(array $dt, $dicari) 41 | { 42 | $equal = 0; 43 | foreach ($dt as $item) { 44 | if ($dicari == $item['no_akun']) { 45 | $equal += 1; 46 | } 47 | } 48 | return $equal; 49 | } 50 | 51 | // Menghitung saldo 52 | function hitungSaldo($no_akun, $debit, $kredit, $saldo_debit, $saldo_kredit) 53 | { 54 | $saldo = []; 55 | if (substr($no_akun, 0, 1) == 1 || substr($no_akun, 0, 1) == 5) { 56 | $saldo_normal = $saldo_debit + $debit - $kredit; 57 | if ($saldo_normal < 0) { 58 | $saldo['debit'] = 0; 59 | $saldo['kredit'] = abs($saldo_normal); 60 | } else { 61 | $saldo['debit'] = $saldo_normal; 62 | $saldo['kredit'] = 0; 63 | } 64 | } else { 65 | $saldo_normal = $saldo_kredit + $kredit - $debit; 66 | if ($saldo_normal < 0) { 67 | $saldo['debit'] = abs($saldo_normal); 68 | $saldo['kredit'] = 0; 69 | } else { 70 | $saldo['debit'] = 0; 71 | $saldo['kredit'] = $saldo_normal; 72 | } 73 | } 74 | return $saldo; 75 | } 76 | 77 | function collectDataLR($data, $tipe, $rate) 78 | { 79 | $items = []; 80 | $total_items = ["debit" => 0, "kredit" => 0]; 81 | $prefix = ""; 82 | 83 | switch ($tipe) { 84 | case 'pendapatan': 85 | $prefix = 4; 86 | break; 87 | 88 | case 'beban': 89 | $prefix = 5; 90 | break; 91 | 92 | default: 93 | # code... 94 | break; 95 | } 96 | 97 | 98 | // mengumpulkan data items 99 | foreach ($data as $akun) { 100 | if (substr($akun['no_akun'], 0, 1) == $prefix) { 101 | if (akunExist($items, $akun['no_akun'])) { 102 | continue; 103 | } 104 | 105 | // menghitung saldo total tiap akun 106 | $saldo = []; 107 | foreach ($data as $value) { 108 | if ($value['no_akun'] == $akun['no_akun']) { 109 | $saldo = hitungSaldo( 110 | $value['no_akun'], 111 | $value['debit'] / $rate, 112 | $value['kredit'] / $rate, 113 | !empty($saldo) ? $saldo['debit'] : 0, 114 | !empty($saldo) ? $saldo['kredit'] : 0 115 | ); 116 | // echo $saldo['debit']."
"; 117 | // echo $saldo['kredit']."
"; 118 | } 119 | } 120 | 121 | $akun_items = [ 122 | "no_akun" => $akun['no_akun'], 123 | "nama_akun" => $akun['nama_akun'], 124 | "saldo" => $saldo 125 | ]; 126 | array_push($items, $akun_items); 127 | $total_items['debit'] += $saldo['debit']; 128 | $total_items['kredit'] += $saldo['kredit']; 129 | // echo "
".$total_items['debit']."
"; 130 | // echo $total_items['kredit']."
"; 131 | } 132 | } 133 | // dd($items); 134 | 135 | return ["items" => $items, "total_items" => $total_items]; 136 | } 137 | 138 | function getTeks($data, array $kolom) 139 | { 140 | $text = []; 141 | foreach ($data as $value) { 142 | foreach ($kolom as $kol) { 143 | array_push($text, strtolower($value[$kol])); 144 | } 145 | } 146 | // dd($text); 147 | return $text; 148 | } 149 | -------------------------------------------------------------------------------- /app/Helpers/tanggalindo_helper.php: -------------------------------------------------------------------------------- 1 | 'Januari', 7 | 'Februari', 8 | 'Maret', 9 | 'April', 10 | 'Mei', 11 | 'Juni', 12 | 'Juli', 13 | 'Agustus', 14 | 'September', 15 | 'Oktober', 16 | 'November', 17 | 'Desember' 18 | ); 19 | 20 | $split = explode('-',$tanggal); 21 | return $split[2] . ' ' . $bulan[ (int)$split[1] ] . ' ' . $split[0]; 22 | } 23 | 24 | ?> -------------------------------------------------------------------------------- /app/Language/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/app/Language/.gitkeep -------------------------------------------------------------------------------- /app/Language/en/Validation.php: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/Views/components/alert_error.php: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/Views/components/alert_success.php: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/Views/components/jurnal_penyesuaian/modal_tambah_jurnal_penyesuaian.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /app/Views/components/jurnal_umum/modal_tambah_jurnal_umum.php: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/Views/components/laporan/laba_rugi.php: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
Laporan Laba Rugi
5 |
6 | 7 |
8 |
9 |
10 |

Laporan Laba Rugi

11 |

Periode

12 |
13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
Pendapatan
Rp.
Jumlah PendapatanRp.
36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
Beban
Rp.
Jumlah BebanRp.
57 | 58 | 59 | 60 | 61 | 62 | 63 |
Laba BersihRp.
64 |
65 |
66 |
67 | 68 |
69 |

Maaf, Laporan belum tersedia!

70 |
71 | 72 |
73 |
-------------------------------------------------------------------------------- /app/Views/components/laporan/laba_rugi_en.php: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
Laporan Laba Rugi
5 |
6 | 7 |
8 |
9 |
10 |

INCOME STATEMENT

11 |

Period

12 |
13 |
14 |
15 |

Date :

16 |

Rate : Rp.

17 |
18 |
19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
Revenue
$
Total Revenue$
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 |
Expense
$
Total Expense$
62 | 63 | 64 | 65 | 66 | 67 | 68 |
Total Profit$
69 |
70 |
71 | 72 |
73 |

Sorry, The report is not available!

74 |
75 | 76 |
77 |
-------------------------------------------------------------------------------- /app/Views/components/laporan/neraca_saldo.php: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
Laporan Neraca Saldo
5 |
6 | 7 |
8 |
9 |
10 |

Laporan Neraca Saldo

11 |

Periode

12 |
13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | $item) {?> 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
NO AKUNNAMA AKUNDEBETKREDIT
Rp. Rp.
JUMLAHRp. Rp.
41 |
42 | 43 |
44 |
45 | 46 |
47 |

Maaf, Laporan belum tersedia!

48 |
49 | 50 |
51 |
-------------------------------------------------------------------------------- /app/Views/components/laporan/neraca_saldo_en.php: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
Laporan Neraca Saldo
5 |
6 | 7 |
8 |
9 |
10 |

TRIAL BALANCE

11 |

Period

12 |
13 |
14 |
15 |

Date :

16 |

Rate : Rp.

17 |
18 |
19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | $item) { ?> 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
NO ACCOUNTACCOUNT NAMEDEBETCREDIT
$ $
TOTAL AMOUNT$ $
45 | 46 |
47 |
48 | 49 |
50 |

Sorry, The report is not available!

51 |
52 | 53 |
54 |
-------------------------------------------------------------------------------- /app/Views/components/user/modal_tambah_user.php: -------------------------------------------------------------------------------- 1 | 2 | 50 | 51 | -------------------------------------------------------------------------------- /app/Views/errors/cli/error_404.php: -------------------------------------------------------------------------------- 1 | 4 | Message: 5 | Filename: getFile(), "\n"; ?> 6 | Line Number: getLine(); ?> 7 | 8 | 9 | 10 | Backtrace: 11 | getTrace() as $error): ?> 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/Views/errors/cli/production.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 404 Page Not Found 6 | 7 | 70 | 71 | 72 |
73 |

404 - File Not Found

74 | 75 |

76 | 77 | 78 | 79 | Sorry! Cannot seem to find the page you were looking for. 80 | 81 |

82 |
83 | 84 | 85 | -------------------------------------------------------------------------------- /app/Views/errors/html/production.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Whoops! 8 | 9 | 12 | 13 | 14 | 15 |
16 | 17 |

Whoops!

18 | 19 |

We seem to have hit a snag. Please try again later...

20 | 21 |
22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/Views/login.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Login 8 | 9 | 58 | 59 | 60 | 61 | 62 | include("components/alert_error.php") ?> 63 | 64 |
65 |
66 |
67 |
68 | 88 |
89 |
90 |
91 | 92 | 93 | 94 | 95 | 98 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /builds: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | 'vcs', 68 | 'url' => GITHUB_URL, 69 | ]; 70 | } 71 | 72 | // Define the "require" 73 | $array['require']['codeigniter4/codeigniter4'] = 'dev-develop'; 74 | unset($array['require']['codeigniter4/framework']); 75 | } 76 | 77 | // Release 78 | else 79 | { 80 | // Clear 'minimum-stability' 81 | unset($array['minimum-stability']); 82 | 83 | // If the repo is configured then clear it 84 | if (isset($array['repositories'])) 85 | { 86 | // Check for the CodeIgniter repo 87 | foreach ($array['repositories'] as $i => $repository) 88 | { 89 | if ($repository['url'] == GITHUB_URL) 90 | { 91 | unset($array['repositories'][$i]); 92 | break; 93 | } 94 | } 95 | if (empty($array['repositories'])) 96 | { 97 | unset($array['repositories']); 98 | } 99 | } 100 | 101 | // Define the "require" 102 | $array['require']['codeigniter4/framework'] = LATEST_RELEASE; 103 | unset($array['require']['codeigniter4/codeigniter4']); 104 | } 105 | 106 | // Write out a new composer.json 107 | file_put_contents($file, json_encode($array, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES) . PHP_EOL); 108 | $modified[] = $file; 109 | } 110 | else 111 | { 112 | echo 'Warning: Unable to decode composer.json! Skipping...' . PHP_EOL; 113 | } 114 | } 115 | else 116 | { 117 | echo 'Warning: Unable to read composer.json! Skipping...' . PHP_EOL; 118 | } 119 | } 120 | 121 | // Paths config and PHPUnit XMLs 122 | $files = [ 123 | __DIR__ . DIRECTORY_SEPARATOR . 'app/Config/Paths.php', 124 | __DIR__ . DIRECTORY_SEPARATOR . 'phpunit.xml.dist', 125 | __DIR__ . DIRECTORY_SEPARATOR . 'phpunit.xml', 126 | ]; 127 | 128 | foreach ($files as $file) 129 | { 130 | if (is_file($file)) 131 | { 132 | $contents = file_get_contents($file); 133 | 134 | // Development 135 | if ($dev) 136 | { 137 | $contents = str_replace('vendor/codeigniter4/framework', 'vendor/codeigniter4/codeigniter4', $contents); 138 | } 139 | 140 | // Release 141 | else 142 | { 143 | $contents = str_replace('vendor/codeigniter4/codeigniter4', 'vendor/codeigniter4/framework', $contents); 144 | } 145 | 146 | file_put_contents($file, $contents); 147 | $modified[] = $file; 148 | } 149 | } 150 | 151 | if (empty($modified)) 152 | { 153 | echo 'No files modified' . PHP_EOL; 154 | } 155 | else 156 | { 157 | echo 'The following files were modified:' . PHP_EOL; 158 | foreach ($modified as $file) 159 | { 160 | echo " * {$file}" . PHP_EOL; 161 | } 162 | echo 'Run `composer update` to sync changes with your vendor folder' . PHP_EOL; 163 | } 164 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codeigniter4/appstarter", 3 | "type": "project", 4 | "description": "CodeIgniter4 starter app", 5 | "homepage": "https://codeigniter.com", 6 | "license": "MIT", 7 | "require": { 8 | "php": ">=7.2", 9 | "codeigniter4/framework": "^4" 10 | }, 11 | "require-dev": { 12 | "fzaninotto/faker": "^1.9@dev", 13 | "mikey179/vfsstream": "1.6.*", 14 | "phpunit/phpunit": "^8.5" 15 | }, 16 | "autoload-dev": { 17 | "psr-4": { 18 | "Tests\\Support\\": "tests/_support" 19 | } 20 | }, 21 | "scripts": { 22 | "post-update-cmd": [ 23 | "@composer dump-autoload" 24 | ], 25 | "test": "phpunit" 26 | }, 27 | "support": { 28 | "forum": "http://forum.codeigniter.com/", 29 | "source": "https://github.com/codeigniter4/CodeIgniter4", 30 | "slack": "https://codeigniterchat.slack.com" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014-2019 British Columbia Institute of Technology 4 | Copyright (c) 2019-2020 CodeIgniter Foundation 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /nohup.out: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/nohup.out -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests 15 | 16 | 17 | 18 | 19 | 20 | ./app 21 | 22 | ./app/Views 23 | ./app/Config/Routes.php 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | # Disable directory browsing 2 | Options All -Indexes 3 | 4 | # ---------------------------------------------------------------------- 5 | # Rewrite engine 6 | # ---------------------------------------------------------------------- 7 | 8 | # Turning on the rewrite engine is necessary for the following rules and features. 9 | # FollowSymLinks must be enabled for this to work. 10 | 11 | Options +FollowSymlinks 12 | RewriteEngine On 13 | 14 | # If you installed CodeIgniter in a subfolder, you will need to 15 | # change the following line to match the subfolder you need. 16 | # http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase 17 | # RewriteBase / 18 | 19 | # Redirect Trailing Slashes... 20 | RewriteCond %{REQUEST_FILENAME} !-d 21 | RewriteRule ^(.*)/$ /$1 [L,R=301] 22 | 23 | # Rewrite "www.example.com -> example.com" 24 | RewriteCond %{HTTPS} !=on 25 | RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 26 | RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] 27 | 28 | # Checks to see if the user is attempting to access a valid file, 29 | # such as an image or css document, if this isn't true it sends the 30 | # request to the front controller, index.php 31 | RewriteCond %{REQUEST_FILENAME} !-f 32 | RewriteCond %{REQUEST_FILENAME} !-d 33 | RewriteRule ^([\s\S]*)$ index.php/$1 [L,NC,QSA] 34 | 35 | # Ensure Authorization header is passed along 36 | RewriteCond %{HTTP:Authorization} . 37 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 38 | 39 | 40 | 41 | # If we don't have mod_rewrite installed, all 404's 42 | # can be sent to index.php, and everything works as normal. 43 | ErrorDocument 404 index.php 44 | 45 | 46 | # Disable server signature start 47 | ServerSignature Off 48 | # Disable server signature end 49 | -------------------------------------------------------------------------------- /public/ElaAdmin/css/lib/chosen/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/css/lib/chosen/chosen-sprite.png -------------------------------------------------------------------------------- /public/ElaAdmin/css/lib/chosen/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/css/lib/chosen/chosen-sprite@2x.png -------------------------------------------------------------------------------- /public/ElaAdmin/css/lib/datatable/dataTables.bootstrap.min.css: -------------------------------------------------------------------------------- 1 | table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-sm>thead>tr>th{padding-right:20px}table.dataTable.table-sm .sorting:before,table.dataTable.table-sm .sorting_asc:before,table.dataTable.table-sm .sorting_desc:before{top:5px;right:0.85em}table.dataTable.table-sm .sorting:after,table.dataTable.table-sm .sorting_asc:after,table.dataTable.table-sm .sorting_desc:after{top:5px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0} -------------------------------------------------------------------------------- /public/ElaAdmin/css/lib/vector-map/jqvmap.min.css: -------------------------------------------------------------------------------- 1 | .jqvmap-label, 2 | .jqvmap-pin { 3 | pointer-events: none 4 | } 5 | .jqvmap-label { 6 | position: absolute; 7 | display: none; 8 | -webkit-border-radius: 3px; 9 | -moz-border-radius: 3px; 10 | border-radius: 3px; 11 | background: #292929; 12 | color: #fff; 13 | font-family: sans-serif, Verdana; 14 | font-size: smaller; 15 | padding: 3px 16 | } 17 | .jqvmap-zoomin, 18 | .jqvmap-zoomout { 19 | position: absolute; 20 | left: 10px; 21 | -webkit-border-radius: 3px; 22 | -moz-border-radius: 3px; 23 | border-radius: 3px; 24 | background: #000; 25 | padding: 3px; 26 | color: #fff; 27 | width: 15px; 28 | height: 15px; 29 | cursor: pointer; 30 | line-height: 10px; 31 | text-align: center 32 | } 33 | .jqvmap-zoomin { 34 | top: 10px 35 | } 36 | .jqvmap-zoomout { 37 | top: 30px 38 | } 39 | .jqvmap-region { 40 | cursor: pointer 41 | } 42 | .jqvmap-ajax_response { 43 | width: 100%; 44 | height: 500px 45 | } -------------------------------------------------------------------------------- /public/ElaAdmin/fonts/icomoon/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/fonts/icomoon/icomoon.eot -------------------------------------------------------------------------------- /public/ElaAdmin/fonts/icomoon/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/fonts/icomoon/icomoon.ttf -------------------------------------------------------------------------------- /public/ElaAdmin/fonts/icomoon/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/fonts/icomoon/icomoon.woff -------------------------------------------------------------------------------- /public/ElaAdmin/fonts/icomoon/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/fonts/icomoon/index.html -------------------------------------------------------------------------------- /public/ElaAdmin/images/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/.gitignore -------------------------------------------------------------------------------- /public/ElaAdmin/images/admin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/admin.jpg -------------------------------------------------------------------------------- /public/ElaAdmin/images/avatar/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/avatar/1.jpg -------------------------------------------------------------------------------- /public/ElaAdmin/images/avatar/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/avatar/2.jpg -------------------------------------------------------------------------------- /public/ElaAdmin/images/avatar/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/avatar/3.jpg -------------------------------------------------------------------------------- /public/ElaAdmin/images/avatar/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/avatar/4.jpg -------------------------------------------------------------------------------- /public/ElaAdmin/images/avatar/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/avatar/5.jpg -------------------------------------------------------------------------------- /public/ElaAdmin/images/avatar/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/avatar/6.jpg -------------------------------------------------------------------------------- /public/ElaAdmin/images/avatar/64-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/avatar/64-1.jpg -------------------------------------------------------------------------------- /public/ElaAdmin/images/avatar/64-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/avatar/64-2.jpg -------------------------------------------------------------------------------- /public/ElaAdmin/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/favicon.png -------------------------------------------------------------------------------- /public/ElaAdmin/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/logo.png -------------------------------------------------------------------------------- /public/ElaAdmin/images/logo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/logo.psd -------------------------------------------------------------------------------- /public/ElaAdmin/images/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/ElaAdmin/images/logo2.png -------------------------------------------------------------------------------- /public/ElaAdmin/js/init/datatables-init.js: -------------------------------------------------------------------------------- 1 | (function ($) { 2 | // "use strict"; 3 | 4 | 5 | /* Data Table 6 | -------------*/ 7 | 8 | 9 | 10 | 11 | $('#bootstrap-data-table').DataTable({ 12 | lengthMenu: [[10, 20, 50, -1], [10, 20, 50, "All"]], 13 | }); 14 | 15 | 16 | 17 | $('#bootstrap-data-table-export').DataTable({ 18 | dom: 'lBfrtip', 19 | lengthMenu: [[10, 25, 50, -1], [10, 25, 50, "All"]], 20 | buttons: [ 21 | 'copy', 'csv', 'excel', 'pdf', 'print' 22 | ] 23 | }); 24 | 25 | $('#row-select').DataTable( { 26 | initComplete: function () { 27 | this.api().columns().every( function () { 28 | var column = this; 29 | var select = $('') 30 | .appendTo( $(column.footer()).empty() ) 31 | .on( 'change', function () { 32 | var val = $.fn.dataTable.util.escapeRegex( 33 | $(this).val() 34 | ); 35 | 36 | column 37 | .search( val ? '^'+val+'$' : '', true, false ) 38 | .draw(); 39 | } ); 40 | 41 | column.data().unique().sort().each( function ( d, j ) { 42 | select.append( '' ) 43 | } ); 44 | } ); 45 | } 46 | } ); 47 | 48 | 49 | 50 | 51 | 52 | 53 | })(jQuery); -------------------------------------------------------------------------------- /public/ElaAdmin/js/init/peitychart-init.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | 3 | "use strict"; // Start of use strict 4 | 5 | $(function() { 6 | "use strict"; 7 | // Just the defaults. 8 | $("span.pie").peity("pie",{ 9 | width: '50', 10 | height: '50' 11 | }) 12 | 13 | $('span.donut').peity('donut',{ 14 | width: '50', 15 | height: '50' 16 | }) 17 | 18 | 19 | $(".peity-line").peity("line",{ 20 | width: '300', 21 | height: '100' 22 | }) 23 | 24 | $(".bar").peity("bar",{ 25 | width: '300', 26 | height: '100' 27 | }) 28 | 29 | $(".bar-colours-1").peity("bar", { 30 | fill: ["red", "green", "blue"], 31 | width: '100', 32 | height: '100' 33 | }) 34 | 35 | $(".bar-colours-2").peity("bar", { 36 | fill: function(value) { 37 | return value > 0 ? "green" : "red" 38 | }, 39 | width: '100', 40 | height: '100' 41 | }) 42 | 43 | $(".bar-colours-3").peity("bar", { 44 | fill: function(_, i, all) { 45 | var g = parseInt((i / all.length) * 255) 46 | return "rgb(255, " + g + ", 0)" 47 | }, 48 | width: '100', 49 | height: '100' 50 | }) 51 | 52 | $(".pie-colours-1").peity("pie", { 53 | fill: ["cyan", "magenta", "yellow", "black"], 54 | width: '100', 55 | height: '100' 56 | }) 57 | 58 | $(".pie-colours-2").peity("pie", { 59 | fill: function(_, i, all) { 60 | var g = parseInt((i / all.length) * 255) 61 | return "rgb(255, " + g + ", 0)" 62 | }, 63 | width: '100', 64 | height: '100' 65 | }) 66 | 67 | // Using data attributes 68 | $(".data-attributes span").peity("donut") 69 | 70 | // Evented example. 71 | $("select").change(function() { 72 | var text = $(this).val() + "/" + 5 73 | 74 | $(this) 75 | .siblings("span.graph") 76 | .text(text) 77 | .change() 78 | 79 | $("#notice").text("Chart updated: " + text) 80 | }).change() 81 | 82 | $("span.graph").peity("pie") 83 | 84 | // Updating charts. 85 | var updatingChart = $(".updating-chart").peity("line", { width: "100%",height:100 }) 86 | 87 | setInterval(function() { 88 | var random = Math.round(Math.random() * 10) 89 | var values = updatingChart.text().split(",") 90 | values.shift() 91 | values.push(random) 92 | 93 | updatingChart 94 | .text(values.join(",")) 95 | .change() 96 | }, 1000) 97 | }) 98 | 99 | 100 | })(jQuery); 101 | -------------------------------------------------------------------------------- /public/ElaAdmin/js/lib/data-table/buttons.bootstrap.min.js: -------------------------------------------------------------------------------- 1 | (function(b,a){b.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group"},button:{className:"btn btn-default"},collection:{tag:"ul",className:"dt-button-collection dropdown-menu",button:{tag:"li",className:"dt-button"},buttonLiner:{tag:"a",className:""}}}});a.ext.buttons.collection.text=function(a){return a.i18n("buttons.collection",'Collection ')}})(jQuery,jQuery.fn.dataTable); -------------------------------------------------------------------------------- /public/ElaAdmin/js/lib/data-table/buttons.colVis.min.js: -------------------------------------------------------------------------------- 1 | (function(g){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(d){return g(d,window,document)}):"object"===typeof exports?module.exports=function(d,e){d||(d=window);if(!e||!e.fn.dataTable)e=require("datatables.net")(d,e).$;e.fn.dataTable.Buttons||require("datatables.net-buttons")(d,e);return g(e,d,d.document)}:g(jQuery,window,document)})(function(g,d,e,h){d=g.fn.dataTable;g.extend(d.ext.buttons,{colvis:function(a,b){return{extend:"collection", 2 | text:function(a){return a.i18n("buttons.colvis","Column visibility")},className:"buttons-colvis",buttons:[{extend:"columnsToggle",columns:b.columns}]}},columnsToggle:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnToggle",columns:a}}).toArray()},columnToggle:function(a,b){return{extend:"columnVisibility",columns:b.columns}},columnsVisibility:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnVisibility",columns:a,visibility:b.visibility}}).toArray()}, 3 | columnVisibility:{columns:h,text:function(a,b,c){return c._columnText(a,c.columns)},className:"buttons-columnVisibility",action:function(a,b,c,f){a=b.columns(f.columns);b=a.visible();a.visible(f.visibility!==h?f.visibility:!(b.length&&b[0]))},init:function(a,b,c){var f=this;a.on("column-visibility.dt"+c.namespace,function(b,d){d.bDestroying||f.active(a.column(c.columns).visible())}).on("column-reorder.dt"+c.namespace,function(b,d,e){1===a.columns(c.columns).count()&&("number"===typeof c.columns&& 4 | (c.columns=e.mapping[c.columns]),b=a.column(c.columns),f.text(c._columnText(a,c.columns)),f.active(b.visible()))});this.active(a.column(c.columns).visible())},destroy:function(a,b,c){a.off("column-visibility.dt"+c.namespace).off("column-reorder.dt"+c.namespace)},_columnText:function(a,b){var c=a.column(b).index();return a.settings()[0].aoColumns[c].sTitle.replace(/\n/g," ").replace(/<.*?>/g,"").replace(/^\s+|\s+$/g,"")}},colvisRestore:{className:"buttons-colvisRestore",text:function(a){return a.i18n("buttons.colvisRestore", 5 | "Restore visibility")},init:function(a,b,c){c._visOriginal=a.columns().indexes().map(function(b){return a.column(b).visible()}).toArray()},action:function(a,b,c,d){b.columns().every(function(a){a=b.colReorder&&b.colReorder.transpose?b.colReorder.transpose(a,"toOriginal"):a;this.visible(d._visOriginal[a])})}},colvisGroup:{className:"buttons-colvisGroup",action:function(a,b,c,d){b.columns(d.show).visible(!0,!1);b.columns(d.hide).visible(!1,!1);b.columns.adjust()},show:[],hide:[]}});return d.Buttons}); 6 | -------------------------------------------------------------------------------- /public/ElaAdmin/js/lib/data-table/buttons.print.min.js: -------------------------------------------------------------------------------- 1 | (function(e){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(f){return e(f,window,document)}):"object"===typeof exports?module.exports=function(f,c){f||(f=window);if(!c||!c.fn.dataTable)c=require("datatables.net")(f,c).$;c.fn.dataTable.Buttons||require("datatables.net-buttons")(f,c);return e(c,f,f.document)}:e(jQuery,window,document)})(function(e,f,c){var i=e.fn.dataTable,h=c.createElement("a");i.ext.buttons.print={className:"buttons-print", 2 | text:function(b){return b.i18n("buttons.print","Print")},action:function(b,c,i,d){var a=c.buttons.exportData(d.exportOptions),k=function(b,a){for(var c="",d=0,e=b.length;d"+b[d]+"";return c+""},b='';d.header&&(b+=""+k(a.header,"th")+"");for(var b=b+"",l=0,m=a.body.length;l";d.footer&&a.footer&&(b+=""+k(a.footer,"th")+"");var g=f.open("",""), 3 | a=d.title;"function"===typeof a&&(a=a());-1!==a.indexOf("*")&&(a=a.replace("*",e("title").text()));g.document.close();var j=""+a+"";e("style, link").each(function(){var c=j,b=e(this).clone()[0],a;"link"===b.nodeName.toLowerCase()&&(h.href=b.href,a=h.host,-1===a.indexOf("/")&&0!==h.pathname.indexOf("/")&&(a+="/"),b.href=h.protocol+"//"+a+h.pathname+h.search);j=c+b.outerHTML});try{g.document.head.innerHTML=j}catch(n){e(g.document.head).html(j)}g.document.body.innerHTML="

"+a+"

"+ 4 | ("function"===typeof d.message?d.message(c,i,d):d.message)+"
"+b;e(g.document.body).addClass("dt-print-view");d.customize&&d.customize(g);setTimeout(function(){d.autoPrint&&(g.print(),g.close())},250)},title:"*",message:"",exportOptions:{},header:!0,footer:!1,autoPrint:!0,customize:null};return i.Buttons}); 5 | -------------------------------------------------------------------------------- /public/ElaAdmin/js/lib/data-table/dataTables.bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | DataTables Bootstrap 3 integration 3 | ©2011-2015 SpryMedia Ltd - datatables.net/license 4 | */ 5 | (function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d,m){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", 6 | renderer:"bootstrap"});b.extend(f.ext.classes,{sWrapper:"dataTables_wrapper container-fluid dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,s,j,n){var o=new f.Api(a),t=a.oClasses,k=a.oLanguage.oPaginate,u=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&& 7 | o.page()!=a.data.action&&o.page(a.data.action).draw("page")};l=0;for(h=f.length;l",{"class":t.sPageButton+" "+g,id:0===r&& 8 | "string"===typeof c?a.sTableId+"_"+c:null}).append(b("",{href:"#","aria-controls":a.sTableId,"aria-label":u[c],"data-dt-idx":p,tabindex:a.iTabIndex,"class":"page-link"}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(v){}q(b(h).empty().html('
    ').children("ul"),s);i!==m&&b(h).find("[data-dt-idx="+i+"]").focus()};return f}); -------------------------------------------------------------------------------- /public/ElaAdmin/js/main.js: -------------------------------------------------------------------------------- 1 | $.noConflict(); 2 | 3 | jQuery(document).ready(function($) { 4 | 5 | "use strict"; 6 | 7 | [].slice.call( document.querySelectorAll( 'select.cs-select' ) ).forEach( function(el) { 8 | new SelectFx(el); 9 | }); 10 | 11 | jQuery('.selectpicker').selectpicker; 12 | 13 | 14 | 15 | 16 | $('.search-trigger').on('click', function(event) { 17 | event.preventDefault(); 18 | event.stopPropagation(); 19 | $('.search-trigger').parent('.header-left').addClass('open'); 20 | }); 21 | 22 | $('.search-close').on('click', function(event) { 23 | event.preventDefault(); 24 | event.stopPropagation(); 25 | $('.search-trigger').parent('.header-left').removeClass('open'); 26 | }); 27 | 28 | $('.equal-height').matchHeight({ 29 | property: 'max-height' 30 | }); 31 | 32 | // var chartsheight = $('.flotRealtime2').height(); 33 | // $('.traffic-chart').css('height', chartsheight-122); 34 | 35 | 36 | // Counter Number 37 | $('.count').each(function () { 38 | $(this).prop('Counter',0).animate({ 39 | Counter: $(this).text() 40 | }, { 41 | duration: 3000, 42 | easing: 'swing', 43 | step: function (now) { 44 | $(this).text(Math.ceil(now)); 45 | } 46 | }); 47 | }); 48 | 49 | 50 | 51 | 52 | // Menu Trigger 53 | $('#menuToggle').on('click', function(event) { 54 | var windowWidth = $(window).width(); 55 | if (windowWidth<1010) { 56 | $('body').removeClass('open'); 57 | if (windowWidth<760){ 58 | $('#left-panel').slideToggle(); 59 | } else { 60 | $('#left-panel').toggleClass('open-menu'); 61 | } 62 | } else { 63 | $('body').toggleClass('open'); 64 | $('#left-panel').removeClass('open-menu'); 65 | } 66 | 67 | }); 68 | 69 | 70 | $(".menu-item-has-children.dropdown").each(function() { 71 | $(this).on('click', function() { 72 | var $temp_text = $(this).children('.dropdown-toggle').html(); 73 | $(this).children('.sub-menu').prepend('
  • ' + $temp_text + '
  • '); 74 | }); 75 | }); 76 | 77 | 78 | // Load Resize 79 | $(window).on("load resize", function(event) { 80 | var windowWidth = $(window).width(); 81 | if (windowWidth<1010) { 82 | $('body').addClass('small-device'); 83 | } else { 84 | $('body').removeClass('small-device'); 85 | } 86 | 87 | }); 88 | 89 | 90 | }); -------------------------------------------------------------------------------- /public/ElaAdmin/js/vmap.sampledata.js: -------------------------------------------------------------------------------- 1 | var sample_data = {"af":"16.63","al":"11.58","dz":"158.97","ao":"85.81","ag":"1.1","ar":"351.02","am":"8.83","au":"1219.72","at":"366.26","az":"52.17","bs":"7.54","bh":"21.73","bd":"105.4","bb":"3.96","by":"52.89","be":"461.33","bz":"1.43","bj":"6.49","bt":"1.4","bo":"19.18","ba":"16.2","bw":"12.5","br":"2023.53","bn":"11.96","bg":"44.84","bf":"8.67","bi":"1.47","kh":"11.36","cm":"21.88","ca":"1563.66","cv":"1.57","cf":"2.11","td":"7.59","cl":"199.18","cn":"5745.13","co":"283.11","km":"0.56","cd":"12.6","cg":"11.88","cr":"35.02","ci":"22.38","hr":"59.92","cy":"22.75","cz":"195.23","dk":"304.56","dj":"1.14","dm":"0.38","do":"50.87","ec":"61.49","eg":"216.83","sv":"21.8","gq":"14.55","er":"2.25","ee":"19.22","et":"30.94","fj":"3.15","fi":"231.98","fr":"2555.44","ga":"12.56","gm":"1.04","ge":"11.23","de":"3305.9","gh":"18.06","gr":"305.01","gd":"0.65","gt":"40.77","gn":"4.34","gw":"0.83","gy":"2.2","ht":"6.5","hn":"15.34","hk":"226.49","hu":"132.28","is":"12.77","in":"1430.02","id":"695.06","ir":"337.9","iq":"84.14","ie":"204.14","il":"201.25","it":"2036.69","jm":"13.74","jp":"5390.9","jo":"27.13","kz":"129.76","ke":"32.42","ki":"0.15","kr":"986.26","undefined":"5.73","kw":"117.32","kg":"4.44","la":"6.34","lv":"23.39","lb":"39.15","ls":"1.8","lr":"0.98","ly":"77.91","lt":"35.73","lu":"52.43","mk":"9.58","mg":"8.33","mw":"5.04","my":"218.95","mv":"1.43","ml":"9.08","mt":"7.8","mr":"3.49","mu":"9.43","mx":"1004.04","md":"5.36","mn":"5.81","me":"3.88","ma":"91.7","mz":"10.21","mm":"35.65","na":"11.45","np":"15.11","nl":"770.31","nz":"138","ni":"6.38","ne":"5.6","ng":"206.66","no":"413.51","om":"53.78","pk":"174.79","pa":"27.2","pg":"8.81","py":"17.17","pe":"153.55","ph":"189.06","pl":"438.88","pt":"223.7","qa":"126.52","ro":"158.39","ru":"1476.91","rw":"5.69","ws":"0.55","st":"0.19","sa":"434.44","sn":"12.66","rs":"38.92","sc":"0.92","sl":"1.9","sg":"217.38","sk":"86.26","si":"46.44","sb":"0.67","za":"354.41","es":"1374.78","lk":"48.24","kn":"0.56","lc":"1","vc":"0.58","sd":"65.93","sr":"3.3","sz":"3.17","se":"444.59","ch":"522.44","sy":"59.63","tw":"426.98","tj":"5.58","tz":"22.43","th":"312.61","tl":"0.62","tg":"3.07","to":"0.3","tt":"21.2","tn":"43.86","tr":"729.05","tm":0,"ug":"17.12","ua":"136.56","ae":"239.65","gb":"2258.57","us":"14624.18","uy":"40.71","uz":"37.72","vu":"0.72","ve":"285.21","vn":"101.99","ye":"30.02","zm":"15.69","zw":"5.57"}; -------------------------------------------------------------------------------- /public/ElaAdmin/js/widgets.js: -------------------------------------------------------------------------------- 1 | ( function ( $ ) { 2 | "use strict"; 3 | 4 | 5 | 6 | $.plot("#flotBar1", [{ 7 | data: [[0, 3], [2, 8], [4, 5], [6, 13],[8,5], [10,7],[12,4], [14,6]], 8 | bars: { 9 | show: true, 10 | lineWidth: 0, 11 | fillColor: '#85c988' 12 | } 13 | }], { 14 | grid: { 15 | show: false, 16 | hoverable: true 17 | } 18 | }); 19 | 20 | 21 | 22 | var plot = $.plot($('#flotLine1'),[{ 23 | data: [[0, 1], [1, 3], [2,6], [3, 5], [4, 7], [5, 8], [6, 10]], 24 | color: '#fff' 25 | }], 26 | { 27 | series: { 28 | lines: { 29 | show: false 30 | }, 31 | splines: { 32 | show: true, 33 | tension: 0.4, 34 | lineWidth: 2 35 | //fill: 0.4 36 | }, 37 | shadowSize: 0 38 | }, 39 | points: { 40 | show: false, 41 | }, 42 | legend: { 43 | noColumns: 1, 44 | position: 'nw' 45 | }, 46 | grid: { 47 | hoverable: true, 48 | clickable: true, 49 | show: false 50 | }, 51 | yaxis: { 52 | min: 0, 53 | max: 10, 54 | color: '#eee', 55 | font: { 56 | size: 10, 57 | color: '#6a7074' 58 | } 59 | }, 60 | xaxis: { 61 | color: '#eee', 62 | font: { 63 | size: 10, 64 | color: '#6a7074' 65 | } 66 | } 67 | }); 68 | 69 | } )( jQuery ); -------------------------------------------------------------------------------- /public/css/app.css: -------------------------------------------------------------------------------- 1 | .navbar-brand img{ 2 | width: 40px; 3 | } 4 | 5 | .navbar-brand h3{ 6 | display: inline; 7 | vertical-align: bottom; 8 | color: #2E5E99; 9 | } 10 | .content-title { 11 | color: #ffffff; 12 | } 13 | 14 | .widget-dashboard small{ 15 | color: #151CC6; 16 | font-weight: bold; 17 | } 18 | 19 | 20 | .widget-dashboard img{ 21 | width: 50px; 22 | height: 30px; 23 | } 24 | 25 | .widget-dashboard h5{ 26 | text-align: center; 27 | font-weight: bold; 28 | flex-grow: 1; 29 | } 30 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/favicon.ico -------------------------------------------------------------------------------- /public/img/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/avatar.png -------------------------------------------------------------------------------- /public/img/background/bg-login.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/background/bg-login.jpg -------------------------------------------------------------------------------- /public/img/background/bg-ungu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/img/icons/icon-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-avatar.png -------------------------------------------------------------------------------- /public/img/icons/icon-menu-akun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-menu-akun.png -------------------------------------------------------------------------------- /public/img/icons/icon-menu-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-menu-dashboard.png -------------------------------------------------------------------------------- /public/img/icons/icon-menu-jp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-menu-jp.png -------------------------------------------------------------------------------- /public/img/icons/icon-menu-ju.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-menu-ju.png -------------------------------------------------------------------------------- /public/img/icons/icon-menu-laporan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-menu-laporan.png -------------------------------------------------------------------------------- /public/img/icons/icon-menu-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-menu-user.png -------------------------------------------------------------------------------- /public/img/icons/icon-widget-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-widget-1.png -------------------------------------------------------------------------------- /public/img/icons/icon-widget-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-widget-2.png -------------------------------------------------------------------------------- /public/img/icons/icon-widget-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-widget-3.png -------------------------------------------------------------------------------- /public/img/icons/icon-widget-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/icon-widget-4.png -------------------------------------------------------------------------------- /public/img/icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qorthony/Sistem-Informasi-Keuangan/c9ac4cb0a93453eadcc0397741587f09e18895ff/public/img/icons/logo.png -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | systemDirectory, '/ ') . '/bootstrap.php'; 37 | 38 | /* 39 | *--------------------------------------------------------------- 40 | * LAUNCH THE APPLICATION 41 | *--------------------------------------------------------------- 42 | * Now that everything is setup, it's time to actually fire 43 | * up the engines and make this app do its thang. 44 | */ 45 | $app->run(); 46 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /spark: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | systemDirectory, '/ ') . '/bootstrap.php'; 45 | 46 | // Grab our Console 47 | $console = new \CodeIgniter\CLI\Console($app); 48 | 49 | // We want errors to be shown when using it from the CLI. 50 | error_reporting(-1); 51 | ini_set('display_errors', 1); 52 | 53 | // Show basic information before we do anything else. 54 | $console->showHeader(); 55 | 56 | // fire off the command in the main framework. 57 | $response = $console->run(); 58 | if ($response->getStatusCode() >= 300) 59 | { 60 | exit($response->getStatusCode()); 61 | } 62 | -------------------------------------------------------------------------------- /tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php: -------------------------------------------------------------------------------- 1 | [ 13 | 'type' => 'varchar', 14 | 'constraint' => 31, 15 | ], 16 | 'uid' => [ 17 | 'type' => 'varchar', 18 | 'constraint' => 31, 19 | ], 20 | 'class' => [ 21 | 'type' => 'varchar', 22 | 'constraint' => 63, 23 | ], 24 | 'icon' => [ 25 | 'type' => 'varchar', 26 | 'constraint' => 31, 27 | ], 28 | 'summary' => [ 29 | 'type' => 'varchar', 30 | 'constraint' => 255, 31 | ], 32 | 'created_at' => [ 33 | 'type' => 'datetime', 34 | 'null' => true, 35 | ], 36 | 'updated_at' => [ 37 | 'type' => 'datetime', 38 | 'null' => true, 39 | ], 40 | 'deleted_at' => [ 41 | 'type' => 'datetime', 42 | 'null' => true, 43 | ], 44 | ]; 45 | 46 | $this->forge->addField('id'); 47 | $this->forge->addField($fields); 48 | 49 | $this->forge->addKey('name'); 50 | $this->forge->addKey('uid'); 51 | $this->forge->addKey(['deleted_at', 'id']); 52 | $this->forge->addKey('created_at'); 53 | 54 | $this->forge->createTable('factories'); 55 | } 56 | 57 | public function down() 58 | { 59 | $this->forge->dropTable('factories'); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /tests/_support/Database/Seeds/ExampleSeeder.php: -------------------------------------------------------------------------------- 1 | 'Test Factory', 12 | 'uid' => 'test001', 13 | 'class' => 'Factories\Tests\NewFactory', 14 | 'icon' => 'fas fa-puzzle-piece', 15 | 'summary' => 'Longer sample text for testing', 16 | ], 17 | [ 18 | 'name' => 'Widget Factory', 19 | 'uid' => 'widget', 20 | 'class' => 'Factories\Tests\WidgetPlant', 21 | 'icon' => 'fas fa-puzzle-piece', 22 | 'summary' => 'Create widgets in your factory', 23 | ], 24 | [ 25 | 'name' => 'Evil Factory', 26 | 'uid' => 'evil-maker', 27 | 'class' => 'Factories\Evil\MyFactory', 28 | 'icon' => 'fas fa-book-dead', 29 | 'summary' => 'Abandon all hope, ye who enter here', 30 | ], 31 | ]; 32 | 33 | $builder = $this->db->table('factories'); 34 | 35 | foreach ($factories as $factory) 36 | { 37 | $builder->insert($factory); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /tests/_support/DatabaseTestCase.php: -------------------------------------------------------------------------------- 1 | mockSession(); 19 | } 20 | 21 | /** 22 | * Pre-loads the mock session driver into $this->session. 23 | * 24 | * @var string 25 | */ 26 | protected function mockSession() 27 | { 28 | $config = config('App'); 29 | $this->session = new MockSession(new ArrayHandler($config, '0.0.0.0'), $config); 30 | \Config\Services::injectMock('session', $this->session); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tests/database/ExampleDatabaseTest.php: -------------------------------------------------------------------------------- 1 | findAll(); 20 | 21 | // Make sure the count is as expected 22 | $this->assertCount(3, $objects); 23 | } 24 | 25 | public function testSoftDeleteLeavesRow() 26 | { 27 | $model = new ExampleModel(); 28 | $this->setPrivateProperty($model, 'useSoftDeletes', true); 29 | $this->setPrivateProperty($model, 'tempUseSoftDeletes', true); 30 | 31 | $object = $model->first(); 32 | $model->delete($object->id); 33 | 34 | // The model should no longer find it 35 | $this->assertNull($model->find($object->id)); 36 | 37 | // ... but it should still be in the database 38 | $result = $model->builder()->where('id', $object->id)->get()->getResult(); 39 | 40 | $this->assertCount(1, $result); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /tests/session/ExampleSessionTest.php: -------------------------------------------------------------------------------- 1 | session->set('logged_in', 123); 13 | 14 | $value = $this->session->get('logged_in'); 15 | 16 | $this->assertEquals(123, $value); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tests/unit/HealthTest.php: -------------------------------------------------------------------------------- 1 | assertTrue($test); 15 | } 16 | 17 | public function testBaseUrlHasBeenSet() 18 | { 19 | $env = $config = false; 20 | 21 | // First check in .env 22 | if (is_file(HOMEPATH . '.env')) 23 | { 24 | $env = (bool) preg_grep("/^app\.baseURL = './", file(HOMEPATH . '.env')); 25 | } 26 | 27 | // Then check the actual config file 28 | $reader = new \Tests\Support\Libraries\ConfigReader(); 29 | $config = ! empty($reader->baseUrl); 30 | 31 | $this->assertTrue($env || $config); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /writable/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Deny from all 6 | 7 | -------------------------------------------------------------------------------- /writable/cache/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

    Directory access is forbidden.

    9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /writable/logs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

    Directory access is forbidden.

    9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /writable/session/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

    Directory access is forbidden.

    9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /writable/uploads/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

    Directory access is forbidden.

    9 | 10 | 11 | 12 | --------------------------------------------------------------------------------