private void PopulateOrderDetails(IrregularOrder order)
        {
            if (order != null)
            {
                tbSenderName.Text           = order.sender_name;
                tbSenderPhoneNumber.Text    = order.sender_phone;
                tbSenderIDCardNo.Text       = order.sender_id_card_no;
                tbSenderAddress.Text        = order.sender_address;
                tbRecipientName.Text        = order.recipient_name;
                tbRecipientPhoneNumber.Text = order.recipient_phone;
                tbRecipientIDCardNo.Text    = order.recipient_id_card_no;
                tbRecipientAddress.Text     = order.recipient_address;

                lblOrderIdText.Text     = order.id;
                lblCreatedDateText.Text = order.created_date.ToString("dd-MM-yyyy hh:mm:ss");
                lblCreatedByText.Text   = order.created_by;
                lblClosedDateText.Text  = order.closed_date.HasValue ? order.closed_date.Value.ToString("dd-MM-yyyy hh:mm:ss") : string.Empty;
                cboTour.SelectedValue   = order.tour_id;
                Constants.DeliveryStatus deliveryStatus;
                bool parseResult = Enum.TryParse <Constants.DeliveryStatus>(order.order_status, out deliveryStatus);
                if (parseResult)
                {
                    CurrentDeliveryStatus = deliveryStatus;
                }
                Constants.PaymentStatus paymentStatus;
                parseResult = Enum.TryParse <Constants.PaymentStatus>(order.payment_status, out paymentStatus);
                if (parseResult)
                {
                    CurrentPaymentStatus = paymentStatus;
                }
                Collection <OrderItem> items = (new OrderItemBusiness()).GetByOrderId(order.id);
                tbItemsQuantity.Text = items.Sum(item => item.quantity).ToString();
                decimal totalCost = items.Sum(item => item.cost);
                tbTotalCost.Text            = totalCost.ToString("N0");
                this.ucItemsList.OrderID    = order.id;
                this.ucItemsList.OrderItems = items;
            }
        }
        public override bool HandleSaveTask()
        {
            bool success = false;

            try
            {
                IrregularOrder order = SelectedOrder;
                if (order != null && ValidateInput())
                {
                    Constants.PaymentStatus currentPaymentStatus = EnumHelper.Parse <Constants.PaymentStatus>(order.payment_status);
                    // Collects order information
                    Collection <OrderItem> orderItems = new Collection <OrderItem>();
                    order.sender_name          = tbSenderName.Text;
                    order.sender_phone         = tbSenderPhoneNumber.Text;
                    order.sender_id_card_no    = tbSenderIDCardNo.Text;
                    order.sender_address       = tbSenderAddress.Text;
                    order.recipient_name       = tbRecipientName.Text;
                    order.recipient_phone      = tbRecipientPhoneNumber.Text;
                    order.recipient_id_card_no = tbRecipientIDCardNo.Text;
                    order.recipient_address    = tbRecipientAddress.Text;
                    order.tour_id        = cboTour.SelectedValue.ToString();
                    order.order_status   = CurrentDeliveryStatus.ToString();
                    order.payment_status = CurrentPaymentStatus.ToString();
                    int     totalQuantity = 0;
                    decimal totalValue    = 0;
                    decimal totalCost     = 0;
                    foreach (var item in ucItemsList.OrderItems)
                    {
                        OrderItem newOrderItem = new OrderItem()
                        {
                            id                = IDGenerator.NewOrderItemId(order.id, orderItems.Count + 1),
                            order_id          = order.id,
                            name              = item.name,
                            weight            = item.weight,
                            size              = item.size,
                            quantity          = item.quantity,
                            value             = item.value,
                            description       = item.description,
                            cost              = item.cost,
                            order_item_number = item.order_item_number
                        };
                        orderItems.Add(newOrderItem);
                        totalQuantity += item.quantity;
                        totalValue    += item.value * item.quantity;
                        totalCost     += item.cost;
                    }
                    order.total_quantity = totalQuantity;
                    order.total_value    = totalValue;
                    order.total_cost     = decimal.Parse(tbTotalCost.Text);
                    if (rbtnDeliveryStatus_Closed.Checked)
                    {
                        order.closed_date = DateTime.Now;
                    }

                    if (currentPaymentStatus == Constants.PaymentStatus.Unpaid &&
                        rbtnPaymentStatus_Paid.Checked &&
                        (new IrregularOrderPaymentView(order, orderItems)).ShowDialog() != DialogResult.OK)
                    {
                        return(false);
                    }
                    string result = _business.Update(order, orderItems);
                    if (string.IsNullOrEmpty(result))
                    {
                        MessageBox.Show("Đơn hàng đã cập nhật thành công.", string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None);
                        ChangeOrderDetailsEditingStatus(false);
                        _isEditing = false;
                        success    = true;
                        DataBind();
                        PopulateOrderDetails(order);
                    }
                    else
                    {
                        MessageBox.Show(result, Constants.Messages.ERROR_CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            catch (Exception ex)
            {
                AppLogger.logError(this.ToString(), "Error occurs when saving order changes.", ex);
                MessageBox.Show("Có lỗi xảy ra trong khi cập nhập đơn hàng.", Constants.Messages.ERROR_CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return(success);
        }