wtorek, 5 marca 2013

Create ledger journal from code (using LedgerJournalEngine)

  
static void SBR_Create_Ledger_Journal(Args _args)
{
    #define.JournalName('KOST12')
    
    LedgerJournalName       ledgerJournalName;
    LedgerJournalTable      ledgerJournalTable;
    LedgerJournalTrans      ledgerJournalTrans;
    LedgerJournalId         journalId;
    Amount                  amount;
    LedgerJournalEngine     engine;
    ;   
    ttsBegin;

    ledgerJournalName = LedgerJournalName::find(#JournalName);
    
    ledgerJournalTable.clear();
    ledgerJournalTable.JournalName  = ledgerJournalName.JournalName;
    ledgerJournalTable.initFromLedgerJournalName();
    ledgerJournalTable.insert();

    journalId = ledgerJournalTable.JournalNum;
    
    // Create Trans
    engine = LedgerJournalEngine::construct(ledgerJournalName.JournalType);
    engine.newJournalActive(ledgerJournalTable);

    ledgerJournalTrans.clear();
    ledgerJournalTrans.initValue();
    ledgerJournalTrans.JournalNum = journalId;
    engine.initValue(ledgerJournalTrans);

    // account
    ledgerJournalTrans.AccountType          = LedgerJournalACType::Cust;
    engine.accountNumModified(ledgerJournalTrans);

    ledgerJournalTrans.AccountNum           = '10058';
    engine.accountModified(ledgerJournalTrans);

    // offset account
    ledgerJournalTrans.OffsetAccountType    = LedgerJournalACType::Ledger;
    engine.offsetAccountTypeModified(ledgerJournalTrans);

    ledgerJournalTrans.OffsetAccount        = '22500';
    engine.offsetAccountModified(ledgerJournalTrans);

    // dimensions
    ledgerJournalTrans.Dimension[1] = '';
    ledgerJournalTrans.Dimension[2] = '';
    ledgerJournalTrans.Dimension[3] = '';
    engine.initDimension(ledgerJournalTrans);

    // amount
    amount = 100;
    
    ledgerJournalTrans.AmountCurCredit  = (amount > 0 ? abs(amount) : 0);

    if (ledgerJournalTrans.AmountCurCredit)
        engine.amountCurCreditModified(ledgerJournalTrans);

    ledgerJournalTrans.AmountCurDebit   = (amount < 0 ? abs(amount) : 0);
    
    if (ledgerJournalTrans.AmountCurDebit)
        engine.amountCurDebitModified(ledgerJournalTrans);

    ledgerJournalTrans.insert();

    pause;

    ttsCommit;
    
    info(strFmt('created journal %1', journalId));
}