using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using WMS.Web.Core;
using WMS.Web.Core.Help;
using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Values;
namespace WMS.Web.Domain.Entitys
{
///
/// 老ops箱信息头
///
[Serializable]
[Table("t_ops_box")]
public class Box : EntityBase
{
///
/// ID
///
public override int Id { get; set; }
///
/// 对应老OPS的箱ID
///
public int OpsBoxId { get; set; }
///
/// 箱编号(老OPS生成的箱号)
///
public string BoxBillNo { get; set; }
///
/// 供应商Id
///
public int SupplierId { get; set; } = 0;
///
/// 组织Id
///
public int OrgId { get; set; } = 0;
///
/// 完成装箱时间
///
public DateTime CompleteCartonTime { get; set; } = DateTime.Now;
///
/// 完成装箱用户
///
public string CompleteCartonUser { get; set; }
///
/// 箱子创建用户
///
public string CreateUser { get; set; }
///
/// 创建时间(对应老OPS的创建时间)
///
public DateTime CreateTime { get; set; } = DateTime.Now;
///
/// 明细
///
public List Details { get; set; } = new List();
//移出
public Result Out(List<(string MaterialNumber, decimal Qty, List SerialNumbers)> list)
{
foreach (var l in list)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == l.MaterialNumber);
if (d == null) return Result.ReFailure(ResultCodes.BoxMateriaNoData);
d.Qty = d.Qty - l.Qty;
if (d.Qty <= 0) this.Details.Remove(d);
//foreach (var s in l.SerialNumbers) d.SerialNumbers.Remove(s);
}
return Result.ReSuccess();
}
//移入
public Result In(List<(string MaterialNumber, decimal Qty, List SerialNumbers)> list)
{
foreach (var l in list)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == l.MaterialNumber);
if (d == null)
{
this.Details.Add(new BoxDetails()
{
MaterialNumber = l.MaterialNumber,
Qty = l.Qty,
//SerialNumbers=l.SerialNumbers
});
continue;
}
d.Qty = d.Qty + l.Qty;
//d.SerialNumbers.AddRange(l.SerialNumbers);
}
return Result.ReSuccess();
}
//移入
public Result TakeStock(string materialNumber, decimal qty)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == materialNumber);
if (d == null)
{
this.Details.Add(new BoxDetails()
{
MaterialNumber = materialNumber,
Qty = qty
});
}
return Result.ReSuccess();
}
///
/// 出入库回退上架
///
///
///
///
public Result BackRecordUp(string materialNumber, decimal qty)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == materialNumber);
if (d == null)
{
this.Details.Add(new BoxDetails()
{
MaterialNumber = materialNumber,
Qty = qty
});
}
else
d.Qty = d.Qty + qty;
return Result.ReSuccess();
}
///
/// 出入库回退下架
///
///
///
///
public Result BackRecordDown(string materialNumber, decimal qty)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == materialNumber);
if (d != null)
d.Qty = (d.Qty - qty) > 0 ? (d.Qty - qty) : 0;
return Result.ReSuccess();
}
///
/// 出库
///
///
///
///
public Result OutStock(string materialNumber, decimal qty)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == materialNumber);
if (d != null)
d.Qty = (d.Qty - qty) > 0 ? (d.Qty - qty) : 0;
return Result.ReSuccess();
}
///
/// 箱库存同步箱信息
///
///
///
public Result BoxInventory(BoxInventory inventory)
{
var detailClone = this.Details.Clone();
foreach (var d in detailClone)
{
//如果箱信息存在 箱库存不存在 删除箱信息数据
var inventoryDetail = inventory.Details.FirstOrDefault(f => f.MaterialNumber == d.MaterialNumber);
if (inventoryDetail == null)
{
var boxDetail = this.Details.FirstOrDefault(f => f.Id == d.Id);
this.Details.Remove(boxDetail);
}
}
//箱库存存在 箱信息不存在 添加
foreach (var d in inventory.Details)
{
var md = this.Details.FirstOrDefault(w => w.MaterialNumber == d.MaterialNumber);
if (md == null)
this.Details.Add(new BoxDetails() { MaterialNumber = d.MaterialNumber, Qty = d.Qty });
else
md.Qty = d.Qty;
}
return Result.ReSuccess();
}
}
}