<?php


/**
 * Помощен клас-имплементация на интерфейса acc_TransactionSourceIntf за класа accda_Da
 *
 * @category  bgerp
 * @package   accda
 *
 * @author    Ivelin Dimov <ivelin_pdimov@abv.com>
 * @copyright 2006 - 2020 Experta OOD
 * @license   GPL 3
 *
 * @since     v 0.1
 * @see acc_TransactionSourceIntf
 *
 */
class accda_transaction_Da extends acc_DocumentTransactionSource
{
    /**
     *
     * @var accda_Da
     */
    public $class;
    
    
    /**
     *  Имплементиране на интерфейсен метод (@see acc_TransactionSourceIntf)
     *  Създава транзакция която се записва в Журнала, при контирането
     */
    public function getTransaction($id)
    {
        // Извличаме записа
        expect($rec = $this->class->fetchRec($id));
        
        if (acc_Journal::throwErrorsIfFoundWhenTryingToPost()) {
            if($redirectError = deals_Helper::getContoRedirectError(array($rec->productId => $rec->productId), 'fixedAsset', 'generic', 'трябва да е дълготраен актив и да не е генеричен')){
                acc_journal_RejectRedirect::expect(false, $redirectError);
            }
        }
        
        $entries = array();
        
        if ($rec->id) {
            $pInfo = cat_Products::getProductInfo($rec->productId);
            if (isset($pInfo->meta['canStore'])) {
                if (acc_Journal::throwErrorsIfFoundWhenTryingToPost()) {
                    if(empty($rec->storeId)){
                        acc_journal_RejectRedirect::expect(false, 'Дълготрайният актив е складируем, а не е избран склад');
                    }
                }
                
                $creditArr = array('321',
                    array('store_Stores', $rec->storeId),
                    array('cat_Products', $rec->productId),
                    'quantity' => 1,
                );
            } else {
                $creditArr = array('613',
                    array('cat_Products', $rec->productId),
                    'quantity' => 1,);
            }
            
            $debitArr = array(acc_Accounts::fetchField($rec->accountId, 'systemId'), array('accda_Da', $rec->id));
            
            $entries[] = array(
                'debit' => $debitArr,
                'credit' => $creditArr,
            );
        }
        
        // Подготвяме информацията която ще записваме в Журнала
        $result = (object) array(
            'reason' => $this->class->getRecTitle($rec), // основанието за ордера
            'valior' => $rec->valior,   // датата на ордера
            'entries' => $entries);
        
        return $result;
    }
}
