public void Save(PayableBalance payableBalance)
        {
            Transaction tx = null;

            try
            {
                using (var em = EntityManagerFactory.CreateInstance(ds))
                {
                    Guid ID = Guid.NewGuid();

                    tx = em.BeginTransaction();

                    string[] columns = { "ID",          "BalanceYear",   "BalanceMonth", "SalesCode",     "SalesDate", "CustomerId",
                                         "SalesmanId",  "PaymentMethod", "GrandTotal",   "IsStatus",
                                         "Notes",       "AmountInWords", "DueDate",      "TermOfPayment",
                                         "CreatedDate", "ModifiedDate" };


                    object[] values = { ID,                                  payableBalance.BalanceYear,   payableBalance.BalanceMonth,                payableBalance.SalesCode,     payableBalance.SalesDate.ToShortDateString(),
                                        payableBalance.CustomerId,           payableBalance.SalesmanId,
                                        payableBalance.PaymentMethod,        payableBalance.GrandTotal,
                                        payableBalance.IsStatus == true?1:0,
                                        payableBalance.Notes,                payableBalance.AmountInWords, payableBalance.DueDate.ToShortDateString(), payableBalance.TermOfPayment,
                                        DateTime.Now.ToShortDateString(),    DateTime.Now.ToShortDateString() };

                    var q = new Query().Select(columns).From(tableName).Insert(values);

                    em.ExecuteNonQuery(q.ToSql(), tx);

                    //save detail

                    foreach (var payableBalanceItem in payableBalance.PayableBalanceItems)
                    {
                        payableBalanceItem.PayableBalanceId = ID;
                        payableBalanceItemRepository.Save(em, tx, payableBalanceItem);
                    }

                    //copy to sales

                    Sales sales = CopyToSales(payableBalance);
                    salesRepository.Save(em, tx, sales);

                    tx.Commit();
                }
            }
            catch (Exception ex)
            {
                tx.Rollback();
                throw ex;
            }
        }