public async Task <ActionResult> CreateCreditMemo(CreateCreditMemoDto dto)
        {
            await _creditMemoAppService.CreateAsync(dto);

            if (dto.CreditMemoMode == "Good")
            {
                foreach (var items in dto.CreditMemoDetails)
                {
                    var check = await _stockService.CheckIfExist(items.ProductId);

                    if (check != null)
                    {
                        check.TotalPieces += items.TotalPieces;
                        check.Amount      += items.Amount;
                        await _stockService.UpdateAsync(check);
                    }
                }
            }
            else
            {
                foreach (var items in dto.CreditMemoDetails)
                {
                    var check = await _badStockService.CheckIfExist(items.ProductId);

                    if (check != null)
                    {
                        check.TotalPieces += items.TotalPieces;
                        check.Amount      += items.Amount;
                        await _badStockService.UpdateAsync(check);
                    }
                    else
                    {
                        var stocks = new BadStockDto
                        {
                            ProductId     = items.ProductId,
                            TotalPieces   = items.TotalPieces,
                            PricePerPiece = items.PricePerPiece,
                            Amount        = items.Amount
                        };

                        await _badStockService.CreateAsync(stocks);
                    }
                }
            }
            return(Ok(dto));
        }
        public async Task <ActionResult> EditCreditMemo(CreditMemoHeaderDto dto)
        {
            if (dto.CreditMemoMode == "Good")
            {
                foreach (var dtoItem in dto.CreditMemoDetails)
                {
                    var check = await _stockService.CheckIfExist(dtoItem.ProductId);

                    var old = await _creditMemoDetailsAppService.GetDetailsAsync(dtoItem.Id);

                    if (old != null)
                    {
                        if (dtoItem.TotalPieces > old.TotalPieces)
                        {
                            var change  = dtoItem.TotalPieces - old.TotalPieces;
                            var tAmount = dtoItem.PricePerPiece * change;
                            check.TotalPieces += change;
                            check.Amount      += tAmount;

                            await _stockService.UpdateAsync(check);
                        }
                        else if (dtoItem.TotalPieces < old.TotalPieces)
                        {
                            var change  = old.TotalPieces - dtoItem.TotalPieces;
                            var tAmount = dtoItem.PricePerPiece * change;
                            check.TotalPieces -= change;
                            check.Amount      -= tAmount;

                            await _stockService.UpdateAsync(check);
                        }
                    }
                    else
                    {
                        check.TotalPieces += dtoItem.TotalPieces;
                        check.Amount      += dtoItem.Amount;

                        await _stockService.UpdateAsync(check);
                    }
                }
                var updateme = await _creditMemoAppService.UpdateAsync(dto);

                foreach (var items in dto.CreditMemoDetails)
                {
                    var getCheck = await _creditMemoDetailsAppService.GetAsync(new EntityDto <int>(items.Id));

                    if (getCheck == null)
                    {
                        var toCreate = new CreditMemoDetailDto
                        {
                            CreditMemoHeaderId = dto.CreditMemoId,
                            ProductId          = items.ProductId,
                            Case              = items.Case,
                            ProdCase          = items.ProdCase,
                            Box               = items.Box,
                            ProdPiece         = items.ProdPiece,
                            Piece             = items.Piece,
                            Gross             = items.Gross,
                            Discount          = items.Discount,
                            Net               = items.Net,
                            TotalProductPrice = items.TotalProductPrice,
                        };
                        await _creditMemoDetailsAppService.CreateAsync(toCreate);
                    }
                    else if (getCheck != null)
                    {
                        var toUpdate = new CreditMemoDetailDto
                        {
                            Id                 = items.Id,
                            CreationTime       = items.CreationTime,
                            CreatorUserId      = items.CreatorUserId,
                            TenantId           = items.TenantId,
                            CreditMemoHeaderId = items.CreditMemoHeaderId,
                            ProductId          = items.ProductId,
                            Case               = items.Case,
                            ProdCase           = items.ProdCase,
                            Box                = items.Box,
                            ProdPiece          = items.ProdPiece,
                            Piece              = items.Piece,
                            Gross              = items.Gross,
                            Discount           = items.Discount,
                            Net                = items.Net,
                            TotalProductPrice  = items.TotalProductPrice,
                        };
                        await _creditMemoDetailsAppService.UpdateAsync(toUpdate);
                    }
                }
            }
            else if (dto.CreditMemoMode == "Bad")
            {
                foreach (var dtoItem in dto.CreditMemoDetails)
                {
                    var check = await _badStockService.CheckIfExist(dtoItem.ProductId);

                    var old = await _creditMemoDetailsAppService.GetDetailsAsync(dtoItem.Id);

                    if (old != null)
                    {
                        if (dtoItem.TotalPieces > old.TotalPieces)
                        {
                            var change  = dtoItem.TotalPieces - old.TotalPieces;
                            var tAmount = dtoItem.PricePerPiece * change;
                            check.TotalPieces += change;
                            check.Amount      += tAmount;

                            await _badStockService.UpdateAsync(check);
                        }
                        else if (dtoItem.TotalPieces < old.TotalPieces)
                        {
                            var change  = old.TotalPieces - dtoItem.TotalPieces;
                            var tAmount = dtoItem.PricePerPiece * change;
                            check.TotalPieces -= change;
                            check.Amount      -= tAmount;

                            await _badStockService.UpdateAsync(check);
                        }
                    }
                    else
                    {
                        if (check != null)
                        {
                            check.TotalPieces += dtoItem.TotalPieces;
                            check.Amount      += dtoItem.Amount;

                            await _badStockService.UpdateAsync(check);
                        }
                        else
                        {
                            var stocks = new BadStockDto
                            {
                                ProductId     = dtoItem.ProductId,
                                TotalPieces   = dtoItem.TotalPieces,
                                PricePerPiece = dtoItem.PricePerPiece,
                                Amount        = dtoItem.Amount
                            };

                            await _badStockService.CreateAsync(stocks);
                        }
                    }
                }
                var updated = await _creditMemoAppService.UpdateAsync(dto);

                foreach (var items in dto.CreditMemoDetails)
                {
                    var getCheck = await _creditMemoDetailsAppService.GetAsync(new EntityDto <int>(items.Id));

                    if (getCheck == null)
                    {
                        var toCreate = new CreditMemoDetailDto
                        {
                            CreditMemoHeaderId = dto.CreditMemoId,
                            ProductId          = items.ProductId,
                            Case              = items.Case,
                            ProdCase          = items.ProdCase,
                            Box               = items.Box,
                            ProdPiece         = items.ProdPiece,
                            Piece             = items.Piece,
                            Gross             = items.Gross,
                            Discount          = items.Discount,
                            Net               = items.Net,
                            TotalProductPrice = items.TotalProductPrice,
                        };
                        await _creditMemoDetailsAppService.CreateAsync(toCreate);
                    }
                    else if (getCheck != null)
                    {
                        var toUpdate = new CreditMemoDetailDto
                        {
                            Id                 = items.Id,
                            CreationTime       = items.CreationTime,
                            CreatorUserId      = items.CreatorUserId,
                            TenantId           = items.TenantId,
                            CreditMemoHeaderId = items.CreditMemoHeaderId,
                            ProductId          = items.ProductId,
                            Case               = items.Case,
                            ProdCase           = items.ProdCase,
                            Box                = items.Box,
                            ProdPiece          = items.ProdPiece,
                            Piece              = items.Piece,
                            Gross              = items.Gross,
                            Discount           = items.Discount,
                            Net                = items.Net,
                            TotalProductPrice  = items.TotalProductPrice,
                        };
                        await _creditMemoDetailsAppService.UpdateAsync(toUpdate);
                    }
                }
            }

            return(Ok(dto));
        }