public async Task <GetGoodsReceivedNoteDto> CreateGoodsReceivedNoteAsync(CreateGoodsReceivedNoteDto goodsReceivedNoteDto)
        {
            //verify PO allowed to create GRN
            var order = await CheckPurchaseOrder(goodsReceivedNoteDto.PurchaseOrderId);

            CheckPurchaseOrderAllowedToCreateGRN(order);

            var currentUser       = Helper.GetCurrentUser(_userAccessor);
            var goodsReceivedNote = _mapper.Map <GoodsReceivedNote>(goodsReceivedNoteDto);

            goodsReceivedNote.CreatedBy      = currentUser.UserId;
            goodsReceivedNote.CreatedDate    = DateTime.Now;
            goodsReceivedNote.ApprovalStatus = Status.Pending;

            goodsReceivedNote = await _goodReceivedNote.AddGoodsReceivedNoteAsync(goodsReceivedNote);

            var items = await _purchaseOrderItem.GetPurchaseOrderItemsAsync(e => e.PurchaseOrderId == goodsReceivedNoteDto.PurchaseOrderId);

            foreach (var item in items)
            {
                var grnItem = new GoodsReceivedNoteItem
                {
                    GoodsReceivedNoteId = goodsReceivedNote.Id,
                    ItemId        = item.ItemId,
                    ItemUnitPrice = item.ItemUnitPrice,
                    Quantity      = item.Quantity
                };
                await _goodsReceivedNoteItem.AddGoodsReceivedNoteItemAsync(grnItem);
            }

            return(_mapper.Map <GetGoodsReceivedNoteDto>(goodsReceivedNote));
        }