AR Deposit: Difference between revisions

From AutoCount Resource Center
Content added Content deleted
mNo edit summary
No edit summary
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Technical Specification==
{{NavigateDeveloper}}
# '''Deposit Payment Method''' must be a payment method that is created as type of "Deposit" Account in '''GL''' | '''Account Maintenance'''.
===Rules in AR Deposit===
# DepositPaymentMethod must be a payment method that is link to an Account that is created as type of "Deposit" Account.

===Assemblies version 1.8===
<pre>
BCE.AutoCount.ARAP.dll
</pre>


<br />
==Assemblies version 1.8, 1.9==
{{BaseReferenceAC18}}
'''BCE.AutoCount.ARAP.dll'''
<br />
==Sample with data model==
===Create new AR Deposit===
===Create new AR Deposit===
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
Line 38: Line 38:
doc.DeptNo = source.Department;
doc.DeptNo = source.Department;


source.Detail.ForEach(s => AddARDepositDetail(s, doc.AddDetail));
source.PaymentDetail.ForEach(s => AddARDepositDetail(s, doc.AddDetail));


try
try
Line 99: Line 99:
</syntaxhighlight>
</syntaxhighlight>


===Classes of Source (data model)===

===Classes of Source===
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
public class ARDepositSource
public class ARDepositSource
Line 119: Line 118:
public string Department { get; set; }
public string Department { get; set; }


// IsSecurityDeposit is to decide whether this deposit is subject to GST
//IsSecurityDeposit is to decide whether this deposit is subject to GST
// true: not subject to GST and is meant to be refund
//true: not subject to GST and is meant to be refund
// false: subject to GST and is considered as "Advance Payment"
//false: subject to GST and is considered as "Advance Payment"
public bool IsSecurityDeposit { get; set; }
public bool IsSecurityDeposit { get; set; }


public List<ARDepositDetailSource> Detail = new List<ARDepositDetailSource>();
public List<ARDepositDetailSource> PaymentDetail = new List<ARDepositDetailSource>();
}
}


Line 144: Line 143:


===Implementation===
===Implementation===
* Deposit without Debtor Code
[[File:ProgrammerNewARDeposit1.PNG|link=]]
[[File:ProgrammerNewARDeposit1.PNG|link=]]<br />
* Deposit with Debtor Code
[[File:ProgrammerNewARDeposit2.PNG|link=]]
[[File:ProgrammerNewARDeposit2.PNG|link=]]
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
Line 158: Line 159:
};
};


newDoc.Detail.Add(new ARDepositDetailSource()
newDoc.PaymentDetail.Add(new ARDepositDetailSource()
{
{
PaymentMethod = "BANK",
PaymentMethod = "BANK",
Line 179: Line 180:
};
};


newDoc.Detail.Add(new ARDepositDetailSource()
newDoc.PaymentDetail.Add(new ARDepositDetailSource()
{
{
PaymentMethod = "BANK",
PaymentMethod = "BANK",
Line 191: Line 192:
</syntaxhighlight>
</syntaxhighlight>


{{SeeAlsoAPIAccount}}
==See Also==
* [[AR Debtor]]
* [[AR Invoice]]
* [[AR Received Payment]]
* [[AR Debit Note]]
* [[AR Credit Note]]
* [[AR Refund]]
* [[AR Deposit]]
* [[AR Deposit - Create New or Update with Refund & Forfeit]]

[[Category:Programmer]]
[[Category:Programmer]]
[[Category:API]]
[[Category:API]]
[[Category:Integrate]]
[[Category:Integrate]]
[[Category:Plug-In]]
[[Category:Plug-In]]
{{NavigateDeveloper}}

Latest revision as of 07:28, 26 June 2018

Technical Specification

  1. Deposit Payment Method must be a payment method that is created as type of "Deposit" Account in GL | Account Maintenance.


Assemblies version 1.8, 1.9

BCE.AutoCount.dll
BCE.AutoCount.CommonAccounting.dll
BCE.AutoCount.MainEntry.dll
BCE.Utils.dll
BCE.Utils.UI.dll
BCE.AutoCount.ARAP.dll


Sample with data model

Create new AR Deposit

public void NewARDeposit(ARDepositSource source, BCE.Data.DBSetting dbSetting)
{
    BCE.AutoCount.ARAP.ARDeposit.ARDepositCommand cmd = BCE.AutoCount.ARAP.ARDeposit.ARDepositCommand.Create(dbSetting);
    BCE.AutoCount.ARAP.ARDeposit.ARDeposit doc = cmd.AddNew();

    if (IsValidDepositMethod(source.DepositMethod, dbSetting))
    {
        doc.DepositPaymentMethod = source.DepositMethod;
    }
    else
    {
        BCE.Application.AppMessage.ShowErrorMessage(string.Format("Invalid Deposit Payment Method of \"{0}\"", source.DepositMethod));
        //log error on Deposit Payment Method error
        return;
    }

    doc.DocNo = source.DocumentNo ?? doc.DocNo;
    doc.DocDate = source.DocumentDate;
    doc.Description = source.Description ?? doc.Description;
    doc.CurrencyCode = source.CurrencyCode ?? doc.CurrencyCode;
    doc.DebtorCode = source.CustomerAccount;
    doc.DebtorName = source.CustomerName;
    doc.Attention = source.Attention;
    doc.Phone1 = source.Phone;
    doc.Fax1 = source.Fax;
    doc.ProjNo = source.Project;
    doc.DeptNo = source.Department;

    source.PaymentDetail.ForEach(s => AddARDepositDetail(s, doc.AddDetail));

    try
    {
        doc.Save();
        BCE.Application.AppMessage.ShowMessage(string.Format("{0} is Created.", doc.DocNo));
        //Log Success created
    }
    catch (BCE.Application.AppException ex)
    {
        BCE.Application.AppMessage.ShowErrorMessage(ex.Message);
        //Log Error saving
    }
}

public void AddARDepositDetail(ARDepositDetailSource source , Func<BCE.AutoCount.ARAP.ARDeposit.ARDepositDetail> addDepositDetail)
{
    BCE.AutoCount.ARAP.ARDeposit.ARDepositDetail dtl = addDepositDetail();
    dtl.PaymentMethod = source.PaymentMethod;
    dtl.ChequeNo = source.ChequeNo;
    dtl.PaymentAmt = source.DepositAmount;
    dtl.BankCharge = source.BankCharge;
    dtl.BankChargeTaxType = source.BankChargeTaxCode;
    dtl.BankChargeTaxRefNo = source.BankChargeBillNoForGst;
    dtl.PaymentBy = source.PaymentBy;
            
    //Returned Cheque
    if (source.ReturnChequeDate.HasValue)
    {
        dtl.IsRCHQ = true;
        dtl.RCHQDate = source.ReturnChequeDate.Value;
    }
    else
    {
        dtl.IsRCHQ = false;
    }
}

Method to check the validity of (Deposit) Payment Method

private bool IsValidDepositMethod(string depositMethod, BCE.Data.DBSetting dbSetting)
{
    return GetDepositPaymentMethod(dbSetting).AsEnumerable()
        .Count(r => r.Field<string>("PaymentMethod") == depositMethod) > 0;
}

Get Deposit Payment Method Table with AutoCount Lookup Edit Builder

private DataTable GetDepositPaymentMethod(BCE.Data.DBSetting dbSetting)
{
    BCE.AutoCount.XtraUtils.LookupEditBuilder.DepositPaymentMethodLookupEditBuilder depositBuilder =
        new BCE.AutoCount.XtraUtils.LookupEditBuilder.DepositPaymentMethodLookupEditBuilder();

    //The return table contains of 3 columns: (1) PaymentMethod, (2) BankAccount, (3) CurrencyCode (in version 1.8.28.184)
    return depositBuilder.BuildDataTable(dbSetting);
}

Classes of Source (data model)

public class ARDepositSource
{
    public string DocumentNo { get; set; }
    public DateTime DocumentDate { get; set; } = DateTime.Today.Date;
    public string Description { get; set; }
    public string DepositMethod { get; set; }

    //Currency Code that is used to pay the deposit
    public string CurrencyCode { get; set; }
    public string CustomerAccount { get; set; }
    public string CustomerName { get; set; }
    public string Attention { get; set; }
    public string Phone { get; set; }
    public string Fax { get; set; }
    public string Project { get; set; }
    public string Department { get; set; }

    //IsSecurityDeposit is to decide whether this deposit is subject to GST
    //true: not subject to GST and is meant to be refund
    //false: subject to GST and is considered as "Advance Payment"
    public bool IsSecurityDeposit { get; set; }

    public List<ARDepositDetailSource> PaymentDetail = new List<ARDepositDetailSource>();
}

public class ARDepositDetailSource
{
    public string PaymentMethod { get; set; }
    public string ChequeNo { get; set; }
    public decimal DepositAmount { get; set; }
    public decimal BankCharge { get; set; }
    public string BankChargeTaxCode { get; set; }
    public string BankChargeBillNoForGst { get; set; }
    public string PaymentBy { get; set; }

    //If this cheque is returned/bounced cheque
    //Set the returned/bounced date. Otherwise it is null
    public DateTime? ReturnChequeDate { get; set; }
}

Implementation

  • Deposit without Debtor Code


  • Deposit with Debtor Code

public void MainEntry(BCE.Data.DBSetting dbSetting)
{
    //Example of deposit without DebtorCode defined
    ARDepositSource newDoc = new ARDepositSource()
    {
        //DEPOSIT RECEIVED must be a Payment Method created for Deposit Account
        DepositMethod = "DEPOSIT RECEIVED",
        Description = "DEPOSIT",
        DocumentDate = new DateTime(2017, 11, 25)
    };

    newDoc.PaymentDetail.Add(new ARDepositDetailSource()
    {
        PaymentMethod = "BANK",
        ChequeNo = "CHQ00010",
        PaymentBy = "CHEQUE",
        DepositAmount = 500
    });

    NewARDeposit(newDoc, dbSetting);

    //Example of deposit with Debtor Code
    newDoc = new ARDepositSource()
    {
        //DEPOSIT RECEIVED must be a Payment Method created for Deposit Account
        DepositMethod = "DEPOSIT RECEIVED",
        CustomerAccount = "300-A001",
        Description = "DEPOSIT",
        DocumentDate = new DateTime(2017, 11, 26),
        Attention = "MR.Tan"
    };

    newDoc.PaymentDetail.Add(new ARDepositDetailSource()
    {
        PaymentMethod = "BANK",
        ChequeNo = "CHQ00010",
        PaymentBy = "CHEQUE",
        DepositAmount = 800
    });

    NewARDeposit(newDoc, dbSetting);
}

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