Ejemplo n.º 1
0
        public void PrintEJournalReport(Data.SalesTransactionDetails[] salesDetails)
        {
            Cursor.Current = Cursors.WaitCursor;
            try
            {
                PrintingPreference oldCONFIG_AutoPrint = mclsTerminalDetails.AutoPrint;
                mclsTerminalDetails.AutoPrint = PrintingPreference.Normal;

                mboIsItemHeaderPrinted = true;

                PrintReportHeaderSection(false, DateTime.MinValue);

                msbToPrint.Append("-".PadRight(mclsTerminalDetails.MaxReceiptWidth, '-') + Environment.NewLine);
                msbToPrint.Append(CenterString("ELECTRONIC JOURNAL REPORT", mclsTerminalDetails.MaxReceiptWidth) + Environment.NewLine);
                msbToPrint.Append("-".PadRight(mclsTerminalDetails.MaxReceiptWidth, '-') + Environment.NewLine);

                Data.ChequePaymentDetails[] arrChequePaymentDetails;
                Data.CreditCardPaymentDetails[] arrCreditCardPaymentDetails;
                Data.CreditPaymentDetails[] arrCreditPaymentDetails;
                Data.DebitPaymentDetails[] arrDebitPaymentDetails;
                Data.Payment clspayment = new Data.Payment(mConnection, mTransaction);
                mConnection = clspayment.Connection; mTransaction = clspayment.Transaction;

                foreach (Data.SalesTransactionDetails trandetails in salesDetails)
                {
                    // set the details
                    mclsSalesTransactionDetails = trandetails;
                    /*** 
                     * Print the Headers
                     * OFFICIAL RECEIPT #:
                     * Transaction Date 
                     * Item Header
                     ***/

                    PrintReportPageHeaderSection(true);

                    /*** 
                     * Print the Items
                     ***/
                    int itemno = 0;
                    decimal TotalItemSold = 0;
                    decimal iTotalQuantitySold = 0;
                    foreach (Data.SalesTransactionItemDetails item in trandetails.TransactionItems)
                    {
                        itemno++;
                        TotalItemSold++;
                        iTotalQuantitySold += item.Quantity;
                        string stProductCode = item.Description;
                        if (!string.IsNullOrEmpty(item.MatrixDescription)) stProductCode += "-" + item.MatrixDescription;
                        PrintItem(itemno.ToString(), stProductCode, item.ProductUnitCode, item.Quantity, item.Price, item.Discount, item.PromoApplied, item.Amount, item.VAT, item.EVAT, item.DiscountCode, item.ItemDiscountType);
                    }

                    /*** 
                     * Print the Footer
                     ***/
                    /*********************************************************************************/
                    PrintPageFooterASection();

                    if (trandetails.TransactionStatus == TransactionStatus.Refund)
                    {
                        if (trandetails.CashPayment != 0)
                            msbToPrint.Append("Cash Refund".PadRight(15) + ":" + trandetails.CashPayment.ToString("###,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                        if (trandetails.ChequePayment != 0)
                        {
                            msbToPrint.Append("Cheque Refund".PadRight(15) + ":" + trandetails.ChequePayment.ToString("###,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);

                            arrChequePaymentDetails = new Data.ChequePayments(clspayment.Connection, clspayment.Transaction).Details(trandetails.BranchID, trandetails.TerminalNo, trandetails.TransactionID);

                            if (arrChequePaymentDetails != null)
                            {
                                foreach (Data.ChequePaymentDetails chequepaymentdet in arrChequePaymentDetails)
                                {
                                    //print cheque details
                                    msbToPrint.Append("Cheque No.".PadRight(15) + ":" + chequepaymentdet.ChequeNo.Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append("Amount".PadRight(15) + ":" + chequepaymentdet.Amount.ToString("#,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append("Validity Date".PadRight(15) + ":" + chequepaymentdet.ValidityDate.ToString("yyyy-MM-dd").PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append(Environment.NewLine);
                                }
                            }
                        }

                        if (trandetails.CreditCardPayment != 0)
                        {
                            msbToPrint.Append("Credit Card Refund".PadRight(15) + ":" + trandetails.CreditCardPayment.ToString("###,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);

                            arrCreditCardPaymentDetails = new Data.CreditCardPayments(clspayment.Connection, clspayment.Transaction).Details(trandetails.BranchID, trandetails.TerminalNo, trandetails.TransactionID);
                            if (arrCreditCardPaymentDetails != null)
                            {
                                foreach (Data.CreditCardPaymentDetails cardpaymentdet in arrCreditCardPaymentDetails)
                                {
                                    //print credit card details
                                    //print credit card details
                                    msbToPrint.Append("Card Type".PadRight(15) + ":" + cardpaymentdet.CardTypeCode.Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append("Card No.".PadRight(15) + ":" + cardpaymentdet.CardNo.Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    if (cardpaymentdet.CardHolder.Trim() != mclsSalesTransactionDetails.CustomerDetails.ContactName.Trim()) msbToPrint.Append("Member Name".PadRight(15) + ":" + cardpaymentdet.CardHolder.Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    if (cardpaymentdet.Amount != mclsSalesTransactionDetails.AmountPaid) msbToPrint.Append("Amount".PadRight(15) + ":" + cardpaymentdet.Amount.ToString("#,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    if (cardpaymentdet.CardHolder != mclsSalesTransactionDetails.CustomerDetails.ContactName
                                        && !string.IsNullOrEmpty(cardpaymentdet.ValidityDates)) msbToPrint.Append("Validity Date".PadRight(15) + ":" + cardpaymentdet.ValidityDates.Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append(Environment.NewLine);
                                }
                            }
                        }
                    }
                    else if (trandetails.TransactionStatus == TransactionStatus.Closed || trandetails.TransactionStatus == TransactionStatus.Reprinted || trandetails.TransactionStatus == TransactionStatus.Open || trandetails.TransactionStatus == TransactionStatus.CreditPayment)
                    {
                        msbToPrint.Append("-".PadRight(mclsTerminalDetails.MaxReceiptWidth, '-') + Environment.NewLine);

                        if (trandetails.CashPayment != 0)
                            msbToPrint.Append("Cash Payment".PadRight(15) + ":" + trandetails.CashPayment.ToString("###,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                        if (trandetails.ChequePayment != 0)
                        {
                            msbToPrint.Append("Cheque Payment".PadRight(15) + ":" + trandetails.ChequePayment.ToString("###,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);

                            arrChequePaymentDetails = new Data.ChequePayments(clspayment.Connection, clspayment.Transaction).Details(trandetails.BranchID, trandetails.TerminalNo, trandetails.TransactionID);
                            if (arrChequePaymentDetails != null)
                            {
                                foreach (Data.ChequePaymentDetails chequepaymentdet in arrChequePaymentDetails)
                                {
                                    //print checque details
                                    msbToPrint.Append("Cheque No.".PadRight(15) + ":" + chequepaymentdet.ChequeNo.Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append("Amount".PadRight(15) + ":" + chequepaymentdet.Amount.ToString("#,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append("Validity Date".PadRight(15) + ":" + chequepaymentdet.ValidityDate.ToString("yyyy-MM-dd").PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append(Environment.NewLine);
                                }
                            }
                        }

                        if (trandetails.CreditCardPayment != 0)
                        {
                            msbToPrint.Append("Credit Card Payment".PadRight(15) + ":" + trandetails.CreditCardPayment.ToString("###,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);

                            arrCreditCardPaymentDetails = new Data.CreditCardPayments(clspayment.Connection, clspayment.Transaction).Details(trandetails.BranchID, trandetails.TerminalNo, trandetails.TransactionID);
                            if (arrCreditCardPaymentDetails != null)
                            {
                                foreach (Data.CreditCardPaymentDetails cardpaymentdet in arrCreditCardPaymentDetails)
                                {
                                    //print credit card details
                                    //print credit card details
                                    msbToPrint.Append("Card Type".PadRight(15) + ":" + cardpaymentdet.CardTypeCode.Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append("Card No.".PadRight(15) + ":" + cardpaymentdet.CardNo.Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    if (cardpaymentdet.CardHolder.Trim() != mclsSalesTransactionDetails.CustomerDetails.ContactName.Trim()) msbToPrint.Append("Member Name".PadRight(15) + ":" + cardpaymentdet.CardHolder.Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    if (cardpaymentdet.Amount != mclsSalesTransactionDetails.AmountPaid) msbToPrint.Append("Amount".PadRight(15) + ":" + cardpaymentdet.Amount.ToString("#,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    if (cardpaymentdet.CardHolder != mclsSalesTransactionDetails.CustomerDetails.ContactName
                                        && !string.IsNullOrEmpty(cardpaymentdet.ValidityDates)) msbToPrint.Append("Validity Date".PadRight(15) + ":" + cardpaymentdet.ValidityDates.Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append(Environment.NewLine);
                                }
                            }
                        }
                        if (trandetails.CreditPayment != 0)
                        {
                            msbToPrint.Append("Credit Payment".PadRight(15) + ":" + trandetails.CreditPayment.ToString("###,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 15) + Environment.NewLine);

                            arrCreditPaymentDetails = new Data.CreditPayments(clspayment.Connection, clspayment.Transaction).Details(trandetails.BranchID, trandetails.TerminalNo, trandetails.TransactionID);
                            if (arrCreditPaymentDetails != null)
                            {
                                foreach (Data.CreditPaymentDetails creditpaymentdet in arrCreditPaymentDetails)
                                {
                                    //print credit details
                                    msbToPrint.Append("Amount".PadRight(15) + ":" + creditpaymentdet.Amount.ToString("#,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    if (!string.IsNullOrEmpty(creditpaymentdet.Remarks)) msbToPrint.Append("Remarks".PadRight(15) + ":" + creditpaymentdet.Remarks + Environment.NewLine);
                                    msbToPrint.Append(Environment.NewLine);
                                }
                            }

                        }
                        if (trandetails.DebitPayment != 0)
                        {
                            msbToPrint.Append("Debit  Payment".PadRight(15) + ":" + trandetails.DebitPayment.ToString("###,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 15) + Environment.NewLine);

                            arrDebitPaymentDetails = new Data.DebitPayments(clspayment.Connection, clspayment.Transaction).Details(trandetails.BranchID, trandetails.TerminalNo, trandetails.TransactionID);
                            if (arrDebitPaymentDetails != null)
                            {
                                foreach (Data.DebitPaymentDetails debitpaymentdet in arrDebitPaymentDetails)
                                {
                                    //print debit details
                                    msbToPrint.Append("Amount".PadRight(15) + ":" + debitpaymentdet.Amount.ToString("#,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                                    msbToPrint.Append(Environment.NewLine);
                                }
                            }
                        }
                        if (trandetails.RewardConvertedPayment != 0)
                        {
                            msbToPrint.Append("Reward Paymnt".PadRight(15) + ":" + trandetails.RewardConvertedPayment.ToString("###,##0.#0").Trim().PadLeft(mclsTerminalDetails.MaxReceiptWidth - 16) + Environment.NewLine);
                        }
                    }

                    if (trandetails.TransactionStatus == TransactionStatus.Suspended)
                    {
                        msbToPrint.Append(CenterString("This transaction is suspended", mclsTerminalDetails.MaxReceiptWidth) + Environment.NewLine);
                    }
                    else if (trandetails.TransactionStatus == TransactionStatus.Void)
                    {
                        msbToPrint.Append(CenterString("This transaction is VOID", mclsTerminalDetails.MaxReceiptWidth) + Environment.NewLine);
                    }
                    else if (trandetails.TransactionStatus == TransactionStatus.Reprinted)
                    {
                        msbToPrint.Append(CenterString("This transaction is reprinted as of ", mclsTerminalDetails.MaxReceiptWidth) + Environment.NewLine);
                        msbToPrint.Append(CenterString(DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt"), mclsTerminalDetails.MaxReceiptWidth) + Environment.NewLine);
                    }
                    else if (trandetails.TransactionStatus == TransactionStatus.Refund)
                    {
                        msbToPrint.Append(CenterString("This transaction is a REFUND", mclsTerminalDetails.MaxReceiptWidth) + Environment.NewLine);
                    }
                    else if (trandetails.TransactionStatus == TransactionStatus.CreditPayment)
                    {
                        if (mclsSysConfigDetails.WillPrintCreditPaymentHeader)
                            msbToPrint.Append(CenterString("------CREDIT PAYMENT--------", mclsTerminalDetails.MaxReceiptWidth) + Environment.NewLine);
                    }

                    PrintPageFooterBSection();
                    /*********************************************************************************/
                    msbToPrint.Append(Environment.NewLine + "=".PadRight(mclsTerminalDetails.MaxReceiptWidth, '=') + Environment.NewLine);
                }

                clspayment.CommitAndDispose();

                PrintPageAndReportFooterSection(false, DateTime.MinValue);

                mclsTerminalDetails.AutoPrint = oldCONFIG_AutoPrint;

                InsertAuditLog(AccessTypes.PrintElectronicJournal, "Print Electronic Journal report: TerminalNo=" + mclsTerminalDetails.TerminalNo + " Cashier".PadRight(15) + ":" + mCashierName + " @ Branch: " + mclsTerminalDetails.BranchDetails.BranchCode);
            }
            catch (Exception ex)
            {
                InsertErrorLogToFile(ex, "ERROR!!! Printing Electronic Journal report. Err Description: ");
            }
            Cursor.Current = Cursors.Default;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Returns true : all have purchases
        /// Returns false : some doesnt have purchases
        /// </summary>
        /// <param name="clsContactDetails"></param>
        /// <param name="decCredit"></param>
        /// <returns></returns>
        public bool AutoAdjustCredit(Data.ContactDetails clsContactDetails, decimal decCredit)
        {
            bool boRetValue = false;
            try
            {
                MySqlCommand cmd = new MySqlCommand();
                cmd.CommandType = System.Data.CommandType.Text;
                System.Data.DataTable dtT = new System.Data.DataTable("tblTemp");

                Int64 intContactID = clsContactDetails.ContactID;

                // pay all the purchases, we will do the reverse to arrive at equal credit in IC_ICC
                string SQL = "UPDATE tblCreditPayment SET AmountPaid = Amount WHERE ContactID=@ContactID;";

                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@ContactID", intContactID);
                cmd.CommandText = SQL;
                base.ExecuteNonQuery(cmd);

                // do not return, finish all the necessary adjustments
                //if (decCredit == 0) return true; // return true

                SQL = "UPDATE tblContacts SET Credit = @Credit WHERE ContactID=@ContactID;";
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@ContactID", intContactID);
                cmd.Parameters.AddWithValue("@Credit", decCredit);
                cmd.CommandText = SQL;
                base.ExecuteNonQuery(cmd);

                Data.Contacts clsContacts = new Data.Contacts(base.Connection, base.Transaction);
                Data.ProductDetails clsProductDetails = new Data.Products(base.Connection, base.Transaction).DetailsByCode(1, "IC IMPORTED TRX");
                Data.SalesTransactions clsSalesTransactions = new Data.SalesTransactions(base.Connection, base.Transaction);
                Data.CreditCardPayments clsCreditCardPayments = new Data.CreditCardPayments(base.Connection, base.Transaction);
                Data.SalesTransactionDetails clsSalesTransactionDetails;

                string strTerminalNo = "9995"; Int32 intBranchID = 1;
                string TransactionNo = DateTime.Now.ToString("yyyyMmddHHmmss").PadLeft(14, '0');
                DateTime CreatedOn = new DateTime(2014, 01, 01);
                DateTime TransactionDate = new DateTime(2014, 01, 01);
                DateTime DateClosed = new DateTime(2014, 01, 01);

                SQL = "SELECT * FROM tblCreditPayment WHERE ContactID=@ContactID AND CreditReasonID <> 8 ORDER BY CreditDate DESC;"; //8=deposits

                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@ContactID", intContactID);

                cmd.CommandText = SQL;
                dtT = new System.Data.DataTable("tblTemp");
                base.MySqlDataAdapterFill(cmd, dtT);
                Int32 dtTRowsCount = dtT.Rows.Count;    //use this when reinsert is called below

            ReInsert:
                if (dtTRowsCount == 0)
                {

                    // no purchases but with credit
                    decimal SubTotal = decCredit;
                    TransactionNo = DateTime.Now.ToString("yyyyMmddHHmmss").PadLeft(14, '0');

                    //#region Insert to tblTransactions

                    SQL = "INSERT INTO tblTransactions(TransactionNo, CustomerID, CustomerName, CashierID, CashierName, TerminalNo, BranchID, BranchCode, TransactionDate, " +
                            "DateSuspended, DateResumed, TransactionStatus, SubTotal, " +
                            "AmountPaid, CashPayment, ChequePayment, " +
                            "CreditCardPayment, CreditPayment, DateClosed, PaymentType, " +
                            "WaiterID, WaiterName, AgentID, AgentName, CreatedByID, CreatedByName, " +
                            "AgentDepartmentName, AgentPositionName, ReleasedDate, RewardPointsPayment, " +
                            "RewardConvertedPayment, PaxNo, CreditChargeAmount, TransactionType, isConsignment, " +
                            "DataSource, CustomerGroupName, CreatedOn, ORNo, " +
                            "NetSales, ChargeType, ItemSold, QuantitySold,  " +
                            "ContactCheckInDate, GrossSales)VALUES(";

                    SQL += "@TransactionNo, @CustomerID, @CustomerName, @CashierID, @CashierName, @TerminalNo, @BranchID, @BranchCode, @TransactionDate, " +
                            "@DateSuspended, @DateResumed, @TransactionStatus, @SubTotal, " +
                            "@AmountPaid, @CashPayment, @ChequePayment, " +
                            "@CreditCardPayment, @CreditPayment, @DateClosed, @PaymentType, " +
                            "@WaiterID, @WaiterName, @AgentID, @AgentName, @CreatedByID, @CreatedByName, " +
                            "@AgentDepartmentName, @AgentPositionName, @ReleasedDate, @RewardPointsPayment, " +
                            "@RewardConvertedPayment, @PaxNo, @CreditChargeAmount, @TransactionType, @isConsignment, " +
                            "@DataSource, @CustomerGroupName, @CreatedOn, @ORNo, " +
                            "@NetSales, @ChargeType, @ItemSold, @QuantitySold,  " +
                            "@ContactCheckInDate, @GrossSales)";

                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@TransactionNo", TransactionNo);
                    cmd.Parameters.AddWithValue("@CustomerID", clsContactDetails.ContactID);
                    cmd.Parameters.AddWithValue("@CustomerName", clsContactDetails.ContactName);
                    cmd.Parameters.AddWithValue("@CashierID", 1);
                    cmd.Parameters.AddWithValue("@CashierName", "Auto AdjUser");
                    cmd.Parameters.AddWithValue("@TerminalNo", strTerminalNo);
                    cmd.Parameters.AddWithValue("@BranchID", intBranchID);
                    cmd.Parameters.AddWithValue("@BranchCode", "Main");
                    cmd.Parameters.AddWithValue("@TransactionDate", TransactionDate);
                    cmd.Parameters.AddWithValue("@DateSuspended", Constants.C_DATE_MIN_VALUE);
                    cmd.Parameters.AddWithValue("@DateResumed", Constants.C_DATE_MIN_VALUE);
                    cmd.Parameters.AddWithValue("@TransactionStatus", 1);
                    cmd.Parameters.AddWithValue("@SubTotal", SubTotal);
                    cmd.Parameters.AddWithValue("@AmountPaid", SubTotal);
                    cmd.Parameters.AddWithValue("@CashPayment", 0);
                    cmd.Parameters.AddWithValue("@ChequePayment", 0);
                    cmd.Parameters.AddWithValue("@CreditCardPayment", SubTotal);
                    cmd.Parameters.AddWithValue("@CreditPayment", 0);
                    cmd.Parameters.AddWithValue("@DateClosed", DateClosed);
                    cmd.Parameters.AddWithValue("@PaymentType", 2);
                    cmd.Parameters.AddWithValue("@WaiterID", 2);
                    cmd.Parameters.AddWithValue("@WaiterName", "RetailPlus Default");
                    cmd.Parameters.AddWithValue("@AgentID", 1);
                    cmd.Parameters.AddWithValue("@AgentName", "RetailPlus Agent ™");
                    cmd.Parameters.AddWithValue("@CreatedByID", 1);
                    cmd.Parameters.AddWithValue("@CreatedByName", "Auto AdjUser");
                    cmd.Parameters.AddWithValue("@AgentDepartmentName", "System Default Department");
                    cmd.Parameters.AddWithValue("@AgentPositionName", "System Default Position");
                    cmd.Parameters.AddWithValue("@ReleasedDate", Constants.C_DATE_MIN_VALUE);
                    cmd.Parameters.AddWithValue("@RewardPointsPayment", 0);
                    cmd.Parameters.AddWithValue("@RewardConvertedPayment", 0);
                    cmd.Parameters.AddWithValue("@PaxNo", 1);
                    cmd.Parameters.AddWithValue("@CreditChargeAmount", 0);
                    cmd.Parameters.AddWithValue("@TransactionType", 0);
                    cmd.Parameters.AddWithValue("@isConsignment", 0);
                    cmd.Parameters.AddWithValue("@DataSource", "IC_NO_ITN");
                    cmd.Parameters.AddWithValue("@CustomerGroupName", clsContactDetails.ContactGroupName);
                    cmd.Parameters.AddWithValue("@CreatedOn", CreatedOn);
                    cmd.Parameters.AddWithValue("@ORNo", TransactionNo);
                    cmd.Parameters.AddWithValue("@NetSales", SubTotal);
                    cmd.Parameters.AddWithValue("@ChargeType", 0);
                    cmd.Parameters.AddWithValue("@ItemSold", 1);
                    cmd.Parameters.AddWithValue("@QuantitySold", 1);
                    cmd.Parameters.AddWithValue("@ContactCheckInDate", CreatedOn);
                    cmd.Parameters.AddWithValue("@GrossSales", SubTotal);

                    cmd.CommandText = SQL;
                    base.ExecuteNonQuery(cmd);

                    //#endregion

                    clsSalesTransactionDetails = clsSalesTransactions.Details(TransactionNo, strTerminalNo, intBranchID);

                    //#region Insert to tblTransactionItems

                    SQL = "SELECT * FROM tblTransactionItems WHERE TransactionID=@TransactionID LIMIT 1;";

                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@TransactionID", clsSalesTransactionDetails.TransactionID);

                    cmd.CommandText = SQL;
                    dtT = new System.Data.DataTable("tblTemp");
                    base.MySqlDataAdapterFill(cmd, dtT);

                    if (dtT.Rows.Count == 0)
                    {
                        SQL = "INSERT INTO tblTransactionItems(TransactionID, ProductID, ProductCode, BarCode, Description, ProductUnitID, ProductUnitCode, " +
                                    "Quantity, Price, SellingPrice, Discount, ItemDiscount, ItemDiscountType, Amount, " +
                                    "ProductGroup, ProductSubGroup, TransactionItemStatus, DiscountCode, DiscountRemarks, ProductPackageID, " +
                                    "PackageQuantity, DataSource, CreatedOn, GrossSales)VALUES(";

                        SQL += "@TransactionID, @ProductID, @ProductCode, @BarCode, @Description, @ProductUnitID, @ProductUnitCode, " +
                                    "@Quantity, @Price, @SellingPrice, @Discount, @ItemDiscount, @ItemDiscountType, @Amount, " +
                                    "@ProductGroup, @ProductSubGroup, @TransactionItemStatus, @DiscountCode, @DiscountRemarks, @ProductPackageID, " +
                                    "@PackageQuantity, @DataSource, @CreatedOn, @GrossSales)";

                        cmd.Parameters.Clear();
                        cmd.Parameters.AddWithValue("@TransactionID", clsSalesTransactionDetails.TransactionID);
                        cmd.Parameters.AddWithValue("@ProductID", clsProductDetails.ProductID);
                        cmd.Parameters.AddWithValue("@ProductCode", clsProductDetails.ProductCode);
                        cmd.Parameters.AddWithValue("@BarCode", clsProductDetails.BarCode);
                        cmd.Parameters.AddWithValue("@Description", clsProductDetails.ProductDesc);
                        cmd.Parameters.AddWithValue("@ProductUnitID", clsProductDetails.BaseUnitID);
                        cmd.Parameters.AddWithValue("@ProductUnitCode", clsProductDetails.BaseUnitCode);
                        cmd.Parameters.AddWithValue("@Quantity", 1);
                        cmd.Parameters.AddWithValue("@Price", SubTotal);
                        cmd.Parameters.AddWithValue("@SellingPrice", SubTotal);
                        cmd.Parameters.AddWithValue("@Discount", 0);
                        cmd.Parameters.AddWithValue("@ItemDiscount", 0);
                        cmd.Parameters.AddWithValue("@ItemDiscountType", 0);
                        cmd.Parameters.AddWithValue("@Amount", SubTotal);
                        cmd.Parameters.AddWithValue("@ProductGroup", clsProductDetails.ProductGroupName);
                        cmd.Parameters.AddWithValue("@ProductSubGroup", clsProductDetails.ProductSubGroupCode);
                        cmd.Parameters.AddWithValue("@TransactionItemStatus", 0);
                        cmd.Parameters.AddWithValue("@DiscountCode", "");
                        cmd.Parameters.AddWithValue("@DiscountRemarks", "");
                        cmd.Parameters.AddWithValue("@ProductPackageID", clsProductDetails.PackageID);
                        cmd.Parameters.AddWithValue("@PackageQuantity", 1);
                        cmd.Parameters.AddWithValue("@DataSource", "AutoAdjust");
                        cmd.Parameters.AddWithValue("@CreatedOn", CreatedOn);
                        cmd.Parameters.AddWithValue("@GrossSales", SubTotal);

                        cmd.CommandText = SQL;
                        base.ExecuteNonQuery(cmd);
                    }

                    //#endregion

                    //#region Insert to tblCreditCardPayment

                    SQL = "SELECT * FROM tblCreditCardPayment WHERE BranchID=@BranchID AND TransactionNo=@TransactionNo AND TerminalNo=@TerminalNo LIMIT 1;";

                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@TransactionNo", clsSalesTransactionDetails.TransactionNo);
                    cmd.Parameters.AddWithValue("@TerminalNo", clsSalesTransactionDetails.TerminalNo);
                    cmd.Parameters.AddWithValue("@BranchID", clsSalesTransactionDetails.BranchID);

                    cmd.CommandText = SQL;
                    dtT = new System.Data.DataTable("tblTemp");
                    base.MySqlDataAdapterFill(cmd, dtT);

                    if (dtT.Rows.Count == 0)
                    {

                        SQL = "INSERT INTO tblCreditCardPayment(TransactionID, Amount, CardTypeID, CardTypeCode, CardTypeName, CardNo, CardHolder, ValidityDates, " +
                                    "Remarks, TransactionNo, CreatedOn, TerminalNo, BranchID, AdditionalCharge, " +
                                    "ContactID, GuarantorID, TransactionDate, CashierName)VALUES(";

                        SQL += "@TransactionID, @Amount, @CardTypeID, @CardTypeCode, @CardTypeName, @CardNo, @CardHolder, @ValidityDates, " +
                                    "@Remarks, @TransactionNo, @CreatedOn, @TerminalNo, @BranchID, @AdditionalCharge, " +
                                    "@ContactID, @GuarantorID, @TransactionDate, @CashierName)";

                        cmd.Parameters.Clear();
                        cmd.Parameters.AddWithValue("@TransactionID", clsSalesTransactionDetails.TransactionID);
                        cmd.Parameters.AddWithValue("@Amount", SubTotal);
                        cmd.Parameters.AddWithValue("@CardTypeID", clsContactDetails.CreditDetails.CardTypeDetails.CardTypeID);
                        cmd.Parameters.AddWithValue("@CardTypeCode", clsContactDetails.CreditDetails.CardTypeDetails.CardTypeCode);
                        cmd.Parameters.AddWithValue("@CardTypeName", clsContactDetails.CreditDetails.CardTypeDetails.CardTypeName);
                        cmd.Parameters.AddWithValue("@CardNo", clsContactDetails.CreditDetails.CreditCardNo);
                        cmd.Parameters.AddWithValue("@CardHolder", clsContactDetails.ContactName);
                        cmd.Parameters.AddWithValue("@ValidityDates", clsContactDetails.CreditDetails.ExpiryDate.ToString("MMddyy"));
                        cmd.Parameters.AddWithValue("@Remarks", "");
                        cmd.Parameters.AddWithValue("@TransactionNo", TransactionNo);
                        cmd.Parameters.AddWithValue("@CreatedOn", CreatedOn);
                        cmd.Parameters.AddWithValue("@TerminalNo", strTerminalNo);
                        cmd.Parameters.AddWithValue("@BranchID", intBranchID);
                        cmd.Parameters.AddWithValue("@AdditionalCharge", 0);
                        cmd.Parameters.AddWithValue("@ContactID", clsContactDetails.ContactID);
                        cmd.Parameters.AddWithValue("@GuarantorID", clsContactDetails.CreditDetails.GuarantorID);
                        cmd.Parameters.AddWithValue("@TransactionDate", TransactionDate);
                        cmd.Parameters.AddWithValue("@CashierName", clsSalesTransactionDetails.CashierName);

                        cmd.CommandText = SQL;
                        base.ExecuteNonQuery(cmd);
                    }

                    //#endregion

                    //#region Insert to tblCreditPayment

                    SQL = "SELECT * FROM tblCreditPayment WHERE BranchID=@BranchID AND TransactionNo=@TransactionNo AND TerminalNo = @TerminalNo LIMIT 1;";

                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@TransactionNo", clsSalesTransactionDetails.TransactionNo);
                    cmd.Parameters.AddWithValue("@TerminalNo", clsSalesTransactionDetails.TerminalNo);
                    cmd.Parameters.AddWithValue("@BranchID", clsSalesTransactionDetails.BranchID);

                    cmd.CommandText = SQL;
                    dtT = new System.Data.DataTable("tblTemp");
                    base.MySqlDataAdapterFill(cmd, dtT);

                    if (dtT.Rows.Count == 0)
                    {
                        CreditCardPaymentDetails[] clsCreditCardPaymentDetails = clsCreditCardPayments.Details(1, strTerminalNo, clsSalesTransactionDetails.TransactionID);

                        SQL = "INSERT INTO tblCreditPayment(TransactionID, Amount, ContactID, Remarks, AmountPaid, " +
                                    "TransactionNo, CreditDate, CreditBefore, CreditAfter, " +
                                    "CreditReason, TerminalNo, CashierName, AmountPaidCuttOffMonth, " +
                                    "CreatedOn, BranchID, CreditCardPaymentID, CreditCardTypeID, CreditReasonID)VALUES(";

                        SQL += "@TransactionID, @Amount, @ContactID, @Remarks, @AmountPaid, " +
                                    "@TransactionNo, @CreditDate, @CreditBefore, @CreditAfter, " +
                                    "@CreditReason, @TerminalNo, @CashierName, @AmountPaidCuttOffMonth, " +
                                    "@CreatedOn, @BranchID, @CreditCardPaymentID, @CreditCardTypeID, @CreditReasonID)";

                        cmd.Parameters.Clear();
                        cmd.Parameters.AddWithValue("@TransactionID", clsSalesTransactionDetails.TransactionID);
                        cmd.Parameters.AddWithValue("@Amount", SubTotal);
                        cmd.Parameters.AddWithValue("@ContactID", clsContactDetails.ContactID);
                        cmd.Parameters.AddWithValue("@Remarks", "Deliquent purchases before 2014May ");
                        cmd.Parameters.AddWithValue("@AmountPaid", 0);
                        cmd.Parameters.AddWithValue("@TransactionNo", TransactionNo);
                        cmd.Parameters.AddWithValue("@CreditDate", CreatedOn);
                        cmd.Parameters.AddWithValue("@CreditBefore", 0);
                        cmd.Parameters.AddWithValue("@CreditAfter", SubTotal);
                        cmd.Parameters.AddWithValue("@CreditReason", "Deliquent purchases before 2014May ");
                        cmd.Parameters.AddWithValue("@TerminalNo", strTerminalNo);
                        cmd.Parameters.AddWithValue("@CashierName", clsSalesTransactionDetails.CashierName);
                        cmd.Parameters.AddWithValue("@AmountPaidCuttOffMonth", 0);
                        cmd.Parameters.AddWithValue("@CreatedOn", CreatedOn);
                        cmd.Parameters.AddWithValue("@BranchID", intBranchID);
                        cmd.Parameters.AddWithValue("@CreditCardPaymentID", clsCreditCardPaymentDetails[0].CreditCardPaymentID);
                        cmd.Parameters.AddWithValue("@CreditCardTypeID", clsContactDetails.CreditDetails.CardTypeDetails.CardTypeID);
                        cmd.Parameters.AddWithValue("@CreditReasonID", 0);

                        cmd.CommandText = SQL;
                        base.ExecuteNonQuery(cmd);

                        boRetValue = false;
                    }
                }
                else
                {
                    foreach (System.Data.DataRow drCredit in dtT.Rows)
                    {
                        decimal decTrxCredit = decimal.Parse(drCredit["Amount"].ToString());
                        Int64 CreditPaymentID = Int64.Parse(drCredit["CreditPaymentID"].ToString());

                        if (decCredit > decTrxCredit)
                        {
                            SQL = "UPDATE tblCreditPayment SET AmountPaid=(AmountPaid - @AmountPaid) WHERE ContactID=@ContactID AND CreditPaymentID=@CreditPaymentID;";

                            cmd.Parameters.Clear();
                            cmd.Parameters.AddWithValue("@AmountPaid", decTrxCredit);
                            cmd.Parameters.AddWithValue("@ContactID", intContactID);
                            cmd.Parameters.AddWithValue("@CreditPaymentID", CreditPaymentID);

                            cmd.CommandText = SQL;
                            base.ExecuteNonQuery(cmd);

                            decCredit -= decTrxCredit;
                        }
                        else
                        {
                            SQL = "UPDATE tblCreditPayment SET AmountPaid= (AmountPaid - @AmountPaid) WHERE ContactID=@ContactID AND CreditPaymentID=@CreditPaymentID;";

                            cmd.Parameters.Clear();
                            cmd.Parameters.AddWithValue("@AmountPaid", decCredit);
                            cmd.Parameters.AddWithValue("@ContactID", intContactID);
                            cmd.Parameters.AddWithValue("@CreditPaymentID", CreditPaymentID);

                            cmd.CommandText = SQL;
                            base.ExecuteNonQuery(cmd);

                            boRetValue = true;
                            decCredit = 0;
                            break;
                        }
                    }

                    // meaning there is still credit but no purchases
                    if (decCredit > 0)
                    {
                        dtTRowsCount = 0;

                        goto ReInsert;
                        //#endregion
                    }
                }
            }
            catch (Exception ex)
            {
                throw base.ThrowException(ex);
            }
            return boRetValue;
        }