|  |  |  | 
|---|
|  |  |  | using System.Linq; | 
|---|
|  |  |  | using System.Text; | 
|---|
|  |  |  | using System.Threading.Tasks; | 
|---|
|  |  |  | using WIDESEA_BasicRepository; | 
|---|
|  |  |  | using WIDESEA_Common.OrderEnum; | 
|---|
|  |  |  | using WIDESEA_Core; | 
|---|
|  |  |  | using WIDESEA_Core.BaseRepository; | 
|---|
|  |  |  | 
|---|
|  |  |  | using WIDESEA_Core.Enums; | 
|---|
|  |  |  | using WIDESEA_Core.Helper; | 
|---|
|  |  |  | using WIDESEA_DTO; | 
|---|
|  |  |  | using WIDESEA_DTO.Basic; | 
|---|
|  |  |  | using WIDESEA_IBasicRepository; | 
|---|
|  |  |  | using WIDESEA_IInboundRepository; | 
|---|
|  |  |  | using WIDESEA_IInboundService; | 
|---|
|  |  |  | using WIDESEA_InboundRepository; | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | private readonly IUnitOfWorkManage _unitOfWorkManage; | 
|---|
|  |  |  | private readonly IPurchaseOrderDetailRepository _purchaseOrderDetailRepository; | 
|---|
|  |  |  | private readonly IBasicRepository _basicRepository; | 
|---|
|  |  |  | private readonly ISupplierInfoRepository _supplierInfoRepository; | 
|---|
|  |  |  | private readonly IMaterielInfoRepository _materielInfoRepository; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public PurchaseOrderService(IPurchaseOrderRepository BaseDal, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) | 
|---|
|  |  |  | public PurchaseOrderService(IPurchaseOrderRepository BaseDal, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, ISupplierInfoRepository supplierInfoRepository, IMaterielInfoRepository materielInfoRepository) : base(BaseDal) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | _purchaseOrderDetailRepository = purchaseOrderDetailRepository; | 
|---|
|  |  |  | _unitOfWorkManage = unitOfWorkManage; | 
|---|
|  |  |  | _basicRepository = basicRepository; | 
|---|
|  |  |  | _supplierInfoRepository = supplierInfoRepository; | 
|---|
|  |  |  | _materielInfoRepository = materielInfoRepository; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public WebResponseContent ReceivePurchaseOrderSingle(PurchaseOrderModel model) | 
|---|
|  |  |  | public WebResponseContent GetPurchaseOrderInfo(string purchaseOrderNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_PurchaseOrder purchaseOrder = BaseDal.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == purchaseOrderNo).Includes(x => x.Details).First(); | 
|---|
|  |  |  | List<string> MaterielCodes = purchaseOrder.Details.Where(x => x.PurchaseDetailStatus != PurchaseOrderDetailStatusEnum.Received.ObjToInt()).Select(x => x.MaterielCode).ToList(); | 
|---|
|  |  |  | return WebResponseContent.Instance.OK(data: MaterielCodes); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public WebResponseContent ReceivePurchaseOrder(PurchaseOrderModel model) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"éè´åå·éå¤"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (_supplierInfoRepository.QueryFirst(x => x.SupplierCode == model.SCode) == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°ä¾åºåç¼ç ã{model.SCode}ãçä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(); | 
|---|
|  |  |  | List<Dt_MaterielInfo> materielInfos = _materielInfoRepository.QueryData(); | 
|---|
|  |  |  | List<Dt_PurchaseOrderDetail> purchaseOrderDetails = new List<Dt_PurchaseOrderDetail>(); | 
|---|
|  |  |  | foreach (var item in model.MList) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_Warehouse? warehouse = warehouses.FirstOrDefault(x => x.WarehouseCode == item.WaId); | 
|---|
|  |  |  | if (warehouse == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°ä»åºä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MCode); | 
|---|
|  |  |  | if (materielInfo == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°ç©æç¼ç ã{item.MCode}ãçä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_PurchaseOrderDetail purchaseOrderDetail = new Dt_PurchaseOrderDetail() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | MaterielCode = item.MCode, | 
|---|
|  |  |  | MaterielName = materielInfo.MaterielName, | 
|---|
|  |  |  | MaterielSpec = materielInfo.MaterielSpec, | 
|---|
|  |  |  | PurchaseDetailQuantity = item.Qty, | 
|---|
|  |  |  | PurchaseDetailReceiveQty = 0, | 
|---|
|  |  |  | PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt(), | 
|---|
|  |  |  | Unit = item.Unit, | 
|---|
|  |  |  | WarehouseId = item.WaId, | 
|---|
|  |  |  | WarehouseId = warehouse.WarehouseId, | 
|---|
|  |  |  | RowNo = item.RowId, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | purchaseOrderDetails.Add(purchaseOrderDetail); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo); | 
|---|
|  |  |  | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.OrderNo).Includes(x => x.Details).First(); | 
|---|
|  |  |  | if (purchaseOrder == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åä¿¡æ¯"); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åæç»ä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (_supplierInfoRepository.QueryFirst(x => x.SupplierCode == model.SCode) == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°ä¾åºåç¼ç ã{model.SCode}ãçä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(); | 
|---|
|  |  |  | List<Dt_MaterielInfo> materielInfos = _materielInfoRepository.QueryData(); | 
|---|
|  |  |  | List<Dt_PurchaseOrderDetail> purchaseOrderDetails = new List<Dt_PurchaseOrderDetail>(); | 
|---|
|  |  |  | List<Dt_PurchaseOrderDetail> updatePurchaseOrderDetails = new List<Dt_PurchaseOrderDetail>(); | 
|---|
|  |  |  | List<int> detailIds = new List<int>(); | 
|---|
|  |  |  | foreach (var item in model.MList) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_Warehouse? warehouse = warehouses.FirstOrDefault(x => x.WarehouseCode == item.WaId); | 
|---|
|  |  |  | if (warehouse == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°ä»åºä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MCode); | 
|---|
|  |  |  | if (materielInfo == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°ç©æç¼ç ã{item.MCode}ãçä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.FirstOrDefault(x => x.RowNo == item.RowId); | 
|---|
|  |  |  | if (purchaseOrderDetail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | MaterielCode = item.MCode, | 
|---|
|  |  |  | PurchaseDetailQuantity = item.Qty, | 
|---|
|  |  |  | PurchaseDetailReceiveQty = 0, | 
|---|
|  |  |  | PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt(), | 
|---|
|  |  |  | Unit = item.Unit, | 
|---|
|  |  |  | WarehouseId = item.WaId, | 
|---|
|  |  |  | WarehouseId = warehouse.WarehouseId, | 
|---|
|  |  |  | RowNo = item.RowId, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | purchaseOrderDetails.Add(purchaseOrderDetail); | 
|---|
|  |  |  | 
|---|
|  |  |  | purchaseOrderDetail.PurchaseDetailQuantity = item.Qty; | 
|---|
|  |  |  | purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt(); | 
|---|
|  |  |  | purchaseOrderDetail.Unit = item.Unit; | 
|---|
|  |  |  | purchaseOrderDetail.WarehouseId = item.WaId; | 
|---|
|  |  |  | purchaseOrderDetail.WarehouseId = warehouse.WarehouseId; | 
|---|
|  |  |  | purchaseOrderDetail.RowNo = item.RowId; | 
|---|
|  |  |  | updatePurchaseOrderDetails.Add(purchaseOrderDetail); | 
|---|
|  |  |  | detailIds.Add(purchaseOrderDetail.Id); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo); | 
|---|
|  |  |  | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.OrderNo).Includes(x => x.Details).First(); | 
|---|
|  |  |  | if (purchaseOrder == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åä¿¡æ¯"); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo); | 
|---|
|  |  |  | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x=>x.PurchaseOrderNo== model.OrderNo).Includes(x=>x.Details).First(); | 
|---|
|  |  |  | if (purchaseOrder == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åä¿¡æ¯"); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åæç»ä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Closed.ObjToInt(); | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | BaseDal.DeleteAndMoveIntoHty(purchaseOrder, OperateTypeEnum.å
³é); | 
|---|
|  |  |  | BaseDal.UpdateData(purchaseOrder); | 
|---|
|  |  |  | //BaseDal.DeleteAndMoveIntoHty(purchaseOrder, OperateTypeEnum.å
³é); | 
|---|
|  |  |  | foreach (var item in purchaseOrder.Details) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | _purchaseOrderDetailRepository.DeleteAndMoveIntoHty(item, OperateTypeEnum.å
³é); | 
|---|
|  |  |  | item.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Closed.ObjToInt(); | 
|---|
|  |  |  | //_purchaseOrderDetailRepository.DeleteAndMoveIntoHty(item, OperateTypeEnum.å
³é); | 
|---|
|  |  |  | _purchaseOrderDetailRepository.UpdateData(item); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | return WebResponseContent.Instance.OK(); | 
|---|