Example #1
0
        public IActionResult AddPurchasingRefundOrder(PurchasingRefundOrderModel refundOrder)
        {
            //权限
            if (!_permissionService.Authorize("RefundPurchasingOrder"))
            {
                return(Error("没有此权限!"));
            }
            try
            {
                var purchasing = new Purchasing();
                purchasing.PurchasingNumber      = _commonService.GetOrderSerialNumber("RF");
                purchasing.OrgionSerialNumber    = refundOrder.PurchasingOriginalNumber;
                purchasing.PurchasingOrderNumber = refundOrder.PurchasingPlanSerialNumber;
                purchasing.SupplierId            = refundOrder.SupplierId;
                purchasing.WareHouseId           = refundOrder.WareHouseId;
                purchasing.Mark  = refundOrder.Mark;
                purchasing.State = PurchasingState.InitialStatus;
                _purchasingService.AddPurchasing(purchasing);

                //日志
                #region 新增采购退单
                var mark = "新增采购退单:[" + purchasing.PurchasingNumber + "]";
                _logService.InsertOrderTableLog("Purchasing", purchasing.Id, "新增采购退单", Convert.ToInt32(purchasing.State), mark);
                #endregion

                return(Json(new { isSucc = true, msg = "成功", id = purchasing.Id }));
            }
            catch (Exception ex)
            {
                return(Json(new { isSucc = false, msg = "失败,原因:" + ex.Message }));
            }
        }
 public void Reject(PurchasingViewModel purchasing, int userID)
 {
     using (var trans = _unitOfWork.BeginTransaction())
     {
         try
         {
             List <PurchasingDetail> listPurchasingDetail = _purchasingDetailRepository
                                                            .GetMany(c => c.PurchasingId == purchasing.Id).ToList();
             foreach (var purchasingDetail in listPurchasingDetail)
             {
                 purchasingDetail.Status       = (int)DbConstant.PurchasingStatus.Deleted;
                 purchasingDetail.ModifyUserId = userID;
                 purchasingDetail.ModifyDate   = DateTime.Now;
                 _purchasingDetailRepository.Update(purchasingDetail);
             }
             Purchasing entity = _purchasingRepository.GetById(purchasing.Id);
             entity.Status       = (int)DbConstant.PurchasingStatus.Deleted;
             entity.ModifyUserId = userID;
             entity.ModifyDate   = DateTime.Now;
             _purchasingRepository.Update(entity);
             _unitOfWork.SaveChanges();
             trans.Commit();
         }
         catch (Exception ex)
         {
             trans.Rollback();
             throw;
         }
     }
 }
Example #3
0
        /// <summary>
        /// 上传采购退单到WMS
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public string UploadPurchasingRefundOrder(int id)
        {
            Purchasing purcOrder = _omsAccessor.Get <Purchasing>().Where(r => r.Isvalid && r.Id == id).FirstOrDefault();

            if (purcOrder == null)
            {
                return((new { isSucc = false, msg = "发生错误,该采购订单信息有误!" }).ToString());
            }

            var post = new PurchasingRefundOrderModelToWMS
            {
                Id = purcOrder.Id,
                PurchasingNumber      = purcOrder.PurchasingNumber,
                PurchasingOrderNumber = purcOrder.PurchasingOrderNumber,
                OrgionSerialNumber    = purcOrder.OrgionSerialNumber,
                Mark               = purcOrder.Mark,
                SupplierName       = _omsAccessor.GetById <Supplier>(purcOrder.SupplierId) == null ? "" : _omsAccessor.GetById <Supplier>(purcOrder.SupplierId).SupplierName,
                WareHouseCode      = _omsAccessor.GetById <WareHouse>(purcOrder.WareHouseId) == null ? "" : _omsAccessor.GetById <WareHouse>(purcOrder.WareHouseId).Code,
                PurchasingProducts = _omsAccessor.Get <PurchasingProducts>().Where(r => r.Isvalid && r.PurchasingId == purcOrder.Id).Select(p => new PurchasingProductModelToWMS {
                    ProductId = p.ProductId, Quantity = p.Quantity
                }).ToList(),
            };

            //处理SSL问题
            var httpClientHandler = new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true
            };

            using (var http = new HttpClient(httpClientHandler))
            {
                string jsonStr    = post.ToJson();
                var    content    = new StringContent(jsonStr, Encoding.UTF8, "application/json");
                var    requestUrl = AppConfigurtaionServices.Configuration["WMSApi:domain"] + "/wmsapi/PurchasingOrderSync/UploadPurchasingRefundOrder";
                #region JWTBearer授权信息
                _workContext.CurrentHttpContext.Request.Cookies.TryGetValue("wms_token", out string token);
                if (string.IsNullOrEmpty(token))
                {
                    token = GetWMSOauthToken().Result;
                }
                http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
                #endregion
                var response = http.PostAsync(requestUrl, content).Result;
                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    var result = response.Content.ReadAsStringAsync();
                    return(result.Result.ToString());
                }
                else if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized)
                {
                    _logService.Error("采购退单上传方法失败,原因是API授权失败!请重试。");
                    return((new { isSucc = false, isOut = false, msg = "采购退单取消上传方法失败,原因是API授权失败!请重试。" }).ToString());
                }
                else
                {
                    _logService.Error(string.Format("采购退单取消上传方法失败,状态码:{0},RequestMessage:{1}", response.StatusCode, response.RequestMessage));
                    return((new { isSucc = false, isOut = false, msg = string.Format("采购退单取消上传方法失败,状态码:{0},RequestMessage:{1}", response.StatusCode, response.RequestMessage) }).ToString());
                }
            }
        }
Example #4
0
        public bool delete(int id)
        {
            try
            {
                var Purchasing = context.Purchasings.Find(id);

                bool quantityCheck = util.checkingQuantitySingleProduct(Purchasing.modelId, Purchasing.Quantity, Purchasing.store_id);
                if (quantityCheck == false)
                {
                    return(false);
                }
                bool res = util.updateSingleQuantity(Purchasing.modelId, Purchasing.Quantity, Purchasing.store_id, "Subtract");
                if (res == false)
                {
                    return(false);
                }
                Purchasing c = new Purchasing()
                {
                    purchase_id = id
                };

                context.Entry(c).State = Microsoft.EntityFrameworkCore.EntityState.Deleted;
                context.SaveChanges();
                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
Example #5
0
        public PurchasingViewModel GetLatestPurchasingInfo(int purchasingID)
        {
            Purchasing purchasing = _purchasingRepository
                                    .GetById(purchasingID);
            PurchasingViewModel mappedResult = new PurchasingViewModel();

            return(Map(purchasing, mappedResult));
        }
Example #6
0
 public Purchasing AddPurchasing(Purchasing purchasing)
 {
     purchasing.CreatedBy   = _workContext.CurrentUser.Id;
     purchasing.CreatedTime = DateTime.Now;
     _omsAccessor.Insert <Purchasing>(purchasing);
     _omsAccessor.SaveChanges();
     return(purchasing);
 }
Example #7
0
        public PurchasingViewModel GetSelectedPurchasingByTransaction(int purchasingID)
        {
            Purchasing purchasing = _purchasingRepository
                                    .GetById(purchasingID);
            PurchasingViewModel mappedResult = new PurchasingViewModel();

            return(Map(purchasing, mappedResult));
        }
Example #8
0
        public ActionResult DeleteConfirmed(string id)
        {
            Purchasing purchasing = db.Purchasings.Find(id);

            db.Purchasings.Remove(purchasing);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Example #9
0
 public void NeutralizePurchasing(ref Purchasing purchasing, Transaction oldTransaction)
 {
     purchasing.TotalHasPaid -= oldTransaction.TotalPayment.AsDecimal();
     if (purchasing.TotalHasPaid != purchasing.TotalPrice)
     {
         purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.NotSettled;
     }
 }
Example #10
0
    /// <summary>
    /// Get the product info.!-- (Name, description, Price)
    /// </summary>
    /// <param name="productID">the product ID</param>
    public void GetProductDetail(string productID)
    {
        string requestId = DateTime.Now.ToString("yyyyMMddhhmmssfff");

        ProductDetailsRequest request = new ProductDetailsRequestBuild()
                                        .Info(requestId, productID)
                                        .Build();

        Purchasing.GetProductDetail(request, new ProductDetailImpl());
    }
Example #11
0
    public void GetPurchaseInfo(string productID)
    {
        PurchaseInfoRequest request = new PurchaseInfoRequestBuild()
                                      .RsaSign(key)
                                      .Build();



        Purchasing.GetPurchaseInfo(request, new PurchaseImpl());
    }
        public void InsertPurchasingMethod(PurchasingViewModel purchasing, List <PurchasingDetailViewModel> purchasingDetails, int userID)
        {
            DateTime serverTime = DateTime.Now;

            purchasing.CreateDate      = serverTime;
            purchasing.CreateUserId    = userID;
            purchasing.ModifyUserId    = userID;
            purchasing.ModifyDate      = serverTime;
            purchasing.Status          = (int)DbConstant.PurchasingStatus.NotVerified;
            purchasing.PaymentMethodId = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UTANG).FirstOrDefault().Id;
            purchasing.TotalHasPaid    = 0;

            string code = "PRC" + "-" + serverTime.Month.ToString() + serverTime.Day.ToString() + "-";
            //get total purchasing created today
            List <Purchasing> todayPCR = _purchasingRepository.GetMany(s => s.Code.ToString().Contains(code) && s.CreateDate.Year == serverTime.Year).ToList();

            code            = code + (todayPCR.Count + 1);
            purchasing.Code = code;

            Purchasing entity = new Purchasing();

            Map(purchasing, entity);

            _purchasingRepository.AttachNavigation(entity.CreateUser);
            _purchasingRepository.AttachNavigation(entity.ModifyUser);
            _purchasingRepository.AttachNavigation(entity.PaymentMethod);
            _purchasingRepository.AttachNavigation(entity.Supplier);
            Purchasing purchasingInserted = _purchasingRepository.Add(entity);

            _unitOfWork.SaveChanges();

            foreach (var itemPurchasingDetail in purchasingDetails)
            {
                PurchasingDetail newPurchasingDetail = new PurchasingDetail();
                newPurchasingDetail.CreateDate   = serverTime;
                newPurchasingDetail.CreateUserId = userID;
                newPurchasingDetail.ModifyUserId = userID;
                newPurchasingDetail.ModifyDate   = serverTime;
                newPurchasingDetail.PurchasingId = purchasingInserted.Id;
                newPurchasingDetail.SparepartId  = itemPurchasingDetail.SparepartId;
                newPurchasingDetail.Qty          = itemPurchasingDetail.Qty;
                newPurchasingDetail.Price        = itemPurchasingDetail.Price;
                newPurchasingDetail.SerialNumber = itemPurchasingDetail.SerialNumber;
                newPurchasingDetail.Status       = (int)DbConstant.PurchasingStatus.NotVerified;

                _purchasingDetailRepository.AttachNavigation(newPurchasingDetail.CreateUser);
                _purchasingDetailRepository.AttachNavigation(newPurchasingDetail.ModifyUser);
                _purchasingDetailRepository.AttachNavigation(newPurchasingDetail.Purchasing);
                _purchasingDetailRepository.AttachNavigation(newPurchasingDetail.Sparepart);
                PurchasingDetail purchasingDetailInserted = _purchasingDetailRepository.Add(newPurchasingDetail);
            }
            _unitOfWork.SaveChanges();
            Recalculate(purchasingInserted);
        }
Example #13
0
    public void BuyProduct(string productID)

    {
        ProductPayRequest request = new ProductPayRequestBuild()
                                    .Info("Test 2", productID, DateTime.Now.ToString("yyyyMMddhhmmssfff"))
                                    .OptServiceCatalog("X6")
                                    .RsaSign(key)
                                    .Build();

        Purchasing.ProductPay(request, new ProductPayImpl());
    }
Example #14
0
 public Purchasing UpdatePurchasingOrder(Purchasing purchasing)
 {
     if (_workContext.CurrentUser != null)
     {
         purchasing.ModifiedBy = _workContext.CurrentUser.Id;
     }
     purchasing.ModifiedTime = DateTime.Now;
     _omsAccessor.Update <Purchasing>(purchasing);
     _omsAccessor.SaveChanges();
     return(purchasing);
 }
Example #15
0
 public ActionResult Edit([Bind(Include = "userId,filmId,userName,filmName,qty,date,purchasingId")] Purchasing purchasing)
 {
     if (ModelState.IsValid)
     {
         db.Entry(purchasing).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.filmId = new SelectList(db.Films, "id", "name", purchasing.filmId);
     return(View(purchasing));
 }
Example #16
0
        // GET: Purchasings/Details/5
        public ActionResult Details(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Purchasing purchasing = db.Purchasings.Find(id);

            if (purchasing == null)
            {
                return(HttpNotFound());
            }
            return(View(purchasing));
        }
Example #17
0
        // GET: Purchasings/Edit/5
        public ActionResult Edit(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Purchasing purchasing = db.Purchasings.Find(id);

            if (purchasing == null)
            {
                return(HttpNotFound());
            }
            ViewBag.filmId = new SelectList(db.Films, "id", "name", purchasing.filmId);
            return(View(purchasing));
        }
Example #18
0
        public ActionResult Create([Bind(Include = "userId,filmId,userName,filmName,qty,date,purchasingId")] Purchasing purchasing)
        {
            if (ModelState.IsValid)
            {
                string userId = User.Identity.GetUserId();
                purchasing.userId   = userId;
                purchasing.filmName = "new Film";
                purchasing.userName = "******";
                db.Purchasings.Add(purchasing);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.filmId = new SelectList(db.Films, "id", "name", purchasing.filmId);
            return(View(purchasing));
        }
Example #19
0
        public IActionResult PurchasingOrderDetail(Purchasing purchasing)
        {
            //权限
            if (!_permissionService.Authorize("SavePurchasingOrderInfo"))
            {
                return(Error("没有此权限!"));
            }

            var result = _purchasingService.UpdatePurchasingOrder(purchasing);

            //日志
            #region 保存信息
            var mark = "保存信息";
            _logService.InsertOrderTableLog("Purchasing", result.Id, "保存信息", Convert.ToInt32(result.State), mark);
            #endregion
            return(Success());
        }
Example #20
0
        /// <summary>
        /// 取消上传采购退单
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        public string CancelUploadPurchasingRefundOrder(int orderId)
        {
            Purchasing purcOrder = _omsAccessor.Get <Purchasing>().Where(r => r.Isvalid && r.Id == orderId).FirstOrDefault();

            if (purcOrder == null)
            {
                return((new { isSucc = false, msg = "发生错误,该采购退单信息有误!" }).ToString());
            }

            //处理SSL问题
            var httpClientHandler = new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true
            };

            using (var http = new HttpClient(httpClientHandler))
            {
                var content    = new StringContent(purcOrder.PurchasingNumber, Encoding.UTF8, "application/json");
                var requestUrl = AppConfigurtaionServices.Configuration["WMSApi:domain"] + "/wmsapi/PurchasingOrderSync/CancelUploadPurchasingRefundOrder";
                #region JWTBearer授权信息
                _workContext.CurrentHttpContext.Request.Cookies.TryGetValue("wms_token", out string token);
                if (string.IsNullOrEmpty(token))
                {
                    token = GetWMSOauthToken().Result;
                }
                http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
                #endregion
                var response = http.PostAsync(requestUrl, content).Result;
                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    var result = response.Content.ReadAsStringAsync();
                    return(result.Result.ToString());
                }
                else if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized)
                {
                    _logService.Error("取消采购退单上传方法失败,原因是API授权失败!请重试。");
                    return((new { isSucc = false, isOut = false, msg = "取消采购退单取消上传方法失败,原因是API授权失败!请重试。" }).ToString());
                }
                else
                {
                    _logService.Error(string.Format("取消采购退单取消上传方法失败,状态码:{0},RequestMessage:{1}", response.StatusCode, response.RequestMessage));
                    return((new { isSucc = false, isOut = false, msg = string.Format("取消采购退单取消上传方法失败,状态码:{0},RequestMessage:{1}", response.StatusCode, response.RequestMessage) }).ToString());
                }
            }
        }
Example #21
0
        public void DeleteDebt(TransactionViewModel transaction, int userID)
        {
            DateTime serverTime = DateTime.Now;

            Transaction transactionEntity = _transactionRepository.GetById(transaction.Id);

            transactionEntity.ModifyDate   = serverTime;
            transactionEntity.ModifyUserId = userID;
            transactionEntity.Status       = (int)DbConstant.DefaultDataStatus.Deleted;

            Purchasing purchasingEntity = _purchasingRepository.GetById(transaction.PrimaryKeyValue);

            NeutralizePurchasing(ref purchasingEntity, transactionEntity);

            _transactionRepository.Update(transactionEntity);
            _purchasingRepository.Update(purchasingEntity);
            _unitOfWork.SaveChanges();
        }
Example #22
0
        public async Task <int> addPurchasing(PurchasingViewModel c, IUrlHelper Url)
        {
            bool res = false;
            // var price = context.BrandModel.Select(x => new { x.Price, x.modelId }).FirstOrDefault(x => x.modelId == c.modelId);
            Purchasing model = new Purchasing()
            {
                Date      = c.Date,
                Quantity  = c.Quantity,
                Amount    = c.Amount,
                modelId   = c.modelId,
                vendor_id = c.vendor_id,
                store_id  = c.store_id,
                takenBy   = c.takenBy,
            };

            context.Purchasings.Add(model);
            context.SaveChanges();
            res = util.updateSingleQuantity(c.modelId, c.Quantity, c.store_id, "Add");
            if (res == false)
            {
                return(0);
            }
            string StoreName = util.GetAllStores().FirstOrDefault(x => x.store_id == c.store_id).StoreName;
            var    users     = UserManager.Users.Where(x => x.store_id == c.store_id).ToList();

            NotificationsViewModel n = new NotificationsViewModel();

            n.heading = "Purchasing #" + model.purchase_id;
            n.Text    = "Items Purchased By " + c.takenBy;
            n.Url     = Url.Action("Details", "Purchasing", new { id = model.purchase_id });
            n.read    = false;
            n.When    = DateTime.Now;
            await _hubContext.Clients.Groups(StoreName).SendAsync("RecieveNotification", n);

            foreach (var em in users)
            {
                n.UserId = em.Id;
                await util.AddNotification(n);
            }
            context.SaveChanges();
            return(model.purchase_id);
        }
        public void Recalculate(Purchasing purchasing)
        {
            List <PurchasingDetail> listPurchasingDetail = _purchasingDetailRepository.GetMany(c => c.PurchasingId == purchasing.Id).ToList();
            decimal totalPrice = 0;

            foreach (var itemPD in listPurchasingDetail)
            {
                totalPrice += itemPD.Qty * itemPD.Price;
            }

            purchasing.TotalPrice = totalPrice;

            _purchasingRepository.AttachNavigation(purchasing.CreateUser);
            _purchasingRepository.AttachNavigation(purchasing.ModifyUser);
            _purchasingRepository.AttachNavigation(purchasing.PaymentMethod);
            _purchasingRepository.AttachNavigation(purchasing.Supplier);

            _purchasingRepository.Update(purchasing);
            _unitOfWork.SaveChanges();
        }
Example #24
0
        private static void AnalyzeExcelData(StreamWriter sw)
        { // ExcelDataReaderというライブラリを使ってExcelファイルを読む。
            Purchasing purchase = new Purchasing();

            try
            {
                string path = @"C:\develop\Excel";
                System.Collections.Generic.IEnumerable <string> files = Directory.EnumerateFiles(path, "*.xlsx");
                foreach (string filenames in files)
                {
                    if (filenames.Contains('~'))
                    {
                        sw.WriteLine($"AnalyzeExcelData(1):<{filenames}> エクセルのテンポラリーファイルです。");
                    }
                    else
                    {
                        sw.WriteLine($"ExcelDataRead(2):<{filenames}>");
                        using FileStream stream = File.Open(filenames, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
                        using IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream);
                        DataSet ds = reader.AsDataSet();
                        System.Diagnostics.Debug.WriteLine($"DEBUG:AnalyzeExcelData(1): befor SumPurchasing()");
                        SumPurchasing(purchase, ds, sw);
                        try{
                            System.Diagnostics.Debug.WriteLine($"DEBUG:AnalyzeExcelData(2): after SumPurchasing()");
                        }catch (Exception e) {
                            System.Diagnostics.Debug.WriteLine($"DEBUG:AnalyzeExcelData(3):e=<{e}>");
                            sw.WriteLine($"AnalyzeExcelData(3):ERROR<{e.Message}>");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine($"DEBUG:AnalyzeExcelData(4):e=<{e}>");
                sw.WriteLine($"AnalyzeExcelData(4):ERROR<{e.Message}>");
            }
        }
Example #25
0
        public IActionResult AddPurchasingOrder(Purchasing purchasing)
        {
            //权限
            if (!_permissionService.Authorize("AddPurchasingOrder"))
            {
                return(Error("没有此权限!"));
            }



            purchasing.State            = PurchasingState.InitialStatus;
            purchasing.PurchasingNumber = _commonService.GetOrderSerialNumber("JR");
            var data = _purchasingService.AddPurchasing(purchasing);

            //日志
            #region 新增采购订单
            var mark = "新增采购订单:[" + data.PurchasingNumber + "]";
            _logService.InsertOrderTableLog("Purchasing", data.Id, "新增采购订单", Convert.ToInt32(data.State), mark);
            #endregion


            return(Success(data));
        }
        public void DeletePurchaseReturn(int purchaseReturnID, int userID)
        {
            using (var trans = _unitOfWork.BeginTransaction())
            {
                try
                {
                    //delete old purchase return
                    DateTime serverTime = DateTime.Now;

                    Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_PURCHASERETURN).FirstOrDefault();

                    PurchaseReturn purchaseReturn = _purchaseReturnRepository.GetById(purchaseReturnID);
                    purchaseReturn.Status       = (int)DbConstant.DefaultDataStatus.Deleted;
                    purchaseReturn.ModifyDate   = serverTime;
                    purchaseReturn.ModifyUserId = userID;

                    _purchaseReturnRepository.AttachNavigation(purchaseReturn.CreateUser);
                    _purchaseReturnRepository.AttachNavigation(purchaseReturn.ModifyUser);
                    _purchaseReturnRepository.AttachNavigation(purchaseReturn.Purchasing);
                    _purchaseReturnRepository.Update(purchaseReturn);
                    _unitOfWork.SaveChanges();

                    List <PurchaseReturnDetail> listDetail = _purchaseReturnDetailRepository.GetMany(x => x.PurchaseReturnId == purchaseReturnID).ToList();

                    foreach (var item in listDetail)
                    {
                        if (item.Qty > 0)
                        {
                            PurchasingDetail purchasingDetail = _purchasingDetailRepository.GetById(item.PurchasingDetailId);
                            purchasingDetail.QtyRemaining += item.Qty;
                            _purchasingDetailRepository.AttachNavigation(purchasingDetail.CreateUser);
                            _purchasingDetailRepository.AttachNavigation(purchasingDetail.ModifyUser);
                            _purchasingDetailRepository.AttachNavigation(purchasingDetail.Purchasing);
                            _purchasingDetailRepository.AttachNavigation(purchasingDetail.Sparepart);
                            _purchasingDetailRepository.Update(purchasingDetail);

                            SpecialSparepartDetail spDetail = _specialSparepartDetailRepository.GetMany(x => x.PurchasingDetailId == purchasingDetail.Id).FirstOrDefault();
                            if (spDetail != null)
                            {
                                spDetail.Status = (int)DbConstant.WheelDetailStatus.Ready;
                                _specialSparepartDetailRepository.AttachNavigation(spDetail.CreateUser);
                                _specialSparepartDetailRepository.AttachNavigation(spDetail.ModifyUser);
                                _specialSparepartDetailRepository.AttachNavigation(spDetail.PurchasingDetail);
                                _specialSparepartDetailRepository.AttachNavigation(spDetail.Sparepart);
                                _specialSparepartDetailRepository.AttachNavigation(spDetail.SparepartManualTransaction);
                                _specialSparepartDetailRepository.Update(spDetail);
                            }

                            _unitOfWork.SaveChanges();
                        }
                    }


                    List <ReturnViewModel> listReturn = listDetail
                                                        .GroupBy(l => l.PurchasingDetail.Sparepart)
                                                        .Select(cl => new ReturnViewModel
                    {
                        SparepartId  = cl.First().PurchasingDetail.SparepartId,
                        ReturQty     = cl.Sum(c => c.Qty),
                        SubTotalFee  = cl.Sum(c => c.PurchasingDetail.Price * c.Qty),
                        PricePerItem = cl.First().PurchasingDetail.Price,
                    }).ToList();

                    foreach (var itemDetail in listDetail)
                    {
                        itemDetail.Status       = (int)DbConstant.DefaultDataStatus.Deleted;
                        itemDetail.ModifyDate   = serverTime;
                        itemDetail.ModifyUserId = userID;

                        _purchaseReturnDetailRepository.AttachNavigation(itemDetail.CreateUser);
                        _purchaseReturnDetailRepository.AttachNavigation(itemDetail.ModifyUser);
                        _purchaseReturnDetailRepository.AttachNavigation(itemDetail.PurchaseReturn);
                        _purchaseReturnDetailRepository.AttachNavigation(itemDetail.PurchasingDetail);
                        _purchaseReturnDetailRepository.Update(itemDetail);
                    }

                    foreach (var itemReturn in listReturn)
                    {
                        Sparepart sparepart = _sparepartRepository.GetById(itemReturn.SparepartId);
                        sparepart.StockQty += itemReturn.ReturQty;

                        _sparepartRepository.AttachNavigation(sparepart.CreateUser);
                        _sparepartRepository.AttachNavigation(sparepart.ModifyUser);
                        _sparepartRepository.AttachNavigation(sparepart.CategoryReference);
                        _sparepartRepository.AttachNavigation(sparepart.UnitReference);
                        _sparepartRepository.Update(sparepart);

                        SparepartStockCard stockCard = new SparepartStockCard();
                        stockCard.CreateUserId     = userID;
                        stockCard.PurchaseDate     = serverTime;
                        stockCard.PrimaryKeyValue  = purchaseReturn.Id;
                        stockCard.ReferenceTableId = transactionReferenceTable.Id;
                        stockCard.SparepartId      = sparepart.Id;
                        stockCard.Description      = "Pembatalan Retur Pembelian";
                        stockCard.QtyIn            = itemReturn.ReturQty;
                        stockCard.QtyInPrice       = itemReturn.SubTotalFee.AsDouble();
                        SparepartStockCard lastStockCard  = _sparepartStokCardRepository.RetrieveLastCard(sparepart.Id);
                        double             lastStock      = 0;
                        double             lastStockPrice = 0;
                        if (lastStockCard != null)
                        {
                            lastStock      = lastStockCard.QtyLast;
                            lastStockPrice = lastStockCard.QtyLastPrice;
                        }
                        stockCard.QtyFirst      = lastStock;
                        stockCard.QtyFirstPrice = lastStockPrice;
                        stockCard.QtyLast       = lastStock + stockCard.QtyIn;
                        stockCard.QtyLastPrice  = lastStockPrice + stockCard.QtyInPrice;
                        _sparepartStokCardRepository.AttachNavigation(stockCard.CreateUser);
                        _sparepartStokCardRepository.AttachNavigation(stockCard.Sparepart);
                        _sparepartStokCardRepository.AttachNavigation(stockCard.ReferenceTable);
                        stockCard = _sparepartStokCardRepository.Add(stockCard);
                        _unitOfWork.SaveChanges();

                        SparepartStockCardDetail stockCardDtail = new SparepartStockCardDetail();
                        stockCardDtail.ParentStockCard = stockCard;
                        stockCardDtail.PricePerItem    = Convert.ToDouble(itemReturn.PricePerItem);
                        stockCardDtail.QtyIn           = itemReturn.ReturQty;
                        stockCardDtail.QtyInPrice      = itemReturn.SubTotalFee.AsDouble();
                        SparepartStockCardDetail lastStockCardDetail = _sparepartStokCardDetailRepository.RetrieveLastCardDetailByPurchasingId(sparepart.Id, purchaseReturn.PurchasingId);
                        double lastStockDetail      = 0;
                        double lastStockDetailPrice = 0;
                        if (lastStockCardDetail.QtyIn != null)
                        {
                            lastStockDetail      = lastStockCardDetail.QtyLast;
                            lastStockDetailPrice = lastStockCardDetail.QtyLastPrice;
                        }
                        stockCardDtail.QtyFirst      = lastStockDetail;
                        stockCardDtail.QtyFirstPrice = lastStockDetailPrice;
                        stockCardDtail.QtyLast       = lastStockDetail + stockCardDtail.QtyIn;
                        stockCardDtail.QtyLastPrice  = lastStockDetailPrice + stockCardDtail.QtyInPrice;
                        stockCardDtail.PurchasingId  = purchaseReturn.PurchasingId;
                        _sparepartStokCardDetailRepository.AttachNavigation(stockCardDtail.ParentStockCard);
                        _sparepartStokCardDetailRepository.Add(stockCardDtail);
                        _unitOfWork.SaveChanges();
                    }

                    _unitOfWork.SaveChanges();

                    Transaction transaction = _transactionRepository.GetMany(x => x.PrimaryKeyValue == purchaseReturnID && x.ReferenceTableId == transactionReferenceTable.Id).FirstOrDefault();
                    transaction.Status       = (int)DbConstant.DefaultDataStatus.Deleted;
                    transaction.ModifyDate   = serverTime;
                    transaction.ModifyUserId = userID;

                    _transactionRepository.AttachNavigation(transaction.CreateUser);
                    _transactionRepository.AttachNavigation(transaction.ModifyUser);
                    _transactionRepository.AttachNavigation(transaction.PaymentMethod);
                    _transactionRepository.AttachNavigation(transaction.ReferenceTable);
                    _transactionRepository.Update(transaction);

                    Purchasing purchasing = _purchasingRepository.GetById(purchaseReturn.PurchasingId);
                    purchasing.Status = (int)DbConstant.PurchasingStatus.Active;
                    if (purchasing.TotalPrice != purchasing.TotalHasPaid && (purchasing.TotalPrice - purchasing.TotalHasPaid) >= (decimal)transaction.TotalTransaction)
                    {
                        purchasing.TotalHasPaid -= (decimal)transaction.TotalTransaction;
                    }

                    if (purchasing.TotalPrice == purchasing.TotalHasPaid)
                    {
                        purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.Settled;
                    }
                    else
                    {
                        purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.NotSettled;
                    }

                    _purchasingRepository.AttachNavigation(purchasing.CreateUser);
                    _purchasingRepository.AttachNavigation(purchasing.ModifyUser);
                    _purchasingRepository.AttachNavigation(purchasing.PaymentMethod);
                    _purchasingRepository.AttachNavigation(purchasing.Supplier);


                    _unitOfWork.SaveChanges();
                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw;
                }
            }
        }
        public void Approve(PurchasingViewModel purchasing, int userID)
        {
            using (var trans = _unitOfWork.BeginTransaction())
            {
                try
                {
                    DateTime serverTime = DateTime.Now;

                    Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_PURCHASING).FirstOrDefault();

                    List <PurchasingDetail> listPurchasingDetail = _purchasingDetailRepository
                                                                   .GetMany(c => c.PurchasingId == purchasing.Id).ToList();
                    foreach (var purchasingDetail in listPurchasingDetail)
                    {
                        Sparepart sparepartDB = _sparepartRepository.GetById(purchasingDetail.SparepartId);

                        for (int i = 1; i <= purchasingDetail.Qty; i++)
                        {
                            if (!string.IsNullOrEmpty(purchasingDetail.SerialNumber))
                            {
                                SpecialSparepartDetail wd = new SpecialSparepartDetail();
                                wd.PurchasingDetail = purchasingDetail;
                                wd.SerialNumber     = purchasingDetail.SerialNumber;
                                wd.CreateUserId     = userID;
                                wd.CreateDate       = serverTime;
                                wd.ModifyUserId     = userID;
                                wd.ModifyDate       = serverTime;
                                wd.SparepartId      = sparepartDB.Id;
                                wd.Status           = (int)DbConstant.WheelDetailStatus.Ready;

                                _specialSparepartDetailRepository.AttachNavigation(purchasingDetail.CreateUser);
                                _specialSparepartDetailRepository.AttachNavigation(purchasingDetail.ModifyUser);
                                _specialSparepartDetailRepository.AttachNavigation(purchasingDetail);
                                _specialSparepartDetailRepository.AttachNavigation(purchasingDetail.Sparepart);;
                                _specialSparepartDetailRepository.Add(wd);
                            }
                        }

                        purchasingDetail.Status       = (int)DbConstant.PurchasingStatus.Active;
                        purchasingDetail.QtyRemaining = purchasingDetail.Qty;
                        _purchasingDetailRepository.AttachNavigation(purchasingDetail.CreateUser);
                        _purchasingDetailRepository.AttachNavigation(purchasingDetail.ModifyUser);
                        _purchasingDetailRepository.AttachNavigation(purchasingDetail.Purchasing);
                        _purchasingDetailRepository.AttachNavigation(purchasingDetail.Sparepart);
                        _purchasingDetailRepository.Update(purchasingDetail);

                        Sparepart sparepart = _sparepartRepository.GetById(purchasingDetail.SparepartId);
                        sparepart.StockQty += purchasingDetail.Qty;

                        _sparepartRepository.AttachNavigation(sparepart.CreateUser);
                        _sparepartRepository.AttachNavigation(sparepart.ModifyUser);
                        _sparepartRepository.AttachNavigation(sparepart.CategoryReference);
                        _sparepartRepository.AttachNavigation(sparepart.UnitReference);
                        _sparepartRepository.Update(sparepart);

                        SparepartStockCard stockCard = new SparepartStockCard();
                        stockCard.CreateUserId     = userID;
                        stockCard.PurchaseDate     = serverTime;
                        stockCard.PrimaryKeyValue  = purchasing.Id;
                        stockCard.ReferenceTableId = transactionReferenceTable.Id;
                        stockCard.SparepartId      = sparepart.Id;
                        stockCard.Description      = "Purchasing";
                        stockCard.QtyIn            = purchasingDetail.Qty;
                        stockCard.QtyInPrice       = Convert.ToDouble(purchasingDetail.Price * purchasingDetail.Qty);
                        SparepartStockCard lastStockCard  = _sparepartStokCardRepository.RetrieveLastCard(sparepart.Id);
                        double             lastStock      = 0;
                        double             lastStockPrice = 0;
                        if (lastStockCard != null)
                        {
                            lastStock      = lastStockCard.QtyLast;
                            lastStockPrice = lastStockCard.QtyLastPrice;
                        }
                        stockCard.QtyFirst      = lastStock;
                        stockCard.QtyFirstPrice = lastStockPrice;
                        stockCard.QtyLast       = lastStock + stockCard.QtyIn;
                        stockCard.QtyLastPrice  = lastStockPrice + stockCard.QtyInPrice;
                        _sparepartStokCardRepository.AttachNavigation(stockCard.CreateUser);
                        _sparepartStokCardRepository.AttachNavigation(stockCard.Sparepart);
                        _sparepartStokCardRepository.AttachNavigation(stockCard.ReferenceTable);
                        stockCard = _sparepartStokCardRepository.Add(stockCard);
                        _unitOfWork.SaveChanges();


                        SparepartStockCardDetail stockCardDtail = new SparepartStockCardDetail();
                        stockCardDtail.ParentStockCard = stockCard;
                        stockCardDtail.PricePerItem    = Convert.ToDouble(purchasingDetail.Price);
                        stockCardDtail.QtyIn           = purchasingDetail.Qty;
                        stockCardDtail.QtyInPrice      = Convert.ToDouble(purchasingDetail.Price * purchasingDetail.Qty);
                        SparepartStockCardDetail lastStockCardDetail = _sparepartStokCardDetailRepository.RetrieveLastCardDetailByPurchasingId(sparepart.Id, purchasing.Id);
                        double lastStockDetail      = 0;
                        double lastStockDetailPrice = 0;
                        if (lastStockCardDetail != null)
                        {
                            lastStockDetail      = lastStockCardDetail.QtyLast;
                            lastStockDetailPrice = lastStockCardDetail.QtyLastPrice;
                        }
                        stockCardDtail.QtyFirst      = lastStockDetail;
                        stockCardDtail.QtyFirstPrice = lastStockDetailPrice;
                        stockCardDtail.QtyLast       = lastStockDetail + stockCardDtail.QtyIn;
                        stockCardDtail.QtyLastPrice  = lastStockDetailPrice + stockCardDtail.QtyInPrice;
                        stockCardDtail.PurchasingId  = purchasing.Id;
                        _sparepartStokCardDetailRepository.AttachNavigation(stockCardDtail.ParentStockCard);
                        _sparepartStokCardDetailRepository.Add(stockCardDtail);
                        _unitOfWork.SaveChanges();
                    }

                    Reference refSelected = _referenceRepository.GetById(purchasing.PaymentMethodId);
                    purchasing.Status = (int)DbConstant.PurchasingStatus.Active;
                    if (refSelected != null &&
                        (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_EKONOMI ||
                         refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA1 ||
                         refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA2 ||
                         refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_KAS)
                        )
                    {
                        purchasing.TotalHasPaid = purchasing.TotalPrice;
                    }

                    if (purchasing.TotalHasPaid != purchasing.TotalPrice)
                    {
                        purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.NotSettled;
                    }
                    else
                    {
                        purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.Settled;
                    }
                    Purchasing entity = _purchasingRepository.GetById(purchasing.Id);
                    //Map(purchasing, entity);
                    entity.PaymentStatus   = purchasing.PaymentStatus;
                    entity.Status          = purchasing.Status;
                    entity.TotalHasPaid    = purchasing.TotalHasPaid;
                    entity.TotalPrice      = purchasing.TotalPrice;
                    entity.PaymentMethodId = purchasing.PaymentMethodId;
                    _purchasingRepository.AttachNavigation(entity.CreateUser);
                    _purchasingRepository.AttachNavigation(entity.ModifyUser);
                    _purchasingRepository.AttachNavigation(entity.PaymentMethod);
                    _purchasingRepository.AttachNavigation(entity.Supplier);
                    _purchasingRepository.Update(entity);
                    _unitOfWork.SaveChanges();

                    Transaction transaction = new Transaction();
                    transaction.TransactionDate  = purchasing.Date;
                    transaction.TotalPayment     = Convert.ToDouble(purchasing.TotalHasPaid);
                    transaction.TotalTransaction = Convert.ToDouble(purchasing.TotalPrice);
                    transaction.ReferenceTableId = transactionReferenceTable.Id;
                    transaction.PrimaryKeyValue  = purchasing.Id;
                    transaction.CreateDate       = serverTime;
                    transaction.CreateUserId     = userID;
                    transaction.ModifyUserId     = userID;
                    transaction.ModifyDate       = serverTime;
                    transaction.Status           = (int)DbConstant.DefaultDataStatus.Active;
                    transaction.Description      = "Pembelian sparepart";
                    transaction.PaymentMethodId  = purchasing.PaymentMethodId;

                    _transactionRepository.AttachNavigation(transaction.CreateUser);
                    _transactionRepository.AttachNavigation(transaction.ModifyUser);
                    _transactionRepository.AttachNavigation(transaction.PaymentMethod);
                    _transactionRepository.AttachNavigation(transaction.ReferenceTable);
                    Transaction transactionInserted = _transactionRepository.Add(transaction);
                    _unitOfWork.SaveChanges();

                    switch (refSelected.Code)
                    {
                    case DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_EKONOMI:
                    case DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA1:
                    case DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA2:
                    {
                        // Bank Kredit --> Karena berkurang
                        TransactionDetail detailBank = new TransactionDetail();
                        detailBank.Credit = purchasing.TotalHasPaid;
                        if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_EKONOMI)
                        {
                            detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.01").FirstOrDefault().Id;
                        }
                        else if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA1)
                        {
                            detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.02").FirstOrDefault().Id;
                        }
                        else if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA2)
                        {
                            detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.03").FirstOrDefault().Id;
                        }
                        detailBank.ParentId = transactionInserted.Id;

                        _transactionDetailRepository.AttachNavigation(detailBank.Journal);
                        _transactionDetailRepository.AttachNavigation(detailBank.Parent);
                        _transactionDetailRepository.Add(detailBank);
                        break;
                    }

                    case DbConstant.REF_PURCHASE_PAYMENTMETHOD_KAS:
                        // Kas Kredit --> Karena berkurang
                        TransactionDetail detailKas = new TransactionDetail();
                        detailKas.Credit    = purchasing.TotalHasPaid;
                        detailKas.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.01.01").FirstOrDefault().Id;
                        detailKas.ParentId  = transactionInserted.Id;

                        _transactionDetailRepository.AttachNavigation(detailKas.Journal);
                        _transactionDetailRepository.AttachNavigation(detailKas.Parent);
                        _transactionDetailRepository.Add(detailKas);
                        break;

                    case DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_KAS:
                        // Kas Kredit --> Karena berkurang
                        TransactionDetail detailKasKarenaUangMuka = new TransactionDetail();
                        detailKasKarenaUangMuka.Credit    = purchasing.TotalHasPaid;
                        detailKasKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.01.01").FirstOrDefault().Id;
                        detailKasKarenaUangMuka.ParentId  = transactionInserted.Id;

                        _transactionDetailRepository.AttachNavigation(detailKasKarenaUangMuka.Journal);
                        _transactionDetailRepository.AttachNavigation(detailKasKarenaUangMuka.Parent);
                        _transactionDetailRepository.Add(detailKasKarenaUangMuka);

                        // Uang Muka Debit --> Karena bertambah
                        TransactionDetail detailUangMukaBertambahKarenaKas = new TransactionDetail();
                        detailUangMukaBertambahKarenaKas.Debit     = purchasing.TotalHasPaid;
                        detailUangMukaBertambahKarenaKas.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id;
                        detailUangMukaBertambahKarenaKas.ParentId  = transactionInserted.Id;

                        _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaKas.Journal);
                        _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaKas.Parent);
                        _transactionDetailRepository.Add(detailUangMukaBertambahKarenaKas);

                        // Uang Muka Kredit --> Karena berkurang
                        TransactionDetail detailUangMukaBerkurangKarenaKas = new TransactionDetail();
                        detailUangMukaBerkurangKarenaKas.Credit    = purchasing.TotalHasPaid;
                        detailUangMukaBerkurangKarenaKas.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id;
                        detailUangMukaBerkurangKarenaKas.ParentId  = transactionInserted.Id;

                        _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaKas.Journal);
                        _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaKas.Parent);
                        _transactionDetailRepository.Add(detailUangMukaBerkurangKarenaKas);
                        break;

                    case DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_EKONOMI:
                    case DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA1:
                    case DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA2:
                    {
                        // Bank Kredit --> Karena berkurang
                        TransactionDetail detailBankKarenaUangMuka = new TransactionDetail();
                        detailBankKarenaUangMuka.Credit = purchasing.TotalHasPaid;
                        if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_EKONOMI)
                        {
                            detailBankKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.01").FirstOrDefault().Id;
                        }
                        else if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA1)
                        {
                            detailBankKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.02").FirstOrDefault().Id;
                        }
                        else if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA2)
                        {
                            detailBankKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.03").FirstOrDefault().Id;
                        }
                        detailBankKarenaUangMuka.ParentId = transactionInserted.Id;

                        _transactionDetailRepository.AttachNavigation(detailBankKarenaUangMuka.Journal);
                        _transactionDetailRepository.AttachNavigation(detailBankKarenaUangMuka.Parent);
                        _transactionDetailRepository.Add(detailBankKarenaUangMuka);

                        // Uang Muka Debit --> Karena bertambah
                        TransactionDetail detailUangMukaBertambahKarenaBank = new TransactionDetail();
                        detailUangMukaBertambahKarenaBank.Debit     = purchasing.TotalHasPaid;
                        detailUangMukaBertambahKarenaBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id;
                        detailUangMukaBertambahKarenaBank.ParentId  = transactionInserted.Id;

                        _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaBank.Journal);
                        _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaBank.Parent);
                        _transactionDetailRepository.Add(detailUangMukaBertambahKarenaBank);

                        // Uang Muka Kredit --> Karena berkurang
                        TransactionDetail detailUangMukaBerkurangKarenaBank = new TransactionDetail();
                        detailUangMukaBerkurangKarenaBank.Credit    = purchasing.TotalHasPaid;
                        detailUangMukaBerkurangKarenaBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id;
                        detailUangMukaBerkurangKarenaBank.ParentId  = transactionInserted.Id;

                        _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaBank.Journal);
                        _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaBank.Parent);
                        _transactionDetailRepository.Add(detailUangMukaBerkurangKarenaBank);
                        break;
                    }

                    case DbConstant.REF_PURCHASE_PAYMENTMETHOD_UTANG:
                        TransactionDetail utang = new TransactionDetail();
                        utang.Credit    = purchasing.TotalPrice - purchasing.TotalHasPaid;
                        utang.JournalId = _journalMasterRepository.GetMany(j => j.Code == "2.01.01.01").FirstOrDefault().Id;
                        utang.ParentId  = transactionInserted.Id;

                        _transactionDetailRepository.AttachNavigation(utang.Journal);
                        _transactionDetailRepository.AttachNavigation(utang.Parent);
                        _transactionDetailRepository.Add(utang);
                        break;
                    }

                    if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_EKONOMI ||
                        refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA1 ||
                        refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA2 ||
                        refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_KAS)
                    {
                        if (purchasing.TotalPrice > purchasing.TotalHasPaid)
                        {
                            // Utang Kredit --> Karena bertambah
                            TransactionDetail utang = new TransactionDetail();
                            utang.Credit    = purchasing.TotalPrice - purchasing.TotalHasPaid;
                            utang.JournalId = _journalMasterRepository.GetMany(j => j.Code == "2.01.01.01").FirstOrDefault().Id;
                            utang.ParentId  = transactionInserted.Id;

                            _transactionDetailRepository.AttachNavigation(utang.Journal);
                            _transactionDetailRepository.AttachNavigation(utang.Parent);
                            _transactionDetailRepository.Add(utang);
                        }
                    }

                    // Sparepart Debit --> Karena bertambah
                    TransactionDetail detailSparepart = new TransactionDetail();
                    detailSparepart.Debit     = purchasing.TotalPrice;
                    detailSparepart.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.04.01").FirstOrDefault().Id;
                    detailSparepart.ParentId  = transactionInserted.Id;

                    _transactionDetailRepository.AttachNavigation(detailSparepart.Journal);
                    _transactionDetailRepository.AttachNavigation(detailSparepart.Parent);
                    _transactionDetailRepository.Add(detailSparepart);

                    _unitOfWork.SaveChanges();

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw;
                }
            }
        }
Example #28
0
 public void CheckUpdate()
 {
     Purchasing.CheckUpdate(new CheckUpdateCallbackImpl());
 }
Example #29
0
        public void InsertDebt(TransactionViewModel transaction, decimal purchasingPrice, int userID)
        {
            DateTime  serverTime = DateTime.Now;
            Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_PURCHASING).FirstOrDefault();

            transaction.CreateDate       = serverTime;
            transaction.ModifyDate       = serverTime;
            transaction.CreateUserId     = userID;
            transaction.ModifyUserId     = userID;
            transaction.TransactionDate  = serverTime;
            transaction.TotalTransaction = purchasingPrice.AsDouble();
            transaction.ReferenceTableId = transactionReferenceTable.Id;
            transaction.Status           = (int)DbConstant.DefaultDataStatus.Active;
            transaction.Description      = "Pembayaran hutang";

            Transaction entity = new Transaction();

            Map(transaction, entity);
            Transaction transactionInserted = _transactionRepository.Add(entity);

            Purchasing purchasingEntity = _purchasingRepository.GetById(transaction.PrimaryKeyValue);

            purchasingEntity.TotalHasPaid += transaction.TotalPayment.AsDecimal();
            if (purchasingEntity.TotalHasPaid == purchasingEntity.TotalPrice)
            {
                purchasingEntity.PaymentStatus = (int)DbConstant.PaymentStatus.Settled;
            }
            _purchasingRepository.Update(purchasingEntity);

            Reference paymentMethod = _referenceRepository.GetById(transaction.PaymentMethodId);

            switch (paymentMethod.Code)
            {
            case DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_EKONOMI:
            case DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_BCA1:
            case DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_BCA2:
            {
                // Bank Kredit --> Karena berkurang
                TransactionDetail detailBank = new TransactionDetail();
                detailBank.Credit = transaction.TotalPayment.AsDecimal();
                if (paymentMethod.Code == DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_EKONOMI)
                {
                    detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.01").FirstOrDefault().Id;
                }
                else if (paymentMethod.Code == DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_BCA1)
                {
                    detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.02").FirstOrDefault().Id;
                }
                else if (paymentMethod.Code == DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_BCA2)
                {
                    detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.03").FirstOrDefault().Id;
                }
                detailBank.Parent = transactionInserted;
                _transactionDetailRepository.Add(detailBank);
                break;
            }

            case DbConstant.REF_DEBT_PAYMENTMETHOD_KAS:
                // Kas Kredit --> Karena berkurang
                TransactionDetail detailKas = new TransactionDetail();
                detailKas.Credit    = transaction.TotalPayment.AsDecimal();
                detailKas.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.01.01").FirstOrDefault().Id;
                detailKas.Parent    = transactionInserted;
                _transactionDetailRepository.Add(detailKas);
                break;
            }

            TransactionDetail detailDebt = new TransactionDetail();

            detailDebt.Debit     = transaction.TotalPayment.AsDecimal();
            detailDebt.JournalId = _journalMasterRepository.GetMany(j => j.Code == "2.01.01.01").FirstOrDefault().Id;
            detailDebt.Parent    = transactionInserted;
            _transactionDetailRepository.Add(detailDebt);
            _unitOfWork.SaveChanges();
        }
 public void AddToProducts(Purchasing.Product product)
 {
     base.AddObject("Products", product);
 }
Example #31
0
        public void UpdateDebt(TransactionViewModel transaction, int userID)
        {
            DateTime serverTime = DateTime.Now;

            transaction.ModifyDate   = serverTime;
            transaction.CreateUserId = userID;

            Transaction transactionUpdated = _transactionRepository.GetById <int>(transaction.Id);
            Transaction transactionOld     = transactionUpdated;

            Purchasing purchasingEntity = _purchasingRepository.GetById(transaction.PrimaryKeyValue);

            NeutralizePurchasing(ref purchasingEntity, transactionOld);

            purchasingEntity.TotalHasPaid += transaction.TotalPayment.AsDecimal();
            if (purchasingEntity.TotalHasPaid == purchasingEntity.TotalPrice)
            {
                purchasingEntity.PaymentStatus = (int)DbConstant.PaymentStatus.Settled;
            }
            _purchasingRepository.Update(purchasingEntity);

            Map(transaction, transactionUpdated);
            _transactionRepository.Update(transactionUpdated);

            Reference paymentMethod = _referenceRepository.GetById(transaction.PaymentMethodId);

            TransactionDetail debitDetail  = _transactionDetailRepository.GetMany(x => x.ParentId == transaction.Id && x.Credit == null).FirstOrDefault();
            TransactionDetail creditDetail = _transactionDetailRepository.GetMany(x => x.ParentId == transaction.Id && x.Debit == null).FirstOrDefault();

            switch (paymentMethod.Code)
            {
            case DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_EKONOMI:
            case DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_BCA1:
            case DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_BCA2:
            {
                // Bank Kredit --> Karena berkurang
                creditDetail.Credit = transaction.TotalPayment.AsDecimal();
                if (paymentMethod.Code == DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_EKONOMI)
                {
                    creditDetail.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.01").FirstOrDefault().Id;
                }
                else if (paymentMethod.Code == DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_BCA1)
                {
                    creditDetail.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.02").FirstOrDefault().Id;
                }
                else if (paymentMethod.Code == DbConstant.REF_DEBT_PAYMENTMETHOD_BANK_BCA2)
                {
                    creditDetail.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.03").FirstOrDefault().Id;
                }
                _transactionDetailRepository.Update(creditDetail);
                break;
            }

            case DbConstant.REF_DEBT_PAYMENTMETHOD_KAS:
                // Kas Kredit --> Karena berkurang
                creditDetail.Credit    = transaction.TotalPayment.AsDecimal();
                creditDetail.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.01.01").FirstOrDefault().Id;
                _transactionDetailRepository.Update(creditDetail);
                break;
            }

            debitDetail.Debit     = transaction.TotalPayment.AsDecimal();
            debitDetail.JournalId = _journalMasterRepository.GetMany(j => j.Code == "2.01.01.01").FirstOrDefault().Id;
            _transactionDetailRepository.Update(debitDetail);
            _unitOfWork.SaveChanges();
        }
 partial void OnProductChanging(Purchasing.Product value);