Exemple #1
0
        private void EnterCreditItemizePayment()
        {
            if (!SuspendTransactionAndContinue()) return;

            DialogResult loginresult = GetWriteAccessAndLogin(mclsSalesTransactionDetails.CashierID, AccessTypes.EnterCreditPayment);

            if (loginresult == DialogResult.OK)
            {
                LoadOptions();
                if (!CheckIfOKToSell(true)) return;

                ContactSelectWnd clsContactWnd = new ContactSelectWnd();
                clsContactWnd.EnableContactAddUpdate = GetWriteAccess(mclsSalesTransactionDetails.CashierID, AccessTypes.Contacts) == System.Windows.Forms.DialogResult.OK;
                clsContactWnd.SysConfigDetails = mclsSysConfigDetails;
                clsContactWnd.TerminalDetails = mclsTerminalDetails;
                clsContactWnd.HasCreditOnly = true;
                clsContactWnd.ShowDialog(this);
                DialogResult result = clsContactWnd.Result;
                mclsContactDetails = clsContactWnd.Details;
                clsContactWnd.Close();
                clsContactWnd.Dispose();

                if (result == DialogResult.OK)
                {
                    CreditsItemizeWnd creditWnd = new CreditsItemizeWnd();
                    creditWnd.TerminalDetails = mclsTerminalDetails;
                    creditWnd.SysConfigDetails = mclsSysConfigDetails;
                    creditWnd.CashierID = mclsSalesTransactionDetails.CashierID;
                    creditWnd.CashierName = mclsSalesTransactionDetails.CashierName;
                    creditWnd.CustomerDetails = mclsContactDetails;
                    creditWnd.ShowDialog(this);

                    Keys keyData = creditWnd.KeyData;
                    string strTransactionNoToReprint = creditWnd.TransactionNoToReprint;
                    string strTerminalNoToReprint = creditWnd.TerminalNoToReprint;

                    decimal AmountPaid = creditWnd.AmountPayment;
                    decimal CashPayment = creditWnd.CashPayment;
                    decimal ChequePayment = creditWnd.ChequePayment;
                    decimal CreditCardPayment = creditWnd.CreditCardPayment;
                    decimal DebitPayment = creditWnd.DebitPayment;
                    decimal BalanceAmount = creditWnd.BalanceAmount;
                    decimal ChangeAmount = creditWnd.ChangeAmount;

                    DataGridViewSelectedRowCollection dgvItemsSelectedRows = creditWnd.dgvItemsSelectedRows;
                    PaymentTypes PaymentType = creditWnd.PaymentType;
                    ArrayList arrCashPaymentDetails = creditWnd.CashPaymentDetails;
                    ArrayList arrChequePaymentDetails = creditWnd.ChequePaymentDetails;
                    ArrayList arrCreditCardPaymentDetails = creditWnd.CreditCardPaymentDetails;
                    ArrayList arrDebitPaymentDetails = creditWnd.DebitPaymentDetails;
                    result = creditWnd.Result;

                    // do not dispose here coz the dgvItemsSelectedRows is also disposed
                    //creditWnd.Close();
                    //creditWnd.Dispose();

                    if (result == DialogResult.OK)
                    {
                        if (keyData == Keys.F12)
                        {
                            ReprintTransaction(strTransactionNoToReprint, strTerminalNoToReprint);
                            return;
                        }

                        bool boActivateSuspendedAccount = true;

                        if (!mclsContactDetails.CreditDetails.CreditActive)
                        {
                            if (MessageBox.Show("Account is InActive, would you like to re-activate? Remarks: " + Environment.NewLine + mclsContactDetails.Remarks + Environment.NewLine + Environment.NewLine + "Press [yes] to automatically activate or [no] to disregard activation.", "RetailPlus", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.No)
                                boActivateSuspendedAccount = false;
                        }

                        Int64 iCollectionReceiptNo = 0;
                        if (mclsSysConfigDetails.CreditPaymentType == CreditPaymentType.MPC)
                        {
                            decimal decRetValue = 0;
                            if (ShowNoControl(this, out decRetValue, decimal.Parse(iCollectionReceiptNo.ToString()), "Enter Collection Receipt (CR) No.") != System.Windows.Forms.DialogResult.OK)
                            {
                                MessageBox.Show("Sorry you cannot issue a Credit Payment without the collection receipt no. Please enter CR No first.", "RetailPlus", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                return;
                            }
                            else 
                            {
                                iCollectionReceiptNo = Int64.Parse(decRetValue.ToString());
                            }
                        }

                        Cursor.Current = Cursors.WaitCursor;

                        try
                        {
                            LocalDB clsLocalDB = new LocalDB(mConnection, mTransaction);
                            mConnection = clsLocalDB.Connection; mTransaction = clsLocalDB.Transaction;

                            mclsSalesTransactionDetails = new Data.SalesTransactionDetails();
                            mclsSalesTransactionDetails.TransactionItemsList = new System.Collections.Generic.List<Data.SalesTransactionItemDetails>();
                            mclsSalesTransactionDetails.CustomerDetails = mclsContactDetails;
                            mclsSalesTransactionDetails.TransactionStatus = TransactionStatus.CreditPayment;
                            mclsSalesTransactionDetails.CRNo = iCollectionReceiptNo;

                            Data.Products clsProducts = new Data.Products(mConnection, mTransaction);
                            mConnection = clsProducts.Connection; mTransaction = clsProducts.Transaction;

                            if (clsProducts.Details(Data.Products.DEFAULT_CREDIT_PAYMENT_BARCODE).ProductID == 0)
                            {
                                clsProducts.CREATE_CREDITPAYMENT_PRODUCT();
                                Methods.InsertAuditLog(mclsTerminalDetails, "System Administrator", AccessTypes.EnterCreditPayment, "CREDIT PAYMENT product has been created coz it's not configured");
                            }

                            /************** April 21, 2006: added transaction no. ***************/
                            lblCustomer.Tag = mclsContactDetails.ContactID;
                            lblCustomer.Text = mclsContactDetails.ContactName;

                            clsEvent.AddEvent("[" + lblCashier.Text + "] Creating " + Data.Products.DEFAULT_CREDIT_PAYMENT_BARCODE + " transaction for customer: ");
                            LoadContact(AceSoft.RetailPlus.Data.ContactGroupCategory.CUSTOMER, mclsContactDetails);

                            if (!this.CreateTransaction()) return;
                            
                            txtBarCode.Text = Data.Products.DEFAULT_CREDIT_PAYMENT_BARCODE;
                            ReadBarCode();
                            int iRow = dgItems.CurrentRowIndex;

                            Data.SalesTransactionItemDetails clsItemDetails = getCurrentRowItemDetails();
                            clsItemDetails.Price = AmountPaid;
                            clsItemDetails.Amount = AmountPaid;

                            clsItemDetails = ComputeItemTotal(clsItemDetails); // set the grossales, vat, discounts, etc.(Details);

                            Data.SalesTransactions clsSalesTransactions = new Data.SalesTransactions(mConnection, mTransaction);
                            mConnection = clsSalesTransactions.Connection; mTransaction = clsSalesTransactions.Transaction;

                            ApplyChangeQuantityPriceAmountDetails(iRow, clsItemDetails, "Change Quantity, Price, Amount for Credit Payment");
                            // re-instantiate the status
                            mclsSalesTransactionDetails.TransactionStatus = TransactionStatus.CreditPayment;

                            mclsSalesTransactionDetails.AmountDue = AmountPaid;
                            mclsSalesTransactionDetails.AmountPaid = AmountPaid;
                            mclsSalesTransactionDetails.ChangeAmount = ChangeAmount;
                            mclsSalesTransactionDetails.CashPayment = CashPayment;
                            mclsSalesTransactionDetails.ChequePayment = ChequePayment;
                            mclsSalesTransactionDetails.PaymentType = PaymentType;
                            mclsSalesTransactionDetails.CRNo = iCollectionReceiptNo;

                            // for assignment of payments
                            mclsSalesTransactionDetails.PaymentDetails = AssignArrayListPayments(arrCashPaymentDetails, arrChequePaymentDetails, arrCreditCardPaymentDetails, null, arrDebitPaymentDetails);
                            
                            SavePayments(arrCashPaymentDetails, arrChequePaymentDetails, arrCreditCardPaymentDetails, null, arrDebitPaymentDetails);

                            // save the details of credit payments
                            SaveCreditPayments(dgvItemsSelectedRows, arrCashPaymentDetails, arrChequePaymentDetails, arrCreditCardPaymentDetails, null, arrDebitPaymentDetails, boActivateSuspendedAccount);

                            //OpenDrawerDelegate opendrawerDel = new OpenDrawerDelegate(OpenDrawer);
                            //Invoke(opendrawerDel);
                            OpenDrawer();

                            //update the transaction table 
                            Int64 iTransactionID = Convert.ToInt64(lblTransNo.Tag);
                            string strORNo = ""; // no need to put an OR no for credit payment coz it's already declared before
                            clsSalesTransactions.Close(mclsSalesTransactionDetails.TransactionID, mclsSalesTransactionDetails.TerminalNo, strORNo, 0, 0, AmountPaid, AmountPaid, AmountPaid, 0, 0, 0, 0, 0, 0, 0, 0, 0, DiscountTypes.NotApplicable, 0, 0, 0, 0, 0, 0, 0, 0, 0, AmountPaid, CashPayment, ChequePayment, CreditCardPayment, 0, DebitPayment, 0, 0, 0, 0, PaymentType, null, null, 0, 0, null, null, mclsSalesTransactionDetails.CashierID, lblCashier.Text, TransactionStatus.CreditPayment);
                            
                            // 05Mar2015 : MPC - Update the CRNo as per Ms. Norma
                            clsSalesTransactions.UpdateCRNo(mclsSalesTransactionDetails.BranchID, mclsSalesTransactionDetails.TerminalNo, mclsSalesTransactionDetails.TransactionID, mclsSalesTransactionDetails.CRNo);

                            //UpdateTerminalReportDelegate updateterminalDel = new UpdateTerminalReportDelegate(UpdateTerminalReport);
                            UpdateTerminalReport(TransactionStatus.CreditPayment, 0, 0, AmountPaid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CashPayment, ChequePayment, CreditCardPayment, 0, DebitPayment, 0, 0, PaymentType);
                            
                            //UpdateCashierReportDelegate updatecashierDel = new UpdateCashierReportDelegate(UpdateCashierReport);
                            UpdateCashierReport(TransactionStatus.CreditPayment, 0, 0, AmountPaid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CashPayment, ChequePayment, CreditCardPayment, 0, DebitPayment, 0, 0, PaymentType);

                            // Sep 24, 2014 : update back the LastCheckInDate to min date
                            Data.Contacts clsContact = new Data.Contacts(mConnection, mTransaction);
                            mConnection = clsContact.Connection; mTransaction = clsContact.Transaction;

                            clsContact.UpdateLastCheckInDate(mclsSalesTransactionDetails.CustomerID, Constants.C_DATE_MIN_VALUE);

                            //enable IsCreditAllowed
                            //already done when paying creditpayment

                            //// 3Nov2014 : automatically deposit the change if credit payment
                            //#region Auto deposit for creditpayment
                            //if (mclsSysConfigDetails.WillDepositChangeOfCreditPayment)
                            //{
                            //    InsertAuditLog(AccessTypes.Deposit, "Auto depositing change of trx #: " + mclsSalesTransactionDetails.TransactionNo + ".");
                            //    clsEvent.AddEventLn("Auto depositing change of trx #: " + mclsSalesTransactionDetails.TransactionNo + ".");

                            //    Data.Deposits clsDeposit = new Data.Deposits(mConnection, mTransaction);
                            //    mConnection = clsDeposit.Connection; mTransaction = clsDeposit.Transaction;

                            //    Data.DepositDetails clsDepositDetails = new Data.DepositDetails()
                            //    {
                            //        BranchDetails = mclsTerminalDetails.BranchDetails,
                            //        TerminalNo = mclsTerminalDetails.TerminalNo,
                            //        Amount = mclsSalesTransactionDetails.ChangeAmount,
                            //        PaymentType = mclsSalesTransactionDetails.PaymentType,
                            //        DateCreated = DateTime.Now,
                            //        CashierID = mclsSalesTransactionDetails.CashierID,
                            //        CashierName = mclsSalesTransactionDetails.CashierName,
                            //        ContactID = mclsSalesTransactionDetails.CustomerDetails.ContactID,
                            //        ContactName = mclsSalesTransactionDetails.CustomerDetails.ContactName,
                            //        Remarks = "Auto deposit from trx #: " + mclsSalesTransactionDetails.TransactionNo + ".",
                            //        CreatedOn = DateTime.Now,
                            //        LastModified = DateTime.Now
                            //    };
                            //    clsDeposit.Insert(clsDepositDetails);

                            //    Data.Contacts clsContact = new Data.Contacts(mConnection, mTransaction);
                            //    mConnection = clsContact.Connection; mTransaction = clsContact.Transaction;

                            //    clsContact.AddDebit(clsDepositDetails.ContactID, clsDepositDetails.Amount);
                            //    clsDeposit.CommitAndDispose();

                            //    InsertAuditLog(AccessTypes.Deposit, "Deposit: type='" + clsDepositDetails.PaymentType.ToString("G") + "' amount='" + clsDepositDetails.Amount.ToString(",##0.#0") + "'" + " @ Branch: " + mclsTerminalDetails.BranchDetails.BranchCode);
                            //    clsEvent.AddEventLn("Done! type=" + clsDepositDetails.PaymentType.ToString("G") + " amount=" + clsDepositDetails.Amount.ToString("#,###.#0"));
                            //}
                            //#endregion

                            clsSalesTransactions.CommitAndDispose();
                            clsLocalDB.CommitAndDispose();

                            InsertAuditLog(AccessTypes.CreditPayment, "Pay credit for " + mclsContactDetails.ContactName + "." + " @ Branch: " + mclsTerminalDetails.BranchDetails.BranchCode);

                            if (mclsTerminalDetails.AutoPrint == PrintingPreference.AskFirst)
                                if (MessageBox.Show("Would you like to print this transaction?", "RetailPlus", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, (mclsSysConfigDetails.isDefaultButtonYesInPrintTransaction ? MessageBoxDefaultButton.Button1 : MessageBoxDefaultButton.Button2)) == DialogResult.Yes)
                                    mclsTerminalDetails.AutoPrint = PrintingPreference.Normal;

                            // print credit payment as normal transaction if not HP
                            if (mclsSalesTransactionDetails.isConsignment)
                            {
                                // 18Feb2015 : Print DR only if the transaction is consignment
                                clsEvent.AddEventLn("      printing delivery receipt as consginment...", true, mclsSysConfigDetails.WillWriteSystemLog);
                                PrintDeliveryReceipt();
                            }
                            else if (mclsSalesTransactionDetails.CustomerDetails.ContactCode == mclsSysConfigDetails.OutOfStockCustomerCode &&
                                (mclsTerminalDetails.ReceiptType == TerminalReceiptType.SalesInvoice ||
                                 mclsTerminalDetails.ReceiptType == TerminalReceiptType.DeliveryReceipt ||
                                mclsTerminalDetails.ReceiptType == TerminalReceiptType.SalesInvoiceAndDR))
                            {
                                clsEvent.AddEventLn("      printing out of stock orders...", true, mclsSysConfigDetails.WillWriteSystemLog);
                                PrintOSReceipt();
                            }
                            else if (mclsSalesTransactionDetails.CustomerDetails.ContactCode == mclsSysConfigDetails.WalkInCustomerCode &&
                            (mclsTerminalDetails.ReceiptType == TerminalReceiptType.SalesInvoice ||
                             mclsTerminalDetails.ReceiptType == TerminalReceiptType.DeliveryReceipt ||
                            mclsTerminalDetails.ReceiptType == TerminalReceiptType.SalesInvoiceAndDR))
                            {
                                clsEvent.AddEventLn("      printing walk-in customer quote form...", true, mclsSysConfigDetails.WillWriteSystemLog);
                                PrintWalkInReceipt();
                            }
                            else if (mclsSysConfigDetails.CreditPaymentType == CreditPaymentType.Houseware)
                            {
                                // do another report for credit payment if HP
                                PrintCreditPayment();

                                // do this twice as per request of CN trader's and CS
                                PrintCreditPayment();
                            }
                            else if (mclsTerminalDetails.ReceiptType == TerminalReceiptType.SalesInvoice ||
                                mclsTerminalDetails.ReceiptType == TerminalReceiptType.DeliveryReceipt ||
                                mclsTerminalDetails.ReceiptType == TerminalReceiptType.SalesInvoiceAndDR)
                            {
                                clsEvent.AddEventLn("      printing sales invoice...", true, mclsSysConfigDetails.WillWriteSystemLog);
                                PrintCollectionReceipt();
                            }
                            else
                            {
                                // Sep 14, 2014 Control printing in mclsFilePrinter.Write
                                //if (mclsTerminalDetails.AutoPrint == PrintingPreference.Normal)	//print items if not yet printed
                                //{
                                foreach (System.Data.DataRow dr in ItemDataTable.Rows)
                                {
                                    if (dr["Quantity"].ToString() != "VOID")
                                    {
                                        string stItemNo = "" + dr["ItemNo"].ToString();
                                        string stProductCode = "" + dr["ProductCode"].ToString();
                                        if (dr["MatrixDescription"].ToString() != string.Empty && dr["MatrixDescription"].ToString() != null) stProductCode += "-" + dr["MatrixDescription"].ToString();
                                        string stProductUnitCode = "" + dr["ProductUnitCode"].ToString();
                                        decimal decQuantity = Convert.ToDecimal(dr["Quantity"]);
                                        decimal decPrice = Convert.ToDecimal(dr["Price"]);
                                        decimal decDiscount = Convert.ToDecimal(dr["Discount"]);
                                        decimal decAmount = Convert.ToDecimal(dr["Amount"]);
                                        decimal decVAT = Convert.ToDecimal(dr["VAT"]);
                                        decimal decEVAT = Convert.ToDecimal(dr["EVAT"]);
                                        decimal decPromoApplied = Convert.ToDecimal(dr["PromoApplied"]);
                                        string stDiscountCode = "" + dr["DiscountCode"].ToString();
                                        DiscountTypes ItemDiscountType = (DiscountTypes)Enum.Parse(typeof(DiscountTypes), dr["ItemDiscountType"].ToString());

                                        PrintItem(stItemNo, stProductCode, stProductUnitCode, decQuantity, decPrice, decDiscount, decPromoApplied, decAmount, decVAT, decEVAT, stDiscountCode, ItemDiscountType);
                                    }
                                }
                                //}
                                // Sep 14, 2014 Control printing in mclsFilePrinter.Write

                                PrintReportFooterSection(true, TransactionStatus.CreditPayment, 0, 0, AmountPaid, 0, 0, AmountPaid, CashPayment, ChequePayment, CreditCardPayment, 0, DebitPayment, 0, 0, ChangeAmount, arrChequePaymentDetails, arrCreditCardPaymentDetails, null, arrDebitPaymentDetails);
                            }
                            
                            this.LoadOptions();
                        }
                        catch (Exception ex)
                        {
                            InsertErrorLogToFile(ex, "ERROR!!! Credit payment procedure. Err Description: ");
                        }
                        Cursor.Current = Cursors.Default;
                    }

                    creditWnd.Close();
                    creditWnd.Dispose();
                }
            }
        }