Esempio n. 1
0
        public async Task <CancelRequestImportProductResult> CancelRequestAsync(
            RequestImportProduct requestImportProduct)
        {
            /** Only cancel a request when its status is processing */
            if (requestImportProduct.Status != RequestImportProductStatus.Processing)
            {
                return(new CancelRequestImportProductResult
                {
                    IsSuccess = false,
                    Errors = new List <string>()
                    {
                        "Chỉ được phép huỷ yêu cầu nhập hàng đang trong quá trình xử lý (Processing)"
                    }
                });
            }

            requestImportProduct.Status = RequestImportProductStatus.Canceled;

            _context.RequestImportProducts
            .Update(requestImportProduct);
            var updated = await _context.SaveChangesAsync();

            return(new CancelRequestImportProductResult
            {
                IsSuccess = true
            });
        }
Esempio n. 2
0
        public async Task <bool> UpdateAsync(RequestImportProduct requestImportProduct)
        {
            _context.RequestImportProducts.Update(requestImportProduct);
            var updated = await _context.SaveChangesAsync();

            return(updated > 0);
        }
        public async Task ChangeStatusOfRequestImportProductToSucceededWhenImportEnough(
            ImportBill importBill,
            RequestImportProduct requestImportProduct
            )
        {
            bool isRequestImportProductDone = await IsImportProductEnough(
                importBill.RequestImportProductId,
                requestImportProduct.RequestImportDetails);

            if (isRequestImportProductDone)
            {
                requestImportProduct.Status = RequestImportProductStatus.Succeeded;
                _context.RequestImportProducts.Update(requestImportProduct);
                var requestImportProductUpdated = await _context.SaveChangesAsync();

                if (!(requestImportProductUpdated > 0))
                {
                    throw new Exception("Tạo hoá đơn nhập hàng bị lỗi, xin thử lại!");
                }
            }
        }
Esempio n. 4
0
        public async Task <CreateRequestImportProductResult> CreateAsync(
            IEnumerable <RequestImportDetail> requestImportDetails,
            int requestedUserId)
        {
            var admin = await _context.Admins
                        .SingleOrDefaultAsync(a => a.UserId == requestedUserId);

            RequestImportProduct requestImportProduct = new RequestImportProduct
            {
                CreatedBy = admin.Id,
                CreatedAt = DateTime.UtcNow,
                IsDeleted = false,
                Status    = RequestImportProductStatus.Processing
            };

            using (var transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    /** Create request import product */
                    await _context.RequestImportProducts
                    .AddAsync(requestImportProduct);

                    var requestImportProductCreated = await _context.SaveChangesAsync();

                    if (!(requestImportProductCreated > 0))
                    {
                        transaction.Dispose();
                    }

                    /** Create request import details */
                    // add created RequestImportProduct's Id to each request import detail
                    // set the QuantityLeft = the request Quantity because the request is new
                    requestImportDetails = requestImportDetails
                                           .Select(x =>
                    {
                        x.RequestImportProductId = requestImportProduct.Id;
                        x.QuantityLeft           = x.Quantity;

                        return(x);
                    })
                                           .ToList();

                    // make sure all product tier in request import detail are existed
                    bool areProductTiersInRequestValid = await CheckProductTiersInRequestDetailsAreExistedOrNot(
                        requestImportDetails);

                    if (!areProductTiersInRequestValid)
                    {
                        transaction.Dispose();
                        throw new Exception("Sản phẩm cần nhập hàng không tồn tại");
                    }

                    await _context.RequestImportDetails.AddRangeAsync(
                        requestImportDetails
                        );

                    var requestDetailsCreated = await _context.SaveChangesAsync();

                    if (!(requestDetailsCreated > 0))
                    {
                        transaction.Dispose();
                        throw new Exception(
                                  "Tạo yêu cầu nhập hàng không thành công, vui lòng thử lại"
                                  );
                    }

                    await transaction.CommitAsync();
                }
                catch (System.Exception e)
                {
                    return(new CreateRequestImportProductResult
                    {
                        IsSuccess = false,
                        Errors = new[] {
                            e.Message
                        }
                    });
                }
            }

            return(new CreateRequestImportProductResult
            {
                IsSuccess = true,
                RequestImportProduct = requestImportProduct
            });
        }