|
|
@ -43,6 +43,72 @@ public class MaterialRequestManager |
|
|
|
return entity; |
|
|
|
} |
|
|
|
|
|
|
|
public virtual async Task UpdateDetailsAsync(MaterialRequest newEntity) |
|
|
|
{ |
|
|
|
var oldEntity = await Repository.FindAsync(newEntity.Id, true).ConfigureAwait(false); |
|
|
|
|
|
|
|
foreach (var newDetail in newEntity.Details) |
|
|
|
{ |
|
|
|
oldEntity.ReplaceDetail(newDetail.Id, newDetail); |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var detail in oldEntity.Details) |
|
|
|
{ |
|
|
|
SetMaterialRequestDetailStatus(detail); |
|
|
|
} |
|
|
|
|
|
|
|
await SetMaterialRequestStatus(oldEntity).ConfigureAwait(false); |
|
|
|
|
|
|
|
await Repository.UpdateAsync(oldEntity).ConfigureAwait(false); |
|
|
|
} |
|
|
|
|
|
|
|
private void SetMaterialRequestDetailStatus(MaterialRequestDetail detail) |
|
|
|
{ |
|
|
|
if (detail.ReceivedQty >= detail.Qty)//执行的时候 实际收料 多余 要料数
|
|
|
|
{ |
|
|
|
detail.Status = EnumStatus.Close; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
detail.Status = EnumStatus.Open; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private async Task SetMaterialRequestStatus(MaterialRequest materialRequest) |
|
|
|
{ |
|
|
|
if (!materialRequest.Details.All(p => p.Status == EnumStatus.Close)) |
|
|
|
{ |
|
|
|
var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false); |
|
|
|
if (issueJobs.Count > 0) |
|
|
|
{ |
|
|
|
if (issueJobs.All(t => t.JobStatus == EnumJobStatus.Done||t.JobStatus==EnumJobStatus.Closed||t.JobStatus==EnumJobStatus.Cancelled)) |
|
|
|
{ |
|
|
|
materialRequest.RequestStatus = EnumRequestStatus.Completed; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
materialRequest.RequestStatus = EnumRequestStatus.Partial; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
materialRequest.RequestStatus = EnumRequestStatus.Partial; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
materialRequest.RequestStatus = EnumRequestStatus.Completed; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public virtual async Task CompleteAsync(string number) |
|
|
|
{ |
|
|
|
var entity = await GetByNumberAsync(number).ConfigureAwait(false); |
|
|
|
if (entity != null && !entity.Details.Any(p => p.ToBeIssuedQty > 0)) |
|
|
|
{ |
|
|
|
await CompleteAsync(entity).ConfigureAwait(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#region 公有
|
|
|
|
|
|
|
@ -124,64 +190,6 @@ public class MaterialRequestManager |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
public virtual async Task UpdateDetailsAsync(MaterialRequest newEntity) |
|
|
|
{ |
|
|
|
var oldEntity = await Repository.FindAsync(newEntity.Id, true).ConfigureAwait(false); |
|
|
|
|
|
|
|
foreach (var newDetail in newEntity.Details) |
|
|
|
{ |
|
|
|
oldEntity.ReplaceDetail(newDetail.Id, newDetail); |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var detail in oldEntity.Details) |
|
|
|
{ |
|
|
|
SetMaterialRequestDetailStatus(detail); |
|
|
|
} |
|
|
|
|
|
|
|
await SetMaterialRequestStatus(oldEntity).ConfigureAwait(false); |
|
|
|
|
|
|
|
await Repository.UpdateAsync(oldEntity).ConfigureAwait(false); |
|
|
|
} |
|
|
|
|
|
|
|
private void SetMaterialRequestDetailStatus(MaterialRequestDetail detail) |
|
|
|
{ |
|
|
|
if (detail.Qty > detail.IssuedQty)//要100 实际只有50
|
|
|
|
{ |
|
|
|
if (detail.ReceivedQty >= detail.Qty)//执行的时候发的比100还多 就完成
|
|
|
|
{ |
|
|
|
detail.Status = EnumStatus.Close; |
|
|
|
} |
|
|
|
else//要100
|
|
|
|
{ |
|
|
|
detail.Status=EnumStatus.Open; |
|
|
|
} |
|
|
|
} |
|
|
|
else//要100 实际够100
|
|
|
|
{ |
|
|
|
detail.Status = EnumStatus.Close; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private async Task SetMaterialRequestStatus(MaterialRequest materialRequest) |
|
|
|
{ |
|
|
|
if (materialRequest.Details.All(p => p.Status == EnumStatus.Close)) |
|
|
|
{ |
|
|
|
var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false); |
|
|
|
if (issueJobs.All(t => t.JobStatus == EnumJobStatus.Done)) |
|
|
|
{ |
|
|
|
materialRequest.RequestStatus = EnumRequestStatus.Completed; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public virtual async Task CompleteAsync(string number) |
|
|
|
{ |
|
|
|
var entity = await GetByNumberAsync(number).ConfigureAwait(false); |
|
|
|
if (entity!=null &&!entity.Details.Any(p => p.ToBeIssuedQty > 0)) |
|
|
|
{ |
|
|
|
await CompleteAsync(entity).ConfigureAwait(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|