Un buen negocio o empresa con un numero de empleados considerable siempre va a necesitar un buen sistema de nomina sobre todo para sacar reportes, generar archivos de dispersión de nomina para pagarle a través del banco y sobre todo para generar el timbrado.

Durante las siguientes publicaciones mostraremos como desarrollar un sistema de nomina completo en CodeIgniter 4.x

Primero crearemos la base del proyecto

Creamos el proyecto via composer con el siguiente codigo

composer create-project codeigniter4/appstarter Nomina2023

Creamos la tabla nomina2023 en mariaDB/MySQL o en el motor de su preferencia

en app/config/database.php cambiamos la configuración de la base de datos default lo dejamos de la siguiente forma, igual si ustedes le quieren poner alguna contraseña por seguridad pueden ponersela

    public $default = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'nomina2023',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => false,
        'DBDebug'  => (ENVIRONMENT !== 'production'),
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'     => 3306,
    ];

en app/config/app.php modificamos las siguientes variables

 public $indexPage = '';
public $defaultLocale = 'es';
public $supportedLocales = ['es'];

Para debugear ponemos este codigo al final del archivo app/config/constants.php

define("ENVIRONMENT","development");

Ahora procedemos a instalar boilerplate el cual nos servirá para instalar la plantilla adminLTE3 con un administrador de usuario/roles/permisos/login

Primero instalamos via composer con el siguiente comando

composer require agungsugiarto/boilerplate

Instalamos Auth que es lo que permitirá logearnos administrar usuarios, permisos y roles

php spark auth:publish

Publish Migration? [y, n]: y
  created: Database/Migrations/2017-11-20-223112_create_auth_tables.php
  Remember to run `spark migrate -all` to migrate the database.
Publish Models? [y, n]: n
Publish Entities? [y, n]: n
Publish Controller? [y, n]: n
Publish Views? [y, n]: n
Publish Filters? [y, n]: n
Publish Config file? [y, n]: y
  created: Config/Auth.php
Publish Language file? [y, n]: n

en app/config/auth.php remplazamos el siguiente codigo

public $views = [
    'login'           => 'agungsugiarto\boilerplate\Views\Authentication\login',
    'register'        => 'agungsugiarto\boilerplate\Views\Authentication\register',
    'forgot'          => 'agungsugiarto\boilerplate\Views\Authentication\forgot',
    'reset'           => 'agungsugiarto\boilerplate\Views\Authentication\reset',
    'emailForgot'     => 'agungsugiarto\boilerplate\Views\Authentication\emails\forgot',
    'emailActivation' => 'agungsugiarto\boilerplate\Views\Authentication\emails\activation',
];

en app/config/filters.php agregamos los siguientes alias

public $aliases = [
    'login'      => \Myth\Auth\Filters\LoginFilter::class,
    'role'       => \agungsugiarto\boilerplate\Filters\RoleFilter::class,
    'permission' => \agungsugiarto\boilerplate\Filters\PermissionFilter::class,
]

Instalamos, migramos y sembramos boilerplate con el siguiente comando

php spark boilerplate:install

En controller/home.php lo dejamos de la siguiente manera para que siempre nos retorne al admin

<?php

namespace App\Controllers;

class Home extends BaseController
{
    public function index()
    {
      return redirect()->to('/admin');
    }
}

En app/config/Boilerplate.php modificamos public $i18n = ‘Indonesian’; a public $i18n = ‘Spanish’; para cambiar el idioma del datable, para el nombre del programa cambiamos public $appName = ‘Boilerplate’; por public $appName = ‘Nomina 2023’;

Tambien modificamos el brand a nuestro antojo yo lo modifique de esta manera

  //--------------------------------------------------------------------------
    // Theme boilerplate
    //
    // BG: blue, indigo, purple, pink, red, orange, yellow, green, teal, cyan,
    //     gray, gray-dark, black
    // Type: dark, light
    // Shadow: 0-4
    //
    //--------------------------------------------------------------------------

    public $theme = [
        'body-sm' => false,
        'navbar'  => [
            'bg'     => 'white',
            'type'   => 'light',
            'border' => true,
            'user'   => [
                'visible' => true,
                'shadow'  => 0,
            ],
        ],
        'sidebar' => [
            'type'    => 'dark',
            'shadow'  => 4,
            'border'  => false,
            'compact' => true,
            'links'   => [
                'bg'     => 'blue',
                'shadow' => 1,
            ],
            'brand' => [
                'bg'   => 'gray-dark',
                'logo' => [
                    'icon'   => 'favicon.ico', // path to image | this example icon on public root folder.
                    'text'   => '<strong>Nomina</strong>2023',
                    'shadow' => 2,
                ],
            ],
            'user' => [
                'visible' => true,
                'shadow'  => 2,
            ],
        ],
        'footer' => [
            'fixed'      => false,
            'vendorname' => 'CesarSytems',
            'vendorlink' => 'https://cesarsystems.com.mx/',
        ],
    ];

iniciamos el programa con el siguiente comando

php spark serve

Los usuarios y contraseña por default son los siguientes

+----+--------+-------------+
| No | User   | Password    |
+----+--------+-------------+
| 1  | admin  | super-admin |
| 2  | user   | super-user  |
+----+--------+-------------+

Y listo ya tenemos nuestro marco para empezar a trabajar