Bài 3: Tạo một đơn hàng bán đơn giản
Nội dung chính
Tạo module Sales: có các entity chính:
- Khách hàng: Mã, tên, địa chỉ
- Đơn hàng: Ngày bán, người bán, khách hàng mua, tổng tiền, thành tiền
- Chi tiết đơn hàng: Đơn hàng, món hàng, đơn giá, số lượng, thành tiền.
Khi tạo xong chúng ta sẽ có các entity sau:
using DevExpress.ExpressApp.DC;
using DevExpress.ExpressApp.Model;
using DevExpress.Persistent.Base;
using DevExpress.Persistent.Validation;
using DevExpress.Xpo;
using System.ComponentModel;
using YouSoft.Vn.XAFCustom.Core.Entities;
using YouSoft.Vn.XAFCustom.Core.Extensions;
using YouSoft.Vn.XAFCustom.Supports;
using YouSoft.Vn.XAFCustom.Supports.Attributes.Validation;
using YouSoft.Vn.XAFCustom.Supports.Interfaces;
namespace App.Module.Modules.Sales
{
[XafDisplayName("Khách hàng")]
[ImageName("BO_Customer")]
[VisibleInDashboards]
[VisibleInReports]
[LookupEditorMode(LookupEditorMode.AllItemsWithSearch)]
public partial class Customer : YsvObject, IHasCode
{
public Customer(Session session) : base(session)
{
}
string _name;
[Indexed(Name = @"Idx_Name")]
[NonCloneable]
[VisibleInLookupListView(true)]
[RequiredOnSave]
[XafDisplayName("Tên khách")]
//[ToolTip(" ")]
public string Name
{
get =>
_name;
set =>
SetPropertyValue(nameof(Name), ref _name, value);
}
protected override string MakeDescription() =>
Name;
string _code;
[Indexed(Name = @"Idx_Code")]
[Size(30)]
[DevExpress.Persistent.Base.NonCloneable]
[XafDisplayName("Mã khách")]
[ModelDefault(nameof(IModelMember.AllowEdit), CoreApp.Consts.False)]
//[ToolTip("")]
[VisibleInLookupListView(true)]
[RuleUniqueValue("", DefaultContexts.Save,
CriteriaEvaluationBehavior = CriteriaEvaluationBehavior.BeforeTransaction)]
public string Code
{
get { return _code; }
set { SetPropertyValue(nameof(Code), ref _code, value); }
}
int _sequenceNumber;
[NonCloneable]
[Indexed]
[Browsable(false)]
public int SequenceNumber
{
get =>
_sequenceNumber;
set =>
SetPropertyValue(nameof(SequenceNumber), ref _sequenceNumber, value);
}
protected override void OnSavingOnly()
{
base.OnSavingOnly();
Code = this.GenerateCode("KH", 4);
}
}
}
Lớp đơn hàng
using App.Module.Modules.Sales;
using DevExpress.ExpressApp.DC;
using DevExpress.ExpressApp.Model;
using DevExpress.Persistent.Base;
using DevExpress.Xpo;
using ModuleBase.Entities;
using System;
using System.Linq;
using YouSoft.Vn.Framework.Core.Utilities;
using YouSoft.Vn.XAFCustom.Core.Entities;
using YouSoft.Vn.XAFCustom.Supports;
using YouSoft.Vn.XAFCustom.Supports.Attributes.Validation;
namespace App.Module.Modules.Inventory
{
[XafDisplayName("Đơn hàng")]
[ImageName("BO_SalesOrder")]
[VisibleInDashboards]
[VisibleInReports]
[LookupEditorMode(LookupEditorMode.AllItemsWithSearch)]
public partial class SalesOrder : YsvObject
{
public SalesOrder(Session session) : base(session)
{
}
public override void AfterConstruction()
{
base.AfterConstruction();
Date = DateTime.Now;
Employee = YsvUser.GetCurrentUser<Employee>(Session);
}
private double _total;
private Customer _customer;
private Employee _employee;
private DateTime _date;
[XafDisplayName("Ngày bán")]
//[ToolTip("")]
public DateTime Date
{
get => _date;
set => SetPropertyValue(nameof(Date), ref _date, value);
}
[XafDisplayName("Nhân viên")]
[ModelDefault(nameof(IModelMember.AllowEdit), CoreApp.Consts.False)]
//[ToolTip("")]
public Employee Employee
{
get => _employee;
set => SetPropertyValue(nameof(Employee), ref _employee, value);
}
[XafDisplayName("Khách hàng")]
[RequiredOnSave]
//[ToolTip("")]
public Customer Customer
{
get => _customer;
set => SetPropertyValue(nameof(Customer), ref _customer, value);
}
[XafDisplayName("Tiền hàng")]
[ModelDefault(nameof(IModelMember.DisplayFormat), CoreApp.Consts.N0)]
[ModelDefault(nameof(IModelMember.EditMask), CoreApp.Consts.N0)]
[ModelDefault(nameof(IModelMember.AllowEdit), CoreApp.Consts.False)]
//[ToolTip("")]
public double Total
{
get => _total;
set => SetPropertyValue(nameof(Total), ref _total, value);
}
public string MoneyInWords => CurrencyUtil.ToString(Total);
[XafDisplayName("Chi tiết hàng")]
//[ToolTip("")]
[Association("SalesOrder-OrderItems")]
public XPCollection<OrderItem> OrderItems
{
get
{
return GetCollection<OrderItem>(nameof(OrderItems));
}
}
protected override void OnSavingOnly()
{
base.OnSavingOnly();
Total = OrderItems.Sum(i=>i.SubTotal);
}
}
}
Lớp đơn hàng chi tiết
using DevExpress.ExpressApp.DC;
using DevExpress.ExpressApp.Model;
using DevExpress.Persistent.Base;
using DevExpress.Xpo;
using YouSoft.Vn.XAFCustom.Core.Entities;
using YouSoft.Vn.XAFCustom.Supports;
using YouSoft.Vn.XAFCustom.Supports.Attributes.Validation;
namespace App.Module.Modules.Inventory
{
[XafDisplayName("Chi tiết hàng")]
[ImageName("BO_OrderItem")]
[VisibleInDashboards]
[VisibleInReports]
[LookupEditorMode(LookupEditorMode.AllItemsWithSearch)]
public partial class OrderItem : YsvObject
{
public OrderItem(Session session) : base(session)
{
}
[XafDisplayName("")]
//[ToolTip("")]
[RequiredOnSave]
[ModelDefault(nameof(IModelMember.AllowEdit), CoreApp.Consts.False)]
[Association("SalesOrder-OrderItems")]
public SalesOrder SalesOrder
{
get => _salesOrder;
set => SetPropertyValue(nameof(SalesOrder), ref _salesOrder, value);
}
private SalesOrder _salesOrder;
private double _subTotal;
private double _quantity;
private double _unitPrice;
private Product _product;
[XafDisplayName("Món hàng")]
[RequiredOnSave]
//[ToolTip("")]
public Product Product
{
get => _product;
set => SetPropertyValue(nameof(Product), ref _product, value);
}
[XafDisplayName("Đơn giá")]
[ModelDefault(nameof(IModelMember.DisplayFormat), CoreApp.Consts.N0)]
[ModelDefault(nameof(IModelMember.EditMask), CoreApp.Consts.N0)]
//[ToolTip("")]
public double UnitPrice
{
get => _unitPrice;
set => SetPropertyValue(nameof(UnitPrice), ref _unitPrice, value);
}
[XafDisplayName("Số lượng")]
[ModelDefault(nameof(IModelMember.DisplayFormat), CoreApp.Consts.N1)]
[ModelDefault(nameof(IModelMember.EditMask), CoreApp.Consts.N1)]
//[ToolTip("")]
public double Quantity
{
get => _quantity;
set => SetPropertyValue(nameof(Quantity), ref _quantity, value);
}
[XafDisplayName("Thành tiền")]
[ModelDefault(nameof(IModelMember.DisplayFormat), CoreApp.Consts.N0)]
[ModelDefault(nameof(IModelMember.EditMask), CoreApp.Consts.N0)]
[ModelDefault(nameof(IModelMember.AllowEdit), CoreApp.Consts.False)]
//[ToolTip("")]
public double SubTotal
{
get => _subTotal;
set => SetPropertyValue(nameof(SubTotal), ref _subTotal, value);
}
protected override void OnPropertyValueChanged(string propertyName, object oldValue, object newValue)
{
base.OnPropertyValueChanged(propertyName, oldValue, newValue);
switch (propertyName)
{
case nameof(Product):
UnitPrice = Product?.Price ?? 0;
break;
case nameof(UnitPrice):
case nameof(Quantity):
SubTotal = UnitPrice * Quantity;
break;
}
}
}
}

Không có nhận xét nào:
Đăng nhận xét