# Configurations

```php
<?php

/*
 * You can place your custom package configuration in here.
 */
return [
    /*
    |--------------------------------------------------------------------------
    | Database Configurations
    |--------------------------------------------------------------------------
    |
    */
    'table_prefix' => 'payable_',

    /*
    |--------------------------------------------------------------------------
    | Fiscal Configurations
    |--------------------------------------------------------------------------
    |
    */
    'fiscal_auto_update' => true,
    'start_date' => '7-16',
    'leap_year' => \Pratiksh\Payable\Services\IsLeapYear::class,
    'current_year' => \Pratiksh\Payable\Services\CurrentYear::class,

    /*
    |--------------------------------------------------------------------------
    | Receipt No Structure
    |--------------------------------------------------------------------------
    */
    'receipt_no' => \Pratiksh\Payable\Contracts\ReceiptNoInterface::class,

    /*
    |--------------------------------------------------------------------------
    | Default User Table
    |--------------------------------------------------------------------------
    |
    */
    'user_model' => App\Models\User::class,
    'user_table_primary_key' => 'id',
];

```

### Leap Year

Sometimes some countries don't follow standard `Carbon::now()->isLeapYear()` logic. Hence we can change that by using a class-implementing `IsLeapYearInterface` interface.

For example, In the Nepali calendar, which is also known as the Bikram Sambat (B.S.) calendar, leap years are calculated based on a specific rule. The Nepali calendar follows a 57-year cycle, where every 57th year is a leap year. This means that in the Nepali calendar, leap years occur at regular intervals and are predictable.

Let's create a class  `IsNepaliNewYear`

```php
<?php
namespace App\Services;

use Carbon\Carbon;
use Pratiksh\Payable\Contracts\IsLeapYearInterface;

class IsNepaliNewYear implements IsLeapYearInterface
{
    /**
     * Leap year logic
     * Determine how leap year is identified.
     */
    public function __invoke($year = null): bool
    {
        // Check if the year is divisible by 4 and not divisible by 100
        // Or if it's divisible by 400, then it's a leap year
        return (($year % 4 == 0) && ($year % 100 != 0)) || ($year % 400 == 0);
    }
}
```

Then change `leap_year` the configuration in `payable.php` config file.

```php
 'leap_year' => \App\Services\IsNepali::class,
```

### Current Year

Sometimes some countries don't follow standard `Carbon::now()->year` logic. Hence we can change that by using a class-implementing `CurrentYearInterface`interface.

For example, In the Nepali calendar, which is also known as the Bikram Sambat (B.S.) calendar, 2024 AD is 2080-81 B.S

Let's create a class  `NepaliCurrentYear` implementing `CurrentYearInterface` and use composer package `pratiksh/nepalidate`

<pre class="language-php"><code class="lang-php">&#x3C;?php
namespace App\Services;

use Carbon\Carbon;
use Pratiksh\Payable\Contracts\CurrentYearInterface;

class NepaliCurrentYear implements CurrentYearInterface
{
    /**
     * Leap year logic
     * Determine how leap year is identified.
     */
    public function __invoke(): int
    {
<strong>       return toDetailBS(\Carbon\Carbon::now())->year;
</strong>    }
}
</code></pre>

Then change `current_year`the configuration in `payable.php` config file.

```php
 'leap_year' => \App\Services\NepaliCurrentYear::class,
```

### Receipt Number

Payable package uses default `Pratiksh\Payable\Services\ReceiptNo` class to return receipt no structure of payment which is as below :-

```php
<?php
namespace Pratiksh\Payable\Services;

use Pratiksh\Payable\Contracts\ReceiptNoInterface;
use Pratiksh\Payable\Facades\Payable;
use Pratiksh\Payable\Models\Payment;

class ReceiptNo implements ReceiptNoInterface
{
    /**
     * Returns receipt no structure.
     */
    public function __invoke($year = null): string
    {
        $year = $year ?? Payable::fiscal()->year;

        return $year.'-'.str_pad(Payment::count() + 1, 5, '0', STR_PAD_LEFT);
    }
}
```

Here receipt number structure is current fiscal year and payment count added one.

We can change this strcuture by our own structure.

Let's create a class  `MyReceiptNo` implementing `ReceiptNoInterface`

```php
<?php
namespace App\Services;

use Carbon\Carbon;
use Pratiksh\Payable\Contracts\ReceiptNoInterface;

class MyReceiptNo implements ReceiptNoInterface
{
    /**
     * Returns receipt no structure.
     */
    public function __invoke($year = null): string
    {
        return rand(100000,999999);
    }
}
```

Then change `current_year`the configuration in `payable.php` config file.

```php
 'receipt_no' => \App\Services\MyReceiptNo::class,
```
