Пример #1
0
        public async Task createImportBillFromServerAndUpdate(
            List <IngredientWithImportBill> listIngredientWithImportBill,
            Action <NetworkResponse> cbSuccessSent = null,
            Action <string> cbError = null
            )
        {
            Action <NetworkResponse> newCBSuccessSent = delegate(NetworkResponse networkResponse) {
                if (networkResponse.Successful)
                {
                    ImportBill ingreddientCreated = JsonConvert.DeserializeObject <ImportBill>(networkResponse.Data.ToString());
                    _importBillList[ingreddientCreated.ImportBillId] = ingreddientCreated;
                }
                cbSuccessSent?.Invoke(networkResponse);
            };
            var myObject = (dynamic) new JArray();

            foreach (IngredientWithImportBill ingredientWithImportBill in listIngredientWithImportBill)
            {
                myObject.Add(JObject.Parse(JsonConvert.SerializeObject(ingredientWithImportBill)));
            }
            await RequestManager.getInstance().postAsyncJson(
                API_CONTROLLER,
                myObject,
                newCBSuccessSent,
                cbError
                );
        }
Пример #2
0
        public bool InsertImportBill(ImportBill newImportBill)
        {
            try
            {
                WebShopEntities db         = new WebShopEntities();
                ImportBill      importBill = new ImportBill();
                importBill.agencyName = newImportBill.agencyName;
                importBill.address    = newImportBill.address;
                importBill.phone      = newImportBill.phone;
                importBill.total      = newImportBill.total;
                importBill.id         = (from c in db.ImportBills orderby c.id descending select c.id).First() + 1;
                if (importBill.id < 10)
                {
                    importBill.code = "IMT00" + importBill.id;
                }
                else if (importBill.id >= 10 && importBill.id < 100)
                {
                    importBill.code = "IMT0" + importBill.id;
                }
                else
                {
                    importBill.code = "IMT" + importBill.id;
                }

                db.ImportBills.Add(importBill);
                db.SaveChanges();
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Пример #3
0
        public JsonResult GetLastPayedPeriodByIdPayment(int id)
        {
            string lastPayedPeriod = string.Empty;

            try
            {
                ImportBill payment = _importRepository.Get(id);
                if (payment != null)
                {
                    if (!payment.EndDate.ToString(CultureInfo.InvariantCulture).Contains("0001"))
                    {
                        lastPayedPeriod = "Từ " + payment.StartDate.ToString("dd/MM/yyyy") + " đến " + payment.EndDate.ToString("dd/MM/yyyy");
                    }
                    else
                    {
                        lastPayedPeriod = payment.StartDate.ToString("dd/MM/yyyy");
                    }

                    if (payment.Payment == payment.TotalValue)
                    {
                        lastPayedPeriod += " => Đã trả đủ";
                    }
                }
                return(Json(new { lastPayedPeriod = lastPayedPeriod }));
            }
            catch (Exception)
            {
                return(Json(new { lastPayedPeriod = lastPayedPeriod }));
            }
        }
Пример #4
0
        public async Task <IActionResult> Pay(ImportBill importBill)
        {
            var getBill = await _importRepository.All.AsNoTracking().FirstOrDefaultAsync(p => p.IdImport == importBill.IdImport);

            if (getBill != null && importBill.Payment <= getBill.TienNo)
            {
                getBill.Payment += importBill.Payment;
                getBill.TienNo   = getBill.TotalValue - getBill.Payment;
                if (getBill.EndDate.ToString(CultureInfo.InvariantCulture).Contains("0001"))
                {
                    getBill.EndDate = DateTime.Now;
                }
                else
                {
                    getBill.StartDate = getBill.EndDate;
                    getBill.EndDate   = DateTime.Now;
                }
                _importRepository.UpdateAsync(getBill);
                await _importRepository.SaveAsync(RequestContext);

                return(Json(new
                {
                    isValid = true,
                    html = Helper
                           .RenderRazorViewToString(this, "_ViewListImports", await _importRepository.All.ToListAsync())
                }));
            }
            return(Json(new
            {
                isValid = false,
                html = Helper
                       .RenderRazorViewToString(this, "_ViewListImports", await _importRepository.All.ToListAsync())
            }));
        }
        public async Task <IActionResult> EditImportDetailExecute(ImportBill importBill)
        {
            ViewBag.Account = HttpContext.Session.GetString("UserName");
            await importBillDao.UpdateDetail(importBill);

            ViewBag.Serial = importBill.ImSerial;
            return(View("ImportBillDetail", await importBillDao.GetBillList(importBill.ImSerial)));
        }
        public ActionResult Update(ImportBill model, List <ImportBillDetailViewModel> modelDetail)
        {
            try
            {
                var importBill = _importBillService.GetByID(model.ID);
                var newBill    = new ImportBill();

                // Update ProductCount
                importBill.ImportBillDetails.ToList().ForEach(bd =>
                {
                    var product = _productService.GetByID(bd.ProductID);

                    product.Count -= bd.Count;
                });

                modelDetail = modelDetail.Where(ibd => ibd.ProductID != 0).ToList();
                modelDetail.ForEach(bd =>
                {
                    var product = _productService.GetByID(bd.ProductID);

                    product.Count += bd.Count;
                });

                _productService.SaveChanges();

                // Delete all ImportBillDetail
                _importBillDetailService.DeleteByImportBillID(importBill.ID);
                _importBillDetailService.SaveChanges();

                // Delete ImportBillOld and Create ImportBillNew
                newBill.CreatedBy   = importBill.CreatedBy;
                newBill.CreatedDate = importBill.CreatedDate;
                newBill.Status      = importBill.Status;
                newBill.UpdateBy    = GetMemberSession().DisplayName;
                newBill.UpdatedDate = DateTime.Now;

                _importBillService.Delete(importBill);
                _importBillService.Insert(newBill);
                _importBillService.SaveChanges();

                // Add ImportBillDetail
                modelDetail.ForEach(bd => bd.ImportBillID = newBill.ID);

                _importBillDetailService.Insert(AutoMapper.Mapper.Map <List <ImportBillDetail> >(modelDetail));
                _importBillDetailService.SaveChanges();

                return(RedirectToAction("Index", "ImportBill"));
            }
            catch (Exception e)
            {
            }

            ViewBag.Products    = AutoMapper.Mapper.Map <List <ProductViewModel> >(_productService.GetAll());
            ViewBag.modelDetail = modelDetail;

            return(View());
        }
Пример #7
0
        public bool Insert(ImportBill entity)
        {
            db.ImportBills.Add(entity);
            int isSave = db.SaveChanges();

            if (isSave > 0)
            {
                return(true);
            }

            return(false);
        }
        public List <ImportBill> GetListImportGoods(DateTime dateFrom, DateTime dateTo)
        {
            DataTable         data    = DataProvider.Instance.ExcuteQuery("EXEC ThongKePN @date1 , @date2 ", new object[] { dateFrom, dateTo });
            List <ImportBill> listImp = new List <ImportBill>();

            foreach (DataRow item in data.Rows)
            {
                ImportBill list = new ImportBill(item);
                listImp.Add(list);
            }
            return(listImp);
        }
        public List <ImportBill> GetFullListImportGoods(string text)
        {
            DataTable         data    = DataProvider.Instance.ExcuteQuery("EXEC GetImportBill @text", new object[] { text });
            List <ImportBill> listImp = new List <ImportBill>();

            foreach (DataRow item in data.Rows)
            {
                ImportBill list = new ImportBill(item);
                listImp.Add(list);
            }
            return(listImp);
        }
Пример #10
0
 public void reloadUI(ImportBill importBillRoot)
 {
     _importBill       = importBillRoot;
     TextBoxId.Text    = _importBill.ImportBillId.ToString();
     TextBoxTime.Text  = _importBill.CreatedDate.ToString();
     TextBoxTotal.Text = UtilFuction.formatMoney(_importBill.BillMoney);
     LVIngredient.Items.Clear();
     foreach (IngredientWithImportBill ingredient in _importBill.IngredientWithImportBills)
     {
         LVIngredient.Items.Add(new ImportIngredientCell(ingredient));
     }
 }
 public async Task <IActionResult> CreateImportDetail(ImportBill importBill)
 {
     try
     {
         ViewBag.Account = HttpContext.Session.GetString("UserName");
         await importBillDao.InsertDetail(importBill);
     }
     catch (Exception e)
     {
         ViewBag.Error = e.Message;
     }
     ViewBag.Serial = importBill.ImSerial;
     return(View("ImportBillDetail", await importBillDao.GetBillList(importBill.ImSerial)));
 }
Пример #12
0
        public ImportBill getID(long ID)
        {
            try
            {
                ImportBill entity = db.ImportBills.Find(ID);
                return(entity);
            }
            catch (Exception)
            {
                return(null);

                throw;
            }
        }
Пример #13
0
        private void btnEdit_Click_1(object sender, EventArgs e)
        {
            ImportBill entity = new ImportBill();

            entity.ID          = IDImBill;
            entity.Bill        = txtBillName.Text;
            entity.IDWareHouse = Convert.ToInt32(cbWH.SelectedValue);
            entity.Date        = dateTimePicker.Value;
            entity.Quantity    = Convert.ToInt32(txtQuantity.Text);
            entity.TotalPrice  = Convert.ToInt32(txtMoney.Text);
            FImportBill im        = new FImportBill();
            var         result    = im.Update(entity);
            var         listolder = (from dt in db.ProductDetails.Where(x => x.IDImBill == IDImBill).ToList()
                                     from pr in db.Products.Where(x => x.ID == dt.IDProduct).ToList()
                                     from com in db.Companies.Where(x => x.ID == pr.IDCompany).ToList()
                                     select new
            {
                IDProductDetail = dt.ID,
                ID = pr.ID,
                Product1 = pr.Product1,
                Quantity = dt.Quantity,
                OrdinaryPrice = pr.OrdinaryPrice
            }
                                     ).ToList();

            foreach (var item in lprodt)
            {
                var search = listolder.Find(x => x.ID == item.IDProduct);
                if (search == null)
                {
                    FProductDetail dt = new FProductDetail();

                    dt.Insert(item);
                }
                else
                {
                    item.ID = search.IDProductDetail;
                    FProductDetail dt = new FProductDetail();
                    dt.Update(item);
                }
            }
            if (result == true)
            {
                MessageBox.Show("Sửa phiếu nhập thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Пример #14
0
        public async Task <IActionResult> NhapHang(ImportBill model, IEnumerable <ImportBillDetail> lstModel)
        {
            HttpRequest cookie     = _services.GetRequiredService <IHttpContextAccessor>()?.HttpContext.Request;
            string      customerId = SecurityManager.getUserId(cookie.Cookies[SecurityManager._securityToken]);

            model.Amount        = 0;
            model.TotalValue    = 0;
            ViewBag.MaNCC       = _iSupplierRepository.All;
            ViewBag.ListSanPham = _iProductRepository.All;
            // Kiểm tra dữ liệu đầu vào bằng javascript hay bên metadata đều được
            // Phải ktra để khớp với kiểu dữ liệu của database
            await _importRepository.AddAsync(model);

            await _importRepository.SaveAsync(RequestContext);

            //Gán đã xóa = false
            // SaveChanges lần đầu để  sinh ra mã phiếu nhập gán cho lstChiTietPhieuNhap
            var importBillDetails = lstModel.ToList();

            foreach (var item in importBillDetails)
            {
                // Cập nhật số lượng tồn
                // vì sản phẩm trong lstModel chắc chắn có nên k tạo new SanPham
                var sp = _iProductRepository.All.ToList().Single(n => n.Id == item.IdProduct);
                sp.BasketCount += item.Amount.GetValueOrDefault();
                // Gán mã phiếu nhập cho từng chi tiết phiếu nhập
                item.IdImport = model.IdImport;
            }

            foreach (var item in importBillDetails)
            {
                await _importDetailRepository.AddAsync(item);
            }
            await _importDetailRepository.SaveAsync(RequestContext);

            model.RefreshTotalValue();
            model.StaffId = customerId;
            _importRepository.UpdateAsync(model);
            await _importRepository.SaveAsync(RequestContext);

            TempData["messages"] = "Nhập hàng thành công";
            return(RedirectToAction("Index"));
        }
Пример #15
0
 public bool DeleteImportBill(int id)
 {
     try
     {
         WebShopEntities db         = new WebShopEntities();
         ImportBill      importBill = db.ImportBills.FirstOrDefault(x => x.id == id);
         if (importBill == null)
         {
             return(false);
         }
         db.ImportBills.Remove(importBill);
         db.SaveChanges();
         return(true);
     }
     catch
     {
         return(false);
     }
 }
Пример #16
0
        public bool Update(ImportBill entity)
        {
            try
            {
                var Pro = db.ImportBills.Find(entity.ID);
                Pro.Bill        = entity.Bill;
                Pro.IDWareHouse = entity.IDWareHouse;
                Pro.TotalPrice  = entity.TotalPrice;
                Pro.Quantity    = entity.Quantity;
                Pro.Date        = entity.Date;
                db.SaveChanges();
            }
            catch (Exception)
            {
                return(false);

                throw;
            }
            return(true);
        }
Пример #17
0
 public async Task getImportBillByIdFromServerAndUpdate(
     int importBillId,
     Action <NetworkResponse> cbSuccessSent = null,
     Action <string> cbError = null
     )
 {
     Action <NetworkResponse> newCBSuccessSent = delegate(NetworkResponse networkResponse) {
         if (networkResponse.Successful)
         {
             ImportBill importBillFromSV = JsonConvert.DeserializeObject <ImportBill>(networkResponse.Data.ToString());
             _importBillList[importBillFromSV.ImportBillId] = importBillFromSV;
         }
         cbSuccessSent?.Invoke(networkResponse);
     };
     await RequestManager.getInstance().getAsync(
         API_CONTROLLER + "/" + importBillId,
         newCBSuccessSent,
         cbError
         );
 }
Пример #18
0
        /// <summary>
        /// 导入
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonX1_Click(object sender, EventArgs e)
        {
            if (dt.Rows.Count > 0)
            {
                int recCount = 0;

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    ImportBill bill = new ImportBill();
                    ///对应关系修改
                    bill.日期      = dt.Rows[i]["fdate"].ToString();
                    bill.单据编号    = dt.Rows[i]["fbillNo"].ToString();
                    bill.EntryID = dt.Rows[i]["fEntryID"].ToString();
                    bill.购货单位    = dt.Rows[i]["FSupplyIDName"].ToString();
                    bill.发货仓库    = "";
                    bill.产品名称    = dt.Rows[i]["FItemName"].ToString();
                    bill.规格型号    = "";
                    bill.实发数量    = GetQty(dt.Rows[i]["FCUUnitQty"].ToString());
                    bill.批号      = dt.Rows[i]["fBatchNo"].ToString();
                    bill.摘要      = "";
                    bill.fAuxQty = 0;

                    //去重复
                    sql = string.Format("SELECT COUNT(*) FROM [icstock] WHERE [单据编号] = '{0}' AND fEntryID = {1}", bill.单据编号, bill.EntryID);
                    object obj = SqlHelper.ExecuteScalar(sql);
                    if (obj != null && int.Parse(obj.ToString()) < 1)
                    {
                        sql = string.Format("INSERT INTO [icstock] ([日期],[单据编号],[FEntryID],[购货单位],[发货仓库] ,[产品名称] ,[规格型号] ,[实发数量] ,[批号] ,[摘要] ,[FActQty]) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}',{7},'{8}','{9}', {10})", bill.日期, bill.单据编号, bill.EntryID, bill.购货单位, bill.发货仓库, bill.产品名称, bill.规格型号, bill.实发数量, bill.批号, bill.摘要, bill.fAuxQty);
                        if (SqlHelper.ExecuteNonQuery(sql) > 0)
                        {
                            recCount++;
                        }
                    }
                    else
                    {
                        DesktopAlert.Show("数据无效或重复!");
                    }
                }
                DesktopAlert.Show("<h2>" + "共成功导入 " + recCount.ToString() + " 条记录!" + "</h2>");
            }
        }
        public ActionResult Add(List <ImportBillDetailViewModel> modelDetail)
        {
            try
            {
                var importBill = new ImportBill();
                importBill.CreatedBy   = GetMemberSession().DisplayName;
                importBill.CreatedDate = DateTime.Now;
                importBill.Status      = true;
                importBill.UpdateBy    = "";
                importBill.UpdatedDate = null;

                // Add ImportBill
                _importBillService.Insert(importBill);
                _importBillService.SaveChanges();

                // Add ImportBillDetail
                modelDetail.ForEach(bd => bd.ImportBillID = importBill.ID);

                _importBillDetailService.Insert(AutoMapper.Mapper.Map <List <ImportBillDetail> >(modelDetail));
                _importBillDetailService.SaveChanges();

                // Update ProductCount
                modelDetail.ForEach(bd =>
                {
                    var product = _productService.GetByID(bd.ProductID);

                    product.Count += bd.Count;
                });
                _productService.SaveChanges();

                return(RedirectToAction("Index", "ImportBill"));
            }
            catch (Exception)
            {
            }

            ViewBag.Products    = AutoMapper.Mapper.Map <List <ProductViewModel> >(_productService.GetAll());
            ViewBag.modelDetail = modelDetail;

            return(View());
        }
        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!");
                }
            }
        }
Пример #21
0
        public async Task <IActionResult> Create(
            [FromForm] CreateImportBillRequest createModel
            )
        {
            var        requestedUserId  = int.Parse(HttpContext.GetUserIdFromRequest());
            ImportBill importBillEntity = new ImportBill
            {
                RequestImportProductId = createModel.RequestImportProductId
            };
            var importBillDetails = _mapper
                                    .Map <IEnumerable <CreateImportBillDetailRequest>, IEnumerable <ImportBillDetail> >(
                createModel.ImportBillDetails);

            var result = await _importBillService.CreateAsync(
                importBillEntity,
                importBillDetails,
                requestedUserId,
                createModel.SupplierBillImage,
                createModel.StorageManagerBillImage,
                _appSettings.Value.ImportBillImageDir,
                _env.ContentRootPath
                );

            if (result.IsSuccess == false)
            {
                return(BadRequest(result.Errors));
            }

            var locationUri = _uriService.GetByIdUri(
                ApiRoutes.ImportBill.GetById.Replace(
                    "{importBillId}",
                    result.ImportBill.Id.ToString())
                );
            var importBillResponse = _mapper.Map <ImportBillResponse>(result.ImportBill);

            return(Created(locationUri,
                           new Response <ImportBillResponse>(importBillResponse)));
        }
        private async Task SaveImportBillDetailsInCreateImportBill(
            ImportBill importBill,
            IEnumerable <ImportBillDetail> importBillDetails)
        {
            importBillDetails = importBillDetails.Select(x =>
            {
                x.CreatedAt    = DateTime.UtcNow;
                x.UpdatedAt    = DateTime.UtcNow;
                x.IsDeleted    = false;
                x.ImportBillId = importBill.Id;

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

            await _context.ImportBillDetails.AddRangeAsync(importBillDetails);

            var importBillDetailsCreated = await _context.SaveChangesAsync();

            if (!(importBillDetailsCreated > 0))
            {
                throw new Exception("Tạo hoá đơn nhập hàng bị lỗi, xin thử lại!");
            }
        }
Пример #23
0
        private void btnAdd_Click(object sender, EventArgs e)
        {
            ImportBill entity = new ImportBill();

            entity.Bill        = txtBillName.Text;
            entity.IDWareHouse = Convert.ToInt32(cbWH.SelectedValue);
            entity.Date        = dateTimePicker.Value;
            entity.Quantity    = Convert.ToInt32(txtQuantity.Text);
            entity.TotalPrice  = Convert.ToInt32(txtMoney.Text);
            FImportBill im     = new FImportBill();
            var         result = im.Insert(entity);

            foreach (var item in lprodt)
            {
                item.IDImBill = entity.ID;
                FProductDetail dt = new FProductDetail();
                dt.Insert(item);
            }
            if (result == true)
            {
                MessageBox.Show("Thêm phiếu nhập thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Пример #24
0
 public bool UpdateImportBill(int id, ImportBill newImportBill)
 {
     try
     {
         WebShopEntities db         = new WebShopEntities();
         ImportBill      importBill = db.ImportBills.FirstOrDefault(x => x.id == id);
         if (importBill == null)
         {
             return(false);
         }
         importBill.agencyName = newImportBill.agencyName;
         importBill.code       = newImportBill.code;
         importBill.address    = newImportBill.address;
         importBill.phone      = newImportBill.phone;
         importBill.total      = newImportBill.total;
         db.SaveChanges();
         return(true);
     }
     catch
     {
         return(false);
     }
 }
        private async Task <ImportBill> PrepareImportBillInfo(
            ImportBill importBill,
            int requestedUserId,
            IEnumerable <ImportBillDetail> importBillDetails,
            string supplierBillImageLocation,
            string storageManagerBillImageLocation
            )
        {
            /** get storage manager to get id from him/her */
            var storageManager = await _context.StorageManagers
                                 .SingleOrDefaultAsync(sm => sm.UserId == requestedUserId);

            if (storageManager == null)
            {
                throw new Exception("Thủ kho không tồn tại");
            }

            /** Get storage to get Id - temporary handle for only one storage business */
            var storage = await _context.Storages
                          .FirstOrDefaultAsync();

            /** Prepare default data for import bill */
            importBill.Currency    = PriceCurrency.VND;
            importBill.TotalAmount = CalculateTotalAmountInImportBillDetails(importBillDetails);
            importBill.Code        = Regex.Replace(
                Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "");
            importBill.CreatedAt                       = DateTime.UtcNow;
            importBill.UpdatedAt                       = DateTime.UtcNow;
            importBill.IsDeleted                       = false;
            importBill.StorageId                       = storage.Id;
            importBill.StorageManagerId                = storageManager.Id;
            importBill.SupplierBillImageLocation       = supplierBillImageLocation;
            importBill.StorageManagerBillImageLocation = storageManagerBillImageLocation;

            return(importBill);
        }
Пример #26
0
 public void Delete(ImportBill entity)
 {
     _ImportBillRepository.Delete(entity);
 }
 public void reloadDetailTab(ImportBill importBill)
 {
     //((ImportDetailTab.ImportDetailTab)(TabDetail.Content)).reloadUI(importBill);
 }
        public async Task <CreateImportBillResult> CreateAsync(
            ImportBill importBill,
            IEnumerable <ImportBillDetail> importBillDetails,
            int requestedUserId,
            IFormFile supplierBillImage,
            IFormFile storageManagerBillImage,
            string importBillImageDir,
            string rootDir)
        {
            /** Handle upload image to get image links for new ImportBill*/
            var uploadSupplierBillImageResult = await _uploadImageService
                                                .UploadSingleImage(
                rootDir,
                importBillImageDir,
                supplierBillImage
                );

            var uploadStorageManagerBillImageResult = await _uploadImageService
                                                      .UploadSingleImage(
                rootDir,
                importBillImageDir,
                supplierBillImage
                );

            if (uploadStorageManagerBillImageResult.IsSuccess == false ||
                uploadStorageManagerBillImageResult.IsSuccess == false)
            {
                return(new CreateImportBillResult
                {
                    IsSuccess = false,
                    Errors = uploadSupplierBillImageResult.Errors.Count() > 0
                        ? uploadSupplierBillImageResult.Errors
                        : uploadStorageManagerBillImageResult.Errors
                });
            }

            try
            {
                importBill = await PrepareImportBillInfo(
                    importBill,
                    requestedUserId,
                    importBillDetails,
                    uploadSupplierBillImageResult.ImageLocation,
                    uploadStorageManagerBillImageResult.ImageLocation
                    );
            }
            catch (Exception e)
            {
                return(new CreateImportBillResult
                {
                    IsSuccess = false,
                    Errors = new List <string>()
                    {
                        e.Message.ToString()
                    }
                });
            }

            /** Get request import product and its details to use to validate later */
            var requestImportProduct = await _context.RequestImportProducts
                                       .Where(rip => rip.Id == importBill.RequestImportProductId &&
                                              rip.Status == RequestImportProductStatus.Processing &&
                                              rip.IsDeleted == false)
                                       .Include(rip => rip.RequestImportDetails)
                                       .FirstOrDefaultAsync();

            /** Validate valid RequestImportProduct of this ImportBill */
            if (requestImportProduct == null)
            {
                return(new CreateImportBillResult
                {
                    IsSuccess = false,
                    Errors = new List <string>()
                    {
                        "Không được phép tạo hoá đơn nhập cho yêu cầu nhập hàng này nữa!"
                    }
                });
            }

            /** Validate Import Bill Detail Products */
            var importBillDetailValidationResult = await CheckValidImportBillDetail(
                importBillDetails,
                requestImportProduct.RequestImportDetails,
                importBill.RequestImportProductId
                );

            if (importBillDetailValidationResult.IsSuccess == false)
            {
                return(new CreateImportBillResult
                {
                    IsSuccess = false,
                    Errors = importBillDetailValidationResult.Errors
                });
            }

            /** Save import bill and update related info */
            using (var transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    /** Save Import Bill */
                    await _context.ImportBills.AddAsync(importBill);

                    var importBillCreated = await _context.SaveChangesAsync();

                    if (!(importBillCreated > 0))
                    {
                        transaction.Dispose();
                        throw new Exception("Tạo hoá đơn nhập hàng bị lỗi, xin thử lại!");
                    }

                    /** Save Import Detail */
                    try
                    {
                        await SaveImportBillDetailsInCreateImportBill(
                            importBill,
                            importBillDetails
                            );
                    }
                    catch (Exception e)
                    {
                        transaction.Dispose();
                        throw new Exception(e.Message.ToString());
                    }

                    /** Change status of RequestImportProduct to done if import enough */
                    try
                    {
                        await ChangeStatusOfRequestImportProductToSucceededWhenImportEnough(
                            importBill,
                            requestImportProduct
                            );
                    }
                    catch (Exception e)
                    {
                        transaction.Dispose();
                        throw new Exception(e.Message.ToString());
                    }

                    /** Update quantity of imported product tiers  */
                    try
                    {
                        await UpdateImportedProductTiersAfterImport(
                            importBillDetails
                            );
                    }
                    catch (Exception e)
                    {
                        transaction.Dispose();
                        throw new Exception(e.Message.ToString());
                    }

                    /** Update entry price of imported product */
                    try
                    {
                        await UpdateProductEntryPriceBaseOnImportBillDetail(
                            importBillDetails
                            );
                    }
                    catch (Exception e)
                    {
                        transaction.Dispose();
                        throw new Exception(e.Message.ToString());
                    }

                    /** Update quantity left of request import details */
                    try
                    {
                        await UpdateQuantityLeftOfRequestImportDetail(
                            requestImportProduct.RequestImportDetails,
                            importBillDetails
                            );
                    }
                    catch (Exception e)
                    {
                        transaction.Dispose();
                        throw new Exception(e.Message.ToString());
                    }



                    await transaction.CommitAsync();
                }
                catch (Exception e)
                {
                    return(new CreateImportBillResult
                    {
                        IsSuccess = false,
                        Errors = new List <string>()
                        {
                            e.Message.ToString()
                        }
                    });
                }
            }

            /** Get the created import bill and full related information to display on FE */
            var createdImportBill = await GetByIdAsync(importBill.Id);

            return(new CreateImportBillResult
            {
                IsSuccess = true,
                ImportBill = createdImportBill
            });
        }
Пример #29
0
 public Task <int> UpdateDetail(ImportBill importBill)
 {
     context.ImportBill.Update(importBill);
     return(context.SaveChangesAsync());
 }
Пример #30
0
 public Task <int> InsertDetail(ImportBill importBill)
 {
     context.ImportBill.Add(importBill);
     return(context.SaveChangesAsync());
 }