public async Task <string> CreateInvTransfer(int?FromWhId, int?ToWhId, List <InvTransfer> InvTrans) { InvTransferHeader NewHeader = new InvTransferHeader { FromWhId = FromWhId, ToWhId = ToWhId, TransferStatus = SD.Approved, CreatedById = GetLoggedInUserId(), CreatedDateTime = DateTime.Now }; _db.InvTransferHeader.Add(NewHeader); await _db.SaveChangesAsync(); int ProdId; foreach (var InvTr in InvTrans) { ProdId = _db.ProdInfo.FirstOrDefault(pro => pro.ProdCode == InvTr.ProdInfo.ProdCode).Id; // Check if the warehouse has enough qty of that product bool CheckQty = CheckQtyInWh(ProdId, FromWhId ?? 0, InvTr.Qty); if (CheckQty == false) { _db.InvTransferHeader.Remove(NewHeader); await _db.SaveChangesAsync(); return("Error! لايوجد كمية كافية للمادة: " + InvTr.ProdInfo.ProdCode); } InvTransfer InvTransfer = new InvTransfer { HeaderId = NewHeader.Id, ProdId = ProdId, Qty = InvTr.Qty, Note = InvTr.Note }; //Decrease Qty of From Warehouse ChangeStockQty(ProdId, FromWhId ?? 0, InvTr.Qty, "Out"); // Increase Qty of To Warehouse ChangeStockQty(ProdId, ToWhId ?? 0, InvTr.Qty, "In"); _db.InvTransfer.Add(InvTransfer); // Create Inv Transaction with Negative Qty of From Warehouse CreateInvTransaction(ProdId, FromWhId ?? 0, InvTr.Qty * -1, SD.TransferOut); // Create Inv Transaction with Positive Qty of To Warehouse CreateInvTransaction(ProdId, ToWhId ?? 0, InvTr.Qty, SD.TransferIn); } await _db.SaveChangesAsync(); return("تمت عملية التحويل"); }
// This function is called when a Store User wants to transfer from a warehouse to another. So this function // Will create a request for the Admin to approve public async Task <string> CreateInvTransferRequest(int?FromWhId, int?ToWhId, string Note, List <InvTransfer> InvTrans, IHubContext <NotificationHub> hubContext) { // Create Transfer Header InvTransferHeader NewHeader = new InvTransferHeader { FromWhId = FromWhId, ToWhId = ToWhId, TransferStatus = SD.Pending, CreatedById = GetLoggedInUserId(), CreatedDateTime = DateTime.Now, Note = Note }; _db.InvTransferHeader.Add(NewHeader); await _db.SaveChangesAsync(); int ProdId; foreach (var InvTr in InvTrans) { ProdId = _db.ProdInfo.FirstOrDefault(pro => pro.ProdCode == InvTr.ProdInfo.ProdCode).Id; // Check if the warehouse has enough qty of that product bool CheckQty = CheckQtyInWh(ProdId, FromWhId ?? 0, InvTr.Qty); if (CheckQty == false) { _db.InvTransferHeader.Remove(NewHeader); await _db.SaveChangesAsync(); return("Error! لايوجد كمية كافية للمادة: " + InvTr.ProdInfo.ProdCode); } InvTransfer InvTransfer = new InvTransfer { HeaderId = NewHeader.Id, ProdId = ProdId, Qty = InvTr.Qty, Note = InvTr.Note }; _db.InvTransfer.Add(InvTransfer); } await _db.SaveChangesAsync(); await hubContext.Clients.All.SendAsync("NewTransferRequest", _db.Warehouse.Find(NewHeader.FromWhId).WhName, _db.Warehouse.Find(NewHeader.ToWhId).WhName, NewHeader.Id); return("تم ارسال طلب التحويل بنجاح"); //return "Request Added Successfully"; }