/home/edulekha/crm.edulekha.com/modules/einvoice/einvoice.php
<?php

defined('BASEPATH') or exit('No direct script access allowed');

/*
Module Name: e-Invoice
Description: Default module for e-Invoice
Version: 1.0.0
Requires at least: 3.3.*
*/

require __DIR__ . '/vendor/autoload.php';

hooks()->add_filter('module_einvoice_action_links', 'module_einvoice_action_links');
function module_einvoice_action_links(array $actions): array
{
    $actions[] = '<a href="' . admin_url('settings?group=einvoice') . '">' . _l('settings') . '</a>';
    return $actions;
}

hooks()->add_action('admin_init', 'einvoice_module_init');
function einvoice_module_init(): void
{
    $CI = &get_instance();
    $CI->load->helper('einvoice/einvoice');
    $CI->app->add_settings_section_child(
        'finance',
        'einvoice',
        [
            'name'     => _l('settings_group_einvoice'),
            'view'     => 'einvoice/settings',
            'position' => 35,
            'icon'     => 'fa-regular fa-file-text',
        ],
    );

    if (staff_can('bulk_export',  'einvoice_module')) {
        $CI->app_menu->add_sidebar_children_item('utilities', [
            'slug'     => 'einvoice_module_bulk_export',
            'name'     => _l('einvoice_module_bulk_export'),
            'href'     => admin_url('einvoice/export'),
            'position' => 11,
        ]);
    }

    register_staff_capabilities(
        'einvoice_module',
        [
            'capabilities' => [
                'bulk_export' => _l('einvoice_module_permission_bulk'),
            ]
        ],
        _l('einvoice')
    );
}

hooks()->add_action('activate_einvoice_module', 'einvoice_module_activation_hook');
function einvoice_module_activation_hook(): void
{
    add_option('einvoice_send_as_invoice_email_attachment', '0');
    add_option('einvoice_default_credit_note_email_template', '0');
    add_option('einvoice_default_invoice_template');
    add_option('einvoice_default_credit_note_template');
}

hooks()->add_action('before_invoice_preview_more_menu_button', 'einvoice_module_invoice_button');
function einvoice_module_invoice_button($invoice): void
{
    $ci = &get_instance();
    $ci->load->view('einvoice/buttons/invoice', ['invoice' => $invoice]);
}

hooks()->add_action('before_credit_note_preview_more_menu_button', 'einvoice_module_credit_note_button');
function einvoice_module_credit_note_button($creditNote): void
{
    $ci = &get_instance();
    $ci->load->view('einvoice/buttons/credit_note', ['creditNote' => $creditNote]);
}