using AutoMapper; 
 | 
using System; 
 | 
using System.Collections.Generic; 
 | 
using System.Linq; 
 | 
using System.Text; 
 | 
using System.Threading.Tasks; 
 | 
using WIDESEA_Common.StockEnum; 
 | 
using WIDESEA_Core.BaseServices; 
 | 
using WIDESEA_Core.Enums; 
 | 
using WIDESEA_Core.Helper; 
 | 
using WIDESEA_IRecordRepository; 
 | 
using WIDESEA_IRecordService; 
 | 
using WIDESEA_Model.Models; 
 | 
  
 | 
namespace WIDESEA_RecordService 
 | 
{ 
 | 
    public partial class StockQuantityChangeRecordService : ServiceBase<Dt_StockQuantityChangeRecord, IStockQuantityChangeRecordRepository>, IStockQuantityChangeRecordService 
 | 
    { 
 | 
        public void AddStockChangeRecord(Dt_StockInfo stockInfo, List<Dt_StockInfoDetail> stockInfoDetails, float beforeQuantity, float totalQuantity, StockChangeTypeEnum changeType, int? taskNum = null) 
 | 
        { 
 | 
            try 
 | 
            { 
 | 
                List<Dt_StockQuantityChangeRecord> stockQuantityChangeRecords = new List<Dt_StockQuantityChangeRecord>(); 
 | 
                stockQuantityChangeRecords = _mapper.Map<List<Dt_StockQuantityChangeRecord>>(stockInfoDetails); 
 | 
                int index = 0; 
 | 
                float currentQuantity = 0; 
 | 
                stockQuantityChangeRecords.ForEach(x => 
 | 
                { 
 | 
                    x.PalleCode = stockInfo.PalletCode; 
 | 
                    x.BeforeQuantity = beforeQuantity; 
 | 
                    if (totalQuantity >= beforeQuantity) 
 | 
                    { 
 | 
                        x.ChangeQuantity = stockInfoDetails[index].StockQuantity; 
 | 
                        currentQuantity += stockInfoDetails[index].StockQuantity; 
 | 
                        x.AfterQuantity = stockInfoDetails[index].StockQuantity + beforeQuantity; 
 | 
                    } 
 | 
                    else 
 | 
                    { 
 | 
                        x.ChangeQuantity = -stockInfoDetails[index].StockQuantity; 
 | 
                        currentQuantity -= stockInfoDetails[index].StockQuantity; 
 | 
                        x.AfterQuantity = beforeQuantity - stockInfoDetails[index].StockQuantity; 
 | 
                    } 
 | 
  
 | 
                    x.ChangeType = changeType.ObjToInt(); 
 | 
                    beforeQuantity += x.ChangeQuantity; 
 | 
                    x.TaskNum = taskNum; 
 | 
                    index++; 
 | 
                }); 
 | 
                BaseDal.AddData(stockQuantityChangeRecords); 
 | 
            } 
 | 
            catch (Exception ex) 
 | 
            { 
 | 
                throw new Exception(ex.Message); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        public void AddStockChangeRecord(Dt_StockInfo stockInfo, List<Dt_StockInfoDetail> residueDetailList, List<Dt_StockInfoDetail> updateDetails, List<Dt_StockInfoDetail> deleteDetails, StockChangeTypeEnum changeType, int? taskNum = null) 
 | 
        { 
 | 
            try 
 | 
            { 
 | 
                List<Dt_StockQuantityChangeRecord> stockQuantityChangeRecords = new List<Dt_StockQuantityChangeRecord>(); 
 | 
  
 | 
                int index1 = 0; 
 | 
                List<Dt_StockQuantityChangeRecord> records1 = _mapper.Map<List<Dt_StockQuantityChangeRecord>>(updateDetails); 
 | 
                float beforeQuantity = updateDetails.Sum(x => x.OutboundQuantity + x.StockQuantity) + deleteDetails.Sum(x => x.StockQuantity) + residueDetailList.Sum(x => x.StockQuantity); 
 | 
  
 | 
                records1.ForEach(x => 
 | 
                { 
 | 
                    x.PalleCode = stockInfo.PalletCode; 
 | 
                    x.BeforeQuantity = beforeQuantity; 
 | 
                    x.ChangeQuantity = -updateDetails[index1].OutboundQuantity; 
 | 
                    x.AfterQuantity = beforeQuantity + x.ChangeQuantity; 
 | 
                    beforeQuantity -= updateDetails[index1].OutboundQuantity; 
 | 
                    index1++; 
 | 
                }); 
 | 
                stockQuantityChangeRecords.AddRange(records1); 
 | 
                int index2 = 0; 
 | 
                List<Dt_StockQuantityChangeRecord> records2 = _mapper.Map<List<Dt_StockQuantityChangeRecord>>(deleteDetails); 
 | 
                records2.ForEach(x => 
 | 
                { 
 | 
                    x.PalleCode = stockInfo.PalletCode; 
 | 
                    x.BeforeQuantity = beforeQuantity; 
 | 
                    x.ChangeQuantity = -deleteDetails[index2].StockQuantity; 
 | 
                    x.AfterQuantity = beforeQuantity + x.ChangeQuantity; 
 | 
                    beforeQuantity -= deleteDetails[index2].StockQuantity; 
 | 
                    index2++; 
 | 
                }); 
 | 
                stockQuantityChangeRecords.AddRange(records2); 
 | 
  
 | 
                BaseDal.AddData(stockQuantityChangeRecords); 
 | 
            } 
 | 
            catch (Exception ex) 
 | 
            { 
 | 
                throw new Exception(ex.Message); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
} 
 |