Bài 7: Thêm trạng thái cho đơn hàng (Enum)
Bài trước chúng, ta đã có đơn hàng Sales Order, lần này chúng ta sẽ thực hiện các tác vụ sau:
- Thêm trạng thái giao hàng cho đơn hàng (DeliveryStatus), sử dụng enum
- Tô màu tương ứng từng trạng thái sử dụng Conditional Appearance Module của XAF
- Chỉnh sửa trên model
- Viết trong code
- Dùng SingleChoiceAction để tạo action cho người dùng sửa trạng thái hàng loạt đơn hàng:
- Đọc tất cả giá trị của một kiểu enum
- Lấy LocalizedText của một giá trị trong enum
- Video tham khảo:
Chúng ta bắt đầu nhé.
1. Thêm trạng thái giao hàng cho đơn hàng
Các bạn tạo một enum như bên dưới
using DevExpress.ExpressApp.DC; using System; using System.Linq; namespace App.Module.Modules.Sales { public enum DeliveryStatus {
//CodeRush - Gõ dn khoảng trắng để hiển thị thuộc tính XafDisplayName
[XafDisplayName("")] None = 0, [XafDisplayName("Đã xuất kho")] Exported = 1, [XafDisplayName("Đã giao")] Delivered = 2, [XafDisplayName("Hủy")] Cancelled = 3 } }
2. Thêm property DeliveryStatus
[XafDisplayName("Tình trạng giao hàng")]
//[ToolTip("")]
public DeliveryStatus DeliveryStatus
{
get => _deliveryStatus;
set => SetPropertyValue(nameof(DeliveryStatus), ref _deliveryStatus, value);
}
3. Thay đổi màu sắc theo trạng thái
a. Thay đổi trên model
Bạn nhớ, rebuild để XAF cập nhật lại file ModelDesign nhé. Mở file này, vào mục sau
Cách này dễ làm, nhưng mỗi lần phải định nghĩa màu, có thể gây ra khống nhất màu sắc.
b. Thay đổi trong code
Mở lớp SalesOrder lên, thêm vào thuộc tính màu sắc như bên dưới:
using YouSoft.Vn.XAFCustom.Supports.Attributes.ActionModification;
using YouSoft.Vn.XAFCustom.Supports.Custom;
namespace App.Module.Modules.Sales
{
//...
[DecoratePropertiesControls("Cancelled",TargetItems =nameof(DeliveryStatus)
,Criteria = "DeliveryStatus='Cancelled'",PredefinedStyle =PredefinedStyle.DangerStyle)]
public partial class SalesOrder //...
{
4. Kiểm tra
5. Tạo SingleChoiceAction để set status
Thêm đoạn code sau vào file SalesOrderViewController.cs
//...
public SalesOrderViewController()
{
//...
setDeliveryStatusAction = new SingleChoiceAction()
{
Id = nameof(setDeliveryStatusAction),
Caption = "Cập nhật",
TargetObjectType = typeof(SalesOrder),
ConfirmationMessage = "Bạn có muốn cập nhật hàng hoạt đơn hàng không?",
ItemType = SingleChoiceActionItemType.ItemIsOperation,
SelectionDependencyType=SelectionDependencyType.RequireMultipleObjects
};
Actions.Add(setDeliveryStatusAction);
InitActionItems();
setDeliveryStatusAction.Execute += SetDeliveryStatusAction_Execute;
}
void InitActionItems()
{
var statuses = Enum.GetValues(typeof(DeliveryStatus));
foreach (var status in statuses)
{
var item = new ChoiceActionItem(((Enum)status).LocalizedEnumText()
, status);
setDeliveryStatusAction.Items.Add(item);
}
}
6. Kết quả
Chúc các bạn thành công
Không có nhận xét nào:
Đăng nhận xét