Journal Entry v2

From AutoCount Resource Center

Technical Specification

  1. Net Total of Debit and Credit must be same amount.
  2. Debit & Credit are not allow to coexist in the same line. Each line is either Debit or Credit.
    • If the source amount is 100 at Debit, and 30 at Credit on the same line, then 70 is placed at Debit.
    Eg. Debit = 100, Credit = 30, then DR = 70
  3. Amount in DR and CR cannot be negative.
    • If the source amount is negative at Debit, then the amount should be placed at Credit.
    Eg. Debit = -100, then CR = 100


References of AutoCount Accounting 2.0

AutoCount.Accounting.dll
AutoCount.Accounting.UI.dll
AutoCount.dll
AutoCount.MainEntry.dll
AutoCount.UI.dll
AutoCount.GL.dll



Sample with data model

Create new Journal Entry

Split Amount (Debit & Credit)

public void NewJournalEntry(AutoCount.Authentication.UserSession userSession, JournalSource source)
{
    AutoCount.GL.JournalEntry.JournalEntryCommand cmd = AutoCount.GL.JournalEntry.JournalEntryCommand.Create(userSession, userSession.DBSetting);

    AutoCount.GL.JournalEntry.JournalEntry doc = cmd.AddNew();
    AutoCount.GL.JournalEntry.JournalEntryDetail dtl = null;

    doc.Description = source.Description;
    doc.CurrencyCode = source.CurrencyCode;
    doc.CurrencyRate = source.CurrencyRate;
    doc.DocNo = source.VoucherNo;
    doc.DocDate = source.VoucherDate;
    //Document Level Inclusive Tax
    doc.InclusiveTax = source.InclusiveTax;

    foreach (JournalDetail jnDtl in source.Details)
    {
        dtl = doc.AddDetail();
        dtl.AccNo = jnDtl.Account;
        dtl.Description = jnDtl.Description;
        dtl.ProjNo = jnDtl.Project;
        dtl.DeptNo = jnDtl.Department;
        dtl.TaxType = jnDtl.GSTCode;
        dtl.SupplyPurchase = jnDtl.GSTSupplyPurchase;
        //Detail Level Inclusive Tax
        dtl.InclusiveTax = jnDtl.InclusiveTax;

        if (jnDtl.DebitAmount.HasValue)
            dtl.DR = jnDtl.DebitAmount.Value;
        else
            dtl.CR = jnDtl.CreditAmount.Value;
    }

    try
    {
        doc.Save();
        //log success
    }
    catch (AutoCount.AppException ex)
    {
        //log ex.Message
    }
}
When dtl.DR is assigned with a value, system will reset the value of dtl.CR.
Likewise same behavior apply to dtl.CR.
To learn about differences of Document Level & Detail Level Tax Inclusive, see Inclusive GST in Cash Book

Single Amount (Positive & Negative)

Another way to accept value into Debit and Credit with positive or negative amount;

public void NewSingleAmountJournalEntry(UserSession userSession, SingleAmountJournalSource source)
{
    AutoCount.GL.JournalEntry.JournalEntryCommand cmd = AutoCount.GL.JournalEntry.JournalEntryCommand.Create(userSession, userSession.DBSetting);
    AutoCount.GL.JournalEntry.JournalEntry doc = cmd.AddNew();
    AutoCount.GL.JournalEntry.JournalEntryDetail dtl = null;

    //Assign necessary values to master fields

    foreach (SingleAmountJournalDetail jnDtl in source.Details)
    {
        dtl = doc.AddDetail();
        //Assign necessary values to detail fields

        if (jnDtl.Amount > 0)
            dtl.DR = jnDtl.Amount;
        else
            dtl.CR = jnDtl.Amount;
    }

    try
    {
        doc.Save();
        //log success
    }
    catch (AutoCount.AppException ex)
    {
        //log ex.Message
    }
}

Classes of source (data model)

Split Amount (Debit & Credit)

public class JournalSource
{
    public string Description { get; set; }
    public string CurrencyCode { get; set; }
    public decimal CurrencyRate { get; set; }
    public string VoucherNo { get; set; }
    public DateTime VoucherDate { get; set; }
    public bool InclusiveTax { get; set; } = false;
    public List<JournalDetail> Details { get; set; } = new List<JournalDetail>();
}

public class JournalDetail
{
    public string Account { get; set; }
    public string Description { get; set; }
    public string Project { get; set; }
    public string Department { get; set; }
    public decimal? DebitAmount { get; set; }
    public decimal? CreditAmount { get; set; }
    public AutoCount.Tax.TaxSupplyPurchase GSTSupplyPurchase { get; set; } = AutoCount.Tax.TaxSupplyPurchase.Supply;
    public string GSTCode { get; set; }
    public bool InclusiveTax { get; set; } = false;
}

Single Amount (Positive & Negative)

public class SingleAmountJournalSource
{
    public string Description { get; set; }
    public string CurrencyCode { get; set; }
    public decimal CurrencyRate { get; set; }
    public string VoucherNo { get; set; }
    public DateTime VoucherDate { get; set; }
    public bool InclusiveTax { get; set; } = false;
    public List<SingleAmountJournalDetail> Details { get; set; } = new List<SingleAmountJournalDetail>();
}

public class SingleAmountJournalDetail
{
    public string Account { get; set; }
    public string Description { get; set; }
    public string Project { get; set; }
    public string Department { get; set; }
    public decimal Amount {get; set;}
    public AutoCount.Tax.TaxSupplyPurchase GSTSupplyPurchase { get; set; } = AutoCount.Tax.TaxSupplyPurchase.Supply;
    public string GSTCode { get; set; }
    public bool InclusiveTax { get; set; } = false;
}

Implementation

Split Amount (Debit & Credit)

public MainEntry(AutoCount.Authentication.UserSession userSession)
{
    JournalSource newJN = new JournalSource()
    {
        Description = "SALARY APRIL 2018",
        CurrencyCode = "MYR",
        CurrencyRate = 1,
        VoucherNo = "<<New>>",
        VoucherDate = new DateTime(2018, 04, 30),
    };

    newJN.Details.Add(new JournalDetail(){ Account = "410-0000", Description = "SALARY APRIL 2018", CreditAmount = 11956.00M });
    newJN.Details.Add(new JournalDetail(){ Account = "900-1005", Description = "TOM",             DebitAmount = 5000M });
    newJN.Details.Add(new JournalDetail(){ Account = "900-1005", Description = "JERRY",           DebitAmount = 4800M });
    newJN.Details.Add(new JournalDetail(){ Account = "700-3010", Description = "SALARY APRIL 2018", DebitAmount = 1176M });
    newJN.Details.Add(new JournalDetail(){ Account = "700-3015", Description = "SALARY APRIL 2018", DebitAmount = 980M });

    NewJournalEntry(userSession, newJN);
}

Single Amount (Positive & Negative)

public SingleAmountMainEntry(AutoCount.Authentication.UserSession userSession)
{
    JournalSource newJN = new JournalSource()
    {
        Description = "SALARY APRIL 2018",
        CurrencyCode = "MYR",
        CurrencyRate = 1,
        VoucherNo = "<<New>>",
        VoucherDate = new DateTime(2018, 04, 30),
    };

    newJN.Details.Add(new JournalDetail(){ Account = "410-0000", Description = "SALARY APRIL 2018", Amount = -11956.00M });
    newJN.Details.Add(new JournalDetail(){ Account = "900-1005", Description = "TOM",             Amount = 5000M });
    newJN.Details.Add(new JournalDetail(){ Account = "900-1005", Description = "JERRY",           Amount = 4800M });
    newJN.Details.Add(new JournalDetail(){ Account = "700-3010", Description = "SALARY APRIL 2018", Amount = 1176M });
    newJN.Details.Add(new JournalDetail(){ Account = "700-3015", Description = "SALARY APRIL 2018", Amount = 980M });

    NewSingleAmountJournalEntry(userSession, newJN);
}


See Also

Go to menu

Go to top
Resources For AutoCount Software Developers