AR Debtor v2

From AutoCount Resource Center

References of AutoCount Accounting version 2.0

AutoCount.Accounting.dll
AutoCount.Accounting.UI.dll
AutoCount.dll
AutoCount.MainEntry.dll
AutoCount.UI.dll
AutoCount.ARAP.dll

Load Data with API

Single Record

Load one debtor by specifying the DebtorCode (AccNo).

public void ExampleOfSingleDebtorRecord(string accNo, AutoCount.Data.DBSetting dbset)
{
    AutoCount.Data.DebtorRecord debtorRec = AutoCount.Data.RecordUtils.GetDebtor(dbset, accNo);
    if (debtorRec != null)
    {
        string companyName = debtorRec.CompanyName;
        string addr1 = debtorRec.Address1;
        string addr2 = debtorRec.Address2;
        string addr3 = debtorRec.Address3;
        string addr4 = debtorRec.Address4;
        string attention = debtorRec.Attention;
        string phone = debtorRec.Phone1;
        decimal? creditLimit = debtorRec.CreditLimit;
        decimal? overdueLimit = debtorRec.OverdueLimit;
    }
}

Multiple Records with Filter

Load more than one debtor.
Programmer can specify which columns to load, while defining the filter of which debtor to be loaded.
This example shows how to load debtor that was modified since a specific date.

public System.Data.DataTable GetModifiedDebtorData(DateTime filterFromDate, AutoCount.Authentication.UserSession userSession)
{
    //Create a DataAccess object of Debtor
    AutoCount.ARAP.Debtor.DebtorDataAccess cmd =
        AutoCount.ARAP.Debtor.DebtorDataAccess.Create(userSession, userSession.DBSetting);

    //Create debtor data loading criteria
    AutoCount.SearchFilter.SearchCriteria loadDebtorCriteria =
        new AutoCount.SearchFilter.SearchCriteria();

    //SearchCriteria requires a SearchFilter
    //Create the SearchFilter by Range
    AutoCount.SearchFilter.Filter filterLastModified =
        new AutoCount.SearchFilter.Filter("a", "LastModified");
    filterLastModified.Type = AutoCount.SearchFilter.FilterType.ByRange;

    //When .To is not define, the filter is from the lastModifiedDate onwards
    filterLastModified.From = filterFromDate;
    //When a range of date that requires "to date", assign .To to implement from...to.
    //filterLastModified.To = new DateTime(2018, 12, 31);

    //Add the Filter to Criteria
    //Can support more than one filter
    loadDebtorCriteria.AddFilter(filterLastModified);

    //fields to be loaded into DataTable
    string[] columns = { "AccNo", "CompanyName", "Address1", "Address2",
        "DeliverAddr1", "DeliverAddr2", "Attention", "Phone1", "AreaCode", "SalesAgent", "EmailAddress", "CreditLimit", "LastModified"};

    return cmd.LoadDebtorData(columns, loadDebtorCriteria);
}

Sample with Data Model

Create new AR Debtor

public void CreateNewDebtor(AutoCount.Authentication.UserSession userSession, DebtorSource source)
{
    string newDebtorCode = GetNewDebtorCode(userSession, source.ControlAccount, source.CompanyName);
    if (newDebtorCode == null)
        return;

    string userId = userSession.LoginUserID;
    AutoCount.ARAP.Debtor.DebtorDataAccess cmd = AutoCount.ARAP.Debtor.DebtorDataAccess.Create(userSession, userSession.DBSetting);
    AutoCount.ARAP.Debtor.DebtorEntity debtor = cmd.NewDebtor();

    debtor.ControlAccount = source.ControlAccount;
    debtor.AccNo = newDebtorCode;
    debtor.CompanyName = source.CompanyName;
    debtor.Address1 = source.Addr1;
    debtor.Address2 = source.Addr2;
    debtor.Address3 = source.Addr3;
    debtor.Address4 = source.Addr4;
    debtor.Phone1 = source.Phone;
    debtor.Phone2 = source.Mobile;
    debtor.Attention = source.ContactPerson;
    debtor.EmailAddress = source.Email;
    debtor.CurrencyCode = AccountBookLocalCurrency(userSession);

    try
    {
        cmd.SaveDebtor(debtor, userId);
        //Log Success
    }
    catch (AutoCount.AppException ex)
    {
        //Log fail
    }
}

Get Next Debtor Code

public string GetNewDebtorCode(AutoCount.Authentication.UserSession userSession, string controlAccNo, string companyName)
{
    try
    {
        return AutoCount.GL.AccountCodeHelper.Create(userSession.DBSetting)
            .GetNextDebtorCode(controlAccNo, companyName);
    }
    catch (AutoCount.GL.InvalidAutoDebtorCodeFormatException ex)
    {
        //Log error ex.Message;
    }
    catch (AutoCount.Data.DataAccessException ex)
    {
        //Log error ex.Message;
    }

    //If the catch throw out exception, then return null is not necessary.
    return null;
}

Get Local Currency Code

public string AccountBookLocalCurrency(AutoCount.Authentication.UserSession userSession)
{
    return AutoCount.Data.DBRegistry.Create(userSession.DBSetting)
        .GetString(new AutoCount.RegistryID.LocalCurrencyCode());
}

Class of source data

public class DebtorSource
{
    public string ControlAccount { get; set; }
    public string CompanyName { get; set; }
    public string Addr1 { get; set; }
    public string Addr2 { get; set; }
    public string Addr3 { get; set; }
    public string Addr4 { get; set; }
    public string Phone { get; set; }
    public string Mobile { get; set; }
    public string ContactPerson { get; set; }
    public string Email { get; set; }
}

Implementation

public MainEntry(BCE.Data.DBSetting dbSetting)
{
    DebtorSource newDebtor = new DebtorSource()
    {
        ControlAccount = "300-0000",
        CompanyName = "CALIFORNIA SB",
        Addr1 = "1, Jalan SS 1/1,",
        Addr2 = "Taman Gembira,",
        Addr3 = "Selangor Darah Ehsan,",
        Addr4 = "41300 Malaysia.",
        Phone = "603-719 1992",
        Mobile = "016-221 2222",
        ContactPerson = "Ben",
        Email = "ben@calimail.com",
    };

    CreateNewDebtor(dbSetting, newDebtor);
}

Branch for Debtor

Create New Debtor with Branch

public string NewDebtorWithBranch()
{
    string debtorControlAccount = "300-0000";
    string companyName = "ABC Company";

    AutoCount.ARAP.Debtor.DebtorDataAccess cmd =
            AutoCount.ARAP.Debtor.DebtorDataAccess.Create(myUserSession, myUserSession.DBSetting);
    AutoCount.ARAP.Debtor.DebtorEntity debtor = cmd.NewDebtor();

    string autoNewDebtorCode = GetNewDebtorCode(myUserSession, debtorControlAccount, companyName);
    if (autoNewDebtorCode == null)
        return null;

    debtor.ControlAccount = debtorControlAccount;
    debtor.AccNo = autoNewDebtorCode;
    debtor.CompanyName = companyName;
    debtor.Address1 = "<assign address 1>";
    debtor.Address2 = "<assign address 2>";
    debtor.Address3 = "<assign address 3>";
    debtor.Address4 = "<assign address 4>";
    debtor.Phone1 = "<assign phone 1>";
    debtor.Phone2 = "<assign phone 2>";
    debtor.Attention = "<assign attention>";
    debtor.EmailAddress = "<assign email address>";
    debtor.CurrencyCode = AccountBookLocalCurrency(myUserSession); //Get default account book currency

    //Create new branch
    AddNewBranch(debtor);

    cmd.SaveDebtor(debtor, myUserSession.LoginUserID);
    return debtor.AccNo;
}

private void AddNewBranch(AutoCount.ARAP.Debtor.DebtorEntity debtor)
{
    AutoCount.ARAP.Debtor.BranchEntity branch = debtor.NewBranch();
    branch.BranchCode = "Branch0001";   //Size=20
    branch.BranchName = "Branch 0001";  //Size=100
    branch.Address1 = null;
    branch.Address2 = null;
    branch.Address3 = null;
    branch.Address4 = null;
    branch.PostCode = null;
    branch.Mobile = null;
    branch.Contact = null;
    branch.Phone1 = null;
    branch.Phone2 = null;
    branch.Fax1 = null;
    branch.Fax2 = null;
    branch.SalesAgent = null;
    branch.AreaCode = null;          
    branch.EmailAddress = null;
}

New or update Debtor with Branch

public string NewUpdateDebtorWithBranch(string debtorAccNo)
{
    string debtorControlAccount = "300-0000";
    string companyName = "ABC Company";
    string branchCode = "Branch01";

    AutoCount.ARAP.Debtor.DebtorDataAccess cmd =
            AutoCount.ARAP.Debtor.DebtorDataAccess.Create(myUserSession, myUserSession.DBSetting);
    //Load Debtor record
    AutoCount.ARAP.Debtor.DebtorEntity debtor = cmd.GetDebtor(debtorAccNo);
    //If debtor record is not found
    if (debtor == null)
    {
        string autoNewDebtorCode = GetNewDebtorCode(myUserSession, debtorControlAccount, companyName);
        if (autoNewDebtorCode == null)
            return null;

        debtor = cmd.NewDebtor();
        //AccNo and CurrencyCode cannot be changed when already has transaction or being referenced in document.
        debtor.AccNo = autoNewDebtorCode;
        debtor.CurrencyCode = AccountBookLocalCurrency(myUserSession); //Get default account book currency
    }

    debtor.ControlAccount = debtorControlAccount;
    debtor.CompanyName = companyName;
    debtor.Address1 = "<assign address 1>";
    debtor.Address2 = "<assign address 2>";
    debtor.Address3 = "<assign address 3>";
    debtor.Address4 = "<assign address 4>";
    debtor.Phone1 = "<assign phone 1>";
    debtor.Phone2 = "<assign phone 2>";
    debtor.Attention = "<assign attention>";
    debtor.EmailAddress = "<assign email address>";

    //Create new branch
    AddUpdateBranch(debtor, branchCode);

    cmd.SaveDebtor(debtor, myUserSession.LoginUserID);
    return debtor.AccNo;
}
private void AddUpdateBranch(AutoCount.ARAP.Debtor.DebtorEntity debtor, string branchCode)
{
    AutoCount.ARAP.Debtor.BranchEntity branch = debtor.GetBranch(branchCode);
    if (branch == null)
    {
        branch = debtor.NewBranch();
        branch.BranchCode = branchCode;
    }
    branch.BranchName = "Branch 0001";
    branch.Address1 = "address 1";
    branch.Address2 = "address 2";
    branch.Address3 = "address 3";
    branch.Address4 = "address 4";
    branch.PostCode = "2100";
    branch.Mobile = "099123456";
    branch.Contact = "Kenneth";
    branch.Phone1 = "099123456";
    branch.Phone2 = "099123456";
    branch.Fax1 = null;
    branch.Fax2 = null;
    branch.SalesAgent = null;
    branch.AreaCode = null;
    branch.EmailAddress = null;
}

Inactivate Debtor/Activate Debtor

  • Inactivated debtor will not be shown in lookup selection at AR and Sales.
public void InactivateDebtor(string accNo, AutoCount.Authentication.UserSession userSession)
{
    AutoCount.ARAP.Debtor.DebtorDataAccess cmd =
            AutoCount.ARAP.Debtor.DebtorDataAccess.Create(userSession, userSession.DBSetting);
    AutoCount.ARAP.Debtor.DebtorEntity debtor = cmd.GetDebtor(accNo);
    debtor.IsActive = false;
    cmd.SaveDebtor(debtor, userSession.LoginUserID);
}

public void AactivateDebtor(string accNo, AutoCount.Authentication.UserSession userSession)
{
    AutoCount.ARAP.Debtor.DebtorDataAccess cmd =
            AutoCount.ARAP.Debtor.DebtorDataAccess.Create(userSession, userSession.DBSetting);
    AutoCount.ARAP.Debtor.DebtorEntity debtor = cmd.GetDebtor(accNo);
    debtor.IsActive = true;
    cmd.SaveDebtor(debtor, userSession.LoginUserID);
}

See Also

AutoCount Accounting Account API
AR AP
Transactions Version Transactions Version
AR Debtor (Customer) 1.8, 1.9
2.0
AP Creditor (Supplier) 1.8, 1.9
2.0
AR Invoice 1.8, 1.9
2.0
AP Invoice 1.8, 1.9
2.0
AR Received Payment 1.8, 1.9
2.0
AP Payment 1.8, 1.9
2.0
AR Debit Note 1.8, 1.9
2.0
AP Debit Note 1.8, 1.9
2.0
AR Credit Note 1.8, 1.9
2.0
AP Credit Note 1.8, 1.9
2.0
AR Refund 1.8, 1.9
2.0
AP Refund 1.8, 1.9
2.0
AR Deposit 1.8, 1.9
2.0
AP Deposit 1.8, 1.9
2.0
AR Deposit - Create New or Update
with Refund & Forfeit
1.8, 1.9
2.0
A/R and A/P Contra Entry 1.8, 1.9
2.0

Go to menu

Go to top
Resources For AutoCount Software Developers