Example #1
0
        public payment CalculateEditSelectedTotal(long sessionID, long customerID)
        {
            payment _payment = new payment();

            var _selecteditems = selecteditems.GetAll();
            _selecteditems = _selecteditems.Where(q => q.idSession == sessionID).OrderByDescending(o => o.ID);
            int count = 0;
            decimal selectionTotal = 0; // Thhis selection or edit reservation total
            decimal reservationTotal = 0; // Previous reservation total
            foreach (var _selecteditem in _selecteditems)
            {
                count = count + 1;
                selectionTotal = selectionTotal + _selecteditem.total;
                // Check if selected item was a reserved item,
                // this means the selected item is in edit reservation mode
                if (_selecteditem.idReservationItem != null && _selecteditem.idReservationItem != IDnotFound)
                {
                    var _reservationitem = reservationitems.GetById(_selecteditem.idReservationItem);
                    reservationTotal = reservationTotal + _reservationitem.total;
                }
            }

            // *****
            decimal dueAmount = Math.Max((selectionTotal - reservationTotal), 0);
            decimal refundAmount = Math.Max((reservationTotal - selectionTotal), 0);
            // Check if a cancellation fee applies
            decimal cancelationFee = GetCancelationFee(sessionID);
            if (selectionTotal < reservationTotal)
            {
                if ((reservationTotal - selectionTotal) < cancelationFee)
                {
                    refundAmount = 0;
                    dueAmount = cancelationFee - (reservationTotal - selectionTotal);
                }
                else
                {
                    refundAmount = refundAmount - cancelationFee;
                }
            }
            else
            {
                cancelationFee = 0;
            }

            // Value of previous reservation, just before edit reservation mode started
            _payment.primaryTotal = reservationTotal;
            _payment.selectionTotal = selectionTotal;
            _payment.cancellationFee = cancelationFee;
            /// Suggested value for payment
            _payment.amount = dueAmount - refundAmount - CustomerAccountBalance(customerID);
            _payment.tax = Math.Round((dueAmount * GetProvinceTax(sessionID) / 100), 2, MidpointRounding.AwayFromZero);
            _payment.withoutTax = dueAmount - _payment.tax;

            return _payment;
        }
        // Data to be presented on the view
        private void CreatePaymentViewBags(long sessionID, long sessionCustomerID)
        {
            // Data to be presented on the view
            payment _payment = new payment();
            _payment = paymentService.CalculateEditSelectedTotal(sessionID, sessionCustomerID);

            // Value of previous reservation, just before edit reservation mode started
            ViewBag.PrimaryTotal = _payment.primaryTotal.ToString("N2");
            ViewBag.SelectionTotal = _payment.selectionTotal.ToString("N2");
            ViewBag.CancellationFee = _payment.cancellationFee.ToString("N2");
            // Suggested value for payment
            if (_payment.amount >= 0)
            {
                ViewBag.dueAmount = _payment.amount.ToString("N2");
                ViewBag.refundAmount = "0.00";
            }
            else
            {
                ViewBag.refundAmount = (_payment.amount * -1).ToString("N2");
                ViewBag.dueAmount = "0.00";
            }
        }
        public ActionResult PaymentReport()
        {
            long sessionID = sessionService.GetSessionID(this.HttpContext, true, false);
            long IPMEventID = sessionService.GetSessionIPMEventID(sessionID);
            var _payments = payments.GetAll().
                Where(p => p.idIPMEvent == IPMEventID).
                OrderBy(ps => ps.ID).ToList();

            payment total_payments = new payment();

            total_payments.amount = _payments.Sum(a => a.amount);
            total_payments.withoutTax = _payments.Sum(wt => wt.withoutTax);
            total_payments.tax = _payments.Sum(t => t.tax);
            total_payments.primaryTotal = _payments.Sum(pt => pt.primaryTotal);
            total_payments.selectionTotal = _payments.Sum(st => st.selectionTotal);
            total_payments.cancellationFee = _payments.Sum(cf => cf.cancellationFee);

            ViewBag.Totals = total_payments;

            return View(_payments);
        }
        public ActionResult PaymentOrRefund(payment _payment)
        {
            // Identify session
            long sessionID = sessionService.GetSessionID(this.HttpContext, true, false);
            long IPMEventID = sessionService.GetSessionIPMEventID(sessionID);
            long userID = sessionService.GetSessionUserID(this.HttpContext, false, false);

            // Create and insert payment
            _payment.idIPMEvent = sessionService.GetSessionIPMEventID(sessionID);
            _payment.idSession = sessionID;
            _payment.createDate = DateTime.Now;
            _payment.lastUpdate = DateTime.Now;

            payments.Insert(_payment);
            payments.Commit();
            long ID = _payment.ID;

            var _selecteditems = selecteditems.GetAll().Where(s => s.idSession == sessionID);
            foreach (selecteditem item in _selecteditems)
            {
                bool editMode = item.idReservationItem != null && item.isSiteChecked;
                bool cancelMode = item.idReservationItem != null && !item.isSiteChecked;
                bool newMode = item.idReservationItem == null && item.isSiteChecked;

                // Update existing reservation item - For edit mode
                if (cancelMode)
                {
                    var old_reservationitem = reservationitems.GetById(item.idReservationItem);
                    old_reservationitem.isCancelled = true;
                    old_reservationitem.timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                    old_reservationitem.total = 0;
                    reservationitems.Update(old_reservationitem);
                    reservationitems.Commit();
                }
                if (editMode)
                {
                    // Create and insert reservation items
                    var _reservationitem = reservationitems.GetById(item.idReservationItem);
                    _reservationitem.idIPMEvent = item.idIPMEvent.Value;
                    _reservationitem.idRVSite = item.idRVSite.Value;
                    _reservationitem.idCustomer = item.idCustomer.Value;
                    _reservationitem.idStaff = item.idStaff.Value;
                    _reservationitem.checkInDate = item.checkInDate;
                    _reservationitem.checkOutDate = item.checkOutDate;
                    _reservationitem.site = item.site;
                    _reservationitem.siteType = item.siteType;
                    _reservationitem.weeks = item.weeks;
                    _reservationitem.weeklyRate = item.weeklyRate;
                    _reservationitem.days = item.days;
                    _reservationitem.dailyRate = item.dailyRate;
                    _reservationitem.total = item.total;
                    _reservationitem.isCancelled = false;
                    _reservationitem.lastUpdate = DateTime.Now;
                    _reservationitem.timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                    reservationitems.Update(_reservationitem);
                    reservationitems.Commit();
                }
                if (newMode)
                {
                    // Create and insert reservation items
                    var _reservationitem = new reservationitem();
                    _reservationitem.idIPMEvent = item.idIPMEvent.Value;
                    _reservationitem.idRVSite = item.idRVSite.Value;
                    _reservationitem.idCustomer = item.idCustomer.Value;
                    _reservationitem.idStaff = item.idStaff.Value;
                    _reservationitem.checkInDate = item.checkInDate;
                    _reservationitem.checkOutDate = item.checkOutDate;
                    _reservationitem.site = item.site;
                    _reservationitem.siteType = item.siteType;
                    _reservationitem.weeks = item.weeks;
                    _reservationitem.weeklyRate = item.weeklyRate;
                    _reservationitem.days = item.days;
                    _reservationitem.dailyRate = item.dailyRate;
                    _reservationitem.total = item.total;
                    _reservationitem.isCancelled = false;
                    _reservationitem.createDate = DateTime.Now;
                    _reservationitem.lastUpdate = DateTime.Now;
                    _reservationitem.timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                    reservationitems.Insert(_reservationitem);
                    reservationitems.Commit();
                    // Create link between payment and reservation
                    var _paymentreservationitem = new paymentreservationitem();
                    _paymentreservationitem.idIPMEvent = item.idIPMEvent.Value;
                    _paymentreservationitem.idPayment = _payment.ID;
                    _paymentreservationitem.createDate = DateTime.Now;
                    _paymentreservationitem.lastUpdate = DateTime.Now;
                    _paymentreservationitem.idPayment = ID;
                    _paymentreservationitem.idReservationItem = _reservationitem.ID;
                    paymentsreservationitems.Insert(_paymentreservationitem);
                    paymentsreservationitems.Commit();
                }
            }
            // Clean selected items
            paymentService.CleanAllSelectedItems(sessionID, userID);
            paymentService.CleanOldSelectedItem(IPMEventID, userID);
            // 
            sessionService.ResetSessionCustomer(sessionID);



            return RedirectToAction("PrintPayment", new { id = ID });
        }
        public ActionResult PaymentOrRefund(bool isCredit = true)
        {
            long sessionID = sessionService.GetSessionID(this.HttpContext, true, false);
            ViewBag.UserName = sessionService.GetSessionUserName(sessionID);
            long customerID = sessionService.GetSessionCustomerID(sessionID);
            long IPMEventID = sessionService.GetSessionIPMEventID(sessionID);
            string customerName = sessionService.GetSessionCustomerNamePhone(sessionID);


            // Check customer's account balance
            decimal customerBalance = paymentService.CustomerAccountBalance(IPMEventID, customerID);

            // Retrieve totals for selected items in this session and transfer them to payment
            payment _payment = new payment();
            _payment = paymentService.CalculateEditSelectedTotal(sessionID, IPMEventID, customerID);

            decimal owedAmount = _payment.selectionTotal
                + _payment.cancellationFee
                - customerBalance
                - _payment.primaryTotal;

            long reasonID = (long)reasonForPayment.E.NewReservation;
            string pageTitle = "Payment Or Refund";
            string owedText = "(a) Owed Amount";
            string balanceText = "(u) Account Balance";
            string primaryText = string.Empty;
            string feeText = string.Empty;
            string selectionText = string.Empty;
            string amountText = "(b) Customer Paid";
            string dueText = "(c) Due Amount |(b)-(a)|";

            // Payment for a New Reservation
            if (owedAmount > 0 && _payment.primaryTotal == 0)
            {
                isCredit = true;
                reasonID = (long)reasonForPayment.E.NewReservation;
                pageTitle = "Payment For New Reservation";
                owedText = "(a) Owed Amount (u)-(y)";
                balanceText = "(u) Account Balance";
                primaryText = string.Empty;
                feeText = string.Empty;
                selectionText = "(y) New Reservation Total";
                amountText = "(b) Customer Paid";
                dueText = "(c) Due Amount |(b)-(a)|";
            }
            // Payment for a Edit Reservation
            if (owedAmount > 0 && _payment.primaryTotal > 0)
            {
                isCredit = true;
                reasonID = (long)reasonForPayment.E.ExtendReservation;
                pageTitle = "Payment For Extend Reservation";
                owedText = "(a) Owed Amount (u)+(v)-(y)";
                balanceText = "(u) Account Balance";
                primaryText = "(v) Primary Reservation Total";
                feeText = string.Empty;
                selectionText = "(y) New Reservation Total";
                amountText = "(b) Customer Paid";
                dueText = "(c) Due Amount |(b)-(a)|";
            }
            // Refund for a Edit Reservation
            if (owedAmount < 0 && _payment.primaryTotal > 0)
            {
                isCredit = false;
                reasonID = (long)reasonForPayment.E.ShortenReservation;
                pageTitle = "Refund For Shorten Reservation";
                owedText = "(a) Refund Amount (u)+(v)-(x)-(y)";
                balanceText = "(u) Account Balance";
                primaryText = "(v) Primary Reservation Total";
                feeText = "(x) Cancellation Fee";
                selectionText = "(y) New Reservation Total";
                amountText = "(b) Customer Received";
                dueText = "(c) Credit Amount (b)-(a)";
            }

            // Set reason for payment
            updateReasonForPayment();

            // Texts for payment page
            ViewBag.IsCredit = isCredit;
            ViewBag.ReasonForPayment = reasonID;
            ViewBag.PageTitle = pageTitle;
            ViewBag.OwedText = owedText;
            ViewBag.BalanceText = balanceText;
            ViewBag.PrimaryText = primaryText;
            ViewBag.FeeText = feeText;
            ViewBag.SelectionText = selectionText;
            ViewBag.AmountText = amountText;
            ViewBag.DueText = dueText;
            // Tax Percentage
            ViewBag.ProvinceTax = paymentService.GetProvinceTax(sessionID);
            // Payment summary info
            ViewBag.OwedAmount = owedAmount;
            ViewBag.CustomerBalance = customerBalance;
            ViewBag.CustomerID = customerID;
            ViewBag.CustomerName = customerName;

            // Create ViewBag for Dropdownlist            
            reasonsForPayment(pageTitle);
            // Create ViewBag for Dropdownlist
            paymentMethods("VISA");

            return View(_payment);
        }
        public ActionResult PaymentOrRefund(payment _payment)
        {
            // Identify session
            long sessionID = sessionService.GetSessionID(this.HttpContext);

            // Create and insert payment
            _payment.idSession = sessionID;
            _payment.createDate = DateTime.Now;
            _payment.lastUpdate = DateTime.Now;

            payments.Insert(_payment);
            payments.Commit();
            long ID = _payment.ID;

            var _selecteditems = selecteditems.GetAll().Where(s => s.idSession == sessionID);
            foreach (selecteditem item in _selecteditems)
            {
                if (item.isSiteChecked)
                {
                    // Update existing reservation item - For edit mode
                    if (item.idReservationItem != null &&
                        item.idReservationItem != IDnotFound)
                    {
                        var old_reservationitem = reservationitems.GetById(item.idReservationItem);
                        old_reservationitem.isCancelled = true;
                        old_reservationitem.total = 0;
                        reservationitems.Update(old_reservationitem);
                    }
                    // Create and insert reservation items
                    var _reservationitem = new reservationitem();
                    _reservationitem.idRVSite = item.idRVSite.Value;
                    _reservationitem.idCustomer = item.idCustomer.Value;
                    _reservationitem.idStaff = item.idStaff.Value;
                    _reservationitem.checkInDate = item.checkInDate;
                    _reservationitem.checkOutDate = item.checkOutDate;
                    _reservationitem.site = item.site;
                    _reservationitem.siteType = item.siteType;
                    _reservationitem.weeks = item.weeks;
                    _reservationitem.weeklyRate = item.weeklyRate;
                    _reservationitem.days = item.days;
                    _reservationitem.dailyRate = item.dailyRate;
                    _reservationitem.total = item.total;
                    _reservationitem.createDate = DateTime.Now;
                    _reservationitem.lastUpdate = DateTime.Now;
                    reservationitems.Insert(_reservationitem);
                    reservationitems.Commit();
                    // Create link between payment and reservation
                    // *****_reservationitem.idPayment
                    var _paymentreservationitem = new paymentreservationitem();
                    _paymentreservationitem.idPayment = _payment.ID;
                    _paymentreservationitem.idReservationItem = _reservationitem.ID;
                    _paymentreservationitem.createDate = DateTime.Now;
                    _paymentreservationitem.lastUpdate = DateTime.Now;
                    paymentsreservationitems.Insert(_paymentreservationitem);
                    paymentsreservationitems.Commit();
                }
            }

            // Clean selected items
            paymentService.CleanAllSelectedItems(sessionID);
            //
            sessionService.ResetSessionCustomer(sessionID);

            return RedirectToAction("PrintPayment", new { id = ID });
        }