using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Volo.Abp;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.Guids;
using Win_in.Sfs.Scp.WebApi.Domain.Shared;
namespace Win_in.Sfs.Scp.WebApi
{
///
/// 采购订单主表
///
public class PurchaseOrder: EntityBase
{
///
/// 订单号(PoNumber)
///
[Display(Name = "订单号(PoNumber)")]
public string PoNumber { set; get; }
///
/// 供应商代码(SupplierCode)
///
[Display(Name = "供应商代码(SupplierCode)")]
public string SupplierCode { set; get; }
///
/// 订单类型(PoType)
///
[Display(Name = "订单类型(PoType)")]
public string PoType { set; get; }
///
/// 订单状态(Status)
///
[Display(Name = "订单状态(Status)")]
public int Status { set; get; }
///
/// 是否寄存订单(IsConsignment)
///
[Display(Name = "是否寄存订单(IsConsignment)")]
public bool IsConsignment { set; get; }
///
/// 订单日期(OrderDate)
///
[Display(Name = "订单日期(OrderDate)")]
public DateTime OrderDate { set; get; }
///
/// 截止日期(DueDate)
///
[Display(Name = "截止日期(DueDate)")]
public DateTime DueDate { set; get; }
///
/// 版本(version)
///
[Display(Name = "版本")]
public string Version { get; set; }
///
/// 税率(TaxRate)
///
[Display(Name = "税率(TaxRate)")]
public decimal? TaxRate { set; get; }
///
/// 联系人(ContactName)
///
[Display(Name = "联系人(ContactName)")]
public string ContactName { set; get; }
///
/// 联系电话(ContactPhone)
///
[Display(Name = "联系电话(ContactPhone)")]
public string ContactPhone { set; get; }
///
/// 备注(Remark)
///
[Display(Name = "备注(Remark)")]
public string Remark { set; get; }
///
/// 地点(Site)
///
[Display(Name = "地点(Site)")]
public string Site { set; get; }
///
/// 公司(Company)
///
[Display(Name = "公司(Company)")]
public string Company { set; get; }
public virtual ICollection Details { get; set; }
#region details handler
public virtual void AddDetail(IGuidGenerator guidGenerator, PurchaseOrderDetail detail)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
Check.NotNull(detail, nameof(PurchaseOrderDetail));
if (IsInDetails(detail.PoNumber,detail.PoLine))
{
throw new Exception(detail.PoNumber+ detail.PoLine + "已经在明细中存在!");
}
Details.Add(new PurchaseOrderDetail(guidGenerator.Create(),detail.PoNumber, detail.PoLine, detail.PartCode, detail.Uom, detail.OrderQty,detail.StdPackUom, detail.StdPackQty,
detail.SupplierPackConvertRate, detail.IsConsignment, detail.LineStatus, detail.Remark));
}
public virtual void AddDetails(IGuidGenerator guidGenerator, IEnumerable details)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
foreach (var detail in details)
{
AddDetail(guidGenerator, detail);
}
}
public virtual bool IsInDetails(string ponumber , string poline)
{
return Details.Any(di => di.PoNumber == ponumber && di.PoLine == poline);
}
public virtual bool IsInDetails(Guid itemId)
{
return Details.Any(di => di.Id == itemId);
}
public virtual bool UpdateDetail(IGuidGenerator guidGenerator, PurchaseOrderDetail detail)
{
Check.NotNull(detail, nameof(PurchaseOrderDetail));
var item = FindDetail(detail.Id);
if (item == null)
{
AddDetail(guidGenerator, detail);
}
else
{
Check.NotNull(item, nameof(PurchaseOrderDetail));
//item.Set(detail.Remark, detail.Enabled);
}
return true;
}
public virtual PurchaseOrderDetail FindDetail(Guid itemId)
{
var item = Details.FirstOrDefault(p => p.Id == itemId);
return item;
}
#endregion
}
}