
Accounting
This Yii2 module provides support for balance accounting (bookkeeping) system based on debit and credit principles.
Provide additinal functionality:
* periods (closing period and period balance)
* dynamicly creating accounts attached one or more tables
Installation
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist d3yii2/yii2-d3acc "*"
or add
"d3yii2/yii2-d3acc": "*"
to the require section of your composer.json file.
push migration
DB structure

Account definition
Create object acc
use \d3acc\models\AcRecAcc;
use Yii;
/
 * Description of acc
 *
 * @author Dealer
 */
 class acc
{
    const MONTH_PERIOD = 1;
    const PLAYER_ACC        = 4;
    const EXPENSES          = 10;
    const FOND_PLAYGROUND   = 7;
    
    acc::CODE_CRD_PLAYGROUND = 'CreditPlaygound';
    /
     * get player  account
     * @param int $personId
     * @return AcRecAcc
     */
    public static function player($personId)
    {
        return AcRecAcc::getAcc(self::PLAYER_ACC, ['person' => $personId]);
    }
    /
     * get expenses  account
     * @return AcRecAcc
     */
    public static function expenses()
    {
        return AcRecAcc::getAcc(self::EXPENSES);
    }
    
    /
     * get for player playground account
     * @param int $personId
     * @param int $playgroundId
     * @return AcRecAcc
     */
    public static function fondPlayground($personId, $playgroundId)
    {
        return AcRecAcc::getAcc(self::FOND_PLAYGROUND,
                ['person' => $personId, 'playground' => $playgroundId]);
    }    
}
 
Transaction registration
       /
        * player accounts
        */
       $recAccPPG    = acc::playerPlayground($person_id, $playground_id);
       $recAccPlayer = acc::player($person_id);
       $day = date('Y-m-d');
       $tran = AcTran::registre($recAccPlayer, $recAccPPG, $personAmt,
               $day, acc::MONTH_PERIOD, acc::CODE_CRD_PLAYGROUND);
Periods
use d3acc\models\AcPeriod;
$acPeriod = AcPeriod::getActivePeriod(acc::MONTH_PERIOD))
//close period
\d3acc\components\PeriodMonth::close(acc::MONTH_PERIOD);
Transactions
 $recAccPlayer = acc::player($person_id);
 $data = AcTran::accPeriodTran($recAccPlayer, $acPeriod);
Balance
 $filter  = ['playground' => $playgroundId]
 $playgroundAllPersonBalance = AcTran::accBalanceFilter(acc::FOND_PLAYGROUND, $acPeriod,$filter);
 
 $filter  = ['person' => $personId]
 $personAllPlaygroundsBalance = AcTran::accBalanceFilter(acc::FOND_PLAYGROUND, $acPeriod,$filter);
 
 $allPlaygroundsAllPersonBalance = AcTran::accBalanceFilter(acc::FOND_PLAYGROUND, $acPeriod,[]);
Define account plan by creating acc class
Add definition record in tables
Migrations with AccConstructor
$constructor = new AccConstructor();
Load existind or create new account (ac_account table) for session
$constructor->load($accId);
$constructor->create($code, $name);
Add new account dimension (ac_def table) for loaded/created account
$definition = $constructor->addDimension($table, $pkField);
Add new extended-account (ac_rec_acc table) for loaded/created account
$extAccount = $constructor->addExtendedAccount();
Add new dimension value (ac_rec_ref table) and recalculate label for given extended-account (ac_rec_acc table)
$constructor->addDimensionRecAcc($extAccount->id, $definition->id, $pk_value);